1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063 |
- (function() {
- var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
- var __module = nodeEnv ? module : {exports:{}};
- var __filename = 'preview-scripts/assets/Script/MainScene.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, '726051WgaxHep/G1I05lW4n', 'MainScene');
- // Script/MainScene.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 Global_1 = require("./Global");
- var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
- var MainScene = /** @class */ (function (_super) {
- __extends(MainScene, _super);
- function MainScene() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.boli = null;
- _this.dici = null;
- _this.lvdai = null;
- _this.shandian = null;
- _this.tanhuang = null;
- _this.Opplvdai = null;
- _this.GD = null;
- _this.failure = null;
- _this.fuhuo = null;
- _this.Player = null;
- _this.FHolderNode = null;
- _this.Bg = null;
- _this.LifeDing = null;
- _this.LEFT = null;
- _this.RIGHT = null;
- _this.output = null;
- // LIFE-CYCLE CALLBACKS:
- /**
- * 上一个落脚点生成时间
- */
- _this.STime = 0;
- /**
- * 当前落脚点生成时间
- */
- _this.ETime = 0;
- /** Left*/
- _this.LkeyDown = false;
- /** Right*/
- _this.RkeyDown = false;
- /**the loght FootHolder F */
- _this.lightF = false;
- _this.moveFalg = "";
- _this.USERINFO = {
- userId: "",
- score: 0,
- };
- return _this;
- }
- MainScene.prototype.onLoad = function () {
- var time = cc.sys.localStorage.getItem("hfsj");
- if (time == null || time == undefined || time == "") {
- cc.sys.localStorage.setItem("hfsj", "99");
- }
- this.LifeDing.zIndex = 10;
- this.FHolderNode.zIndex = 9;
- Global_1.default.instance.setMN(this.node);
- this.STime = Date.now();
- var FHolder = cc.instantiate(this.GD);
- this.FHolderNode.addChild(FHolder, 10, "GD");
- FHolder.getComponent("GD").init(this, 1);
- FHolder.y = -150;
- var FHolder2 = cc.instantiate(this.lvdai);
- this.FHolderNode.addChild(FHolder2, 10, "lvdai");
- FHolder2.getComponent("lvdai").init(this);
- FHolder2.y = -300;
- // let FHolder2 = cc.instantiate(this.tanhuang);
- // this.FHolderNode.addChild(FHolder2,10,"tanhuang");
- // FHolder2.getComponent("tanhuang").init(this);
- // FHolder2.y = -300;
- var FHolder3 = cc.instantiate(this.GD);
- this.FHolderNode.addChild(FHolder3, 10, "GD");
- FHolder3.getComponent("GD").init(this, 1);
- FHolder3.y = -450;
- // this.Player.active = false;
- this.Player.x = FHolder.x;
- // this.Player.y = FHolder.y+60;
- this.Player.zIndex = 11;
- for (var i = 0; i < this.LifeDing.children.length; i++) {
- if (this.LifeDing.children[i].name == "lifeBG") {
- if (!this.LifeDing.children[i].active) {
- this.LifeDing.children[i].active = true;
- }
- Global_1.default.instance.reLife.push(this.LifeDing.children[i]);
- }
- }
- cc.director.getCollisionManager().enabled = true;
- // cc.director.getCollisionManager().enabledDebugDraw = true;
- cc.director.getCollisionManager().enabledDrawBoundingBox = false;
- };
- MainScene.prototype.playtansound = function () {
- if (Global_1.default.instance.OverFlag == false) {
- cc.loader.loadRes("tan", cc.AudioClip, function (err, clip) {
- var audioID = cc.audioEngine.play(clip, false, 0.5);
- });
- }
- };
- MainScene.prototype.playdeadsound = function () {
- cc.loader.loadRes("dead", cc.AudioClip, function (err, clip) {
- var audioID = cc.audioEngine.play(clip, false, 0.5);
- });
- };
- MainScene.prototype.start = function () {
- };
- MainScene.prototype.update = function (dt) {
- // console.log(Global.instance.CollisionFlag);
- this.MoveBg();
- Global_1.default.instance.moveSpeed = 1;
- var FHolder;
- if ((this.ETime - this.STime) > (1200 - (180 * (Global_1.default.instance.FHFallSpeed - 2)))) { //控制落脚点之间的间距,间距144px
- this.STime = Date.now();
- if (!Global_1.default.instance.OverFlag) {
- FHolder = this.FootHoldGenerator(null);
- // this.Score();
- }
- }
- this.FHolder();
- this.reduceLife();
- if (Global_1.default.instance.CollisionFlag) { //左右传送带减速
- switch (Global_1.default.instance.KIND_FootHold) {
- case 3: {
- this.Player.x += 2;
- break;
- }
- case 4: {
- this.Player.x -= 2;
- break;
- }
- case 7: {
- if (Global_1.default.instance.LorR == 1) {
- this.Player.x--;
- }
- else {
- this.Player.x++;
- }
- break;
- }
- default: {
- break;
- }
- }
- }
- if (this.Player.x < -180) {
- this.Player.x = -180;
- }
- if (this.Player.x > 180) {
- this.Player.x = 180;
- }
- if (this.Player.y < (-510)) {
- for (var i = 0; i < this.LifeDing.children.length; i++) {
- if (this.LifeDing.children[i].name == "lifeBG") {
- this.LifeDing.children[i].active = false;
- }
- }
- this.gameOver();
- }
- if (Global_1.default.instance.reLife.length == 0) {
- this.gameOver();
- }
- this.ETime = Date.now();
- var AllChildren = new Array();
- var GDChildren = new Array();
- AllChildren = this.node.getChildByName("BgNode").getChildByName("FHolder").children;
- for (var i = 0; i < AllChildren.length; i++) {
- if (AllChildren[i].name == "GD") {
- GDChildren.push(AllChildren[i]);
- }
- }
- // cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.onKeyDown,this);
- //cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,this.onKeyUp,this);
- this.Listener();
- };
- MainScene.prototype.Listener = function () {
- var _this = this;
- var btnClickArr = new Array(2);
- if (!this.LkeyDown) {
- this.RIGHT.node.on(cc.Node.EventType.TOUCH_START, this.BtnTurnRight, this);
- this.RIGHT.node.on(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnRight, this);
- this.RIGHT.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
- btnClickArr.push(this.RIGHT);
- this.RIGHT.node.on(cc.Node.EventType.TOUCH_END, function () {
- _this.onKeyUp;
- }, this);
- }
- else {
- this.RIGHT.node.off(cc.Node.EventType.TOUCH_START, this.BtnTurnRight, this);
- this.RIGHT.node.off(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnRight, this);
- this.RIGHT.node.off(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
- this.RIGHT.node.off(cc.Node.EventType.TOUCH_END, function () {
- _this.onKeyUp;
- }, this);
- }
- if (!this.RkeyDown) {
- this.LEFT.node.on(cc.Node.EventType.TOUCH_START, this.BtnTurnLeft, this);
- this.LEFT.node.on(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnLeft, this);
- this.LEFT.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
- // btnClickArr.push(this.LEFT);
- this.LEFT.node.on(cc.Node.EventType.TOUCH_END, function () {
- _this.onKeyUp;
- }, this);
- }
- else {
- this.LEFT.node.off(cc.Node.EventType.TOUCH_START, this.BtnTurnLeft, this);
- this.LEFT.node.off(cc.Node.EventType.TOUCH_MOVE, this.BtnTurnLeft, this);
- this.LEFT.node.off(cc.Node.EventType.TOUCH_CANCEL, this.onKeyUp, this);
- this.LEFT.node.off(cc.Node.EventType.TOUCH_END, function () {
- _this.onKeyUp;
- }, this);
- }
- };
- MainScene.prototype.StopAni = function (self) {
- if (!Global_1.default.instance.AniFalg) {
- var FHolder = self.node.getChildByName("BgNode").getChildByName("FHolder").children;
- var Fname = void 0;
- for (var i = 0; FHolder.length; i++) {
- if (i == FHolder.length - 1) {
- Global_1.default.instance.AniFalg = true;
- return;
- }
- Fname = FHolder[i].name;
- FHolder[i].getComponent(Fname).enabled = false;
- }
- }
- };
- /**
- * player 移出落脚点
- */
- MainScene.prototype.FHolder = function () {
- var self = this;
- var FHArray = this.FHolderNode.children;
- var Ani; //the Animation of Player when player fall down
- var Anistate; //the state of Ani;
- for (var i = FHArray.length - 1; i >= 0; i--) {
- if (FHArray[i].isHold) {
- // let nameNode:string = FHArray[i].name;
- if (self.Player.x > (FHArray[i].x + 75)) {
- Global_1.default.instance.CollisionFlag = false;
- FHArray[i].isHold = false;
- // this.Score();
- }
- else if (self.Player.x < (FHArray[i].x - 75)) {
- Global_1.default.instance.CollisionFlag = false;
- FHArray[i].isHold = false;
- // this.Score();
- }
- else {
- Global_1.default.instance.CollisionFlag = true;
- FHArray[i].isHold = true;
- }
- }
- }
- };
- /**
- * 移动背景,初始移动速度200px/s
- */
- MainScene.prototype.MoveBg = function () {
- var Bg0 = this.Bg.getChildByName("Bg_0");
- var Bg1 = this.Bg.getChildByName("Bg_1");
- if (Global_1.default.instance.OverFlag) {
- }
- else {
- Bg0.y += Global_1.default.instance.FHFallSpeed + 1;
- Bg1.y += Global_1.default.instance.FHFallSpeed + 1;
- if (Bg0.y > 946) {
- Bg0.y = -946;
- }
- if (Bg1.y > 946) {
- Bg1.y = -946;
- }
- }
- };
- /**
- * 生成落脚点
- */
- MainScene.prototype.FootHoldGenerator = function (rtpe) {
- var self = this;
- var Magnification = 0;
- var f = parseInt(self.LifeDing.getChildByName("Floor").getComponent(cc.Label).string);
- if (f < 20) {
- Magnification = 2;
- }
- else if (f < 40) {
- Magnification = 4;
- }
- else if (f < 60) {
- Magnification = 6;
- }
- else if (f < 80) {
- Magnification = 8;
- }
- else {
- Magnification = 8;
- }
- var KindHolder = Math.ceil(Math.random() * Magnification);
- // KindHolder = 7;
- var FHolder;
- // KindHolder = Math.ceil(Math.random()*7);
- if (KindHolder == 3 || KindHolder == 4) {
- var va = Math.random() * 10;
- if (va >= 1 && va < 4) {
- KindHolder = 7;
- }
- else if (va >= 4 && va < 10) {
- KindHolder = 5;
- }
- //KindHolder = 5;
- console.log("KindHolder gb: " + KindHolder);
- }
- if (rtpe != null) {
- KindHolder = rtpe;
- console.log("KindHolder gb2: " + KindHolder);
- }
- this.ETime = Date.now();
- switch (KindHolder) {
- case 1: {
- FHolder = cc.instantiate(self.GD);
- self.FHolderNode.addChild(FHolder, 5, "GD");
- FHolder.getComponent("GD").init(self, 1);
- FHolder.isHold = false;
- // console.log("产生第一种落脚点");
- break;
- }
- case 2: {
- FHolder = cc.instantiate(self.GD);
- self.FHolderNode.addChild(FHolder, 5, "GD");
- FHolder.getComponent("GD").init(self, 7);
- FHolder.isHold = false;
- /*self.FootHoldGenerator();
- FHolder = cc.instantiate(self.tanhuang);
- self.FHolderNode.addChild(FHolder,5,"tanhuang");
- FHolder.getComponent("tanhuang").init(self);
- FHolder.isHold = false;
- // // console.log("产生第五种落脚点");
- // break;*/
- break;
- }
- case 3: {
- FHolder = cc.instantiate(self.lvdai);
- self.FHolderNode.addChild(FHolder, 5, "lvdai");
- FHolder.getComponent("lvdai").init(self);
- FHolder.isHold = false;
- // console.log("产生第二种落脚点");
- console.log(" 创建滚动 ");
- break;
- }
- case 4: {
- FHolder = cc.instantiate(self.lvdai);
- self.FHolderNode.addChild(FHolder, 5, "lvdai");
- FHolder.getComponent("lvdai").init(self);
- FHolder.isHold = false;
- // console.log("产生第五种落脚点");
- console.log(" 创建滚动1 ");
- break;
- }
- case 5: {
- FHolder = cc.instantiate(self.boli);
- self.FHolderNode.addChild(FHolder, 5, "boli");
- FHolder.getComponent("boli").init(self);
- FHolder.isHold = false;
- // console.log("产生第三种落脚点");
- break;
- }
- case 6: {
- FHolder = cc.instantiate(self.dici);
- self.FHolderNode.addChild(FHolder, 5, "dici");
- FHolder.getComponent("dici").init(self);
- FHolder.isHold = false;
- // console.log("产生第四种落脚点");
- break;
- }
- case 7: {
- FHolder = cc.instantiate(self.GD);
- self.FHolderNode.addChild(FHolder, 5, "GD");
- FHolder.getComponent("GD").init(self, 7);
- FHolder.isHold = false;
- break;
- }
- case 8: {
- if (self.lightF) {
- self.lightF = false;
- self.FootHoldGenerator(null);
- break;
- }
- FHolder = cc.instantiate(self.shandian);
- self.FHolderNode.addChild(FHolder, 5, "shandian");
- FHolder.getComponent("shandian").init(self);
- FHolder.isHold = false;
- self.lightF = true;
- break;
- }
- // default:{
- // FHolder = cc.instantiate(self.GD);
- // self.FHolderNode.addChild(FHolder,5,"GD");
- // FHolder.getComponent("GD").init(self);
- // FHolder.getComponent("GD").enabled = true;
- // FHolder.getComponent("MoveGD").init(self);
- // FHolder.getComponent("MoveGD").enabled = false;
- // FHolder.isHold = false;
- // // console.log("默认产生第一种落脚点");
- // }
- // break;
- }
- return FHolder;
- };
- /**
- * 按钮触发,向左,长按事件
- */
- MainScene.prototype.BtnTurnLeft = function (event) {
- var self = this;
- if (self.RkeyDown) {
- return;
- }
- else {
- self.LkeyDown = true;
- self.RkeyDown = false;
- this.BtnLorR(event);
- }
- };
- /**
- * 按钮触发,向右,长按事件,长按响应未解决
- */
- MainScene.prototype.BtnTurnRight = function (event) {
- var self = this;
- if (self.LkeyDown) {
- return;
- }
- else {
- self.LkeyDown = false;
- self.RkeyDown = true;
- this.BtnLorR(event);
- }
- };
- /**
- * btn触发事件
- * @param event 按钮触发事件
- */
- MainScene.prototype.BtnLorR = function (event) {
- var self = this;
- Global_1.default.instance.moveSpeed = 1;
- var schedule = cc.director.getScheduler();
- var stand = self.Player.getChildByName("stand");
- var runRight = self.Player.getChildByName("runRight");
- var run = self.Player.getChildByName("run");
- var Ani; //the animation of player
- var Anistate; //the Ani's state
- var Anistring; //the name of Ani
- var moveByTime = 1;
- var scheduleState = false; //the schedule's state
- var schedulePause = true;
- var target = null; //the target which is binged to schedule
- var moveByDes = Global_1.default.instance.moveSpeed * 120 + 40;
- if (self.LkeyDown) {
- target = self.LEFT;
- moveByTime = 1;
- moveByDes = -moveByDes;
- scheduleState = schedule.isScheduled(func, target);
- // self.output.getComponent(cc.Label).string = Anistring;
- schedulePause = schedule.isTargetPaused(target);
- Ani = run.getComponent(cc.Animation);
- Anistring = "run";
- stand.active = false;
- runRight.active = false;
- run.active = true;
- // self.output.getComponent(cc.Label).string = Anistring;
- if (!Global_1.default.instance.CollisionFlag) {
- moveByTime = 1;
- }
- else {
- switch (Global_1.default.instance.KIND_FootHold) {
- case 2: {
- moveByTime = 4.1;
- self.output.getComponent(cc.Label).string = Global_1.default.instance.KIND_FootHold + "2";
- break;
- }
- case 5: {
- moveByTime = 3.9;
- // self.output.getComponent(cc.Label).string = Global.instance.KIND_FootHold+"5";
- break;
- }
- }
- ;
- }
- }
- if (self.RkeyDown) {
- target = self.RIGHT;
- moveByTime = 1;
- moveByDes = moveByDes;
- scheduleState = schedule.isScheduled(func, target);
- // self.output.getComponent(cc.Label).string = Anistring;
- schedulePause = schedule.isTargetPaused(target);
- Ani = runRight.getComponent(cc.Animation);
- Anistring = "runR";
- stand.active = false;
- runRight.active = true;
- run.active = false;
- // self.output.getComponent(cc.Label).string = Anistring;
- if (!Global_1.default.instance.CollisionFlag) {
- moveByTime = 1;
- }
- else {
- switch (Global_1.default.instance.KIND_FootHold) {
- case 2: {
- moveByTime = 4.1;
- // self.output.getComponent(cc.Label).string = Global.instance.KIND_FootHold+"2";
- break;
- }
- case 5: {
- moveByTime = 3.9;
- // self.output.getComponent(cc.Label).string = Global.instance.KIND_FootHold+"5";
- break;
- }
- }
- ;
- }
- }
- var funcFlag = false;
- switch (event.type) {
- case "touchstart": {
- if (!(self.moveFalg.length == 0)) {
- break;
- }
- self.moveFalg = "touchstart";
- if (!scheduleState) {
- // self.output.getComponent(cc.Label).string = movefalg;
- schedule.schedule(func, target, 0);
- }
- ;
- if (schedulePause) {
- schedule.resumeTarget(target);
- }
- ;
- break;
- }
- case "touchmove": {
- if (!(self.moveFalg.length == 0)) {
- break;
- }
- self.moveFalg = "touchmove";
- // self.output.getComponent(cc.Label).string = movefalg;
- if (!scheduleState) {
- schedule.schedule(func, target, 0);
- }
- ;
- if (schedulePause) {
- schedule.resumeTarget(target);
- }
- ;
- break;
- }
- case "touchcancel": {
- break;
- }
- case "touchend": {
- // self.output.getComponent(cc.Label).string = "touchend";
- schedule.pauseTarget(target);
- self.Player.stopAllActions();
- Ani.stop(Anistring);
- moveByTime = 1;
- moveByDes = Global_1.default.instance.moveSpeed * 120 + 40;
- switch (Anistring) {
- case "run": {
- run.active = false;
- runRight.active = false;
- stand.active = true;
- self.LkeyDown = false;
- self.RkeyDown = false;
- moveByDes = Global_1.default.instance.moveSpeed / 2;
- break;
- }
- case "runR": {
- run.active = false;
- runRight.active = false;
- stand.active = true;
- self.LkeyDown = false;
- self.RkeyDown = false;
- moveByDes = Global_1.default.instance.moveSpeed / 2;
- break;
- }
- }
- funcFlag = false;
- self.moveFalg = "";
- break;
- }
- }
- function func() {
- if (funcFlag) {
- return;
- }
- if (Global_1.default.instance.CollisionFlag) {
- moveByTime = 1;
- }
- var spawn = cc.spawn(cc.callFunc(function () {
- self.Player.runAction(cc.moveBy(moveByTime, moveByDes, 0));
- }), cc.callFunc(function () {
- Anistate = Ani.play(Anistring);
- Anistate.speed = 1;
- Anistate.repeatCount = 100;
- Anistate = Ani.playAdditive(Anistring);
- }));
- self.Player.runAction(spawn);
- funcFlag = true;
- }
- };
- /**
- * 返回键监听
- * @param event 按下返回键退出游戏
- */
- MainScene.prototype.AniPlayer = function (Ani, Anistate, moveByTime, moveByDes, Key, AniName, self) {
- Ani = Key.getComponent(cc.Animation);
- var spawn = cc.spawn(cc.callFunc(function () {
- self.Player.runAction(cc.moveBy(moveByTime, moveByDes, 0));
- }), cc.callFunc(function () {
- Anistate = Ani.play(AniName);
- Anistate.speed = 2;
- Anistate.repeatCount = 100;
- }));
- self.Player.runAction(spawn);
- if (!Ani.state) {
- var spawn2 = cc.spawn(cc.callFunc(function () {
- self.Player.runAction(cc.moveBy(moveByTime, moveByDes, 0));
- }), cc.callFunc(function () {
- Anistate = Ani.play(AniName);
- Anistate.speed = 2;
- Anistate.repeatCount = 100;
- }));
- self.Player.runAction(spawn2);
- }
- };
- /**
- * 抬起动画停止
- * @param event 抬起左右键触发
- */
- MainScene.prototype.onKeyUp = function (event) {
- var self = this;
- self.LkeyDown = false;
- this.RkeyDown = false;
- self.Player.stopAllActions();
- var stand = this.Player.getChildByName("stand");
- var runRight = this.Player.getChildByName("runRight");
- var run = this.Player.getChildByName("run");
- stand.active = true;
- run.active = false;
- runRight.active = false;
- };
- /**
- * gameover
- */
- MainScene.prototype.gameOver = function () {
- var self = this;
- self.Player.stopAllActions();
- Global_1.default.instance.CollisionFlag = false;
- // self.Player.getComponent(cc.BoxCollider).enabled = false;
- self.Player.getComponent("Playcontroler").enabled = false;
- try {
- self.Player.getComponent(cc.Animation).stop();
- }
- catch (error) {
- self.node.getChildByName("output").getComponent(cc.Label).string = error;
- }
- self.Player.getChildByName("stand").active = true;
- self.Player.getChildByName("runRight").active = false;
- self.Player.getChildByName("run").active = false;
- self.Player.y -= Global_1.default.instance.InitSpeed;
- var AllFH = self.node.getChildByName("BgNode").getChildByName("FHolder").children;
- for (var i = 0; i < AllFH.length; i++) {
- var FHNA = AllFH[i].name;
- AllFH[i].getComponent(FHNA).enabled = false;
- AllFH[i].isHold = false;
- if (FHNA == "GD") {
- AllFH[i].getChildByName("gd").getComponent("CliGD").enabled = false;
- }
- }
- self.StopAni(self);
- var failure;
- var Ani;
- var Anistate;
- var BestScore;
- var thisScore;
- var lessScore;
- var Score;
- var fuhuo;
- var FAni;
- var FAnistate;
- self.LEFT.node.active = false;
- self.RIGHT.node.active = false;
- failure = cc.instantiate(self.failure);
- fuhuo = cc.instantiate(self.fuhuo);
- var fhuoBtnRank = fuhuo.getChildByName("cd").getChildByName("RankScene").getComponent(cc.Button);
- var fhuoBtnreGame = fuhuo.getChildByName("zl").getChildByName("rePlay").getComponent(cc.Button);
- var fhuoBtnFhuo = fuhuo.getChildByName("fh").getChildByName("rePlay").getComponent(cc.Button);
- var RankEventHandler = new cc.Component.EventHandler();
- var reGameEventHandler = new cc.Component.EventHandler();
- var FhuoEventHandler = new cc.Component.EventHandler();
- //open the ranking
- RankEventHandler.target = self.node;
- RankEventHandler.component = "MainScene";
- RankEventHandler.handler = "FBtnCB_Rank";
- RankEventHandler.customEventData = null;
- fhuoBtnRank.clickEvents.push(RankEventHandler);
- //replay
- reGameEventHandler.target = self.node;
- reGameEventHandler.component = "MainScene";
- reGameEventHandler.handler = "restart";
- reGameEventHandler.customEventData = null;
- fhuoBtnreGame.clickEvents.push(reGameEventHandler);
- //fh立即复活会有其他功能暂时用重新开始代替
- FhuoEventHandler.target = self.node;
- FhuoEventHandler.component = "MainScene";
- FhuoEventHandler.handler = "FBtnCB_rePlay";
- FhuoEventHandler.customEventData = null;
- fhuoBtnFhuo.clickEvents.push(FhuoEventHandler);
- if (!Global_1.default.instance.OverFlag) {
- Global_1.default.instance.OverFlag = true;
- self.StoregeScore();
- // self.UpdateScore();
- failure.y = -20;
- fuhuo.y = 0;
- thisScore = parseInt(self.LifeDing.getChildByName("Floor").getComponent(cc.Label).string);
- lessScore = failure.getChildByName("jl").getChildByName("LessScore");
- BestScore = Global_1.default.instance.getLocalScore().BestScore;
- Global_1.default.instance.GetUSer().score = BestScore;
- self.UpLoadScore();
- if (BestScore - thisScore <= 0) {
- failure.getChildByName("jl").active = false;
- }
- else {
- lessScore.getComponent(cc.Label).string = (BestScore - thisScore).toString();
- }
- Score = failure.getChildByName("cj").getChildByName("Score");
- self.node.addChild(failure);
- self.node.addChild(fuhuo);
- Score.getComponent(cc.Label).string = self.LifeDing.getChildByName("Floor").getComponent(cc.Label).string;
- Ani = failure.getComponent(cc.Animation); //the animation of failure;
- FAni = fuhuo.getComponent(cc.Animation);
- Anistate = Ani.play("shibai"); //the state of Ani;
- Anistate.speed = 1;
- Anistate.repeatCount = 1;
- }
- else {
- return;
- }
- self.playdeadsound();
- console.log("游戏结束!!!");
- };
- /**
- * 复活按钮的回调函数:打开排行榜
- */
- MainScene.prototype.FBtnCB_Rank = function (self) {
- this.destroy();
- cc.director.loadScene("EndScene");
- };
- /**
- * 复活按钮的回调函数:立即复活
- */
- MainScene.prototype.FBtnCB_rePlay = function () {
- cc.sys.localStorage.setItem("hfsj", "99");
- var self = this;
- Global_1.default.instance.OverFlag = false;
- Global_1.default.instance.AniFalg = false;
- Global_1.default.instance.LorR = 0;
- Global_1.default.instance.InitSpeed = 8.5;
- Global_1.default.instance.moveSpeed = 1;
- // Global.instance.FHFallSpeed = 2;
- Global_1.default.instance.CollisionFlag = false;
- Global_1.default.instance.CollisionWithDing = false;
- Global_1.default.instance.TheHolder = null;
- Global_1.default.instance.KIND_FootHold = 0;
- // this.RIGHT.node.off(cc.Node.EventType.TOUCH_START,this.BtnTurnRight,this);
- // this.RIGHT.node.off(cc.Node.EventType.TOUCH_MOVE,this.BtnTurnRight,this);
- // this.RIGHT.node.off(cc.Node.EventType.TOUCH_CANCEL,this.onKeyUp,this);
- this.LEFT.node.active = true;
- this.RIGHT.node.active = true;
- this.LkeyDown = false;
- this.RkeyDown = false;
- this.moveFalg = "";
- this.Player.y = 300;
- this.Player.x = 0;
- this.Player.getComponent("Playcontroler").enabled = true;
- this.Player.getComponent(cc.BoxCollider).enabled = true;
- var AllFH = this.node.getChildByName("BgNode").getChildByName("FHolder").children;
- this.node.getChildByName("SB").destroy();
- this.node.getChildByName("fuhuo1").destroy();
- for (var i = 0; i < this.LifeDing.children.length; i++) {
- //for(let i=0;i<2;i++){
- if (this.LifeDing.children[i].name == "lifeBG") {
- if (!this.LifeDing.children[i].active) {
- this.LifeDing.children[i].active = true;
- }
- Global_1.default.instance.reLife.push(this.LifeDing.children[i]);
- }
- }
- this.Player.getComponent(cc.BoxCollider).enabled = false;
- for (var i = 0; i < AllFH.length; i++) {
- AllFH[i].destroy();
- }
- var F = this.FootHoldGenerator(1);
- F.y = -380;
- this.scheduleOnce(function () {
- self.Player.getComponent(cc.BoxCollider).enabled = true;
- }, 0.5);
- };
- /**
- * restart
- */
- MainScene.prototype.restart = function () {
- this.destroy();
- cc.director.loadScene("MainScene");
- cc.director.resume();
- Global_1.default.instance.OverFlag = false;
- Global_1.default.instance.AniFalg = false;
- Global_1.default.instance.LorR = 0;
- Global_1.default.instance.InitSpeed = 8.5;
- Global_1.default.instance.moveSpeed = 1;
- Global_1.default.instance.FHFallSpeed = 2;
- Global_1.default.instance.CollisionFlag = false;
- Global_1.default.instance.CollisionWithDing = false;
- Global_1.default.instance.TheHolder = null;
- Global_1.default.instance.KIND_FootHold = 0;
- // this.RIGHT.node.off(cc.Node.EventType.TOUCH_START,this.BtnTurnRight,this);
- // this.RIGHT.node.off(cc.Node.EventType.TOUCH_MOVE,this.BtnTurnRight,this);
- // this.RIGHT.node.off(cc.Node.EventType.TOUCH_CANCEL,this.onKeyUp,this);
- this.LEFT.node.active = true;
- this.RIGHT.node.active = true;
- this.LkeyDown = false;
- this.RkeyDown = false;
- // this.moveFalg = "";
- this.Player.y = 300;
- // this.Score();
- };
- /**
- * 受到伤害,命数减一
- */
- MainScene.prototype.reduceLife = function () {
- var self = this;
- var Ls = new Array();
- var reLCount = 0;
- var FHolder = self.node.getChildByName("BgNode").getChildByName("FHolder").children;
- for (var i = 0; i < FHolder.length; i++) {
- if (FHolder[i].isHold) {
- if (!Global_1.default.instance.CollisionFlag) {
- FHolder[i].isHold = false;
- var box = FHolder[i].getComponent(cc.BoxCollider);
- box.enabled = false;
- }
- }
- }
- //
- for (var i = self.LifeDing.children.length - 1; i >= 0; i--) {
- if (self.LifeDing.children[i].name == "lifeBG") {
- if (Global_1.default.instance.Injured || Global_1.default.instance.CollisionWithDing) {
- if (self.LifeDing.children[i].active) {
- self.LifeDing.children[i].active = false;
- Global_1.default.instance.Injured = false;
- Global_1.default.instance.CollisionFlag = false;
- Global_1.default.instance.CollisionWithDing = false;
- }
- }
- Ls.push(self.LifeDing.children[i]);
- }
- }
- Global_1.default.instance.reLife = [];
- for (var i = 0; i < Ls.length; i++) {
- if (Ls[i].active) {
- Global_1.default.instance.reLife.push(Ls[i]); //player剩余的命数
- }
- }
- //
- var time = cc.sys.localStorage.getItem("hfsj");
- //console.log( time + "当前血 : " + Global.instance.reLife.length);
- if (Global_1.default.instance.reLife.length < 3) {
- if (time == 99) {
- var time_1 = Math.floor(Date.now() / 1000);
- cc.sys.localStorage.setItem("hfsj", time_1);
- }
- else {
- var time_2 = Math.floor(Date.now() / 1000);
- var timlod = parseInt(cc.sys.localStorage.getItem("hfsj"));
- var sub = time_2 - timlod;
- if (sub >= 20) {
- var sizes = Global_1.default.instance.reLife.length + 2;
- Global_1.default.instance.reLife = [];
- for (var i = 0; i < sizes; i++) {
- if (this.LifeDing.children[i].name == "lifeBG") {
- if (!this.LifeDing.children[i].active) {
- this.LifeDing.children[i].active = true;
- }
- Global_1.default.instance.reLife.push(this.LifeDing.children[i]);
- // console.log("push --------------" + i);
- }
- }
- cc.sys.localStorage.setItem("hfsj", time_2);
- // console.log(sizes + "恢复血+1---------------------------------------" + Global.instance.reLife.length);
- }
- }
- }
- else {
- cc.sys.localStorage.setItem("hfsj", "99");
- }
- };
- /**
- * 每下落一层,分数加一。
- */
- MainScene.prototype.Score = function () {
- var self = this.node;
- var scLabel = this.LifeDing.getChildByName("Floor").getComponent(cc.Label);
- var sc = parseInt(scLabel.string);
- if (!Global_1.default.instance.OverFlag) {
- sc = sc + 1;
- }
- this.playtansound();
- console.log("打印一下");
- scLabel.string = sc.toString();
- var lv = Math.ceil(sc / 50);
- if (lv > Global_1.default.instance.LevelAddFlag) {
- Global_1.default.instance.LevelAddFlag = lv;
- Global_1.default.instance.InitSpeed += 0.25; //每下落50层,player下落速度加0.25
- Global_1.default.instance.FHFallSpeed += 1; //没下落50层,落脚点下落速度加快0.5.
- }
- };
- /**
- * 本地分数存储
- */
- MainScene.prototype.StoregeScore = function () {
- var self = this;
- var localS = Global_1.default.instance.getLocalScore(); //the temp of local score;
- var CurrentScore = parseInt(this.LifeDing.getChildByName("Floor").getComponent(cc.Label).string);
- Global_1.default.instance.getLocalScore().CurrentScore = CurrentScore;
- if (CurrentScore > localS.ThirdScore) {
- if (CurrentScore > localS.SecondScore) {
- if (CurrentScore > localS.BestScore) {
- localS.BestScore = CurrentScore;
- return;
- }
- localS.SecondScore = CurrentScore;
- }
- localS.ThirdScore = CurrentScore;
- }
- };
- /**
- * upload the best score
- */
- MainScene.prototype.UpLoadScore = function () {
- var self = this;
- var tmp = Global_1.default.instance.GetUSer();
- /* Http.sendRequest("/updateScore",tmp,function(msg){
- let x = msg;
- if(msg.code!=0){
- Global.instance.NetStatus = false;
- }
- let ux = {
- userId:'',
- }
- console.log(x);
- ux.userId = Global.instance.GetUSer().userId;
- Http.sendRequest("/rank",ux,function(mmsg){
- console.log("------------------3");
- let MM = JSON.parse(mmsg.msg);
- console.log(MM);
- if(Global.instance.GetR()==null||Global.instance.GetR().rank==undefined||Global.instance.GetR().rank<MM.my.rank){
- Global.instance.SetR(MM.my.rank);
- Global.instance.setRemoteScore(MM.other);
- }
- });
- });*/
- };
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "boli", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "dici", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "lvdai", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "shandian", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "tanhuang", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "Opplvdai", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "GD", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "failure", void 0);
- __decorate([
- property(cc.Prefab)
- ], MainScene.prototype, "fuhuo", void 0);
- __decorate([
- property(cc.Node)
- ], MainScene.prototype, "Player", void 0);
- __decorate([
- property(cc.Node)
- ], MainScene.prototype, "FHolderNode", void 0);
- __decorate([
- property(cc.Node)
- ], MainScene.prototype, "Bg", void 0);
- __decorate([
- property(cc.Node)
- ], MainScene.prototype, "LifeDing", void 0);
- __decorate([
- property(cc.Button)
- ], MainScene.prototype, "LEFT", void 0);
- __decorate([
- property(cc.Button)
- ], MainScene.prototype, "RIGHT", void 0);
- __decorate([
- property(cc.Label)
- ], MainScene.prototype, "output", void 0);
- MainScene = __decorate([
- ccclass
- ], MainScene);
- return MainScene;
- }(cc.Component));
- exports.default = MainScene;
- 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxNYWluU2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQTZCO0FBRXZCLElBQUEsS0FBc0IsRUFBRSxDQUFDLFVBQVUsRUFBbEMsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFpQixDQUFDO0FBRzFDO0lBQXVDLDZCQUFZO0lBQW5EO1FBQUEscUVBdWdDQztRQXBnQ0csVUFBSSxHQUFhLElBQUksQ0FBQztRQUV0QixVQUFJLEdBQWEsSUFBSSxDQUFDO1FBRXRCLFdBQUssR0FBYSxJQUFJLENBQUM7UUFFdkIsY0FBUSxHQUFhLElBQUksQ0FBQztRQUUxQixjQUFRLEdBQWEsSUFBSSxDQUFDO1FBRTFCLGNBQVEsR0FBYSxJQUFJLENBQUM7UUFFMUIsUUFBRSxHQUFhLElBQUksQ0FBQztRQUVwQixhQUFPLEdBQWEsSUFBSSxDQUFDO1FBRXpCLFdBQUssR0FBYSxJQUFJLENBQUM7UUFHdkIsWUFBTSxHQUFXLElBQUksQ0FBQztRQUV0QixpQkFBVyxHQUFXLElBQUksQ0FBQztRQUUzQixRQUFFLEdBQVcsSUFBSSxDQUFDO1FBRWxCLGNBQVEsR0FBVyxJQUFJLENBQUM7UUFHeEIsVUFBSSxHQUFhLElBQUksQ0FBQztRQUV0QixXQUFLLEdBQWEsSUFBSSxDQUFDO1FBR3ZCLFlBQU0sR0FBWSxJQUFJLENBQUM7UUFHdkIsd0JBQXdCO1FBQ3hCOztXQUVHO1FBQ0ssV0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsQjs7V0FFRztRQUNLLFdBQUssR0FBRyxDQUFDLENBQUM7UUFFbEIsVUFBVTtRQUNGLGNBQVEsR0FBRyxLQUFLLENBQUM7UUFDekIsV0FBVztRQUNILGNBQVEsR0FBRyxLQUFLLENBQUM7UUFDekIsNEJBQTRCO1FBQ3BCLFlBQU0sR0FBRyxLQUFLLENBQUM7UUFFdkIsY0FBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLGNBQVEsR0FBRztZQUNQLE1BQU0s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T0FBTyxDQUFDO1lBQ2pCLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztTQUNYO2FBQ0c7WUFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFDO2dCQUM1QyxLQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pCLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBQztnQkFDMUMsS0FBSSxDQUFDLE9BQU8sQ0FBQztZQUNqQixDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7U0FDWDthQUNHO1lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBQztnQkFDM0MsS0FBSSxDQUFDLE9BQU8sQ0FBQztZQUNqQixDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7U0FDWDtJQUNMLENBQUM7SUFDRCwyQkFBTyxHQUFQLFVBQVEsSUFBSTtRQUNSLElBQUcsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUM7WUFDeEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNwRixJQUFJLEtBQUssU0FBQSxDQUFDO1lBQ1YsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBQztnQkFDM0IsSUFBRyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7b0JBQ3JCLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQy9CLE9BQU87aUJBQ1Y7Z0JBQ0QsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUNsRDtTQUNKO0lBQ0wsQ0FBQztJQUNEOztPQUVHO0lBQ0gsMkJBQU8sR0FBUDtRQUNJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNmLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3hDLElBQUksR0FBRyxDQUFDLENBQUEsK0NBQStDO1FBQ3ZELElBQUksUUFBUSxDQUFDLENBQUEsbUJBQW1CO1FBQ2hDLEtBQUksSUFBSSxDQUFDLEdBQUMsT0FBTyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQztZQUNoQyxJQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUM7Z0JBQ2pCLHlDQUF5QztnQkFDekMsSUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEVBQUM7b0JBQy9CLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUMxQixnQkFBZ0I7aUJBQ25CO3FCQUNJLElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxFQUFDO29CQUNwQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUN0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDMUIsZ0JBQWdCO2lCQUNuQjtxQkFDRztvQkFDQSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUNyQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztpQkFDNUI7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsMEJBQU0sR0FBTjtRQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFDO1NBQzNCO2FBQ0c7WUFDQSxHQUFHLENBQUMsQ0FBQyxJQUFFLGdCQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUM7WUFDckMsR0FBRyxDQUFDLENBQUMsSUFBRSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUcsR0FBRyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUM7Z0JBQ1QsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNoQjtZQUNELElBQUcsR0FBRyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUM7Z0JBQ1QsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNoQjtTQUNKO0lBRUwsQ0FBQztJQUNEOztPQUVHO0lBQ0gscUNBQWlCLEdBQWpCLFVBQWtCLElBQUk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixJQUFHLENBQUMsR0FBQyxFQUFFLEVBQUM7WUFDSixhQUFhLEdBQUcsQ0FBQyxDQUFBO1NBQ3BCO2FBQ0ksSUFBRyxDQUFDLEdBQUMsRUFBRSxFQUFDO1lBQ1QsYUFBYSxHQUFHLENBQUMsQ0FBQztTQUNyQjthQUNJLElBQUcsQ0FBQyxHQUFDLEVBQUUsRUFBQztZQUNULGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDckI7YUFDSSxJQUFHLENBQUMsR0FBQyxFQUFFLEVBQUM7WUFDVCxhQUFhLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO2FBQ0c7WUFDQSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsa0JBQWtCO1FBQ2xCLElBQUksT0FBTyxDQUFDO1FBQ1osMkNBQTJDO1FBR2pELElBQUssVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUN2QztZQUNDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBQyxFQUFFLENBQUM7WUFFMUIsSUFBSSxFQUFFLElBQUcsQ0FBQyxJQUFLLEVBQUUsR0FBRyxDQUFDLEVBQ3JCO2dCQUNDLFVBQVUsR0FBRyxDQUFDLENBQUM7YUFDZjtpQkFBSyxJQUFNLEVBQUUsSUFBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFDN0I7Z0JBQ0MsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUNmO1lBQ0QsaUJBQWlCO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLENBQUM7U0FDNUM7UUFHRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQ2hCO1lBQ0MsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxDQUFDO1NBQzdDO1FBRUssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsUUFBTyxVQUFVLEVBQUM7WUFDZCxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUNILE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsMkJBQTJCO2dCQUMzQixNQUFNO2FBQ1Q7WUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDdEI7Ozs7OzswQkFNVTtnQkFDdkIsTUFBTTthQUNHO1lBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQTtnQkFDSCxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsMkJBQTJCO2dCQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFFLFFBQVEsQ0FBRSxDQUFDO2dCQUNaLE1BQU07YUFDVDtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQ0gsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLDJCQUEyQjtnQkFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUUsQ0FBQztnQkFDYixNQUFNO2FBQ1Q7WUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUNILE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUN2QiwyQkFBMkI7Z0JBQzNCLE1BQU07YUFDVDtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQ0gsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLDJCQUEyQjtnQkFDM0IsTUFBTTthQUNUO1lBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQTtnQkFDSCxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLE1BQU07YUFDVDtZQUNELEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQ0gsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFDO29CQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdCLE1BQU07aUJBQ1Q7Z0JBQ0QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixNQUFNO2FBQ1Q7WUFDRCxZQUFZO1lBQ1oseUNBQXlDO1lBQ3pDLGlEQUFpRDtZQUNqRCw2Q0FBNkM7WUFDN0MsaURBQWlEO1lBQ2pELGlEQUFpRDtZQUNqRCxzREFBc0Q7WUFDdEQsOEJBQThCO1lBQzlCLG9DQUFvQztZQUNwQyxJQUFJO1lBQ0EsU0FBUztTQUNoQjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFDRDs7T0FFRztJQUNILCtCQUFXLEdBQVgsVUFBWSxLQUFLO1FBQ2IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztZQUNiLE9BQU87U0FDVjthQUNHO1lBQ0EsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGdDQUFZLEdBQVosVUFBYSxLQUFLO1FBQ2QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztZQUNiLE9BQU87U0FDVjthQUNHO1lBQ0EsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCwyQkFBTyxHQUFQLFVBQVEsS0FBSztRQUNULElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxHQUFHLENBQUMsQ0FBQSx5QkFBeUI7UUFDakMsSUFBSSxRQUFRLENBQUMsQ0FBQSxpQkFBaUI7UUFDOUIsSUFBSSxTQUFTLENBQUMsQ0FBQSxpQkFBaUI7UUFDL0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksYUFBYSxHQUFXLEtBQUssQ0FBQyxDQUFBLHNCQUFzQjtRQUN4RCxJQUFJLGFBQWEsR0FBVyxJQUFJLENBQUM7UUFDakMsSUFBSSxNQUFNLEdBQWEsSUFBSSxDQUFDLENBQUEsd0NBQXdDO1FBQ3BFLElBQUksU0FBUyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBQyxHQUFHLEdBQUMsRUFBRSxDQUFDO1FBQ2pELElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztZQUNiLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ25CLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDZixTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDdkIsYUFBYSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xELHlEQUF5RDtZQUN6RCxhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxHQUFHLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNsQixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNyQixRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN4QixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNsQix5REFBeUQ7WUFDekQsSUFBRyxDQUFDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBQztnQkFDOUIsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUNsQjtpQkFDRztnQkFDQSxRQUFPLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBQztvQkFDakMsS0FBSyxDQUFDLENBQUMsQ0FBQTt3QkFDSCxVQUFVLEdBQUcsR0FBRyxDQUFDO3dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBQyxHQUFHLENBQUM7d0JBQzlFLE1BQU07cUJBQ1Q7b0JBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQTt3QkFDSCxVQUFVLEdBQUcsR0FBRyxDQUFDO3dCQUNqQixpRkFBaUY7d0JBQ2pGLE1BQU07cUJBQ1Q7aUJBQ0o7Z0JBQUEsQ0FBQzthQUNMO1NBQ0o7UUFDRCxJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFDYixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNwQixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUN0QixhQUFhLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQseURBQXlEO1lBQ3pELGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELEdBQUcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQ25CLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ25CLHlEQUF5RDtZQUN6RCxJQUFHLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFDO2dCQUM5QixVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO2lCQUNHO2dCQUNBLFFBQU8sZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFDO29CQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFBO3dCQUNILFVBQVUsR0FBRyxHQUFHLENBQUM7d0JBQ2pCLGlGQUFpRjt3QkFDakYsTUFBTTtxQkFDVDtvQkFDRCxLQUFLLENBQUMsQ0FBQyxDQUFBO3dCQUNILFVBQVUsR0FBRyxHQUFHLENBQUM7d0JBQ2pCLGlGQUFpRjt3QkFDakYsTUFBTTtxQkFDVDtpQkFDSjtnQkFBQSxDQUFDO2FBQ0w7U0FDSjtRQUVELElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixRQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUM7WUFDZCxLQUFLLFlBQVksQ0FBQyxDQUFBO2dCQUNkLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFFLENBQUMsQ0FBQyxFQUFDO29CQUMxQixNQUFNO2lCQUNUO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO2dCQUM3QixJQUFHLENBQUMsYUFBYSxFQUFDO29CQUNkLHdEQUF3RDtvQkFDeEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwQztnQkFBQSxDQUFDO2dCQUNGLElBQUcsYUFBYSxFQUFDO29CQUNiLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ2pDO2dCQUFBLENBQUM7Z0JBQ0YsTUFBTTthQUNUO1lBQ0QsS0FBSyxXQUFXLENBQUMsQ0FBQTtnQkFDYixJQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsRUFBQztvQkFDMUIsTUFBTTtpQkFDVDtnQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztnQkFDNUIsd0RBQXdEO2dCQUN4RCxJQUFHLENBQUMsYUFBYSxFQUFDO29CQUNkLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEM7Z0JBQUEsQ0FBQztnQkFDRixJQUFHLGFBQWEsRUFBQztvQkFDYixRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNqQztnQkFBQSxDQUFDO2dCQUNGLE1BQU07YUFDVDtZQUNELEtBQUssYUFBYSxDQUFDLENBQUE7Z0JBQ2YsTUFBTTthQUNUO1lBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQTtnQkFDWiwwREFBMEQ7Z0JBQzFELFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BCLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsU0FBUyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBQyxHQUFHLEdBQUMsRUFBRSxDQUFDO2dCQUM3QyxRQUFPLFNBQVMsRUFBQztvQkFDYixLQUFLLEtBQUssQ0FBQyxDQUFBO3dCQUNQLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO3dCQUNuQixRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzt3QkFDeEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDdEIsU0FBUyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBQyxDQUFDLENBQUM7d0JBQ3hDLE1BQU07cUJBQ1Q7b0JBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQTt3QkFDUixHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzt3QkFDbkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQ3hCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO3dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7d0JBQ3RCLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDO3dCQUN4QyxNQUFNO3FCQUNUO2lCQUNKO2dCQUNELFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixNQUFNO2FBQ1Q7U0FDSjtRQUNELFNBQVMsSUFBSTtZQUNULElBQUcsUUFBUSxFQUFDO2dCQUNSLE9BQU87YUFDVjtZQUNELElBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFDO2dCQUM3QixVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNYLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQixRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7Z0JBQzNCLFFBQVEsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7SUFDTCxDQUFDO0lBR0Q7OztPQUdHO0lBRUgsNkJBQVMsR0FBVCxVQUFVLEdBQUcsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFDLElBQUs7UUFDekQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ1gsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDbkIsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDO1lBQ1YsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNYLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QixRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUNEOzs7T0FHRztJQUNILDJCQUFPLEdBQVAsVUFBUSxLQUFLO1FBQ1QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsNEJBQVEsR0FBUjtRQUNJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdCLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEMsNERBQTREO1FBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDMUQsSUFBSTtZQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNqRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQzVFO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUUsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDbEYsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUM7WUFDM0IsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN6QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDNUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBRyxJQUFJLElBQUcsSUFBSSxFQUFDO2dCQUNYLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDdkU7U0FDSjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLEdBQUcsQ0FBQztRQUNSLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxTQUFTLENBQUE7UUFDYixJQUFJLFNBQVMsQ0FBQztRQUNkLElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDL0IsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pHLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEcsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RixJQUFJLGdCQUFnQixHQUFHLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGtCQUFrQixHQUFHLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RCxJQUFJLGdCQUFnQixHQUFHLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxrQkFBa0I7UUFDbEIsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDcEMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUN6QyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3pDLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDeEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvQyxRQUFRO1FBQ1Isa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUMzQyxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3ZDLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDMUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNuRCx1QkFBdUI7UUFDdkIsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDcEMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUN6QyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO1FBQzNDLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDeEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvQyxJQUFHLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFDO1lBQ3pCLGdCQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLHNCQUFzQjtZQUN0QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1osU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFGLFNBQVMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyRSxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBRXRELGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUcsU0FBUyxHQUFHLFNBQVMsSUFBRSxDQUFDLEVBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUMvQztpQkFDRztnQkFDQSxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDaEY7WUFDRCxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFHLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBLDJCQUEyQjtZQUNwRSxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQSxtQkFBbUI7WUFDakQsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDbkIsUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDNUI7YUFDRztZQUNBLE9BQU87U0FDVjtRQUVQLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUdEOztPQUVHO0lBQ0gsK0JBQVcsR0FBWCxVQUFZLElBQUs7UUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxpQ0FBYSxHQUFiO1FBQ0QsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGdCQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDekIsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNoQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLG1DQUFtQztRQUNuQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEMsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3hELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDbEYsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkQsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBQztZQUMxQyx1QkFBdUI7WUFDbkIsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFDO2dCQUMxQyxJQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDO29CQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2lCQUMzQztnQkFDRCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDMUQ7U0FDSjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pELEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxLQUFLLENBQUMsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFDO1lBQzNCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVELENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRDs7T0FFRztJQUNILDJCQUFPLEdBQVA7UUFDSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLGdCQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNoQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDaEMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM5QixnQkFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFDLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQyw2RUFBNkU7UUFDN0UsNEVBQTRFO1FBQzVFLHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixnQkFBZ0I7SUFDcEIsQ0FBQztJQUVEOztNQUVFO0lBQ0YsOEJBQVUsR0FBVjtRQUNJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLEVBQUUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3JCLElBQUksUUFBUSxHQUFDLENBQUMsQ0FBQztRQUNmLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDcEYsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUM7WUFDN0IsSUFBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDO2dCQUNqQixJQUFHLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFDO29CQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDMUIsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2xELEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2lCQUN2QjthQUNKO1NBQ0o7UUFFUCxFQUFFO1FBRUksS0FBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUM7WUFDL0MsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUUsUUFBUSxFQUFDO2dCQUN4QyxJQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBRSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBQztvQkFDMUQsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUM7d0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQ3pDLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ2hDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQ3RDLGdCQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztxQkFDN0M7aUJBQ0o7Z0JBQ0QsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0o7UUFFRCxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzVCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFDO1lBQ3hCLElBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQztnQkFDWixnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsYUFBYTthQUNuRDtTQUNKO1FBQ1AsRUFBRTtRQUVGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxnRUFBZ0U7UUFDaEUsSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDckM7WUFFQyxJQUFJLElBQUksSUFBRSxFQUFFLEVBQ1o7Z0JBQ0UsSUFBSSxNQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsTUFBSSxDQUFDLENBQUM7YUFDM0M7aUJBQ0Q7Z0JBQ0UsSUFBSSxNQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUUsQ0FBQztnQkFDN0QsSUFBSSxHQUFHLEdBQUcsTUFBSSxHQUFFLE1BQU0sQ0FBQztnQkFFdkIsSUFBSSxHQUFHLElBQUcsRUFBRSxFQUNaO29CQUNDLElBQUksS0FBSyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO29CQUM1QyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUM1QixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsS0FBSyxFQUFDLENBQUMsRUFBRSxFQUFDO3dCQUN2QixJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUM7NEJBQzdDLElBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUM7Z0NBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7NkJBQ3hDOzRCQUNELGdCQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDdkQsMENBQTBDO3lCQUMxQztxQkFDRDtvQkFDRCxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDLE1BQUksQ0FBQyxDQUFDO29CQUMxQyx3R0FBd0c7aUJBQ3ZHO2FBQ0Y7U0FHRDthQUNEO1lBQ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsQ0FBQztTQUN6QztJQUVDLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUFLLEdBQUw7UUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFHLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFDO1lBQ3pCLEVBQUUsR0FBRyxFQUFFLEdBQUMsQ0FBQyxDQUFDO1NBQ2I7UUFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUcsRUFBRSxHQUFDLGdCQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBQztZQUMvQixnQkFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsQ0FBQSx3QkFBd0I7WUFDeEQsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFFLENBQUMsQ0FBQyxDQUFBLHNCQUFzQjtTQUN4RDtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGdDQUFZLEdBQVo7UUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxNQUFNLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQSwwQkFBMEI7UUFDdkUsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLGdCQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDNUQsSUFBRyxZQUFZLEdBQUMsTUFBTSxDQUFDLFVBQVUsRUFBQztZQUM5QixJQUFHLFlBQVksR0FBQyxNQUFNLENBQUMsV0FBVyxFQUFDO2dCQUMvQixJQUFHLFlBQVksR0FBQyxNQUFNLENBQUMsU0FBUyxFQUFDO29CQUM3QixNQUFNLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQztvQkFDaEMsT0FBTztpQkFDVjtnQkFDRCxNQUFNLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQzthQUNyQztZQUNELE1BQU0sQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsK0JBQVcsR0FBWDtRQUNJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLEdBQUcsR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQW1CTTtJQUNULENBQUM7SUFsZ0NEO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7MkNBQ0U7SUFFdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzsyQ0FDRTtJQUV0QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzRDQUNHO0lBRXZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7K0NBQ007SUFFMUI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzsrQ0FDTTtJQUUxQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOytDQUNNO0lBRTFCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7eUNBQ0E7SUFFcEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzs4Q0FDSztJQUV6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzRDQUNHO0lBR3ZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7NkNBQ0k7SUFFdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztrREFDUztJQUUzQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO3lDQUNBO0lBRWxCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7K0NBQ007SUFHeEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzsyQ0FDRTtJQUV0QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzRDQUNHO0lBR3ZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7NkNBQ0k7SUFwQ04sU0FBUztRQUQ3QixPQUFPO09BQ2EsU0FBUyxDQXVnQzdCO0lBQUQsZ0JBQUM7Q0F2Z0NELEFBdWdDQyxDQXZnQ3NDLEVBQUUsQ0FBQyxTQUFTLEdBdWdDbEQ7a0JBdmdDb0IsU0FBUyIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHbG9iYWwgZnJvbSBcIi4vR2xvYmFsXCJcclxuaW1wb3J0IEh0dHAgZnJvbSBcIi4vSHR0cFwiO1xyXG5jb25zdCB7Y2NjbGFzcywgcHJvcGVydHl9ID0gY2MuX2RlY29yYXRvcjtcclxuXHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haW5TY2VuZSBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIGJvbGk6Y2MuUHJlZmFiID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBkaWNpOmNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuUHJlZmFiKVxyXG4gICAgbHZkYWk6Y2MuUHJlZmFiID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBzaGFuZGlhbjpjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIHRhbmh1YW5nOmNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuUHJlZmFiKVxyXG4gICAgT3BwbHZkYWk6Y2MuUHJlZmFiID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBHRDpjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIGZhaWx1cmU6Y2MuUHJlZmFiID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBmdWh1bzpjYy5QcmVmYWIgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgUGxheWVyOmNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBGSG9sZGVyTm9kZTpjYy5Ob2RlID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgQmc6Y2MuTm9kZSA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIExpZmVEaW5nOmNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5CdXR0b24pXHJcbiAgICBMRUZUOmNjLkJ1dHRvbiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuQnV0dG9uKVxyXG4gICAgUklHSFQ6Y2MuQnV0dG9uID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTGFiZWwpXHJcbiAgICBvdXRwdXQ6Y2MuTGFiZWwgPSBudWxsO1xyXG5cclxuXHRcclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG4gICAgLyoqXHJcbiAgICAgKiDkuIrkuIDkuKrokL3ohJrngrnnlJ/miJDml7bpl7RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBTVGltZSA9IDA7XHJcbiAgICAvKipcclxuICAgICAqIOW9k+WJjeiQveiEmueCueeUn+aIkOaXtumXtFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIEVUaW1lID0gMDtcclxuXHJcbiAgICAvKiogTGVmdCovXHJcbiAgICBwcml2YXRlIExrZXlEb3duID0gZmFsc2U7XHJcbiAgICAvKiogUmlnaHQqL1xyXG4gICAgcHJpdmF0ZSBSa2V5RG93biA9IGZhbHNlO1xyXG4gICAgLyoqdGhlIGxvZ2h0IEZvb3RIb2xkZXIgRiAqL1xyXG4gICAgcHJpdmF0ZSBsaWdodEYgPSBmYWxzZTtcclxuXHJcbiAgICBtb3ZlRmFsZyA9IFwiXCI7XHJcblxyXG4gICAgVVNFUklORk8gPSB7XHJcbiAgICAgICAgdXNlcklkOlwiXCIsXHJcbiAgICAgICAgc2NvcmU6MCxcclxuICAgIH1cclxuXHJcbiAgICBvbkxvYWQgKCkge1xyXG4gICAgICAgIFxyXG5cdFx0dmFyIHRpbWUgPSBjYy5zeXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZnNqXCIpO1xyXG5cdFx0XHJcblx0XHRpZiggIHRpbWUgPT0gbnVsbCB8fCB0aW1lID09IHVuZGVmaW5lZCB8fCB0aW1lID09IFwiXCIpXHJcblx0XHR7XHJcblx0XHRcdCBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZnNqXCIsXCI5OVwiKTtcclxuXHRcdH1cclxuXHRcdFxyXG4gICAgICAgIHRoaXMuTGlmZURpbmcuekluZGV4ID0gMTA7XHJcbiAgICAgICAgdGhpcy5GSG9sZGVyTm9kZS56SW5kZXggPSA5O1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5zZXRNTih0aGlzLm5vZGUpO1xyXG4gICAgICAgIHRoaXMuU1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGxldCBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUodGhpcy5HRCk7XHJcbiAgICAgICAgdGhpcy5GSG9sZGVyTm9kZS5hZGRDaGlsZChGSG9sZGVyLDEwLFwiR0RcIik7XHJcbiAgICAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJHRFwiKS5pbml0KHRoaXMsMSk7XHJcbiAgICAgICAgRkhvbGRlci55ID0gLTE1MDtcclxuICAgICAgICBsZXQgRkhvbGRlcjIgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmx2ZGFpKTtcclxuICAgICAgICB0aGlzLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIyLDEwLFwibHZkYWlcIik7XHJcbiAgICAgICAgRkhvbGRlcjIuZ2V0Q29tcG9uZW50KFwibHZkYWlcIikuaW5pdCh0aGlzKTtcclxuICAgICAgICBGSG9sZGVyMi55ID0gLTMwMDtcclxuICAgICAgICAvLyBsZXQgRkhvbGRlcjIgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLnRhbmh1YW5nKTtcclxuICAgICAgICAvLyB0aGlzLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIyLDEwLFwidGFuaHVhbmdcIik7XHJcbiAgICAgICAgLy8gRkhvbGRlcjIuZ2V0Q29tcG9uZW50KFwidGFuaHVhbmdcIikuaW5pdCh0aGlzKTtcclxuICAgICAgICAvLyBGSG9sZGVyMi55ID0gLTMwMDtcclxuICAgICAgICBsZXQgRkhvbGRlcjMgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLkdEKTtcclxuICAgICAgICB0aGlzLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIzLDEwLFwiR0RcIik7XHJcbiAgICAgICAgRkhvbGRlcjMuZ2V0Q29tcG9uZW50KFwiR0RcIikuaW5pdCh0aGlzLDEpO1xyXG4gICAgICAgIEZIb2xkZXIzLnkgPSAtNDUwO1xyXG4gICAgICAgIC8vIHRoaXMuUGxheWVyLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuUGxheWVyLnggPSBGSG9sZGVyLng7XHJcbiAgICAgICAgLy8gdGhpcy5QbGF5ZXIueSA9IEZIb2xkZXIueSs2MDtcclxuICAgICAgICB0aGlzLlBsYXllci56SW5kZXggPSAxMTtcclxuICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuTGlmZURpbmcuY2hpbGRyZW4ubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0ubmFtZSA9PSBcImxpZmVCR1wiKXtcclxuICAgICAgICAgICAgICAgIGlmKCF0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5MaWZlRGluZy5jaGlsZHJlbltpXS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLnJlTGlmZS5wdXNoKHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNjLmRpcmVjdG9yLmdldENvbGxpc2lvbk1hbmFnZXIoKS5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAvLyBjYy5kaXJlY3Rvci5nZXRDb2xsaXNpb25NYW5hZ2VyKCkuZW5hYmxlZERlYnVnRHJhdyA9IHRydWU7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IuZ2V0Q29sbGlzaW9uTWFuYWdlcigpLmVuYWJsZWREcmF3Qm91bmRpbmdCb3ggPSBmYWxzZTtcclxuICAgIH1cclxuXHRcclxuXHRwbGF5dGFuc291bmQoKVxyXG5cdHtcclxuXHRcdGlmKCAgR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnID09IGZhbHNlIClcclxuXHRcdHtcclxuXHRcdFx0Y2MubG9hZGVyLmxvYWRSZXMoXCJ0YW5cIiwgY2MuQXVkaW9DbGlwLCBmdW5jdGlvbiAoZXJyLCBjbGlwKSB7XHJcblx0XHRcdFx0dmFyIGF1ZGlvSUQgPSBjYy5hdWRpb0VuZ2luZS5wbGF5KGNsaXAsIGZhbHNlLCAwLjUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0XHJcblx0XHRcclxuXHR9XHJcblx0XHJcblx0cGxheWRlYWRzb3VuZCgpXHJcblx0e1xyXG5cdFx0Y2MubG9hZGVyLmxvYWRSZXMoXCJkZWFkXCIsIGNjLkF1ZGlvQ2xpcCwgZnVuY3Rpb24gKGVyciwgY2xpcCkge1xyXG5cdFx0XHRcdHZhciBhdWRpb0lEID0gY2MuYXVkaW9FbmdpbmUucGxheShjbGlwLCBmYWxzZSwgMC41KTtcclxuXHRcdFx0fSk7XHJcblx0XHRcclxuXHR9XHJcblxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgIH1cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyk7XHJcbiAgICAgICAgdGhpcy5Nb3ZlQmcoKTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkID0gMTtcclxuICAgICAgICBsZXQgRkhvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoKHRoaXMuRVRpbWUtdGhpcy5TVGltZSk+KDEyMDAtKDE4MCooR2xvYmFsLmluc3RhbmNlLkZIRmFsbFNwZWVkLTIpKSkpey8v5o6n5Yi26JC96ISa54K55LmL6Ze055qE6Ze06LedLOmXtOi3nTE0NHB4XHJcbiAgICAgICAgICAgIHRoaXMuU1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICBpZighR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnKXtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIgPSB0aGlzLkZvb3RIb2xkR2VuZXJhdG9yKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5TY29yZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuRkhvbGRlcigpO1xyXG4gICAgICAgIHRoaXMucmVkdWNlTGlmZSgpO1xyXG4gICAgICAgIGlmKEdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnKXsvL+W3puWPs+S8oOmAgeW4puWHj+mAn1xyXG4gICAgICAgICAgICBzd2l0Y2goR2xvYmFsLmluc3RhbmNlLktJTkRfRm9vdEhvbGQpe1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlBsYXllci54ICs9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUGxheWVyLnggLT0gMjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgNzp7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoR2xvYmFsLmluc3RhbmNlLkxvclI9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBsYXllci54IC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBsYXllci54ICsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6e1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuUGxheWVyLng8LTE4MCl7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLnggPSAtMTgwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLlBsYXllci54PjE4MCl7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLnggPSAxODA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuUGxheWVyLnk8KC01MTApKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLkxpZmVEaW5nLmNoaWxkcmVuLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5MaWZlRGluZy5jaGlsZHJlbltpXS5uYW1lID09IFwibGlmZUJHXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nYW1lT3ZlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihHbG9iYWwuaW5zdGFuY2UucmVMaWZlLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZU92ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5FVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IEFsbENoaWxkcmVuID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgbGV0IEdEQ2hpbGRyZW4gPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBBbGxDaGlsZHJlbiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJnTm9kZVwiKS5nZXRDaGlsZEJ5TmFtZShcIkZIb2xkZXJcIikuY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKGxldCBpPTA7aTxBbGxDaGlsZHJlbi5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgaWYoQWxsQ2hpbGRyZW5baV0ubmFtZT09XCJHRFwiKXtcclxuICAgICAgICAgICAgICAgIEdEQ2hpbGRyZW4ucHVzaChBbGxDaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAvLyBjYy5zeXN0ZW1FdmVudC5vbihjYy5TeXN0ZW1FdmVudC5FdmVudFR5cGUuS0VZX0RPV04sdGhpcy5vbktleURvd24sdGhpcyk7XHJcbiAgICAgICAgLy9jYy5zeXN0ZW1FdmVudC5vbihjYy5TeXN0ZW1FdmVudC5FdmVudFR5cGUuS0VZX1VQLHRoaXMub25LZXlVcCx0aGlzKTtcclxuICAgICAgICB0aGlzLkxpc3RlbmVyKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgTGlzdGVuZXIoKXtcclxuICAgICAgICBsZXQgYnRuQ2xpY2tBcnIgPSBuZXcgQXJyYXkoMik7XHJcbiAgICAgICAgaWYoIXRoaXMuTGtleURvd24pe1xyXG4gICAgICAgICAgICB0aGlzLlJJR0hULm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsdGhpcy5CdG5UdXJuUmlnaHQsdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuUklHSFQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9NT1ZFLHRoaXMuQnRuVHVyblJpZ2h0LHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLlJJR0hULm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfQ0FOQ0VMLHRoaXMub25LZXlVcCx0aGlzKTtcclxuICAgICAgICAgICAgYnRuQ2xpY2tBcnIucHVzaCh0aGlzLlJJR0hUKTtcclxuICAgICAgICAgICAgdGhpcy5SSUdIVC5ub2RlLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwoKT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbktleVVwO1xyXG4gICAgICAgICAgICB9LHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX1NUQVJULHRoaXMuQnRuVHVyblJpZ2h0LHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX01PVkUsdGhpcy5CdG5UdXJuUmlnaHQsdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuUklHSFQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfQ0FOQ0VMLHRoaXMub25LZXlVcCx0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5SSUdIVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsKCk9PntcclxuICAgICAgICAgICAgICAgIHRoaXMub25LZXlVcDtcclxuICAgICAgICAgICAgfSx0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuUmtleURvd24pe1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCx0aGlzLkJ0blR1cm5MZWZ0LHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9NT1ZFLHRoaXMuQnRuVHVybkxlZnQsdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuTEVGVC5ub2RlLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCx0aGlzLm9uS2V5VXAsdGhpcyk7XHJcbiAgICAgICAgICAgIC8vIGJ0bkNsaWNrQXJyLnB1c2godGhpcy5MRUZUKTtcclxuICAgICAgICAgICAgdGhpcy5MRUZULm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5VXA7XHJcbiAgICAgICAgICAgIH0sdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuTEVGVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCx0aGlzLkJ0blR1cm5MZWZ0LHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfTU9WRSx0aGlzLkJ0blR1cm5MZWZ0LHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLkxFRlQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfQ0FOQ0VMLHRoaXMub25LZXlVcCx0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5MRUZULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwoKT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbktleVVwO1xyXG4gICAgICAgICAgICB9LHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFN0b3BBbmkoc2VsZil7XHJcbiAgICAgICAgaWYoIUdsb2JhbC5pbnN0YW5jZS5BbmlGYWxnKXtcclxuICAgICAgICAgICAgbGV0IEZIb2xkZXIgPSBzZWxmLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZ05vZGVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJGSG9sZGVyXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBsZXQgRm5hbWU7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO0ZIb2xkZXIubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBpZihpID09IEZIb2xkZXIubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5BbmlGYWxnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBGbmFtZSA9IEZIb2xkZXJbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXJbaV0uZ2V0Q29tcG9uZW50KEZuYW1lKS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHBsYXllciDnp7vlh7rokL3ohJrngrlcclxuICAgICAqL1xyXG4gICAgRkhvbGRlcigpe1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgIGxldCBGSEFycmF5ID0gdGhpcy5GSG9sZGVyTm9kZS5jaGlsZHJlbjtcclxuICAgICAgICBsZXQgQW5pOy8vdGhlIEFuaW1hdGlvbiBvZiBQbGF5ZXIgd2hlbiBwbGF5ZXIgZmFsbCBkb3duXHJcbiAgICAgICAgbGV0IEFuaXN0YXRlOy8vdGhlIHN0YXRlIG9mIEFuaTtcclxuICAgICAgICBmb3IobGV0IGk9RkhBcnJheS5sZW5ndGgtMTtpPj0wO2ktLSl7XHJcbiAgICAgICAgICAgIGlmKEZIQXJyYXlbaV0uaXNIb2xkKXtcclxuICAgICAgICAgICAgICAgIC8vIGxldCBuYW1lTm9kZTpzdHJpbmcgPSBGSEFycmF5W2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZihzZWxmLlBsYXllci54PihGSEFycmF5W2ldLngrNzUpKXtcclxuICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIEZIQXJyYXlbaV0uaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5TY29yZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihzZWxmLlBsYXllci54PChGSEFycmF5W2ldLngtNzUpKXtcclxuICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIEZIQXJyYXlbaV0uaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5TY29yZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgRkhBcnJheVtpXS5pc0hvbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog56e75Yqo6IOM5pmvLOWIneWni+enu+WKqOmAn+W6pjIwMHB4L3NcclxuICAgICAqL1xyXG4gICAgTW92ZUJnKCl7XHJcbiAgICAgICAgbGV0IEJnMCA9IHRoaXMuQmcuZ2V0Q2hpbGRCeU5hbWUoXCJCZ18wXCIpO1xyXG4gICAgICAgIGxldCBCZzEgPSB0aGlzLkJnLmdldENoaWxkQnlOYW1lKFwiQmdfMVwiKTtcclxuICAgICAgICBpZihHbG9iYWwuaW5zdGFuY2UuT3ZlckZsYWcpe1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBCZzAueSs9R2xvYmFsLmluc3RhbmNlLkZIRmFsbFNwZWVkKzE7XHJcbiAgICAgICAgICAgIEJnMS55Kz1HbG9iYWwuaW5zdGFuY2UuRkhGYWxsU3BlZWQrMTtcclxuICAgICAgICAgICAgaWYoQmcwLnk+OTQ2KXtcclxuICAgICAgICAgICAgICAgIEJnMC55ID0gLTk0NjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihCZzEueT45NDYpe1xyXG4gICAgICAgICAgICAgICAgQmcxLnkgPSAtOTQ2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDnlJ/miJDokL3ohJrngrlcclxuICAgICAqL1xyXG4gICAgRm9vdEhvbGRHZW5lcmF0b3IocnRwZSl7XHJcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGxldCBNYWduaWZpY2F0aW9uID0gMDtcclxuICAgICAgICBsZXQgZiA9IHBhcnNlSW50KHNlbGYuTGlmZURpbmcuZ2V0Q2hpbGRCeU5hbWUoXCJGbG9vclwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyk7XHJcbiAgICAgICAgaWYoZjwyMCl7XHJcbiAgICAgICAgICAgIE1hZ25pZmljYXRpb24gPSAyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoZjw0MCl7XHJcbiAgICAgICAgICAgIE1hZ25pZmljYXRpb24gPSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGY8NjApe1xyXG4gICAgICAgICAgICBNYWduaWZpY2F0aW9uID0gNjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihmPDgwKXtcclxuICAgICAgICAgICAgTWFnbmlmaWNhdGlvbiA9IDg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIE1hZ25pZmljYXRpb24gPSA4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgS2luZEhvbGRlciA9IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpKk1hZ25pZmljYXRpb24pO1xyXG4gICAgICAgIC8vIEtpbmRIb2xkZXIgPSA3O1xyXG4gICAgICAgIGxldCBGSG9sZGVyO1xyXG4gICAgICAgIC8vIEtpbmRIb2xkZXIgPSBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSo3KTtcclxuXHRcdFxyXG5cdFx0XHJcblx0XHRpZiggIEtpbmRIb2xkZXIgPT0gMyB8fCBLaW5kSG9sZGVyID09IDQgKVxyXG5cdFx0e1xyXG5cdFx0XHRsZXQgdmEgPSBNYXRoLnJhbmRvbSgpKjEwO1xyXG5cdFx0XHRcclxuXHRcdFx0aWYoIHZhID49MSAmJiAgdmEgPCA0ICApXHJcblx0XHRcdHtcclxuXHRcdFx0XHRLaW5kSG9sZGVyID0gNztcclxuXHRcdFx0fWVsc2UgaWYoICAgdmEgPj00ICYmIHZhIDwgMTAgIClcclxuXHRcdFx0e1xyXG5cdFx0XHRcdEtpbmRIb2xkZXIgPSA1O1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vS2luZEhvbGRlciA9IDU7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiS2luZEhvbGRlciBnYjogXCIgKyBLaW5kSG9sZGVyKTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0XHJcblx0XHRpZiggcnRwZSAhPSBudWxsIClcclxuXHRcdHtcclxuXHRcdFx0S2luZEhvbGRlciA9IHJ0cGU7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwiS2luZEhvbGRlciBnYjI6IFwiICsgS2luZEhvbGRlcik7XHJcblx0XHR9XHJcblx0XHRcclxuICAgICAgICB0aGlzLkVUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBzd2l0Y2goS2luZEhvbGRlcil7XHJcbiAgICAgICAgICAgIGNhc2UgMTp7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5HRCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsNSxcIkdEXCIpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJHRFwiKS5pbml0KHNlbGYsMSk7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLkuqfnlJ/nrKzkuIDnp43okL3ohJrngrlcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIDI6e1xyXG5cdFx0XHRcdCBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5HRCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsNSxcIkdEXCIpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJHRFwiKS5pbml0KHNlbGYsNyk7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgIC8qc2VsZi5Gb290SG9sZEdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICAgICAgIEZIb2xkZXIgPSBjYy5pbnN0YW50aWF0ZShzZWxmLnRhbmh1YW5nKTtcclxuICAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsNSxcInRhbmh1YW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgIEZIb2xkZXIuZ2V0Q29tcG9uZW50KFwidGFuaHVhbmdcIikuaW5pdChzZWxmKTtcclxuICAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gLy8gY29uc29sZS5sb2coXCLkuqfnlJ/nrKzkupTnp43okL3ohJrngrlcIik7XHJcbiAgICAgICAgICAgICAgICAvLyBicmVhazsqL1xyXG5cdFx0XHRcdGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgMzp7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5sdmRhaSk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsNSxcImx2ZGFpXCIpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJsdmRhaVwiKS5pbml0KHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5pc0hvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Lqn55Sf56ys5LqM56eN6JC96ISa54K5XCIpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCBcIiDliJvlu7rmu5rliqggXCIgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgNDp7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5sdmRhaSk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsNSxcImx2ZGFpXCIpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJsdmRhaVwiKS5pbml0KHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5pc0hvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Lqn55Sf56ys5LqU56eN6JC96ISa54K5XCIpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCBcIiDliJvlu7rmu5rliqgxIFwiICk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIDU6e1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlciA9IGNjLmluc3RhbnRpYXRlKHNlbGYuYm9saSk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsNSxcImJvbGlcIik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcImJvbGlcIikuaW5pdChzZWxmKTtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIuaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuS6p+eUn+esrOS4ieenjeiQveiEmueCuVwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgNjp7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5kaWNpKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlciw1LFwiZGljaVwiKTtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIuZ2V0Q29tcG9uZW50KFwiZGljaVwiKS5pbml0KHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgRkhvbGRlci5pc0hvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Lqn55Sf56ys5Zub56eN6JC96ISa54K5XCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSA3OntcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIgPSBjYy5pbnN0YW50aWF0ZShzZWxmLkdEKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlciw1LFwiR0RcIik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcIkdEXCIpLmluaXQoc2VsZiw3KTtcclxuICAgICAgICAgICAgICAgIEZIb2xkZXIuaXNIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIDg6e1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5saWdodEYpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGlnaHRGID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5Gb290SG9sZEdlbmVyYXRvcihudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEZIb2xkZXIgPSBjYy5pbnN0YW50aWF0ZShzZWxmLnNoYW5kaWFuKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuRkhvbGRlck5vZGUuYWRkQ2hpbGQoRkhvbGRlciw1LFwic2hhbmRpYW5cIik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcInNoYW5kaWFuXCIpLmluaXQoc2VsZik7XHJcbiAgICAgICAgICAgICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5saWdodEYgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZGVmYXVsdDp7XHJcbiAgICAgICAgICAgIC8vICAgICBGSG9sZGVyID0gY2MuaW5zdGFudGlhdGUoc2VsZi5HRCk7XHJcbiAgICAgICAgICAgIC8vICAgICBzZWxmLkZIb2xkZXJOb2RlLmFkZENoaWxkKEZIb2xkZXIsNSxcIkdEXCIpO1xyXG4gICAgICAgICAgICAvLyAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJHRFwiKS5pbml0KHNlbGYpO1xyXG4gICAgICAgICAgICAvLyAgICAgRkhvbGRlci5nZXRDb21wb25lbnQoXCJHRFwiKS5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gICAgIEZIb2xkZXIuZ2V0Q29tcG9uZW50KFwiTW92ZUdEXCIpLmluaXQoc2VsZik7XHJcbiAgICAgICAgICAgIC8vICAgICBGSG9sZGVyLmdldENvbXBvbmVudChcIk1vdmVHRFwiKS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vICAgICBGSG9sZGVyLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyAgICAgLy8gY29uc29sZS5sb2coXCLpu5jorqTkuqfnlJ/nrKzkuIDnp43okL3ohJrngrlcIik7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIC8vIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRkhvbGRlcjtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog5oyJ6ZKu6Kem5Y+R77yM5ZCR5bem77yM6ZW/5oyJ5LqL5Lu2XHJcbiAgICAgKi9cclxuICAgIEJ0blR1cm5MZWZ0KGV2ZW50KXtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYoc2VsZi5Sa2V5RG93bil7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgc2VsZi5Ma2V5RG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuUmtleURvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5CdG5Mb3JSKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmjInpkq7op6blj5HvvIzlkJHlj7Ms6ZW/5oyJ5LqL5Lu2LOmVv+aMieWTjeW6lOacquino+WGs1xyXG4gICAgICovXHJcbiAgICBCdG5UdXJuUmlnaHQoZXZlbnQpe1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZihzZWxmLkxrZXlEb3duKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBzZWxmLkxrZXlEb3duID0gZmFsc2VcclxuICAgICAgICAgICAgc2VsZi5Sa2V5RG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuQnRuTG9yUihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogYnRu6Kem5Y+R5LqL5Lu2XHJcbiAgICAgKiBAcGFyYW0gZXZlbnQg5oyJ6ZKu6Kem5Y+R5LqL5Lu2XHJcbiAgICAgKi9cclxuICAgIEJ0bkxvclIoZXZlbnQpe1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkID0gMTtcclxuICAgICAgICBsZXQgc2NoZWR1bGUgPSBjYy5kaXJlY3Rvci5nZXRTY2hlZHVsZXIoKTtcclxuICAgICAgICBsZXQgc3RhbmQgPSBzZWxmLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInN0YW5kXCIpO1xyXG4gICAgICAgIGxldCBydW5SaWdodCA9IHNlbGYuUGxheWVyLmdldENoaWxkQnlOYW1lKFwicnVuUmlnaHRcIik7XHJcbiAgICAgICAgbGV0IHJ1biA9IHNlbGYuUGxheWVyLmdldENoaWxkQnlOYW1lKFwicnVuXCIpO1xyXG4gICAgICAgIGxldCBBbmk7Ly90aGUgYW5pbWF0aW9uIG9mIHBsYXllclxyXG4gICAgICAgIGxldCBBbmlzdGF0ZTsvL3RoZSBBbmkncyBzdGF0ZVxyXG4gICAgICAgIGxldCBBbmlzdHJpbmc7Ly90aGUgbmFtZSBvZiBBbmlcclxuICAgICAgICBsZXQgbW92ZUJ5VGltZSA9IDE7XHJcbiAgICAgICAgbGV0IHNjaGVkdWxlU3RhdGU6Ym9vbGVhbiA9IGZhbHNlOy8vdGhlIHNjaGVkdWxlJ3Mgc3RhdGVcclxuICAgICAgICBsZXQgc2NoZWR1bGVQYXVzZTpib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBsZXQgdGFyZ2V0OmNjLkJ1dHRvbiA9IG51bGw7Ly90aGUgdGFyZ2V0IHdoaWNoIGlzIGJpbmdlZCB0byBzY2hlZHVsZVxyXG4gICAgICAgIGxldCBtb3ZlQnlEZXMgPSBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkKjEyMCs0MDtcclxuICAgICAgICBpZihzZWxmLkxrZXlEb3duKXtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5MRUZUO1xyXG4gICAgICAgICAgICBtb3ZlQnlUaW1lID0gMTtcclxuICAgICAgICAgICAgbW92ZUJ5RGVzID0gLW1vdmVCeURlcztcclxuICAgICAgICAgICAgc2NoZWR1bGVTdGF0ZSA9IHNjaGVkdWxlLmlzU2NoZWR1bGVkKGZ1bmMsdGFyZ2V0KTtcclxuICAgICAgICAgICAgLy8gc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBBbmlzdHJpbmc7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlUGF1c2UgPSBzY2hlZHVsZS5pc1RhcmdldFBhdXNlZCh0YXJnZXQpO1xyXG4gICAgICAgICAgICBBbmkgPSBydW4uZ2V0Q29tcG9uZW50KGNjLkFuaW1hdGlvbik7XHJcbiAgICAgICAgICAgIEFuaXN0cmluZyA9IFwicnVuXCI7XHJcbiAgICAgICAgICAgIHN0YW5kLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBydW5SaWdodC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcnVuLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gQW5pc3RyaW5nO1xyXG4gICAgICAgICAgICBpZighR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcpe1xyXG4gICAgICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHN3aXRjaChHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDQuMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCtcIjJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCeVRpbWUgPSAzLjk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gR2xvYmFsLmluc3RhbmNlLktJTkRfRm9vdEhvbGQrXCI1XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoc2VsZi5Sa2V5RG93bil7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuUklHSFQ7XHJcbiAgICAgICAgICAgIG1vdmVCeVRpbWUgPSAxO1xyXG4gICAgICAgICAgICBtb3ZlQnlEZXMgPSBtb3ZlQnlEZXM7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlU3RhdGUgPSBzY2hlZHVsZS5pc1NjaGVkdWxlZChmdW5jLHRhcmdldCk7XHJcbiAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gQW5pc3RyaW5nO1xyXG4gICAgICAgICAgICBzY2hlZHVsZVBhdXNlID0gc2NoZWR1bGUuaXNUYXJnZXRQYXVzZWQodGFyZ2V0KTtcclxuICAgICAgICAgICAgQW5pID0gcnVuUmlnaHQuZ2V0Q29tcG9uZW50KGNjLkFuaW1hdGlvbik7XHJcbiAgICAgICAgICAgIEFuaXN0cmluZyA9IFwicnVuUlwiO1xyXG4gICAgICAgICAgICBzdGFuZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcnVuUmlnaHQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcnVuLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBzZWxmLm91dHB1dC5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IEFuaXN0cmluZztcclxuICAgICAgICAgICAgaWYoIUdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnKXtcclxuICAgICAgICAgICAgICAgIG1vdmVCeVRpbWUgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2goR2xvYmFsLmluc3RhbmNlLktJTkRfRm9vdEhvbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCeVRpbWUgPSA0LjE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gR2xvYmFsLmluc3RhbmNlLktJTkRfRm9vdEhvbGQrXCIyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQnlUaW1lID0gMy45O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLm91dHB1dC5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IEdsb2JhbC5pbnN0YW5jZS5LSU5EX0Zvb3RIb2xkK1wiNVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBmdW5jRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIHN3aXRjaChldmVudC50eXBlKXtcclxuICAgICAgICAgICAgY2FzZSBcInRvdWNoc3RhcnRcIjp7XHJcbiAgICAgICAgICAgICAgICBpZighKHNlbGYubW92ZUZhbGcubGVuZ3RoPT0wKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZWxmLm1vdmVGYWxnID0gXCJ0b3VjaHN0YXJ0XCI7XHJcbiAgICAgICAgICAgICAgICBpZighc2NoZWR1bGVTdGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5vdXRwdXQuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBtb3ZlZmFsZztcclxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZS5zY2hlZHVsZShmdW5jLHRhcmdldCwwKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZihzY2hlZHVsZVBhdXNlKXtcclxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZS5yZXN1bWVUYXJnZXQodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwidG91Y2htb3ZlXCI6e1xyXG4gICAgICAgICAgICAgICAgaWYoIShzZWxmLm1vdmVGYWxnLmxlbmd0aD09MCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZi5tb3ZlRmFsZyA9IFwidG91Y2htb3ZlXCI7XHJcbiAgICAgICAgICAgICAgICAvLyBzZWxmLm91dHB1dC5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IG1vdmVmYWxnO1xyXG4gICAgICAgICAgICAgICAgaWYoIXNjaGVkdWxlU3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlLnNjaGVkdWxlKGZ1bmMsdGFyZ2V0LDApO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmKHNjaGVkdWxlUGF1c2Upe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlLnJlc3VtZVRhcmdldCh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3VjaGNhbmNlbFwiOntcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3VjaGVuZFwiOntcclxuICAgICAgICAgICAgICAgIC8vIHNlbGYub3V0cHV0LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCJ0b3VjaGVuZFwiO1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGUucGF1c2VUYXJnZXQodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIHNlbGYuUGxheWVyLnN0b3BBbGxBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgICBBbmkuc3RvcChBbmlzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDE7XHJcbiAgICAgICAgICAgICAgICBtb3ZlQnlEZXMgPSBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkKjEyMCs0MDtcclxuICAgICAgICAgICAgICAgIHN3aXRjaChBbmlzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJydW5cIjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuUmlnaHQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuTGtleURvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5Sa2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQnlEZXMgPSBHbG9iYWwuaW5zdGFuY2UubW92ZVNwZWVkLzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicnVuUlwiOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5SaWdodC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5Ma2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlJrZXlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCeURlcyA9IEdsb2JhbC5pbnN0YW5jZS5tb3ZlU3BlZWQvMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZnVuY0ZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHNlbGYubW92ZUZhbGcgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gZnVuYygpe1xyXG4gICAgICAgICAgICBpZihmdW5jRmxhZyl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcpe1xyXG4gICAgICAgICAgICAgICAgbW92ZUJ5VGltZSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHNwYXduID0gY2Muc3Bhd24oY2MuY2FsbEZ1bmMoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIHNlbGYuUGxheWVyLnJ1bkFjdGlvbihjYy5tb3ZlQnkobW92ZUJ5VGltZSxtb3ZlQnlEZXMsMCkpOyBcclxuICAgICAgICAgICAgfSksY2MuY2FsbEZ1bmMoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIEFuaXN0YXRlID0gQW5pLnBsYXkoQW5pc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIEFuaXN0YXRlLnNwZWVkID0gMTtcclxuICAgICAgICAgICAgICAgIEFuaXN0YXRlLnJlcGVhdENvdW50ID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgQW5pc3RhdGUgPSBBbmkucGxheUFkZGl0aXZlKEFuaXN0cmluZyk7XHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICBzZWxmLlBsYXllci5ydW5BY3Rpb24oc3Bhd24pO1xyXG4gICAgICAgICAgICBmdW5jRmxhZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIOi/lOWbnumUruebkeWQrFxyXG4gICAgICogQHBhcmFtIGV2ZW50IOaMieS4i+i/lOWbnumUrumAgOWHuua4uOaIj1xyXG4gICAgICovXHJcbiAgIFxyXG4gICAgQW5pUGxheWVyKEFuaSxBbmlzdGF0ZSxtb3ZlQnlUaW1lLG1vdmVCeURlcyxLZXksQW5pTmFtZSxzZWxmPyl7XHJcbiAgICAgICAgQW5pID0gS2V5LmdldENvbXBvbmVudChjYy5BbmltYXRpb24pO1xyXG5cclxuICAgICAgICBsZXQgc3Bhd24gPSBjYy5zcGF3bihjYy5jYWxsRnVuYyhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzZWxmLlBsYXllci5ydW5BY3Rpb24oY2MubW92ZUJ5KG1vdmVCeVRpbWUsbW92ZUJ5RGVzLDApKTtcclxuICAgICAgICB9KSxjYy5jYWxsRnVuYyhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBBbmlzdGF0ZSA9IEFuaS5wbGF5KEFuaU5hbWUpO1xyXG4gICAgICAgICAgICBBbmlzdGF0ZS5zcGVlZCA9IDI7XHJcbiAgICAgICAgICAgIEFuaXN0YXRlLnJlcGVhdENvdW50ID0gMTAwO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIHNlbGYuUGxheWVyLnJ1bkFjdGlvbihzcGF3bik7XHJcbiAgICAgICAgaWYoIUFuaS5zdGF0ZSl7XHJcbiAgICAgICAgICAgIGxldCBzcGF3bjIgPSBjYy5zcGF3bihjYy5jYWxsRnVuYyhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzZWxmLlBsYXllci5ydW5BY3Rpb24oY2MubW92ZUJ5KG1vdmVCeVRpbWUsbW92ZUJ5RGVzLDApKTtcclxuICAgICAgICB9KSxjYy5jYWxsRnVuYyhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBBbmlzdGF0ZSA9IEFuaS5wbGF5KEFuaU5hbWUpO1xyXG4gICAgICAgICAgICBBbmlzdGF0ZS5zcGVlZCA9IDI7XHJcbiAgICAgICAgICAgIEFuaXN0YXRlLnJlcGVhdENvdW50ID0gMTAwO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIHNlbGYuUGxheWVyLnJ1bkFjdGlvbihzcGF3bjIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog5oqs6LW35Yqo55S75YGc5q2iXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQg5oqs6LW35bem5Y+z6ZSu6Kem5Y+RXHJcbiAgICAgKi9cclxuICAgIG9uS2V5VXAoZXZlbnQpe1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLkxrZXlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5Sa2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHNlbGYuUGxheWVyLnN0b3BBbGxBY3Rpb25zKCk7XHJcbiAgICAgICAgbGV0IHN0YW5kID0gdGhpcy5QbGF5ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFuZFwiKTtcclxuICAgICAgICBsZXQgcnVuUmlnaHQgPSB0aGlzLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInJ1blJpZ2h0XCIpO1xyXG4gICAgICAgIGxldCBydW4gPSB0aGlzLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInJ1blwiKTtcclxuICAgICAgICBzdGFuZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHJ1bi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBydW5SaWdodC5hY3RpdmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBnYW1lb3ZlclxyXG4gICAgICovXHJcbiAgICBnYW1lT3Zlcigpe1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLlBsYXllci5zdG9wQWxsQWN0aW9ucygpO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnID0gZmFsc2U7XHJcbiAgICAgICAgLy8gc2VsZi5QbGF5ZXIuZ2V0Q29tcG9uZW50KGNjLkJveENvbGxpZGVyKS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgc2VsZi5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWNvbnRyb2xlclwiKS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc2VsZi5QbGF5ZXIuZ2V0Q29tcG9uZW50KGNjLkFuaW1hdGlvbikuc3RvcCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHNlbGYubm9kZS5nZXRDaGlsZEJ5TmFtZShcIm91dHB1dFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInN0YW5kXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgc2VsZi5QbGF5ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJydW5SaWdodFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBzZWxmLlBsYXllci5nZXRDaGlsZEJ5TmFtZShcInJ1blwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBzZWxmLlBsYXllci55LT1HbG9iYWwuaW5zdGFuY2UuSW5pdFNwZWVkO1xyXG4gICAgICAgIGxldCBBbGxGSCA9IHNlbGYubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJnTm9kZVwiKS5nZXRDaGlsZEJ5TmFtZShcIkZIb2xkZXJcIikuY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKGxldCBpPTA7aTxBbGxGSC5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgbGV0IEZITkEgPSBBbGxGSFtpXS5uYW1lO1xyXG4gICAgICAgICAgICBBbGxGSFtpXS5nZXRDb21wb25lbnQoRkhOQSkuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBBbGxGSFtpXS5pc0hvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYoRkhOQSA9PVwiR0RcIil7XHJcbiAgICAgICAgICAgICAgICBBbGxGSFtpXS5nZXRDaGlsZEJ5TmFtZShcImdkXCIpLmdldENvbXBvbmVudChcIkNsaUdEXCIpLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLlN0b3BBbmkoc2VsZik7XHJcbiAgICAgICAgbGV0IGZhaWx1cmU7XHJcbiAgICAgICAgbGV0IEFuaTtcclxuICAgICAgICBsZXQgQW5pc3RhdGU7XHJcbiAgICAgICAgbGV0IEJlc3RTY29yZVxyXG4gICAgICAgIGxldCB0aGlzU2NvcmU7XHJcbiAgICAgICAgbGV0IGxlc3NTY29yZTtcclxuICAgICAgICBsZXQgU2NvcmU7XHJcbiAgICAgICAgbGV0IGZ1aHVvO1xyXG4gICAgICAgIGxldCBGQW5pO1xyXG4gICAgICAgIGxldCBGQW5pc3RhdGU7XHJcbiAgICAgICAgc2VsZi5MRUZULm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgc2VsZi5SSUdIVC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZhaWx1cmUgPSBjYy5pbnN0YW50aWF0ZShzZWxmLmZhaWx1cmUpO1xyXG4gICAgICAgIGZ1aHVvID0gY2MuaW5zdGFudGlhdGUoc2VsZi5mdWh1byk7XHJcbiAgICAgICAgbGV0IGZodW9CdG5SYW5rID0gZnVodW8uZ2V0Q2hpbGRCeU5hbWUoXCJjZFwiKS5nZXRDaGlsZEJ5TmFtZShcIlJhbmtTY2VuZVwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKTtcclxuICAgICAgICBsZXQgZmh1b0J0bnJlR2FtZSA9IGZ1aHVvLmdldENoaWxkQnlOYW1lKFwiemxcIikuZ2V0Q2hpbGRCeU5hbWUoXCJyZVBsYXlcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbik7XHJcbiAgICAgICAgbGV0IGZodW9CdG5GaHVvID0gZnVodW8uZ2V0Q2hpbGRCeU5hbWUoXCJmaFwiKS5nZXRDaGlsZEJ5TmFtZShcInJlUGxheVwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKTtcclxuICAgICAgICBsZXQgUmFua0V2ZW50SGFuZGxlciA9IG5ldyBjYy5Db21wb25lbnQuRXZlbnRIYW5kbGVyKCk7XHJcbiAgICAgICAgbGV0IHJlR2FtZUV2ZW50SGFuZGxlciA9IG5ldyBjYy5Db21wb25lbnQuRXZlbnRIYW5kbGVyKCk7XHJcbiAgICAgICAgbGV0IEZodW9FdmVudEhhbmRsZXIgPSBuZXcgY2MuQ29tcG9uZW50LkV2ZW50SGFuZGxlcigpO1xyXG4gICAgICAgIC8vb3BlbiB0aGUgcmFua2luZ1xyXG4gICAgICAgIFJhbmtFdmVudEhhbmRsZXIudGFyZ2V0ID0gc2VsZi5ub2RlO1xyXG4gICAgICAgIFJhbmtFdmVudEhhbmRsZXIuY29tcG9uZW50ID0gXCJNYWluU2NlbmVcIjtcclxuICAgICAgICBSYW5rRXZlbnRIYW5kbGVyLmhhbmRsZXIgPSBcIkZCdG5DQl9SYW5rXCI7XHJcbiAgICAgICAgUmFua0V2ZW50SGFuZGxlci5jdXN0b21FdmVudERhdGEgPSBudWxsO1xyXG4gICAgICAgIGZodW9CdG5SYW5rLmNsaWNrRXZlbnRzLnB1c2goUmFua0V2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgLy9yZXBsYXlcclxuICAgICAgICByZUdhbWVFdmVudEhhbmRsZXIudGFyZ2V0ID0gc2VsZi5ub2RlO1xyXG4gICAgICAgIHJlR2FtZUV2ZW50SGFuZGxlci5jb21wb25lbnQgPSBcIk1haW5TY2VuZVwiO1xyXG4gICAgICAgIHJlR2FtZUV2ZW50SGFuZGxlci5oYW5kbGVyID0gXCJyZXN0YXJ0XCI7XHJcbiAgICAgICAgcmVHYW1lRXZlbnRIYW5kbGVyLmN1c3RvbUV2ZW50RGF0YSA9IG51bGw7XHJcbiAgICAgICAgZmh1b0J0bnJlR2FtZS5jbGlja0V2ZW50cy5wdXNoKHJlR2FtZUV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgLy9maOeri+WNs+Wkjea0u+S8muacieWFtuS7luWKn+iDveaaguaXtueUqOmHjeaWsOW8gOWni+S7o+abv1xyXG4gICAgICAgIEZodW9FdmVudEhhbmRsZXIudGFyZ2V0ID0gc2VsZi5ub2RlO1xyXG4gICAgICAgIEZodW9FdmVudEhhbmRsZXIuY29tcG9uZW50ID0gXCJNYWluU2NlbmVcIjtcclxuICAgICAgICBGaHVvRXZlbnRIYW5kbGVyLmhhbmRsZXIgPSBcIkZCdG5DQl9yZVBsYXlcIjtcclxuICAgICAgICBGaHVvRXZlbnRIYW5kbGVyLmN1c3RvbUV2ZW50RGF0YSA9IG51bGw7XHJcbiAgICAgICAgZmh1b0J0bkZodW8uY2xpY2tFdmVudHMucHVzaChGaHVvRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICBpZighR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnKXtcclxuICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLk92ZXJGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2VsZi5TdG9yZWdlU2NvcmUoKTtcclxuICAgICAgICAgICAgLy8gc2VsZi5VcGRhdGVTY29yZSgpO1xyXG4gICAgICAgICAgICBmYWlsdXJlLnkgPSAtMjA7XHJcbiAgICAgICAgICAgIGZ1aHVvLnkgPSAwO1xyXG4gICAgICAgICAgICB0aGlzU2NvcmUgPSBwYXJzZUludChzZWxmLkxpZmVEaW5nLmdldENoaWxkQnlOYW1lKFwiRmxvb3JcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcpO1xyXG4gICAgICAgICAgICBsZXNzU2NvcmUgPSBmYWlsdXJlLmdldENoaWxkQnlOYW1lKFwiamxcIikuZ2V0Q2hpbGRCeU5hbWUoXCJMZXNzU2NvcmVcIik7XHJcbiAgICAgICAgICAgIEJlc3RTY29yZSA9IEdsb2JhbC5pbnN0YW5jZS5nZXRMb2NhbFNjb3JlKCkuQmVzdFNjb3JlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkdldFVTZXIoKS5zY29yZSA9IEJlc3RTY29yZTtcclxuICAgICAgICAgICAgc2VsZi5VcExvYWRTY29yZSgpO1xyXG4gICAgICAgICAgICBpZihCZXN0U2NvcmUgLSB0aGlzU2NvcmU8PTApe1xyXG4gICAgICAgICAgICAgICAgZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcImpsXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBsZXNzU2NvcmUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSAoQmVzdFNjb3JlIC0gdGhpc1Njb3JlKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFNjb3JlID0gZmFpbHVyZS5nZXRDaGlsZEJ5TmFtZShcImNqXCIpLmdldENoaWxkQnlOYW1lKFwiU2NvcmVcIik7XHJcbiAgICAgICAgICAgIHNlbGYubm9kZS5hZGRDaGlsZChmYWlsdXJlKTtcclxuICAgICAgICAgICAgc2VsZi5ub2RlLmFkZENoaWxkKGZ1aHVvKTtcclxuICAgICAgICAgICAgU2NvcmUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBzZWxmLkxpZmVEaW5nLmdldENoaWxkQnlOYW1lKFwiRmxvb3JcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmc7XHJcbiAgICAgICAgICAgIEFuaSA9IGZhaWx1cmUuZ2V0Q29tcG9uZW50KGNjLkFuaW1hdGlvbik7Ly90aGUgYW5pbWF0aW9uIG9mIGZhaWx1cmU7XHJcbiAgICAgICAgICAgIEZBbmkgPSBmdWh1by5nZXRDb21wb25lbnQoY2MuQW5pbWF0aW9uKTtcclxuICAgICAgICAgICAgQW5pc3RhdGUgPSBBbmkucGxheShcInNoaWJhaVwiKTsvL3RoZSBzdGF0ZSBvZiBBbmk7XHJcbiAgICAgICAgICAgIEFuaXN0YXRlLnNwZWVkID0gMTtcclxuICAgICAgICAgICAgQW5pc3RhdGUucmVwZWF0Q291bnQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcblx0XHRzZWxmLnBsYXlkZWFkc291bmQoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIua4uOaIj+e7k+adn++8ge+8ge+8gVwiKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlpI3mtLvmjInpkq7nmoTlm57osIPlh73mlbDvvJrmiZPlvIDmjpLooYzmppxcclxuICAgICAqL1xyXG4gICAgRkJ0bkNCX1Jhbmsoc2VsZj8pe1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkVuZFNjZW5lXCIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDlpI3mtLvmjInpkq7nmoTlm57osIPlh73mlbDvvJrnq4vljbPlpI3mtLtcclxuICAgICAqL1xyXG4gICAgRkJ0bkNCX3JlUGxheSgpe1xyXG5cdFx0IGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhmc2pcIixcIjk5XCIpO1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuT3ZlckZsYWcgPSBmYWxzZTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQW5pRmFsZyA9IGZhbHNlO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Mb3JSID0gMDtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuSW5pdFNwZWVkID0gOC41O1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5tb3ZlU3BlZWQgPSAxO1xyXG4gICAgICAgIC8vIEdsb2JhbC5pbnN0YW5jZS5GSEZhbGxTcGVlZCA9IDI7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcgPSBmYWxzZTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uV2l0aERpbmcgPSBmYWxzZTtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuVGhlSG9sZGVyID0gbnVsbDtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuS0lORF9Gb290SG9sZCA9IDA7XHJcbiAgICAgICAgLy8gdGhpcy5SSUdIVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCx0aGlzLkJ0blR1cm5SaWdodCx0aGlzKTtcclxuICAgICAgICAvLyB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX01PVkUsdGhpcy5CdG5UdXJuUmlnaHQsdGhpcyk7XHJcbiAgICAgICAgLy8gdGhpcy5SSUdIVC5ub2RlLm9mZihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9DQU5DRUwsdGhpcy5vbktleVVwLHRoaXMpO1xyXG4gICAgICAgIHRoaXMuTEVGVC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5SSUdIVC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5Ma2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuUmtleURvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vdmVGYWxnID0gXCJcIjtcclxuICAgICAgICB0aGlzLlBsYXllci55ID0gMzAwO1xyXG5cdFx0dGhpcy5QbGF5ZXIueCA9IDA7XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWNvbnRyb2xlclwiKS5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoY2MuQm94Q29sbGlkZXIpLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBBbGxGSCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJnTm9kZVwiKS5nZXRDaGlsZEJ5TmFtZShcIkZIb2xkZXJcIikuY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiU0JcIikuZGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImZ1aHVvMVwiKS5kZXN0cm95KCk7XHJcblx0XHRmb3IobGV0IGk9MDtpPHRoaXMuTGlmZURpbmcuY2hpbGRyZW4ubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgLy9mb3IobGV0IGk9MDtpPDI7aSsrKXtcclxuICAgICAgICAgICAgaWYodGhpcy5MaWZlRGluZy5jaGlsZHJlbltpXS5uYW1lID09IFwibGlmZUJHXCIpe1xyXG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0uYWN0aXZlKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UucmVMaWZlLnB1c2godGhpcy5MaWZlRGluZy5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KGNjLkJveENvbGxpZGVyKS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yKGxldCBpPTA7aTxBbGxGSC5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgQWxsRkhbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgRiA9IHRoaXMuRm9vdEhvbGRHZW5lcmF0b3IoMSk7XHJcbiAgICAgICAgRi55ID0gLTM4MDtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlT25jZSgoKT0+e1xyXG4gICAgICAgICAgICBzZWxmLlBsYXllci5nZXRDb21wb25lbnQoY2MuQm94Q29sbGlkZXIpLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH0sMC41KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogcmVzdGFydFxyXG4gICAgICovXHJcbiAgICByZXN0YXJ0KCl7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiTWFpblNjZW5lXCIpO1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLnJlc3VtZSgpO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5PdmVyRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5BbmlGYWxnID0gZmFsc2U7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkxvclIgPSAwO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Jbml0U3BlZWQgPSA4LjU7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLm1vdmVTcGVlZCA9IDE7XHJcbiAgICAgICAgR2xvYmFsLmluc3RhbmNlLkZIRmFsbFNwZWVkID0gMjtcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25XaXRoRGluZyA9IGZhbHNlO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5UaGVIb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5LSU5EX0Zvb3RIb2xkID0gMDtcclxuICAgICAgICAvLyB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX1NUQVJULHRoaXMuQnRuVHVyblJpZ2h0LHRoaXMpO1xyXG4gICAgICAgIC8vIHRoaXMuUklHSFQubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfTU9WRSx0aGlzLkJ0blR1cm5SaWdodCx0aGlzKTtcclxuICAgICAgICAvLyB0aGlzLlJJR0hULm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCx0aGlzLm9uS2V5VXAsdGhpcyk7XHJcbiAgICAgICAgdGhpcy5MRUZULm5vZGUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlJJR0hULm5vZGUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkxrZXlEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5Sa2V5RG93biA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMubW92ZUZhbGcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuUGxheWVyLnkgPSAzMDA7XHJcbiAgICAgICAgLy8gdGhpcy5TY29yZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIOWPl+WIsOS8pOWus++8jOWRveaVsOWHj+S4gFxyXG4gICAgKi9cclxuICAgIHJlZHVjZUxpZmUoKXtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbGV0IExzID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgbGV0IHJlTENvdW50PTA7XHJcbiAgICAgICAgbGV0IEZIb2xkZXIgPSBzZWxmLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZ05vZGVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJGSG9sZGVyXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvcihsZXQgaT0wO2k8RkhvbGRlci5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgaWYoRkhvbGRlcltpXS5pc0hvbGQpe1xyXG4gICAgICAgICAgICAgICAgaWYoIUdsb2JhbC5pbnN0YW5jZS5Db2xsaXNpb25GbGFnKXtcclxuICAgICAgICAgICAgICAgICAgICBGSG9sZGVyW2ldLmlzSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBib3ggPSBGSG9sZGVyW2ldLmdldENvbXBvbmVudChjYy5Cb3hDb2xsaWRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYm94LmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHRcdFxyXG5cdFx0Ly9cclxuXHRcdFxyXG4gICAgICAgIGZvcihsZXQgaT1zZWxmLkxpZmVEaW5nLmNoaWxkcmVuLmxlbmd0aC0xO2k+PTA7aS0tKXtcclxuICAgICAgICAgICAgaWYoc2VsZi5MaWZlRGluZy5jaGlsZHJlbltpXS5uYW1lPT1cImxpZmVCR1wiKXtcclxuICAgICAgICAgICAgICAgIGlmKEdsb2JhbC5pbnN0YW5jZS5Jbmp1cmVkfHxHbG9iYWwuaW5zdGFuY2UuQ29sbGlzaW9uV2l0aERpbmcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHNlbGYuTGlmZURpbmcuY2hpbGRyZW5baV0uYWN0aXZlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5MaWZlRGluZy5jaGlsZHJlbltpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkluanVyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbkZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkNvbGxpc2lvbldpdGhEaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgTHMucHVzaChzZWxmLkxpZmVEaW5nLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBHbG9iYWwuaW5zdGFuY2UucmVMaWZlID0gW107XHJcbiAgICAgICAgZm9yKGxldCBpPTA7aTxMcy5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgaWYoTHNbaV0uYWN0aXZlKXtcclxuICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUucHVzaChMc1tpXSk7Ly9wbGF5ZXLliankvZnnmoTlkb3mlbBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHRcdC8vXHJcblx0XHRcclxuXHRcdHZhciB0aW1lID0gY2Muc3lzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGZzalwiKTtcclxuXHRcdC8vY29uc29sZS5sb2coIHRpbWUgKyBcIuW9k+WJjeihgCA6IFwiICsgR2xvYmFsLmluc3RhbmNlLnJlTGlmZS5sZW5ndGgpO1xyXG5cdFx0aWYoIEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUubGVuZ3RoIDwgMyApXHJcblx0XHR7XHJcblx0XHRcdFxyXG5cdFx0XHRpZiggdGltZT09OTkgICAgKVxyXG5cdFx0XHR7XHJcblx0XHRcdFx0IGxldCB0aW1lID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XHJcblx0XHRcdFx0ICBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZnNqXCIsdGltZSk7XHJcblx0XHRcdH1lbHNlXHJcblx0XHRcdHtcclxuXHRcdFx0XHQgbGV0IHRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcclxuXHRcdFx0XHQgbGV0IHRpbWxvZCA9IHBhcnNlSW50KCBjYy5zeXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZnNqXCIpICk7XHJcblx0XHRcdFx0IGxldCBzdWIgPSB0aW1lIC10aW1sb2Q7XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdCBpZiggc3ViID49MjAgKVxyXG5cdFx0XHRcdCB7XHJcblx0XHRcdFx0XHQgbGV0IHNpemVzID0gR2xvYmFsLmluc3RhbmNlLnJlTGlmZS5sZW5ndGgrMjtcclxuXHRcdFx0XHRcdCBHbG9iYWwuaW5zdGFuY2UucmVMaWZlID0gW107XHJcblx0XHRcdFx0XHQgZm9yKGxldCBpPTA7aTxzaXplcztpKyspe1xyXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0ubmFtZSA9PSBcImxpZmVCR1wiKXtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKCF0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldLmFjdGl2ZSl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuTGlmZURpbmcuY2hpbGRyZW5baV0uYWN0aXZlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdEdsb2JhbC5pbnN0YW5jZS5yZUxpZmUucHVzaCh0aGlzLkxpZmVEaW5nLmNoaWxkcmVuW2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicHVzaCAtLS0tLS0tLS0tLS0tLVwiICsgaSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQgY2Muc3lzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGZzalwiLHRpbWUpO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coc2l6ZXMgKyBcIuaBouWkjeihgCsxLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXCIgKyAgR2xvYmFsLmluc3RhbmNlLnJlTGlmZS5sZW5ndGgpO1xyXG5cdFx0XHRcdCB9XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdFxyXG5cdFx0fWVsc2VcclxuXHRcdHtcclxuXHRcdFx0Y2Muc3lzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGZzalwiLFwiOTlcIik7XHJcblx0XHR9XHJcblx0XHRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOavj+S4i+iQveS4gOWxgu+8jOWIhuaVsOWKoOS4gOOAglxyXG4gICAgICovXHJcbiAgICBTY29yZSgpe1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcy5ub2RlO1xyXG4gICAgICAgIGxldCBzY0xhYmVsID0gdGhpcy5MaWZlRGluZy5nZXRDaGlsZEJ5TmFtZShcIkZsb29yXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgbGV0IHNjID0gcGFyc2VJbnQoc2NMYWJlbC5zdHJpbmcpO1xyXG4gICAgICAgIGlmKCFHbG9iYWwuaW5zdGFuY2UuT3ZlckZsYWcpe1xyXG4gICAgICAgICAgICBzYyA9IHNjKzE7XHJcbiAgICAgICAgfVxyXG5cdFx0dGhpcy5wbGF5dGFuc291bmQoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIuaJk+WNsOS4gOS4i1wiKTtcclxuICAgICAgICBzY0xhYmVsLnN0cmluZyA9IHNjLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbGV0IGx2ID0gTWF0aC5jZWlsKHNjLzUwKTtcclxuICAgICAgICBpZihsdj5HbG9iYWwuaW5zdGFuY2UuTGV2ZWxBZGRGbGFnKXtcclxuICAgICAgICAgICAgR2xvYmFsLmluc3RhbmNlLkxldmVsQWRkRmxhZyA9IGx2O1xyXG4gICAgICAgICAgICBHbG9iYWwuaW5zdGFuY2UuSW5pdFNwZWVkKz0wLjI1Oy8v5q+P5LiL6JC9NTDlsYLvvIxwbGF5ZXLkuIvokL3pgJ/luqbliqAwLjI1XHJcbiAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5GSEZhbGxTcGVlZCs9MTsvL+ayoeS4i+iQvTUw5bGC77yM6JC96ISa54K55LiL6JC96YCf5bqm5Yqg5b+rMC41LlxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOacrOWcsOWIhuaVsOWtmOWCqFxyXG4gICAgICovXHJcbiAgICBTdG9yZWdlU2NvcmUoKXtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbGV0IGxvY2FsUyA9IEdsb2JhbC5pbnN0YW5jZS5nZXRMb2NhbFNjb3JlKCk7Ly90aGUgdGVtcCBvZiBsb2NhbCBzY29yZTtcclxuICAgICAgICBsZXQgQ3VycmVudFNjb3JlID0gcGFyc2VJbnQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLkxpZmVEaW5nLmdldENoaWxkQnlOYW1lKFwiRmxvb3JcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcpO1xyXG4gICAgICAgIEdsb2JhbC5pbnN0YW5jZS5nZXRMb2NhbFNjb3JlKCkuQ3VycmVudFNjb3JlID0gQ3VycmVudFNjb3JlO1xyXG4gICAgICAgIGlmKEN1cnJlbnRTY29yZT5sb2NhbFMuVGhpcmRTY29yZSl7XHJcbiAgICAgICAgICAgIGlmKEN1cnJlbnRTY29yZT5sb2NhbFMuU2Vjb25kU2NvcmUpe1xyXG4gICAgICAgICAgICAgICAgaWYoQ3VycmVudFNjb3JlPmxvY2FsUy5CZXN0U2NvcmUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsUy5CZXN0U2NvcmUgPSBDdXJyZW50U2NvcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbG9jYWxTLlNlY29uZFNjb3JlID0gQ3VycmVudFNjb3JlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvY2FsUy5UaGlyZFNjb3JlID0gQ3VycmVudFNjb3JlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVwbG9hZCB0aGUgYmVzdCBzY29yZVxyXG4gICAgICovXHJcbiAgICBVcExvYWRTY29yZSgpe1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgdG1wID0gR2xvYmFsLmluc3RhbmNlLkdldFVTZXIoKTtcclxuICAgICAgIC8qIEh0dHAuc2VuZFJlcXVlc3QoXCIvdXBkYXRlU2NvcmVcIix0bXAsZnVuY3Rpb24obXNnKXtcclxuICAgICAgICAgICAgbGV0IHggPSBtc2c7XHJcbiAgICAgICAgICAgIGlmKG1zZy5jb2RlIT0wKXtcclxuICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5OZXRTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdXggPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6JycsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XHJcbiAgICAgICAgICAgIHV4LnVzZXJJZCA9IEdsb2JhbC5pbnN0YW5jZS5HZXRVU2VyKCkudXNlcklkO1xyXG4gICAgICAgICAgICBIdHRwLnNlbmRSZXF1ZXN0KFwiL3JhbmtcIix1eCxmdW5jdGlvbihtbXNnKXtcclxuXHRcdFx0XHQgY29uc29sZS5sb2coXCItLS0tLS0tLS0tLS0tLS0tLS0zXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IE1NID0gSlNPTi5wYXJzZShtbXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhNTSk7XHJcbiAgICAgICAgICAgICAgICBpZihHbG9iYWwuaW5zdGFuY2UuR2V0UigpPT1udWxsfHxHbG9iYWwuaW5zdGFuY2UuR2V0UigpLnJhbms9PXVuZGVmaW5lZHx8R2xvYmFsLmluc3RhbmNlLkdldFIoKS5yYW5rPE1NLm15LnJhbmspe1xyXG4gICAgICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5TZXRSKE1NLm15LnJhbmspO1xyXG4gICAgICAgICAgICAgICAgICAgIEdsb2JhbC5pbnN0YW5jZS5zZXRSZW1vdGVTY29yZShNTS5vdGhlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pOyovXHJcbiAgICB9XHJcbiAgICBcclxufSJdfQ==
|