bundle.js 280 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240
  1. var __extends = (this && this.__extends) || (function () {
  2. var extendStatics = Object.setPrototypeOf ||
  3. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  4. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  5. return function (d, b) {
  6. extendStatics(d, b);
  7. function __() { this.constructor = d; }
  8. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9. };
  10. })();
  11. (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<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
  12. "use strict";
  13. Object.defineProperty(exports, "__esModule", { value: true });
  14. /**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
  15. var ButtonRunTime_1 = require("./game_ui/RunTimeScript/ButtonRunTime");
  16. /*
  17. * 游戏初始化配置;
  18. */
  19. var GameConfig = /** @class */ (function () {
  20. function GameConfig() {
  21. }
  22. GameConfig.init = function () {
  23. var reg = Laya.ClassUtils.regClass;
  24. reg("game_ui/RunTimeScript/ButtonRunTime.ts", ButtonRunTime_1.default);
  25. };
  26. GameConfig.width = 720;
  27. GameConfig.height = 1280;
  28. GameConfig.scaleMode = "fixedwidth";
  29. GameConfig.screenMode = "none";
  30. GameConfig.alignV = "middle";
  31. GameConfig.alignH = "center";
  32. GameConfig.startScene = "game_ui.scene";
  33. GameConfig.sceneRoot = "";
  34. GameConfig.debug = false;
  35. GameConfig.stat = false;
  36. GameConfig.physicsDebug = false;
  37. GameConfig.exportSceneToJson = true;
  38. return GameConfig;
  39. }());
  40. exports.default = GameConfig;
  41. GameConfig.init();
  42. },{"./game_ui/RunTimeScript/ButtonRunTime":23}],2:[function(require,module,exports){
  43. "use strict";
  44. Object.defineProperty(exports, "__esModule", { value: true });
  45. var GameConfig_1 = require("./GameConfig");
  46. var ViewManager_1 = require("./game_logic/ViewManager");
  47. var WXSdk_1 = require("./game_module/WXSdk");
  48. var FYHD_Sdk_1 = require("./game_module/FYHD_Sdk");
  49. var GameSceneController_1 = require("./game_logic/GameSceneController");
  50. var Main = /** @class */ (function () {
  51. function Main() {
  52. var _this = this;
  53. //根据IDE设置初始化引擎
  54. if (window["Laya3D"])
  55. Laya3D.init(GameConfig_1.default.width, GameConfig_1.default.height);
  56. else
  57. Laya.init(GameConfig_1.default.width, GameConfig_1.default.height, Laya["WebGL"]);
  58. Laya["Physics"] && Laya["Physics"].enable();
  59. Laya["DebugPanel"] && Laya["DebugPanel"].enable();
  60. Laya.stage.scaleMode = GameConfig_1.default.scaleMode;
  61. Laya.stage.screenMode = GameConfig_1.default.screenMode;
  62. //兼容微信不支持加载scene后缀场景
  63. Laya.URL.exportSceneToJson = GameConfig_1.default.exportSceneToJson;
  64. //打开调试面板(通过IDE设置调试模式,或者url地址增加debug=true参数,均可打开调试面板)
  65. if (GameConfig_1.default.debug || Laya.Utils.getQueryString("debug") == "true")
  66. Laya.enableDebugPanel();
  67. if (GameConfig_1.default.physicsDebug && Laya["PhysicsDebugDraw"])
  68. Laya["PhysicsDebugDraw"].enable();
  69. if (GameConfig_1.default.stat)
  70. Laya.Stat.show();
  71. Laya.alertGlobalError = true;
  72. Main.nowratio = Laya.stage.width / Laya.stage.height;
  73. Main.IsWx = Laya.Browser.onWeiXin;
  74. if (Main.IsWx) {
  75. WXSdk_1.WXSdk.Instance.init(function (shareTicket, shareid, scene, appid) {
  76. _this.onShowHandler(shareTicket, shareid, scene, appid);
  77. });
  78. FYHD_Sdk_1.FYHD_Sdk.InitSdk();
  79. }
  80. //激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
  81. Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
  82. this.IsNeedUpdate();
  83. }
  84. Main.prototype.IsNeedUpdate = function () {
  85. if (!Main.IsWx)
  86. return;
  87. var updateManager = Laya.Browser.window.wx.getUpdateManager();
  88. updateManager.onCheckForUpdate(function (res) {
  89. console.log("最新版本:" + res.hasUpdate);
  90. });
  91. updateManager.onUpdateReady(function () {
  92. Laya.Browser.window.wx.showModal({
  93. showCancel: false,
  94. title: '更新提示',
  95. content: '新版本已经准备好,是否重启应用?',
  96. success: function (res) {
  97. updateManager.applyUpdate();
  98. },
  99. fail: function (res) {
  100. updateManager.applyUpdate();
  101. }
  102. });
  103. });
  104. };
  105. Main.prototype.onShowHandler = function (shareTicket, shareId, scene, appid) {
  106. console.log("[LOG]: 分享进入: shareTicket:", shareTicket, ", openId=", shareId, ", scene=", scene);
  107. // if (!Main.mSharePeopleScene) {
  108. // Main.mSharePeopleScene = scene;
  109. // }
  110. // if (!Main.appid) {
  111. // Main.appid = appid;
  112. // }
  113. if (scene != null && scene != "") {
  114. WXSdk_1.WXSdk.Instance.ShareScene = scene;
  115. }
  116. if (shareId != null && shareId != "") {
  117. console.log("设置分享id" + shareId);
  118. WXSdk_1.WXSdk.Instance.setShareId(shareId);
  119. }
  120. };
  121. Main.prototype.onVersionLoaded = function () {
  122. //激活大小图映射,加载小图的时候,如果发现小图在大图合集里面,则优先加载大图合集,而不是小图
  123. Laya.AtlasInfoManager.enable("fileconfig.json", Laya.Handler.create(this, this.onConfigLoaded));
  124. Laya.MouseManager.multiTouchEnabled = false;
  125. };
  126. Main.prototype.onConfigLoaded = function () {
  127. this.LoadUI();
  128. };
  129. Main.prototype.LoadUI = function () {
  130. ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.main_ui);
  131. GameSceneController_1.default.Instance.CreateScene();
  132. //this.test();
  133. };
  134. Main.prototype.test = function () {
  135. var v1 = new Laya.Vector3(-3, 0, 1);
  136. var v2 = new Laya.Vector3(0, 0, -1);
  137. var v3 = new Laya.Vector3(0, 0, 0);
  138. Laya.Vector3.cross(v1, v2, v3);
  139. console.log(v3);
  140. };
  141. Main.IsWx = false;
  142. Main.VRE = "1.0.0";
  143. Main.CFG = "CFG";
  144. Main.wxValue = "";
  145. return Main;
  146. }());
  147. exports.Main = Main;
  148. //激活启动类
  149. new Main();
  150. },{"./GameConfig":1,"./game_logic/GameSceneController":6,"./game_logic/ViewManager":13,"./game_module/FYHD_Sdk":15,"./game_module/WXSdk":20}],3:[function(require,module,exports){
  151. "use strict";
  152. Object.defineProperty(exports, "__esModule", { value: true });
  153. var GameDefined_1 = require("../game_module/GameDefined");
  154. var Vector3 = Laya.Vector3;
  155. var Ray = Laya.Ray;
  156. var HitResult = Laya.HitResult;
  157. var GameSceneController_1 = require("./GameSceneController");
  158. var BulletController_1 = require("./BulletController");
  159. var Game_Tool_1 = require("../game_tool/Game_Tool");
  160. var EventManager_1 = require("../game_module/EventManager");
  161. var Role_1 = require("./Role");
  162. var Bullet = /** @class */ (function (_super) {
  163. __extends(Bullet, _super);
  164. function Bullet() {
  165. return _super.call(this) || this;
  166. }
  167. Bullet.prototype.onAwake = function () {
  168. this.self = this.owner;
  169. this._transform = this.self.transform;
  170. this.forw = new Vector3(0, 0, 0);
  171. this._corss = new Vector3(0, 0, 0);
  172. };
  173. Bullet.prototype.CreateRay = function (pos, _rotation, _type) {
  174. if (!this.go) {
  175. switch (_type) {
  176. case GameDefined_1.BulletType.BulletG:
  177. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.bulletG);
  178. break;
  179. case GameDefined_1.BulletType.BulletR:
  180. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.BulletR);
  181. break;
  182. }
  183. var gs = this.go.getComponent(Bullet);
  184. if (!gs)
  185. this.goS = this.go.addComponent(Bullet);
  186. }
  187. else {
  188. this.go.active = true;
  189. }
  190. this.go.transform.position = pos.clone();
  191. this.go.transform.rotationEuler = _rotation;
  192. this.go.transform.rotate = _rotation;
  193. this.go.transform.getForward(this.forw);
  194. this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
  195. var temp = this.forw.clone();
  196. Vector3.normalize(temp, temp);
  197. pos.x = pos.x + temp.x * 0.01;
  198. pos.y = pos.y + temp.y * 0.01;
  199. pos.z = pos.z + temp.z * 0.01;
  200. if (!this._ray) {
  201. this._ray = new Ray(pos, this.forw);
  202. this._hit = new HitResult();
  203. }
  204. else {
  205. this._ray.origin = pos;
  206. this._ray.direction = this.forw;
  207. }
  208. var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
  209. if (isS) {
  210. var poi = this._hit.point;
  211. var dis = Vector3.distance(pos, poi);
  212. this.go.transform.localScaleZ = dis;
  213. var other = this._hit.collider.owner;
  214. if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
  215. this.tempPos = pos;
  216. this.tempRotation = _rotation;
  217. this.SetTar(other);
  218. this.goS.SetNextNotActive();
  219. }
  220. else {
  221. this.RemoveTar();
  222. var nor = this._hit.normal;
  223. nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
  224. nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
  225. nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
  226. Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
  227. var a = Game_Tool_1.default.getReflectAng(this.forw);
  228. // Laya.Quaternion.
  229. var ang = this.go._transform.rotationEuler.clone();
  230. this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
  231. // var ab=new Laya.Quaternion();
  232. // Laya.Quaternion.createFromAxisAngle(this.forw,-a,ab)
  233. // this.goS.CreateRay(poi, ab, BulletType.BulletG);
  234. this.goS.CreateRay(poi, ang, _type);
  235. }
  236. }
  237. else {
  238. this.RemoveTar();
  239. this.go.transform.localScaleZ = 50;
  240. this.goS.SetNextNotActive();
  241. }
  242. };
  243. Bullet.prototype.SetNextNotActive = function () {
  244. if (this.go) {
  245. this.go.active = false;
  246. if (this.goS)
  247. this.goS.SetNextNotActive();
  248. }
  249. };
  250. Bullet.prototype.RemoveTar = function () {
  251. if (this.HitTar) {
  252. this.HitTar = null;
  253. }
  254. };
  255. Bullet.prototype.SetTar = function (tar) {
  256. this.HitTar = tar;
  257. };
  258. Bullet.prototype.Hit = function () {
  259. if (this.HitTar) {
  260. if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
  261. var r = this.HitTar.getComponent(Role_1.Role);
  262. r.HitEd();
  263. this.CreateRay(this.tempPos, this.tempRotation);
  264. }
  265. }
  266. };
  267. Bullet.prototype.onEnable = function () {
  268. EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
  269. };
  270. Bullet.prototype.onDisable = function () {
  271. EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
  272. };
  273. return Bullet;
  274. }(Laya.Script3D));
  275. exports.Bullet = Bullet;
  276. },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./BulletController":4,"./GameSceneController":6,"./Role":10}],4:[function(require,module,exports){
  277. "use strict";
  278. Object.defineProperty(exports, "__esModule", { value: true });
  279. var Pool_Manager_1 = require("./Pool_Manager");
  280. var GameSceneController_1 = require("./GameSceneController");
  281. var BulletController = /** @class */ (function () {
  282. function BulletController() {
  283. }
  284. Object.defineProperty(BulletController, "Instance", {
  285. get: function () {
  286. return this.instance || (this.instance = new BulletController());
  287. },
  288. enumerable: true,
  289. configurable: true
  290. });
  291. // private bulletPref: Sprite3D;
  292. BulletController.prototype.init = function (bullet, poolName) {
  293. bullet.removeSelf();
  294. // this.bulletPref = bullet;
  295. Pool_Manager_1.Pool_Manager.Instance.InitData(poolName, bullet);
  296. };
  297. BulletController.prototype.CreateBullet = function (bulletName) {
  298. //if (this.bullet) return this.bullet;
  299. var go = Pool_Manager_1.Pool_Manager.Instance.SetActiveObject(bulletName);
  300. GameSceneController_1.default.Instance.game_scene.addChild(go);
  301. // this.bullet = go;
  302. return go;
  303. };
  304. return BulletController;
  305. }());
  306. exports.default = BulletController;
  307. },{"./GameSceneController":6,"./Pool_Manager":9}],5:[function(require,module,exports){
  308. "use strict";
  309. Object.defineProperty(exports, "__esModule", { value: true });
  310. var EventManager_1 = require("../game_module/EventManager");
  311. var GameDefined_1 = require("../game_module/GameDefined");
  312. var GameController = /** @class */ (function () {
  313. function GameController() {
  314. this.ishit = false;
  315. this.gameStart = false;
  316. this.gameover = true;
  317. }
  318. Object.defineProperty(GameController, "Instance", {
  319. get: function () {
  320. return this.instasnce || (this.instasnce = new GameController());
  321. },
  322. enumerable: true,
  323. configurable: true
  324. });
  325. GameController.prototype.Hit = function () {
  326. EventManager_1.EventManager.event(GameDefined_1.default.HitEvent);
  327. };
  328. GameController.prototype.GameStart = function () {
  329. this.gameStart = true;
  330. this.gameover = false;
  331. };
  332. return GameController;
  333. }());
  334. exports.GameController = GameController;
  335. },{"../game_module/EventManager":14,"../game_module/GameDefined":16}],6:[function(require,module,exports){
  336. "use strict";
  337. Object.defineProperty(exports, "__esModule", { value: true });
  338. var ResourceLoad_1 = require("../game_module/ResourceLoad");
  339. var BulletController_1 = require("./BulletController");
  340. var RoleController_1 = require("./RoleController");
  341. var GameDefined_1 = require("../game_module/GameDefined");
  342. var GameSceneController = /** @class */ (function () {
  343. function GameSceneController() {
  344. }
  345. Object.defineProperty(GameSceneController, "Instance", {
  346. get: function () {
  347. return this.instance || (this.instance = new GameSceneController());
  348. },
  349. enumerable: true,
  350. configurable: true
  351. });
  352. GameSceneController.prototype.CreateScene = function () {
  353. var _this = this;
  354. ResourceLoad_1.default.LoadResource([GameDefined_1.default.game_scene_path], function () {
  355. var t = Laya.loader.getRes(GameDefined_1.default.game_scene_path);
  356. Laya.stage.addChild(t);
  357. _this.game_scene = t;
  358. var _bulletG = t.getChildByName("bulletG");
  359. var _bulletR = t.getChildByName("bulletR");
  360. BulletController_1.default.Instance.init(_bulletG, GameDefined_1.default.poolName.bulletG);
  361. BulletController_1.default.Instance.init(_bulletR, GameDefined_1.default.poolName.BulletR);
  362. // var _role1 = t.getChildByName("role1") as Sprite3D;
  363. // var _role2 = t.getChildByName("role2") as Sprite3D;
  364. // var _moster1 = t.getChildByName("moster1") as Sprite3D;
  365. // var _moster2= t.getChildByName("moster2") as Sprite3D;
  366. var players = t.getChildByName("Players");
  367. var mosters = t.getChildByName("Mosters");
  368. RoleController_1.RoleController.Instance.initPlayer(players._children);
  369. RoleController_1.RoleController.Instance.initMoster(mosters._children);
  370. RoleController_1.RoleController.Instance.CreateRay();
  371. });
  372. };
  373. return GameSceneController;
  374. }());
  375. exports.default = GameSceneController;
  376. },{"../game_module/GameDefined":16,"../game_module/ResourceLoad":17,"./BulletController":4,"./RoleController":11}],7:[function(require,module,exports){
  377. "use strict";
  378. Object.defineProperty(exports, "__esModule", { value: true });
  379. var GameDefined_1 = require("../game_module/GameDefined");
  380. var Role_1 = require("./Role");
  381. var Vector3 = Laya.Vector3;
  382. var Ray = Laya.Ray;
  383. var HitResult = Laya.HitResult;
  384. var Bullet_1 = require("./Bullet");
  385. var BulletController_1 = require("./BulletController");
  386. var GameSceneController_1 = require("./GameSceneController");
  387. var Game_Tool_1 = require("../game_tool/Game_Tool");
  388. var EventManager_1 = require("../game_module/EventManager");
  389. var Moster = /** @class */ (function (_super) {
  390. __extends(Moster, _super);
  391. function Moster() {
  392. return _super.call(this) || this;
  393. }
  394. Moster.prototype.onAwake = function () {
  395. _super.prototype.onAwake.call(this);
  396. this._type = GameDefined_1.CheckType.Moster;
  397. this.forw = new Vector3(0, 0, 0);
  398. this._corss = new Vector3(0, 0, 0);
  399. this._bulletPos = this.self.getChildByName("bulletPos");
  400. };
  401. Moster.prototype.CreateRay = function () {
  402. this._transform.getForward(this.forw);
  403. this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
  404. if (!this._ray) {
  405. this._ray = new Ray(this._bulletPos.transform.position, this.forw);
  406. this._hit = new HitResult();
  407. }
  408. else {
  409. this._ray.origin = this._bulletPos.transform.position;
  410. this._ray.direction = this.forw;
  411. }
  412. if (!this.go) {
  413. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.BulletR);
  414. var gs = this.go.getComponent(Bullet_1.Bullet);
  415. if (!gs)
  416. this.goS = this.go.addComponent(Bullet_1.Bullet);
  417. }
  418. this.go.transform.position = this._bulletPos.transform.position;
  419. this.go.transform.rotation = this._transform.rotation;
  420. var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
  421. if (isS) {
  422. var poi = this._hit.point;
  423. var dis = Vector3.distance(this._bulletPos.transform.position, poi);
  424. this.go.transform.localScaleZ = dis;
  425. var other = this._hit.collider.owner;
  426. if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
  427. this.SetTar(other);
  428. this.goS.SetNextNotActive();
  429. }
  430. else {
  431. this.RemoveTar();
  432. var nor = this._hit.normal;
  433. nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
  434. nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
  435. nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
  436. Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
  437. var a = Game_Tool_1.default.getReflectAng(this.forw);
  438. var ang = this._transform.rotationEuler.clone();
  439. this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
  440. this.goS.CreateRay(poi, ang, GameDefined_1.BulletType.BulletR);
  441. }
  442. }
  443. else {
  444. this.RemoveTar();
  445. this.go.transform.localScaleZ = 50;
  446. this.goS.SetNextNotActive();
  447. }
  448. };
  449. Moster.prototype.RotationSelf = function (rota) {
  450. this._transform.rotate(rota);
  451. this.CreateRay();
  452. };
  453. Moster.prototype.SetNextNotActive = function () {
  454. if (this.go) {
  455. this.go.active = false;
  456. if (this.goS)
  457. this.goS.SetNextNotActive();
  458. }
  459. };
  460. Moster.prototype.RemoveTar = function () {
  461. if (this.HitTar) {
  462. this.HitTar = null;
  463. }
  464. };
  465. Moster.prototype.SetTar = function (tar) {
  466. this.HitTar = tar;
  467. };
  468. Moster.prototype.Hit = function () {
  469. if (this.HitTar) {
  470. //Game_Tool.CreateText(this.HitTar.name+"被击杀!");
  471. if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
  472. var r = this.HitTar.getComponent(Role_1.Role);
  473. r.HitEd();
  474. this.CreateRay();
  475. // this.CreateRay();
  476. }
  477. // EventManager.off(GameDefined.HitEvent,this, this.Hit);
  478. }
  479. };
  480. Moster.prototype.onEnable = function () {
  481. EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
  482. this._ishited = false;
  483. };
  484. Moster.prototype.onDisable = function () {
  485. EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
  486. };
  487. return Moster;
  488. }(Role_1.Role));
  489. exports.Moster = Moster;
  490. },{"../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){
  491. "use strict";
  492. Object.defineProperty(exports, "__esModule", { value: true });
  493. var Role_1 = require("./Role");
  494. var GameDefined_1 = require("../game_module/GameDefined");
  495. var Vector3 = Laya.Vector3;
  496. var Ray = Laya.Ray;
  497. var HitResult = Laya.HitResult;
  498. var GameSceneController_1 = require("./GameSceneController");
  499. var BulletController_1 = require("./BulletController");
  500. var Bullet_1 = require("./Bullet");
  501. var Game_Tool_1 = require("../game_tool/Game_Tool");
  502. var EventManager_1 = require("../game_module/EventManager");
  503. var Player = /** @class */ (function (_super) {
  504. __extends(Player, _super);
  505. function Player() {
  506. var _this = _super.call(this) || this;
  507. _this.idhit = false;
  508. return _this;
  509. }
  510. Player.prototype.onAwake = function () {
  511. _super.prototype.onAwake.call(this);
  512. this._type = GameDefined_1.CheckType.Player;
  513. this.forw = new Vector3(0, 0, 0);
  514. this._corss = new Vector3(0, 0, 0);
  515. this._bulletPos = this.self.getChildByName("bulletPos");
  516. };
  517. Player.prototype.CreateRay = function () {
  518. this._transform.getForward(this.forw);
  519. this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
  520. if (!this._ray) {
  521. this._ray = new Ray(this._bulletPos.transform.position, this.forw);
  522. this._hit = new HitResult();
  523. }
  524. else {
  525. this._ray.origin = this._bulletPos.transform.position;
  526. this._ray.direction = this.forw;
  527. }
  528. if (!this.go) {
  529. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.bulletG);
  530. var gs = this.go.getComponent(Bullet_1.Bullet);
  531. if (!gs)
  532. this.goS = this.go.addComponent(Bullet_1.Bullet);
  533. }
  534. this.go.transform.position = this._bulletPos.transform.position;
  535. this.go.transform.rotation = this._transform.rotation;
  536. var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
  537. if (isS) {
  538. var poi = this._hit.point;
  539. var dis = Vector3.distance(this._bulletPos.transform.position, poi);
  540. this.go.transform.localScaleZ = dis;
  541. var other = this._hit.collider.owner;
  542. if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
  543. this.SetTar(other);
  544. this.goS.SetNextNotActive();
  545. }
  546. else {
  547. this.RemoveTar();
  548. var nor = this._hit.normal;
  549. nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
  550. nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
  551. nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
  552. Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
  553. var a = Game_Tool_1.default.getReflectAng(this.forw);
  554. var ang = this._transform.rotationEuler.clone();
  555. this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
  556. // var v1=new Vector3(0.8,0,0.6); //向量1
  557. // var nor=new Vector3(-1,0,0); //v1碰撞法线
  558. // var ab=new Laya.Quaternion();
  559. // Laya.Quaternion.createFromAxisAngle(this.forw,a,ab)
  560. // this.goS.CreateRay(poi, ab, BulletType.BulletG);
  561. this.goS.CreateRay(poi, ang, GameDefined_1.BulletType.BulletG);
  562. }
  563. }
  564. else {
  565. this.RemoveTar();
  566. this.go.transform.localScaleZ = 50;
  567. this.goS.SetNextNotActive();
  568. }
  569. };
  570. Player.prototype.RotationSelf = function (rota) {
  571. // console.log(rota);
  572. // console.log(this._transform.rotationEuler);
  573. this._transform.rotate(rota);
  574. // console.log(this._transform.rotationEuler);
  575. this.CreateRay();
  576. };
  577. Player.prototype.SetNextNotActive = function () {
  578. if (this.go) {
  579. this.go.active = false;
  580. if (this.goS)
  581. this.goS.SetNextNotActive();
  582. }
  583. };
  584. Player.prototype.RemoveTar = function () {
  585. if (this.HitTar) {
  586. this.HitTar = null;
  587. }
  588. };
  589. Player.prototype.SetTar = function (tar) {
  590. this.HitTar = tar;
  591. };
  592. Player.prototype.Hit = function () {
  593. if (this.HitTar) {
  594. if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
  595. var r = this.HitTar.getComponent(Role_1.Role);
  596. r.HitEd();
  597. this.CreateRay();
  598. }
  599. }
  600. };
  601. Player.prototype.onEnable = function () {
  602. EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
  603. this._ishited = false;
  604. };
  605. Player.prototype.onDisable = function () {
  606. EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
  607. };
  608. return Player;
  609. }(Role_1.Role));
  610. exports.Player = Player;
  611. },{"../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){
  612. "use strict";
  613. Object.defineProperty(exports, "__esModule", { value: true });
  614. var Dictionary_1 = require("../game_tool/Dictionary");
  615. var Vector3 = Laya.Vector3;
  616. var Pool_Manager = /** @class */ (function () {
  617. function Pool_Manager() {
  618. this.poolDic = new Dictionary_1.default();
  619. this.prefabDic = new Dictionary_1.default();
  620. }
  621. Object.defineProperty(Pool_Manager, "Instance", {
  622. get: function () {
  623. return Pool_Manager.instance || (Pool_Manager.instance = new Pool_Manager());
  624. },
  625. enumerable: true,
  626. configurable: true
  627. });
  628. // [ ]
  629. Pool_Manager.prototype.InitData = function (name, prefab) {
  630. if (prefab != null) {
  631. if (!this.prefabDic.has(name))
  632. this.prefabDic.set(name, prefab);
  633. }
  634. };
  635. Pool_Manager.prototype.SetActiveObject = function (name, scale) {
  636. if (this.poolDic.has(name)) {
  637. if (this.poolDic.get(name).length > 0) {
  638. var result = this.poolDic.get(name).shift();
  639. result.active = true;
  640. return result;
  641. }
  642. else {
  643. if (this.prefabDic.has(name)) {
  644. var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
  645. if (scale != null) {
  646. curObj.transform.localScale = new Vector3(scale, scale, scale);
  647. }
  648. curObj.name = name;
  649. return curObj;
  650. }
  651. else {
  652. return null;
  653. }
  654. }
  655. }
  656. else {
  657. if (this.prefabDic.has(name)) {
  658. var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
  659. if (scale != null) {
  660. curObj.transform.localScale = new Vector3(scale, scale, scale);
  661. }
  662. curObj.name = name;
  663. return curObj;
  664. }
  665. else {
  666. return null;
  667. }
  668. }
  669. };
  670. //隐藏对象到dic
  671. Pool_Manager.prototype.SetDisableObject = function (go) {
  672. if (go)
  673. go.active = false;
  674. var key = go.name;
  675. if (!this.poolDic.has(key)) {
  676. this.poolDic.set(key, new Array());
  677. }
  678. this.poolDic.get(key).push(go);
  679. };
  680. Pool_Manager.prototype.DestoryObj = function (go) {
  681. if (go)
  682. go.destroy(true);
  683. };
  684. //延时隐藏对象到dic
  685. Pool_Manager.prototype.SetDisableMutiObject = function (go, timer) {
  686. var _this = this;
  687. Laya.timer.once(timer, this, function () {
  688. if (go)
  689. go.active = false;
  690. var key = go.name;
  691. if (!_this.poolDic.has(key)) {
  692. _this.poolDic.set(key, new Array());
  693. }
  694. _this.poolDic.get(key).push(go);
  695. });
  696. };
  697. return Pool_Manager;
  698. }());
  699. exports.Pool_Manager = Pool_Manager;
  700. },{"../game_tool/Dictionary":21}],10:[function(require,module,exports){
  701. "use strict";
  702. Object.defineProperty(exports, "__esModule", { value: true });
  703. var GameDefined_1 = require("../game_module/GameDefined");
  704. var Role = /** @class */ (function (_super) {
  705. __extends(Role, _super);
  706. function Role() {
  707. return _super.call(this) || this;
  708. }
  709. Role.prototype.onAwake = function () {
  710. this.self = this.owner;
  711. this._transform = this.self.transform;
  712. };
  713. Role.prototype.HitEd = function () {
  714. if (this._ishited)
  715. return;
  716. switch (this._type) {
  717. case GameDefined_1.CheckType.Player:
  718. console.log();
  719. break;
  720. case GameDefined_1.CheckType.Moster:
  721. break;
  722. }
  723. this.SetNextNotActive();
  724. this.self.active = false;
  725. };
  726. Role.prototype.SetNextNotActive = function () {
  727. };
  728. return Role;
  729. }(Laya.Script3D));
  730. exports.Role = Role;
  731. },{"../game_module/GameDefined":16}],11:[function(require,module,exports){
  732. "use strict";
  733. Object.defineProperty(exports, "__esModule", { value: true });
  734. var Player_1 = require("./Player");
  735. var Moster_1 = require("./Moster");
  736. var RoleController = /** @class */ (function () {
  737. function RoleController() {
  738. // public player:Sprite3D;
  739. // public playerS:Player;
  740. this.playerArr = [];
  741. this.mosterArr = [];
  742. this.behaviorArr = [];
  743. }
  744. Object.defineProperty(RoleController, "Instance", {
  745. get: function () {
  746. return this.instasnce || (this.instasnce = new RoleController());
  747. },
  748. enumerable: true,
  749. configurable: true
  750. });
  751. RoleController.prototype.initPlayer = function (roles) {
  752. for (var index = 0; index < roles.length; index++) {
  753. var element = roles[index];
  754. var beh = element.addComponent(Player_1.Player);
  755. this.behaviorArr.push(beh);
  756. }
  757. // if(role){
  758. // this.player=role;
  759. // this.playerS=this.player.addComponent(Player);
  760. // }
  761. };
  762. RoleController.prototype.initMoster = function (mosters) {
  763. for (var index = 0; index < mosters.length; index++) {
  764. var element = mosters[index];
  765. var beh = element.addComponent(Moster_1.Moster);
  766. this.behaviorArr.push(beh);
  767. }
  768. };
  769. RoleController.prototype.CreateRay = function () {
  770. for (var index = 0; index < this.behaviorArr.length; index++) {
  771. var element = this.behaviorArr[index];
  772. element.CreateRay();
  773. }
  774. // if(this.playerS)this.playerS.CreateRay();
  775. };
  776. RoleController.prototype.RoleRotation = function (rota) {
  777. // if(this.playerS)this.playerS.RotationSelf(rota);
  778. for (var index = 0; index < this.behaviorArr.length; index++) {
  779. var element = this.behaviorArr[index];
  780. element.RotationSelf(rota);
  781. }
  782. };
  783. return RoleController;
  784. }());
  785. exports.RoleController = RoleController;
  786. },{"./Moster":7,"./Player":8}],12:[function(require,module,exports){
  787. "use strict";
  788. Object.defineProperty(exports, "__esModule", { value: true });
  789. var SoundManager = Laya.SoundManager;
  790. var WXSdk_1 = require("../game_module/WXSdk");
  791. var SettingController = /** @class */ (function () {
  792. function SettingController() {
  793. this.vibrate = true;
  794. this.sound = true;
  795. this.temp = 0;
  796. this.badMove = "res/Sound/BadMove.mp3";
  797. this.click = "res/Sound/click.mp3";
  798. this.Continue = "res/Sound/Continue.mp3";
  799. this.LevelComp = "res/Sound/LevelComp.mp3";
  800. this.TrainCrash = "res/Sound/TrainCrash.mp3";
  801. this.TrainLoop = "res/Sound/TrainLoop.mp3";
  802. this.TrainStop = "res/Sound/TrainStop.mp3";
  803. this.Coin = "res/Sound/Coin1.mp3";
  804. this.Jump = [
  805. "res/Sound/PassengerJumpIn1.mp3",
  806. "res/Sound/PassengerJumpIn2.mp3",
  807. "res/Sound/PassengerJumpIn3.mp3",
  808. "res/Sound/PassengerJumpIn4.mp3",
  809. "res/Sound/PassengerJumpIn5.mp3",
  810. "res/Sound/PassengerJumpIn6.mp3",
  811. "res/Sound/PassengerJumpIn7.mp3",
  812. "res/Sound/PassengerJumpIn8.mp3",
  813. ];
  814. }
  815. Object.defineProperty(SettingController, "Instance", {
  816. get: function () {
  817. return this.instasnce || (this.instasnce = new SettingController());
  818. },
  819. enumerable: true,
  820. configurable: true
  821. });
  822. SettingController.prototype.SettingSound = function (value) {
  823. if (!this.sound)
  824. return;
  825. SoundManager.setSoundVolume(value);
  826. SoundManager.setMusicVolume(value);
  827. };
  828. SettingController.prototype._playMusic = function (on) {
  829. if (!this.sound)
  830. return;
  831. if (on) {
  832. if (this.soundChannel == null) {
  833. this.soundChannel = SoundManager.playMusic(this.TrainLoop, 0);
  834. this.soundChannel.volume = 0.5;
  835. }
  836. this.soundChannel.resume();
  837. }
  838. else {
  839. if (this.soundChannel) {
  840. this.soundChannel.pause();
  841. }
  842. }
  843. };
  844. SettingController.prototype._playBadMove = function () {
  845. WXSdk_1.WXSdk.ShortVibrate();
  846. if (!this.sound)
  847. return;
  848. SoundManager.playSound(this.badMove);
  849. };
  850. SettingController.prototype._Click = function () {
  851. if (!this.sound)
  852. return;
  853. SoundManager.playSound(this.click);
  854. };
  855. SettingController.prototype._Continue = function (on) {
  856. if (!this.sound)
  857. return;
  858. if (on) {
  859. SoundManager.playSound(this.Continue);
  860. }
  861. else {
  862. SoundManager.stopSound(this.Continue);
  863. }
  864. };
  865. SettingController.prototype._LevelComp = function () {
  866. if (!this.sound)
  867. return;
  868. SoundManager.playSound(this.LevelComp);
  869. };
  870. SettingController.prototype._TrainCrash = function () {
  871. WXSdk_1.WXSdk.LongVibrate();
  872. if (!this.sound)
  873. return;
  874. SoundManager.playSound(this.TrainCrash);
  875. };
  876. SettingController.prototype._TrainStop = function () {
  877. if (!this.sound)
  878. return;
  879. SoundManager.playSound(this.TrainStop);
  880. };
  881. SettingController.prototype._Coin = function () {
  882. WXSdk_1.WXSdk.ShortVibrate();
  883. if (!this.sound)
  884. return;
  885. SoundManager.playSound(this.Coin);
  886. };
  887. SettingController.prototype._Jump = function () {
  888. WXSdk_1.WXSdk.ShortVibrate();
  889. if (!this.sound)
  890. return;
  891. SoundManager.playSound(this.Jump[this.temp]);
  892. this.temp++;
  893. if (this.temp == 8)
  894. this.temp = 0;
  895. };
  896. return SettingController;
  897. }());
  898. exports.SettingController = SettingController;
  899. },{"../game_module/WXSdk":20}],13:[function(require,module,exports){
  900. "use strict";
  901. Object.defineProperty(exports, "__esModule", { value: true });
  902. var Dictionary_1 = require("../game_tool/Dictionary");
  903. var game_ui_1 = require("../game_ui/game_ui");
  904. var main_ui_1 = require("../game_ui/main_ui");
  905. var ViewType;
  906. (function (ViewType) {
  907. ViewType[ViewType["game_ui"] = 0] = "game_ui";
  908. ViewType[ViewType["main_ui"] = 1] = "main_ui";
  909. })(ViewType = exports.ViewType || (exports.ViewType = {}));
  910. var ViewManager = /** @class */ (function () {
  911. function ViewManager() {
  912. this.viewDic = [];
  913. this.addViewDic = new Dictionary_1.default();
  914. this.init();
  915. }
  916. Object.defineProperty(ViewManager, "Instance", {
  917. get: function () {
  918. return this.instance || (this.instance = new ViewManager());
  919. },
  920. enumerable: true,
  921. configurable: true
  922. });
  923. ViewManager.prototype.init = function () {
  924. this.viewDic[ViewType.game_ui] = game_ui_1.game_ui;
  925. this.viewDic[ViewType.main_ui] = main_ui_1.main_ui;
  926. };
  927. ViewManager.prototype.OpenView = function (view, data) {
  928. if (this.curView != null) {
  929. this.curView.OnClose();
  930. Laya.stage.removeChild(this.curView);
  931. this.curView.destroy(true);
  932. this.curView = null;
  933. }
  934. this.curView = new this.viewDic[view];
  935. Laya.stage.addChild(this.curView);
  936. this.curView.OnShow(data);
  937. };
  938. Object.defineProperty(ViewManager.prototype, "getCurView", {
  939. get: function () {
  940. return this.curView;
  941. },
  942. enumerable: true,
  943. configurable: true
  944. });
  945. ViewManager.prototype.AddView = function (view, data) {
  946. if (this.addViewDic.has(view))
  947. return;
  948. var t_view = new this.viewDic[view];
  949. this.addViewDic.set(view, t_view);
  950. Laya.stage.addChild(t_view);
  951. t_view.OnShow(data);
  952. };
  953. ViewManager.prototype.RemoveView = function () {
  954. if (this.curView != null) {
  955. this.curView.OnClose();
  956. Laya.stage.removeChild(this.curView);
  957. this.curView.destroy(true);
  958. this.curView = null;
  959. }
  960. };
  961. ViewManager.prototype.CloseView = function (view) {
  962. if (!this.addViewDic.has(view))
  963. return;
  964. var t_view = this.addViewDic.get(view);
  965. t_view.OnClose();
  966. Laya.stage.removeChild(t_view);
  967. t_view.destroy(true);
  968. this.addViewDic.delete(view);
  969. };
  970. ViewManager.prototype.OpenMask = function () {
  971. if (this.curMask != null) {
  972. return;
  973. }
  974. // this.curMask = new Mask_ui();
  975. if (!this.curMask)
  976. return;
  977. Laya.stage.addChild(this.curMask);
  978. };
  979. ViewManager.prototype.CloseMask = function () {
  980. if (this.curMask != null) {
  981. this.curMask.OnClose();
  982. Laya.stage.removeChild(this.curMask);
  983. this.curMask.destroy(true);
  984. this.curMask = null;
  985. }
  986. };
  987. return ViewManager;
  988. }());
  989. exports.default = ViewManager;
  990. },{"../game_tool/Dictionary":21,"../game_ui/game_ui":24,"../game_ui/main_ui":25}],14:[function(require,module,exports){
  991. "use strict";
  992. Object.defineProperty(exports, "__esModule", { value: true });
  993. var EventManager = /** @class */ (function () {
  994. function EventManager() {
  995. }
  996. Object.defineProperty(EventManager, "Disispatcher", {
  997. get: function () {
  998. return EventManager.disispatcher || (EventManager.disispatcher = new Laya.EventDispatcher());
  999. },
  1000. enumerable: true,
  1001. configurable: true
  1002. });
  1003. EventManager.on = function (type, call, data) {
  1004. this.Disispatcher.on(type, call, data);
  1005. };
  1006. EventManager.off = function (type, call, data) {
  1007. this.Disispatcher.off(type, call, data);
  1008. };
  1009. EventManager.event = function (type, data) {
  1010. if (data === void 0) { data = null; }
  1011. this.Disispatcher.event(type, data);
  1012. };
  1013. return EventManager;
  1014. }());
  1015. exports.EventManager = EventManager;
  1016. },{}],15:[function(require,module,exports){
  1017. "use strict";
  1018. Object.defineProperty(exports, "__esModule", { value: true });
  1019. var UserModel_1 = require("./UserModel");
  1020. var Main_1 = require("../Main");
  1021. var EventManager_1 = require("./EventManager");
  1022. var FYHD_Sdk = /** @class */ (function () {
  1023. function FYHD_Sdk() {
  1024. }
  1025. //初始化sdk
  1026. FYHD_Sdk.InitSdk = function () {
  1027. Laya.Browser.window.sdk.getFyhd().startSdk();
  1028. FYHD_Sdk.UserInfoAuth();
  1029. };
  1030. //用户授权
  1031. FYHD_Sdk.UserInfoAuth = function () {
  1032. if (!Main_1.Main.IsWx)
  1033. return;
  1034. Laya.Browser.window.sdk.getFyhd().getFyhdUserInfo(null, false, function (data) {
  1035. console.log("无授权回调:" + JSON.stringify(data));
  1036. if (data.result.user) {
  1037. FYHD_Sdk.openid = data.result.user.openid;
  1038. FYHD_Sdk.AuthInfo();
  1039. }
  1040. });
  1041. };
  1042. FYHD_Sdk.AuthInfo = function () {
  1043. var args = {
  1044. openid: FYHD_Sdk.openid,
  1045. };
  1046. Laya.Browser.window.sdk.getFyhd().loginData(args, function (data) {
  1047. console.log("授权上报回调:" + JSON.stringify(data));
  1048. FYHD_Sdk.ValueUser();
  1049. });
  1050. };
  1051. FYHD_Sdk.ValueUser = function () {
  1052. var args = {
  1053. openid: FYHD_Sdk.openid,
  1054. };
  1055. Laya.Browser.window.sdk.getFyhd().valueuser(args, function (data) {
  1056. console.log("有效用户上报:" + JSON.stringify(data));
  1057. });
  1058. };
  1059. //创角色
  1060. FYHD_Sdk.RoleData = function () {
  1061. if (!Main_1.Main.IsWx)
  1062. return;
  1063. var args = {
  1064. openid: FYHD_Sdk.openid,
  1065. role_id: UserModel_1.default.Instance.CurModel.userid,
  1066. create_time: UserModel_1.default.Instance.CurModel.ServerTime
  1067. };
  1068. Laya.Browser.window.sdk.getFyhd().roleData(args, function (data) {
  1069. console.log("创建角色:" + JSON.stringify(data));
  1070. FYHD_Sdk.Login();
  1071. });
  1072. };
  1073. //登录信息上报
  1074. FYHD_Sdk.Login = function () {
  1075. if (!Main_1.Main.IsWx)
  1076. return;
  1077. var openid = FYHD_Sdk.openid ? FYHD_Sdk.openid : UserModel_1.default.Instance.CurModel.openid;
  1078. var args = {
  1079. openid: openid,
  1080. role_id: UserModel_1.default.Instance.CurModel.userid,
  1081. create_time: UserModel_1.default.Instance.CurModel.ServerTime.toString()
  1082. };
  1083. console.log("登录参数:" + JSON.stringify(args));
  1084. Laya.Browser.window.sdk.getFyhd().uploginData(args, function (data) {
  1085. console.log("登录结果:" + JSON.stringify(data));
  1086. // FYHD_Sdk.PushData();
  1087. });
  1088. };
  1089. //点击事件上报
  1090. FYHD_Sdk.ClickAd = function (ad_type) {
  1091. if (!Main_1.Main.IsWx)
  1092. return;
  1093. var param = {
  1094. ad_type: ad_type,
  1095. };
  1096. console.log("点击参数:" + param);
  1097. Laya.Browser.window.sdk.getFyhd().advertisement(param, function (data) {
  1098. console.log("点击结果:" + JSON.stringify(data));
  1099. });
  1100. };
  1101. FYHD_Sdk.PushData = function () {
  1102. if (!Main_1.Main.IsWx)
  1103. return;
  1104. var param = {};
  1105. Laya.Browser.window.sdk.getFyhd().shareRecommend(param, function (data) {
  1106. if (data.data) {
  1107. FYHD_Sdk.pushData = data.data;
  1108. FYHD_Sdk.pushData.sort(FYHD_Sdk.ListSort);
  1109. EventManager_1.EventManager.event(FYHD_Sdk.ShowAd);
  1110. FYHD_Sdk.isHaveDate = true;
  1111. }
  1112. console.log("获取互推信息:" + JSON.stringify(FYHD_Sdk.pushData));
  1113. });
  1114. };
  1115. FYHD_Sdk.ShowHuTuiJump = function (data) {
  1116. if (!Main_1.Main.IsWx)
  1117. return;
  1118. if (data.jump_type == 2) //二维码跳转方法
  1119. {
  1120. Laya.Browser.window.wx.previewImage({ current: data.qrcode, urls: [data.qrcode] });
  1121. }
  1122. else if (data.jump_type == 1) //直跳方法
  1123. {
  1124. Laya.Browser.window.wx.navigateToMiniProgram({
  1125. appId: data.to_appid,
  1126. path: data.jump_path,
  1127. success: function (res) {
  1128. // 打开成功
  1129. console.log("上报成功:" + JSON.stringify(res));
  1130. FYHD_Sdk.PushClick(data.to_appid);
  1131. }
  1132. });
  1133. }
  1134. else if (data.jump_type == 0) //平台跳转方法
  1135. {
  1136. Laya.Browser.window.wx.navigateToMiniProgram({
  1137. appId: data.platform_appid,
  1138. path: data.jump_path,
  1139. success: function (res) {
  1140. // 打开成功
  1141. console.log("上报成功:" + JSON.stringify(res));
  1142. FYHD_Sdk.PushClick(data.to_appid);
  1143. }
  1144. });
  1145. }
  1146. };
  1147. FYHD_Sdk.PushClick = function (to_appid) {
  1148. if (!Main_1.Main.IsWx)
  1149. return;
  1150. var param = {
  1151. openid: FYHD_Sdk.openid,
  1152. to_appid: to_appid,
  1153. };
  1154. Laya.Browser.window.sdk.getFyhd().sharePlay(param, function (data) {
  1155. console.log("点击上报结果:" + JSON.stringify(data));
  1156. });
  1157. };
  1158. FYHD_Sdk.ListSort = function (a, b) {
  1159. if (Number(a["panel"]) < Number(b["panel"])) {
  1160. return -1;
  1161. }
  1162. if (Number(a["panel"]) == Number(b["panel"])) {
  1163. return 0;
  1164. }
  1165. if (Number(a["panel"]) > Number(b["panel"])) {
  1166. return 1;
  1167. }
  1168. };
  1169. FYHD_Sdk.Ad_ClickType = {
  1170. Video: "video_click",
  1171. Watch: "watch",
  1172. Share: "share",
  1173. Banner: "banner",
  1174. Push: "push"
  1175. };
  1176. FYHD_Sdk.pushData = [];
  1177. FYHD_Sdk.isHaveDate = false;
  1178. FYHD_Sdk.ShowAd = "ShowAd";
  1179. return FYHD_Sdk;
  1180. }());
  1181. exports.FYHD_Sdk = FYHD_Sdk;
  1182. },{"../Main":2,"./EventManager":14,"./UserModel":19}],16:[function(require,module,exports){
  1183. "use strict";
  1184. Object.defineProperty(exports, "__esModule", { value: true });
  1185. var GameDefined = /** @class */ (function () {
  1186. function GameDefined() {
  1187. }
  1188. GameDefined.player_layer = 9;
  1189. GameDefined.wall_layer = 8;
  1190. GameDefined.moster_layer = 10;
  1191. GameDefined.boss_layer = 11;
  1192. GameDefined.tree_layer = 12;
  1193. GameDefined.bomb_layer = 13;
  1194. GameDefined.HitEvent = "HitEvent";
  1195. GameDefined.game_scene_path = "res/LayaScene_GameScene/Conventional/GameScene.ls";
  1196. GameDefined.poolName = {
  1197. bulletG: "bulletG",
  1198. BulletR: "BulletR"
  1199. };
  1200. GameDefined.uiRes = [
  1201. "res/atlas/main_res.atlas",
  1202. "res/atlas/main_res.png "
  1203. ];
  1204. return GameDefined;
  1205. }());
  1206. exports.default = GameDefined;
  1207. var CheckType;
  1208. (function (CheckType) {
  1209. CheckType[CheckType["Player"] = 0] = "Player";
  1210. CheckType[CheckType["Moster"] = 1] = "Moster";
  1211. CheckType[CheckType["Boss"] = 2] = "Boss";
  1212. CheckType[CheckType["Bomb"] = 3] = "Bomb";
  1213. CheckType[CheckType["Tree"] = 4] = "Tree";
  1214. })(CheckType = exports.CheckType || (exports.CheckType = {}));
  1215. var BulletType;
  1216. (function (BulletType) {
  1217. BulletType[BulletType["BulletR"] = 0] = "BulletR";
  1218. BulletType[BulletType["BulletG"] = 1] = "BulletG";
  1219. })(BulletType = exports.BulletType || (exports.BulletType = {}));
  1220. },{}],17:[function(require,module,exports){
  1221. "use strict";
  1222. Object.defineProperty(exports, "__esModule", { value: true });
  1223. var ResourceLoad = /** @class */ (function () {
  1224. function ResourceLoad() {
  1225. }
  1226. ResourceLoad.LoadResource = function (path, complet) {
  1227. Laya.loader.retryNum = 2;
  1228. Laya.loader.maxLoader = 3;
  1229. Laya.loader.retryDelay = 100;
  1230. Laya.loader.create(path, new Laya.Handler(this, complet));
  1231. Laya.loader.on(Laya.Event.ERROR, this, function (data) {
  1232. console.log(data + " 资源加载失败");
  1233. });
  1234. };
  1235. return ResourceLoad;
  1236. }());
  1237. exports.default = ResourceLoad;
  1238. },{}],18:[function(require,module,exports){
  1239. "use strict";
  1240. Object.defineProperty(exports, "__esModule", { value: true });
  1241. var WXSdk_1 = require("./WXSdk");
  1242. var FYHD_Sdk_1 = require("./FYHD_Sdk");
  1243. var ShareModule = /** @class */ (function () {
  1244. function ShareModule() {
  1245. }
  1246. ShareModule.GoShare = function (callBack) {
  1247. ShareModule.ShareTime = new Date().getTime();
  1248. console.log("分享点击时间=" + ShareModule.ShareTime);
  1249. ShareModule.IsSharing = true;
  1250. ShareModule.callback = callBack;
  1251. };
  1252. ShareModule.OnShowHandle = function () {
  1253. if (Laya.Browser.window.wx) {
  1254. Laya.Browser.window.wx.onShow(function (option) {
  1255. console.log("onshow share start");
  1256. console.log("进入微信");
  1257. //Laya.timer.scale=1;
  1258. if (ShareModule.IsSharing) {
  1259. ShareModule.IsSharing = false;
  1260. var time = new Date().getTime();
  1261. console.log("分享回到游戏时间" + time);
  1262. var wait = (time - ShareModule.ShareTime) / 1000;
  1263. console.log("分享停留时间为:" + wait);
  1264. var shareSuccess = false;
  1265. var realSuccess = false;
  1266. if (wait >= 2) {
  1267. if (Math.random() <= 0.5) {
  1268. shareSuccess = true;
  1269. FYHD_Sdk_1.FYHD_Sdk.ClickAd(FYHD_Sdk_1.FYHD_Sdk.Ad_ClickType.Share);
  1270. if (!ShareModule.callback)
  1271. return;
  1272. ShareModule.callback(true);
  1273. Laya.Browser.window.wx.showToast({ title: "分享成功!" });
  1274. }
  1275. else {
  1276. if (!ShareModule.callback)
  1277. return;
  1278. if (Math.random() <= 0.5) {
  1279. Laya.Browser.window.wx.showToast({ title: "分享失败!" });
  1280. }
  1281. else {
  1282. WXSdk_1.WXSdk.ShowToast("请分享到不同群^-^", false);
  1283. }
  1284. ShareModule.callback(false);
  1285. }
  1286. }
  1287. }
  1288. });
  1289. }
  1290. };
  1291. ShareModule.IsSharing = false;
  1292. return ShareModule;
  1293. }());
  1294. exports.ShareModule = ShareModule;
  1295. },{"./FYHD_Sdk":15,"./WXSdk":20}],19:[function(require,module,exports){
  1296. "use strict";
  1297. Object.defineProperty(exports, "__esModule", { value: true });
  1298. var UserConfigName;
  1299. (function (UserConfigName) {
  1300. UserConfigName[UserConfigName["train"] = 0] = "train";
  1301. UserConfigName[UserConfigName["sign"] = 1] = "sign";
  1302. UserConfigName[UserConfigName["rewards"] = 2] = "rewards";
  1303. })(UserConfigName = exports.UserConfigName || (exports.UserConfigName = {}));
  1304. //用户信息属性
  1305. var UserAttr;
  1306. (function (UserAttr) {
  1307. UserAttr[UserAttr["equip_train"] = 0] = "equip_train";
  1308. UserAttr[UserAttr["user_id"] = 1] = "user_id";
  1309. UserAttr[UserAttr["stage"] = 2] = "stage";
  1310. UserAttr[UserAttr["get_trains"] = 3] = "get_trains";
  1311. UserAttr[UserAttr["money"] = 4] = "money";
  1312. UserAttr[UserAttr["progress_trains"] = 5] = "progress_trains";
  1313. })(UserAttr = exports.UserAttr || (exports.UserAttr = {}));
  1314. var NetUserModel = /** @class */ (function () {
  1315. function NetUserModel(_token, _config, _appSetting, _user, _userbase, _useInvite, _user_lottery, _user_treasure, t, _user_achievement, _user_sign, _user_arena) {
  1316. this.loginSeverTime = 0;
  1317. this.localTime = Laya.timer.currTimer;
  1318. this.loginSeverTime = t;
  1319. this.m_token = _token;
  1320. this.m_configs = _config;
  1321. this.m_app_setting = _appSetting;
  1322. this.m_user = _user;
  1323. this.m_user_base = _userbase;
  1324. this.m_user_invite = _useInvite;
  1325. this.m_user_lottery = _user_lottery;
  1326. this.m_user_treasure = _user_treasure;
  1327. this.m_user_achievement = _user_achievement;
  1328. this.m_user_sign = _user_sign;
  1329. this.m_user_arena = _user_arena;
  1330. this.userid = this.m_user["user_id"];
  1331. this.openid = this.m_user_base["openid"];
  1332. this.nickname = this.m_user_base["nickname"];
  1333. }
  1334. Object.defineProperty(NetUserModel.prototype, "Cfg", {
  1335. set: function (cfg) {
  1336. this.m_configs = cfg;
  1337. },
  1338. enumerable: true,
  1339. configurable: true
  1340. });
  1341. Object.defineProperty(NetUserModel.prototype, "sharetitle", {
  1342. get: function () {
  1343. if (this.m_app_setting["sharetitle"]) {
  1344. return this.m_app_setting["sharetitle"];
  1345. }
  1346. return "";
  1347. },
  1348. enumerable: true,
  1349. configurable: true
  1350. });
  1351. Object.defineProperty(NetUserModel.prototype, "shareimage", {
  1352. get: function () {
  1353. if (this.m_app_setting["shareimage"]) {
  1354. return this.m_app_setting["shareimage"];
  1355. }
  1356. return "";
  1357. },
  1358. enumerable: true,
  1359. configurable: true
  1360. });
  1361. NetUserModel.prototype.GetCfg = function (type) {
  1362. var _type = UserConfigName[type];
  1363. return this.m_configs[_type];
  1364. };
  1365. NetUserModel.prototype.GetUserAttr = function (_attr) {
  1366. var attr = UserAttr[_attr];
  1367. return this.m_user[attr];
  1368. };
  1369. Object.defineProperty(NetUserModel.prototype, "ServerTime", {
  1370. get: function () {
  1371. var time = Laya.timer.currTimer;
  1372. var stime = this.loginSeverTime + Math.ceil((time - this.localTime) / 1000);
  1373. return stime;
  1374. },
  1375. enumerable: true,
  1376. configurable: true
  1377. });
  1378. Object.defineProperty(NetUserModel.prototype, "GuideLevel", {
  1379. get: function () {
  1380. if (this.m_app_setting["GuideLevel"]) {
  1381. return Number(this.m_app_setting["GuideLevel"]);
  1382. }
  1383. return 1;
  1384. },
  1385. enumerable: true,
  1386. configurable: true
  1387. });
  1388. Object.defineProperty(NetUserModel.prototype, "BannerMoveTime", {
  1389. get: function () {
  1390. if (this.m_app_setting["BannerMoveTime"]) {
  1391. return Number(this.m_app_setting["BannerMoveTime"]);
  1392. }
  1393. return 0;
  1394. },
  1395. enumerable: true,
  1396. configurable: true
  1397. });
  1398. Object.defineProperty(NetUserModel.prototype, "HaveBanner", {
  1399. get: function () {
  1400. if (this.m_app_setting["HaveBanner"]) {
  1401. return Number(this.m_app_setting["HaveBanner"]);
  1402. }
  1403. return 0;
  1404. },
  1405. enumerable: true,
  1406. configurable: true
  1407. });
  1408. Object.defineProperty(NetUserModel.prototype, "IsShare", {
  1409. get: function () {
  1410. if (this.m_app_setting["IsShare"]) {
  1411. return Number(this.m_app_setting["IsShare"]);
  1412. }
  1413. return 0;
  1414. },
  1415. enumerable: true,
  1416. configurable: true
  1417. });
  1418. Object.defineProperty(NetUserModel.prototype, "BtnCanMove", {
  1419. get: function () {
  1420. if (this.m_app_setting["BtnCanMove"]) {
  1421. return Number(this.m_app_setting["BtnCanMove"]);
  1422. }
  1423. return 0;
  1424. },
  1425. enumerable: true,
  1426. configurable: true
  1427. });
  1428. Object.defineProperty(NetUserModel.prototype, "ISShareThenVideo", {
  1429. get: function () {
  1430. if (this.m_app_setting["ISShareThenVideo"]) {
  1431. return Number(this.m_app_setting["ISShareThenVideo"]);
  1432. }
  1433. return 0;
  1434. },
  1435. enumerable: true,
  1436. configurable: true
  1437. });
  1438. Object.defineProperty(NetUserModel.prototype, "OpenSceneValue", {
  1439. get: function () {
  1440. if (this.m_app_setting["OpenSceneValue"]) {
  1441. return Number(this.m_app_setting["OpenSceneValue"]);
  1442. }
  1443. return 0;
  1444. },
  1445. enumerable: true,
  1446. configurable: true
  1447. });
  1448. Object.defineProperty(NetUserModel.prototype, "IsOpenTryOut", {
  1449. get: function () {
  1450. if (this.m_app_setting["IsOpenTryOut"]) {
  1451. var num = Number(this.m_app_setting["IsOpenTryOut"]);
  1452. if (num == 0)
  1453. return 0;
  1454. if (Math.random() < num) {
  1455. return 1;
  1456. }
  1457. else {
  1458. return 0;
  1459. }
  1460. }
  1461. return 0;
  1462. },
  1463. enumerable: true,
  1464. configurable: true
  1465. });
  1466. return NetUserModel;
  1467. }());
  1468. exports.NetUserModel = NetUserModel;
  1469. var UserModel = /** @class */ (function () {
  1470. function UserModel(code, nickname, avatar, gender, country, province, city, device, share_id, scene) {
  1471. UserModel.instance = this;
  1472. this.m_code = code;
  1473. this.m_nickname = nickname ? nickname : "游客";
  1474. this.m_avatar = avatar ? avatar : "";
  1475. this.m_gender = gender ? gender : 0;
  1476. this.m_city = city ? city : "";
  1477. this.m_device = device ? device : "";
  1478. this.m_share_id = share_id ? share_id : "";
  1479. this.m_scene = scene ? scene : "";
  1480. this.m_country = country ? country : "";
  1481. this.m_province = province ? province : "";
  1482. }
  1483. Object.defineProperty(UserModel.prototype, "CurModel", {
  1484. get: function () {
  1485. return this.curModel;
  1486. },
  1487. enumerable: true,
  1488. configurable: true
  1489. });
  1490. Object.defineProperty(UserModel, "Instance", {
  1491. get: function () {
  1492. if (UserModel.instance) {
  1493. return UserModel.instance;
  1494. }
  1495. else {
  1496. UserModel.instance = new UserModel("11", "游客", "", null, "", "", "", "iphone6s", "", "");
  1497. return UserModel.instance;
  1498. }
  1499. },
  1500. enumerable: true,
  1501. configurable: true
  1502. });
  1503. UserModel.prototype.SetUserModel = function (_model) {
  1504. this.curModel = _model;
  1505. };
  1506. return UserModel;
  1507. }());
  1508. exports.default = UserModel;
  1509. },{}],20:[function(require,module,exports){
  1510. "use strict";
  1511. Object.defineProperty(exports, "__esModule", { value: true });
  1512. var Main_1 = require("../Main");
  1513. var ViewManager_1 = require("../game_logic/ViewManager");
  1514. var SettingController_1 = require("../game_logic/SettingController");
  1515. var ShareModule_1 = require("./ShareModule");
  1516. var UserModel_1 = require("./UserModel");
  1517. var WXSdk = /** @class */ (function () {
  1518. function WXSdk() {
  1519. this.shareId = "";
  1520. this.shareScene = "";
  1521. }
  1522. WXSdk.prototype.setShareId = function (tid) {
  1523. if (tid != "" && tid != null) {
  1524. this.shareId = tid;
  1525. console.log("[LOG]: setShareOpenId.tid=", this.shareId);
  1526. }
  1527. };
  1528. Object.defineProperty(WXSdk, "Instance", {
  1529. get: function () {
  1530. return WXSdk.instance || (WXSdk.instance = new WXSdk());
  1531. },
  1532. enumerable: true,
  1533. configurable: true
  1534. });
  1535. Object.defineProperty(WXSdk.prototype, "getShareId", {
  1536. get: function () {
  1537. return this.shareId;
  1538. },
  1539. enumerable: true,
  1540. configurable: true
  1541. });
  1542. Object.defineProperty(WXSdk.prototype, "ShareScene", {
  1543. get: function () {
  1544. return this.shareScene;
  1545. },
  1546. set: function (sceneS) {
  1547. if (sceneS != "" && sceneS != null) {
  1548. this.shareScene = sceneS;
  1549. }
  1550. },
  1551. enumerable: true,
  1552. configurable: true
  1553. });
  1554. WXSdk.prototype.init = function (cb) {
  1555. Laya.Browser.window.wx.showShareMenu({
  1556. withShareTicket: true
  1557. });
  1558. //this.shezhiShareMessage(null, null);
  1559. Laya.Browser.window.wx.onShow(function (option) {
  1560. var shareTicket = option.shareTicket;
  1561. var shareid = option.query.shareid;
  1562. var scene = decodeURIComponent(option.query.scene);
  1563. console.log("全局path=:", option.path);
  1564. console.log("decodeURIComponent", option.query.scene);
  1565. var sceneQuery = JSON.stringify(option.query);
  1566. if (Main_1.Main.wxValue == "") {
  1567. Main_1.Main.wxValue = option.scene;
  1568. }
  1569. console.log("scene", option.scene);
  1570. console.log("sceneQuery", sceneQuery);
  1571. var channel = option.query.channel;
  1572. var appid;
  1573. if (option.referrerInfo) {
  1574. console.log("referrerInfo:" + JSON.stringify(option.referrerInfo));
  1575. appid = option.referrerInfo.appId;
  1576. if (appid) {
  1577. console.log("onShow appis is:", appid);
  1578. }
  1579. else {
  1580. console.log("onShow appis is null");
  1581. }
  1582. }
  1583. else {
  1584. console.log("referrerInfo为空");
  1585. }
  1586. if (channel != null) {
  1587. console.log("onShow channel is:", channel);
  1588. }
  1589. cb(shareTicket, shareid, channel, appid);
  1590. });
  1591. };
  1592. WXSdk.ShareMessage = function (title, imageUrl) {
  1593. if (!Main_1.Main.IsWx)
  1594. return;
  1595. var t = UserModel_1.default.Instance.CurModel.ServerTime;
  1596. var _title = title;
  1597. var _url = imageUrl;
  1598. if (!_title) {
  1599. _title = UserModel_1.default.Instance.CurModel.sharetitle;
  1600. _url = UserModel_1.default.Instance.CurModel.shareimage;
  1601. }
  1602. Laya.Browser.window.wx.onShareAppMessage(function () { return ({
  1603. title: _title,
  1604. imageUrl: _url,
  1605. query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + t + "_" + Math.floor(9999 * Math.random()).toString()
  1606. }); });
  1607. };
  1608. WXSdk.prototype.wx_login = function (cb) {
  1609. if (WXSdk.Lodining) {
  1610. return;
  1611. }
  1612. WXSdk.Lodining = true;
  1613. console.log("Excute wx.login! shareOpenId: " + this.shareId);
  1614. Laya.Browser.window.wx.login({
  1615. success: function (res) {
  1616. console.log("wx.login: success! res.code=" + res.code);
  1617. if (res.code) {
  1618. WXSdk.Lodining = false;
  1619. console.log("将要传递的参数:" + res);
  1620. cb(res);
  1621. }
  1622. else {
  1623. console.log('获取用户登录态失败!' + res.errMsg);
  1624. cb("error");
  1625. }
  1626. },
  1627. fail: function (res) { console.log("wx.login: failed, res=" + res); WXSdk.Lodining = false; cb("error"); }
  1628. });
  1629. };
  1630. //显示加载信息
  1631. WXSdk.ShowLoading = function (title, isShowWx) {
  1632. if (title === void 0) { title = "加载中..."; }
  1633. if (isShowWx === void 0) { isShowWx = true; }
  1634. if (Laya.Browser.window && Laya.Browser.window.wx) {
  1635. if (isShowWx) {
  1636. Laya.Browser.window.wx.showLoading({ title: title, mask: true });
  1637. }
  1638. ViewManager_1.default.Instance.OpenMask();
  1639. }
  1640. };
  1641. WXSdk.SystemInfo = function () {
  1642. if (Laya.Browser.window.wx) {
  1643. return Laya.Browser.window.wx.getSystemInfoSync();
  1644. }
  1645. };
  1646. // private static button;
  1647. // public static showbjWxGameQuan(flag: boolean): void {
  1648. // if (Laya.Browser.window.wx == null) {
  1649. // return;
  1650. // }
  1651. // if (flag) {
  1652. // if (WeiXinSDK.button == null) {
  1653. // let info = Laya.Browser.window.wx.getSystemInfoSync();
  1654. // if (!info) return;
  1655. // var top = 474 * info.windowHeight / Laya.stage.height;
  1656. // var height = 94 * info.windowHeight / Laya.stage.height;
  1657. // var width = height * 95 / 94;
  1658. // WeiXinSDK.button = Laya.Browser.window.wx.createGameClubButton
  1659. // ({
  1660. // type: "image",
  1661. // image: 'res/wx.png',
  1662. // style:
  1663. // {
  1664. // left: 0,
  1665. // top: top,
  1666. // width: width,
  1667. // height: height
  1668. // }
  1669. // })
  1670. // }
  1671. // WeiXinSDK.button.show();
  1672. // }
  1673. // else {
  1674. // if (WeiXinSDK.button) {
  1675. // WeiXinSDK.button.hide();
  1676. // }
  1677. // }
  1678. // }
  1679. //退出
  1680. // 显示提示信息//
  1681. WXSdk.ShowToast = function (text, icon) {
  1682. if (icon === void 0) { icon = true; }
  1683. if (Laya.Browser.window.wx) {
  1684. var t_icon = icon ? "success" : "none";
  1685. Laya.Browser.window.wx.showToast({ title: text, icon: t_icon });
  1686. }
  1687. else {
  1688. console.log(text);
  1689. }
  1690. };
  1691. //1:pet 2:人物
  1692. // public static XianShi_Model(content: string, callback: Function = null, type = 1, title = "") {
  1693. // if (Laya.Browser.window && Laya.Browser.window.wx) {
  1694. // if (type == 1) {
  1695. // var cancelText = "残忍丢掉";
  1696. // var confirmText = "带上一起";
  1697. // } else {
  1698. // var cancelText = "不想";
  1699. // var confirmText = "想";
  1700. // }
  1701. // Laya.Browser.window.wx.showModal({
  1702. // title: title,
  1703. // content: content,
  1704. // cancelText: cancelText,
  1705. // confirmText: confirmText,
  1706. // success(res) {
  1707. // if (res.confirm) {
  1708. // console.log('用户点击确定');
  1709. // callback(true);
  1710. // } else if (res.cancel) {
  1711. // console.log('用户点击取消');
  1712. // callback(false);
  1713. // }
  1714. // },
  1715. // fail(res?) {
  1716. // console.log('用户点击取消');
  1717. // callback(false);
  1718. // }
  1719. // })
  1720. // }
  1721. // }
  1722. WXSdk.ShortVibrate = function () {
  1723. if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
  1724. Laya.Browser.window.wx.vibrateShort({});
  1725. }
  1726. };
  1727. WXSdk.LongVibrate = function () {
  1728. if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
  1729. Laya.Browser.window.wx.vibrateLong({});
  1730. }
  1731. };
  1732. WXSdk.HideLoading = function (isShowWx) {
  1733. if (isShowWx === void 0) { isShowWx = true; }
  1734. if (Laya.Browser.window && Laya.Browser.window.wx) {
  1735. if (isShowWx) {
  1736. Laya.Browser.window.wx.hideLoading();
  1737. }
  1738. ViewManager_1.default.Instance.CloseMask();
  1739. }
  1740. };
  1741. WXSdk.Success = function (stageId) {
  1742. if (!Main_1.Main.IsWx)
  1743. return;
  1744. Laya.Browser.window.wx.aldStage.onEnd({
  1745. stageId: stageId,
  1746. stageName: "第" + stageId + "关",
  1747. event: "complete",
  1748. params: {
  1749. desc: "关卡完成" //描述
  1750. }
  1751. });
  1752. };
  1753. //记录阿拉丁事件
  1754. WXSdk.AldEvent = function (eventName, key, value) {
  1755. if (Laya.Browser.window && Laya.Browser.window.wx) {
  1756. if (!key)
  1757. key = "用户id";
  1758. if (!value) {
  1759. value = "";
  1760. console.log(value);
  1761. }
  1762. Laya.Browser.window.wx.aldSendEvent(eventName, { key: value });
  1763. }
  1764. };
  1765. WXSdk.Fail = function (stageId) {
  1766. if (!Main_1.Main.IsWx)
  1767. return;
  1768. Laya.Browser.window.wx.aldStage.onEnd({
  1769. stageId: stageId,
  1770. stageName: "第" + stageId + "关",
  1771. event: "fail",
  1772. params: {
  1773. desc: "关卡失败",
  1774. }
  1775. });
  1776. };
  1777. // public static leveleRuning(stageId: string, userid: string, eventtype: number, itemName: string) {
  1778. // if (Laya.Browser.window && Laya.Browser.window.wx) {
  1779. // //Laya.Browser.window.wx.aldStage.onRunning({"stageId":stageId,"stageName":stageName,"userId":userid});
  1780. // var eventT = eventtype == 0 ? "award" : "revive";
  1781. // Laya.Browser.window.wx.aldStage.onRunning({
  1782. // stageId: stageId,
  1783. // stageName: "第" + stageId + "关",
  1784. // userId: userid,
  1785. // event: eventT,
  1786. // params: {
  1787. // itemName: itemName,
  1788. // }
  1789. // })
  1790. // }
  1791. // }
  1792. WXSdk.Start = function (stageId) {
  1793. if (!Main_1.Main.IsWx)
  1794. return;
  1795. Laya.Browser.window.wx.aldStage.onStart({
  1796. stageId: stageId,
  1797. stageName: "第" + stageId + "关",
  1798. });
  1799. };
  1800. WXSdk.Game_Share = function (callback, channel) {
  1801. if (callback === void 0) { callback = null; }
  1802. if (channel === void 0) { channel = ""; }
  1803. if (!Main_1.Main.IsWx) {
  1804. return;
  1805. }
  1806. var url;
  1807. var title;
  1808. url = UserModel_1.default.Instance.CurModel.shareimage;
  1809. title = UserModel_1.default.Instance.CurModel.sharetitle;
  1810. console.log(url + " " + title);
  1811. if (channel != null) {
  1812. // WeiXinSDK.AldEvent("用户分享");
  1813. }
  1814. var t; // = UserModel.Get_Instance.CurModel.HuoQu_ServerTime;
  1815. var path = "";
  1816. Laya.Browser.window.wx.aldShareAppMessage({
  1817. title: title,
  1818. imageUrl: url,
  1819. query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + "other" + "_" + t + "_" + Math.floor(9999 * Math.random()).toString(),
  1820. });
  1821. ShareModule_1.ShareModule.GoShare(callback);
  1822. };
  1823. WXSdk.Lodining = false;
  1824. return WXSdk;
  1825. }());
  1826. exports.WXSdk = WXSdk;
  1827. },{"../Main":2,"../game_logic/SettingController":12,"../game_logic/ViewManager":13,"./ShareModule":18,"./UserModel":19}],21:[function(require,module,exports){
  1828. "use strict";
  1829. Object.defineProperty(exports, "__esModule", { value: true });
  1830. var Dictionary = /** @class */ (function () {
  1831. function Dictionary() {
  1832. this._container = {};
  1833. this._length = 0;
  1834. }
  1835. Object.defineProperty(Dictionary.prototype, "container", {
  1836. get: function () {
  1837. return this._container;
  1838. },
  1839. enumerable: true,
  1840. configurable: true
  1841. });
  1842. Object.defineProperty(Dictionary.prototype, "size", {
  1843. //获取字典长度
  1844. get: function () {
  1845. return this._length;
  1846. },
  1847. enumerable: true,
  1848. configurable: true
  1849. });
  1850. //添加
  1851. Dictionary.prototype.set = function (key, value) {
  1852. if (!this._container.hasOwnProperty(key)) {
  1853. this._length++;
  1854. }
  1855. this._container[key] = value;
  1856. };
  1857. //删除
  1858. Dictionary.prototype.delete = function (key) {
  1859. if (this._container.hasOwnProperty(key)) {
  1860. delete this._container[key];
  1861. this._length--;
  1862. }
  1863. };
  1864. //查找
  1865. Dictionary.prototype.has = function (key) {
  1866. return this._container.hasOwnProperty(key) ? true : false;
  1867. };
  1868. //获取
  1869. Dictionary.prototype.get = function (key) {
  1870. if (this._container.hasOwnProperty(key)) {
  1871. return this._container[key];
  1872. }
  1873. else {
  1874. return undefined;
  1875. }
  1876. };
  1877. //清空
  1878. Dictionary.prototype.clear = function () {
  1879. this._container = {};
  1880. this._length = 0;
  1881. };
  1882. return Dictionary;
  1883. }());
  1884. exports.default = Dictionary;
  1885. },{}],22:[function(require,module,exports){
  1886. "use strict";
  1887. Object.defineProperty(exports, "__esModule", { value: true });
  1888. var Game_Tool = /** @class */ (function () {
  1889. function Game_Tool() {
  1890. }
  1891. Game_Tool.GetObjKey = function (obj) {
  1892. if (obj == null)
  1893. return null;
  1894. for (var key in obj) {
  1895. if (obj.hasOwnProperty(key)) {
  1896. return key;
  1897. }
  1898. }
  1899. };
  1900. //返回一个随机整数[min,max]
  1901. Game_Tool.randomInt = function (min, max) {
  1902. return parseInt(Math.random() * (max - min + 1) + min);
  1903. };
  1904. //p1 左向量 p2
  1905. Game_Tool.getAng = function (xx, yy, obl) {
  1906. return 180 / Math.PI * this.getRad(xx, yy, obl);
  1907. };
  1908. //返回角度
  1909. Game_Tool.getRad = function (xx, yy, obl) {
  1910. // 方法一:asin()
  1911. // var rad:Number = xx > 0 ? ((Math.PI * 3)/2 + Math.asin(-yy/obl)) : (Math.PI / 2 - Math.asin(-yy/obl));
  1912. // 方法二:acos()
  1913. var rad = yy < 0 ? Math.acos(xx / obl) : (Math.PI * 2 - Math.acos(xx / obl));
  1914. // 方法三:atan2()
  1915. // var rad:Number = yy < 0 ? Math.atan2(-yy, xx) : Math.PI * 2 + Math.atan2(-yy, xx);
  1916. return rad;
  1917. };
  1918. Game_Tool.getM_Vector = function (v1, v2) {
  1919. var temp = new Laya.Vector3();
  1920. Laya.Vector3.add(v1, v2, temp);
  1921. return new Laya.Vector3(temp.x * 0.5, temp.y * 0.5, temp.z * 0.5);
  1922. };
  1923. Game_Tool.getReflectAng = function (dir) {
  1924. var xx = Math.abs(dir.x);
  1925. var zz = Math.abs(dir.z);
  1926. var obl = Math.sqrt(Math.pow(dir.x, 2) + Math.pow(dir.z, 2));
  1927. return 90 - 180 / Math.PI * Math.acos(xx / obl);
  1928. };
  1929. Game_Tool.random_1to1 = function () {
  1930. var iszheng = Math.random() > 0.5 ? -1 : 1;
  1931. return Math.random() * iszheng;
  1932. };
  1933. Game_Tool.get64Encode = function (str) {
  1934. var c1, c2, c3;
  1935. var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  1936. var i = 0, len = str.length, string = '';
  1937. while (i < len) {
  1938. c1 = str.charCodeAt(i++) & 0xff;
  1939. if (i == len) {
  1940. string += base64EncodeChars.charAt(c1 >> 2);
  1941. string += base64EncodeChars.charAt((c1 & 0x3) << 4);
  1942. string += "==";
  1943. break;
  1944. }
  1945. c2 = str.charCodeAt(i++);
  1946. if (i == len) {
  1947. string += base64EncodeChars.charAt(c1 >> 2);
  1948. string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
  1949. string += base64EncodeChars.charAt((c2 & 0xF) << 2);
  1950. string += "=";
  1951. break;
  1952. }
  1953. c3 = str.charCodeAt(i++);
  1954. string += base64EncodeChars.charAt(c1 >> 2);
  1955. string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
  1956. string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
  1957. string += base64EncodeChars.charAt(c3 & 0x3F);
  1958. }
  1959. return string;
  1960. };
  1961. // public static SetHuTuiList(list:Laya.List,data?,scrol:number=1,type:number=0){ //scrol 1:竖的 2横的
  1962. // var arr=data?data:FYHD_Sdk.pushData;
  1963. // list.selectEnable = false;
  1964. // scrol==1?list.vScrollBarSkin = "":list.hScrollBarSkin = "";
  1965. // list.renderHandler = Laya.Handler.create(this, this.updateItem, [type], false);
  1966. // list.array = arr;
  1967. // list.refresh();
  1968. // }
  1969. // private static updateItem(type,cell: Laya.Box, index: number){
  1970. // var aditem=cell.getComponent(HuiTuiItem)as HuiTuiItem;
  1971. // aditem.Refresh(type);
  1972. // }
  1973. // public static makeRandomArr(arrList,num){
  1974. // if(num>arrList.length){
  1975. // return;
  1976. // }
  1977. // var tempArr=arrList.slice(0);
  1978. // var newArrList=[];
  1979. // for(var i=0;i<num;i++){
  1980. // var random=Math.floor(Math.random()*(tempArr.length-1));
  1981. // var arr=tempArr[random];
  1982. // tempArr.splice(random, 1);
  1983. // newArrList.push(arr);
  1984. // }
  1985. // return newArrList;
  1986. // }
  1987. // public static CopyArr(o):any{
  1988. // var arr=[];
  1989. // for (let index = 0; index < o.length; index++) {
  1990. // const element = o[index];
  1991. // arr.push(element);
  1992. // }
  1993. // return arr;
  1994. // }
  1995. // public static ShowQianDao(): boolean {
  1996. // let todayZero = new Date(UserModel.Instance.CurModel.ServerTime * 1000);
  1997. // todayZero.setHours(0, 0, 0, 0);
  1998. // if(!PlayerManager.Instance.sign)return true;
  1999. // var lastTime = Number(PlayerManager.Instance.sign["sign_time"]) * 1000;
  2000. // let lastSignTime = new Date(lastTime);
  2001. // if (lastTime == 0) {
  2002. // return true;
  2003. // }
  2004. // if (lastSignTime.valueOf() < todayZero.valueOf()) {
  2005. // return true;
  2006. // }
  2007. // return false;
  2008. // }
  2009. Game_Tool.CreateText = function (content) {
  2010. var curText = new Laya.Text;
  2011. curText.width = 300;
  2012. curText.height = 50;
  2013. curText.align = "center";
  2014. curText.valign = "middle";
  2015. curText.font = "Microsoft YaHei";
  2016. curText.fontSize = 35;
  2017. curText.color = "#ff8e00";
  2018. curText.bold = true;
  2019. curText.font = "Microsoft YaHei";
  2020. curText.text = content;
  2021. curText.x = 60;
  2022. curText.y = 10;
  2023. Laya.stage.addChild(curText);
  2024. console.log(curText);
  2025. var tween = Laya.Tween.to(parent, { y: curText.y - 200 }, 1000, Laya.Ease.expoInOut, Laya.Handler.create(this, function () {
  2026. tween.clear();
  2027. curText.destroy();
  2028. }), 100);
  2029. };
  2030. return Game_Tool;
  2031. }());
  2032. exports.default = Game_Tool;
  2033. },{}],23:[function(require,module,exports){
  2034. "use strict";
  2035. Object.defineProperty(exports, "__esModule", { value: true });
  2036. var Tween = Laya.Tween;
  2037. var SettingController_1 = require("../../game_logic/SettingController");
  2038. var ImageRunTime = /** @class */ (function (_super) {
  2039. __extends(ImageRunTime, _super);
  2040. function ImageRunTime() {
  2041. var _this = _super.call(this) || this;
  2042. _this.scaleTime = 80;
  2043. _this.clickId = false;
  2044. //设置组件的中心点
  2045. _this.anchorX = _this.anchorY = 0.5;
  2046. _this.on(Laya.Event.MOUSE_DOWN, _this, _this.scaleSmall);
  2047. _this.on(Laya.Event.MOUSE_UP, _this, _this.scaleBig);
  2048. _this.on(Laya.Event.MOUSE_OUT, _this, _this.scaleBig);
  2049. return _this;
  2050. }
  2051. ImageRunTime.prototype.scaleBig = function (e) {
  2052. //变大还原的缓动效果
  2053. if (!this.clickId)
  2054. return;
  2055. this.clickId = false;
  2056. this.bigTween = Tween.to(this, { scaleX: 1, scaleY: 1 }, this.scaleTime);
  2057. if (this._mclickHandler) {
  2058. this._mclickHandler();
  2059. }
  2060. };
  2061. ImageRunTime.prototype.scaleSmall = function (e) {
  2062. //缩小至0.8的缓动效果
  2063. SettingController_1.SettingController.Instance._Click();
  2064. this.clickId = true;
  2065. this.SmallTween = Tween.to(this, { scaleX: 0.8, scaleY: 0.8 }, this.scaleTime);
  2066. };
  2067. ImageRunTime.prototype.ClearRunTime = function () {
  2068. if (this.bigTween) {
  2069. this.bigTween.clear();
  2070. }
  2071. if (this.SmallTween) {
  2072. this.SmallTween.clear();
  2073. }
  2074. this.off(Laya.Event.MOUSE_DOWN, this, this.scaleSmall);
  2075. this.off(Laya.Event.MOUSE_UP, this, this.scaleBig);
  2076. this.off(Laya.Event.MOUSE_OUT, this, this.scaleBig);
  2077. this._mclickHandler = null;
  2078. };
  2079. return ImageRunTime;
  2080. }(Laya.Image));
  2081. exports.default = ImageRunTime;
  2082. },{"../../game_logic/SettingController":12}],24:[function(require,module,exports){
  2083. "use strict";
  2084. Object.defineProperty(exports, "__esModule", { value: true });
  2085. var layaMaxUI_1 = require("../ui/layaMaxUI");
  2086. var EventManager_1 = require("../game_module/EventManager");
  2087. var RoleController_1 = require("../game_logic/RoleController");
  2088. var Vector3 = Laya.Vector3;
  2089. var GameController_1 = require("../game_logic/GameController");
  2090. var game_ui = /** @class */ (function (_super) {
  2091. __extends(game_ui, _super);
  2092. function game_ui() {
  2093. var _this = _super.call(this) || this;
  2094. _this.isdown = false;
  2095. _this.isexceed = false;
  2096. _this.resizeHander();
  2097. EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander);
  2098. return _this;
  2099. }
  2100. game_ui.prototype.resizeHander = function () {
  2101. this.height = Laya.stage.height;
  2102. };
  2103. game_ui.prototype.OnShow = function (data) {
  2104. this.UiEventHandler();
  2105. };
  2106. game_ui.prototype.UiEventHandler = function () {
  2107. this.on(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
  2108. this.on(Laya.Event.MOUSE_UP, this, this.OnClickUp);
  2109. this.on(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
  2110. };
  2111. game_ui.prototype.OnClickDown = function (e) {
  2112. if (e.target instanceof Laya.UIComponent)
  2113. return;
  2114. if (!GameController_1.GameController.Instance.gameStart || GameController_1.GameController.Instance.gameover)
  2115. return;
  2116. this.isdown = true;
  2117. this.on(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
  2118. this.curMousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
  2119. this.startPos = this.curMousePos.clone();
  2120. this.MouseD();
  2121. };
  2122. game_ui.prototype.OnClickUp = function () {
  2123. if (!this.isdown)
  2124. return;
  2125. if (!GameController_1.GameController.Instance.gameStart || GameController_1.GameController.Instance.gameover)
  2126. return;
  2127. this.isdown = false;
  2128. this.off(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
  2129. this.endPos = this.curMousePos.clone();
  2130. this.MouseU();
  2131. };
  2132. game_ui.prototype.OnSlider = function () {
  2133. var MousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
  2134. var offestX = MousePos.x - this.curMousePos.x;
  2135. if (offestX > 0)
  2136. offestX = offestX < 5 ? offestX : 5;
  2137. if (offestX < 0)
  2138. offestX = offestX > -5 ? offestX : -5;
  2139. var rotateDir = new Vector3(0, -offestX * 0.01, 0);
  2140. RoleController_1.RoleController.Instance.RoleRotation(rotateDir);
  2141. this.curMousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
  2142. ;
  2143. };
  2144. game_ui.prototype.OnClose = function () {
  2145. EventManager_1.EventManager.off(Laya.Event.RESIZE, this, this.resizeHander);
  2146. this.off(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
  2147. this.off(Laya.Event.MOUSE_UP, this, this.OnClickUp);
  2148. this.off(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
  2149. };
  2150. game_ui.prototype.MouseD = function () {
  2151. var _this = this;
  2152. this.isexceed = false;
  2153. Laya.timer.once(500, this, function () {
  2154. _this.isexceed = true;
  2155. });
  2156. };
  2157. game_ui.prototype.MouseU = function () {
  2158. var dis = Vector3.distance(this.startPos, this.endPos);
  2159. if (dis > 30 || this.isexceed) {
  2160. return;
  2161. }
  2162. else {
  2163. GameController_1.GameController.Instance.Hit();
  2164. }
  2165. };
  2166. return game_ui;
  2167. }(layaMaxUI_1.ui.game_uiUI));
  2168. exports.game_ui = game_ui;
  2169. },{"../game_logic/GameController":5,"../game_logic/RoleController":11,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],25:[function(require,module,exports){
  2170. "use strict";
  2171. Object.defineProperty(exports, "__esModule", { value: true });
  2172. var layaMaxUI_1 = require("../ui/layaMaxUI");
  2173. var EventManager_1 = require("../game_module/EventManager");
  2174. var ViewManager_1 = require("../game_logic/ViewManager");
  2175. var GameController_1 = require("../game_logic/GameController");
  2176. var main_ui = /** @class */ (function (_super) {
  2177. __extends(main_ui, _super);
  2178. function main_ui() {
  2179. var _this = _super.call(this) || this;
  2180. _this.resizeHander();
  2181. EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander);
  2182. return _this;
  2183. }
  2184. main_ui.prototype.OnShow = function (data) {
  2185. this.ButtonClickHandle();
  2186. };
  2187. main_ui.prototype.resizeHander = function () {
  2188. this.height = Laya.stage.height;
  2189. };
  2190. main_ui.prototype.ButtonClickHandle = function () {
  2191. this.start_btn._mclickHandler = function () {
  2192. ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.game_ui);
  2193. GameController_1.GameController.Instance.GameStart();
  2194. };
  2195. };
  2196. main_ui.prototype.OnClose = function () {
  2197. this.start_btn.ClearRunTime();
  2198. };
  2199. return main_ui;
  2200. }(layaMaxUI_1.ui.main_uiUI));
  2201. exports.main_ui = main_ui;
  2202. },{"../game_logic/GameController":5,"../game_logic/ViewManager":13,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],26:[function(require,module,exports){
  2203. "use strict";
  2204. Object.defineProperty(exports, "__esModule", { value: true });
  2205. var Scene = Laya.Scene;
  2206. var REG = Laya.ClassUtils.regClass;
  2207. var ui;
  2208. (function (ui) {
  2209. var game_uiUI = /** @class */ (function (_super) {
  2210. __extends(game_uiUI, _super);
  2211. function game_uiUI() {
  2212. return _super.call(this) || this;
  2213. }
  2214. game_uiUI.prototype.createChildren = function () {
  2215. _super.prototype.createChildren.call(this);
  2216. this.createView(game_uiUI.uiView);
  2217. };
  2218. game_uiUI.uiView = { "type": "Scene", "props": { "zOrder": 1, "width": 720, "height": 1280 }, "compId": 2, "loadList": [], "loadList3D": [] };
  2219. return game_uiUI;
  2220. }(Scene));
  2221. ui.game_uiUI = game_uiUI;
  2222. REG("ui.game_uiUI", game_uiUI);
  2223. var main_uiUI = /** @class */ (function (_super) {
  2224. __extends(main_uiUI, _super);
  2225. function main_uiUI() {
  2226. return _super.call(this) || this;
  2227. }
  2228. main_uiUI.prototype.createChildren = function () {
  2229. _super.prototype.createChildren.call(this);
  2230. this.createView(main_uiUI.uiView);
  2231. };
  2232. 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": [] };
  2233. return main_uiUI;
  2234. }(Scene));
  2235. ui.main_uiUI = main_uiUI;
  2236. REG("ui.main_uiUI", main_uiUI);
  2237. })(ui = exports.ui || (exports.ui = {}));
  2238. },{}]},{},[2])
  2239. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L0xheWFCb3gvTGF5YTIuMS4wYmVhdC9MYXlhQWlySURFX2JldGEvcmVzb3VyY2VzL2FwcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwic3JjL0dhbWVDb25maWcudHMiLCJzcmMvTWFpbi50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldC50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldENvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9HYW1lQ29udHJvbGxlci50cyIsInNyYy9nYW1lX2xvZ2ljL0dhbWVTY2VuZUNvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Nb3N0ZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9QbGF5ZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Qb29sX01hbmFnZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Sb2xlLnRzIiwic3JjL2dhbWVfbG9naWMvUm9sZUNvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9TZXR0aW5nQ29udHJvbGxlci50cyIsInNyYy9nYW1lX2xvZ2ljL1ZpZXdNYW5hZ2VyLnRzIiwic3JjL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlci50cyIsInNyYy9nYW1lX21vZHVsZS9GWUhEX1Nkay50cyIsInNyYy9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZC50cyIsInNyYy9nYW1lX21vZHVsZS9SZXNvdXJjZUxvYWQudHMiLCJzcmMvZ2FtZV9tb2R1bGUvU2hhcmVNb2R1bGUudHMiLCJzcmMvZ2FtZV9tb2R1bGUvVXNlck1vZGVsLnRzIiwic3JjL2dhbWVfbW9kdWxlL1dYU2RrLnRzIiwic3JjL2dhbWVfdG9vbC9EaWN0aW9uYXJ5LnRzIiwic3JjL2dhbWVfdG9vbC9HYW1lX1Rvb2wudHMiLCJzcmMvZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWUudHMiLCJzcmMvZ2FtZV91aS9nYW1lX3VpLnRzIiwic3JjL2dhbWVfdWkvbWFpbl91aS50cyIsInNyYy91aS9sYXlhTWF4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a0NBQWMsR0FBZDtZQUNJLGlCQUFNLGNBQWMsV0FBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFMYyxnQkFBTSxHQUFNLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyw4QkFBOEIsRUFBQyxTQUFTLEVBQUMsd0NBQXdDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxHQUFHLEVBQUMsU0FBUyxFQUFDLEdBQUcsRUFBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLDhCQUE4QixDQUFDLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxDQUFDO1FBTXJZLGdCQUFDO0tBUkQsQUFRQyxDQVI4QixLQUFLLEdBUW5DO0lBUlksWUFBUyxZQVFyQixDQUFBO0lBQ0QsR0FBRyxDQUFDLGNBQWMsRUFBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyxDQUFDLEVBcEJhLEVBQUUsR0FBRixVQUFFLEtBQUYsVUFBRSxRQW9CZiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cclxuaW1wb3J0IEJ1dHRvblJ1blRpbWUgZnJvbSBcIi4vZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWVcIlxyXG4vKlxyXG4qIOa4uOaIj+WIneWni+WMlumFjee9rjtcclxuKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZUNvbmZpZ3tcclxuICAgIHN0YXRpYyB3aWR0aDpudW1iZXI9NzIwO1xyXG4gICAgc3RhdGljIGhlaWdodDpudW1iZXI9MTI4MDtcclxuICAgIHN0YXRpYyBzY2FsZU1vZGU6c3RyaW5nPVwiZml4ZWR3aWR0aFwiO1xyXG4gICAgc3RhdGljIHNjcmVlbk1vZGU6c3RyaW5nPVwibm9uZVwiO1xyXG4gICAgc3RhdGljIGFsaWduVjpzdHJpbmc9XCJtaWRkbGVcIjtcclxuICAgIHN0YXRpYyBhbGlnbkg6c3RyaW5nPVwiY2VudGVyXCI7XHJcbiAgICBzdGF0aWMgc3RhcnRTY2VuZTphbnk9XCJnYW1lX3VpLnNjZW5lXCI7XHJcbiAgICBzdGF0aWMgc2NlbmVSb290OnN0cmluZz1cIlwiO1xyXG4gICAgc3RhdGljIGRlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgc3RhdDpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHBoeXNpY3NEZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIGV4cG9ydFNjZW5lVG9Kc29uOmJvb2xlYW49dHJ1ZTtcclxuICAgIGNvbnN0cnVjdG9yKCl7fVxyXG4gICAgc3RhdGljIGluaXQoKXtcclxuICAgICAgICB2YXIgcmVnOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcclxuICAgICAgICByZWcoXCJnYW1lX3VpL1J1blRpbWVTY3JpcHQvQnV0dG9uUnVuVGltZS50c1wiLEJ1dHRvblJ1blRpbWUpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IFZpZXdNYW5hZ2VyLCB7IFZpZXdUeXBlIH0gZnJvbSBcIi4vZ2FtZV9sb2dpYy9WaWV3TWFuYWdlclwiO1xyXG5pbXBvcnQgUmVzb3VyY2VMb2FkIGZyb20gXCIuL2dhbWVfbW9kdWxlL1Jlc291cmNlTG9hZFwiO1xyXG5pbXBvcnQgR2FtZURlZmluZWQgZnJvbSBcIi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuaW1wb3J0IHsgV1hTZGsgfSBmcm9tIFwiLi9nYW1lX21vZHVsZS9XWFNka1wiO1xyXG5pbXBvcnQgeyBGWUhEX1NkayB9IGZyb20gXCIuL2dhbWVfbW9kdWxlL0ZZSERfU2RrXCI7XHJcbmltcG9ydCBBc3NldENvbnRyb2xsZXIgZnJvbSBcIi4vZ2FtZV9sb2dpYy9Bc3NldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vZ2FtZV9sb2dpYy9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBjbGFzcyBNYWluIHtcclxuXHJcblx0cHVibGljIHN0YXRpYyBub3dyYXRpbzogbnVtYmVyO1xyXG5cdHB1YmxpYyBzdGF0aWMgSXNXeDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHB1YmxpYyBzdGF0aWMgVlJFID0gXCIxLjAuMFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQ0ZHID0gXCJDRkdcIjtcclxuXHRwdWJsaWMgc3RhdGljIHd4VmFsdWUgPSBcIlwiO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0Ly/moLnmja5JREXorr7nva7liJ3lp4vljJblvJXmk45cdFx0XHJcblx0XHRpZiAod2luZG93W1wiTGF5YTNEXCJdKSBMYXlhM0QuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCk7XHJcblx0XHRlbHNlIExheWEuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCwgTGF5YVtcIldlYkdMXCJdKTtcclxuXHRcdExheWFbXCJQaHlzaWNzXCJdICYmIExheWFbXCJQaHlzaWNzXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YVtcIkRlYnVnUGFuZWxcIl0gJiYgTGF5YVtcIkRlYnVnUGFuZWxcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhLnN0YWdlLnNjYWxlTW9kZSA9IEdhbWVDb25maWcuc2NhbGVNb2RlO1xyXG5cdFx0TGF5YS5zdGFnZS5zY3JlZW5Nb2RlID0gR2FtZUNvbmZpZy5zY3JlZW5Nb2RlO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHRcdE1haW4ubm93cmF0aW8gPSBMYXlhLnN0YWdlLndpZHRoIC8gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcblxyXG5cdFx0TWFpbi5Jc1d4ID0gTGF5YS5Ccm93c2VyLm9uV2VpWGluO1xyXG5cclxuXHRcdGlmIChNYWluLklzV3gpIHtcclxuXHRcdFx0V1hTZGsuSW5zdGFuY2UuaW5pdCgoc2hhcmVUaWNrZXQ6IHN0cmluZywgc2hhcmVpZDogc3RyaW5nLCBzY2VuZTogc3RyaW5nLCBhcHBpZDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vblNob3dIYW5kbGVyKHNoYXJlVGlja2V0LCBzaGFyZWlkLCBzY2VuZSwgYXBwaWQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0RllIRF9TZGsuSW5pdFNkaygpO1xyXG5cdFx0fVxyXG5cdFx0Ly/mv4DmtLvotYTmupDniYjmnKzmjqfliLbvvIx2ZXJzaW9uLmpzb27nlLFJREXlj5HluIPlip/og73oh6rliqjnlJ/miJDvvIzlpoLmnpzmsqHmnInkuZ/kuI3lvbHlk43lkI7nu63mtYHnqItcclxuXHRcdExheWEuUmVzb3VyY2VWZXJzaW9uLmVuYWJsZShcInZlcnNpb24uanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25WZXJzaW9uTG9hZGVkKSwgTGF5YS5SZXNvdXJjZVZlcnNpb24uRklMRU5BTUVfVkVSU0lPTik7XHJcblx0XHR0aGlzLklzTmVlZFVwZGF0ZSgpO1xyXG5cdH1cclxuXHRwcml2YXRlIElzTmVlZFVwZGF0ZSgpIHtcclxuXHRcdGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcblx0XHRjb25zdCB1cGRhdGVNYW5hZ2VyID0gTGF5YS5Ccm93c2VyLndpbmRvdy53eC5nZXRVcGRhdGVNYW5hZ2VyKCk7XHJcblx0XHR1cGRhdGVNYW5hZ2VyLm9uQ2hlY2tGb3JVcGRhdGUoZnVuY3Rpb24gKHJlcykge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIuacgOaWsOeJiOacrDpcIiArIHJlcy5oYXNVcGRhdGUpO1xyXG5cdFx0fVxyXG5cdFx0KTtcclxuXHRcdHVwZGF0ZU1hbmFnZXIub25VcGRhdGVSZWFkeShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd01vZGFsKHtcclxuXHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHR0aXRsZTogJ+abtOaWsOaPkOekuicsXHJcblx0XHRcdFx0Y29udGVudDogJ+aWsOeJiOacrOW3sue7j+WHhuWkh+Wlve+8jOaYr+WQpumHjeWQr+W6lOeUqO+8nycsXHJcblx0XHRcdFx0c3VjY2VzcyhyZXMpIHtcclxuXHRcdFx0XHRcdHVwZGF0ZU1hbmFnZXIuYXBwbHlVcGRhdGUoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZhaWwocmVzPykge1xyXG5cdFx0XHRcdFx0dXBkYXRlTWFuYWdlci5hcHBseVVwZGF0ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgb25TaG93SGFuZGxlcihzaGFyZVRpY2tldDogc3RyaW5nLCBzaGFyZUlkOiBzdHJpbmcsIHNjZW5lOiBzdHJpbmcsIGFwcGlkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnNvbGUubG9nKFwiW0xPR106IOWIhuS6q+i/m+WFpTogc2hhcmVUaWNrZXQ6XCIsIHNoYXJlVGlja2V0LCBcIiwgb3BlbklkPVwiLCBzaGFyZUlkLCBcIiwgc2NlbmU9XCIsIHNjZW5lKTtcclxuXHRcdC8vIGlmICghTWFpbi5tU2hhcmVQZW9wbGVTY2VuZSkge1xyXG5cdFx0Ly8gXHRNYWluLm1TaGFyZVBlb3BsZVNjZW5lID0gc2NlbmU7XHJcblx0XHQvLyB9XHJcblx0XHQvLyBpZiAoIU1haW4uYXBwaWQpIHtcclxuXHRcdC8vIFx0TWFpbi5hcHBpZCA9IGFwcGlkO1xyXG5cdFx0Ly8gfVxyXG5cdFx0aWYgKHNjZW5lICE9IG51bGwgJiYgc2NlbmUgIT0gXCJcIikge1xyXG5cdFx0XHRXWFNkay5JbnN0YW5jZS5TaGFyZVNjZW5lID0gc2NlbmU7XHJcblx0XHR9XHJcblx0XHRpZiAoc2hhcmVJZCAhPSBudWxsICYmIHNoYXJlSWQgIT0gXCJcIikge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIuiuvue9ruWIhuS6q2lkXCIgKyBzaGFyZUlkKTtcclxuXHRcdFx0V1hTZGsuSW5zdGFuY2Uuc2V0U2hhcmVJZChzaGFyZUlkKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdFx0TGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdG9uQ29uZmlnTG9hZGVkKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5Mb2FkVUkoKTtcclxuXHR9XHJcblx0TG9hZFVJKCkge1xyXG5cdFx0Vmlld01hbmFnZXIuSW5zdGFuY2UuT3BlblZpZXcoVmlld1R5cGUubWFpbl91aSk7XHJcblx0XHRHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLkNyZWF0ZVNjZW5lKCk7XHJcblx0XHRcdC8vdGhpcy50ZXN0KCk7XHJcblx0fVxyXG5cclxuXHR0ZXN0KCkge1xyXG5cdFx0dmFyIHYxPW5ldyBMYXlhLlZlY3RvcjMoLTMsMCwxKTtcclxuXHRcdHZhciB2Mj1uZXcgTGF5YS5WZWN0b3IzKDAsMCwtMSk7XHJcblx0XHR2YXIgdjM9bmV3IExheWEuVmVjdG9yMygwLDAsMCk7XHJcblx0XHRMYXlhLlZlY3RvcjMuY3Jvc3ModjEsdjIsdjMpO1xyXG5cdFx0Y29uc29sZS5sb2codjMpO1xyXG5cdH1cclxufVxyXG4vL+a/gOa0u+WQr+WKqOexu1xyXG5uZXcgTWFpbigpO1xyXG4iLCJcclxuaW1wb3J0IEdhbWVEZWZpbmVkLCB7IENoZWNrVHlwZSwgQnVsbGV0VHlwZSB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgVmVjdG9yMyA9IExheWEuVmVjdG9yMztcclxuaW1wb3J0IFJheSA9IExheWEuUmF5O1xyXG5pbXBvcnQgSGl0UmVzdWx0ID0gTGF5YS5IaXRSZXN1bHQ7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEJ1bGxldENvbnRyb2xsZXIgZnJvbSBcIi4vQnVsbGV0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgVHJhbnNmb3JtM0QgPSBMYXlhLlRyYW5zZm9ybTNEO1xyXG5pbXBvcnQgR2FtZV9Ub29sIGZyb20gXCIuLi9nYW1lX3Rvb2wvR2FtZV9Ub29sXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuL1JvbGVcIjtcclxuZXhwb3J0IGNsYXNzIEJ1bGxldCBleHRlbmRzIExheWEuU2NyaXB0M0Qge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90cmFuc2Zvcm06IFRyYW5zZm9ybTNEO1xyXG4gICAgcHJpdmF0ZSBzZWxmOiBTcHJpdGUzRDtcclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxmID0gdGhpcy5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm0gPSB0aGlzLnNlbGYudHJhbnNmb3JtO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX2NvcnNzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb3J3OiBWZWN0b3IzO1xyXG4gICAgcHJpdmF0ZSBfcmF5OiBSYXk7XHJcbiAgICBwcml2YXRlIF9oaXQ6IEhpdFJlc3VsdDtcclxuICAgIHByaXZhdGUgZ286IFNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBnb1M6IEJ1bGxldDtcclxuICAgIHByaXZhdGUgX2NvcnNzOiBWZWN0b3IzO1xyXG4gICAgQ3JlYXRlUmF5KHBvczogVmVjdG9yMywgX3JvdGF0aW9uLCBfdHlwZT8pIHtcclxuICAgICAgICBpZiAoIXRoaXMuZ28pIHtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoX3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQnVsbGV0VHlwZS5CdWxsZXRHOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ28gPSBCdWxsZXRDb250cm9sbGVyLkluc3RhbmNlLkNyZWF0ZUJ1bGxldChHYW1lRGVmaW5lZC5wb29sTmFtZS5idWxsZXRHKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEJ1bGxldFR5cGUuQnVsbGV0UjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoR2FtZURlZmluZWQucG9vbE5hbWUuQnVsbGV0Uik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGdzID0gdGhpcy5nby5nZXRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICAgICAgaWYgKCFncykgdGhpcy5nb1MgPSB0aGlzLmdvLmFkZENvbXBvbmVudChCdWxsZXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucG9zaXRpb24gPSBwb3MuY2xvbmUoKTtcclxuICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5yb3RhdGlvbkV1bGVyID0gX3JvdGF0aW9uO1xyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnJvdGF0ZSA9IF9yb3RhdGlvbjtcclxuICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoLXRoaXMuZm9ydy54LCAtdGhpcy5mb3J3LnksIC10aGlzLmZvcncueik7XHJcbiAgICAgICAgdmFyIHRlbXAgPSB0aGlzLmZvcncuY2xvbmUoKTtcclxuICAgICAgICBWZWN0b3IzLm5vcm1hbGl6ZSh0ZW1wLCB0ZW1wKTtcclxuICAgICAgICBwb3MueCA9IHBvcy54ICsgdGVtcC54ICogMC4wMTtcclxuICAgICAgICBwb3MueSA9IHBvcy55ICsgdGVtcC55ICogMC4wMTtcclxuICAgICAgICBwb3MueiA9IHBvcy56ICsgdGVtcC56ICogMC4wMTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5ID0gbmV3IFJheShwb3MsIHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hpdCA9IG5ldyBIaXRSZXN1bHQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkub3JpZ2luID0gcG9zO1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkuZGlyZWN0aW9uID0gdGhpcy5mb3J3O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGlzUyA9IEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5waHlzaWNzU2ltdWxhdGlvbi5yYXlDYXN0KHRoaXMuX3JheSwgdGhpcy5faGl0KTtcclxuICAgICAgICBpZiAoaXNTKSB7XHJcbiAgICAgICAgICAgIHZhciBwb2kgPSB0aGlzLl9oaXQucG9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBkaXMgPSBWZWN0b3IzLmRpc3RhbmNlKHBvcywgcG9pKTtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSBkaXM7XHJcbiAgICAgICAgICAgIHZhciBvdGhlciA9IHRoaXMuX2hpdC5jb2xsaWRlci5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgaWYgKG90aGVyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCBvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBvcyA9IHBvcztcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFJvdGF0aW9uID0gX3JvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZXRUYXIob3RoZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgICAgIHZhciBub3IgPSB0aGlzLl9oaXQubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgbm9yLnggPSBNYXRoLmFicyhub3IueCkgPCAwLjAwMSA/IDAgOiBub3IueDtcclxuICAgICAgICAgICAgICAgIG5vci55ID0gTWF0aC5hYnMobm9yLnkpIDwgMC4wMDEgPyAwIDogbm9yLnk7XHJcbiAgICAgICAgICAgICAgICBub3IueiA9IE1hdGguYWJzKG5vci56KSA8IDAuMDAxID8gMCA6IG5vci56O1xyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgVmVjdG9yMy5jcm9zcyh0aGlzLmZvcncsIG5vciwgdGhpcy5fY29yc3MpOy8v5aSn5LqOMOWcqOW3puaWuSDlsI/kuo4w5Zyo5Y+z5pa5XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBhID0gR2FtZV9Ub29sLmdldFJlZmxlY3RBbmcodGhpcy5mb3J3KTtcclxuICAgICAgICAgICAgICAgIC8vIExheWEuUXVhdGVybmlvbi5cclxuICAgICAgICAgICAgICAgIHZhciBhbmcgPSB0aGlzLmdvLl90cmFuc2Zvcm0ucm90YXRpb25FdWxlci5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29yc3MueSA+PSAwID8gYW5nLnkgPSBhbmcueSArIDIgKiBhIDogYW5nLnkgPSBhbmcueSAtIDIgKiBhO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHZhciBhYj1uZXcgTGF5YS5RdWF0ZXJuaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBMYXlhLlF1YXRlcm5pb24uY3JlYXRlRnJvbUF4aXNBbmdsZSh0aGlzLmZvcncsLWEsYWIpXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdvUy5DcmVhdGVSYXkocG9pLCBhYiwgQnVsbGV0VHlwZS5CdWxsZXRHKTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1MuQ3JlYXRlUmF5KHBvaSwgYW5nLCBfdHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlJlbW92ZVRhcigpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IDUwO1xyXG4gICAgICAgICAgICB0aGlzLmdvUy5TZXROZXh0Tm90QWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIFNldE5leHROb3RBY3RpdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ28pIHtcclxuICAgICAgICAgICAgdGhpcy5nby5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ29TKSB0aGlzLmdvUy5TZXROZXh0Tm90QWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIEhpdFRhcjogU3ByaXRlM0Q7XHJcbiAgICBwcml2YXRlIFJlbW92ZVRhcigpIHtcclxuICAgICAgICBpZiAodGhpcy5IaXRUYXIpIHtcclxuICAgICAgICAgICAgdGhpcy5IaXRUYXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgU2V0VGFyKHRhcikge1xyXG4gICAgICAgIHRoaXMuSGl0VGFyID0gdGFyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHRlbXBQb3M6IFZlY3RvcjM7XHJcbiAgICBwcml2YXRlIHRlbXBSb3RhdGlvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBIaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuSGl0VGFyKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkhpdFRhci5sYXllciA9PSBHYW1lRGVmaW5lZC5wbGF5ZXJfbGF5ZXIgfHwgdGhpcy5IaXRUYXIubGF5ZXIgPT0gR2FtZURlZmluZWQubW9zdGVyX2xheWVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgciA9IHRoaXMuSGl0VGFyLmdldENvbXBvbmVudChSb2xlKSBhcyBSb2xlO1xyXG4gICAgICAgICAgICAgICAgci5IaXRFZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5DcmVhdGVSYXkodGhpcy50ZW1wUG9zLCB0aGlzLnRlbXBSb3RhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25FbmFibGUoKSB7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9uKEdhbWVEZWZpbmVkLkhpdEV2ZW50LCB0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EaXNhYmxlKCkge1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vZmYoR2FtZURlZmluZWQuSGl0RXZlbnQsIHRoaXMsIHRoaXMuSGl0KTtcclxuICAgIH1cclxufSIsImltcG9ydCBTcHJpdGUzRCA9IExheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCB7IFBvb2xfTWFuYWdlciB9IGZyb20gXCIuL1Bvb2xfTWFuYWdlclwiO1xyXG5pbXBvcnQgR2FtZURlZmluZWQgZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVsbGV0Q29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQnVsbGV0Q29udHJvbGxlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IEJ1bGxldENvbnRyb2xsZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlIHx8ICh0aGlzLmluc3RhbmNlID0gbmV3IEJ1bGxldENvbnRyb2xsZXIoKSk7XHJcbiAgICB9XHJcbiAgIC8vIHByaXZhdGUgYnVsbGV0UHJlZjogU3ByaXRlM0Q7XHJcbiAgICBwdWJsaWMgaW5pdChidWxsZXQ6IFNwcml0ZTNELHBvb2xOYW1lOnN0cmluZykge1xyXG4gICAgICAgIGJ1bGxldC5yZW1vdmVTZWxmKCk7XHJcbiAgICAgIC8vICB0aGlzLmJ1bGxldFByZWYgPSBidWxsZXQ7XHJcbiAgICAgICAgUG9vbF9NYW5hZ2VyLkluc3RhbmNlLkluaXREYXRhKHBvb2xOYW1lLCBidWxsZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVsbGV0OiBTcHJpdGUzRDtcclxuICAgIHB1YmxpYyBDcmVhdGVCdWxsZXQoYnVsbGV0TmFtZSk6IFNwcml0ZTNEIHtcclxuICAgICAgICAvL2lmICh0aGlzLmJ1bGxldCkgcmV0dXJuIHRoaXMuYnVsbGV0O1xyXG4gICAgICAgIHZhciBnbyA9IFBvb2xfTWFuYWdlci5JbnN0YW5jZS5TZXRBY3RpdmVPYmplY3QoYnVsbGV0TmFtZSk7XHJcbiAgICAgICAgR2FtZVNjZW5lQ29udHJvbGxlci5JbnN0YW5jZS5nYW1lX3NjZW5lLmFkZENoaWxkKGdvKTtcclxuICAgICAgIC8vIHRoaXMuYnVsbGV0ID0gZ287XHJcbiAgICAgICAgcmV0dXJuIGdvO1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWVDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3Rhc25jZTogR2FtZUNvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBHYW1lQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFzbmNlIHx8ICh0aGlzLmluc3Rhc25jZSA9IG5ldyBHYW1lQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGlzaGl0ID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgSGl0KCkge1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5ldmVudChHYW1lRGVmaW5lZC5IaXRFdmVudCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBnYW1lU3RhcnQgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBnYW1lb3ZlciA9IHRydWU7XHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgR2FtZVN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuZ2FtZVN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdhbWVvdmVyID0gZmFsc2U7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgUmVzb3VyY2VMb2FkIGZyb20gXCIuLi9nYW1lX21vZHVsZS9SZXNvdXJjZUxvYWRcIjtcclxuaW1wb3J0IFNjZW5lM0QgPSBMYXlhLlNjZW5lM0Q7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHsgUm9sZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi9Sb2xlQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgR2FtZURlZmluZWQgZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCBTcHJpdGUzRD1MYXlhLlNwcml0ZTNEO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lU2NlbmVDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBHYW1lU2NlbmVDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogR2FtZVNjZW5lQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UgfHwgKHRoaXMuaW5zdGFuY2UgPSBuZXcgR2FtZVNjZW5lQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdhbWVfc2NlbmU6IFNjZW5lM0Q7XHJcbiAgXHJcbiAgICBwdWJsaWMgQ3JlYXRlU2NlbmUoKSB7XHJcbiAgICAgICAgUmVzb3VyY2VMb2FkLkxvYWRSZXNvdXJjZShbR2FtZURlZmluZWQuZ2FtZV9zY2VuZV9wYXRoXSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdCA9IExheWEubG9hZGVyLmdldFJlcyhHYW1lRGVmaW5lZC5nYW1lX3NjZW5lX3BhdGgpIGFzIFNjZW5lM0Q7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZV9zY2VuZSA9IHQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2J1bGxldEcgPSB0LmdldENoaWxkQnlOYW1lKFwiYnVsbGV0R1wiKSBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgdmFyIF9idWxsZXRSPXQuZ2V0Q2hpbGRCeU5hbWUoXCJidWxsZXRSXCIpYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuaW5pdChfYnVsbGV0RyxHYW1lRGVmaW5lZC5wb29sTmFtZS5idWxsZXRHKTtcclxuICAgICAgICAgICAgQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5pbml0KF9idWxsZXRSLEdhbWVEZWZpbmVkLnBvb2xOYW1lLkJ1bGxldFIpO1xyXG5cclxuICAgICAgICAgICAgLy8gdmFyIF9yb2xlMSA9IHQuZ2V0Q2hpbGRCeU5hbWUoXCJyb2xlMVwiKSBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgLy8gdmFyIF9yb2xlMiA9IHQuZ2V0Q2hpbGRCeU5hbWUoXCJyb2xlMlwiKSBhcyBTcHJpdGUzRDtcclxuXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyB2YXIgX21vc3RlcjEgPSB0LmdldENoaWxkQnlOYW1lKFwibW9zdGVyMVwiKSBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgLy8gdmFyIF9tb3N0ZXIyPSB0LmdldENoaWxkQnlOYW1lKFwibW9zdGVyMlwiKSBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgdmFyIHBsYXllcnM9dC5nZXRDaGlsZEJ5TmFtZShcIlBsYXllcnNcIilhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgdmFyIG1vc3RlcnM9dC5nZXRDaGlsZEJ5TmFtZShcIk1vc3RlcnNcIilhcyBTcHJpdGUzRDtcclxuXHJcbiAgICAgICAgICAgIFJvbGVDb250cm9sbGVyLkluc3RhbmNlLmluaXRQbGF5ZXIocGxheWVycy5fY2hpbGRyZW4pO1xyXG5cclxuICAgICAgICAgICAgUm9sZUNvbnRyb2xsZXIuSW5zdGFuY2UuaW5pdE1vc3Rlcihtb3N0ZXJzLl9jaGlsZHJlbik7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFJvbGVDb250cm9sbGVyLkluc3RhbmNlLkNyZWF0ZVJheSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxufSIsIlxyXG5pbXBvcnQgR2FtZURlZmluZWQsIHsgQ2hlY2tUeXBlLCBCdWxsZXRUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9Sb2xlXCI7XHJcbmltcG9ydCBWZWN0b3IzPUxheWEuVmVjdG9yMztcclxuaW1wb3J0IFJheT1MYXlhLlJheTtcclxuaW1wb3J0IEhpdFJlc3VsdD1MYXlhLkhpdFJlc3VsdDtcclxuaW1wb3J0IFNwcml0ZTNEPUxheWEuU3ByaXRlM0RcclxuaW1wb3J0IHsgQnVsbGV0IH0gZnJvbSBcIi4vQnVsbGV0XCI7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgR2FtZV9Ub29sIGZyb20gXCIuLi9nYW1lX3Rvb2wvR2FtZV9Ub29sXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNb3N0ZXIgZXh0ZW5kcyBSb2xlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Bd2FrZSgpIHtcclxuICAgICAgICBzdXBlci5vbkF3YWtlKCk7XHJcbiAgICAgICAgdGhpcy5fdHlwZSA9IENoZWNrVHlwZS5Nb3N0ZXI7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fY29yc3MgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLl9idWxsZXRQb3MgPSB0aGlzLnNlbGYuZ2V0Q2hpbGRCeU5hbWUoXCJidWxsZXRQb3NcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb3J3OiBWZWN0b3IzO1xyXG4gICAgcHJpdmF0ZSBfcmF5OiBSYXk7XHJcbiAgICBwcml2YXRlIF9oaXQ6IEhpdFJlc3VsdDtcclxuXHJcbiAgICBwcml2YXRlIF9jb3JzczogVmVjdG9yMztcclxuXHJcbiAgICBwcml2YXRlIGdvOiBTcHJpdGUzRDtcclxuICAgIHByaXZhdGUgZ29TOiBCdWxsZXQ7XHJcbiAgICBDcmVhdGVSYXkoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtLmdldEZvcndhcmQodGhpcy5mb3J3KTtcclxuICAgICAgICB0aGlzLmZvcncgPSBuZXcgVmVjdG9yMygtdGhpcy5mb3J3LngsIC10aGlzLmZvcncueSwgLXRoaXMuZm9ydy56KTtcclxuICAgICAgICBpZiAoIXRoaXMuX3JheSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkgPSBuZXcgUmF5KHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb24sIHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hpdCA9IG5ldyBIaXRSZXN1bHQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkub3JpZ2luID0gdGhpcy5fYnVsbGV0UG9zLnRyYW5zZm9ybS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5fcmF5LmRpcmVjdGlvbiA9IHRoaXMuZm9ydztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmdvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28gPSBCdWxsZXRDb250cm9sbGVyLkluc3RhbmNlLkNyZWF0ZUJ1bGxldChHYW1lRGVmaW5lZC5wb29sTmFtZS5CdWxsZXRSKTtcclxuICAgICAgICAgICAgdmFyIGdzID0gdGhpcy5nby5nZXRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICAgICAgaWYgKCFncykgdGhpcy5nb1MgPSB0aGlzLmdvLmFkZENvbXBvbmVudChCdWxsZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5wb3NpdGlvbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucm90YXRpb24gPSB0aGlzLl90cmFuc2Zvcm0ucm90YXRpb247XHJcbiAgICAgICAgdmFyIGlzUyA9IEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5waHlzaWNzU2ltdWxhdGlvbi5yYXlDYXN0KHRoaXMuX3JheSwgdGhpcy5faGl0KTtcclxuICAgICAgICBpZiAoaXNTKSB7XHJcbiAgICAgICAgICAgIHZhciBwb2kgPSB0aGlzLl9oaXQucG9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBkaXMgPSBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb24sIHBvaSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gZGlzO1xyXG5cclxuICAgICAgICAgICAgdmFyIG90aGVyID0gdGhpcy5faGl0LmNvbGxpZGVyLm93bmVyIGFzIFNwcml0ZTNEO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIubGF5ZXIgPT0gR2FtZURlZmluZWQucGxheWVyX2xheWVyIHx8IG90aGVyLmxheWVyID09IEdhbWVEZWZpbmVkLm1vc3Rlcl9sYXllcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZXRUYXIob3RoZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgICAgIHZhciBub3IgPSB0aGlzLl9oaXQubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgbm9yLnggPSBNYXRoLmFicyhub3IueCkgPCAwLjAwMSA/IDAgOiBub3IueDtcclxuICAgICAgICAgICAgICAgIG5vci55ID0gTWF0aC5hYnMobm9yLnkpIDwgMC4wMDEgPyAwIDogbm9yLnk7XHJcbiAgICAgICAgICAgICAgICBub3IueiA9IE1hdGguYWJzKG5vci56KSA8IDAuMDAxID8gMCA6IG5vci56O1xyXG4gICAgICAgICAgICAgICAgVmVjdG9yMy5jcm9zcyh0aGlzLmZvcncsIG5vciwgdGhpcy5fY29yc3MpOy8v5aSn5LqOMOWcqOW3puaWuSDlsI/kuo4w5Zyo5Y+z5pa5XHJcbiAgICAgICAgICAgICAgICB2YXIgYSA9IEdhbWVfVG9vbC5nZXRSZWZsZWN0QW5nKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYW5nID0gdGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uRXVsZXIuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvcnNzLnkgPj0gMCA/IGFuZy55ID0gYW5nLnkgKyAyICogYSA6IGFuZy55ID0gYW5nLnkgLSAyICogYTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLkNyZWF0ZVJheShwb2ksIGFuZyxCdWxsZXRUeXBlLkJ1bGxldFIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBSb3RhdGlvblNlbGYocm90YTogVmVjdG9yMykge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5yb3RhdGUocm90YSk7XHJcbiAgICAgICAgdGhpcy5DcmVhdGVSYXkoKTtcclxuICAgIH1cclxuXHJcbiAgICBTZXROZXh0Tm90QWN0aXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdvUykgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBIaXRUYXI6U3ByaXRlM0Q7XHJcbiAgICBwcml2YXRlIFJlbW92ZVRhcigpe1xyXG4gICAgICAgIGlmKHRoaXMuSGl0VGFyKXtcclxuICAgICAgICAgICAgdGhpcy5IaXRUYXI9bnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIFNldFRhcih0YXIpe1xyXG4gICAgICAgIHRoaXMuSGl0VGFyPXRhcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgSGl0KCl7XHJcbiAgICAgICAgaWYodGhpcy5IaXRUYXIpe1xyXG4gICAgICAgICAgICAvL0dhbWVfVG9vbC5DcmVhdGVUZXh0KHRoaXMuSGl0VGFyLm5hbWUrXCLooqvlh7vmnYAhXCIpO1xyXG4gICAgICAgICAgICBpZiggdGhpcy5IaXRUYXIubGF5ZXIgPT0gR2FtZURlZmluZWQucGxheWVyX2xheWVyIHx8ICB0aGlzLkhpdFRhci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpe1xyXG4gICAgICAgICAgICAgIHZhciByPSAgdGhpcy5IaXRUYXIuZ2V0Q29tcG9uZW50KFJvbGUpYXMgUm9sZTtcclxuICAgICAgICAgICAgICByLkhpdEVkKCk7XHJcbiAgICAgICAgICAgICB0aGlzLkNyZWF0ZVJheSgpO1xyXG4gICAgICAgICAgICAvLyAgdGhpcy5DcmVhdGVSYXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAvLyBFdmVudE1hbmFnZXIub2ZmKEdhbWVEZWZpbmVkLkhpdEV2ZW50LHRoaXMsIHRoaXMuSGl0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBvbkVuYWJsZSgpe1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vbihHYW1lRGVmaW5lZC5IaXRFdmVudCx0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICAgICAgdGhpcy5faXNoaXRlZD1mYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRpc2FibGUoKXtcclxuICAgICAgICBFdmVudE1hbmFnZXIub2ZmKEdhbWVEZWZpbmVkLkhpdEV2ZW50LHRoaXMsIHRoaXMuSGl0KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9Sb2xlXCI7XHJcbmltcG9ydCBHYW1lRGVmaW5lZCwgeyBDaGVja1R5cGUsIEJ1bGxldFR5cGUgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuaW1wb3J0IFZlY3RvcjMgPSBMYXlhLlZlY3RvcjM7XHJcbmltcG9ydCBSYXkgPSBMYXlhLlJheTtcclxuaW1wb3J0IEhpdFJlc3VsdCA9IExheWEuSGl0UmVzdWx0O1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IFNwcml0ZTNEID0gTGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IHsgQnVsbGV0IH0gZnJvbSBcIi4vQnVsbGV0XCI7XHJcbmltcG9ydCBHYW1lX1Rvb2wgZnJvbSBcIi4uL2dhbWVfdG9vbC9HYW1lX1Rvb2xcIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlclwiO1xyXG5leHBvcnQgY2xhc3MgUGxheWVyIGV4dGVuZHMgUm9sZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgc3VwZXIub25Bd2FrZSgpO1xyXG4gICAgICAgIHRoaXMuX3R5cGUgPSBDaGVja1R5cGUuUGxheWVyO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX2NvcnNzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fYnVsbGV0UG9zID0gdGhpcy5zZWxmLmdldENoaWxkQnlOYW1lKFwiYnVsbGV0UG9zXCIpIGFzIFNwcml0ZTNEO1xyXG4gICAgfVxyXG4gICAgaWRoaXQgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGZvcnc6IFZlY3RvcjM7XHJcbiAgICBwcml2YXRlIF9yYXk6IFJheTtcclxuICAgIHByaXZhdGUgX2hpdDogSGl0UmVzdWx0O1xyXG5cclxuICAgIHByaXZhdGUgX2NvcnNzOiBWZWN0b3IzO1xyXG5cclxuICAgIHB1YmxpYyBnbzogU3ByaXRlM0Q7XHJcbiAgICBwdWJsaWMgZ29TOiBCdWxsZXQ7XHJcbiAgICBDcmVhdGVSYXkoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtLmdldEZvcndhcmQodGhpcy5mb3J3KTtcclxuICAgICAgICB0aGlzLmZvcncgPSBuZXcgVmVjdG9yMygtdGhpcy5mb3J3LngsIC10aGlzLmZvcncueSwgLXRoaXMuZm9ydy56KTtcclxuICAgICAgICBpZiAoIXRoaXMuX3JheSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkgPSBuZXcgUmF5KHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb24sIHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hpdCA9IG5ldyBIaXRSZXN1bHQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkub3JpZ2luID0gdGhpcy5fYnVsbGV0UG9zLnRyYW5zZm9ybS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5fcmF5LmRpcmVjdGlvbiA9IHRoaXMuZm9ydztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmdvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28gPSBCdWxsZXRDb250cm9sbGVyLkluc3RhbmNlLkNyZWF0ZUJ1bGxldChHYW1lRGVmaW5lZC5wb29sTmFtZS5idWxsZXRHKTtcclxuICAgICAgICAgICAgdmFyIGdzID0gdGhpcy5nby5nZXRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICAgICAgaWYgKCFncykgdGhpcy5nb1MgPSB0aGlzLmdvLmFkZENvbXBvbmVudChCdWxsZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5wb3NpdGlvbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucm90YXRpb24gPSB0aGlzLl90cmFuc2Zvcm0ucm90YXRpb247XHJcbiAgICAgICAgdmFyIGlzUyA9IEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5waHlzaWNzU2ltdWxhdGlvbi5yYXlDYXN0KHRoaXMuX3JheSwgdGhpcy5faGl0KTtcclxuICAgICAgICBpZiAoaXNTKSB7XHJcbiAgICAgICAgICAgIHZhciBwb2kgPSB0aGlzLl9oaXQucG9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBkaXMgPSBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb24sIHBvaSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gZGlzO1xyXG5cclxuICAgICAgICAgICAgdmFyIG90aGVyID0gdGhpcy5faGl0LmNvbGxpZGVyLm93bmVyIGFzIFNwcml0ZTNEO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIubGF5ZXIgPT0gR2FtZURlZmluZWQucGxheWVyX2xheWVyIHx8IG90aGVyLmxheWVyID09IEdhbWVEZWZpbmVkLm1vc3Rlcl9sYXllcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZXRUYXIob3RoZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgICAgIHZhciBub3IgPSB0aGlzLl9oaXQubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgbm9yLnggPSBNYXRoLmFicyhub3IueCkgPCAwLjAwMSA/IDAgOiBub3IueDtcclxuICAgICAgICAgICAgICAgIG5vci55ID0gTWF0aC5hYnMobm9yLnkpIDwgMC4wMDEgPyAwIDogbm9yLnk7XHJcbiAgICAgICAgICAgICAgICBub3IueiA9IE1hdGguYWJzKG5vci56KSA8IDAuMDAxID8gMCA6IG5vci56O1xyXG4gICAgICAgICAgICAgICAgVmVjdG9yMy5jcm9zcyh0aGlzLmZvcncsIG5vciwgdGhpcy5fY29yc3MpOy8v5aSn5LqOMOWcqOW3puaWuSDlsI/kuo4w5Zyo5Y+z5pa5XHJcbiAgICAgICAgICAgICAgICB2YXIgYSA9IEdhbWVfVG9vbC5nZXRSZWZsZWN0QW5nKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYW5nID0gdGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uRXVsZXIuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvcnNzLnkgPj0gMCA/IGFuZy55ID0gYW5nLnkgKyAyICogYSA6IGFuZy55ID0gYW5nLnkgLSAyICogYTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIHYxPW5ldyBWZWN0b3IzKDAuOCwwLDAuNik7ICAvL+WQkemHjzEgXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgbm9yPW5ldyBWZWN0b3IzKC0xLDAsMCk7ICAgIC8vdjHnorDmkp7ms5Xnur9cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgYWI9bmV3IExheWEuUXVhdGVybmlvbigpO1xyXG4gICAgICAgICAgICAgICAgLy8gTGF5YS5RdWF0ZXJuaW9uLmNyZWF0ZUZyb21BeGlzQW5nbGUodGhpcy5mb3J3LGEsYWIpXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdvUy5DcmVhdGVSYXkocG9pLCBhYiwgQnVsbGV0VHlwZS5CdWxsZXRHKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvUy5DcmVhdGVSYXkocG9pLCBhbmcsIEJ1bGxldFR5cGUuQnVsbGV0Ryk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlJlbW92ZVRhcigpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IDUwO1xyXG4gICAgICAgICAgICB0aGlzLmdvUy5TZXROZXh0Tm90QWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIFJvdGF0aW9uU2VsZihyb3RhOiBWZWN0b3IzKSB7XHJcbiAgICAgIC8vICBjb25zb2xlLmxvZyhyb3RhKTtcclxuICAgICAgLy8gIGNvbnNvbGUubG9nKHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyKTtcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm0ucm90YXRlKHJvdGEpO1xyXG4gICAgICAvLyAgY29uc29sZS5sb2codGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uRXVsZXIpO1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlUmF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgU2V0TmV4dE5vdEFjdGl2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nb1MpIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBIaXRUYXI6IFNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBSZW1vdmVUYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuSGl0VGFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuSGl0VGFyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIFNldFRhcih0YXIpIHtcclxuICAgICAgICB0aGlzLkhpdFRhciA9IHRhcjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgSGl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLkhpdFRhcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5IaXRUYXIubGF5ZXIgPT0gR2FtZURlZmluZWQucGxheWVyX2xheWVyIHx8IHRoaXMuSGl0VGFyLmxheWVyID09IEdhbWVEZWZpbmVkLm1vc3Rlcl9sYXllcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHIgPSB0aGlzLkhpdFRhci5nZXRDb21wb25lbnQoUm9sZSkgYXMgUm9sZTtcclxuICAgICAgICAgICAgICAgIHIuSGl0RWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQ3JlYXRlUmF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25FbmFibGUoKSB7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9uKEdhbWVEZWZpbmVkLkhpdEV2ZW50LCB0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICAgICAgdGhpcy5faXNoaXRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGlzYWJsZSgpIHtcclxuICAgICAgICBFdmVudE1hbmFnZXIub2ZmKEdhbWVEZWZpbmVkLkhpdEV2ZW50LCB0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgRGljdGlvbmFyeSBmcm9tIFwiLi4vZ2FtZV90b29sL0RpY3Rpb25hcnlcIjtcclxuaW1wb3J0IFZlY3RvcjM9TGF5YS5WZWN0b3IzO1xyXG5leHBvcnQgY2xhc3MgUG9vbF9NYW5hZ2VyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBQb29sX01hbmFnZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBQb29sX01hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBQb29sX01hbmFnZXIuaW5zdGFuY2UgfHwgKFBvb2xfTWFuYWdlci5pbnN0YW5jZSA9IG5ldyBQb29sX01hbmFnZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wb29sRGljID0gbmV3IERpY3Rpb25hcnkoKTtcclxuICAgICAgICB0aGlzLnByZWZhYkRpYyA9IG5ldyBEaWN0aW9uYXJ5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/lrZjlgqjlpJrkuKpcclxuICAgIHByaXZhdGUgcG9vbERpYzogRGljdGlvbmFyeTtcclxuXHJcbiAgICAvL+mihOiuvuWvueixoVxyXG4gICAgcHJpdmF0ZSBwcmVmYWJEaWM6IERpY3Rpb25hcnk7XHJcblxyXG4gICAgLy8gWyAgXVxyXG4gICAgcHVibGljIEluaXREYXRhKG5hbWU6IHN0cmluZywgcHJlZmFiKSB7XHJcbiAgICAgICAgaWYgKHByZWZhYiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wcmVmYWJEaWMuaGFzKG5hbWUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmYWJEaWMuc2V0KG5hbWUsIHByZWZhYik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIFNldEFjdGl2ZU9iamVjdChuYW1lOiBzdHJpbmcsc2NhbGU/KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9vbERpYy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9vbERpYy5nZXQobmFtZSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMucG9vbERpYy5nZXQobmFtZSkuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5hY3RpdmU9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJPYmogPSBMYXlhLlNwcml0ZTNELmluc3RhbnRpYXRlKHRoaXMucHJlZmFiRGljLmdldChuYW1lKSkgYXMgTGF5YS5TcHJpdGUzRDtcclxuICAgICAgICAgICAgICAgICAgICBpZihzY2FsZSE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ck9iai50cmFuc2Zvcm0ubG9jYWxTY2FsZT1uZXcgVmVjdG9yMyhzY2FsZSxzY2FsZSxzY2FsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGN1ck9iai5uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyT2JqO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVmYWJEaWMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VyT2JqID0gTGF5YS5TcHJpdGUzRC5pbnN0YW50aWF0ZSh0aGlzLnByZWZhYkRpYy5nZXQobmFtZSkpIGFzIExheWEuU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgICAgICBpZihzY2FsZSE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyT2JqLnRyYW5zZm9ybS5sb2NhbFNjYWxlPW5ldyBWZWN0b3IzKHNjYWxlLHNjYWxlLHNjYWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1ck9iai5uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJPYmo7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/pmpDol4/lr7nosaHliLBkaWNcclxuICAgIHB1YmxpYyBTZXREaXNhYmxlT2JqZWN0KGdvOiBMYXlhLlNwcml0ZTNEKSB7XHJcbiAgICAgICAgaWYgKGdvKSBnby5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB2YXIga2V5ID0gZ28ubmFtZTtcclxuICAgICAgICBpZiAoIXRoaXMucG9vbERpYy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvb2xEaWMuc2V0KGtleSwgbmV3IEFycmF5PGFueT4oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9vbERpYy5nZXQoa2V5KS5wdXNoKGdvKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgRGVzdG9yeU9iaihnbzpMYXlhLlNwcml0ZTNEKXtcclxuICAgICAgICBpZiAoZ28pIGdvLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/lu7bml7bpmpDol4/lr7nosaHliLBkaWNcclxuICAgIHB1YmxpYyBTZXREaXNhYmxlTXV0aU9iamVjdChnbzogTGF5YS5TcHJpdGUzRCwgdGltZXIpIHtcclxuICAgICAgICBMYXlhLnRpbWVyLm9uY2UodGltZXIsIHRoaXMsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGdvKSBnby5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGdvLm5hbWU7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wb29sRGljLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvb2xEaWMuc2V0KGtleSwgbmV3IEFycmF5PGFueT4oKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wb29sRGljLmdldChrZXkpLnB1c2goZ28pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgVHJhbnNmb3JtM0QgPSBMYXlhLlRyYW5zZm9ybTNEO1xyXG5pbXBvcnQgR2FtZURlZmluZWQsIHsgQ2hlY2tUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCBWZWN0b3IzID0gTGF5YS5WZWN0b3IzO1xyXG5pbXBvcnQgUmF5ID0gTGF5YS5SYXk7XHJcbmltcG9ydCBIaXRSZXN1bHQgPSBMYXlhLkhpdFJlc3VsdDtcclxuaW1wb3J0IHsgQnVsbGV0IH0gZnJvbSBcIi4vQnVsbGV0XCI7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgR2FtZV9Ub29sIGZyb20gXCIuLi9nYW1lX3Rvb2wvR2FtZV9Ub29sXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuZXhwb3J0IGNsYXNzIFJvbGUgZXh0ZW5kcyBMYXlhLlNjcmlwdDNEIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNlbGY6IFNwcml0ZTNEO1xyXG4gICAgcHJvdGVjdGVkIF90cmFuc2Zvcm06IFRyYW5zZm9ybTNEO1xyXG4gICAgcHJvdGVjdGVkIF90eXBlOiBDaGVja1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX2J1bGxldFBvczogU3ByaXRlM0Q7XHJcbiAgICBwcm90ZWN0ZWQgX2lzaGl0ZWQ6IGJvb2xlYW47XHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZiA9IHRoaXMub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5zZWxmLnRyYW5zZm9ybTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgSGl0RWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzaGl0ZWQpIHJldHVybjtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBDaGVja1R5cGUuUGxheWVyOlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgQ2hlY2tUeXBlLk1vc3RlcjpcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5TZXROZXh0Tm90QWN0aXZlKCk7XHJcbiAgICAgICAgdGhpcy5zZWxmLmFjdGl2ZT1mYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgIFNldE5leHROb3RBY3RpdmUoKSB7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG59IiwiXHJcbmltcG9ydCBTcHJpdGUzRCA9IExheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuL1BsYXllclwiO1xyXG5pbXBvcnQgVmVjdG9yMyA9IExheWEuVmVjdG9yMztcclxuaW1wb3J0IHsgTW9zdGVyIH0gZnJvbSBcIi4vTW9zdGVyXCI7XHJcbmV4cG9ydCBjbGFzcyBSb2xlQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YXNuY2U6IFJvbGVDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogUm9sZUNvbnRyb2xsZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3Rhc25jZSB8fCAodGhpcy5pbnN0YXNuY2UgPSBuZXcgUm9sZUNvbnRyb2xsZXIoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIHB1YmxpYyBwbGF5ZXI6U3ByaXRlM0Q7XHJcbiAgICAvLyBwdWJsaWMgcGxheWVyUzpQbGF5ZXI7XHJcblxyXG4gICAgcHVibGljIHBsYXllckFyciA9IFtdO1xyXG4gICAgcHVibGljIG1vc3RlckFyciA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBiZWhhdmlvckFyciA9IFtdO1xyXG4gICAgcHVibGljIGluaXRQbGF5ZXIocm9sZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcm9sZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSByb2xlc1tpbmRleF07XHJcbiAgICAgICAgICAgIHZhciBiZWggPSBlbGVtZW50LmFkZENvbXBvbmVudChQbGF5ZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmJlaGF2aW9yQXJyLnB1c2goYmVoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYocm9sZSl7XHJcbiAgICAgICAgLy8gICAgIHRoaXMucGxheWVyPXJvbGU7XHJcbiAgICAgICAgLy8gICAgIHRoaXMucGxheWVyUz10aGlzLnBsYXllci5hZGRDb21wb25lbnQoUGxheWVyKTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXRNb3N0ZXIobW9zdGVycykge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtb3N0ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbW9zdGVyc1tpbmRleF07XHJcbiAgICAgICAgICAgIHZhciBiZWggPSBlbGVtZW50LmFkZENvbXBvbmVudChNb3N0ZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmJlaGF2aW9yQXJyLnB1c2goYmVoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgQ3JlYXRlUmF5KCkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJlaGF2aW9yQXJyLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5iZWhhdmlvckFycltpbmRleF07XHJcbiAgICAgICAgICAgIGVsZW1lbnQuQ3JlYXRlUmF5KCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgaWYodGhpcy5wbGF5ZXJTKXRoaXMucGxheWVyUy5DcmVhdGVSYXkoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBSb2xlUm90YXRpb24ocm90YTogVmVjdG9yMykge1xyXG4gICAgICAgIC8vIGlmKHRoaXMucGxheWVyUyl0aGlzLnBsYXllclMuUm90YXRpb25TZWxmKHJvdGEpO1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJlaGF2aW9yQXJyLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5iZWhhdmlvckFycltpbmRleF07XHJcbiAgICAgICAgICAgIGVsZW1lbnQuUm90YXRpb25TZWxmKHJvdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCBTb3VuZE1hbmFnZXIgPSBMYXlhLlNvdW5kTWFuYWdlcjtcclxuaW1wb3J0IHsgV1hTZGsgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvV1hTZGtcIjtcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3Rhc25jZTogU2V0dGluZ0NvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgdmlicmF0ZSA9IHRydWU7XHJcbiAgICBwdWJsaWMgc291bmQ9dHJ1ZTtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFNldHRpbmdDb250cm9sbGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YXNuY2UgfHwgKHRoaXMuaW5zdGFzbmNlID0gbmV3IFNldHRpbmdDb250cm9sbGVyKCkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIFNldHRpbmdTb3VuZCh2YWx1ZT86IG51bWJlcikge1xyXG4gICAgICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICAgICAgU291bmRNYW5hZ2VyLnNldFNvdW5kVm9sdW1lKHZhbHVlKTtcclxuICAgICAgICAgICAgU291bmRNYW5hZ2VyLnNldE11c2ljVm9sdW1lKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvdW5kQ2hhbm5lbDogTGF5YS5Tb3VuZENoYW5uZWw7XHJcbiAgICBwdWJsaWMgX3BsYXlNdXNpYyhvbikge1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBpZiAob24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc291bmRDaGFubmVsID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc291bmRDaGFubmVsID0gU291bmRNYW5hZ2VyLnBsYXlNdXNpYyh0aGlzLlRyYWluTG9vcCwgMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbC52b2x1bWUgPSAwLjVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbC5yZXN1bWUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb3VuZENoYW5uZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc291bmRDaGFubmVsLnBhdXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9wbGF5QmFkTW92ZSgpIHtcclxuICAgICAgIFxyXG4gICAgICAgIFdYU2RrLlNob3J0VmlicmF0ZSgpO1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuYmFkTW92ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9DbGljaygpIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLmNsaWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgX0NvbnRpbnVlKG9uKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIGlmIChvbikge1xyXG4gICAgICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuQ29udGludWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zdG9wU291bmQodGhpcy5Db250aW51ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgX0xldmVsQ29tcCgpIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkxldmVsQ29tcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9UcmFpbkNyYXNoKCkge1xyXG4gICAgICAgIFdYU2RrLkxvbmdWaWJyYXRlKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5UcmFpbkNyYXNoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBfVHJhaW5TdG9wKCkge1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuVHJhaW5TdG9wKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBfQ29pbigpIHtcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkNvaW4pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHRlbXAgPSAwO1xyXG4gICAgcHVibGljIF9KdW1wKCkge1xyXG4gICAgICAgIFdYU2RrLlNob3J0VmlicmF0ZSgpO1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuSnVtcFt0aGlzLnRlbXBdKTtcclxuICAgICAgICB0aGlzLnRlbXArKztcclxuICAgICAgICBpZiAodGhpcy50ZW1wID09IDgpIHRoaXMudGVtcCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBiYWRNb3ZlID0gXCJyZXMvU291bmQvQmFkTW92ZS5tcDNcIjtcclxuICAgIHByaXZhdGUgY2xpY2sgPSBcInJlcy9Tb3VuZC9jbGljay5tcDNcIjtcclxuICAgIHByaXZhdGUgQ29udGludWUgPSBcInJlcy9Tb3VuZC9Db250aW51ZS5tcDNcIjtcclxuICAgIHByaXZhdGUgTGV2ZWxDb21wID0gXCJyZXMvU291bmQvTGV2ZWxDb21wLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBUcmFpbkNyYXNoID0gXCJyZXMvU291bmQvVHJhaW5DcmFzaC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5Mb29wID0gXCJyZXMvU291bmQvVHJhaW5Mb29wLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBUcmFpblN0b3AgPSBcInJlcy9Tb3VuZC9UcmFpblN0b3AubXAzXCI7XHJcbiAgICBwcml2YXRlIENvaW49XCJyZXMvU291bmQvQ29pbjEubXAzXCI7XHJcbiAgICBwcml2YXRlIEp1bXAgPVxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluMS5tcDNcIixcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluMi5tcDNcIixcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluMy5tcDNcIixcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluNC5tcDNcIixcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluNS5tcDNcIixcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluNi5tcDNcIixcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluNy5tcDNcIixcclxuICAgICAgICAgICAgXCJyZXMvU291bmQvUGFzc2VuZ2VySnVtcEluOC5tcDNcIixcclxuICAgICAgICBdO1xyXG5cclxufSIsImltcG9ydCBEaWN0aW9uYXJ5IGZyb20gXCIuLi9nYW1lX3Rvb2wvRGljdGlvbmFyeVwiO1xyXG5pbXBvcnQgeyBnYW1lX3VpIH0gZnJvbSBcIi4uL2dhbWVfdWkvZ2FtZV91aVwiO1xyXG5pbXBvcnQgeyBtYWluX3VpIH0gZnJvbSBcIi4uL2dhbWVfdWkvbWFpbl91aVwiO1xyXG5cclxuXHJcbmV4cG9ydCBlbnVtIFZpZXdUeXBlIHtcclxuICAgIGdhbWVfdWksXHJcbiAgICBtYWluX3VpXHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlld01hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFZpZXdNYW5hZ2VyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogVmlld01hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlIHx8ICh0aGlzLmluc3RhbmNlID0gbmV3IFZpZXdNYW5hZ2VyKCkpO1xyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHZpZXdEaWMgPSBbXTtcclxuICAgIHByaXZhdGUgY3VyVmlldzogYW55O1xyXG4gICAgcHJpdmF0ZSBhZGRWaWV3RGljID0gbmV3IERpY3Rpb25hcnkoKTtcclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGljW1ZpZXdUeXBlLmdhbWVfdWldID0gZ2FtZV91aTtcclxuICAgICAgICB0aGlzLnZpZXdEaWNbVmlld1R5cGUubWFpbl91aV0gPSBtYWluX3VpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIE9wZW5WaWV3KHZpZXc6IFZpZXdUeXBlLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyVmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldy5PbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UucmVtb3ZlQ2hpbGQodGhpcy5jdXJWaWV3KTtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VyVmlldyA9IG5ldyB0aGlzLnZpZXdEaWNbdmlld107XHJcblxyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5jdXJWaWV3KTtcclxuICAgICAgXHJcbiAgICAgICAgdGhpcy5jdXJWaWV3Lk9uU2hvdyhkYXRhKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBnZXRDdXJWaWV3KCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyVmlldztcclxuICAgIH1cclxuICAgIHB1YmxpYyBBZGRWaWV3KHZpZXc6IFZpZXdUeXBlLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWRkVmlld0RpYy5oYXModmlldykpIHJldHVybjtcclxuICAgICAgICBsZXQgdF92aWV3ID0gbmV3IHRoaXMudmlld0RpY1t2aWV3XTtcclxuICAgICAgICB0aGlzLmFkZFZpZXdEaWMuc2V0KHZpZXcsIHRfdmlldyk7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5hZGRDaGlsZCh0X3ZpZXcpO1xyXG4gICAgICAgIHRfdmlldy5PblNob3coZGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgUmVtb3ZlVmlldygpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJWaWV3ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0aGlzLmN1clZpZXcpO1xyXG4gICAgICAgICAgICB0aGlzLmN1clZpZXcuZGVzdHJveSh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgQ2xvc2VWaWV3KHZpZXc6IFZpZXdUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFkZFZpZXdEaWMuaGFzKHZpZXcpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IHRfdmlldyA9IHRoaXMuYWRkVmlld0RpYy5nZXQodmlldyk7XHJcbiAgICAgICAgdF92aWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICBMYXlhLnN0YWdlLnJlbW92ZUNoaWxkKHRfdmlldyk7XHJcbiAgICAgICAgdF92aWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5hZGRWaWV3RGljLmRlbGV0ZSh2aWV3KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY3VyTWFzazogYW55O1xyXG4gICAgcHVibGljIE9wZW5NYXNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1ck1hc2sgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICB0aGlzLmN1ck1hc2sgPSBuZXcgTWFza191aSgpO1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJNYXNrKSByZXR1cm47XHJcbiAgICAgICAgTGF5YS5zdGFnZS5hZGRDaGlsZCh0aGlzLmN1ck1hc2spO1xyXG4gICAgfVxyXG4gICAgcHVibGljIENsb3NlTWFzaygpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJNYXNrICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJNYXNrLk9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0aGlzLmN1ck1hc2spO1xyXG4gICAgICAgICAgICB0aGlzLmN1ck1hc2suZGVzdHJveSh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJNYXNrID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59IiwiZXhwb3J0IGNsYXNzIEV2ZW50TWFuYWdlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBkaXNpc3BhdGNoZXI6IExheWEuRXZlbnREaXNwYXRjaGVyO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0IERpc2lzcGF0Y2hlcigpOiBMYXlhLkV2ZW50RGlzcGF0Y2hlciB7XHJcbiAgICAgICAgcmV0dXJuIEV2ZW50TWFuYWdlci5kaXNpc3BhdGNoZXIgfHwgKEV2ZW50TWFuYWdlci5kaXNpc3BhdGNoZXIgPSBuZXcgTGF5YS5FdmVudERpc3BhdGNoZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBvbih0eXBlOiBzdHJpbmcsIGNhbGw6IGFueSwgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5EaXNpc3BhdGNoZXIub24odHlwZSwgY2FsbCwgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIG9mZih0eXBlOiBzdHJpbmcsIGNhbGw6IGFueSwgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5EaXNpc3BhdGNoZXIub2ZmKHR5cGUsIGNhbGwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBldmVudCh0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLkRpc2lzcGF0Y2hlci5ldmVudCh0eXBlLCBkYXRhKTtcclxuICAgIH1cclxufSIsImltcG9ydCBVc2VyTW9kZWwgZnJvbSBcIi4vVXNlck1vZGVsXCI7XHJcbmltcG9ydCB7IE1haW4gfSBmcm9tIFwiLi4vTWFpblwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi9FdmVudE1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGWUhEX1NkayB7XHJcbiAgICBwdWJsaWMgc3RhdGljIEFkX0NsaWNrVHlwZSA9IHtcclxuICAgICAgICBWaWRlbzogXCJ2aWRlb19jbGlja1wiLFxyXG4gICAgICAgIFdhdGNoOiBcIndhdGNoXCIsXHJcbiAgICAgICAgU2hhcmU6IFwic2hhcmVcIixcclxuICAgICAgICBCYW5uZXI6IFwiYmFubmVyXCIsXHJcbiAgICAgICAgUHVzaDogXCJwdXNoXCJcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHB1c2hEYXRhID0gW107XHJcbiAgICBwcml2YXRlIHN0YXRpYyBvcGVuaWQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzSGF2ZURhdGUgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dBZCA9IFwiU2hvd0FkXCI7XHJcbiAgICAvL+WIneWni+WMlnNka1xyXG4gICAgcHVibGljIHN0YXRpYyBJbml0U2RrKCkge1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5zdGFydFNkaygpO1xyXG4gICAgICAgIEZZSERfU2RrLlVzZXJJbmZvQXV0aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v55So5oi35o6I5p2DXHJcbiAgICBwdWJsaWMgc3RhdGljIFVzZXJJbmZvQXV0aCgpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5nZXRGeWhkVXNlckluZm8obnVsbCwgZmFsc2UsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5peg5o6I5p2D5Zue6LCDOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQudXNlcikge1xyXG4gICAgICAgICAgICAgICAgRllIRF9TZGsub3BlbmlkID0gZGF0YS5yZXN1bHQudXNlci5vcGVuaWQ7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5BdXRoSW5mbygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHN0YXRpYyBBdXRoSW5mbygpIHtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5sb2dpbkRhdGEoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmjojmnYPkuIrmiqXlm57osIM6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIEZZSERfU2RrLlZhbHVlVXNlcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgVmFsdWVVc2VyKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0ge1xyXG4gICAgICAgICAgICBvcGVuaWQ6IEZZSERfU2RrLm9wZW5pZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnZhbHVldXNlcihhcmdzLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuacieaViOeUqOaIt+S4iuaKpTpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL+WIm+inkuiJslxyXG4gICAgcHVibGljIHN0YXRpYyBSb2xlRGF0YSgpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBhcmdzID0ge1xyXG4gICAgICAgICAgICBvcGVuaWQ6IEZZSERfU2RrLm9wZW5pZCxcclxuICAgICAgICAgICAgcm9sZV9pZDogVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCxcclxuICAgICAgICAgICAgY3JlYXRlX3RpbWU6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5yb2xlRGF0YShhcmdzLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWIm+W7uuinkuiJsjpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgRllIRF9TZGsuTG9naW4oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8v55m75b2V5L+h5oGv5LiK5oqlXHJcbiAgICBwdWJsaWMgc3RhdGljIExvZ2luKCkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgdmFyIG9wZW5pZCA9IEZZSERfU2RrLm9wZW5pZCA/IEZZSERfU2RrLm9wZW5pZCA6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5vcGVuaWQ7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogb3BlbmlkLFxyXG4gICAgICAgICAgICByb2xlX2lkOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwudXNlcmlkLFxyXG4gICAgICAgICAgICBjcmVhdGVfdGltZTogVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLlNlcnZlclRpbWUudG9TdHJpbmcoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcIueZu+W9leWPguaVsDpcIiArIEpTT04uc3RyaW5naWZ5KGFyZ3MpKTtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkudXBsb2dpbkRhdGEoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLnmbvlvZXnu5Pmnpw6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIC8vIEZZSERfU2RrLlB1c2hEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ngrnlh7vkuovku7bkuIrmiqVcclxuICAgIHB1YmxpYyBzdGF0aWMgQ2xpY2tBZChhZF90eXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwYXJhbSA9IHtcclxuICAgICAgICAgICAgYWRfdHlwZTogYWRfdHlwZSxcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLngrnlh7vlj4LmlbA6XCIgKyBwYXJhbSk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLmFkdmVydGlzZW1lbnQocGFyYW0sIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye757uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgUHVzaERhdGEoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7fTtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuc2hhcmVSZWNvbW1lbmQocGFyYW0sIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLnB1c2hEYXRhID0gZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgRllIRF9TZGsucHVzaERhdGEuc29ydChGWUhEX1Nkay5MaXN0U29ydCk7XHJcbiAgICAgICAgICAgICAgICBFdmVudE1hbmFnZXIuZXZlbnQoRllIRF9TZGsuU2hvd0FkKTtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLmlzSGF2ZURhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6I635Y+W5LqS5o6o5L+h5oGvOlwiICsgSlNPTi5zdHJpbmdpZnkoRllIRF9TZGsucHVzaERhdGEpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hvd0h1VHVpSnVtcChkYXRhKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBpZiAoZGF0YS5qdW1wX3R5cGUgPT0gMikgLy/kuoznu7TnoIHot7Povazmlrnms5VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gucHJldmlld0ltYWdlKHsgY3VycmVudDogZGF0YS5xcmNvZGUsIHVybHM6IFtkYXRhLnFyY29kZV0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRhdGEuanVtcF90eXBlID09IDEpIC8v55u06Lez5pa55rOVXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4Lm5hdmlnYXRlVG9NaW5pUHJvZ3JhbSh7XHJcbiAgICAgICAgICAgICAgICBhcHBJZDogZGF0YS50b19hcHBpZCxcclxuICAgICAgICAgICAgICAgIHBhdGg6IGRhdGEuanVtcF9wYXRoLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmiZPlvIDmiJDlip9cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuS4iuaKpeaIkOWKnzpcIiArIEpTT04uc3RyaW5naWZ5KHJlcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIEZZSERfU2RrLlB1c2hDbGljayhkYXRhLnRvX2FwcGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZGF0YS5qdW1wX3R5cGUgPT0gMCkvL+W5s+WPsOi3s+i9rOaWueazlVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5uYXZpZ2F0ZVRvTWluaVByb2dyYW0oe1xyXG4gICAgICAgICAgICAgICAgYXBwSWQ6IGRhdGEucGxhdGZvcm1fYXBwaWQsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBkYXRhLmp1bXBfcGF0aCxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5omT5byA5oiQ5YqfXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXmiJDlip86XCIgKyBKU09OLnN0cmluZ2lmeShyZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICBGWUhEX1Nkay5QdXNoQ2xpY2soZGF0YS50b19hcHBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBQdXNoQ2xpY2sodG9fYXBwaWQpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwYXJhbSA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgICAgIHRvX2FwcGlkOiB0b19hcHBpZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnNoYXJlUGxheShwYXJhbSwgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLngrnlh7vkuIrmiqXnu5Pmnpw6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgTGlzdFNvcnQoYSwgYik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKE51bWJlcihhW1wicGFuZWxcIl0pIDwgTnVtYmVyKGJbXCJwYW5lbFwiXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTnVtYmVyKGFbXCJwYW5lbFwiXSkgPT0gTnVtYmVyKGJbXCJwYW5lbFwiXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChOdW1iZXIoYVtcInBhbmVsXCJdKSA+IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsIlxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lRGVmaW5lZCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBsYXllcl9sYXllciA9IDk7XHJcbiAgICBwdWJsaWMgc3RhdGljIHdhbGxfbGF5ZXIgPSA4O1xyXG4gICAgcHVibGljIHN0YXRpYyBtb3N0ZXJfbGF5ZXIgPSAxMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgYm9zc19sYXllciA9IDExO1xyXG4gICAgcHVibGljIHN0YXRpYyB0cmVlX2xheWVyID0gMTI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJvbWJfbGF5ZXIgPSAxMztcclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBIaXRFdmVudCA9IFwiSGl0RXZlbnRcIjtcclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnYW1lX3NjZW5lX3BhdGggPS8vXCJyZXMvTGF5YVNjZW5lX21haW4vQ29udmVudGlvbmFsL21haW4ubHNcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlcy9MYXlhU2NlbmVfR2FtZVNjZW5lL0NvbnZlbnRpb25hbC9HYW1lU2NlbmUubHNcIjtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHBvb2xOYW1lID0ge1xyXG4gICAgICAgIGJ1bGxldEc6IFwiYnVsbGV0R1wiLFxyXG4gICAgICAgIEJ1bGxldFI6IFwiQnVsbGV0UlwiXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyB1aVJlcyA9IFtcclxuICAgICAgICBcInJlcy9hdGxhcy9tYWluX3Jlcy5hdGxhc1wiLFxyXG4gICAgICAgIFwicmVzL2F0bGFzL21haW5fcmVzLnBuZyBcIlxyXG4gICAgXTtcclxufVxyXG5leHBvcnQgZW51bSBDaGVja1R5cGUge1xyXG4gICAgUGxheWVyLFxyXG4gICAgTW9zdGVyLFxyXG4gICAgQm9zcyxcclxuICAgIEJvbWIsXHJcbiAgICBUcmVlXHJcbn1cclxuZXhwb3J0IGVudW0gQnVsbGV0VHlwZSB7XHJcbiAgICBCdWxsZXRSLFxyXG4gICAgQnVsbGV0R1xyXG59XHJcbiIsIlxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvdXJjZUxvYWQge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTG9hZFJlc291cmNlKHBhdGg6QXJyYXk8YW55Pixjb21wbGV0PzpGdW5jdGlvbil7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIucmV0cnlOdW09MjtcclxuICAgICAgICBMYXlhLmxvYWRlci5tYXhMb2FkZXI9MztcclxuICAgICAgICBMYXlhLmxvYWRlci5yZXRyeURlbGF5PTEwMDtcclxuICAgICAgICBMYXlhLmxvYWRlci5jcmVhdGUocGF0aCxuZXcgTGF5YS5IYW5kbGVyKHRoaXMsY29tcGxldCkpO1xyXG4gICAgICAgIExheWEubG9hZGVyLm9uKExheWEuRXZlbnQuRVJST1IsdGhpcywoZGF0YSk9PntcclxuICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhK1wiIOi1hOa6kOWKoOi9veWksei0pVwiKTtcclxuICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgV1hTZGsgfSBmcm9tIFwiLi9XWFNka1wiO1xyXG5pbXBvcnQgeyBGWUhEX1NkayB9IGZyb20gXCIuL0ZZSERfU2RrXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFNoYXJlTW9kdWxlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgSXNTaGFyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR29TaGFyZShjYWxsQmFjayk6IHZvaWQge1xyXG4gICAgICAgIFNoYXJlTW9kdWxlLlNoYXJlVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5YiG5Lqr54K55Ye75pe26Ze0PVwiICsgU2hhcmVNb2R1bGUuU2hhcmVUaW1lKTtcclxuICAgICAgICBTaGFyZU1vZHVsZS5Jc1NoYXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIFNoYXJlTW9kdWxlLmNhbGxiYWNrID0gY2FsbEJhY2s7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNoYXJlVGltZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHN0YXRpYyBPblNob3dIYW5kbGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5vblNob3coZnVuY3Rpb24gKG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvbnNob3cgc2hhcmUgc3RhcnRcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIui/m+WFpeW+ruS/oVwiKTtcclxuICAgICAgICAgICAgICAgIC8vTGF5YS50aW1lci5zY2FsZT0xO1xyXG4gICAgICAgICAgICAgICAgaWYgKFNoYXJlTW9kdWxlLklzU2hhcmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIFNoYXJlTW9kdWxlLklzU2hhcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLliIbkuqvlm57liLDmuLjmiI/ml7bpl7RcIiArIHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB3YWl0ID0gKHRpbWUgLSBTaGFyZU1vZHVsZS5TaGFyZVRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWIhuS6q+WBnOeVmeaXtumXtOS4uu+8mlwiICsgd2FpdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNoYXJlU3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsU3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3YWl0ID49IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPD0gMC41KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZVN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRllIRF9TZGsuQ2xpY2tBZChGWUhEX1Nkay5BZF9DbGlja1R5cGUuU2hhcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFTaGFyZU1vZHVsZS5jYWxsYmFjaykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVNb2R1bGUuY2FsbGJhY2sodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dUb2FzdCh7IHRpdGxlOiBcIuWIhuS6q+aIkOWKn++8gVwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFTaGFyZU1vZHVsZS5jYWxsYmFjaykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPD0gMC41KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93VG9hc3QoeyB0aXRsZTogXCLliIbkuqvlpLHotKXvvIFcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1hTZGsuU2hvd1RvYXN0KFwi6K+35YiG5Lqr5Yiw5LiN5ZCM576kXi1eXCIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlTW9kdWxlLmNhbGxiYWNrKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBjYWxsYmFjaztcclxufSIsImltcG9ydCB7IE1haW4gfSBmcm9tIFwiLi4vTWFpblwiO1xyXG5pbXBvcnQgTmV0TWFuYWdlciBmcm9tIFwiLi9OZXRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IERhdGVDb250cm9sbGVyIH0gZnJvbSBcIi4uL2dhbWVfbG9naWMvRGF0ZUNvbnRyb2xsZXJcIjtcclxuXHJcblxyXG5leHBvcnQgZW51bSBVc2VyQ29uZmlnTmFtZSB7XHJcbiAgICB0cmFpbiwgc2lnbiwgcmV3YXJkc1xyXG59XHJcbi8v55So5oi35L+h5oGv5bGe5oCnXHJcbmV4cG9ydCBlbnVtIFVzZXJBdHRyIHtcclxuICAgIGVxdWlwX3RyYWluLCB1c2VyX2lkLCBzdGFnZSwgZ2V0X3RyYWlucywgbW9uZXksIHByb2dyZXNzX3RyYWluc1xyXG59XHJcbmV4cG9ydCBjbGFzcyBOZXRVc2VyTW9kZWwge1xyXG4gICAgcHVibGljIG1fdXNlcl9iYXNlOiBPYmplY3Q7XHJcbiAgICBwdWJsaWMgbV91c2VyX2ludml0ZTogT2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcl9sb3R0ZXJ5OiBvYmplY3RcclxuICAgIHByaXZhdGUgbG9naW5TZXZlclRpbWU6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgbV91c2VyX3RyZWFzdXJlOiBvYmplY3Q7XHJcbiAgICBwdWJsaWMgbV91c2VyX2FjaGlldmVtZW50OiBvYmplY3Q7XHJcbiAgICBwdWJsaWMgbV91c2VyX3NpZ246IE9iamVjdDtcclxuICAgIHByaXZhdGUgbV91c2VyX2FyZW5hOiBPYmplY3Q7XHJcbiAgICBwcml2YXRlIGxvY2FsVGltZTogbnVtYmVyO1xyXG4gICAgcHVibGljIG5pY2tuYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgb3BlbmlkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdXNlcmlkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV90b2tlbjogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fY29uZmlnczogT2JqZWN0O1xyXG4gICAgcHVibGljIG1fYXBwX3NldHRpbmc6IE9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXI6IE9iamVjdDtcclxuICAgIGNvbnN0cnVjdG9yKF90b2tlbjogc3RyaW5nLCBfY29uZmlnOiBPYmplY3QsIF9hcHBTZXR0aW5nOiBPYmplY3QsIF91c2VyOiBPYmplY3QsIF91c2VyYmFzZTogT2JqZWN0LCBfdXNlSW52aXRlOiBPYmplY3QsIF91c2VyX2xvdHRlcnk6IE9iamVjdCwgX3VzZXJfdHJlYXN1cmU6IE9iamVjdCwgdCwgX3VzZXJfYWNoaWV2ZW1lbnQsIF91c2VyX3NpZ24sIF91c2VyX2FyZW5hKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFRpbWUgPSBMYXlhLnRpbWVyLmN1cnJUaW1lcjtcclxuICAgICAgICB0aGlzLmxvZ2luU2V2ZXJUaW1lID0gdDtcclxuICAgICAgICB0aGlzLm1fdG9rZW4gPSBfdG9rZW47XHJcbiAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBfY29uZmlnO1xyXG4gICAgICAgIHRoaXMubV9hcHBfc2V0dGluZyA9IF9hcHBTZXR0aW5nO1xyXG4gICAgICAgIHRoaXMubV91c2VyID0gX3VzZXI7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfYmFzZSA9IF91c2VyYmFzZTtcclxuICAgICAgICB0aGlzLm1fdXNlcl9pbnZpdGUgPSBfdXNlSW52aXRlO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2xvdHRlcnkgPSBfdXNlcl9sb3R0ZXJ5O1xyXG4gICAgICAgIHRoaXMubV91c2VyX3RyZWFzdXJlID0gX3VzZXJfdHJlYXN1cmU7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfYWNoaWV2ZW1lbnQgPSBfdXNlcl9hY2hpZXZlbWVudDtcclxuICAgICAgICB0aGlzLm1fdXNlcl9zaWduID0gX3VzZXJfc2lnbjtcclxuICAgICAgICB0aGlzLm1fdXNlcl9hcmVuYSA9IF91c2VyX2FyZW5hO1xyXG4gICAgICAgIHRoaXMudXNlcmlkID0gdGhpcy5tX3VzZXJbXCJ1c2VyX2lkXCJdO1xyXG4gICAgICAgIHRoaXMub3BlbmlkID0gdGhpcy5tX3VzZXJfYmFzZVtcIm9wZW5pZFwiXTtcclxuICAgICAgICB0aGlzLm5pY2tuYW1lID0gdGhpcy5tX3VzZXJfYmFzZVtcIm5pY2tuYW1lXCJdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBDZmcoY2ZnKSB7XHJcbiAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBjZmc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNoYXJldGl0bGUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wic2hhcmV0aXRsZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tX2FwcF9zZXR0aW5nW1wic2hhcmV0aXRsZVwiXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNoYXJlaW1hZ2UoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wic2hhcmVpbWFnZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tX2FwcF9zZXR0aW5nW1wic2hhcmVpbWFnZVwiXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgR2V0Q2ZnKHR5cGU6IFVzZXJDb25maWdOYW1lKTogYW55IHtcclxuICAgICAgICB2YXIgX3R5cGUgPSBVc2VyQ29uZmlnTmFtZVt0eXBlXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tX2NvbmZpZ3NbX3R5cGVdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIEdldFVzZXJBdHRyKF9hdHRyOiBVc2VyQXR0cikge1xyXG4gICAgICAgIHZhciBhdHRyID0gVXNlckF0dHJbX2F0dHJdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1fdXNlclthdHRyXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgU2VydmVyVGltZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCB0aW1lID0gTGF5YS50aW1lci5jdXJyVGltZXI7XHJcbiAgICAgICAgbGV0IHN0aW1lID0gdGhpcy5sb2dpblNldmVyVGltZSArIE1hdGguY2VpbCgodGltZSAtIHRoaXMubG9jYWxUaW1lKSAvIDEwMDApO1xyXG4gICAgICAgIHJldHVybiBzdGltZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgR3VpZGVMZXZlbCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJHdWlkZUxldmVsXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiR3VpZGVMZXZlbFwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgQmFubmVyTW92ZVRpbWUoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiQmFubmVyTW92ZVRpbWVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJCYW5uZXJNb3ZlVGltZVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBIYXZlQmFubmVyKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIkhhdmVCYW5uZXJcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJIYXZlQmFubmVyXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IElzU2hhcmUoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiSXNTaGFyZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIklzU2hhcmVcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgQnRuQ2FuTW92ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJCdG5DYW5Nb3ZlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiQnRuQ2FuTW92ZVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBJU1NoYXJlVGhlblZpZGVvKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIklTU2hhcmVUaGVuVmlkZW9cIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJJU1NoYXJlVGhlblZpZGVvXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IE9wZW5TY2VuZVZhbHVlKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIk9wZW5TY2VuZVZhbHVlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiT3BlblNjZW5lVmFsdWVcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IElzT3BlblRyeU91dCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJJc09wZW5UcnlPdXRcIl0pIHtcclxuICAgICAgICAgICAgdmFyIG51bSA9IE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJJc09wZW5UcnlPdXRcIl0pO1xyXG4gICAgICAgICAgICBpZiAobnVtID09IDApIHJldHVybiAwO1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8IG51bSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwdWJsaWMgSnVuZGdDZmdGb3JDZG4oY2FsbGJhbGw6IEZ1bmN0aW9uKSB7XHJcbiAgICAvLyAgICAgdGhpcy5tX2NvbmZpZ3MgPSBudWxsO1xyXG4gICAgLy8gICAgIGlmICh0aGlzLm1fY29uZmlncykge1xyXG4gICAgLy8gICAgICAgICBjYWxsYmFsbCgpO1xyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHZhciBjZmcgPSBMYXlhLkxvY2FsU3RvcmFnZS5nZXRKU09OKE1haW4uY2ZnKTtcclxuICAgIC8vICAgICAgICAgaWYgKGNmZykge1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKGNmZy5WRVIgPT0gdGhpcy5HZXRDZmdWZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLm1fY29uZmlncyA9IGNmZztcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ+WtmOWcqFwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjYWxsYmFsbCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ+WtmOWcqOS9huaYr+i/h+acn+S6hlwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKE1haW4uY2ZnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKFwiY2ZnLmpzb25cIiwgbmV3IExheWEuSGFuZGxlcih0aGlzLCAoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ+S4i+i9veWujOaIkFwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEpTT04oTWFpbi5jZmcsIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMubV9jb25maWdzID0gZGF0YTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhbGwoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKFwiY2ZnLmpzb25cIiwgbmV3IExheWEuSGFuZGxlcih0aGlzLCAoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5LiL6L295a6M5oiQXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEpTT04oTWFpbi5jZmcsIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLm1fY29uZmlncyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhbGwoKTtcclxuICAgIC8vICAgICAgICAgICAgIH0pKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBwdWJsaWMgSnVuZGdDZmcodmVyLCBjYWxsYmFsbDogRnVuY3Rpb24pIHtcclxuICAgIC8vICAgICB0aGlzLm1fY29uZmlncyA9IG51bGw7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMubV9jb25maWdzKSB7XHJcbiAgICAvLyAgICAgICAgIGNhbGxiYWxsKHRydWUpO1xyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHZhciBjZmcgPSBMYXlhLkxvY2FsU3RvcmFnZS5nZXRKU09OKE1haW4uQ0ZHKTtcclxuICAgIC8vICAgICAgICAgaWYgKGNmZykge1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKGNmZy5WRVIgPT0gdmVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5DZmcgPSBjZmc7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5bey57uP5oul5pyJLOS4jeeUqOabtOaWsFwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBEYXRlQ29udHJvbGxlci5TZXRDZmcoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjYWxsYmFsbCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmflrZjlnKjkvYbmmK/ov4fmnJ/kuoZcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShNYWluLkNGRyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgTmV0TWFuYWdlci5JbnN0YW5jZS5Qb3N0Q2ZnUmVxdWVzdCgoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBkYXRhLlZFUiA9IHZlcjtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SlNPTihNYWluLkNGRywgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuQ2ZnID0gZGF0YTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgRGF0ZUNvbnRyb2xsZXIuU2V0Q2ZnKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWxsKHRydWUpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0sIChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6YWN572u6I635Y+W5aSx6LSlXCIgKyBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhbGwoZmFsc2UpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuacrOWcsOayoeaciWNmZ1wiKTtcclxuICAgIC8vICAgICAgICAgICAgIE5ldE1hbmFnZXIuSW5zdGFuY2UuUG9zdENmZ1JlcXVlc3QoKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ1wiICsgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgZGF0YS5WRVIgPSB2ZXI7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SlNPTihNYWluLkNGRywgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5DZmcgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIERhdGVDb250cm9sbGVyLlNldENmZygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWxsKHRydWUpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSwgKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIumFjee9ruiOt+WPluWksei0pVwiICsgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvL31cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlck1vZGVsIHtcclxuICAgIHB1YmxpYyBnZXQgQ3VyTW9kZWwoKTogTmV0VXNlck1vZGVsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJNb2RlbDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlO1xyXG4gICAgcHVibGljIG1fY29kZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fZ2VuZGVyOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbV9jb3VudHJ5OiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb2RlOiBzdHJpbmcsIG5pY2tuYW1lOiBzdHJpbmcsIGF2YXRhcjogc3RyaW5nLCBnZW5kZXI6IG51bWJlciwgY291bnRyeTogc3RyaW5nLCBwcm92aW5jZTogc3RyaW5nLCBjaXR5OiBzdHJpbmcsIGRldmljZTogc3RyaW5nLCBzaGFyZV9pZDogc3RyaW5nLCBzY2VuZTogc3RyaW5nKSB7XHJcbiAgICAgICAgVXNlck1vZGVsLmluc3RhbmNlID0gdGhpcztcclxuICAgICAgICB0aGlzLm1fY29kZSA9IGNvZGU7XHJcbiAgICAgICAgdGhpcy5tX25pY2tuYW1lID0gbmlja25hbWUgPyBuaWNrbmFtZSA6IFwi5ri45a6iXCI7XHJcbiAgICAgICAgdGhpcy5tX2F2YXRhciA9IGF2YXRhciA/IGF2YXRhciA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5tX2dlbmRlciA9IGdlbmRlciA/IGdlbmRlciA6IDA7XHJcbiAgICAgICAgdGhpcy5tX2NpdHkgPSBjaXR5ID8gY2l0eSA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5tX2RldmljZSA9IGRldmljZSA/IGRldmljZSA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5tX3NoYXJlX2lkID0gc2hhcmVfaWQgPyBzaGFyZV9pZCA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5tX3NjZW5lID0gc2NlbmUgPyBzY2VuZSA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5tX2NvdW50cnkgPSBjb3VudHJ5ID8gY291bnRyeSA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5tX3Byb3ZpbmNlID0gcHJvdmluY2UgPyBwcm92aW5jZSA6IFwiXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbV9jaXR5OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9kZXZpY2U6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX3NoYXJlX2lkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9zY2VuZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogVXNlck1vZGVsIHtcclxuICAgICAgICBpZiAoVXNlck1vZGVsLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBVc2VyTW9kZWwuaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBVc2VyTW9kZWwuaW5zdGFuY2UgPSBuZXcgVXNlck1vZGVsKFwiMTFcIiwgXCLmuLjlrqJcIiwgXCJcIiwgbnVsbCwgXCJcIiwgXCJcIiwgXCJcIiwgXCJpcGhvbmU2c1wiLCBcIlwiLCBcIlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFVzZXJNb2RlbC5pbnN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbV9wcm92aW5jZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fbmlja25hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX2F2YXRhcjogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjdXJNb2RlbDogTmV0VXNlck1vZGVsO1xyXG4gICAgcHVibGljIFNldFVzZXJNb2RlbChfbW9kZWw6IE5ldFVzZXJNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuY3VyTW9kZWwgPSBfbW9kZWw7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iLCJpbXBvcnQgeyBNYWluIH0gZnJvbSBcIi4uL01haW5cIjtcclxuaW1wb3J0IFZpZXdNYW5hZ2VyIGZyb20gXCIuLi9nYW1lX2xvZ2ljL1ZpZXdNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFNldHRpbmdDb250cm9sbGVyIH0gZnJvbSBcIi4uL2dhbWVfbG9naWMvU2V0dGluZ0NvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHsgU2hhcmVNb2R1bGUgfSBmcm9tIFwiLi9TaGFyZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXNlck1vZGVsIGZyb20gXCIuL1VzZXJNb2RlbFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdYU2RrIHtcclxuICAgIHB1YmxpYyBzZXRTaGFyZUlkKHRpZCkge1xyXG4gICAgICAgIGlmICh0aWQgIT0gXCJcIiAmJiB0aWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlSWQgPSB0aWQ7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW0xPR106IHNldFNoYXJlT3BlbklkLnRpZD1cIiwgdGhpcy5zaGFyZUlkKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBXWFNkaztcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFdYU2RrIHtcclxuICAgICAgICByZXR1cm4gV1hTZGsuaW5zdGFuY2UgfHwgKFdYU2RrLmluc3RhbmNlID0gbmV3IFdYU2RrKCkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBMb2RpbmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBnZXRTaGFyZUlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJlSWQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IFNoYXJlU2NlbmUoc2NlbmVTKSB7XHJcbiAgICAgICAgaWYgKHNjZW5lUyAhPSBcIlwiICYmIHNjZW5lUyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhcmVTY2VuZSA9IHNjZW5lUztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaW5pdChjYjogYW55KSB7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93U2hhcmVNZW51KHtcclxuICAgICAgICAgICAgd2l0aFNoYXJlVGlja2V0OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy90aGlzLnNoZXpoaVNoYXJlTWVzc2FnZShudWxsLCBudWxsKTtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4Lm9uU2hvdyhmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBzaGFyZVRpY2tldCA9IG9wdGlvbi5zaGFyZVRpY2tldDtcclxuICAgICAgICAgICAgdmFyIHNoYXJlaWQgPSBvcHRpb24ucXVlcnkuc2hhcmVpZDtcclxuICAgICAgICAgICAgdmFyIHNjZW5lID0gZGVjb2RlVVJJQ29tcG9uZW50KG9wdGlvbi5xdWVyeS5zY2VuZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5YWo5bGAcGF0aD06XCIsIG9wdGlvbi5wYXRoKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVVUklDb21wb25lbnRcIiwgb3B0aW9uLnF1ZXJ5LnNjZW5lKTtcclxuICAgICAgICAgICAgdmFyIHNjZW5lUXVlcnkgPSBKU09OLnN0cmluZ2lmeShvcHRpb24ucXVlcnkpO1xyXG4gICAgICAgICAgICBpZiAoTWFpbi53eFZhbHVlID09XCJcIikgIHtcclxuICAgICAgICAgICAgICAgIE1haW4ud3hWYWx1ZSA9IG9wdGlvbi5zY2VuZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNjZW5lXCIsIG9wdGlvbi5zY2VuZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2NlbmVRdWVyeVwiLCBzY2VuZVF1ZXJ5KTtcclxuICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBvcHRpb24ucXVlcnkuY2hhbm5lbDtcclxuICAgICAgICAgICAgdmFyIGFwcGlkO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uLnJlZmVycmVySW5mbykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJyZWZlcnJlckluZm86XCIgKyBKU09OLnN0cmluZ2lmeShvcHRpb24ucmVmZXJyZXJJbmZvKSk7XHJcbiAgICAgICAgICAgICAgICBhcHBpZCA9IG9wdGlvbi5yZWZlcnJlckluZm8uYXBwSWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXBwaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uU2hvdyBhcHBpcyBpczpcIiwgYXBwaWQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uU2hvdyBhcHBpcyBpcyBudWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJyZWZlcnJlckluZm/kuLrnqbpcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoYW5uZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblNob3cgY2hhbm5lbCBpczpcIiwgY2hhbm5lbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2Ioc2hhcmVUaWNrZXQsIHNoYXJlaWQsIGNoYW5uZWwsIGFwcGlkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgU2hhcmVTY2VuZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaGFyZVNjZW5lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBTaGFyZU1lc3NhZ2UodGl0bGU/LCBpbWFnZVVybD8pIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciB0OiBudW1iZXIgPSBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuU2VydmVyVGltZTtcclxuICAgICAgICB2YXIgX3RpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgdmFyIF91cmwgPSBpbWFnZVVybDtcclxuICAgICAgICBpZiAoIV90aXRsZSkge1xyXG4gICAgICAgICAgICBfdGl0bGUgPSBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuc2hhcmV0aXRsZTtcclxuICAgICAgICAgICAgX3VybCA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5zaGFyZWltYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4Lm9uU2hhcmVBcHBNZXNzYWdlKCgpID0+ICh7XHJcbiAgICAgICAgICAgIHRpdGxlOiBfdGl0bGUsXHJcbiAgICAgICAgICAgIGltYWdlVXJsOiBfdXJsLFxyXG4gICAgICAgICAgICBxdWVyeTogXCJzaGFyZWlkPVwiICsgVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCArIFwiX1wiICsgdCArIFwiX1wiICsgTWF0aC5mbG9vcig5OTk5ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoKVxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyB3eF9sb2dpbihjYjogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoV1hTZGsuTG9kaW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBXWFNkay5Mb2RpbmluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFeGN1dGUgd3gubG9naW4hIHNoYXJlT3BlbklkOiBcIiArIHRoaXMuc2hhcmVJZCk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5sb2dpbih7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid3gubG9naW46IHN1Y2Nlc3MhIHJlcy5jb2RlPVwiICsgcmVzLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgV1hTZGsuTG9kaW5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWwhuimgeS8oOmAkueahOWPguaVsDpcIiArIHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2IocmVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfojrflj5bnlKjmiLfnmbvlvZXmgIHlpLHotKXvvIEnICsgcmVzLmVyck1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2IoXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHsgY29uc29sZS5sb2coXCJ3eC5sb2dpbjogZmFpbGVkLCByZXM9XCIgKyByZXMpOyBXWFNkay5Mb2RpbmluZyA9IGZhbHNlOyBjYihcImVycm9yXCIpOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNoYXJlSWQgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBzaGFyZVNjZW5lID0gXCJcIjtcclxuICAgIC8v5pi+56S65Yqg6L295L+h5oGvXHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dMb2FkaW5nKHRpdGxlOiBzdHJpbmcgPSBcIuWKoOi9veS4rS4uLlwiLCBpc1Nob3dXeCA9IHRydWUpIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIGlmIChpc1Nob3dXeCkge1xyXG4gICAgICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93TG9hZGluZyh7IHRpdGxlOiB0aXRsZSwgbWFzazogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBWaWV3TWFuYWdlci5JbnN0YW5jZS5PcGVuTWFzaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU3lzdGVtSW5mbygpIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTGF5YS5Ccm93c2VyLndpbmRvdy53eC5nZXRTeXN0ZW1JbmZvU3luYygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHByaXZhdGUgc3RhdGljIGJ1dHRvbjtcclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgc2hvd2JqV3hHYW1lUXVhbihmbGFnOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAvLyAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3ggPT0gbnVsbCkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGlmIChmbGFnKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChXZWlYaW5TREsuYnV0dG9uID09IG51bGwpIHtcclxuICAgIC8vICAgICAgICAgICAgIGxldCBpbmZvID0gTGF5YS5Ccm93c2VyLndpbmRvdy53eC5nZXRTeXN0ZW1JbmZvU3luYygpO1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgdG9wID0gNDc0ICogaW5mby53aW5kb3dIZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgIC8vICAgICAgICAgICAgIHZhciBoZWlnaHQgPSA5NCAqIGluZm8ud2luZG93SGVpZ2h0IC8gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgd2lkdGggPSBoZWlnaHQgKiA5NSAvIDk0O1xyXG4gICAgLy8gICAgICAgICAgICAgV2VpWGluU0RLLmJ1dHRvbiA9IExheWEuQnJvd3Nlci53aW5kb3cud3guY3JlYXRlR2FtZUNsdWJCdXR0b25cclxuICAgIC8vICAgICAgICAgICAgICAgICAoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlXCIsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGltYWdlOiAncmVzL3d4LnBuZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN0eWxlOlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiB0b3AsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgV2VpWGluU0RLLmJ1dHRvbi5zaG93KCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBpZiAoV2VpWGluU0RLLmJ1dHRvbikge1xyXG4gICAgLy8gICAgICAgICAgICAgV2VpWGluU0RLLmJ1dHRvbi5oaWRlKCk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICAvL+mAgOWHulxyXG5cclxuXHJcbiAgICAvLyDmmL7npLrmj5DnpLrkv6Hmga8vL1xyXG4gICAgcHVibGljIHN0YXRpYyBTaG93VG9hc3QodGV4dDogc3RyaW5nLCBpY29uID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIHZhciB0X2ljb24gPSBpY29uID8gXCJzdWNjZXNzXCIgOiBcIm5vbmVcIjtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93VG9hc3QoeyB0aXRsZTogdGV4dCwgaWNvbjogdF9pY29uIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8xOnBldCAyOuS6uueJqVxyXG4gICAgLy8gcHVibGljIHN0YXRpYyBYaWFuU2hpX01vZGVsKGNvbnRlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCwgdHlwZSA9IDEsIHRpdGxlID0gXCJcIikge1xyXG4gICAgLy8gICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93ICYmIExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgIC8vICAgICAgICAgaWYgKHR5cGUgPT0gMSkge1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGNhbmNlbFRleHQgPSBcIuaui+W/jeS4ouaOiVwiO1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGNvbmZpcm1UZXh0ID0gXCLluKbkuIrkuIDotbdcIjtcclxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgIHZhciBjYW5jZWxUZXh0ID0gXCLkuI3mg7NcIjtcclxuICAgIC8vICAgICAgICAgICAgIHZhciBjb25maXJtVGV4dCA9IFwi5oOzXCI7XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd01vZGFsKHtcclxuICAgIC8vICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgIC8vICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXHJcbiAgICAvLyAgICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxyXG4gICAgLy8gICAgICAgICAgICAgY29uZmlybVRleHQ6IGNvbmZpcm1UZXh0LFxyXG4gICAgLy8gICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+ehruWumicpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0cnVlKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+WPlua2iCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfSxcclxuICAgIC8vICAgICAgICAgICAgIGZhaWwocmVzPykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vlj5bmtognKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH0pXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgcHVibGljIHN0YXRpYyBTaG9ydFZpYnJhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3ggJiYgU2V0dGluZ0NvbnRyb2xsZXIuSW5zdGFuY2UudmlicmF0ZSkge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnZpYnJhdGVTaG9ydCh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgTG9uZ1ZpYnJhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3ggJiYgU2V0dGluZ0NvbnRyb2xsZXIuSW5zdGFuY2UudmlicmF0ZSkge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnZpYnJhdGVMb25nKHt9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIEhpZGVMb2FkaW5nKGlzU2hvd1d4ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93ICYmIExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgaWYgKGlzU2hvd1d4KSB7XHJcbiAgICAgICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmhpZGVMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgVmlld01hbmFnZXIuSW5zdGFuY2UuQ2xvc2VNYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBTdWNjZXNzKHN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vbkVuZChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZCwgICAgIC8v5YWz5Y2hSUQg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IFwi56ysXCIgKyBzdGFnZUlkICsgXCLlhbNcIiwgLy/lhbPljaHlkI3np7AgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IFwiY29tcGxldGVcIiwgICAvL+WFs+WNoeWujOaIkCAg5YWz5Y2h6L+b6KGM5Lit77yM55So5oi36Kem5Y+R55qE5pON5L2cICAgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zOlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXCLlhbPljaHlrozmiJBcIiAgIC8v5o+P6L+wXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICB9XHJcbiAgICAvL+iusOW9lemYv+aLieS4geS6i+S7tlxyXG4gICAgcHVibGljIHN0YXRpYyBBbGRFdmVudChldmVudE5hbWU6IHN0cmluZywga2V5Pzogc3RyaW5nLCB2YWx1ZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93ICYmIExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXkpIGtleSA9IFwi55So5oi3aWRcIjtcclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFNlbmRFdmVudChldmVudE5hbWUsIHsga2V5OiB2YWx1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIEZhaWwoc3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFN0YWdlLm9uRW5kKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUlkOiBzdGFnZUlkLCAgICAgLy/lhbPljaFJRCDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCLnrKxcIiArIHN0YWdlSWQgKyBcIuWFs1wiLCAvL+WFs+WNoeWQjeensCAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBldmVudDogXCJmYWlsXCIsICAgLy/lhbPljaHlrozmiJAgIOWFs+WNoei/m+ihjOS4re+8jOeUqOaIt+inpuWPkeeahOaTjeS9nCAgICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHBhcmFtczpcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFwi5YWz5Y2h5aSx6LSlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICB9XHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIGxldmVsZVJ1bmluZyhzdGFnZUlkOiBzdHJpbmcsIHVzZXJpZDogc3RyaW5nLCBldmVudHR5cGU6IG51bWJlciwgaXRlbU5hbWU6IHN0cmluZykge1xyXG4gICAgLy8gICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93ICYmIExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgIC8vICAgICAgICAgLy9MYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFN0YWdlLm9uUnVubmluZyh7XCJzdGFnZUlkXCI6c3RhZ2VJZCxcInN0YWdlTmFtZVwiOnN0YWdlTmFtZSxcInVzZXJJZFwiOnVzZXJpZH0pO1xyXG4gICAgLy8gICAgICAgICB2YXIgZXZlbnRUID0gZXZlbnR0eXBlID09IDAgPyBcImF3YXJkXCIgOiBcInJldml2ZVwiO1xyXG4gICAgLy8gICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFN0YWdlLm9uUnVubmluZyh7XHJcbiAgICAvLyAgICAgICAgICAgICBzdGFnZUlkOiBzdGFnZUlkLFxyXG4gICAgLy8gICAgICAgICAgICAgc3RhZ2VOYW1lOiBcIuesrFwiICsgc3RhZ2VJZCArIFwi5YWzXCIsXHJcbiAgICAvLyAgICAgICAgICAgICB1c2VySWQ6IHVzZXJpZCxcclxuICAgIC8vICAgICAgICAgICAgIGV2ZW50OiBldmVudFQsXHJcbiAgICAvLyAgICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbU5hbWUsXHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH0pXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgU3RhcnQoc3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFN0YWdlLm9uU3RhcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YWdlSWQ6IHN0YWdlSWQsICAgICAvL+WFs+WNoUlEIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiBcIuesrFwiICsgc3RhZ2VJZCArIFwi5YWzXCIsIC8v5YWz5Y2h5ZCN56ewICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2FtZV9TaGFyZShjYWxsYmFjazogRnVuY3Rpb24gPSBudWxsLCBjaGFubmVsOiBzdHJpbmcgPSBcIlwiKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdXJsO1xyXG4gICAgICAgIHZhciB0aXRsZTtcclxuICAgICAgICB1cmwgPSBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuc2hhcmVpbWFnZTtcclxuICAgICAgICB0aXRsZSA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5zaGFyZXRpdGxlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHVybCArIFwiICBcIiArIHRpdGxlKTtcclxuXHJcbiAgICAgICBcclxuICAgICAgICBpZiAoY2hhbm5lbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFdlaVhpblNESy5BbGRFdmVudChcIueUqOaIt+WIhuS6q1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHQ6IG51bWJlcjsvLyA9IFVzZXJNb2RlbC5HZXRfSW5zdGFuY2UuQ3VyTW9kZWwuSHVvUXVfU2VydmVyVGltZTtcclxuICAgICAgICB2YXIgcGF0aCA9IFwiXCI7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTaGFyZUFwcE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgIGltYWdlVXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHF1ZXJ5OiBcInNoYXJlaWQ9XCIgKyBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwudXNlcmlkICsgXCJfXCIgKyBcIm90aGVyXCIgKyBcIl9cIiArIHQgKyBcIl9cIiArIE1hdGguZmxvb3IoOTk5OSAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIFNoYXJlTW9kdWxlLkdvU2hhcmUoY2FsbGJhY2spO1xyXG5cclxuICAgIH1cclxufSIsIlxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaWN0aW9uYXJ5IHtcclxuICAgIHByaXZhdGUgX2xlbmd0aDogbnVtYmVyO1xyXG5cclxuICAgIHByaXZhdGUgX2NvbnRhaW5lcjogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjb250YWluZXIoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8v6I635Y+W5a2X5YW46ZW/5bqmICAgIFxyXG4gICAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvL+a3u+WKoFxyXG4gICAgcHVibGljIHNldChrZXk6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5fY29udGFpbmVyLmhhc093blByb3BlcnR5KGtleSkpICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb250YWluZXJba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5Yig6ZmkICAgICBcclxuICAgIHB1YmxpYyBkZWxldGUoa2V5OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmhhc093blByb3BlcnR5KGtleSkpICB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb250YWluZXJba2V5XTtcclxuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoLS07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v5p+l5om+ICAgXHJcbiAgICBwdWJsaWMgaGFzKGtleTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShrZXkpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8v6I635Y+WIFxyXG4gICAgcHVibGljIGdldChrZXk6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShrZXkpKSAge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyW2tleV07XHJcbiAgICAgICAgfSBlbHNlICB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/muIXnqbogICAgXHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0ge307XHJcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcclxuICAgIH1cclxuXHJcblxyXG59IiwiXHJcbmltcG9ydCBVc2VyTW9kZWwgZnJvbSBcIi4uL2dhbWVfbW9kdWxlL1VzZXJNb2RlbFwiO1xyXG5pbXBvcnQgVmVjdG9yMz1MYXlhLlZlY3RvcjM7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVfVG9vbCB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBHZXRPYmpLZXkob2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+i/lOWbnuS4gOS4qumaj+acuuaVtOaVsFttaW4sbWF4XVxyXG4gICAgcHVibGljIHN0YXRpYyByYW5kb21JbnQobWluOiBhbnksIG1heDogYW55KTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XHJcbiAgICB9XHJcbiAgICAvL3AxIOW3puWQkemHjyBwMlxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRBbmcoeHg6IG51bWJlciwgeXk6IG51bWJlciwgb2JsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAxODAgLyBNYXRoLlBJICogdGhpcy5nZXRSYWQoeHgsIHl5LCBvYmwpO1xyXG4gICAgfVxyXG4gICAgLy/ov5Tlm57op5LluqZcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmFkKHh4OiBudW1iZXIsIHl5OiBudW1iZXIsIG9ibDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICAvLyDmlrnms5XkuIDvvJphc2luKClcclxuICAgICAgICAvLyB2YXIgcmFkOk51bWJlciA9IHh4ID4gMCA/ICgoTWF0aC5QSSAqIDMpLzIgICsgTWF0aC5hc2luKC15eS9vYmwpKSA6IChNYXRoLlBJIC8gMiAtICBNYXRoLmFzaW4oLXl5L29ibCkpO1xyXG4gICAgICAgIC8vIOaWueazleS6jO+8mmFjb3MoKVxyXG4gICAgICAgIHZhciByYWQ6IG51bWJlciA9IHl5IDwgMCA/IE1hdGguYWNvcyh4eCAvIG9ibCkgOiAoTWF0aC5QSSAqIDIgLSBNYXRoLmFjb3MoeHggLyBvYmwpKTtcclxuICAgICAgICAvLyDmlrnms5XkuInvvJphdGFuMigpXHJcbiAgICAgICAgLy8gdmFyIHJhZDpOdW1iZXIgPSB5eSA8IDAgPyBNYXRoLmF0YW4yKC15eSwgeHgpIDogTWF0aC5QSSAqIDIgKyBNYXRoLmF0YW4yKC15eSwgeHgpO1xyXG4gICAgICAgIHJldHVybiByYWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRNX1ZlY3Rvcih2MTogTGF5YS5WZWN0b3IzLCB2MjogTGF5YS5WZWN0b3IzKTogTGF5YS5WZWN0b3IzIHtcclxuICAgICAgICBsZXQgdGVtcCA9IG5ldyBMYXlhLlZlY3RvcjMoKTtcclxuICAgICAgICBMYXlhLlZlY3RvcjMuYWRkKHYxLCB2MiwgdGVtcCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMYXlhLlZlY3RvcjModGVtcC54ICogMC41LCB0ZW1wLnkgKiAwLjUsIHRlbXAueiAqIDAuNSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVmbGVjdEFuZyhkaXI6VmVjdG9yMyl7XHJcbiAgICAgICAgdmFyIHh4PU1hdGguYWJzKGRpci54KTtcclxuICAgICAgICB2YXIgeno9TWF0aC5hYnMoZGlyLnopO1xyXG4gICAgICAgIHZhciBvYmw9IE1hdGguc3FydChNYXRoLnBvdyhkaXIueCwgMikgKyBNYXRoLnBvdyhkaXIueiwgMikpO1xyXG4gICAgICAgIHJldHVybiA5MC0gMTgwIC8gTWF0aC5QSSAqIE1hdGguYWNvcyh4eCAvIG9ibCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyByYW5kb21fMXRvMSgpOm51bWJlcnsgXHJcbiAgICAgICAgdmFyIGlzemhlbmc9TWF0aC5yYW5kb20oKT4wLjU/LTE6MTtcclxuICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSppc3poZW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0NjRFbmNvZGUoc3RyKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgYzEsIGMyLCBjMztcclxuICAgICAgICB2YXIgYmFzZTY0RW5jb2RlQ2hhcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIjtcclxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGgsIHN0cmluZyA9ICcnO1xyXG4gICAgICAgIHdoaWxlIChpIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIGMxID0gc3RyLmNoYXJDb2RlQXQoaSsrKSAmIDB4ZmY7XHJcbiAgICAgICAgICAgIGlmIChpID09IGxlbikge1xyXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdChjMSA+PiAyKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKGMxICYgMHgzKSA8PCA0KTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBcIj09XCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgICAgIGlmIChpID09IGxlbikge1xyXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdChjMSA+PiAyKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKChjMSAmIDB4MykgPDwgNCkgfCAoKGMyICYgMHhGMCkgPj4gNCkpO1xyXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdCgoYzIgJiAweEYpIDw8IDIpO1xyXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IFwiPVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYzMgPSBzdHIuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KGMxID4+IDIpO1xyXG4gICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KCgoYzEgJiAweDMpIDw8IDQpIHwgKChjMiAmIDB4RjApID4+IDQpKTtcclxuICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdCgoKGMyICYgMHhGKSA8PCAyKSB8ICgoYzMgJiAweEMwKSA+PiA2KSk7XHJcbiAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzMgJiAweDNGKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgU2V0SHVUdWlMaXN0KGxpc3Q6TGF5YS5MaXN0LGRhdGE/LHNjcm9sOm51bWJlcj0xLHR5cGU6bnVtYmVyPTApeyAvL3Njcm9sIDE656uW55qEICAy5qiq55qEXHJcbiAgICAvLyAgICAgdmFyIGFycj1kYXRhP2RhdGE6RllIRF9TZGsucHVzaERhdGE7XHJcbiAgICAvLyAgICAgbGlzdC5zZWxlY3RFbmFibGUgPSBmYWxzZTtcclxuICAgIC8vICAgICBzY3JvbD09MT9saXN0LnZTY3JvbGxCYXJTa2luID0gXCJcIjpsaXN0LmhTY3JvbGxCYXJTa2luID0gXCJcIjtcclxuICAgIC8vICAgICBsaXN0LnJlbmRlckhhbmRsZXIgPSBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMudXBkYXRlSXRlbSwgW3R5cGVdLCBmYWxzZSk7XHJcbiAgICAvLyAgICAgbGlzdC5hcnJheSA9IGFycjtcclxuICAgIC8vICAgICBsaXN0LnJlZnJlc2goKTtcclxuICAgIC8vICB9XHJcbiAgICAvLyAgcHJpdmF0ZSBzdGF0aWMgdXBkYXRlSXRlbSh0eXBlLGNlbGw6IExheWEuQm94LCBpbmRleDogbnVtYmVyKXtcclxuICAgIC8vICAgICAgdmFyIGFkaXRlbT1jZWxsLmdldENvbXBvbmVudChIdWlUdWlJdGVtKWFzIEh1aVR1aUl0ZW07XHJcbiAgICAvLyAgICAgIGFkaXRlbS5SZWZyZXNoKHR5cGUpO1xyXG4gICAgLy8gIH1cclxuICAgIC8vICBwdWJsaWMgc3RhdGljIG1ha2VSYW5kb21BcnIoYXJyTGlzdCxudW0pe1xyXG4gICAgLy8gICAgIGlmKG51bT5hcnJMaXN0Lmxlbmd0aCl7XHJcbiAgICAvLyAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB2YXIgdGVtcEFycj1hcnJMaXN0LnNsaWNlKDApO1xyXG4gICAgLy8gICAgIHZhciBuZXdBcnJMaXN0PVtdOyAgICBcclxuICAgIC8vICAgICBmb3IodmFyIGk9MDtpPG51bTtpKyspe1xyXG4gICAgLy8gICAgICAgICB2YXIgcmFuZG9tPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoodGVtcEFyci5sZW5ndGgtMSkpO1xyXG4gICAgLy8gICAgICAgICB2YXIgYXJyPXRlbXBBcnJbcmFuZG9tXTtcclxuICAgIC8vICAgICAgICAgdGVtcEFyci5zcGxpY2UocmFuZG9tLCAxKTtcclxuICAgIC8vICAgICAgICAgbmV3QXJyTGlzdC5wdXNoKGFycik7ICAgIFxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gbmV3QXJyTGlzdDtcclxuICAgIC8vIH1cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgQ29weUFycihvKTphbnl7XHJcbiAgICAvLyAgICAgdmFyIGFycj1bXTtcclxuICAgIC8vICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgby5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgIC8vICAgICAgICAgY29uc3QgZWxlbWVudCA9IG9baW5kZXhdO1xyXG4gICAgLy8gICAgICAgICBhcnIucHVzaChlbGVtZW50KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIGFycjtcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgLy8gcHVibGljIHN0YXRpYyBTaG93UWlhbkRhbygpOiBib29sZWFuIHtcclxuICAgIC8vICAgICBsZXQgdG9kYXlaZXJvID0gbmV3IERhdGUoVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLlNlcnZlclRpbWUgKiAxMDAwKTtcclxuICAgIC8vICAgICB0b2RheVplcm8uc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAvLyAgICAgaWYoIVBsYXllck1hbmFnZXIuSW5zdGFuY2Uuc2lnbilyZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICB2YXIgbGFzdFRpbWUgPSBOdW1iZXIoUGxheWVyTWFuYWdlci5JbnN0YW5jZS5zaWduW1wic2lnbl90aW1lXCJdKSAqIDEwMDA7XHJcbiAgICAvLyAgICAgbGV0IGxhc3RTaWduVGltZSA9IG5ldyBEYXRlKGxhc3RUaW1lKTtcclxuICAgIC8vICAgICBpZiAobGFzdFRpbWUgPT0gMCkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgaWYgKGxhc3RTaWduVGltZS52YWx1ZU9mKCkgPCB0b2RheVplcm8udmFsdWVPZigpKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBDcmVhdGVUZXh0KGNvbnRlbnQ6c3RyaW5nKXtcclxuICAgICAgICB2YXIgY3VyVGV4dCA9IG5ldyBMYXlhLlRleHQ7XHJcbiAgICAgICAgY3VyVGV4dC53aWR0aCA9IDMwMDtcclxuICAgICAgICBjdXJUZXh0LmhlaWdodCA9IDUwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGN1clRleHQuYWxpZ24gPSBcImNlbnRlclwiO1xyXG4gICAgICAgIGN1clRleHQudmFsaWduID0gXCJtaWRkbGVcIjtcclxuICAgICAgICBjdXJUZXh0LmZvbnQgPSBcIk1pY3Jvc29mdCBZYUhlaVwiO1xyXG4gICAgICAgIGN1clRleHQuZm9udFNpemUgPSAzNTtcclxuICAgICAgICBjdXJUZXh0LmNvbG9yID0gXCIjZmY4ZTAwXCI7XHJcbiAgICAgICAgY3VyVGV4dC5ib2xkID0gdHJ1ZTtcclxuICAgICAgICBjdXJUZXh0LmZvbnQgPSBcIk1pY3Jvc29mdCBZYUhlaVwiO1xyXG4gICAgICAgIGN1clRleHQudGV4dCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgY3VyVGV4dC54ID0gNjA7XHJcbiAgICAgICAgY3VyVGV4dC55ID0gMTA7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5hZGRDaGlsZChjdXJUZXh0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhjdXJUZXh0KTtcclxuICAgICAgICB2YXIgdHdlZW4gPSBMYXlhLlR3ZWVuLnRvKHBhcmVudCx7eTpjdXJUZXh0LnkgLSAyMDB9LDEwMDAsTGF5YS5FYXNlLmV4cG9Jbk91dCxMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsKCk9PlxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdHdlZW4uY2xlYXIoKTtcclxuICAgICAgICAgICAgY3VyVGV4dC5kZXN0cm95KCk7XHJcbiAgICAgICAgfSksMTAwKTtcclxuICAgIH1cclxufSIsImltcG9ydCBUd2VlbiA9IExheWEuVHdlZW47XHJcbmltcG9ydCB7IFNldHRpbmdDb250cm9sbGVyIH0gZnJvbSBcIi4uLy4uL2dhbWVfbG9naWMvU2V0dGluZ0NvbnRyb2xsZXJcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VSdW5UaW1lIGV4dGVuZHMgTGF5YS5JbWFnZSB7XHJcbiAgICBwdWJsaWMgc2NhbGVUaW1lOiBudW1iZXIgPSA4MDtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgLy/orr7nva7nu4Tku7bnmoTkuK3lv4PngrlcclxuICAgICAgICB0aGlzLmFuY2hvclggPSB0aGlzLmFuY2hvclkgPSAwLjU7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX0RPV04sIHRoaXMsIHRoaXMuc2NhbGVTbWFsbCk7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcclxuICAgICAgICB0aGlzLm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfbWNsaWNrSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIGJpZ1R3ZWVuOiBUd2VlbjtcclxuICAgIHByaXZhdGUgU21hbGxUd2VlbjogVHdlZW47XHJcbiAgICBwcml2YXRlIGNsaWNrSWQ9ZmFsc2U7XHJcbiAgICBwcml2YXRlIHNjYWxlQmlnKGU6TGF5YS5FdmVudCk6IHZvaWQge1xyXG4gICAgICAgIC8v5Y+Y5aSn6L+Y5Y6f55qE57yT5Yqo5pWI5p6cXHJcbiAgICAgXHJcbiAgICAgICAgaWYoIXRoaXMuY2xpY2tJZClyZXR1cm47XHJcbiAgICAgICAgdGhpcy5jbGlja0lkPWZhbHNlO1xyXG4gICAgICBcclxuICAgICAgICB0aGlzLmJpZ1R3ZWVuID0gVHdlZW4udG8odGhpcywgeyBzY2FsZVg6IDEsIHNjYWxlWTogMSB9LCB0aGlzLnNjYWxlVGltZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX21jbGlja0hhbmRsZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWNsaWNrSGFuZGxlcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgc2NhbGVTbWFsbChlOkxheWEuRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICAvL+e8qeWwj+iHszAuOOeahOe8k+WKqOaViOaenFxyXG4gICAgICAgIFNldHRpbmdDb250cm9sbGVyLkluc3RhbmNlLl9DbGljaygpO1xyXG4gICAgICAgIHRoaXMuY2xpY2tJZD10cnVlO1xyXG4gICAgICAgIHRoaXMuU21hbGxUd2VlbiA9IFR3ZWVuLnRvKHRoaXMsIHsgc2NhbGVYOiAwLjgsIHNjYWxlWTogMC44IH0sIHRoaXMuc2NhbGVUaW1lKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBDbGVhclJ1blRpbWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmlnVHdlZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5iaWdUd2Vlbi5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5TbWFsbFR3ZWVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU21hbGxUd2Vlbi5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLnNjYWxlU21hbGwpO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfVVAsIHRoaXMsIHRoaXMuc2NhbGVCaWcpO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcclxuICAgICAgICB0aGlzLl9tY2xpY2tIYW5kbGVyID0gbnVsbDtcclxuICAgIH1cclxufSIsImltcG9ydCB7IHVpIH0gZnJvbSBcIi4uL3VpL2xheWFNYXhVSVwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFJvbGVDb250cm9sbGVyIH0gZnJvbSBcIi4uL2dhbWVfbG9naWMvUm9sZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IFZlY3RvcjMgPSBMYXlhLlZlY3RvcjM7XHJcbmltcG9ydCB7IEdhbWVDb250cm9sbGVyIH0gZnJvbSBcIi4uL2dhbWVfbG9naWMvR2FtZUNvbnRyb2xsZXJcIjtcclxuZXhwb3J0IGNsYXNzIGdhbWVfdWkgZXh0ZW5kcyB1aS5nYW1lX3VpVUkgaW1wbGVtZW50cyBVSV9JbnRlcmZhY2Uge1xyXG5cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUhhbmRlcigpO1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vbihMYXlhLkV2ZW50LlJFU0laRSwgdGhpcywgdGhpcy5yZXNpemVIYW5kZXIpO1xyXG4gICAgfVxyXG4gICAgcmVzaXplSGFuZGVyKCkge1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBPblNob3coZGF0YT86IGFueSkge1xyXG4gICAgICAgIHRoaXMuVWlFdmVudEhhbmRsZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBVaUV2ZW50SGFuZGxlcigpIHtcclxuICAgICAgICB0aGlzLm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5PbkNsaWNrRG93bik7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX09VVCwgdGhpcywgdGhpcy5PbkNsaWNrVXApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNkb3duID0gZmFsc2U7XHJcbiAgICBPbkNsaWNrRG93bihlOiBMYXlhLkV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0IGluc3RhbmNlb2YgTGF5YS5VSUNvbXBvbmVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghR2FtZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZVN0YXJ0IHx8IEdhbWVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVvdmVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc2Rvd24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLk9uU2xpZGVyKTtcclxuICAgICAgICB0aGlzLmN1ck1vdXNlUG9zID0gbmV3IFZlY3RvcjMoTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYLCBMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0UG9zID0gdGhpcy5jdXJNb3VzZVBvcy5jbG9uZSgpO1xyXG4gICAgICAgIHRoaXMuTW91c2VEKCk7XHJcbiAgICB9XHJcbiAgICBPbkNsaWNrVXAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzZG93bikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghR2FtZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZVN0YXJ0IHx8IEdhbWVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVvdmVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc2Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMuT25TbGlkZXIpO1xyXG4gICAgICAgIHRoaXMuZW5kUG9zID0gdGhpcy5jdXJNb3VzZVBvcy5jbG9uZSgpO1xyXG4gICAgICAgIHRoaXMuTW91c2VVKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3VyTW91c2VQb3M6IFZlY3RvcjM7XHJcbiAgICBPblNsaWRlcigpIHtcclxuICAgICAgICB2YXIgTW91c2VQb3MgPSBuZXcgVmVjdG9yMyhMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVgsIExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSk7XHJcbiAgICAgICAgdmFyIG9mZmVzdFggPSBNb3VzZVBvcy54IC0gdGhpcy5jdXJNb3VzZVBvcy54O1xyXG4gICAgICAgIGlmIChvZmZlc3RYID4gMCkgb2ZmZXN0WCA9IG9mZmVzdFggPCA1ID8gb2ZmZXN0WCA6IDU7XHJcbiAgICAgICAgaWYgKG9mZmVzdFggPCAwKSBvZmZlc3RYID0gb2ZmZXN0WCA+IC01ID8gb2ZmZXN0WCA6IC01O1xyXG4gICAgICAgIHZhciByb3RhdGVEaXIgPSBuZXcgVmVjdG9yMygwLCAtb2ZmZXN0WCAqIDAuMDEsIDApO1xyXG4gICAgICAgIFJvbGVDb250cm9sbGVyLkluc3RhbmNlLlJvbGVSb3RhdGlvbihyb3RhdGVEaXIpO1xyXG4gICAgICAgIHRoaXMuY3VyTW91c2VQb3MgPSBuZXcgVmVjdG9yMyhMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVgsIExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSk7O1xyXG4gICAgfVxyXG4gICAgT25DbG9zZSgpIHtcclxuICAgICAgICBFdmVudE1hbmFnZXIub2ZmKExheWEuRXZlbnQuUkVTSVpFLCB0aGlzLCB0aGlzLnJlc2l6ZUhhbmRlcik7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLk9uQ2xpY2tEb3duKTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9PVVQsIHRoaXMsIHRoaXMuT25DbGlja1VwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy/ngrnlh7vnmoTliKTmlq1cclxuICAgIHByaXZhdGUgc3RhcnRQb3M7XHJcbiAgICBwcml2YXRlIGlzZXhjZWVkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIE1vdXNlRCgpIHtcclxuICAgICAgICB0aGlzLmlzZXhjZWVkID0gZmFsc2U7XHJcbiAgICAgICAgTGF5YS50aW1lci5vbmNlKDUwMCwgdGhpcywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzZXhjZWVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZW5kUG9zO1xyXG4gICAgcHJpdmF0ZSBNb3VzZVUoKSB7XHJcbiAgICAgICAgdmFyIGRpcyA9IFZlY3RvcjMuZGlzdGFuY2UodGhpcy5zdGFydFBvcywgdGhpcy5lbmRQb3MpO1xyXG4gICAgICAgIGlmIChkaXMgPiAzMCB8fCB0aGlzLmlzZXhjZWVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBHYW1lQ29udHJvbGxlci5JbnN0YW5jZS5IaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuLi91aS9sYXlhTWF4VUlcIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgVmlld01hbmFnZXIsIHsgVmlld1R5cGUgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9WaWV3TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBHYW1lQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL0dhbWVDb250cm9sbGVyXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIG1haW5fdWkgZXh0ZW5kcyB1aS5tYWluX3VpVUkgaW1wbGVtZW50cyBVSV9JbnRlcmZhY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIYW5kZXIoKTtcclxuICAgICAgICBFdmVudE1hbmFnZXIub24oTGF5YS5FdmVudC5SRVNJWkUsIHRoaXMsIHRoaXMucmVzaXplSGFuZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBPblNob3coZGF0YT86IGFueSkge1xyXG4gICAgICAgIHRoaXMuQnV0dG9uQ2xpY2tIYW5kbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNpemVIYW5kZXIoKSB7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgQnV0dG9uQ2xpY2tIYW5kbGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydF9idG4uX21jbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBWaWV3TWFuYWdlci5JbnN0YW5jZS5PcGVuVmlldyhWaWV3VHlwZS5nYW1lX3VpKTtcclxuICAgICAgICAgICAgR2FtZUNvbnRyb2xsZXIuSW5zdGFuY2UuR2FtZVN0YXJ0KCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIE9uQ2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydF9idG4uQ2xlYXJSdW5UaW1lKCk7XHJcbiAgICB9XHJcbn0iLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cbmltcG9ydCBWaWV3PUxheWEuVmlldztcclxuaW1wb3J0IERpYWxvZz1MYXlhLkRpYWxvZztcclxuaW1wb3J0IFNjZW5lPUxheWEuU2NlbmU7XG52YXIgUkVHOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcbmV4cG9ydCBtb2R1bGUgdWkge1xyXG4gICAgZXhwb3J0IGNsYXNzIGdhbWVfdWlVSSBleHRlbmRzIFNjZW5lIHtcclxuICAgICAgICBwdWJsaWMgc3RhdGljICB1aVZpZXc6YW55ID17XCJ0eXBlXCI6XCJTY2VuZVwiLFwicHJvcHNcIjp7XCJ6T3JkZXJcIjoxLFwid2lkdGhcIjo3MjAsXCJoZWlnaHRcIjoxMjgwfSxcImNvbXBJZFwiOjIsXCJsb2FkTGlzdFwiOltdLFwibG9hZExpc3QzRFwiOltdfTtcclxuICAgICAgICBjb25zdHJ1Y3RvcigpeyBzdXBlcigpfVxyXG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHN1cGVyLmNyZWF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVmlldyhnYW1lX3VpVUkudWlWaWV3KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5nYW1lX3VpVUlcIixnYW1lX3VpVUkpO1xyXG4gICAgZXhwb3J0IGNsYXNzIG1haW5fdWlVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBzdGFydF9idG46YW55O1xuICAgICAgICBwdWJsaWMgc3RhdGljICB1aVZpZXc6YW55ID17XCJ0eXBlXCI6XCJTY2VuZVwiLFwicHJvcHNcIjp7XCJ6T3JkZXJcIjoxLFwid2lkdGhcIjo3MjAsXCJoZWlnaHRcIjoxMjgwfSxcImNvbXBJZFwiOjIsXCJjaGlsZFwiOlt7XCJ0eXBlXCI6XCJJbWFnZVwiLFwicHJvcHNcIjp7XCJ5XCI6NjQwLFwieFwiOjM2MCxcInZhclwiOlwic3RhcnRfYnRuXCIsXCJza2luXCI6XCJtYWluX3Jlcy9qaWVtaWFuX3hpbl8xXzEucG5nXCIsXCJydW50aW1lXCI6XCJnYW1lX3VpL1J1blRpbWVTY3JpcHQvQnV0dG9uUnVuVGltZS50c1wiLFwiY2VudGVyWVwiOjAsXCJjZW50ZXJYXCI6MCxcImFuY2hvcllcIjowLjUsXCJhbmNob3JYXCI6MC41fSxcImNvbXBJZFwiOjN9XSxcImxvYWRMaXN0XCI6W1wibWFpbl9yZXMvamllbWlhbl94aW5fMV8xLnBuZ1wiXSxcImxvYWRMaXN0M0RcIjpbXX07XHJcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVZpZXcobWFpbl91aVVJLnVpVmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgUkVHKFwidWkubWFpbl91aVVJXCIsbWFpbl91aVVJKTtcclxufVxyIl19