var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a; // var ab=new Laya.Quaternion(); // Laya.Quaternion.createFromAxisAngle(this.forw,-a,ab) // this.goS.CreateRay(poi, ab, BulletType.BulletG); this.goS.CreateRay(poi, ang, _type); } } else { this.RemoveTar(); this.go.transform.localScaleZ = 50; this.goS.SetNextNotActive(); } }; Bullet.prototype.SetNextNotActive = function () { if (this.go) { this.go.active = false; if (this.goS) this.goS.SetNextNotActive(); } }; Bullet.prototype.RemoveTar = function () { if (this.HitTar) { this.HitTar = null; } }; Bullet.prototype.SetTar = function (tar) { this.HitTar = tar; }; Bullet.prototype.Hit = function () { if (this.HitTar) { if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) { var r = this.HitTar.getComponent(Role_1.Role); r.HitEd(); this.CreateRay(this.tempPos, this.tempRotation); } } }; Bullet.prototype.onEnable = function () { EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit); }; Bullet.prototype.onDisable = function () { EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit); }; return Bullet; }(Laya.Script3D)); exports.Bullet = Bullet; },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./BulletController":4,"./GameSceneController":6,"./Role":10}],4:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Pool_Manager_1 = require("./Pool_Manager"); var GameSceneController_1 = require("./GameSceneController"); var BulletController = /** @class */ (function () { function BulletController() { } Object.defineProperty(BulletController, "Instance", { get: function () { return this.instance || (this.instance = new BulletController()); }, enumerable: true, configurable: true }); // private bulletPref: Sprite3D; BulletController.prototype.init = function (bullet, poolName) { bullet.removeSelf(); // this.bulletPref = bullet; Pool_Manager_1.Pool_Manager.Instance.InitData(poolName, bullet); }; BulletController.prototype.CreateBullet = function (bulletName) { //if (this.bullet) return this.bullet; var go = Pool_Manager_1.Pool_Manager.Instance.SetActiveObject(bulletName); GameSceneController_1.default.Instance.game_scene.addChild(go); // this.bullet = go; return go; }; return BulletController; }()); exports.default = BulletController; },{"./GameSceneController":6,"./Pool_Manager":9}],5:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var EventManager_1 = require("../game_module/EventManager"); var GameDefined_1 = require("../game_module/GameDefined"); var GameController = /** @class */ (function () { function GameController() { this.ishit = false; this.gameStart = false; this.gameover = true; } Object.defineProperty(GameController, "Instance", { get: function () { return this.instasnce || (this.instasnce = new GameController()); }, enumerable: true, configurable: true }); GameController.prototype.Hit = function () { EventManager_1.EventManager.event(GameDefined_1.default.HitEvent); }; GameController.prototype.GameStart = function () { this.gameStart = true; this.gameover = false; }; return GameController; }()); exports.GameController = GameController; },{"../game_module/EventManager":14,"../game_module/GameDefined":16}],6:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ResourceLoad_1 = require("../game_module/ResourceLoad"); var BulletController_1 = require("./BulletController"); var RoleController_1 = require("./RoleController"); var GameDefined_1 = require("../game_module/GameDefined"); var GameSceneController = /** @class */ (function () { function GameSceneController() { } Object.defineProperty(GameSceneController, "Instance", { get: function () { return this.instance || (this.instance = new GameSceneController()); }, enumerable: true, configurable: true }); GameSceneController.prototype.CreateScene = function () { var _this = this; ResourceLoad_1.default.LoadResource([GameDefined_1.default.game_scene_path], function () { var t = Laya.loader.getRes(GameDefined_1.default.game_scene_path); Laya.stage.addChild(t); _this.game_scene = t; var _bulletG = t.getChildByName("bulletG"); var _bulletR = t.getChildByName("bulletR"); BulletController_1.default.Instance.init(_bulletG, GameDefined_1.default.poolName.bulletG); BulletController_1.default.Instance.init(_bulletR, GameDefined_1.default.poolName.BulletR); // var _role1 = t.getChildByName("role1") as Sprite3D; // var _role2 = t.getChildByName("role2") as Sprite3D; // var _moster1 = t.getChildByName("moster1") as Sprite3D; // var _moster2= t.getChildByName("moster2") as Sprite3D; var players = t.getChildByName("Players"); var mosters = t.getChildByName("Mosters"); RoleController_1.RoleController.Instance.initPlayer(players._children); RoleController_1.RoleController.Instance.initMoster(mosters._children); RoleController_1.RoleController.Instance.CreateRay(); }); }; return GameSceneController; }()); exports.default = GameSceneController; },{"../game_module/GameDefined":16,"../game_module/ResourceLoad":17,"./BulletController":4,"./RoleController":11}],7:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var GameDefined_1 = require("../game_module/GameDefined"); var Role_1 = require("./Role"); var Vector3 = Laya.Vector3; var Ray = Laya.Ray; var HitResult = Laya.HitResult; var Bullet_1 = require("./Bullet"); var BulletController_1 = require("./BulletController"); var GameSceneController_1 = require("./GameSceneController"); var Game_Tool_1 = require("../game_tool/Game_Tool"); var EventManager_1 = require("../game_module/EventManager"); var Moster = /** @class */ (function (_super) { __extends(Moster, _super); function Moster() { return _super.call(this) || this; } Moster.prototype.onAwake = function () { _super.prototype.onAwake.call(this); this._type = GameDefined_1.CheckType.Moster; this.forw = new Vector3(0, 0, 0); this._corss = new Vector3(0, 0, 0); this._bulletPos = this.self.getChildByName("bulletPos"); }; Moster.prototype.CreateRay = function () { this._transform.getForward(this.forw); this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z); if (!this._ray) { this._ray = new Ray(this._bulletPos.transform.position, this.forw); this._hit = new HitResult(); } else { this._ray.origin = this._bulletPos.transform.position; this._ray.direction = this.forw; } if (!this.go) { this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.BulletR); var gs = this.go.getComponent(Bullet_1.Bullet); if (!gs) this.goS = this.go.addComponent(Bullet_1.Bullet); } this.go.transform.position = this._bulletPos.transform.position; this.go.transform.rotation = this._transform.rotation; var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit); if (isS) { var poi = this._hit.point; var dis = Vector3.distance(this._bulletPos.transform.position, poi); this.go.transform.localScaleZ = dis; var other = this._hit.collider.owner; if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) { this.SetTar(other); this.goS.SetNextNotActive(); } else { this.RemoveTar(); var nor = this._hit.normal; nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x; nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y; nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z; Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方 var a = Game_Tool_1.default.getReflectAng(this.forw); var ang = this._transform.rotationEuler.clone(); this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a; this.goS.CreateRay(poi, ang, GameDefined_1.BulletType.BulletR); } } else { this.RemoveTar(); this.go.transform.localScaleZ = 50; this.goS.SetNextNotActive(); } }; Moster.prototype.RotationSelf = function (rota) { this._transform.rotate(rota); this.CreateRay(); }; Moster.prototype.SetNextNotActive = function () { if (this.go) { this.go.active = false; if (this.goS) this.goS.SetNextNotActive(); } }; Moster.prototype.RemoveTar = function () { if (this.HitTar) { this.HitTar = null; } }; Moster.prototype.SetTar = function (tar) { this.HitTar = tar; }; Moster.prototype.Hit = function () { if (this.HitTar) { //Game_Tool.CreateText(this.HitTar.name+"被击杀!"); if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) { var r = this.HitTar.getComponent(Role_1.Role); r.HitEd(); this.CreateRay(); // this.CreateRay(); } // EventManager.off(GameDefined.HitEvent,this, this.Hit); } }; Moster.prototype.onEnable = function () { EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit); this._ishited = false; }; Moster.prototype.onDisable = function () { EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit); }; return Moster; }(Role_1.Role)); exports.Moster = Moster; },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./Bullet":3,"./BulletController":4,"./GameSceneController":6,"./Role":10}],8:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Role_1 = require("./Role"); var GameDefined_1 = require("../game_module/GameDefined"); var Vector3 = Laya.Vector3; var Ray = Laya.Ray; var HitResult = Laya.HitResult; var GameSceneController_1 = require("./GameSceneController"); var BulletController_1 = require("./BulletController"); var Bullet_1 = require("./Bullet"); var Game_Tool_1 = require("../game_tool/Game_Tool"); var EventManager_1 = require("../game_module/EventManager"); var Player = /** @class */ (function (_super) { __extends(Player, _super); function Player() { var _this = _super.call(this) || this; _this.idhit = false; return _this; } Player.prototype.onAwake = function () { _super.prototype.onAwake.call(this); this._type = GameDefined_1.CheckType.Player; this.forw = new Vector3(0, 0, 0); this._corss = new Vector3(0, 0, 0); this._bulletPos = this.self.getChildByName("bulletPos"); }; Player.prototype.CreateRay = function () { this._transform.getForward(this.forw); this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z); if (!this._ray) { this._ray = new Ray(this._bulletPos.transform.position, this.forw); this._hit = new HitResult(); } else { this._ray.origin = this._bulletPos.transform.position; this._ray.direction = this.forw; } if (!this.go) { this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.bulletG); var gs = this.go.getComponent(Bullet_1.Bullet); if (!gs) this.goS = this.go.addComponent(Bullet_1.Bullet); } this.go.transform.position = this._bulletPos.transform.position; this.go.transform.rotation = this._transform.rotation; var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit); if (isS) { var poi = this._hit.point; var dis = Vector3.distance(this._bulletPos.transform.position, poi); this.go.transform.localScaleZ = dis; var other = this._hit.collider.owner; if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) { this.SetTar(other); this.goS.SetNextNotActive(); } else { this.RemoveTar(); var nor = this._hit.normal; nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x; nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y; nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z; Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方 var a = Game_Tool_1.default.getReflectAng(this.forw); var ang = this._transform.rotationEuler.clone(); this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a; // var v1=new Vector3(0.8,0,0.6); //向量1 // var nor=new Vector3(-1,0,0); //v1碰撞法线 // var ab=new Laya.Quaternion(); // Laya.Quaternion.createFromAxisAngle(this.forw,a,ab) // this.goS.CreateRay(poi, ab, BulletType.BulletG); this.goS.CreateRay(poi, ang, GameDefined_1.BulletType.BulletG); } } else { this.RemoveTar(); this.go.transform.localScaleZ = 50; this.goS.SetNextNotActive(); } }; Player.prototype.RotationSelf = function (rota) { // console.log(rota); // console.log(this._transform.rotationEuler); this._transform.rotate(rota); // console.log(this._transform.rotationEuler); this.CreateRay(); }; Player.prototype.SetNextNotActive = function () { if (this.go) { this.go.active = false; if (this.goS) this.goS.SetNextNotActive(); } }; Player.prototype.RemoveTar = function () { if (this.HitTar) { this.HitTar = null; } }; Player.prototype.SetTar = function (tar) { this.HitTar = tar; }; Player.prototype.Hit = function () { if (this.HitTar) { if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) { var r = this.HitTar.getComponent(Role_1.Role); r.HitEd(); this.CreateRay(); } } }; Player.prototype.onEnable = function () { EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit); this._ishited = false; }; Player.prototype.onDisable = function () { EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit); }; return Player; }(Role_1.Role)); exports.Player = Player; },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./Bullet":3,"./BulletController":4,"./GameSceneController":6,"./Role":10}],9:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Dictionary_1 = require("../game_tool/Dictionary"); var Vector3 = Laya.Vector3; var Pool_Manager = /** @class */ (function () { function Pool_Manager() { this.poolDic = new Dictionary_1.default(); this.prefabDic = new Dictionary_1.default(); } Object.defineProperty(Pool_Manager, "Instance", { get: function () { return Pool_Manager.instance || (Pool_Manager.instance = new Pool_Manager()); }, enumerable: true, configurable: true }); // [ ] Pool_Manager.prototype.InitData = function (name, prefab) { if (prefab != null) { if (!this.prefabDic.has(name)) this.prefabDic.set(name, prefab); } }; Pool_Manager.prototype.SetActiveObject = function (name, scale) { if (this.poolDic.has(name)) { if (this.poolDic.get(name).length > 0) { var result = this.poolDic.get(name).shift(); result.active = true; return result; } else { if (this.prefabDic.has(name)) { var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name)); if (scale != null) { curObj.transform.localScale = new Vector3(scale, scale, scale); } curObj.name = name; return curObj; } else { return null; } } } else { if (this.prefabDic.has(name)) { var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name)); if (scale != null) { curObj.transform.localScale = new Vector3(scale, scale, scale); } curObj.name = name; return curObj; } else { return null; } } }; //隐藏对象到dic Pool_Manager.prototype.SetDisableObject = function (go) { if (go) go.active = false; var key = go.name; if (!this.poolDic.has(key)) { this.poolDic.set(key, new Array()); } this.poolDic.get(key).push(go); }; Pool_Manager.prototype.DestoryObj = function (go) { if (go) go.destroy(true); }; //延时隐藏对象到dic Pool_Manager.prototype.SetDisableMutiObject = function (go, timer) { var _this = this; Laya.timer.once(timer, this, function () { if (go) go.active = false; var key = go.name; if (!_this.poolDic.has(key)) { _this.poolDic.set(key, new Array()); } _this.poolDic.get(key).push(go); }); }; return Pool_Manager; }()); exports.Pool_Manager = Pool_Manager; },{"../game_tool/Dictionary":21}],10:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var GameDefined_1 = require("../game_module/GameDefined"); var Role = /** @class */ (function (_super) { __extends(Role, _super); function Role() { return _super.call(this) || this; } Role.prototype.onAwake = function () { this.self = this.owner; this._transform = this.self.transform; }; Role.prototype.HitEd = function () { if (this._ishited) return; switch (this._type) { case GameDefined_1.CheckType.Player: console.log(); break; case GameDefined_1.CheckType.Moster: break; } this.SetNextNotActive(); this.self.active = false; }; Role.prototype.SetNextNotActive = function () { }; return Role; }(Laya.Script3D)); exports.Role = Role; },{"../game_module/GameDefined":16}],11:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Player_1 = require("./Player"); var Moster_1 = require("./Moster"); var RoleController = /** @class */ (function () { function RoleController() { // public player:Sprite3D; // public playerS:Player; this.playerArr = []; this.mosterArr = []; this.behaviorArr = []; } Object.defineProperty(RoleController, "Instance", { get: function () { return this.instasnce || (this.instasnce = new RoleController()); }, enumerable: true, configurable: true }); RoleController.prototype.initPlayer = function (roles) { for (var index = 0; index < roles.length; index++) { var element = roles[index]; var beh = element.addComponent(Player_1.Player); this.behaviorArr.push(beh); } // if(role){ // this.player=role; // this.playerS=this.player.addComponent(Player); // } }; RoleController.prototype.initMoster = function (mosters) { for (var index = 0; index < mosters.length; index++) { var element = mosters[index]; var beh = element.addComponent(Moster_1.Moster); this.behaviorArr.push(beh); } }; RoleController.prototype.CreateRay = function () { for (var index = 0; index < this.behaviorArr.length; index++) { var element = this.behaviorArr[index]; element.CreateRay(); } // if(this.playerS)this.playerS.CreateRay(); }; RoleController.prototype.RoleRotation = function (rota) { // if(this.playerS)this.playerS.RotationSelf(rota); for (var index = 0; index < this.behaviorArr.length; index++) { var element = this.behaviorArr[index]; element.RotationSelf(rota); } }; return RoleController; }()); exports.RoleController = RoleController; },{"./Moster":7,"./Player":8}],12:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var SoundManager = Laya.SoundManager; var WXSdk_1 = require("../game_module/WXSdk"); var SettingController = /** @class */ (function () { function SettingController() { this.vibrate = true; this.sound = true; this.temp = 0; this.badMove = "res/Sound/BadMove.mp3"; this.click = "res/Sound/click.mp3"; this.Continue = "res/Sound/Continue.mp3"; this.LevelComp = "res/Sound/LevelComp.mp3"; this.TrainCrash = "res/Sound/TrainCrash.mp3"; this.TrainLoop = "res/Sound/TrainLoop.mp3"; this.TrainStop = "res/Sound/TrainStop.mp3"; this.Coin = "res/Sound/Coin1.mp3"; this.Jump = [ "res/Sound/PassengerJumpIn1.mp3", "res/Sound/PassengerJumpIn2.mp3", "res/Sound/PassengerJumpIn3.mp3", "res/Sound/PassengerJumpIn4.mp3", "res/Sound/PassengerJumpIn5.mp3", "res/Sound/PassengerJumpIn6.mp3", "res/Sound/PassengerJumpIn7.mp3", "res/Sound/PassengerJumpIn8.mp3", ]; } Object.defineProperty(SettingController, "Instance", { get: function () { return this.instasnce || (this.instasnce = new SettingController()); }, enumerable: true, configurable: true }); SettingController.prototype.SettingSound = function (value) { if (!this.sound) return; SoundManager.setSoundVolume(value); SoundManager.setMusicVolume(value); }; SettingController.prototype._playMusic = function (on) { if (!this.sound) return; if (on) { if (this.soundChannel == null) { this.soundChannel = SoundManager.playMusic(this.TrainLoop, 0); this.soundChannel.volume = 0.5; } this.soundChannel.resume(); } else { if (this.soundChannel) { this.soundChannel.pause(); } } }; SettingController.prototype._playBadMove = function () { WXSdk_1.WXSdk.ShortVibrate(); if (!this.sound) return; SoundManager.playSound(this.badMove); }; SettingController.prototype._Click = function () { if (!this.sound) return; SoundManager.playSound(this.click); }; SettingController.prototype._Continue = function (on) { if (!this.sound) return; if (on) { SoundManager.playSound(this.Continue); } else { SoundManager.stopSound(this.Continue); } }; SettingController.prototype._LevelComp = function () { if (!this.sound) return; SoundManager.playSound(this.LevelComp); }; SettingController.prototype._TrainCrash = function () { WXSdk_1.WXSdk.LongVibrate(); if (!this.sound) return; SoundManager.playSound(this.TrainCrash); }; SettingController.prototype._TrainStop = function () { if (!this.sound) return; SoundManager.playSound(this.TrainStop); }; SettingController.prototype._Coin = function () { WXSdk_1.WXSdk.ShortVibrate(); if (!this.sound) return; SoundManager.playSound(this.Coin); }; SettingController.prototype._Jump = function () { WXSdk_1.WXSdk.ShortVibrate(); if (!this.sound) return; SoundManager.playSound(this.Jump[this.temp]); this.temp++; if (this.temp == 8) this.temp = 0; }; return SettingController; }()); exports.SettingController = SettingController; },{"../game_module/WXSdk":20}],13:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Dictionary_1 = require("../game_tool/Dictionary"); var game_ui_1 = require("../game_ui/game_ui"); var main_ui_1 = require("../game_ui/main_ui"); var ViewType; (function (ViewType) { ViewType[ViewType["game_ui"] = 0] = "game_ui"; ViewType[ViewType["main_ui"] = 1] = "main_ui"; })(ViewType = exports.ViewType || (exports.ViewType = {})); var ViewManager = /** @class */ (function () { function ViewManager() { this.viewDic = []; this.addViewDic = new Dictionary_1.default(); this.init(); } Object.defineProperty(ViewManager, "Instance", { get: function () { return this.instance || (this.instance = new ViewManager()); }, enumerable: true, configurable: true }); ViewManager.prototype.init = function () { this.viewDic[ViewType.game_ui] = game_ui_1.game_ui; this.viewDic[ViewType.main_ui] = main_ui_1.main_ui; }; ViewManager.prototype.OpenView = function (view, data) { if (this.curView != null) { this.curView.OnClose(); Laya.stage.removeChild(this.curView); this.curView.destroy(true); this.curView = null; } this.curView = new this.viewDic[view]; Laya.stage.addChild(this.curView); this.curView.OnShow(data); }; Object.defineProperty(ViewManager.prototype, "getCurView", { get: function () { return this.curView; }, enumerable: true, configurable: true }); ViewManager.prototype.AddView = function (view, data) { if (this.addViewDic.has(view)) return; var t_view = new this.viewDic[view]; this.addViewDic.set(view, t_view); Laya.stage.addChild(t_view); t_view.OnShow(data); }; ViewManager.prototype.RemoveView = function () { if (this.curView != null) { this.curView.OnClose(); Laya.stage.removeChild(this.curView); this.curView.destroy(true); this.curView = null; } }; ViewManager.prototype.CloseView = function (view) { if (!this.addViewDic.has(view)) return; var t_view = this.addViewDic.get(view); t_view.OnClose(); Laya.stage.removeChild(t_view); t_view.destroy(true); this.addViewDic.delete(view); }; ViewManager.prototype.OpenMask = function () { if (this.curMask != null) { return; } // this.curMask = new Mask_ui(); if (!this.curMask) return; Laya.stage.addChild(this.curMask); }; ViewManager.prototype.CloseMask = function () { if (this.curMask != null) { this.curMask.OnClose(); Laya.stage.removeChild(this.curMask); this.curMask.destroy(true); this.curMask = null; } }; return ViewManager; }()); exports.default = ViewManager; },{"../game_tool/Dictionary":21,"../game_ui/game_ui":24,"../game_ui/main_ui":25}],14:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var EventManager = /** @class */ (function () { function EventManager() { } Object.defineProperty(EventManager, "Disispatcher", { get: function () { return EventManager.disispatcher || (EventManager.disispatcher = new Laya.EventDispatcher()); }, enumerable: true, configurable: true }); EventManager.on = function (type, call, data) { this.Disispatcher.on(type, call, data); }; EventManager.off = function (type, call, data) { this.Disispatcher.off(type, call, data); }; EventManager.event = function (type, data) { if (data === void 0) { data = null; } this.Disispatcher.event(type, data); }; return EventManager; }()); exports.EventManager = EventManager; },{}],15:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var UserModel_1 = require("./UserModel"); var Main_1 = require("../Main"); var EventManager_1 = require("./EventManager"); var FYHD_Sdk = /** @class */ (function () { function FYHD_Sdk() { } //初始化sdk FYHD_Sdk.InitSdk = function () { Laya.Browser.window.sdk.getFyhd().startSdk(); FYHD_Sdk.UserInfoAuth(); }; //用户授权 FYHD_Sdk.UserInfoAuth = function () { if (!Main_1.Main.IsWx) return; Laya.Browser.window.sdk.getFyhd().getFyhdUserInfo(null, false, function (data) { console.log("无授权回调:" + JSON.stringify(data)); if (data.result.user) { FYHD_Sdk.openid = data.result.user.openid; FYHD_Sdk.AuthInfo(); } }); }; FYHD_Sdk.AuthInfo = function () { var args = { openid: FYHD_Sdk.openid, }; Laya.Browser.window.sdk.getFyhd().loginData(args, function (data) { console.log("授权上报回调:" + JSON.stringify(data)); FYHD_Sdk.ValueUser(); }); }; FYHD_Sdk.ValueUser = function () { var args = { openid: FYHD_Sdk.openid, }; Laya.Browser.window.sdk.getFyhd().valueuser(args, function (data) { console.log("有效用户上报:" + JSON.stringify(data)); }); }; //创角色 FYHD_Sdk.RoleData = function () { if (!Main_1.Main.IsWx) return; var args = { openid: FYHD_Sdk.openid, role_id: UserModel_1.default.Instance.CurModel.userid, create_time: UserModel_1.default.Instance.CurModel.ServerTime }; Laya.Browser.window.sdk.getFyhd().roleData(args, function (data) { console.log("创建角色:" + JSON.stringify(data)); FYHD_Sdk.Login(); }); }; //登录信息上报 FYHD_Sdk.Login = function () { if (!Main_1.Main.IsWx) return; var openid = FYHD_Sdk.openid ? FYHD_Sdk.openid : UserModel_1.default.Instance.CurModel.openid; var args = { openid: openid, role_id: UserModel_1.default.Instance.CurModel.userid, create_time: UserModel_1.default.Instance.CurModel.ServerTime.toString() }; console.log("登录参数:" + JSON.stringify(args)); Laya.Browser.window.sdk.getFyhd().uploginData(args, function (data) { console.log("登录结果:" + JSON.stringify(data)); // FYHD_Sdk.PushData(); }); }; //点击事件上报 FYHD_Sdk.ClickAd = function (ad_type) { if (!Main_1.Main.IsWx) return; var param = { ad_type: ad_type, }; console.log("点击参数:" + param); Laya.Browser.window.sdk.getFyhd().advertisement(param, function (data) { console.log("点击结果:" + JSON.stringify(data)); }); }; FYHD_Sdk.PushData = function () { if (!Main_1.Main.IsWx) return; var param = {}; Laya.Browser.window.sdk.getFyhd().shareRecommend(param, function (data) { if (data.data) { FYHD_Sdk.pushData = data.data; FYHD_Sdk.pushData.sort(FYHD_Sdk.ListSort); EventManager_1.EventManager.event(FYHD_Sdk.ShowAd); FYHD_Sdk.isHaveDate = true; } console.log("获取互推信息:" + JSON.stringify(FYHD_Sdk.pushData)); }); }; FYHD_Sdk.ShowHuTuiJump = function (data) { if (!Main_1.Main.IsWx) return; if (data.jump_type == 2) //二维码跳转方法 { Laya.Browser.window.wx.previewImage({ current: data.qrcode, urls: [data.qrcode] }); } else if (data.jump_type == 1) //直跳方法 { Laya.Browser.window.wx.navigateToMiniProgram({ appId: data.to_appid, path: data.jump_path, success: function (res) { // 打开成功 console.log("上报成功:" + JSON.stringify(res)); FYHD_Sdk.PushClick(data.to_appid); } }); } else if (data.jump_type == 0) //平台跳转方法 { Laya.Browser.window.wx.navigateToMiniProgram({ appId: data.platform_appid, path: data.jump_path, success: function (res) { // 打开成功 console.log("上报成功:" + JSON.stringify(res)); FYHD_Sdk.PushClick(data.to_appid); } }); } }; FYHD_Sdk.PushClick = function (to_appid) { if (!Main_1.Main.IsWx) return; var param = { openid: FYHD_Sdk.openid, to_appid: to_appid, }; Laya.Browser.window.sdk.getFyhd().sharePlay(param, function (data) { console.log("点击上报结果:" + JSON.stringify(data)); }); }; FYHD_Sdk.ListSort = function (a, b) { if (Number(a["panel"]) < Number(b["panel"])) { return -1; } if (Number(a["panel"]) == Number(b["panel"])) { return 0; } if (Number(a["panel"]) > Number(b["panel"])) { return 1; } }; FYHD_Sdk.Ad_ClickType = { Video: "video_click", Watch: "watch", Share: "share", Banner: "banner", Push: "push" }; FYHD_Sdk.pushData = []; FYHD_Sdk.isHaveDate = false; FYHD_Sdk.ShowAd = "ShowAd"; return FYHD_Sdk; }()); exports.FYHD_Sdk = FYHD_Sdk; },{"../Main":2,"./EventManager":14,"./UserModel":19}],16:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var GameDefined = /** @class */ (function () { function GameDefined() { } GameDefined.player_layer = 9; GameDefined.wall_layer = 8; GameDefined.moster_layer = 10; GameDefined.boss_layer = 11; GameDefined.tree_layer = 12; GameDefined.bomb_layer = 13; GameDefined.HitEvent = "HitEvent"; GameDefined.game_scene_path = "res/LayaScene_main/Conventional/main.ls"; //"res/LayaScene_GameScene/Conventional/GameScene.ls"; GameDefined.poolName = { bulletG: "bulletG", BulletR: "BulletR" }; GameDefined.uiRes = [ "res/atlas/main_res.atlas", "res/atlas/main_res.png " ]; return GameDefined; }()); exports.default = GameDefined; var CheckType; (function (CheckType) { CheckType[CheckType["Player"] = 0] = "Player"; CheckType[CheckType["Moster"] = 1] = "Moster"; CheckType[CheckType["Boss"] = 2] = "Boss"; CheckType[CheckType["Bomb"] = 3] = "Bomb"; CheckType[CheckType["Tree"] = 4] = "Tree"; })(CheckType = exports.CheckType || (exports.CheckType = {})); var BulletType; (function (BulletType) { BulletType[BulletType["BulletR"] = 0] = "BulletR"; BulletType[BulletType["BulletG"] = 1] = "BulletG"; })(BulletType = exports.BulletType || (exports.BulletType = {})); },{}],17:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ResourceLoad = /** @class */ (function () { function ResourceLoad() { } ResourceLoad.LoadResource = function (path, complet) { Laya.loader.retryNum = 2; Laya.loader.maxLoader = 3; Laya.loader.retryDelay = 100; Laya.loader.create(path, new Laya.Handler(this, complet)); Laya.loader.on(Laya.Event.ERROR, this, function (data) { console.log(data + " 资源加载失败"); }); }; return ResourceLoad; }()); exports.default = ResourceLoad; },{}],18:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var WXSdk_1 = require("./WXSdk"); var FYHD_Sdk_1 = require("./FYHD_Sdk"); var ShareModule = /** @class */ (function () { function ShareModule() { } ShareModule.GoShare = function (callBack) { ShareModule.ShareTime = new Date().getTime(); console.log("分享点击时间=" + ShareModule.ShareTime); ShareModule.IsSharing = true; ShareModule.callback = callBack; }; ShareModule.OnShowHandle = function () { if (Laya.Browser.window.wx) { Laya.Browser.window.wx.onShow(function (option) { console.log("onshow share start"); console.log("进入微信"); //Laya.timer.scale=1; if (ShareModule.IsSharing) { ShareModule.IsSharing = false; var time = new Date().getTime(); console.log("分享回到游戏时间" + time); var wait = (time - ShareModule.ShareTime) / 1000; console.log("分享停留时间为:" + wait); var shareSuccess = false; var realSuccess = false; if (wait >= 2) { if (Math.random() <= 0.5) { shareSuccess = true; FYHD_Sdk_1.FYHD_Sdk.ClickAd(FYHD_Sdk_1.FYHD_Sdk.Ad_ClickType.Share); if (!ShareModule.callback) return; ShareModule.callback(true); Laya.Browser.window.wx.showToast({ title: "分享成功!" }); } else { if (!ShareModule.callback) return; if (Math.random() <= 0.5) { Laya.Browser.window.wx.showToast({ title: "分享失败!" }); } else { WXSdk_1.WXSdk.ShowToast("请分享到不同群^-^", false); } ShareModule.callback(false); } } } }); } }; ShareModule.IsSharing = false; return ShareModule; }()); exports.ShareModule = ShareModule; },{"./FYHD_Sdk":15,"./WXSdk":20}],19:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var UserConfigName; (function (UserConfigName) { UserConfigName[UserConfigName["train"] = 0] = "train"; UserConfigName[UserConfigName["sign"] = 1] = "sign"; UserConfigName[UserConfigName["rewards"] = 2] = "rewards"; })(UserConfigName = exports.UserConfigName || (exports.UserConfigName = {})); //用户信息属性 var UserAttr; (function (UserAttr) { UserAttr[UserAttr["equip_train"] = 0] = "equip_train"; UserAttr[UserAttr["user_id"] = 1] = "user_id"; UserAttr[UserAttr["stage"] = 2] = "stage"; UserAttr[UserAttr["get_trains"] = 3] = "get_trains"; UserAttr[UserAttr["money"] = 4] = "money"; UserAttr[UserAttr["progress_trains"] = 5] = "progress_trains"; })(UserAttr = exports.UserAttr || (exports.UserAttr = {})); var NetUserModel = /** @class */ (function () { function NetUserModel(_token, _config, _appSetting, _user, _userbase, _useInvite, _user_lottery, _user_treasure, t, _user_achievement, _user_sign, _user_arena) { this.loginSeverTime = 0; this.localTime = Laya.timer.currTimer; this.loginSeverTime = t; this.m_token = _token; this.m_configs = _config; this.m_app_setting = _appSetting; this.m_user = _user; this.m_user_base = _userbase; this.m_user_invite = _useInvite; this.m_user_lottery = _user_lottery; this.m_user_treasure = _user_treasure; this.m_user_achievement = _user_achievement; this.m_user_sign = _user_sign; this.m_user_arena = _user_arena; this.userid = this.m_user["user_id"]; this.openid = this.m_user_base["openid"]; this.nickname = this.m_user_base["nickname"]; } Object.defineProperty(NetUserModel.prototype, "Cfg", { set: function (cfg) { this.m_configs = cfg; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "sharetitle", { get: function () { if (this.m_app_setting["sharetitle"]) { return this.m_app_setting["sharetitle"]; } return ""; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "shareimage", { get: function () { if (this.m_app_setting["shareimage"]) { return this.m_app_setting["shareimage"]; } return ""; }, enumerable: true, configurable: true }); NetUserModel.prototype.GetCfg = function (type) { var _type = UserConfigName[type]; return this.m_configs[_type]; }; NetUserModel.prototype.GetUserAttr = function (_attr) { var attr = UserAttr[_attr]; return this.m_user[attr]; }; Object.defineProperty(NetUserModel.prototype, "ServerTime", { get: function () { var time = Laya.timer.currTimer; var stime = this.loginSeverTime + Math.ceil((time - this.localTime) / 1000); return stime; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "GuideLevel", { get: function () { if (this.m_app_setting["GuideLevel"]) { return Number(this.m_app_setting["GuideLevel"]); } return 1; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "BannerMoveTime", { get: function () { if (this.m_app_setting["BannerMoveTime"]) { return Number(this.m_app_setting["BannerMoveTime"]); } return 0; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "HaveBanner", { get: function () { if (this.m_app_setting["HaveBanner"]) { return Number(this.m_app_setting["HaveBanner"]); } return 0; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "IsShare", { get: function () { if (this.m_app_setting["IsShare"]) { return Number(this.m_app_setting["IsShare"]); } return 0; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "BtnCanMove", { get: function () { if (this.m_app_setting["BtnCanMove"]) { return Number(this.m_app_setting["BtnCanMove"]); } return 0; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "ISShareThenVideo", { get: function () { if (this.m_app_setting["ISShareThenVideo"]) { return Number(this.m_app_setting["ISShareThenVideo"]); } return 0; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "OpenSceneValue", { get: function () { if (this.m_app_setting["OpenSceneValue"]) { return Number(this.m_app_setting["OpenSceneValue"]); } return 0; }, enumerable: true, configurable: true }); Object.defineProperty(NetUserModel.prototype, "IsOpenTryOut", { get: function () { if (this.m_app_setting["IsOpenTryOut"]) { var num = Number(this.m_app_setting["IsOpenTryOut"]); if (num == 0) return 0; if (Math.random() < num) { return 1; } else { return 0; } } return 0; }, enumerable: true, configurable: true }); return NetUserModel; }()); exports.NetUserModel = NetUserModel; var UserModel = /** @class */ (function () { function UserModel(code, nickname, avatar, gender, country, province, city, device, share_id, scene) { UserModel.instance = this; this.m_code = code; this.m_nickname = nickname ? nickname : "游客"; this.m_avatar = avatar ? avatar : ""; this.m_gender = gender ? gender : 0; this.m_city = city ? city : ""; this.m_device = device ? device : ""; this.m_share_id = share_id ? share_id : ""; this.m_scene = scene ? scene : ""; this.m_country = country ? country : ""; this.m_province = province ? province : ""; } Object.defineProperty(UserModel.prototype, "CurModel", { get: function () { return this.curModel; }, enumerable: true, configurable: true }); Object.defineProperty(UserModel, "Instance", { get: function () { if (UserModel.instance) { return UserModel.instance; } else { UserModel.instance = new UserModel("11", "游客", "", null, "", "", "", "iphone6s", "", ""); return UserModel.instance; } }, enumerable: true, configurable: true }); UserModel.prototype.SetUserModel = function (_model) { this.curModel = _model; }; return UserModel; }()); exports.default = UserModel; },{}],20:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Main_1 = require("../Main"); var ViewManager_1 = require("../game_logic/ViewManager"); var SettingController_1 = require("../game_logic/SettingController"); var ShareModule_1 = require("./ShareModule"); var UserModel_1 = require("./UserModel"); var WXSdk = /** @class */ (function () { function WXSdk() { this.shareId = ""; this.shareScene = ""; } WXSdk.prototype.setShareId = function (tid) { if (tid != "" && tid != null) { this.shareId = tid; console.log("[LOG]: setShareOpenId.tid=", this.shareId); } }; Object.defineProperty(WXSdk, "Instance", { get: function () { return WXSdk.instance || (WXSdk.instance = new WXSdk()); }, enumerable: true, configurable: true }); Object.defineProperty(WXSdk.prototype, "getShareId", { get: function () { return this.shareId; }, enumerable: true, configurable: true }); Object.defineProperty(WXSdk.prototype, "ShareScene", { get: function () { return this.shareScene; }, set: function (sceneS) { if (sceneS != "" && sceneS != null) { this.shareScene = sceneS; } }, enumerable: true, configurable: true }); WXSdk.prototype.init = function (cb) { Laya.Browser.window.wx.showShareMenu({ withShareTicket: true }); //this.shezhiShareMessage(null, null); Laya.Browser.window.wx.onShow(function (option) { var shareTicket = option.shareTicket; var shareid = option.query.shareid; var scene = decodeURIComponent(option.query.scene); console.log("全局path=:", option.path); console.log("decodeURIComponent", option.query.scene); var sceneQuery = JSON.stringify(option.query); if (Main_1.Main.wxValue == "") { Main_1.Main.wxValue = option.scene; } console.log("scene", option.scene); console.log("sceneQuery", sceneQuery); var channel = option.query.channel; var appid; if (option.referrerInfo) { console.log("referrerInfo:" + JSON.stringify(option.referrerInfo)); appid = option.referrerInfo.appId; if (appid) { console.log("onShow appis is:", appid); } else { console.log("onShow appis is null"); } } else { console.log("referrerInfo为空"); } if (channel != null) { console.log("onShow channel is:", channel); } cb(shareTicket, shareid, channel, appid); }); }; WXSdk.ShareMessage = function (title, imageUrl) { if (!Main_1.Main.IsWx) return; var t = UserModel_1.default.Instance.CurModel.ServerTime; var _title = title; var _url = imageUrl; if (!_title) { _title = UserModel_1.default.Instance.CurModel.sharetitle; _url = UserModel_1.default.Instance.CurModel.shareimage; } Laya.Browser.window.wx.onShareAppMessage(function () { return ({ title: _title, imageUrl: _url, query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + t + "_" + Math.floor(9999 * Math.random()).toString() }); }); }; WXSdk.prototype.wx_login = function (cb) { if (WXSdk.Lodining) { return; } WXSdk.Lodining = true; console.log("Excute wx.login! shareOpenId: " + this.shareId); Laya.Browser.window.wx.login({ success: function (res) { console.log("wx.login: success! res.code=" + res.code); if (res.code) { WXSdk.Lodining = false; console.log("将要传递的参数:" + res); cb(res); } else { console.log('获取用户登录态失败!' + res.errMsg); cb("error"); } }, fail: function (res) { console.log("wx.login: failed, res=" + res); WXSdk.Lodining = false; cb("error"); } }); }; //显示加载信息 WXSdk.ShowLoading = function (title, isShowWx) { if (title === void 0) { title = "加载中..."; } if (isShowWx === void 0) { isShowWx = true; } if (Laya.Browser.window && Laya.Browser.window.wx) { if (isShowWx) { Laya.Browser.window.wx.showLoading({ title: title, mask: true }); } ViewManager_1.default.Instance.OpenMask(); } }; WXSdk.SystemInfo = function () { if (Laya.Browser.window.wx) { return Laya.Browser.window.wx.getSystemInfoSync(); } }; // private static button; // public static showbjWxGameQuan(flag: boolean): void { // if (Laya.Browser.window.wx == null) { // return; // } // if (flag) { // if (WeiXinSDK.button == null) { // let info = Laya.Browser.window.wx.getSystemInfoSync(); // if (!info) return; // var top = 474 * info.windowHeight / Laya.stage.height; // var height = 94 * info.windowHeight / Laya.stage.height; // var width = height * 95 / 94; // WeiXinSDK.button = Laya.Browser.window.wx.createGameClubButton // ({ // type: "image", // image: 'res/wx.png', // style: // { // left: 0, // top: top, // width: width, // height: height // } // }) // } // WeiXinSDK.button.show(); // } // else { // if (WeiXinSDK.button) { // WeiXinSDK.button.hide(); // } // } // } //退出 // 显示提示信息// WXSdk.ShowToast = function (text, icon) { if (icon === void 0) { icon = true; } if (Laya.Browser.window.wx) { var t_icon = icon ? "success" : "none"; Laya.Browser.window.wx.showToast({ title: text, icon: t_icon }); } else { console.log(text); } }; //1:pet 2:人物 // public static XianShi_Model(content: string, callback: Function = null, type = 1, title = "") { // if (Laya.Browser.window && Laya.Browser.window.wx) { // if (type == 1) { // var cancelText = "残忍丢掉"; // var confirmText = "带上一起"; // } else { // var cancelText = "不想"; // var confirmText = "想"; // } // Laya.Browser.window.wx.showModal({ // title: title, // content: content, // cancelText: cancelText, // confirmText: confirmText, // success(res) { // if (res.confirm) { // console.log('用户点击确定'); // callback(true); // } else if (res.cancel) { // console.log('用户点击取消'); // callback(false); // } // }, // fail(res?) { // console.log('用户点击取消'); // callback(false); // } // }) // } // } WXSdk.ShortVibrate = function () { if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) { Laya.Browser.window.wx.vibrateShort({}); } }; WXSdk.LongVibrate = function () { if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) { Laya.Browser.window.wx.vibrateLong({}); } }; WXSdk.HideLoading = function (isShowWx) { if (isShowWx === void 0) { isShowWx = true; } if (Laya.Browser.window && Laya.Browser.window.wx) { if (isShowWx) { Laya.Browser.window.wx.hideLoading(); } ViewManager_1.default.Instance.CloseMask(); } }; WXSdk.Success = function (stageId) { if (!Main_1.Main.IsWx) return; Laya.Browser.window.wx.aldStage.onEnd({ stageId: stageId, stageName: "第" + stageId + "关", event: "complete", params: { desc: "关卡完成" //描述 } }); }; //记录阿拉丁事件 WXSdk.AldEvent = function (eventName, key, value) { if (Laya.Browser.window && Laya.Browser.window.wx) { if (!key) key = "用户id"; if (!value) { value = ""; console.log(value); } Laya.Browser.window.wx.aldSendEvent(eventName, { key: value }); } }; WXSdk.Fail = function (stageId) { if (!Main_1.Main.IsWx) return; Laya.Browser.window.wx.aldStage.onEnd({ stageId: stageId, stageName: "第" + stageId + "关", event: "fail", params: { desc: "关卡失败", } }); }; // public static leveleRuning(stageId: string, userid: string, eventtype: number, itemName: string) { // if (Laya.Browser.window && Laya.Browser.window.wx) { // //Laya.Browser.window.wx.aldStage.onRunning({"stageId":stageId,"stageName":stageName,"userId":userid}); // var eventT = eventtype == 0 ? "award" : "revive"; // Laya.Browser.window.wx.aldStage.onRunning({ // stageId: stageId, // stageName: "第" + stageId + "关", // userId: userid, // event: eventT, // params: { // itemName: itemName, // } // }) // } // } WXSdk.Start = function (stageId) { if (!Main_1.Main.IsWx) return; Laya.Browser.window.wx.aldStage.onStart({ stageId: stageId, stageName: "第" + stageId + "关", }); }; WXSdk.Game_Share = function (callback, channel) { if (callback === void 0) { callback = null; } if (channel === void 0) { channel = ""; } if (!Main_1.Main.IsWx) { return; } var url; var title; url = UserModel_1.default.Instance.CurModel.shareimage; title = UserModel_1.default.Instance.CurModel.sharetitle; console.log(url + " " + title); if (channel != null) { // WeiXinSDK.AldEvent("用户分享"); } var t; // = UserModel.Get_Instance.CurModel.HuoQu_ServerTime; var path = ""; Laya.Browser.window.wx.aldShareAppMessage({ title: title, imageUrl: url, query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + "other" + "_" + t + "_" + Math.floor(9999 * Math.random()).toString(), }); ShareModule_1.ShareModule.GoShare(callback); }; WXSdk.Lodining = false; return WXSdk; }()); exports.WXSdk = WXSdk; },{"../Main":2,"../game_logic/SettingController":12,"../game_logic/ViewManager":13,"./ShareModule":18,"./UserModel":19}],21:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Dictionary = /** @class */ (function () { function Dictionary() { this._container = {}; this._length = 0; } Object.defineProperty(Dictionary.prototype, "container", { get: function () { return this._container; }, enumerable: true, configurable: true }); Object.defineProperty(Dictionary.prototype, "size", { //获取字典长度 get: function () { return this._length; }, enumerable: true, configurable: true }); //添加 Dictionary.prototype.set = function (key, value) { if (!this._container.hasOwnProperty(key)) { this._length++; } this._container[key] = value; }; //删除 Dictionary.prototype.delete = function (key) { if (this._container.hasOwnProperty(key)) { delete this._container[key]; this._length--; } }; //查找 Dictionary.prototype.has = function (key) { return this._container.hasOwnProperty(key) ? true : false; }; //获取 Dictionary.prototype.get = function (key) { if (this._container.hasOwnProperty(key)) { return this._container[key]; } else { return undefined; } }; //清空 Dictionary.prototype.clear = function () { this._container = {}; this._length = 0; }; return Dictionary; }()); exports.default = Dictionary; },{}],22:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Game_Tool = /** @class */ (function () { function Game_Tool() { } Game_Tool.GetObjKey = function (obj) { if (obj == null) return null; for (var key in obj) { if (obj.hasOwnProperty(key)) { return key; } } }; //返回一个随机整数[min,max] Game_Tool.randomInt = function (min, max) { return parseInt(Math.random() * (max - min + 1) + min); }; //p1 左向量 p2 Game_Tool.getAng = function (xx, yy, obl) { return 180 / Math.PI * this.getRad(xx, yy, obl); }; //返回角度 Game_Tool.getRad = function (xx, yy, obl) { // 方法一:asin() // var rad:Number = xx > 0 ? ((Math.PI * 3)/2 + Math.asin(-yy/obl)) : (Math.PI / 2 - Math.asin(-yy/obl)); // 方法二:acos() var rad = yy < 0 ? Math.acos(xx / obl) : (Math.PI * 2 - Math.acos(xx / obl)); // 方法三:atan2() // var rad:Number = yy < 0 ? Math.atan2(-yy, xx) : Math.PI * 2 + Math.atan2(-yy, xx); return rad; }; Game_Tool.getM_Vector = function (v1, v2) { var temp = new Laya.Vector3(); Laya.Vector3.add(v1, v2, temp); return new Laya.Vector3(temp.x * 0.5, temp.y * 0.5, temp.z * 0.5); }; Game_Tool.getReflectAng = function (dir) { var xx = Math.abs(dir.x); var zz = Math.abs(dir.z); var obl = Math.sqrt(Math.pow(dir.x, 2) + Math.pow(dir.z, 2)); return 90 - 180 / Math.PI * Math.acos(xx / obl); }; Game_Tool.random_1to1 = function () { var iszheng = Math.random() > 0.5 ? -1 : 1; return Math.random() * iszheng; }; Game_Tool.get64Encode = function (str) { var c1, c2, c3; var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var i = 0, len = str.length, string = ''; while (i < len) { c1 = str.charCodeAt(i++) & 0xff; if (i == len) { string += base64EncodeChars.charAt(c1 >> 2); string += base64EncodeChars.charAt((c1 & 0x3) << 4); string += "=="; break; } c2 = str.charCodeAt(i++); if (i == len) { string += base64EncodeChars.charAt(c1 >> 2); string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); string += base64EncodeChars.charAt((c2 & 0xF) << 2); string += "="; break; } c3 = str.charCodeAt(i++); string += base64EncodeChars.charAt(c1 >> 2); string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); string += base64EncodeChars.charAt(c3 & 0x3F); } return string; }; // public static SetHuTuiList(list:Laya.List,data?,scrol:number=1,type:number=0){ //scrol 1:竖的 2横的 // var arr=data?data:FYHD_Sdk.pushData; // list.selectEnable = false; // scrol==1?list.vScrollBarSkin = "":list.hScrollBarSkin = ""; // list.renderHandler = Laya.Handler.create(this, this.updateItem, [type], false); // list.array = arr; // list.refresh(); // } // private static updateItem(type,cell: Laya.Box, index: number){ // var aditem=cell.getComponent(HuiTuiItem)as HuiTuiItem; // aditem.Refresh(type); // } // public static makeRandomArr(arrList,num){ // if(num>arrList.length){ // return; // } // var tempArr=arrList.slice(0); // var newArrList=[]; // for(var i=0;i 0) offestX = offestX < 5 ? offestX : 5; if (offestX < 0) offestX = offestX > -5 ? offestX : -5; var rotateDir = new Vector3(0, -offestX * 0.01, 0); RoleController_1.RoleController.Instance.RoleRotation(rotateDir); this.curMousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY); ; }; game_ui.prototype.OnClose = function () { EventManager_1.EventManager.off(Laya.Event.RESIZE, this, this.resizeHander); this.off(Laya.Event.MOUSE_DOWN, this, this.OnClickDown); this.off(Laya.Event.MOUSE_UP, this, this.OnClickUp); this.off(Laya.Event.MOUSE_OUT, this, this.OnClickUp); }; game_ui.prototype.MouseD = function () { var _this = this; this.isexceed = false; Laya.timer.once(500, this, function () { _this.isexceed = true; }); }; game_ui.prototype.MouseU = function () { var dis = Vector3.distance(this.startPos, this.endPos); if (dis > 30 || this.isexceed) { return; } else { GameController_1.GameController.Instance.Hit(); } }; return game_ui; }(layaMaxUI_1.ui.game_uiUI)); exports.game_ui = game_ui; },{"../game_logic/GameController":5,"../game_logic/RoleController":11,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],25:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var layaMaxUI_1 = require("../ui/layaMaxUI"); var EventManager_1 = require("../game_module/EventManager"); var ViewManager_1 = require("../game_logic/ViewManager"); var GameController_1 = require("../game_logic/GameController"); var main_ui = /** @class */ (function (_super) { __extends(main_ui, _super); function main_ui() { var _this = _super.call(this) || this; _this.resizeHander(); EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander); return _this; } main_ui.prototype.OnShow = function (data) { this.ButtonClickHandle(); }; main_ui.prototype.resizeHander = function () { this.height = Laya.stage.height; }; main_ui.prototype.ButtonClickHandle = function () { this.start_btn._mclickHandler = function () { ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.game_ui); GameController_1.GameController.Instance.GameStart(); }; }; main_ui.prototype.OnClose = function () { this.start_btn.ClearRunTime(); }; return main_ui; }(layaMaxUI_1.ui.main_uiUI)); exports.main_ui = main_ui; },{"../game_logic/GameController":5,"../game_logic/ViewManager":13,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],26:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Scene = Laya.Scene; var REG = Laya.ClassUtils.regClass; var ui; (function (ui) { var game_uiUI = /** @class */ (function (_super) { __extends(game_uiUI, _super); function game_uiUI() { return _super.call(this) || this; } game_uiUI.prototype.createChildren = function () { _super.prototype.createChildren.call(this); this.createView(game_uiUI.uiView); }; game_uiUI.uiView = { "type": "Scene", "props": { "zOrder": 1, "width": 720, "height": 1280 }, "compId": 2, "loadList": [], "loadList3D": [] }; return game_uiUI; }(Scene)); ui.game_uiUI = game_uiUI; REG("ui.game_uiUI", game_uiUI); var main_uiUI = /** @class */ (function (_super) { __extends(main_uiUI, _super); function main_uiUI() { return _super.call(this) || this; } main_uiUI.prototype.createChildren = function () { _super.prototype.createChildren.call(this); this.createView(main_uiUI.uiView); }; main_uiUI.uiView = { "type": "Scene", "props": { "zOrder": 1, "width": 720, "height": 1280 }, "compId": 2, "child": [{ "type": "Image", "props": { "y": 640, "x": 360, "var": "start_btn", "skin": "main_res/jiemian_xin_1_1.png", "runtime": "game_ui/RunTimeScript/ButtonRunTime.ts", "centerY": 0, "centerX": 0, "anchorY": 0.5, "anchorX": 0.5 }, "compId": 3 }], "loadList": ["main_res/jiemian_xin_1_1.png"], "loadList3D": [] }; return main_uiUI; }(Scene)); ui.main_uiUI = main_uiUI; REG("ui.main_uiUI", main_uiUI); })(ui = exports.ui || (exports.ui = {})); },{}]},{},[2]) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L0xheWFCb3gvTGF5YTIuMS4wYmVhdC9MYXlhQWlySURFX2JldGEvcmVzb3VyY2VzL2FwcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwic3JjL0dhbWVDb25maWcudHMiLCJzcmMvTWFpbi50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldC50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldENvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9HYW1lQ29udHJvbGxlci50cyIsInNyYy9nYW1lX2xvZ2ljL0dhbWVTY2VuZUNvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Nb3N0ZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9QbGF5ZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Qb29sX01hbmFnZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Sb2xlLnRzIiwic3JjL2dhbWVfbG9naWMvUm9sZUNvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9TZXR0aW5nQ29udHJvbGxlci50cyIsInNyYy9nYW1lX2xvZ2ljL1ZpZXdNYW5hZ2VyLnRzIiwic3JjL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlci50cyIsInNyYy9nYW1lX21vZHVsZS9GWUhEX1Nkay50cyIsInNyYy9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZC50cyIsInNyYy9nYW1lX21vZHVsZS9SZXNvdXJjZUxvYWQudHMiLCJzcmMvZ2FtZV9tb2R1bGUvU2hhcmVNb2R1bGUudHMiLCJzcmMvZ2FtZV9tb2R1bGUvVXNlck1vZGVsLnRzIiwic3JjL2dhbWVfbW9kdWxlL1dYU2RrLnRzIiwic3JjL2dhbWVfdG9vbC9EaWN0aW9uYXJ5LnRzIiwic3JjL2dhbWVfdG9vbC9HYW1lX1Rvb2wudHMiLCJzcmMvZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWUudHMiLCJzcmMvZ2FtZV91aS9nYW1lX3VpLnRzIiwic3JjL2dhbWVfdWkvbWFpbl91aS50cyIsInNyYy91aS9sYXlhTWF4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QSxDQUFDO1FBQ3ZCLGtDQUFjLEdBQWQ7WUFDSSxpQkFBTSxjQUFjLFdBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBTGMsZ0JBQU0sR0FBTSxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsS0FBSyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsOEJBQThCLEVBQUMsU0FBUyxFQUFDLHdDQUF3QyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsR0FBRyxFQUFDLFNBQVMsRUFBQyxHQUFHLEVBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsQ0FBQztRQU1yWSxnQkFBQztLQVJELEFBUUMsQ0FSOEIsS0FBSyxHQVFuQztJQVJZLFlBQVMsWUFRckIsQ0FBQTtJQUNELEdBQUcsQ0FBQyxjQUFjLEVBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxFQXBCYSxFQUFFLEdBQUYsVUFBRSxLQUFGLFVBQUUsUUFvQmYiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG4oZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXHJcbmltcG9ydCBCdXR0b25SdW5UaW1lIGZyb20gXCIuL2dhbWVfdWkvUnVuVGltZVNjcmlwdC9CdXR0b25SdW5UaW1lXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTcyMDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEyODA7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwibWlkZGxlXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImNlbnRlclwiO1xyXG4gICAgc3RhdGljIHN0YXJ0U2NlbmU6YW55PVwiZ2FtZV91aS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWUudHNcIixCdXR0b25SdW5UaW1lKTtcclxuICAgIH1cclxufVxyXG5HYW1lQ29uZmlnLmluaXQoKTsiLCJpbXBvcnQgR2FtZUNvbmZpZyBmcm9tIFwiLi9HYW1lQ29uZmlnXCI7XHJcbmltcG9ydCBWaWV3TWFuYWdlciwgeyBWaWV3VHlwZSB9IGZyb20gXCIuL2dhbWVfbG9naWMvVmlld01hbmFnZXJcIjtcclxuaW1wb3J0IFJlc291cmNlTG9hZCBmcm9tIFwiLi9nYW1lX21vZHVsZS9SZXNvdXJjZUxvYWRcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4vZ2FtZV9tb2R1bGUvV1hTZGtcIjtcclxuaW1wb3J0IHsgRllIRF9TZGsgfSBmcm9tIFwiLi9nYW1lX21vZHVsZS9GWUhEX1Nka1wiO1xyXG5pbXBvcnQgQXNzZXRDb250cm9sbGVyIGZyb20gXCIuL2dhbWVfbG9naWMvQXNzZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL2dhbWVfbG9naWMvR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5leHBvcnQgY2xhc3MgTWFpbiB7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgbm93cmF0aW86IG51bWJlcjtcclxuXHRwdWJsaWMgc3RhdGljIElzV3g6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgc3RhdGljIFZSRSA9IFwiMS4wLjBcIjtcclxuXHRwdWJsaWMgc3RhdGljIENGRyA9IFwiQ0ZHXCI7XHJcblx0cHVibGljIHN0YXRpYyB3eFZhbHVlID0gXCJcIjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdC8v5YW85a655b6u5L+h5LiN5pSv5oyB5Yqg6L29c2NlbmXlkI7nvIDlnLrmma9cclxuXHRcdExheWEuVVJMLmV4cG9ydFNjZW5lVG9Kc29uID0gR2FtZUNvbmZpZy5leHBvcnRTY2VuZVRvSnNvbjtcclxuXHJcblx0XHQvL+aJk+W8gOiwg+ivlemdouadv++8iOmAmui/h0lEReiuvue9ruiwg+ivleaooeW8j++8jOaIluiAhXVybOWcsOWdgOWinuWKoGRlYnVnPXRydWXlj4LmlbDvvIzlnYflj6/miZPlvIDosIPor5XpnaLmnb/vvIlcclxuXHRcdGlmIChHYW1lQ29uZmlnLmRlYnVnIHx8IExheWEuVXRpbHMuZ2V0UXVlcnlTdHJpbmcoXCJkZWJ1Z1wiKSA9PSBcInRydWVcIikgTGF5YS5lbmFibGVEZWJ1Z1BhbmVsKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5waHlzaWNzRGVidWcgJiYgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0pIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdLmVuYWJsZSgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcuc3RhdCkgTGF5YS5TdGF0LnNob3coKTtcclxuXHRcdExheWEuYWxlcnRHbG9iYWxFcnJvciA9IHRydWU7XHJcblx0XHRNYWluLm5vd3JhdGlvID0gTGF5YS5zdGFnZS53aWR0aCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG5cclxuXHRcdE1haW4uSXNXeCA9IExheWEuQnJvd3Nlci5vbldlaVhpbjtcclxuXHJcblx0XHRpZiAoTWFpbi5Jc1d4KSB7XHJcblx0XHRcdFdYU2RrLkluc3RhbmNlLmluaXQoKHNoYXJlVGlja2V0OiBzdHJpbmcsIHNoYXJlaWQ6IHN0cmluZywgc2NlbmU6IHN0cmluZywgYXBwaWQ6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25TaG93SGFuZGxlcihzaGFyZVRpY2tldCwgc2hhcmVpZCwgc2NlbmUsIGFwcGlkKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdEZZSERfU2RrLkluaXRTZGsoKTtcclxuXHRcdH1cclxuXHRcdC8v5r+A5rS76LWE5rqQ54mI5pys5o6n5Yi277yMdmVyc2lvbi5qc29u55SxSURF5Y+R5biD5Yqf6IO96Ieq5Yqo55Sf5oiQ77yM5aaC5p6c5rKh5pyJ5Lmf5LiN5b2x5ZON5ZCO57ut5rWB56iLXHJcblx0XHRMYXlhLlJlc291cmNlVmVyc2lvbi5lbmFibGUoXCJ2ZXJzaW9uLmpzb25cIiwgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uVmVyc2lvbkxvYWRlZCksIExheWEuUmVzb3VyY2VWZXJzaW9uLkZJTEVOQU1FX1ZFUlNJT04pO1xyXG5cdFx0dGhpcy5Jc05lZWRVcGRhdGUoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBJc05lZWRVcGRhdGUoKSB7XHJcblx0XHRpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgdXBkYXRlTWFuYWdlciA9IExheWEuQnJvd3Nlci53aW5kb3cud3guZ2V0VXBkYXRlTWFuYWdlcigpO1xyXG5cdFx0dXBkYXRlTWFuYWdlci5vbkNoZWNrRm9yVXBkYXRlKGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCLmnIDmlrDniYjmnKw6XCIgKyByZXMuaGFzVXBkYXRlKTtcclxuXHRcdH1cclxuXHRcdCk7XHJcblx0XHR1cGRhdGVNYW5hZ2VyLm9uVXBkYXRlUmVhZHkoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dNb2RhbCh7XHJcblx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0dGl0bGU6ICfmm7TmlrDmj5DnpLonLFxyXG5cdFx0XHRcdGNvbnRlbnQ6ICfmlrDniYjmnKzlt7Lnu4/lh4blpIflpb3vvIzmmK/lkKbph43lkK/lupTnlKjvvJ8nLFxyXG5cdFx0XHRcdHN1Y2Nlc3MocmVzKSB7XHJcblx0XHRcdFx0XHR1cGRhdGVNYW5hZ2VyLmFwcGx5VXBkYXRlKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmYWlsKHJlcz8pIHtcclxuXHRcdFx0XHRcdHVwZGF0ZU1hbmFnZXIuYXBwbHlVcGRhdGUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9uU2hvd0hhbmRsZXIoc2hhcmVUaWNrZXQ6IHN0cmluZywgc2hhcmVJZDogc3RyaW5nLCBzY2VuZTogc3RyaW5nLCBhcHBpZDogc3RyaW5nKSB7XHJcblx0XHRjb25zb2xlLmxvZyhcIltMT0ddOiDliIbkuqvov5vlhaU6IHNoYXJlVGlja2V0OlwiLCBzaGFyZVRpY2tldCwgXCIsIG9wZW5JZD1cIiwgc2hhcmVJZCwgXCIsIHNjZW5lPVwiLCBzY2VuZSk7XHJcblx0XHQvLyBpZiAoIU1haW4ubVNoYXJlUGVvcGxlU2NlbmUpIHtcclxuXHRcdC8vIFx0TWFpbi5tU2hhcmVQZW9wbGVTY2VuZSA9IHNjZW5lO1xyXG5cdFx0Ly8gfVxyXG5cdFx0Ly8gaWYgKCFNYWluLmFwcGlkKSB7XHJcblx0XHQvLyBcdE1haW4uYXBwaWQgPSBhcHBpZDtcclxuXHRcdC8vIH1cclxuXHRcdGlmIChzY2VuZSAhPSBudWxsICYmIHNjZW5lICE9IFwiXCIpIHtcclxuXHRcdFx0V1hTZGsuSW5zdGFuY2UuU2hhcmVTY2VuZSA9IHNjZW5lO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNoYXJlSWQgIT0gbnVsbCAmJiBzaGFyZUlkICE9IFwiXCIpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCLorr7nva7liIbkuqtpZFwiICsgc2hhcmVJZCk7XHJcblx0XHRcdFdYU2RrLkluc3RhbmNlLnNldFNoYXJlSWQoc2hhcmVJZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvblZlcnNpb25Mb2FkZWQoKTogdm9pZCB7XHJcblx0XHQvL+a/gOa0u+Wkp+Wwj+WbvuaYoOWwhO+8jOWKoOi9veWwj+WbvueahOaXtuWAme+8jOWmguaenOWPkeeOsOWwj+WbvuWcqOWkp+WbvuWQiOmbhumHjOmdou+8jOWImeS8mOWFiOWKoOi9veWkp+WbvuWQiOmbhu+8jOiAjOS4jeaYr+Wwj+WbvlxyXG5cdFx0TGF5YS5BdGxhc0luZm9NYW5hZ2VyLmVuYWJsZShcImZpbGVjb25maWcuanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25Db25maWdMb2FkZWQpKTtcclxuXHRcdExheWEuTW91c2VNYW5hZ2VyLm11bHRpVG91Y2hFbmFibGVkID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRvbkNvbmZpZ0xvYWRlZCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuTG9hZFVJKCk7XHJcblx0fVxyXG5cdExvYWRVSSgpIHtcclxuXHRcdFZpZXdNYW5hZ2VyLkluc3RhbmNlLk9wZW5WaWV3KFZpZXdUeXBlLm1haW5fdWkpO1xyXG5cdFx0R2FtZVNjZW5lQ29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVTY2VuZSgpO1xyXG5cdFx0XHQvL3RoaXMudGVzdCgpO1xyXG5cdH1cclxuXHJcblx0dGVzdCgpIHtcclxuXHRcdHZhciB2MT1uZXcgTGF5YS5WZWN0b3IzKC0zLDAsMSk7XHJcblx0XHR2YXIgdjI9bmV3IExheWEuVmVjdG9yMygwLDAsLTEpO1xyXG5cdFx0dmFyIHYzPW5ldyBMYXlhLlZlY3RvcjMoMCwwLDApO1xyXG5cdFx0TGF5YS5WZWN0b3IzLmNyb3NzKHYxLHYyLHYzKTtcclxuXHRcdGNvbnNvbGUubG9nKHYzKTtcclxuXHR9XHJcbn1cclxuLy/mv4DmtLvlkK/liqjnsbtcclxubmV3IE1haW4oKTtcclxuIiwiXHJcbmltcG9ydCBHYW1lRGVmaW5lZCwgeyBDaGVja1R5cGUsIEJ1bGxldFR5cGUgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuaW1wb3J0IFZlY3RvcjMgPSBMYXlhLlZlY3RvcjM7XHJcbmltcG9ydCBSYXkgPSBMYXlhLlJheTtcclxuaW1wb3J0IEhpdFJlc3VsdCA9IExheWEuSGl0UmVzdWx0O1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IFNwcml0ZTNEID0gTGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IFRyYW5zZm9ybTNEID0gTGF5YS5UcmFuc2Zvcm0zRDtcclxuaW1wb3J0IEdhbWVfVG9vbCBmcm9tIFwiLi4vZ2FtZV90b29sL0dhbWVfVG9vbFwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9Sb2xlXCI7XHJcbmV4cG9ydCBjbGFzcyBCdWxsZXQgZXh0ZW5kcyBMYXlhLlNjcmlwdDNEIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdHJhbnNmb3JtOiBUcmFuc2Zvcm0zRDtcclxuICAgIHByaXZhdGUgc2VsZjogU3ByaXRlM0Q7XHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZiA9IHRoaXMub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5zZWxmLnRyYW5zZm9ybTtcclxuICAgICAgICB0aGlzLmZvcncgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLl9jb3JzcyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ydzogVmVjdG9yMztcclxuICAgIHByaXZhdGUgX3JheTogUmF5O1xyXG4gICAgcHJpdmF0ZSBfaGl0OiBIaXRSZXN1bHQ7XHJcbiAgICBwcml2YXRlIGdvOiBTcHJpdGUzRDtcclxuICAgIHByaXZhdGUgZ29TOiBCdWxsZXQ7XHJcbiAgICBwcml2YXRlIF9jb3JzczogVmVjdG9yMztcclxuICAgIENyZWF0ZVJheShwb3M6IFZlY3RvcjMsIF9yb3RhdGlvbiwgX3R5cGU/KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdvKSB7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKF90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEJ1bGxldFR5cGUuQnVsbGV0RzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0Ryk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBCdWxsZXRUeXBlLkJ1bGxldFI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbyA9IEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuQ3JlYXRlQnVsbGV0KEdhbWVEZWZpbmVkLnBvb2xOYW1lLkJ1bGxldFIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBncyA9IHRoaXMuZ28uZ2V0Q29tcG9uZW50KEJ1bGxldCk7XHJcbiAgICAgICAgICAgIGlmICghZ3MpIHRoaXMuZ29TID0gdGhpcy5nby5hZGRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdvLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnBvc2l0aW9uID0gcG9zLmNsb25lKCk7XHJcbiAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucm90YXRpb25FdWxlciA9IF9yb3RhdGlvbjtcclxuICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5yb3RhdGUgPSBfcm90YXRpb247XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0uZ2V0Rm9yd2FyZCh0aGlzLmZvcncpO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKC10aGlzLmZvcncueCwgLXRoaXMuZm9ydy55LCAtdGhpcy5mb3J3LnopO1xyXG4gICAgICAgIHZhciB0ZW1wID0gdGhpcy5mb3J3LmNsb25lKCk7XHJcbiAgICAgICAgVmVjdG9yMy5ub3JtYWxpemUodGVtcCwgdGVtcCk7XHJcbiAgICAgICAgcG9zLnggPSBwb3MueCArIHRlbXAueCAqIDAuMDE7XHJcbiAgICAgICAgcG9zLnkgPSBwb3MueSArIHRlbXAueSAqIDAuMDE7XHJcbiAgICAgICAgcG9zLnogPSBwb3MueiArIHRlbXAueiAqIDAuMDE7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fcmF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JheSA9IG5ldyBSYXkocG9zLCB0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaXQgPSBuZXcgSGl0UmVzdWx0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5Lm9yaWdpbiA9IHBvcztcclxuICAgICAgICAgICAgdGhpcy5fcmF5LmRpcmVjdGlvbiA9IHRoaXMuZm9ydztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpc1MgPSBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUucGh5c2ljc1NpbXVsYXRpb24ucmF5Q2FzdCh0aGlzLl9yYXksIHRoaXMuX2hpdCk7XHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZShwb3MsIHBvaSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gZGlzO1xyXG4gICAgICAgICAgICB2YXIgb3RoZXIgPSB0aGlzLl9oaXQuY29sbGlkZXIub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIGlmIChvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5wbGF5ZXJfbGF5ZXIgfHwgb3RoZXIubGF5ZXIgPT0gR2FtZURlZmluZWQubW9zdGVyX2xheWVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQb3MgPSBwb3M7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBSb3RhdGlvbiA9IF9yb3RhdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2V0VGFyKG90aGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9yID0gdGhpcy5faGl0Lm5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG5vci54ID0gTWF0aC5hYnMobm9yLngpIDwgMC4wMDEgPyAwIDogbm9yLng7XHJcbiAgICAgICAgICAgICAgICBub3IueSA9IE1hdGguYWJzKG5vci55KSA8IDAuMDAxID8gMCA6IG5vci55O1xyXG4gICAgICAgICAgICAgICAgbm9yLnogPSBNYXRoLmFicyhub3IueikgPCAwLjAwMSA/IDAgOiBub3IuejtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYSA9IEdhbWVfVG9vbC5nZXRSZWZsZWN0QW5nKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgICAgICAvLyBMYXlhLlF1YXRlcm5pb24uXHJcbiAgICAgICAgICAgICAgICB2YXIgYW5nID0gdGhpcy5nby5fdHJhbnNmb3JtLnJvdGF0aW9uRXVsZXIuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvcnNzLnkgPj0gMCA/IGFuZy55ID0gYW5nLnkgKyAyICogYSA6IGFuZy55ID0gYW5nLnkgLSAyICogYTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgYWI9bmV3IExheWEuUXVhdGVybmlvbigpO1xyXG4gICAgICAgICAgICAgICAgLy8gTGF5YS5RdWF0ZXJuaW9uLmNyZWF0ZUZyb21BeGlzQW5nbGUodGhpcy5mb3J3LC1hLGFiKVxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nb1MuQ3JlYXRlUmF5KHBvaSwgYWIsIEJ1bGxldFR5cGUuQnVsbGV0Ryk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLkNyZWF0ZVJheShwb2ksIGFuZywgX3R5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBTZXROZXh0Tm90QWN0aXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdvUykgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBIaXRUYXI6IFNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBSZW1vdmVUYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuSGl0VGFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuSGl0VGFyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIFNldFRhcih0YXIpIHtcclxuICAgICAgICB0aGlzLkhpdFRhciA9IHRhcjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSB0ZW1wUG9zOiBWZWN0b3IzO1xyXG4gICAgcHJpdmF0ZSB0ZW1wUm90YXRpb246IGFueTtcclxuICAgIHByaXZhdGUgSGl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLkhpdFRhcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5IaXRUYXIubGF5ZXIgPT0gR2FtZURlZmluZWQucGxheWVyX2xheWVyIHx8IHRoaXMuSGl0VGFyLmxheWVyID09IEdhbWVEZWZpbmVkLm1vc3Rlcl9sYXllcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHIgPSB0aGlzLkhpdFRhci5nZXRDb21wb25lbnQoUm9sZSkgYXMgUm9sZTtcclxuICAgICAgICAgICAgICAgIHIuSGl0RWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQ3JlYXRlUmF5KHRoaXMudGVtcFBvcywgdGhpcy50ZW1wUm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlKCkge1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vbihHYW1lRGVmaW5lZC5IaXRFdmVudCwgdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGlzYWJsZSgpIHtcclxuICAgICAgICBFdmVudE1hbmFnZXIub2ZmKEdhbWVEZWZpbmVkLkhpdEV2ZW50LCB0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgeyBQb29sX01hbmFnZXIgfSBmcm9tIFwiLi9Qb29sX01hbmFnZXJcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1bGxldENvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEJ1bGxldENvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBCdWxsZXRDb250cm9sbGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZSB8fCAodGhpcy5pbnN0YW5jZSA9IG5ldyBCdWxsZXRDb250cm9sbGVyKCkpO1xyXG4gICAgfVxyXG4gICAvLyBwcml2YXRlIGJ1bGxldFByZWY6IFNwcml0ZTNEO1xyXG4gICAgcHVibGljIGluaXQoYnVsbGV0OiBTcHJpdGUzRCxwb29sTmFtZTpzdHJpbmcpIHtcclxuICAgICAgICBidWxsZXQucmVtb3ZlU2VsZigpO1xyXG4gICAgICAvLyAgdGhpcy5idWxsZXRQcmVmID0gYnVsbGV0O1xyXG4gICAgICAgIFBvb2xfTWFuYWdlci5JbnN0YW5jZS5Jbml0RGF0YShwb29sTmFtZSwgYnVsbGV0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1bGxldDogU3ByaXRlM0Q7XHJcbiAgICBwdWJsaWMgQ3JlYXRlQnVsbGV0KGJ1bGxldE5hbWUpOiBTcHJpdGUzRCB7XHJcbiAgICAgICAgLy9pZiAodGhpcy5idWxsZXQpIHJldHVybiB0aGlzLmJ1bGxldDtcclxuICAgICAgICB2YXIgZ28gPSBQb29sX01hbmFnZXIuSW5zdGFuY2UuU2V0QWN0aXZlT2JqZWN0KGJ1bGxldE5hbWUpO1xyXG4gICAgICAgIEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5hZGRDaGlsZChnbyk7XHJcbiAgICAgICAvLyB0aGlzLmJ1bGxldCA9IGdvO1xyXG4gICAgICAgIHJldHVybiBnbztcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBHYW1lRGVmaW5lZCBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBHYW1lQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YXNuY2U6IEdhbWVDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogR2FtZUNvbnRyb2xsZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3Rhc25jZSB8fCAodGhpcy5pbnN0YXNuY2UgPSBuZXcgR2FtZUNvbnRyb2xsZXIoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBpc2hpdCA9IGZhbHNlO1xyXG4gICAgcHVibGljIEhpdCgpIHtcclxuICAgICAgICBFdmVudE1hbmFnZXIuZXZlbnQoR2FtZURlZmluZWQuSGl0RXZlbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2FtZVN0YXJ0ID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2FtZW92ZXIgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgcHVibGljIEdhbWVTdGFydCgpIHtcclxuICAgICAgICB0aGlzLmdhbWVTdGFydCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5nYW1lb3ZlciA9IGZhbHNlO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IFJlc291cmNlTG9hZCBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvUmVzb3VyY2VMb2FkXCI7XHJcbmltcG9ydCBTY2VuZTNEID0gTGF5YS5TY2VuZTNEO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7IFJvbGVDb250cm9sbGVyIH0gZnJvbSBcIi4vUm9sZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgU3ByaXRlM0Q9TGF5YS5TcHJpdGUzRDtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZVNjZW5lQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogR2FtZVNjZW5lQ29udHJvbGxlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IEdhbWVTY2VuZUNvbnRyb2xsZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlIHx8ICh0aGlzLmluc3RhbmNlID0gbmV3IEdhbWVTY2VuZUNvbnRyb2xsZXIoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBnYW1lX3NjZW5lOiBTY2VuZTNEO1xyXG4gIFxyXG4gICAgcHVibGljIENyZWF0ZVNjZW5lKCkge1xyXG4gICAgICAgIFJlc291cmNlTG9hZC5Mb2FkUmVzb3VyY2UoW0dhbWVEZWZpbmVkLmdhbWVfc2NlbmVfcGF0aF0sICgpID0+IHtcclxuICAgICAgICAgICAgdmFyIHQgPSBMYXlhLmxvYWRlci5nZXRSZXMoR2FtZURlZmluZWQuZ2FtZV9zY2VuZV9wYXRoKSBhcyBTY2VuZTNEO1xyXG4gICAgICAgICAgICBMYXlhLnN0YWdlLmFkZENoaWxkKHQpO1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVfc2NlbmUgPSB0O1xyXG5cclxuICAgICAgICAgICAgdmFyIF9idWxsZXRHID0gdC5nZXRDaGlsZEJ5TmFtZShcImJ1bGxldEdcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIHZhciBfYnVsbGV0Uj10LmdldENoaWxkQnlOYW1lKFwiYnVsbGV0UlwiKWFzIFNwcml0ZTNEO1xyXG4gICAgICAgICAgICBCdWxsZXRDb250cm9sbGVyLkluc3RhbmNlLmluaXQoX2J1bGxldEcsR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0Ryk7XHJcbiAgICAgICAgICAgIEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuaW5pdChfYnVsbGV0UixHYW1lRGVmaW5lZC5wb29sTmFtZS5CdWxsZXRSKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHZhciBfcm9sZTEgPSB0LmdldENoaWxkQnlOYW1lKFwicm9sZTFcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIC8vIHZhciBfcm9sZTIgPSB0LmdldENoaWxkQnlOYW1lKFwicm9sZTJcIikgYXMgU3ByaXRlM0Q7XHJcblxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdmFyIF9tb3N0ZXIxID0gdC5nZXRDaGlsZEJ5TmFtZShcIm1vc3RlcjFcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIC8vIHZhciBfbW9zdGVyMj0gdC5nZXRDaGlsZEJ5TmFtZShcIm1vc3RlcjJcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIHZhciBwbGF5ZXJzPXQuZ2V0Q2hpbGRCeU5hbWUoXCJQbGF5ZXJzXCIpYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIHZhciBtb3N0ZXJzPXQuZ2V0Q2hpbGRCeU5hbWUoXCJNb3N0ZXJzXCIpYXMgU3ByaXRlM0Q7XHJcblxyXG4gICAgICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5pbml0UGxheWVyKHBsYXllcnMuX2NoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgICAgIFJvbGVDb250cm9sbGVyLkluc3RhbmNlLmluaXRNb3N0ZXIobW9zdGVycy5fY2hpbGRyZW4pO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVSYXkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn0iLCJcclxuaW1wb3J0IEdhbWVEZWZpbmVkLCB7IENoZWNrVHlwZSwgQnVsbGV0VHlwZSB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vUm9sZVwiO1xyXG5pbXBvcnQgVmVjdG9yMz1MYXlhLlZlY3RvcjM7XHJcbmltcG9ydCBSYXk9TGF5YS5SYXk7XHJcbmltcG9ydCBIaXRSZXN1bHQ9TGF5YS5IaXRSZXN1bHQ7XHJcbmltcG9ydCBTcHJpdGUzRD1MYXlhLlNwcml0ZTNEXHJcbmltcG9ydCB7IEJ1bGxldCB9IGZyb20gXCIuL0J1bGxldFwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVfVG9vbCBmcm9tIFwiLi4vZ2FtZV90b29sL0dhbWVfVG9vbFwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9zdGVyIGV4dGVuZHMgUm9sZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgc3VwZXIub25Bd2FrZSgpO1xyXG4gICAgICAgIHRoaXMuX3R5cGUgPSBDaGVja1R5cGUuTW9zdGVyO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX2NvcnNzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fYnVsbGV0UG9zID0gdGhpcy5zZWxmLmdldENoaWxkQnlOYW1lKFwiYnVsbGV0UG9zXCIpIGFzIFNwcml0ZTNEO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ydzogVmVjdG9yMztcclxuICAgIHByaXZhdGUgX3JheTogUmF5O1xyXG4gICAgcHJpdmF0ZSBfaGl0OiBIaXRSZXN1bHQ7XHJcblxyXG4gICAgcHJpdmF0ZSBfY29yc3M6IFZlY3RvcjM7XHJcblxyXG4gICAgcHJpdmF0ZSBnbzogU3ByaXRlM0Q7XHJcbiAgICBwcml2YXRlIGdvUzogQnVsbGV0O1xyXG4gICAgQ3JlYXRlUmF5KCkge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoLXRoaXMuZm9ydy54LCAtdGhpcy5mb3J3LnksIC10aGlzLmZvcncueik7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5ID0gbmV3IFJheSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCB0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaXQgPSBuZXcgSGl0UmVzdWx0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5Lm9yaWdpbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuX3JheS5kaXJlY3Rpb24gPSB0aGlzLmZvcnc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoR2FtZURlZmluZWQucG9vbE5hbWUuQnVsbGV0Uik7XHJcbiAgICAgICAgICAgIHZhciBncyA9IHRoaXMuZ28uZ2V0Q29tcG9uZW50KEJ1bGxldCk7XHJcbiAgICAgICAgICAgIGlmICghZ3MpIHRoaXMuZ29TID0gdGhpcy5nby5hZGRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnJvdGF0aW9uID0gdGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBpc1MgPSBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUucGh5c2ljc1NpbXVsYXRpb24ucmF5Q2FzdCh0aGlzLl9yYXksIHRoaXMuX2hpdCk7XHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCBwb2kpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IGRpcztcclxuXHJcbiAgICAgICAgICAgIHZhciBvdGhlciA9IHRoaXMuX2hpdC5jb2xsaWRlci5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgaWYgKG90aGVyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCBvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2V0VGFyKG90aGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9yID0gdGhpcy5faGl0Lm5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG5vci54ID0gTWF0aC5hYnMobm9yLngpIDwgMC4wMDEgPyAwIDogbm9yLng7XHJcbiAgICAgICAgICAgICAgICBub3IueSA9IE1hdGguYWJzKG5vci55KSA8IDAuMDAxID8gMCA6IG5vci55O1xyXG4gICAgICAgICAgICAgICAgbm9yLnogPSBNYXRoLmFicyhub3IueikgPCAwLjAwMSA/IDAgOiBub3IuejtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBHYW1lX1Rvb2wuZ2V0UmVmbGVjdEFuZyh0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFuZyA9IHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3Jzcy55ID49IDAgPyBhbmcueSA9IGFuZy55ICsgMiAqIGEgOiBhbmcueSA9IGFuZy55IC0gMiAqIGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvUy5DcmVhdGVSYXkocG9pLCBhbmcsQnVsbGV0VHlwZS5CdWxsZXRSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gNTA7XHJcbiAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgUm90YXRpb25TZWxmKHJvdGE6IFZlY3RvcjMpIHtcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm0ucm90YXRlKHJvdGEpO1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlUmF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgU2V0TmV4dE5vdEFjdGl2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nb1MpIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgSGl0VGFyOlNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBSZW1vdmVUYXIoKXtcclxuICAgICAgICBpZih0aGlzLkhpdFRhcil7XHJcbiAgICAgICAgICAgIHRoaXMuSGl0VGFyPW51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBTZXRUYXIodGFyKXtcclxuICAgICAgICB0aGlzLkhpdFRhcj10YXI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIEhpdCgpe1xyXG4gICAgICAgIGlmKHRoaXMuSGl0VGFyKXtcclxuICAgICAgICAgICAgLy9HYW1lX1Rvb2wuQ3JlYXRlVGV4dCh0aGlzLkhpdFRhci5uYW1lK1wi6KKr5Ye75p2AIVwiKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuSGl0VGFyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCAgdGhpcy5IaXRUYXIubGF5ZXIgPT0gR2FtZURlZmluZWQubW9zdGVyX2xheWVyKXtcclxuICAgICAgICAgICAgICB2YXIgcj0gIHRoaXMuSGl0VGFyLmdldENvbXBvbmVudChSb2xlKWFzIFJvbGU7XHJcbiAgICAgICAgICAgICAgci5IaXRFZCgpO1xyXG4gICAgICAgICAgICAgdGhpcy5DcmVhdGVSYXkoKTtcclxuICAgICAgICAgICAgLy8gIHRoaXMuQ3JlYXRlUmF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgLy8gRXZlbnRNYW5hZ2VyLm9mZihHYW1lRGVmaW5lZC5IaXRFdmVudCx0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgb25FbmFibGUoKXtcclxuICAgICAgICBFdmVudE1hbmFnZXIub24oR2FtZURlZmluZWQuSGl0RXZlbnQsdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgICAgIHRoaXMuX2lzaGl0ZWQ9ZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25EaXNhYmxlKCl7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9mZihHYW1lRGVmaW5lZC5IaXRFdmVudCx0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vUm9sZVwiO1xyXG5pbXBvcnQgR2FtZURlZmluZWQsIHsgQ2hlY2tUeXBlLCBCdWxsZXRUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCBWZWN0b3IzID0gTGF5YS5WZWN0b3IzO1xyXG5pbXBvcnQgUmF5ID0gTGF5YS5SYXk7XHJcbmltcG9ydCBIaXRSZXN1bHQgPSBMYXlhLkhpdFJlc3VsdDtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBTcHJpdGUzRCA9IExheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCB7IEJ1bGxldCB9IGZyb20gXCIuL0J1bGxldFwiO1xyXG5pbXBvcnQgR2FtZV9Ub29sIGZyb20gXCIuLi9nYW1lX3Rvb2wvR2FtZV9Ub29sXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuZXhwb3J0IGNsYXNzIFBsYXllciBleHRlbmRzIFJvbGUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHN1cGVyLm9uQXdha2UoKTtcclxuICAgICAgICB0aGlzLl90eXBlID0gQ2hlY2tUeXBlLlBsYXllcjtcclxuICAgICAgICB0aGlzLmZvcncgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLl9jb3JzcyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX2J1bGxldFBvcyA9IHRoaXMuc2VsZi5nZXRDaGlsZEJ5TmFtZShcImJ1bGxldFBvc1wiKSBhcyBTcHJpdGUzRDtcclxuICAgIH1cclxuICAgIGlkaGl0ID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBmb3J3OiBWZWN0b3IzO1xyXG4gICAgcHJpdmF0ZSBfcmF5OiBSYXk7XHJcbiAgICBwcml2YXRlIF9oaXQ6IEhpdFJlc3VsdDtcclxuXHJcbiAgICBwcml2YXRlIF9jb3JzczogVmVjdG9yMztcclxuXHJcbiAgICBwdWJsaWMgZ286IFNwcml0ZTNEO1xyXG4gICAgcHVibGljIGdvUzogQnVsbGV0O1xyXG4gICAgQ3JlYXRlUmF5KCkge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoLXRoaXMuZm9ydy54LCAtdGhpcy5mb3J3LnksIC10aGlzLmZvcncueik7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5ID0gbmV3IFJheSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCB0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaXQgPSBuZXcgSGl0UmVzdWx0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5Lm9yaWdpbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuX3JheS5kaXJlY3Rpb24gPSB0aGlzLmZvcnc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0Ryk7XHJcbiAgICAgICAgICAgIHZhciBncyA9IHRoaXMuZ28uZ2V0Q29tcG9uZW50KEJ1bGxldCk7XHJcbiAgICAgICAgICAgIGlmICghZ3MpIHRoaXMuZ29TID0gdGhpcy5nby5hZGRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnJvdGF0aW9uID0gdGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBpc1MgPSBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUucGh5c2ljc1NpbXVsYXRpb24ucmF5Q2FzdCh0aGlzLl9yYXksIHRoaXMuX2hpdCk7XHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCBwb2kpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IGRpcztcclxuXHJcbiAgICAgICAgICAgIHZhciBvdGhlciA9IHRoaXMuX2hpdC5jb2xsaWRlci5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgaWYgKG90aGVyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCBvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2V0VGFyKG90aGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9yID0gdGhpcy5faGl0Lm5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG5vci54ID0gTWF0aC5hYnMobm9yLngpIDwgMC4wMDEgPyAwIDogbm9yLng7XHJcbiAgICAgICAgICAgICAgICBub3IueSA9IE1hdGguYWJzKG5vci55KSA8IDAuMDAxID8gMCA6IG5vci55O1xyXG4gICAgICAgICAgICAgICAgbm9yLnogPSBNYXRoLmFicyhub3IueikgPCAwLjAwMSA/IDAgOiBub3IuejtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBHYW1lX1Rvb2wuZ2V0UmVmbGVjdEFuZyh0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFuZyA9IHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3Jzcy55ID49IDAgPyBhbmcueSA9IGFuZy55ICsgMiAqIGEgOiBhbmcueSA9IGFuZy55IC0gMiAqIGE7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHZhciB2MT1uZXcgVmVjdG9yMygwLjgsMCwwLjYpOyAgLy/lkJHph48xIFxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIG5vcj1uZXcgVmVjdG9yMygtMSwwLDApOyAgICAvL3Yx56Kw5pKe5rOV57q/XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGFiPW5ldyBMYXlhLlF1YXRlcm5pb24oKTtcclxuICAgICAgICAgICAgICAgIC8vIExheWEuUXVhdGVybmlvbi5jcmVhdGVGcm9tQXhpc0FuZ2xlKHRoaXMuZm9ydyxhLGFiKVxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nb1MuQ3JlYXRlUmF5KHBvaSwgYWIsIEJ1bGxldFR5cGUuQnVsbGV0Ryk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1MuQ3JlYXRlUmF5KHBvaSwgYW5nLCBCdWxsZXRUeXBlLkJ1bGxldEcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBSb3RhdGlvblNlbGYocm90YTogVmVjdG9yMykge1xyXG4gICAgICAvLyAgY29uc29sZS5sb2cocm90YSk7XHJcbiAgICAgIC8vICBjb25zb2xlLmxvZyh0aGlzLl90cmFuc2Zvcm0ucm90YXRpb25FdWxlcik7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtLnJvdGF0ZShyb3RhKTtcclxuICAgICAgLy8gIGNvbnNvbGUubG9nKHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyKTtcclxuICAgICAgICB0aGlzLkNyZWF0ZVJheSgpO1xyXG4gICAgfVxyXG5cclxuICAgIFNldE5leHROb3RBY3RpdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ28pIHtcclxuICAgICAgICAgICAgdGhpcy5nby5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ29TKSB0aGlzLmdvUy5TZXROZXh0Tm90QWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgSGl0VGFyOiBTcHJpdGUzRDtcclxuICAgIHByaXZhdGUgUmVtb3ZlVGFyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLkhpdFRhcikge1xyXG4gICAgICAgICAgICB0aGlzLkhpdFRhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBTZXRUYXIodGFyKSB7XHJcbiAgICAgICAgdGhpcy5IaXRUYXIgPSB0YXI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIEhpdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5IaXRUYXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuSGl0VGFyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCB0aGlzLkhpdFRhci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciByID0gdGhpcy5IaXRUYXIuZ2V0Q29tcG9uZW50KFJvbGUpIGFzIFJvbGU7XHJcbiAgICAgICAgICAgICAgICByLkhpdEVkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNyZWF0ZVJheSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlKCkge1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vbihHYW1lRGVmaW5lZC5IaXRFdmVudCwgdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgICAgIHRoaXMuX2lzaGl0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRpc2FibGUoKSB7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9mZihHYW1lRGVmaW5lZC5IaXRFdmVudCwgdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IERpY3Rpb25hcnkgZnJvbSBcIi4uL2dhbWVfdG9vbC9EaWN0aW9uYXJ5XCI7XHJcbmltcG9ydCBWZWN0b3IzPUxheWEuVmVjdG9yMztcclxuZXhwb3J0IGNsYXNzIFBvb2xfTWFuYWdlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogUG9vbF9NYW5hZ2VyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogUG9vbF9NYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gUG9vbF9NYW5hZ2VyLmluc3RhbmNlIHx8IChQb29sX01hbmFnZXIuaW5zdGFuY2UgPSBuZXcgUG9vbF9NYW5hZ2VyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucG9vbERpYyA9IG5ldyBEaWN0aW9uYXJ5KCk7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJEaWMgPSBuZXcgRGljdGlvbmFyeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5a2Y5YKo5aSa5LiqXHJcbiAgICBwcml2YXRlIHBvb2xEaWM6IERpY3Rpb25hcnk7XHJcblxyXG4gICAgLy/pooTorr7lr7nosaFcclxuICAgIHByaXZhdGUgcHJlZmFiRGljOiBEaWN0aW9uYXJ5O1xyXG5cclxuICAgIC8vIFsgIF1cclxuICAgIHB1YmxpYyBJbml0RGF0YShuYW1lOiBzdHJpbmcsIHByZWZhYikge1xyXG4gICAgICAgIGlmIChwcmVmYWIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZmFiRGljLnNldChuYW1lLCBwcmVmYWIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXRBY3RpdmVPYmplY3QobmFtZTogc3RyaW5nLHNjYWxlPykge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2xEaWMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuYWN0aXZlPXRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZWZhYkRpYy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VyT2JqID0gTGF5YS5TcHJpdGUzRC5pbnN0YW50aWF0ZSh0aGlzLnByZWZhYkRpYy5nZXQobmFtZSkpIGFzIExheWEuU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJPYmoudHJhbnNmb3JtLmxvY2FsU2NhbGU9bmV3IFZlY3RvcjMoc2NhbGUsc2NhbGUsc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1ck9iajtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1ck9iaiA9IExheWEuU3ByaXRlM0QuaW5zdGFudGlhdGUodGhpcy5wcmVmYWJEaWMuZ2V0KG5hbWUpKSBhcyBMYXlhLlNwcml0ZTNEO1xyXG4gICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGN1ck9iai50cmFuc2Zvcm0ubG9jYWxTY2FsZT1uZXcgVmVjdG9yMyhzY2FsZSxzY2FsZSxzY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyT2JqO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v6ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU9iamVjdChnbzogTGF5YS5TcHJpdGUzRCkge1xyXG4gICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGtleSA9IGdvLm5hbWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvb2xEaWMuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvb2xEaWMuZ2V0KGtleSkucHVzaChnbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIERlc3RvcnlPYmooZ286TGF5YS5TcHJpdGUzRCl7XHJcbiAgICAgICAgaWYgKGdvKSBnby5kZXN0cm95KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5bu25pe26ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU11dGlPYmplY3QoZ286IExheWEuU3ByaXRlM0QsIHRpbWVyKSB7XHJcbiAgICAgICAgTGF5YS50aW1lci5vbmNlKHRpbWVyLCB0aGlzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBnby5uYW1lO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9vbERpYy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9vbERpYy5nZXQoa2V5KS5wdXNoKGdvKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IFNwcml0ZTNEID0gTGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IFRyYW5zZm9ybTNEID0gTGF5YS5UcmFuc2Zvcm0zRDtcclxuaW1wb3J0IEdhbWVEZWZpbmVkLCB7IENoZWNrVHlwZSB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgVmVjdG9yMyA9IExheWEuVmVjdG9yMztcclxuaW1wb3J0IFJheSA9IExheWEuUmF5O1xyXG5pbXBvcnQgSGl0UmVzdWx0ID0gTGF5YS5IaXRSZXN1bHQ7XHJcbmltcG9ydCB7IEJ1bGxldCB9IGZyb20gXCIuL0J1bGxldFwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVfVG9vbCBmcm9tIFwiLi4vZ2FtZV90b29sL0dhbWVfVG9vbFwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcbmV4cG9ydCBjbGFzcyBSb2xlIGV4dGVuZHMgTGF5YS5TY3JpcHQzRCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZWxmOiBTcHJpdGUzRDtcclxuICAgIHByb3RlY3RlZCBfdHJhbnNmb3JtOiBUcmFuc2Zvcm0zRDtcclxuICAgIHByb3RlY3RlZCBfdHlwZTogQ2hlY2tUeXBlO1xyXG4gICAgcHJvdGVjdGVkIF9idWxsZXRQb3M6IFNwcml0ZTNEO1xyXG4gICAgcHJvdGVjdGVkIF9pc2hpdGVkOiBib29sZWFuO1xyXG4gICAgb25Bd2FrZSgpIHtcclxuICAgICAgICB0aGlzLnNlbGYgPSB0aGlzLm93bmVyIGFzIFNwcml0ZTNEO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybSA9IHRoaXMuc2VsZi50cmFuc2Zvcm07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEhpdEVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc2hpdGVkKSByZXR1cm47XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ2hlY2tUeXBlLlBsYXllcjpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENoZWNrVHlwZS5Nb3N0ZXI6XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIHRoaXMuc2VsZi5hY3RpdmU9ZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkICBTZXROZXh0Tm90QWN0aXZlKCkge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsIlxyXG5pbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgeyBQbGF5ZXIgfSBmcm9tIFwiLi9QbGF5ZXJcIjtcclxuaW1wb3J0IFZlY3RvcjMgPSBMYXlhLlZlY3RvcjM7XHJcbmltcG9ydCB7IE1vc3RlciB9IGZyb20gXCIuL01vc3RlclwiO1xyXG5leHBvcnQgY2xhc3MgUm9sZUNvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFzbmNlOiBSb2xlQ29udHJvbGxlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFJvbGVDb250cm9sbGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YXNuY2UgfHwgKHRoaXMuaW5zdGFzbmNlID0gbmV3IFJvbGVDb250cm9sbGVyKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBwdWJsaWMgcGxheWVyOlNwcml0ZTNEO1xyXG4gICAgLy8gcHVibGljIHBsYXllclM6UGxheWVyO1xyXG5cclxuICAgIHB1YmxpYyBwbGF5ZXJBcnIgPSBbXTtcclxuICAgIHB1YmxpYyBtb3N0ZXJBcnIgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgYmVoYXZpb3JBcnIgPSBbXTtcclxuICAgIHB1YmxpYyBpbml0UGxheWVyKHJvbGVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvbGVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcm9sZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgYmVoID0gZWxlbWVudC5hZGRDb21wb25lbnQoUGxheWVyKTtcclxuICAgICAgICAgICAgdGhpcy5iZWhhdmlvckFyci5wdXNoKGJlaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmKHJvbGUpe1xyXG4gICAgICAgIC8vICAgICB0aGlzLnBsYXllcj1yb2xlO1xyXG4gICAgICAgIC8vICAgICB0aGlzLnBsYXllclM9dGhpcy5wbGF5ZXIuYWRkQ29tcG9uZW50KFBsYXllcik7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0TW9zdGVyKG1vc3RlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbW9zdGVycy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IG1vc3RlcnNbaW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgYmVoID0gZWxlbWVudC5hZGRDb21wb25lbnQoTW9zdGVyKTtcclxuICAgICAgICAgICAgdGhpcy5iZWhhdmlvckFyci5wdXNoKGJlaCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIENyZWF0ZVJheSgpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5iZWhhdmlvckFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuYmVoYXZpb3JBcnJbaW5kZXhdO1xyXG4gICAgICAgICAgICBlbGVtZW50LkNyZWF0ZVJheSgpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gIGlmKHRoaXMucGxheWVyUyl0aGlzLnBsYXllclMuQ3JlYXRlUmF5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgUm9sZVJvdGF0aW9uKHJvdGE6IFZlY3RvcjMpIHtcclxuICAgICAgICAvLyBpZih0aGlzLnBsYXllclMpdGhpcy5wbGF5ZXJTLlJvdGF0aW9uU2VsZihyb3RhKTtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5iZWhhdmlvckFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuYmVoYXZpb3JBcnJbaW5kZXhdO1xyXG4gICAgICAgICAgICBlbGVtZW50LlJvdGF0aW9uU2VsZihyb3RhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgU291bmRNYW5hZ2VyID0gTGF5YS5Tb3VuZE1hbmFnZXI7XHJcbmltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL1dYU2RrXCI7XHJcbmV4cG9ydCBjbGFzcyBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YXNuY2U6IFNldHRpbmdDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHZpYnJhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIHNvdW5kPXRydWU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFzbmNlIHx8ICh0aGlzLmluc3Rhc25jZSA9IG5ldyBTZXR0aW5nQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXR0aW5nU291bmQodmFsdWU/OiBudW1iZXIpIHtcclxuICAgICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRTb3VuZFZvbHVtZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRNdXNpY1ZvbHVtZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3VuZENoYW5uZWw6IExheWEuU291bmRDaGFubmVsO1xyXG4gICAgcHVibGljIF9wbGF5TXVzaWMob24pIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgaWYgKG9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdW5kQ2hhbm5lbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbCA9IFNvdW5kTWFuYWdlci5wbGF5TXVzaWModGhpcy5UcmFpbkxvb3AsIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwudm9sdW1lID0gMC41XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwucmVzdW1lKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc291bmRDaGFubmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbC5wYXVzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfcGxheUJhZE1vdmUoKSB7XHJcbiAgICAgICBcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLmJhZE1vdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfQ2xpY2soKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5jbGljayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9Db250aW51ZShvbikge1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBpZiAob24pIHtcclxuICAgICAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkNvbnRpbnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBTb3VuZE1hbmFnZXIuc3RvcFNvdW5kKHRoaXMuQ29udGludWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9MZXZlbENvbXAoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5MZXZlbENvbXApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfVHJhaW5DcmFzaCgpIHtcclxuICAgICAgICBXWFNkay5Mb25nVmlicmF0ZSgpO1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuVHJhaW5DcmFzaCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX1RyYWluU3RvcCgpIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLlRyYWluU3RvcCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX0NvaW4oKSB7XHJcbiAgICAgICAgV1hTZGsuU2hvcnRWaWJyYXRlKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5Db2luKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSB0ZW1wID0gMDtcclxuICAgIHB1YmxpYyBfSnVtcCgpIHtcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkp1bXBbdGhpcy50ZW1wXSk7XHJcbiAgICAgICAgdGhpcy50ZW1wKys7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcCA9PSA4KSB0aGlzLnRlbXAgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmFkTW92ZSA9IFwicmVzL1NvdW5kL0JhZE1vdmUubXAzXCI7XHJcbiAgICBwcml2YXRlIGNsaWNrID0gXCJyZXMvU291bmQvY2xpY2subXAzXCI7XHJcbiAgICBwcml2YXRlIENvbnRpbnVlID0gXCJyZXMvU291bmQvQ29udGludWUubXAzXCI7XHJcbiAgICBwcml2YXRlIExldmVsQ29tcCA9IFwicmVzL1NvdW5kL0xldmVsQ29tcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5DcmFzaCA9IFwicmVzL1NvdW5kL1RyYWluQ3Jhc2gubXAzXCI7XHJcbiAgICBwcml2YXRlIFRyYWluTG9vcCA9IFwicmVzL1NvdW5kL1RyYWluTG9vcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5TdG9wID0gXCJyZXMvU291bmQvVHJhaW5TdG9wLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBDb2luPVwicmVzL1NvdW5kL0NvaW4xLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBKdW1wID1cclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjEubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjIubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjMubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjQubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjUubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjYubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjcubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjgubXAzXCIsXHJcbiAgICAgICAgXTtcclxuXHJcbn0iLCJpbXBvcnQgRGljdGlvbmFyeSBmcm9tIFwiLi4vZ2FtZV90b29sL0RpY3Rpb25hcnlcIjtcclxuaW1wb3J0IHsgZ2FtZV91aSB9IGZyb20gXCIuLi9nYW1lX3VpL2dhbWVfdWlcIjtcclxuaW1wb3J0IHsgbWFpbl91aSB9IGZyb20gXCIuLi9nYW1lX3VpL21haW5fdWlcIjtcclxuXHJcblxyXG5leHBvcnQgZW51bSBWaWV3VHlwZSB7XHJcbiAgICBnYW1lX3VpLFxyXG4gICAgbWFpbl91aVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXdNYW5hZ2VyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBWaWV3TWFuYWdlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFZpZXdNYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZSB8fCAodGhpcy5pbnN0YW5jZSA9IG5ldyBWaWV3TWFuYWdlcigpKTtcclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB2aWV3RGljID0gW107XHJcbiAgICBwcml2YXRlIGN1clZpZXc6IGFueTtcclxuICAgIHByaXZhdGUgYWRkVmlld0RpYyA9IG5ldyBEaWN0aW9uYXJ5KCk7XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMudmlld0RpY1tWaWV3VHlwZS5nYW1lX3VpXSA9IGdhbWVfdWk7XHJcbiAgICAgICAgdGhpcy52aWV3RGljW1ZpZXdUeXBlLm1haW5fdWldID0gbWFpbl91aTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBPcGVuVmlldyh2aWV3OiBWaWV3VHlwZSwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1clZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1clZpZXcuT25DbG9zZSgpO1xyXG4gICAgICAgICAgICBMYXlhLnN0YWdlLnJlbW92ZUNoaWxkKHRoaXMuY3VyVmlldyk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldy5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1clZpZXcgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1clZpZXcgPSBuZXcgdGhpcy52aWV3RGljW3ZpZXddO1xyXG5cclxuICAgICAgICBMYXlhLnN0YWdlLmFkZENoaWxkKHRoaXMuY3VyVmlldyk7XHJcbiAgICAgIFxyXG4gICAgICAgIHRoaXMuY3VyVmlldy5PblNob3coZGF0YSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZ2V0Q3VyVmlldygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1clZpZXc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgQWRkVmlldyh2aWV3OiBWaWV3VHlwZSwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmFkZFZpZXdEaWMuaGFzKHZpZXcpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IHRfdmlldyA9IG5ldyB0aGlzLnZpZXdEaWNbdmlld107XHJcbiAgICAgICAgdGhpcy5hZGRWaWV3RGljLnNldCh2aWV3LCB0X3ZpZXcpO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodF92aWV3KTtcclxuICAgICAgICB0X3ZpZXcuT25TaG93KGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIFJlbW92ZVZpZXcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyVmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldy5PbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UucmVtb3ZlQ2hpbGQodGhpcy5jdXJWaWV3KTtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIENsb3NlVmlldyh2aWV3OiBWaWV3VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5hZGRWaWV3RGljLmhhcyh2aWV3KSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCB0X3ZpZXcgPSB0aGlzLmFkZFZpZXdEaWMuZ2V0KHZpZXcpO1xyXG4gICAgICAgIHRfdmlldy5PbkNsb3NlKCk7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0X3ZpZXcpO1xyXG4gICAgICAgIHRfdmlldy5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIHRoaXMuYWRkVmlld0RpYy5kZWxldGUodmlldyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGN1ck1hc2s6IGFueTtcclxuICAgIHB1YmxpYyBPcGVuTWFzaygpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJNYXNrICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgdGhpcy5jdXJNYXNrID0gbmV3IE1hc2tfdWkoKTtcclxuICAgICAgICBpZiAoIXRoaXMuY3VyTWFzaykgcmV0dXJuO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBDbG9zZU1hc2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyTWFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzay5PbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UucmVtb3ZlQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJNYXNrLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBFdmVudE1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGlzaXNwYXRjaGVyOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcclxuICAgIHByaXZhdGUgc3RhdGljIGdldCBEaXNpc3BhdGNoZXIoKTogTGF5YS5FdmVudERpc3BhdGNoZXIge1xyXG4gICAgICAgIHJldHVybiBFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyIHx8IChFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgb24odHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9uKHR5cGUsIGNhbGwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBvZmYodHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9mZih0eXBlLCBjYWxsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZXZlbnQodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5EaXNpc3BhdGNoZXIuZXZlbnQodHlwZSwgZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgVXNlck1vZGVsIGZyb20gXCIuL1VzZXJNb2RlbFwiO1xyXG5pbXBvcnQgeyBNYWluIH0gZnJvbSBcIi4uL01haW5cIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4vRXZlbnRNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRllIRF9TZGsge1xyXG4gICAgcHVibGljIHN0YXRpYyBBZF9DbGlja1R5cGUgPSB7XHJcbiAgICAgICAgVmlkZW86IFwidmlkZW9fY2xpY2tcIixcclxuICAgICAgICBXYXRjaDogXCJ3YXRjaFwiLFxyXG4gICAgICAgIFNoYXJlOiBcInNoYXJlXCIsXHJcbiAgICAgICAgQmFubmVyOiBcImJhbm5lclwiLFxyXG4gICAgICAgIFB1c2g6IFwicHVzaFwiXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwdXNoRGF0YSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3BlbmlkOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc0hhdmVEYXRlID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTaG93QWQgPSBcIlNob3dBZFwiO1xyXG4gICAgLy/liJ3lp4vljJZzZGtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5pdFNkaygpIHtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuc3RhcnRTZGsoKTtcclxuICAgICAgICBGWUhEX1Nkay5Vc2VySW5mb0F1dGgoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+eUqOaIt+aOiOadg1xyXG4gICAgcHVibGljIHN0YXRpYyBVc2VySW5mb0F1dGgoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuZ2V0RnloZFVzZXJJbmZvKG51bGwsIGZhbHNlLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuaXoOaOiOadg+WbnuiwgzpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLm9wZW5pZCA9IGRhdGEucmVzdWx0LnVzZXIub3BlbmlkO1xyXG4gICAgICAgICAgICAgICAgRllIRF9TZGsuQXV0aEluZm8oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQXV0aEluZm8oKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkubG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5o6I5p2D5LiK5oql5Zue6LCDOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICBGWUhEX1Nkay5WYWx1ZVVzZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc3RhdGljIFZhbHVlVXNlcigpIHtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS52YWx1ZXVzZXIoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnInmlYjnlKjmiLfkuIrmiqU6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvop5LoibJcclxuICAgIHB1YmxpYyBzdGF0aWMgUm9sZURhdGEoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgICAgIHJvbGVfaWQ6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuU2VydmVyVGltZVxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkucm9sZURhdGEoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJvlu7rop5LoibI6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIEZZSERfU2RrLkxvZ2luKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL+eZu+W9leS/oeaBr+S4iuaKpVxyXG4gICAgcHVibGljIHN0YXRpYyBMb2dpbigpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBvcGVuaWQgPSBGWUhEX1Nkay5vcGVuaWQgPyBGWUhEX1Nkay5vcGVuaWQgOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwub3BlbmlkO1xyXG4gICAgICAgIHZhciBhcmdzID0ge1xyXG4gICAgICAgICAgICBvcGVuaWQ6IG9wZW5pZCxcclxuICAgICAgICAgICAgcm9sZV9pZDogVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCxcclxuICAgICAgICAgICAgY3JlYXRlX3RpbWU6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lLnRvU3RyaW5nKClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLnmbvlvZXlj4LmlbA6XCIgKyBKU09OLnN0cmluZ2lmeShhcmdzKSk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnVwbG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi55m75b2V57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICAvLyBGWUhEX1Nkay5QdXNoRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8v54K55Ye75LqL5Lu25LiK5oqlXHJcbiAgICBwdWJsaWMgc3RhdGljIENsaWNrQWQoYWRfdHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIGFkX3R5cGU6IGFkX3R5cGUsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75Y+C5pWwOlwiICsgcGFyYW0pO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5hZHZlcnRpc2VtZW50KHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIueCueWHu+e7k+aenDpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFB1c2hEYXRhKCkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHBhcmFtID0ge307XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnNoYXJlUmVjb21tZW5kKHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5wdXNoRGF0YSA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLnB1c2hEYXRhLnNvcnQoRllIRF9TZGsuTGlzdFNvcnQpO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRNYW5hZ2VyLmV2ZW50KEZZSERfU2RrLlNob3dBZCk7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5pc0hhdmVEYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuiOt+WPluS6kuaOqOS/oeaBrzpcIiArIEpTT04uc3RyaW5naWZ5KEZZSERfU2RrLnB1c2hEYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dIdVR1aUp1bXAoZGF0YSkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgaWYgKGRhdGEuanVtcF90eXBlID09IDIpIC8v5LqM57u056CB6Lez6L2s5pa55rOVXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnByZXZpZXdJbWFnZSh7IGN1cnJlbnQ6IGRhdGEucXJjb2RlLCB1cmxzOiBbZGF0YS5xcmNvZGVdIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkYXRhLmp1bXBfdHlwZSA9PSAxKSAvL+ebtOi3s+aWueazlVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5uYXZpZ2F0ZVRvTWluaVByb2dyYW0oe1xyXG4gICAgICAgICAgICAgICAgYXBwSWQ6IGRhdGEudG9fYXBwaWQsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBkYXRhLmp1bXBfcGF0aCxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5omT5byA5oiQ5YqfXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXmiJDlip86XCIgKyBKU09OLnN0cmluZ2lmeShyZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICBGWUhEX1Nkay5QdXNoQ2xpY2soZGF0YS50b19hcHBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRhdGEuanVtcF90eXBlID09IDApLy/lubPlj7Dot7Povazmlrnms5VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gubmF2aWdhdGVUb01pbmlQcm9ncmFtKHtcclxuICAgICAgICAgICAgICAgIGFwcElkOiBkYXRhLnBsYXRmb3JtX2FwcGlkLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogZGF0YS5qdW1wX3BhdGgsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaJk+W8gOaIkOWKn1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5LiK5oql5oiQ5YqfOlwiICsgSlNPTi5zdHJpbmdpZnkocmVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgRllIRF9TZGsuUHVzaENsaWNrKGRhdGEudG9fYXBwaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgUHVzaENsaWNrKHRvX2FwcGlkKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgICAgICB0b19hcHBpZDogdG9fYXBwaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5zaGFyZVBsYXkocGFyYW0sIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75LiK5oql57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIExpc3RTb3J0KGEsIGIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChOdW1iZXIoYVtcInBhbmVsXCJdKSA8IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE51bWJlcihhW1wicGFuZWxcIl0pID09IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTnVtYmVyKGFbXCJwYW5lbFwiXSkgPiBOdW1iZXIoYltcInBhbmVsXCJdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZURlZmluZWQge1xyXG4gICAgcHVibGljIHN0YXRpYyBwbGF5ZXJfbGF5ZXIgPSA5O1xyXG4gICAgcHVibGljIHN0YXRpYyB3YWxsX2xheWVyID0gODtcclxuICAgIHB1YmxpYyBzdGF0aWMgbW9zdGVyX2xheWVyID0gMTA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJvc3NfbGF5ZXIgPSAxMTtcclxuICAgIHB1YmxpYyBzdGF0aWMgdHJlZV9sYXllciA9IDEyO1xyXG4gICAgcHVibGljIHN0YXRpYyBib21iX2xheWVyID0gMTM7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgSGl0RXZlbnQgPSBcIkhpdEV2ZW50XCI7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2FtZV9zY2VuZV9wYXRoID1cInJlcy9MYXlhU2NlbmVfbWFpbi9Db252ZW50aW9uYWwvbWFpbi5sc1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXCJyZXMvTGF5YVNjZW5lX0dhbWVTY2VuZS9Db252ZW50aW9uYWwvR2FtZVNjZW5lLmxzXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwb29sTmFtZSA9IHtcclxuICAgICAgICBidWxsZXRHOiBcImJ1bGxldEdcIixcclxuICAgICAgICBCdWxsZXRSOiBcIkJ1bGxldFJcIlxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgdWlSZXMgPSBbXHJcbiAgICAgICAgXCJyZXMvYXRsYXMvbWFpbl9yZXMuYXRsYXNcIixcclxuICAgICAgICBcInJlcy9hdGxhcy9tYWluX3Jlcy5wbmcgXCJcclxuICAgIF07XHJcbn1cclxuZXhwb3J0IGVudW0gQ2hlY2tUeXBlIHtcclxuICAgIFBsYXllcixcclxuICAgIE1vc3RlcixcclxuICAgIEJvc3MsXHJcbiAgICBCb21iLFxyXG4gICAgVHJlZVxyXG59XHJcbmV4cG9ydCBlbnVtIEJ1bGxldFR5cGUge1xyXG4gICAgQnVsbGV0UixcclxuICAgIEJ1bGxldEdcclxufVxyXG4iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzb3VyY2VMb2FkIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIExvYWRSZXNvdXJjZShwYXRoOkFycmF5PGFueT4sY29tcGxldD86RnVuY3Rpb24pe1xyXG4gICAgICAgIExheWEubG9hZGVyLnJldHJ5TnVtPTI7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIubWF4TG9hZGVyPTM7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIucmV0cnlEZWxheT0xMDA7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIuY3JlYXRlKHBhdGgsbmV3IExheWEuSGFuZGxlcih0aGlzLGNvbXBsZXQpKTtcclxuICAgICAgICBMYXlhLmxvYWRlci5vbihMYXlhLkV2ZW50LkVSUk9SLHRoaXMsKGRhdGEpPT57XHJcbiAgICAgICAgICAgY29uc29sZS5sb2coZGF0YStcIiDotYTmupDliqDovb3lpLHotKVcIik7XHJcbiAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4vV1hTZGtcIjtcclxuaW1wb3J0IHsgRllIRF9TZGsgfSBmcm9tIFwiLi9GWUhEX1Nka1wiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFyZU1vZHVsZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIElzU2hhcmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdvU2hhcmUoY2FsbEJhY2spOiB2b2lkIHtcclxuICAgICAgICBTaGFyZU1vZHVsZS5TaGFyZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIuWIhuS6q+eCueWHu+aXtumXtD1cIiArIFNoYXJlTW9kdWxlLlNoYXJlVGltZSk7XHJcbiAgICAgICAgU2hhcmVNb2R1bGUuSXNTaGFyaW5nID0gdHJ1ZTtcclxuICAgICAgICBTaGFyZU1vZHVsZS5jYWxsYmFjayA9IGNhbGxCYWNrO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBTaGFyZVRpbWU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgT25TaG93SGFuZGxlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gub25TaG93KGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25zaG93IHNoYXJlIHN0YXJ0XCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLov5vlhaXlvq7kv6FcIik7XHJcbiAgICAgICAgICAgICAgICAvL0xheWEudGltZXIuc2NhbGU9MTtcclxuICAgICAgICAgICAgICAgIGlmIChTaGFyZU1vZHVsZS5Jc1NoYXJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBTaGFyZU1vZHVsZS5Jc1NoYXJpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5YiG5Lqr5Zue5Yiw5ri45oiP5pe26Ze0XCIgKyB0aW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgd2FpdCA9ICh0aW1lIC0gU2hhcmVNb2R1bGUuU2hhcmVUaW1lKSAvIDEwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLliIbkuqvlgZznlZnml7bpl7TkuLrvvJpcIiArIHdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGFyZVN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbFN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAod2FpdCA+PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDw9IDAuNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZZSERfU2RrLkNsaWNrQWQoRllIRF9TZGsuQWRfQ2xpY2tUeXBlLlNoYXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghU2hhcmVNb2R1bGUuY2FsbGJhY2spIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlTW9kdWxlLmNhbGxiYWNrKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93VG9hc3QoeyB0aXRsZTogXCLliIbkuqvmiJDlip/vvIFcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghU2hhcmVNb2R1bGUuY2FsbGJhY2spIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDw9IDAuNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1RvYXN0KHsgdGl0bGU6IFwi5YiG5Lqr5aSx6LSl77yBXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdYU2RrLlNob3dUb2FzdChcIuivt+WIhuS6q+WIsOS4jeWQjOe+pF4tXlwiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZU1vZHVsZS5jYWxsYmFjayhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgY2FsbGJhY2s7XHJcbn0iLCJpbXBvcnQgeyBNYWluIH0gZnJvbSBcIi4uL01haW5cIjtcclxuaW1wb3J0IE5ldE1hbmFnZXIgZnJvbSBcIi4vTmV0TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBEYXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL0RhdGVDb250cm9sbGVyXCI7XHJcblxyXG5cclxuZXhwb3J0IGVudW0gVXNlckNvbmZpZ05hbWUge1xyXG4gICAgdHJhaW4sIHNpZ24sIHJld2FyZHNcclxufVxyXG4vL+eUqOaIt+S/oeaBr+WxnuaAp1xyXG5leHBvcnQgZW51bSBVc2VyQXR0ciB7XHJcbiAgICBlcXVpcF90cmFpbiwgdXNlcl9pZCwgc3RhZ2UsIGdldF90cmFpbnMsIG1vbmV5LCBwcm9ncmVzc190cmFpbnNcclxufVxyXG5leHBvcnQgY2xhc3MgTmV0VXNlck1vZGVsIHtcclxuICAgIHB1YmxpYyBtX3VzZXJfYmFzZTogT2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcl9pbnZpdGU6IE9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfbG90dGVyeTogb2JqZWN0XHJcbiAgICBwcml2YXRlIGxvZ2luU2V2ZXJUaW1lOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIG1fdXNlcl90cmVhc3VyZTogb2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcl9hY2hpZXZlbWVudDogb2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcl9zaWduOiBPYmplY3Q7XHJcbiAgICBwcml2YXRlIG1fdXNlcl9hcmVuYTogT2JqZWN0O1xyXG4gICAgcHJpdmF0ZSBsb2NhbFRpbWU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBuaWNrbmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG9wZW5pZDogc3RyaW5nO1xyXG4gICAgcHVibGljIHVzZXJpZDogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fdG9rZW46IHN0cmluZztcclxuICAgIHB1YmxpYyBtX2NvbmZpZ3M6IE9iamVjdDtcclxuICAgIHB1YmxpYyBtX2FwcF9zZXR0aW5nOiBPYmplY3Q7XHJcbiAgICBwdWJsaWMgbV91c2VyOiBPYmplY3Q7XHJcbiAgICBjb25zdHJ1Y3RvcihfdG9rZW46IHN0cmluZywgX2NvbmZpZzogT2JqZWN0LCBfYXBwU2V0dGluZzogT2JqZWN0LCBfdXNlcjogT2JqZWN0LCBfdXNlcmJhc2U6IE9iamVjdCwgX3VzZUludml0ZTogT2JqZWN0LCBfdXNlcl9sb3R0ZXJ5OiBPYmplY3QsIF91c2VyX3RyZWFzdXJlOiBPYmplY3QsIHQsIF91c2VyX2FjaGlldmVtZW50LCBfdXNlcl9zaWduLCBfdXNlcl9hcmVuYSkge1xyXG4gICAgICAgIHRoaXMubG9jYWxUaW1lID0gTGF5YS50aW1lci5jdXJyVGltZXI7XHJcbiAgICAgICAgdGhpcy5sb2dpblNldmVyVGltZSA9IHQ7XHJcbiAgICAgICAgdGhpcy5tX3Rva2VuID0gX3Rva2VuO1xyXG4gICAgICAgIHRoaXMubV9jb25maWdzID0gX2NvbmZpZztcclxuICAgICAgICB0aGlzLm1fYXBwX3NldHRpbmcgPSBfYXBwU2V0dGluZztcclxuICAgICAgICB0aGlzLm1fdXNlciA9IF91c2VyO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2Jhc2UgPSBfdXNlcmJhc2U7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfaW52aXRlID0gX3VzZUludml0ZTtcclxuICAgICAgICB0aGlzLm1fdXNlcl9sb3R0ZXJ5ID0gX3VzZXJfbG90dGVyeTtcclxuICAgICAgICB0aGlzLm1fdXNlcl90cmVhc3VyZSA9IF91c2VyX3RyZWFzdXJlO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2FjaGlldmVtZW50ID0gX3VzZXJfYWNoaWV2ZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfc2lnbiA9IF91c2VyX3NpZ247XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfYXJlbmEgPSBfdXNlcl9hcmVuYTtcclxuICAgICAgICB0aGlzLnVzZXJpZCA9IHRoaXMubV91c2VyW1widXNlcl9pZFwiXTtcclxuICAgICAgICB0aGlzLm9wZW5pZCA9IHRoaXMubV91c2VyX2Jhc2VbXCJvcGVuaWRcIl07XHJcbiAgICAgICAgdGhpcy5uaWNrbmFtZSA9IHRoaXMubV91c2VyX2Jhc2VbXCJuaWNrbmFtZVwiXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgQ2ZnKGNmZykge1xyXG4gICAgICAgIHRoaXMubV9jb25maWdzID0gY2ZnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaGFyZXRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJldGl0bGVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJldGl0bGVcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaGFyZWltYWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJlaW1hZ2VcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJlaW1hZ2VcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIEdldENmZyh0eXBlOiBVc2VyQ29uZmlnTmFtZSk6IGFueSB7XHJcbiAgICAgICAgdmFyIF90eXBlID0gVXNlckNvbmZpZ05hbWVbdHlwZV07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubV9jb25maWdzW190eXBlXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBHZXRVc2VyQXR0cihfYXR0cjogVXNlckF0dHIpIHtcclxuICAgICAgICB2YXIgYXR0ciA9IFVzZXJBdHRyW19hdHRyXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tX3VzZXJbYXR0cl07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IFNlcnZlclRpbWUoKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgdGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgIGxldCBzdGltZSA9IHRoaXMubG9naW5TZXZlclRpbWUgKyBNYXRoLmNlaWwoKHRpbWUgLSB0aGlzLmxvY2FsVGltZSkgLyAxMDAwKTtcclxuICAgICAgICByZXR1cm4gc3RpbWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IEd1aWRlTGV2ZWwoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiR3VpZGVMZXZlbFwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkd1aWRlTGV2ZWxcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IEJhbm5lck1vdmVUaW1lKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJhbm5lck1vdmVUaW1lXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiQmFubmVyTW92ZVRpbWVcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgSGF2ZUJhbm5lcigpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJIYXZlQmFubmVyXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSGF2ZUJhbm5lclwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBJc1NoYXJlKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIklzU2hhcmVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJJc1NoYXJlXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IEJ0bkNhbk1vdmUoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiQnRuQ2FuTW92ZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJ0bkNhbk1vdmVcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgSVNTaGFyZVRoZW5WaWRlbygpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJJU1NoYXJlVGhlblZpZGVvXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSVNTaGFyZVRoZW5WaWRlb1wiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBPcGVuU2NlbmVWYWx1ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJPcGVuU2NlbmVWYWx1ZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIk9wZW5TY2VuZVZhbHVlXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBJc09wZW5UcnlPdXQoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiSXNPcGVuVHJ5T3V0XCJdKSB7XHJcbiAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSXNPcGVuVHJ5T3V0XCJdKTtcclxuICAgICAgICAgICAgaWYgKG51bSA9PSAwKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCBudW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHVibGljIEp1bmRnQ2ZnRm9yQ2RuKGNhbGxiYWxsOiBGdW5jdGlvbikge1xyXG4gICAgLy8gICAgIHRoaXMubV9jb25maWdzID0gbnVsbDtcclxuICAgIC8vICAgICBpZiAodGhpcy5tX2NvbmZpZ3MpIHtcclxuICAgIC8vICAgICAgICAgY2FsbGJhbGwoKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICB2YXIgY2ZnID0gTGF5YS5Mb2NhbFN0b3JhZ2UuZ2V0SlNPTihNYWluLmNmZyk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjZmcpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChjZmcuVkVSID09IHRoaXMuR2V0Q2ZnVmVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBjZmc7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmflrZjlnKhcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhbGwoKTtcclxuICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmflrZjlnKjkvYbmmK/ov4fmnJ/kuoZcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShNYWluLmNmZyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgTGF5YS5sb2FkZXIubG9hZChcImNmZy5qc29uXCIsIG5ldyBMYXlhLkhhbmRsZXIodGhpcywgKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmfkuIvovb3lrozmiJBcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uY2ZnLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1fY29uZmlncyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgTGF5YS5sb2FkZXIubG9hZChcImNmZy5qc29uXCIsIG5ldyBMYXlhLkhhbmRsZXIodGhpcywgKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ+S4i+i9veWujOaIkFwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uY2ZnLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgICAgICAgICB9KSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gcHVibGljIEp1bmRnQ2ZnKHZlciwgY2FsbGJhbGw6IEZ1bmN0aW9uKSB7XHJcbiAgICAvLyAgICAgdGhpcy5tX2NvbmZpZ3MgPSBudWxsO1xyXG4gICAgLy8gICAgIGlmICh0aGlzLm1fY29uZmlncykge1xyXG4gICAgLy8gICAgICAgICBjYWxsYmFsbCh0cnVlKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICB2YXIgY2ZnID0gTGF5YS5Mb2NhbFN0b3JhZ2UuZ2V0SlNPTihNYWluLkNGRyk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjZmcpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChjZmcuVkVSID09IHZlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuQ2ZnID0gY2ZnO1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuW3sue7j+aLpeaciSzkuI3nlKjmm7TmlrBcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgRGF0ZUNvbnRyb2xsZXIuU2V0Q2ZnKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5a2Y5Zyo5L2G5piv6L+H5pyf5LqGXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTWFpbi5DRkcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIE5ldE1hbmFnZXIuSW5zdGFuY2UuUG9zdENmZ1JlcXVlc3QoKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgZGF0YS5WRVIgPSB2ZXI7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEpTT04oTWFpbi5DRkcsIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLkNmZyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIERhdGVDb250cm9sbGVyLlNldENmZygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFsbCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9LCAoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIumFjee9ruiOt+WPluWksei0pVwiICsgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWxsKGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnKzlnLDmsqHmnIljZmdcIik7XHJcbiAgICAvLyAgICAgICAgICAgICBOZXRNYW5hZ2VyLkluc3RhbmNlLlBvc3RDZmdSZXF1ZXN0KChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmdcIiArIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGEuVkVSID0gdmVyO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEpTT04oTWFpbi5DRkcsIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuQ2ZnID0gZGF0YTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBEYXRlQ29udHJvbGxlci5TZXRDZmcoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjYWxsYmFsbCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgICAgIH0sIChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLphY3nva7ojrflj5blpLHotKVcIiArIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy99XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXJNb2RlbCB7XHJcbiAgICBwdWJsaWMgZ2V0IEN1ck1vZGVsKCk6IE5ldFVzZXJNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyTW9kZWw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTtcclxuICAgIHB1YmxpYyBtX2NvZGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX2dlbmRlcjogbnVtYmVyO1xyXG4gICAgcHVibGljIG1fY291bnRyeTogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IoY29kZTogc3RyaW5nLCBuaWNrbmFtZTogc3RyaW5nLCBhdmF0YXI6IHN0cmluZywgZ2VuZGVyOiBudW1iZXIsIGNvdW50cnk6IHN0cmluZywgcHJvdmluY2U6IHN0cmluZywgY2l0eTogc3RyaW5nLCBkZXZpY2U6IHN0cmluZywgc2hhcmVfaWQ6IHN0cmluZywgc2NlbmU6IHN0cmluZykge1xyXG4gICAgICAgIFVzZXJNb2RlbC5pbnN0YW5jZSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5tX2NvZGUgPSBjb2RlO1xyXG4gICAgICAgIHRoaXMubV9uaWNrbmFtZSA9IG5pY2tuYW1lID8gbmlja25hbWUgOiBcIua4uOWuolwiO1xyXG4gICAgICAgIHRoaXMubV9hdmF0YXIgPSBhdmF0YXIgPyBhdmF0YXIgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9nZW5kZXIgPSBnZW5kZXIgPyBnZW5kZXIgOiAwO1xyXG4gICAgICAgIHRoaXMubV9jaXR5ID0gY2l0eSA/IGNpdHkgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9kZXZpY2UgPSBkZXZpY2UgPyBkZXZpY2UgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9zaGFyZV9pZCA9IHNoYXJlX2lkID8gc2hhcmVfaWQgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9zY2VuZSA9IHNjZW5lID8gc2NlbmUgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9jb3VudHJ5ID0gY291bnRyeSA/IGNvdW50cnkgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9wcm92aW5jZSA9IHByb3ZpbmNlID8gcHJvdmluY2UgOiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG1fY2l0eTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fZGV2aWNlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9zaGFyZV9pZDogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fc2NlbmU6IHN0cmluZztcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFVzZXJNb2RlbCB7XHJcbiAgICAgICAgaWYgKFVzZXJNb2RlbC5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVXNlck1vZGVsLmluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgVXNlck1vZGVsLmluc3RhbmNlID0gbmV3IFVzZXJNb2RlbChcIjExXCIsIFwi5ri45a6iXCIsIFwiXCIsIG51bGwsIFwiXCIsIFwiXCIsIFwiXCIsIFwiaXBob25lNnNcIiwgXCJcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBVc2VyTW9kZWwuaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG1fcHJvdmluY2U6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX25pY2tuYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9hdmF0YXI6IHN0cmluZztcclxuICAgIHByaXZhdGUgY3VyTW9kZWw6IE5ldFVzZXJNb2RlbDtcclxuICAgIHB1YmxpYyBTZXRVc2VyTW9kZWwoX21vZGVsOiBOZXRVc2VyTW9kZWwpIHtcclxuICAgICAgICB0aGlzLmN1ck1vZGVsID0gX21vZGVsO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgTWFpbiB9IGZyb20gXCIuLi9NYWluXCI7XHJcbmltcG9ydCBWaWV3TWFuYWdlciBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9WaWV3TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBTZXR0aW5nQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL1NldHRpbmdDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7IFNoYXJlTW9kdWxlIH0gZnJvbSBcIi4vU2hhcmVNb2R1bGVcIjtcclxuaW1wb3J0IFVzZXJNb2RlbCBmcm9tIFwiLi9Vc2VyTW9kZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBXWFNkayB7XHJcbiAgICBwdWJsaWMgc2V0U2hhcmVJZCh0aWQpIHtcclxuICAgICAgICBpZiAodGlkICE9IFwiXCIgJiYgdGlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zaGFyZUlkID0gdGlkO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIltMT0ddOiBzZXRTaGFyZU9wZW5JZC50aWQ9XCIsIHRoaXMuc2hhcmVJZClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogV1hTZGs7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBXWFNkayB7XHJcbiAgICAgICAgcmV0dXJuIFdYU2RrLmluc3RhbmNlIHx8IChXWFNkay5pbnN0YW5jZSA9IG5ldyBXWFNkaygpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgTG9kaW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBnZXQgZ2V0U2hhcmVJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaGFyZUlkO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBTaGFyZVNjZW5lKHNjZW5lUykge1xyXG4gICAgICAgIGlmIChzY2VuZVMgIT0gXCJcIiAmJiBzY2VuZVMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlU2NlbmUgPSBzY2VuZVM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGluaXQoY2I6IGFueSkge1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1NoYXJlTWVudSh7XHJcbiAgICAgICAgICAgIHdpdGhTaGFyZVRpY2tldDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vdGhpcy5zaGV6aGlTaGFyZU1lc3NhZ2UobnVsbCwgbnVsbCk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5vblNob3coZnVuY3Rpb24gKG9wdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgc2hhcmVUaWNrZXQgPSBvcHRpb24uc2hhcmVUaWNrZXQ7XHJcbiAgICAgICAgICAgIHZhciBzaGFyZWlkID0gb3B0aW9uLnF1ZXJ5LnNoYXJlaWQ7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZSA9IGRlY29kZVVSSUNvbXBvbmVudChvcHRpb24ucXVlcnkuc2NlbmUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWFqOWxgHBhdGg9OlwiLCBvcHRpb24ucGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsIG9wdGlvbi5xdWVyeS5zY2VuZSk7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZVF1ZXJ5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9uLnF1ZXJ5KTtcclxuICAgICAgICAgICAgaWYgKE1haW4ud3hWYWx1ZSA9PVwiXCIpICB7XHJcbiAgICAgICAgICAgICAgICBNYWluLnd4VmFsdWUgPSBvcHRpb24uc2NlbmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJzY2VuZVwiLCBvcHRpb24uc2NlbmUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNjZW5lUXVlcnlcIiwgc2NlbmVRdWVyeSk7XHJcbiAgICAgICAgICAgIHZhciBjaGFubmVsID0gb3B0aW9uLnF1ZXJ5LmNoYW5uZWw7XHJcbiAgICAgICAgICAgIHZhciBhcHBpZDtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbi5yZWZlcnJlckluZm8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVmZXJyZXJJbmZvOlwiICsgSlNPTi5zdHJpbmdpZnkob3B0aW9uLnJlZmVycmVySW5mbykpO1xyXG4gICAgICAgICAgICAgICAgYXBwaWQgPSBvcHRpb24ucmVmZXJyZXJJbmZvLmFwcElkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblNob3cgYXBwaXMgaXM6XCIsIGFwcGlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblNob3cgYXBwaXMgaXMgbnVsbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVmZXJyZXJJbmZv5Li656m6XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGFubmVsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25TaG93IGNoYW5uZWwgaXM6XCIsIGNoYW5uZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNiKHNoYXJlVGlja2V0LCBzaGFyZWlkLCBjaGFubmVsLCBhcHBpZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IFNoYXJlU2NlbmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVTY2VuZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hhcmVNZXNzYWdlKHRpdGxlPywgaW1hZ2VVcmw/KSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgdDogbnVtYmVyID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLlNlcnZlclRpbWU7XHJcbiAgICAgICAgdmFyIF90aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHZhciBfdXJsID0gaW1hZ2VVcmw7XHJcbiAgICAgICAgaWYgKCFfdGl0bGUpIHtcclxuICAgICAgICAgICAgX3RpdGxlID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJldGl0bGU7XHJcbiAgICAgICAgICAgIF91cmwgPSBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuc2hhcmVpbWFnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5vblNoYXJlQXBwTWVzc2FnZSgoKSA9PiAoe1xyXG4gICAgICAgICAgICB0aXRsZTogX3RpdGxlLFxyXG4gICAgICAgICAgICBpbWFnZVVybDogX3VybCxcclxuICAgICAgICAgICAgcXVlcnk6IFwic2hhcmVpZD1cIiArIFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQgKyBcIl9cIiArIHQgKyBcIl9cIiArIE1hdGguZmxvb3IoOTk5OSAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKClcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgd3hfbG9naW4oY2I6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKFdYU2RrLkxvZGluaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgV1hTZGsuTG9kaW5pbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXhjdXRlIHd4LmxvZ2luISBzaGFyZU9wZW5JZDogXCIgKyB0aGlzLnNoYXJlSWQpO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gubG9naW4oe1xyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmxvZ2luOiBzdWNjZXNzISByZXMuY29kZT1cIiArIHJlcy5jb2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIFdYU2RrLkxvZGluaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlsIbopoHkvKDpgJLnmoTlj4LmlbA6XCIgKyByZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNiKHJlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn6I635Y+W55So5oi355m75b2V5oCB5aSx6LSl77yBJyArIHJlcy5lcnJNc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNiKFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7IGNvbnNvbGUubG9nKFwid3gubG9naW46IGZhaWxlZCwgcmVzPVwiICsgcmVzKTsgV1hTZGsuTG9kaW5pbmcgPSBmYWxzZTsgY2IoXCJlcnJvclwiKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzaGFyZUlkID0gXCJcIjtcclxuICAgIHByaXZhdGUgc2hhcmVTY2VuZSA9IFwiXCI7XHJcbiAgICAvL+aYvuekuuWKoOi9veS/oeaBr1xyXG4gICAgcHVibGljIHN0YXRpYyBTaG93TG9hZGluZyh0aXRsZTogc3RyaW5nID0gXCLliqDovb3kuK0uLi5cIiwgaXNTaG93V3ggPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBpZiAoaXNTaG93V3gpIHtcclxuICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd0xvYWRpbmcoeyB0aXRsZTogdGl0bGUsIG1hc2s6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgVmlld01hbmFnZXIuSW5zdGFuY2UuT3Blbk1hc2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFN5c3RlbUluZm8oKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIExheWEuQnJvd3Nlci53aW5kb3cud3guZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBwcml2YXRlIHN0YXRpYyBidXR0b247XHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIHNob3diald4R2FtZVF1YW4oZmxhZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgLy8gICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4ID09IG51bGwpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBpZiAoZmxhZykge1xyXG4gICAgLy8gICAgICAgICBpZiAoV2VpWGluU0RLLmJ1dHRvbiA9PSBudWxsKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgaW5mbyA9IExheWEuQnJvd3Nlci53aW5kb3cud3guZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuICAgIC8vICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIHRvcCA9IDQ3NCAqIGluZm8ud2luZG93SGVpZ2h0IC8gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gOTQgKiBpbmZvLndpbmRvd0hlaWdodCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIHdpZHRoID0gaGVpZ2h0ICogOTUgLyA5NDtcclxuICAgIC8vICAgICAgICAgICAgIFdlaVhpblNESy5idXR0b24gPSBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmNyZWF0ZUdhbWVDbHViQnV0dG9uXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpbWFnZTogJ3Jlcy93eC5wbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzdHlsZTpcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogdG9wLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIFdlaVhpblNESy5idXR0b24uc2hvdygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgICAgaWYgKFdlaVhpblNESy5idXR0b24pIHtcclxuICAgIC8vICAgICAgICAgICAgIFdlaVhpblNESy5idXR0b24uaGlkZSgpO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy/pgIDlh7pcclxuXHJcblxyXG4gICAgLy8g5pi+56S65o+Q56S65L+h5oGvLy9cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hvd1RvYXN0KHRleHQ6IHN0cmluZywgaWNvbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICB2YXIgdF9pY29uID0gaWNvbiA/IFwic3VjY2Vzc1wiIDogXCJub25lXCI7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1RvYXN0KHsgdGl0bGU6IHRleHQsIGljb246IHRfaWNvbiB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vMTpwZXQgMjrkurrnialcclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgWGlhblNoaV9Nb2RlbChjb250ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiA9IG51bGwsIHR5cGUgPSAxLCB0aXRsZSA9IFwiXCIpIHtcclxuICAgIC8vICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAvLyAgICAgICAgIGlmICh0eXBlID09IDEpIHtcclxuICAgIC8vICAgICAgICAgICAgIHZhciBjYW5jZWxUZXh0ID0gXCLmrovlv43kuKLmjolcIjtcclxuICAgIC8vICAgICAgICAgICAgIHZhciBjb25maXJtVGV4dCA9IFwi5bim5LiK5LiA6LW3XCI7XHJcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY2FuY2VsVGV4dCA9IFwi5LiN5oOzXCI7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY29uZmlybVRleHQgPSBcIuaDs1wiO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dNb2RhbCh7XHJcbiAgICAvLyAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAvLyAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxyXG4gICAgLy8gICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcclxuICAgIC8vICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcclxuICAgIC8vICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vnoa7lrponKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vlj5bmtognKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH0sXHJcbiAgICAvLyAgICAgICAgICAgICBmYWlsKHJlcz8pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UpO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9KVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hvcnRWaWJyYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4ICYmIFNldHRpbmdDb250cm9sbGVyLkluc3RhbmNlLnZpYnJhdGUpIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC52aWJyYXRlU2hvcnQoe30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIExvbmdWaWJyYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4ICYmIFNldHRpbmdDb250cm9sbGVyLkluc3RhbmNlLnZpYnJhdGUpIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC52aWJyYXRlTG9uZyh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBIaWRlTG9hZGluZyhpc1Nob3dXeCA9IHRydWUpIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIGlmIChpc1Nob3dXeCkge1xyXG4gICAgICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5oaWRlTG9hZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFZpZXdNYW5hZ2VyLkluc3RhbmNlLkNsb3NlTWFzaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU3VjY2VzcyhzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25FbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YWdlSWQ6IHN0YWdlSWQsICAgICAvL+WFs+WNoUlEIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiBcIuesrFwiICsgc3RhZ2VJZCArIFwi5YWzXCIsIC8v5YWz5Y2h5ZCN56ewICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBcImNvbXBsZXRlXCIsICAgLy/lhbPljaHlrozmiJAgIOWFs+WNoei/m+ihjOS4re+8jOeUqOaIt+inpuWPkeeahOaTjeS9nCAgICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHBhcmFtczpcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFwi5YWz5Y2h5a6M5oiQXCIgICAvL+aPj+i/sFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgfVxyXG4gICAgLy/orrDlvZXpmL/mi4nkuIHkuovku7ZcclxuICAgIHB1YmxpYyBzdGF0aWMgQWxkRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGtleT86IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5KSBrZXkgPSBcIueUqOaIt2lkXCI7XHJcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTZW5kRXZlbnQoZXZlbnROYW1lLCB7IGtleTogdmFsdWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBGYWlsKHN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vbkVuZChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZCwgICAgIC8v5YWz5Y2hSUQg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IFwi56ysXCIgKyBzdGFnZUlkICsgXCLlhbNcIiwgLy/lhbPljaHlkI3np7AgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IFwiZmFpbFwiLCAgIC8v5YWz5Y2h5a6M5oiQICDlhbPljaHov5vooYzkuK3vvIznlKjmiLfop6blj5HnmoTmk43kvZwgICAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcIuWFs+WNoeWksei0pVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgfVxyXG4gICAgLy8gcHVibGljIHN0YXRpYyBsZXZlbGVSdW5pbmcoc3RhZ2VJZDogc3RyaW5nLCB1c2VyaWQ6IHN0cmluZywgZXZlbnR0eXBlOiBudW1iZXIsIGl0ZW1OYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAvLyAgICAgICAgIC8vTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vblJ1bm5pbmcoe1wic3RhZ2VJZFwiOnN0YWdlSWQsXCJzdGFnZU5hbWVcIjpzdGFnZU5hbWUsXCJ1c2VySWRcIjp1c2VyaWR9KTtcclxuICAgIC8vICAgICAgICAgdmFyIGV2ZW50VCA9IGV2ZW50dHlwZSA9PSAwID8gXCJhd2FyZFwiIDogXCJyZXZpdmVcIjtcclxuICAgIC8vICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vblJ1bm5pbmcoe1xyXG4gICAgLy8gICAgICAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZCxcclxuICAgIC8vICAgICAgICAgICAgIHN0YWdlTmFtZTogXCLnrKxcIiArIHN0YWdlSWQgKyBcIuWFs1wiLFxyXG4gICAgLy8gICAgICAgICAgICAgdXNlcklkOiB1c2VyaWQsXHJcbiAgICAvLyAgICAgICAgICAgICBldmVudDogZXZlbnRULFxyXG4gICAgLy8gICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGl0ZW1OYW1lLFxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9KVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFN0YXJ0KHN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vblN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUlkOiBzdGFnZUlkLCAgICAgLy/lhbPljaFJRCDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCLnrKxcIiArIHN0YWdlSWQgKyBcIuWFs1wiLCAvL+WFs+WNoeWQjeensCAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdhbWVfU2hhcmUoY2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCwgY2hhbm5lbDogc3RyaW5nID0gXCJcIik6IHZvaWQge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHVybDtcclxuICAgICAgICB2YXIgdGl0bGU7XHJcbiAgICAgICAgdXJsID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJlaW1hZ2U7XHJcbiAgICAgICAgdGl0bGUgPSBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuc2hhcmV0aXRsZTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1cmwgKyBcIiAgXCIgKyB0aXRsZSk7XHJcblxyXG4gICAgICAgXHJcbiAgICAgICAgaWYgKGNoYW5uZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBXZWlYaW5TREsuQWxkRXZlbnQoXCLnlKjmiLfliIbkuqtcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0OiBudW1iZXI7Ly8gPSBVc2VyTW9kZWwuR2V0X0luc3RhbmNlLkN1ck1vZGVsLkh1b1F1X1NlcnZlclRpbWU7XHJcbiAgICAgICAgdmFyIHBhdGggPSBcIlwiO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU2hhcmVBcHBNZXNzYWdlKHtcclxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICBpbWFnZVVybDogdXJsLFxyXG4gICAgICAgICAgICBxdWVyeTogXCJzaGFyZWlkPVwiICsgVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCArIFwiX1wiICsgXCJvdGhlclwiICsgXCJfXCIgKyB0ICsgXCJfXCIgKyBNYXRoLmZsb29yKDk5OTkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBTaGFyZU1vZHVsZS5Hb1NoYXJlKGNhbGxiYWNrKTtcclxuXHJcbiAgICB9XHJcbn0iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGljdGlvbmFyeSB7XHJcbiAgICBwcml2YXRlIF9sZW5ndGg6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIF9jb250YWluZXI6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9jb250YWluZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY29udGFpbmVyKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPluWtl+WFuOmVv+W6piAgICBcclxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy/mt7vliqBcclxuICAgIHB1YmxpYyBzZXQoa2V5OiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShrZXkpKSAge1xyXG4gICAgICAgICAgICB0aGlzLl9sZW5ndGgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+WIoOmZpCAgICAgXHJcbiAgICBwdWJsaWMgZGVsZXRlKGtleTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShrZXkpKSAge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGFpbmVyW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aC0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+afpeaJviAgIFxyXG4gICAgcHVibGljIGhhcyhrZXk6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPliBcclxuICAgIHB1YmxpYyBnZXQoa2V5OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcltrZXldO1xyXG4gICAgICAgIH0gZWxzZSAge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v5riF56m6ICAgIFxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbiAgICB9XHJcblxyXG5cclxufSIsIlxyXG5pbXBvcnQgVXNlck1vZGVsIGZyb20gXCIuLi9nYW1lX21vZHVsZS9Vc2VyTW9kZWxcIjtcclxuaW1wb3J0IFZlY3RvcjM9TGF5YS5WZWN0b3IzO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lX1Rvb2wge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0T2JqS2V5KG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/ov5Tlm57kuIDkuKrpmo/mnLrmlbTmlbBbbWluLG1heF1cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tSW50KG1pbjogYW55LCBtYXg6IGFueSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xyXG4gICAgfVxyXG4gICAgLy9wMSDlt6blkJHph48gcDJcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QW5nKHh4OiBudW1iZXIsIHl5OiBudW1iZXIsIG9ibDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gMTgwIC8gTWF0aC5QSSAqIHRoaXMuZ2V0UmFkKHh4LCB5eSwgb2JsKTtcclxuICAgIH1cclxuICAgIC8v6L+U5Zue6KeS5bqmXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJhZCh4eDogbnVtYmVyLCB5eTogbnVtYmVyLCBvYmw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgLy8g5pa55rOV5LiA77yaYXNpbigpXHJcbiAgICAgICAgLy8gdmFyIHJhZDpOdW1iZXIgPSB4eCA+IDAgPyAoKE1hdGguUEkgKiAzKS8yICArIE1hdGguYXNpbigteXkvb2JsKSkgOiAoTWF0aC5QSSAvIDIgLSAgTWF0aC5hc2luKC15eS9vYmwpKTtcclxuICAgICAgICAvLyDmlrnms5XkuozvvJphY29zKClcclxuICAgICAgICB2YXIgcmFkOiBudW1iZXIgPSB5eSA8IDAgPyBNYXRoLmFjb3MoeHggLyBvYmwpIDogKE1hdGguUEkgKiAyIC0gTWF0aC5hY29zKHh4IC8gb2JsKSk7XHJcbiAgICAgICAgLy8g5pa55rOV5LiJ77yaYXRhbjIoKVxyXG4gICAgICAgIC8vIHZhciByYWQ6TnVtYmVyID0geXkgPCAwID8gTWF0aC5hdGFuMigteXksIHh4KSA6IE1hdGguUEkgKiAyICsgTWF0aC5hdGFuMigteXksIHh4KTtcclxuICAgICAgICByZXR1cm4gcmFkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TV9WZWN0b3IodjE6IExheWEuVmVjdG9yMywgdjI6IExheWEuVmVjdG9yMyk6IExheWEuVmVjdG9yMyB7XHJcbiAgICAgICAgbGV0IHRlbXAgPSBuZXcgTGF5YS5WZWN0b3IzKCk7XHJcbiAgICAgICAgTGF5YS5WZWN0b3IzLmFkZCh2MSwgdjIsIHRlbXApO1xyXG4gICAgICAgIHJldHVybiBuZXcgTGF5YS5WZWN0b3IzKHRlbXAueCAqIDAuNSwgdGVtcC55ICogMC41LCB0ZW1wLnogKiAwLjUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJlZmxlY3RBbmcoZGlyOlZlY3RvcjMpe1xyXG4gICAgICAgIHZhciB4eD1NYXRoLmFicyhkaXIueCk7XHJcbiAgICAgICAgdmFyIHp6PU1hdGguYWJzKGRpci56KTtcclxuICAgICAgICB2YXIgb2JsPSBNYXRoLnNxcnQoTWF0aC5wb3coZGlyLngsIDIpICsgTWF0aC5wb3coZGlyLnosIDIpKTtcclxuICAgICAgICByZXR1cm4gOTAtIDE4MCAvIE1hdGguUEkgKiBNYXRoLmFjb3MoeHggLyBvYmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tXzF0bzEoKTpudW1iZXJ7IFxyXG4gICAgICAgIHZhciBpc3poZW5nPU1hdGgucmFuZG9tKCk+MC41Py0xOjE7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkqaXN6aGVuZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldDY0RW5jb2RlKHN0cik6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIGMxLCBjMiwgYzM7XHJcbiAgICAgICAgdmFyIGJhc2U2NEVuY29kZUNoYXJzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XHJcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoLCBzdHJpbmcgPSAnJztcclxuICAgICAgICB3aGlsZSAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBjMSA9IHN0ci5jaGFyQ29kZUF0KGkrKykgJiAweGZmO1xyXG4gICAgICAgICAgICBpZiAoaSA9PSBsZW4pIHtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzEgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KChjMSAmIDB4MykgPDwgNCk7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gXCI9PVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgICAgICBpZiAoaSA9PSBsZW4pIHtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzEgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KCgoYzEgJiAweDMpIDw8IDQpIHwgKChjMiAmIDB4RjApID4+IDQpKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKGMyICYgMHhGKSA8PCAyKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBcIj1cIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGMzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdChjMSA+PiAyKTtcclxuICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdCgoKGMxICYgMHgzKSA8PCA0KSB8ICgoYzIgJiAweEYwKSA+PiA0KSk7XHJcbiAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKChjMiAmIDB4RikgPDwgMikgfCAoKGMzICYgMHhDMCkgPj4gNikpO1xyXG4gICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KGMzICYgMHgzRilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIFNldEh1VHVpTGlzdChsaXN0OkxheWEuTGlzdCxkYXRhPyxzY3JvbDpudW1iZXI9MSx0eXBlOm51bWJlcj0wKXsgLy9zY3JvbCAxOuerlueahCAgMuaoqueahFxyXG4gICAgLy8gICAgIHZhciBhcnI9ZGF0YT9kYXRhOkZZSERfU2RrLnB1c2hEYXRhO1xyXG4gICAgLy8gICAgIGxpc3Quc2VsZWN0RW5hYmxlID0gZmFsc2U7XHJcbiAgICAvLyAgICAgc2Nyb2w9PTE/bGlzdC52U2Nyb2xsQmFyU2tpbiA9IFwiXCI6bGlzdC5oU2Nyb2xsQmFyU2tpbiA9IFwiXCI7XHJcbiAgICAvLyAgICAgbGlzdC5yZW5kZXJIYW5kbGVyID0gTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLnVwZGF0ZUl0ZW0sIFt0eXBlXSwgZmFsc2UpO1xyXG4gICAgLy8gICAgIGxpc3QuYXJyYXkgPSBhcnI7XHJcbiAgICAvLyAgICAgbGlzdC5yZWZyZXNoKCk7XHJcbiAgICAvLyAgfVxyXG4gICAgLy8gIHByaXZhdGUgc3RhdGljIHVwZGF0ZUl0ZW0odHlwZSxjZWxsOiBMYXlhLkJveCwgaW5kZXg6IG51bWJlcil7XHJcbiAgICAvLyAgICAgIHZhciBhZGl0ZW09Y2VsbC5nZXRDb21wb25lbnQoSHVpVHVpSXRlbSlhcyBIdWlUdWlJdGVtO1xyXG4gICAgLy8gICAgICBhZGl0ZW0uUmVmcmVzaCh0eXBlKTtcclxuICAgIC8vICB9XHJcbiAgICAvLyAgcHVibGljIHN0YXRpYyBtYWtlUmFuZG9tQXJyKGFyckxpc3QsbnVtKXtcclxuICAgIC8vICAgICBpZihudW0+YXJyTGlzdC5sZW5ndGgpe1xyXG4gICAgLy8gICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdmFyIHRlbXBBcnI9YXJyTGlzdC5zbGljZSgwKTtcclxuICAgIC8vICAgICB2YXIgbmV3QXJyTGlzdD1bXTsgICAgXHJcbiAgICAvLyAgICAgZm9yKHZhciBpPTA7aTxudW07aSsrKXtcclxuICAgIC8vICAgICAgICAgdmFyIHJhbmRvbT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHRlbXBBcnIubGVuZ3RoLTEpKTtcclxuICAgIC8vICAgICAgICAgdmFyIGFycj10ZW1wQXJyW3JhbmRvbV07XHJcbiAgICAvLyAgICAgICAgIHRlbXBBcnIuc3BsaWNlKHJhbmRvbSwgMSk7XHJcbiAgICAvLyAgICAgICAgIG5ld0Fyckxpc3QucHVzaChhcnIpOyAgICBcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIG5ld0Fyckxpc3Q7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIENvcHlBcnIobyk6YW55e1xyXG4gICAgLy8gICAgIHZhciBhcnI9W107XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG8ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBvW2luZGV4XTtcclxuICAgIC8vICAgICAgICAgYXJyLnB1c2goZWxlbWVudCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHJldHVybiBhcnI7XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgU2hvd1FpYW5EYW8oKTogYm9vbGVhbiB7XHJcbiAgICAvLyAgICAgbGV0IHRvZGF5WmVybyA9IG5ldyBEYXRlKFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lICogMTAwMCk7XHJcbiAgICAvLyAgICAgdG9kYXlaZXJvLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgLy8gICAgIGlmKCFQbGF5ZXJNYW5hZ2VyLkluc3RhbmNlLnNpZ24pcmV0dXJuIHRydWU7XHJcbiAgICAvLyAgICAgdmFyIGxhc3RUaW1lID0gTnVtYmVyKFBsYXllck1hbmFnZXIuSW5zdGFuY2Uuc2lnbltcInNpZ25fdGltZVwiXSkgKiAxMDAwO1xyXG4gICAgLy8gICAgIGxldCBsYXN0U2lnblRpbWUgPSBuZXcgRGF0ZShsYXN0VGltZSk7XHJcbiAgICAvLyAgICAgaWYgKGxhc3RUaW1lID09IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGlmIChsYXN0U2lnblRpbWUudmFsdWVPZigpIDwgdG9kYXlaZXJvLnZhbHVlT2YoKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ3JlYXRlVGV4dChjb250ZW50OnN0cmluZyl7XHJcbiAgICAgICAgdmFyIGN1clRleHQgPSBuZXcgTGF5YS5UZXh0O1xyXG4gICAgICAgIGN1clRleHQud2lkdGggPSAzMDA7XHJcbiAgICAgICAgY3VyVGV4dC5oZWlnaHQgPSA1MDtcclxuICAgICAgICBcclxuICAgICAgICBjdXJUZXh0LmFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgICAgICBjdXJUZXh0LnZhbGlnbiA9IFwibWlkZGxlXCI7XHJcbiAgICAgICAgY3VyVGV4dC5mb250ID0gXCJNaWNyb3NvZnQgWWFIZWlcIjtcclxuICAgICAgICBjdXJUZXh0LmZvbnRTaXplID0gMzU7XHJcbiAgICAgICAgY3VyVGV4dC5jb2xvciA9IFwiI2ZmOGUwMFwiO1xyXG4gICAgICAgIGN1clRleHQuYm9sZCA9IHRydWU7XHJcbiAgICAgICAgY3VyVGV4dC5mb250ID0gXCJNaWNyb3NvZnQgWWFIZWlcIjtcclxuICAgICAgICBjdXJUZXh0LnRleHQgPSBjb250ZW50O1xyXG4gICAgICAgIGN1clRleHQueCA9IDYwO1xyXG4gICAgICAgIGN1clRleHQueSA9IDEwO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQoY3VyVGV4dCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coY3VyVGV4dCk7XHJcbiAgICAgICAgdmFyIHR3ZWVuID0gTGF5YS5Ud2Vlbi50byhwYXJlbnQse3k6Y3VyVGV4dC55IC0gMjAwfSwxMDAwLExheWEuRWFzZS5leHBvSW5PdXQsTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCgpPT5cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR3ZWVuLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIGN1clRleHQuZGVzdHJveSgpO1xyXG4gICAgICAgIH0pLDEwMCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgVHdlZW4gPSBMYXlhLlR3ZWVuO1xyXG5pbXBvcnQgeyBTZXR0aW5nQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi9nYW1lX2xvZ2ljL1NldHRpbmdDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlUnVuVGltZSBleHRlbmRzIExheWEuSW1hZ2Uge1xyXG4gICAgcHVibGljIHNjYWxlVGltZTogbnVtYmVyID0gODA7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8v6K6+572u57uE5Lu255qE5Lit5b+D54K5XHJcbiAgICAgICAgdGhpcy5hbmNob3JYID0gdGhpcy5hbmNob3JZID0gMC41O1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLnNjYWxlU21hbGwpO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX09VVCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX21jbGlja0hhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gICAgcHJpdmF0ZSBiaWdUd2VlbjogVHdlZW47XHJcbiAgICBwcml2YXRlIFNtYWxsVHdlZW46IFR3ZWVuO1xyXG4gICAgcHJpdmF0ZSBjbGlja0lkPWZhbHNlO1xyXG4gICAgcHJpdmF0ZSBzY2FsZUJpZyhlOkxheWEuRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxyXG4gICAgIFxyXG4gICAgICAgIGlmKCF0aGlzLmNsaWNrSWQpcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2xpY2tJZD1mYWxzZTtcclxuICAgICAgXHJcbiAgICAgICAgdGhpcy5iaWdUd2VlbiA9IFR3ZWVuLnRvKHRoaXMsIHsgc2NhbGVYOiAxLCBzY2FsZVk6IDEgfSwgdGhpcy5zY2FsZVRpbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLl9tY2xpY2tIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21jbGlja0hhbmRsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNjYWxlU21hbGwoZTpMYXlhLkV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcclxuICAgICAgICBTZXR0aW5nQ29udHJvbGxlci5JbnN0YW5jZS5fQ2xpY2soKTtcclxuICAgICAgICB0aGlzLmNsaWNrSWQ9dHJ1ZTtcclxuICAgICAgICB0aGlzLlNtYWxsVHdlZW4gPSBUd2Vlbi50byh0aGlzLCB7IHNjYWxlWDogMC44LCBzY2FsZVk6IDAuOCB9LCB0aGlzLnNjYWxlVGltZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgQ2xlYXJSdW5UaW1lKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmJpZ1R3ZWVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmlnVHdlZW4uY2xlYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuU21hbGxUd2Vlbikge1xyXG4gICAgICAgICAgICB0aGlzLlNtYWxsVHdlZW4uY2xlYXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX09VVCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XHJcbiAgICAgICAgdGhpcy5fbWNsaWNrSGFuZGxlciA9IG51bGw7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuLi91aS9sYXlhTWF4VUlcIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBSb2xlQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL1JvbGVDb250cm9sbGVyXCI7XHJcbmltcG9ydCBWZWN0b3IzID0gTGF5YS5WZWN0b3IzO1xyXG5pbXBvcnQgeyBHYW1lQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL0dhbWVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBjbGFzcyBnYW1lX3VpIGV4dGVuZHMgdWkuZ2FtZV91aVVJIGltcGxlbWVudHMgVUlfSW50ZXJmYWNlIHtcclxuXHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIYW5kZXIoKTtcclxuICAgICAgICBFdmVudE1hbmFnZXIub24oTGF5YS5FdmVudC5SRVNJWkUsIHRoaXMsIHRoaXMucmVzaXplSGFuZGVyKTtcclxuICAgIH1cclxuICAgIHJlc2l6ZUhhbmRlcigpIHtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgT25TaG93KGRhdGE/OiBhbnkpIHtcclxuICAgICAgICB0aGlzLlVpRXZlbnRIYW5kbGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgVWlFdmVudEhhbmRsZXIoKSB7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX0RPV04sIHRoaXMsIHRoaXMuT25DbGlja0Rvd24pO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5PbkNsaWNrVXApO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9PVVQsIHRoaXMsIHRoaXMuT25DbGlja1VwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzZG93biA9IGZhbHNlO1xyXG4gICAgT25DbGlja0Rvd24oZTogTGF5YS5FdmVudCkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldCBpbnN0YW5jZW9mIExheWEuVUlDb21wb25lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUdhbWVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVTdGFydCB8fCBHYW1lQ29udHJvbGxlci5JbnN0YW5jZS5nYW1lb3ZlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNkb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uKExheWEuRXZlbnQuTU9VU0VfTU9WRSwgdGhpcywgdGhpcy5PblNsaWRlcik7XHJcbiAgICAgICAgdGhpcy5jdXJNb3VzZVBvcyA9IG5ldyBWZWN0b3IzKExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCwgTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFBvcyA9IHRoaXMuY3VyTW91c2VQb3MuY2xvbmUoKTtcclxuICAgICAgICB0aGlzLk1vdXNlRCgpO1xyXG4gICAgfVxyXG4gICAgT25DbGlja1VwKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc2Rvd24pIHJldHVybjtcclxuICAgICAgICBpZiAoIUdhbWVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVTdGFydCB8fCBHYW1lQ29udHJvbGxlci5JbnN0YW5jZS5nYW1lb3ZlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNkb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLk9uU2xpZGVyKTtcclxuICAgICAgICB0aGlzLmVuZFBvcyA9IHRoaXMuY3VyTW91c2VQb3MuY2xvbmUoKTtcclxuICAgICAgICB0aGlzLk1vdXNlVSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGN1ck1vdXNlUG9zOiBWZWN0b3IzO1xyXG4gICAgT25TbGlkZXIoKSB7XHJcbiAgICAgICAgdmFyIE1vdXNlUG9zID0gbmV3IFZlY3RvcjMoTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYLCBMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpO1xyXG4gICAgICAgIHZhciBvZmZlc3RYID0gTW91c2VQb3MueCAtIHRoaXMuY3VyTW91c2VQb3MueDtcclxuICAgICAgICBpZiAob2ZmZXN0WCA+IDApIG9mZmVzdFggPSBvZmZlc3RYIDwgNSA/IG9mZmVzdFggOiA1O1xyXG4gICAgICAgIGlmIChvZmZlc3RYIDwgMCkgb2ZmZXN0WCA9IG9mZmVzdFggPiAtNSA/IG9mZmVzdFggOiAtNTtcclxuICAgICAgICB2YXIgcm90YXRlRGlyID0gbmV3IFZlY3RvcjMoMCwgLW9mZmVzdFggKiAwLjAxLCAwKTtcclxuICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5Sb2xlUm90YXRpb24ocm90YXRlRGlyKTtcclxuICAgICAgICB0aGlzLmN1ck1vdXNlUG9zID0gbmV3IFZlY3RvcjMoTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYLCBMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpOztcclxuICAgIH1cclxuICAgIE9uQ2xvc2UoKSB7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9mZihMYXlhLkV2ZW50LlJFU0laRSwgdGhpcywgdGhpcy5yZXNpemVIYW5kZXIpO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5PbkNsaWNrRG93bik7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5PbkNsaWNrVXApO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8v54K55Ye755qE5Yik5patXHJcbiAgICBwcml2YXRlIHN0YXJ0UG9zO1xyXG4gICAgcHJpdmF0ZSBpc2V4Y2VlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBNb3VzZUQoKSB7XHJcbiAgICAgICAgdGhpcy5pc2V4Y2VlZCA9IGZhbHNlO1xyXG4gICAgICAgIExheWEudGltZXIub25jZSg1MDAsIHRoaXMsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2V4Y2VlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGVuZFBvcztcclxuICAgIHByaXZhdGUgTW91c2VVKCkge1xyXG4gICAgICAgIHZhciBkaXMgPSBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuc3RhcnRQb3MsIHRoaXMuZW5kUG9zKTtcclxuICAgICAgICBpZiAoZGlzID4gMzAgfHwgdGhpcy5pc2V4Y2VlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgR2FtZUNvbnRyb2xsZXIuSW5zdGFuY2UuSGl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgdWkgfSBmcm9tIFwiLi4vdWkvbGF5YU1heFVJXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuaW1wb3J0IFZpZXdNYW5hZ2VyLCB7IFZpZXdUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbG9naWMvVmlld01hbmFnZXJcIjtcclxuaW1wb3J0IHsgR2FtZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9HYW1lQ29udHJvbGxlclwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBtYWluX3VpIGV4dGVuZHMgdWkubWFpbl91aVVJIGltcGxlbWVudHMgVUlfSW50ZXJmYWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMucmVzaXplSGFuZGVyKCk7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9uKExheWEuRXZlbnQuUkVTSVpFLCB0aGlzLCB0aGlzLnJlc2l6ZUhhbmRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgT25TaG93KGRhdGE/OiBhbnkpIHtcclxuICAgICAgICB0aGlzLkJ1dHRvbkNsaWNrSGFuZGxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzaXplSGFuZGVyKCkge1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEJ1dHRvbkNsaWNrSGFuZGxlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRfYnRuLl9tY2xpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgVmlld01hbmFnZXIuSW5zdGFuY2UuT3BlblZpZXcoVmlld1R5cGUuZ2FtZV91aSk7XHJcbiAgICAgICAgICAgIEdhbWVDb250cm9sbGVyLkluc3RhbmNlLkdhbWVTdGFydCgpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBPbkNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRfYnRuLkNsZWFyUnVuVGltZSgpO1xyXG4gICAgfVxyXG59IiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBnYW1lX3VpVUkgZXh0ZW5kcyBTY2VuZSB7XHJcbiAgICAgICAgcHVibGljIHN0YXRpYyAgdWlWaWV3OmFueSA9e1widHlwZVwiOlwiU2NlbmVcIixcInByb3BzXCI6e1wiek9yZGVyXCI6MSxcIndpZHRoXCI6NzIwLFwiaGVpZ2h0XCI6MTI4MH0sXCJjb21wSWRcIjoyLFwibG9hZExpc3RcIjpbXSxcImxvYWRMaXN0M0RcIjpbXX07XHJcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoZ2FtZV91aVVJLnVpVmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgUkVHKFwidWkuZ2FtZV91aVVJXCIsZ2FtZV91aVVJKTtcclxuICAgIGV4cG9ydCBjbGFzcyBtYWluX3VpVUkgZXh0ZW5kcyBTY2VuZSB7XHJcblx0XHRwdWJsaWMgc3RhcnRfYnRuOmFueTtcbiAgICAgICAgcHVibGljIHN0YXRpYyAgdWlWaWV3OmFueSA9e1widHlwZVwiOlwiU2NlbmVcIixcInByb3BzXCI6e1wiek9yZGVyXCI6MSxcIndpZHRoXCI6NzIwLFwiaGVpZ2h0XCI6MTI4MH0sXCJjb21wSWRcIjoyLFwiY2hpbGRcIjpbe1widHlwZVwiOlwiSW1hZ2VcIixcInByb3BzXCI6e1wieVwiOjY0MCxcInhcIjozNjAsXCJ2YXJcIjpcInN0YXJ0X2J0blwiLFwic2tpblwiOlwibWFpbl9yZXMvamllbWlhbl94aW5fMV8xLnBuZ1wiLFwicnVudGltZVwiOlwiZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWUudHNcIixcImNlbnRlcllcIjowLFwiY2VudGVyWFwiOjAsXCJhbmNob3JZXCI6MC41LFwiYW5jaG9yWFwiOjAuNX0sXCJjb21wSWRcIjozfV0sXCJsb2FkTGlzdFwiOltcIm1haW5fcmVzL2ppZW1pYW5feGluXzFfMS5wbmdcIl0sXCJsb2FkTGlzdDNEXCI6W119O1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKCl7IHN1cGVyKCl9XHJcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4oKTp2b2lkIHtcclxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlQ2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVWaWV3KG1haW5fdWlVSS51aVZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJFRyhcInVpLm1haW5fdWlVSVwiLG1haW5fdWlVSSk7XHJcbn1cciJdfQ==