UISplash.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/scriptMain/UISplash.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, 'a7fccbIsZxCXprprdvu8Oxq', 'UISplash');
  13. // scriptMain/UISplash.ts
  14. "use strict";
  15. var __extends = (this && this.__extends) || (function () {
  16. var extendStatics = function (d, b) {
  17. extendStatics = Object.setPrototypeOf ||
  18. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  19. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  20. return extendStatics(d, b);
  21. };
  22. return function (d, b) {
  23. extendStatics(d, b);
  24. function __() { this.constructor = d; }
  25. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  26. };
  27. })();
  28. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  29. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  30. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  31. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  32. return c > 3 && r && Object.defineProperty(target, key, r), r;
  33. };
  34. Object.defineProperty(exports, "__esModule", { value: true });
  35. // 不允许在这个脚本中引用其他文件
  36. var _a = cc._decorator, ccclass = _a.ccclass, menu = _a.menu, property = _a.property;
  37. var UISplash = /** @class */ (function (_super) {
  38. __extends(UISplash, _super);
  39. function UISplash() {
  40. var _this = _super !== null && _super.apply(this, arguments) || this;
  41. _this.txtVersion = null;
  42. _this.txtTips = null;
  43. _this.bg1 = null;
  44. _this.bg2 = null;
  45. return _this;
  46. }
  47. UISplash.prototype.onLoad = function () {
  48. cc.game.clear();
  49. cc.debug.setDisplayStats(false);
  50. //开启强制合批
  51. cc.macro.CLEANUP_IMAGE_CACHE = true;
  52. cc.dynamicAtlasManager.enabled = false;
  53. window["fps"] = function () {
  54. cc.debug.setDisplayStats(!cc.debug.isDisplayStats());
  55. if (cc.debug.isDisplayStats()) {
  56. setTimeout(function () {
  57. if (cc.find('PROFILER-NODE')) {
  58. cc.find('PROFILER-NODE').scale = 2;
  59. }
  60. }, 200);
  61. }
  62. };
  63. //更新新版本,删除旧缓存
  64. if (cc.sys.platform == cc.sys.WECHAT_GAME) {
  65. //小游戏平台删除过期缓存,防止缓存超过50M
  66. // cc.assetManager.cacheManager.clearLRU()
  67. cc.assetManager.cacheManager.autoClear = true;
  68. }
  69. };
  70. UISplash.prototype.start = function () {
  71. var _this = this;
  72. //电魂sdk漏斗打点
  73. if (window['dhSDK']) {
  74. // 事件ID
  75. var eventId = "110001::GAME_CLIENT_SDK_ACTIVATE"; // 表示SDK客户端上报的启动事件
  76. // 事件参数
  77. var eventParams = {};
  78. // 必填参数
  79. eventParams["logLevel"] = "d";
  80. eventParams["logContent"] = "游戏首包加载结束";
  81. // 执行上报
  82. window['dhSDK'].trackEvent(eventId, eventParams);
  83. }
  84. //电魂sdk漏斗打点
  85. if (window['dhSDK']) {
  86. // 事件ID
  87. var eventId = "110000::GAME_CLIENT_LAUNCH"; // 表示SDK客户端上报的启动事件
  88. // 事件参数
  89. var eventParams = {};
  90. // 必填参数
  91. eventParams["logLevel"] = "d";
  92. eventParams["logContent"] = "SDK启动";
  93. // 执行上报
  94. window['dhSDK'].trackEvent(eventId, eventParams);
  95. }
  96. if (!cc.Node.prototype["clickChange"]) {
  97. var prototype = cc.Node.prototype;
  98. var dispatchEvent_1 = prototype.dispatchEvent;
  99. prototype.dispatchEvent = function (event) {
  100. try {
  101. if (event.type == cc.Node.EventType.TOUCH_END) {
  102. cc.game.emit("GameEvent.ON_CLICK", event);
  103. }
  104. dispatchEvent_1.bind(this)(event);
  105. }
  106. catch (error) {
  107. console.error("按钮报错", "", "", error.message, error.stack);
  108. if (window["sendClientErr"]) {
  109. window["sendClientErr"]([error.message.substring(0, 200), error.stack.substring(0, 400)]);
  110. }
  111. }
  112. };
  113. cc.Node.prototype["clickChange"] = true;
  114. }
  115. // 游戏速率变量
  116. cc.director["_kSpeed"] = 1;
  117. var _originCalculateDeltaTime = cc.Director.prototype["calculateDeltaTime"];
  118. cc.director["calculateDeltaTime"] = function (now) {
  119. _originCalculateDeltaTime.call(this, now);
  120. this._deltaTime *= this._kSpeed;
  121. };
  122. //设置速率
  123. // cc.director.setSpeed = function (speed) {
  124. // cc.director["_kSpeed"] = speed;
  125. // }
  126. console.log("===脚本分包加载开始");
  127. var time = new Date().getTime();
  128. // cc.assetManager
  129. this.txtTips.string = "正在加载本地资源...";
  130. cc.assetManager.loadBundle("scriptAsset", function (err, bundle) {
  131. if (err) {
  132. console.error("load scriptAsset " + 0 + " err:" + 1, bundle, err);
  133. return;
  134. }
  135. console.log("===脚本分包加载完成", new Date().getTime() - time);
  136. _this.txtTips.string = "正在加载配置...";
  137. Promise.resolve().then(function () { return require("RemoteConfig"); }).then(function (remoteParam) {
  138. var remoteConfig = remoteParam.default;
  139. Promise.resolve().then(function () { return require("GameController"); }).then(function (gameCtrlParam) {
  140. var gameController = gameCtrlParam.default;
  141. Promise.resolve().then(function () { return require("Config"); }).then(function (cfgParam) {
  142. var config = cfgParam.default;
  143. // pad
  144. config.isPad = cc.winSize.width / cc.winSize.height > (750 / 1334);
  145. // 显示版本号
  146. _this.txtVersion.node.active = true;
  147. _this.txtVersion.string = "版本号:" + config.appVersion;
  148. _this.txtTips.string = "游戏初始化中(50%)...";
  149. remoteConfig.init(function () {
  150. _this.txtTips.string = "游戏初始化中(80%)...";
  151. //电魂sdk漏斗打点
  152. if (window['dhSDK']) {
  153. // 事件ID
  154. var eventId = "100102::GAME_CREATE_VERSION_SUCCESS"; // 表示SDK客户端上报的启动事件
  155. // 事件参数
  156. var eventParams = {};
  157. // 必填参数
  158. eventParams["logLevel"] = "d";
  159. eventParams["logContent"] = "检查版本结束";
  160. // 执行上报
  161. window['dhSDK'].trackEvent(eventId, eventParams);
  162. }
  163. //电魂sdk漏斗打点
  164. if (window['dhSDK']) {
  165. // 事件ID
  166. var eventId = "211000::GAME_CLIENT_INIT_START"; // 表示SDK客户端上报的启动事件
  167. // 事件参数
  168. var eventParams = {};
  169. // 必填参数
  170. eventParams["logLevel"] = "d";
  171. eventParams["logContent"] = "游戏资源包加载进度条开始";
  172. // 执行上报
  173. window['dhSDK'].trackEvent(eventId, eventParams);
  174. }
  175. gameController.init(function (isSucc) {
  176. if (isSucc) {
  177. //电魂sdk漏斗打点
  178. if (window['dhSDK']) {
  179. // 事件ID
  180. var eventId = "211001::GAME_CLIENT_INIT_END"; // 表示SDK客户端上报的启动事件
  181. // 事件参数
  182. var eventParams = {};
  183. // 必填参数
  184. eventParams["logLevel"] = "d";
  185. eventParams["logContent"] = "游戏资源包加载进度条结束";
  186. // 执行上报
  187. window['dhSDK'].trackEvent(eventId, eventParams);
  188. }
  189. _this.txtTips.string = "游戏初始化中(100%)...";
  190. // 计算屏幕宽度, 考虑刘海屏
  191. config.safeAreaRect = cc.sys.getSafeAreaRect();
  192. // //是否是电脑端微信
  193. // let isWinByWx = false
  194. // if (cc.sys.platform == cc.sys.WECHAT_GAME) {
  195. // let sysInfo = wx.getSystemInfoSync();
  196. // if (sysInfo?.platform == "windows" || sysInfo?.platform == "mac") {
  197. // isWinByWx = true
  198. // }
  199. // }
  200. if (config.safeAreaRect.y == 0 && cc.winSize.width / cc.winSize.height < 0.5) {
  201. //识别不到安全区域的设备,强制预留
  202. config.safeAreaRect.y = 50;
  203. }
  204. console.log("安全区域:", config.safeAreaRect.x, config.safeAreaRect.y, config.safeAreaRect.width, config.safeAreaRect.height);
  205. var perY = config.safeAreaRect.y / (config.safeAreaRect.height);
  206. console.log("屏幕宽高:", cc.winSize.width, cc.winSize.height);
  207. var realSafeY = config.safeAreaRect.y; //perY * cc.winSize.height //config.safeAreaRect.y
  208. console.log("占用百分比:", perY, "真实安全区域像素x:", realSafeY);
  209. config.realHeight = cc.winSize.height - Math.abs(realSafeY) * 1.5;
  210. console.log("最终高度:", config.realHeight);
  211. if (cc.sys.isNative && (cc.sys.platform == cc.sys.ANDROID || cc.sys.platform == cc.sys.IPHONE || cc.sys.platform == cc.sys.IPAD)) {
  212. //等待检测更新后再切换场景
  213. var hotUpdateCom = _this.node.getComponent("HotUpdate");
  214. hotUpdateCom.checkUpdate();
  215. }
  216. else {
  217. // 加载资源
  218. cc.director.loadScene("loading");
  219. }
  220. }
  221. });
  222. });
  223. // 设置游戏主循环刷新帧率
  224. cc.game.setFrameRate(config.GAME_FRAME);
  225. // 设置动画间隔
  226. // cc.director.setAnimationInterval(1000 / config.GAME_FRAME)
  227. });
  228. });
  229. });
  230. });
  231. };
  232. __decorate([
  233. property(cc.Label)
  234. ], UISplash.prototype, "txtVersion", void 0);
  235. __decorate([
  236. property(cc.Label)
  237. ], UISplash.prototype, "txtTips", void 0);
  238. __decorate([
  239. property(cc.Node)
  240. ], UISplash.prototype, "bg1", void 0);
  241. __decorate([
  242. property(cc.Node)
  243. ], UISplash.prototype, "bg2", void 0);
  244. UISplash = __decorate([
  245. ccclass,
  246. menu("UI/scene/UISplash")
  247. ], UISplash);
  248. return UISplash;
  249. }(cc.Component));
  250. exports.default = UISplash;
  251. cc._RF.pop();
  252. }
  253. if (nodeEnv) {
  254. __define(__module.exports, __require, __module);
  255. }
  256. else {
  257. __quick_compile_project__.registerModuleFunc(__filename, function () {
  258. __define(__module.exports, __require, __module);
  259. });
  260. }
  261. })();
  262. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHRNYWluL1VJU3BsYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLGtCQUFrQjtBQUNaLElBQUEsS0FBOEIsRUFBRSxDQUFDLFVBQVUsRUFBekMsT0FBTyxhQUFBLEVBQUUsSUFBSSxVQUFBLEVBQUUsUUFBUSxjQUFrQixDQUFDO0FBSWxEO0lBQXNDLDRCQUFZO0lBQWxEO1FBQUEscUVBd01DO1FBdE1BLGdCQUFVLEdBQWEsSUFBSSxDQUFBO1FBRTNCLGFBQU8sR0FBYSxJQUFJLENBQUE7UUFFeEIsU0FBRyxHQUFZLElBQUksQ0FBQTtRQUVuQixTQUFHLEdBQVksSUFBSSxDQUFBOztJQWdNcEIsQ0FBQztJQS9MQSx5QkFBTSxHQUFOO1FBQ0MsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUVmLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLFFBQVE7UUFDUixFQUFFLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNwQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUV2QyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDZixFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtZQUNwRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQztvQkFDVixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7d0JBQzdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FB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LElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTt3Q0FDakksY0FBYzt3Q0FDZCxJQUFJLFlBQVksR0FBRyxLQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQTt3Q0FDdEQsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFBO3FDQUMxQjt5Q0FBTTt3Q0FDTixPQUFPO3dDQUNQLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO3FDQUNoQztpQ0FDRDs0QkFDRixDQUFDLENBQUMsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQTt3QkFFRixjQUFjO3dCQUNkLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTt3QkFDdkMsU0FBUzt3QkFDVCw2REFBNkQ7b0JBRTlELENBQUMsQ0FBQyxDQUFBO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFSCxDQUFDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFyTUQ7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnREFDUTtJQUUzQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDOzZDQUNLO0lBRXhCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7eUNBQ0M7SUFFbkI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzt5Q0FDQztJQVJDLFFBQVE7UUFGNUIsT0FBTztRQUNQLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztPQUNMLFFBQVEsQ0F3TTVCO0lBQUQsZUFBQztDQXhNRCxBQXdNQyxDQXhNcUMsRUFBRSxDQUFDLFNBQVMsR0F3TWpEO2tCQXhNb0IsUUFBUSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHYW1lQ29udHJvbGxlciBmcm9tIFwiLi4vc2NyaXB0L0dhbWVDb250cm9sbGVyXCI7XG5pbXBvcnQgQXNzZXRNZ3IgZnJvbSBcIi4uL3NjcmlwdC91dGlscy9Bc3NldE1nclwiO1xuXG4vLyDkuI3lhYHorrjlnKjov5nkuKrohJrmnKzkuK3lvJXnlKjlhbbku5bmlofku7ZcbmNvbnN0IHsgY2NjbGFzcywgbWVudSwgcHJvcGVydHkgfSA9IGNjLl9kZWNvcmF0b3I7XG5cbkBjY2NsYXNzXG5AbWVudShcIlVJL3NjZW5lL1VJU3BsYXNoXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVSVNwbGFzaCBleHRlbmRzIGNjLkNvbXBvbmVudCB7XG5cdEBwcm9wZXJ0eShjYy5MYWJlbClcblx0dHh0VmVyc2lvbjogY2MuTGFiZWwgPSBudWxsXG5cdEBwcm9wZXJ0eShjYy5MYWJlbClcblx0dHh0VGlwczogY2MuTGFiZWwgPSBudWxsXG5cdEBwcm9wZXJ0eShjYy5Ob2RlKVxuXHRiZzE6IGNjLk5vZGUgPSBudWxsXG5cdEBwcm9wZXJ0eShjYy5Ob2RlKVxuXHRiZzI6IGNjLk5vZGUgPSBudWxsXG5cdG9uTG9hZCgpIHtcblx0XHRjYy5nYW1lLmNsZWFyKClcblxuXHRcdGNjLmRlYnVnLnNldERpc3BsYXlTdGF0cyhmYWxzZSlcblx0XHQvL+W8gOWQr+W8uuWItuWQiOaJuVxuXHRcdGNjLm1hY3JvLkNMRUFOVVBfSU1BR0VfQ0FDSEUgPSB0cnVlO1xuXHRcdGNjLmR5bmFtaWNBdGxhc01hbmFnZXIuZW5hYmxlZCA9IGZhbHNlO1xuXG5cdFx0d2luZG93W1wiZnBzXCJdID0gKCkgPT4ge1xuXHRcdFx0Y2MuZGVidWcuc2V0RGlzcGxheVN0YXRzKCFjYy5kZWJ1Zy5pc0Rpc3BsYXlTdGF0cygpKVxuXHRcdFx0aWYgKGNjLmRlYnVnLmlzRGlzcGxheVN0YXRzKCkpIHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNjLmZpbmQoJ1BST0ZJTEVSLU5PREUnKSkge1xuXHRcdFx0XHRcdFx0Y2MuZmluZCgnUFJPRklMRVItTk9ERScpLnNjYWxlID0gMjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8v5pu05paw5paw54mI5pys77yM5Yig6Zmk5pen57yT5a2YXG5cdFx0aWYgKGNjLnN5cy5wbGF0Zm9ybSA9PSBjYy5zeXMuV0VDSEFUX0dBTUUpIHtcblx0XHRcdC8v5bCP5ri45oiP5bmz5Y+w5Yig6Zmk6L+H5pyf57yT5a2Y77yM6Ziy5q2i57yT5a2Y6LaF6L+HNTBNXG5cdFx0XHQvLyBjYy5hc3NldE1hbmFnZXIuY2FjaGVNYW5hZ2VyLmNsZWFyTFJVKClcblx0XHRcdGNjLmFzc2V0TWFuYWdlci5jYWNoZU1hbmFnZXIuYXV0b0NsZWFyID0gdHJ1ZVxuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBzdGFydCgpOiB2b2lkIHtcblx0XHQvL+eUtemtgnNka+a8j+aWl+aJk+eCuVxuXHRcdGlmICh3aW5kb3dbJ2RoU0RLJ10pIHtcblx0XHRcdC8vIOS6i+S7tklEXG5cdFx0XHRsZXQgZXZlbnRJZCA9IFwiMTEwMDAxOjpHQU1FX0NMSUVOVF9TREtfQUNUSVZBVEVcIjsgLy8g6KGo56S6U0RL5a6i5oi356uv5LiK5oql55qE5ZCv5Yqo5LqL5Lu2XG5cdFx0XHQvLyDkuovku7blj4LmlbBcblx0XHRcdGxldCBldmVudFBhcmFtcyA9IHt9O1xuXHRcdFx0Ly8g5b+F5aGr5Y+C5pWwXG5cdFx0XHRldmVudFBhcmFtc1tcImxvZ0xldmVsXCJdID0gXCJkXCI7XG5cdFx0XHRldmVudFBhcmFtc1tcImxvZ0NvbnRlbnRcIl0gPSBcIua4uOaIj+mmluWMheWKoOi9vee7k+adn1wiO1xuXHRcdFx0Ly8g5omn6KGM5LiK5oqlXG5cdFx0XHR3aW5kb3dbJ2RoU0RLJ10udHJhY2tFdmVudChldmVudElkLCBldmVudFBhcmFtcyk7XG5cdFx0fVxuXHRcdC8v55S16a2Cc2Rr5ryP5paX5omT54K5XG5cdFx0aWYgKHdpbmRvd1snZGhTREsnXSkge1xuXHRcdFx0Ly8g5LqL5Lu2SURcblx0XHRcdGxldCBldmVudElkID0gXCIxMTAwMDA6OkdBTUVfQ0xJRU5UX0xBVU5DSFwiOyAvLyDooajnpLpTREvlrqLmiLfnq6/kuIrmiqXnmoTlkK/liqjkuovku7Zcblx0XHRcdC8vIOS6i+S7tuWPguaVsFxuXHRcdFx0bGV0IGV2ZW50UGFyYW1zID0ge307XG5cdFx0XHQvLyDlv4Xloavlj4LmlbBcblx0XHRcdGV2ZW50UGFyYW1zW1wibG9nTGV2ZWxcIl0gPSBcImRcIjtcblx0XHRcdGV2ZW50UGFyYW1zW1wibG9nQ29udGVudFwiXSA9IFwiU0RL5ZCv5YqoXCI7XG5cdFx0XHQvLyDmiafooYzkuIrmiqVcblx0XHRcdHdpbmRvd1snZGhTREsnXS50cmFja0V2ZW50KGV2ZW50SWQsIGV2ZW50UGFyYW1zKTtcblx0XHR9XG5cdFx0aWYgKCFjYy5Ob2RlLnByb3RvdHlwZVtcImNsaWNrQ2hhbmdlXCJdKSB7XG5cdFx0XHRsZXQgcHJvdG90eXBlID0gY2MuTm9kZS5wcm90b3R5cGU7XG5cdFx0XHRsZXQgZGlzcGF0Y2hFdmVudCA9IHByb3RvdHlwZS5kaXNwYXRjaEV2ZW50O1xuXHRcdFx0cHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQudHlwZSA9PSBjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQpIHtcblx0XHRcdFx0XHRcdGNjLmdhbWUuZW1pdChcIkdhbWVFdmVudC5PTl9DTElDS1wiLCBldmVudClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGlzcGF0Y2hFdmVudC5iaW5kKHRoaXMpKGV2ZW50KTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwi5oyJ6ZKu5oql6ZSZXCIsIFwiXCIsIFwiXCIsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrKVxuXHRcdFx0XHRcdGlmICh3aW5kb3dbXCJzZW5kQ2xpZW50RXJyXCJdKSB7XG5cdFx0XHRcdFx0XHR3aW5kb3dbXCJzZW5kQ2xpZW50RXJyXCJdKFtlcnJvci5tZXNzYWdlLnN1YnN0cmluZygwLCAyMDApLCBlcnJvci5zdGFjay5zdWJzdHJpbmcoMCwgNDAwKV0pXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjYy5Ob2RlLnByb3RvdHlwZVtcImNsaWNrQ2hhbmdlXCJdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8g5ri45oiP6YCf546H5Y+Y6YePXG5cdFx0Y2MuZGlyZWN0b3JbXCJfa1NwZWVkXCJdID0gMTtcblxuXHRcdHZhciBfb3JpZ2luQ2FsY3VsYXRlRGVsdGFUaW1lID0gY2MuRGlyZWN0b3IucHJvdG90eXBlW1wiY2FsY3VsYXRlRGVsdGFUaW1lXCJdO1xuXHRcdGNjLmRpcmVjdG9yW1wiY2FsY3VsYXRlRGVsdGFUaW1lXCJdID0gZnVuY3Rpb24gKG5vdykge1xuXHRcdFx0X29yaWdpbkNhbGN1bGF0ZURlbHRhVGltZS5jYWxsKHRoaXMsIG5vdyk7XG5cdFx0XHR0aGlzLl9kZWx0YVRpbWUgKj0gdGhpcy5fa1NwZWVkO1xuXHRcdH1cblxuXHRcdC8v6K6+572u6YCf546HXG5cdFx0Ly8gY2MuZGlyZWN0b3Iuc2V0U3BlZWQgPSBmdW5jdGlvbiAoc3BlZWQpIHtcblx0XHQvLyBcdGNjLmRpcmVjdG9yW1wiX2tTcGVlZFwiXSA9IHNwZWVkO1xuXHRcdC8vIH1cblx0XHRjb25zb2xlLmxvZyhcIj09PeiEmuacrOWIhuWMheWKoOi9veW8gOWni1wiKVxuXHRcdGxldCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcblx0XHQvLyBjYy5hc3NldE1hbmFnZXJcblx0XHR0aGlzLnR4dFRpcHMuc3RyaW5nID0gXCLmraPlnKjliqDovb3mnKzlnLDotYTmupAuLi5cIlxuXHRcdGNjLmFzc2V0TWFuYWdlci5sb2FkQnVuZGxlKFwic2NyaXB0QXNzZXRcIiwgKGVyciwgYnVuZGxlKSA9PiB7XG5cdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYGxvYWQgc2NyaXB0QXNzZXQgJHswfSBlcnI6JHsxfWAsIGJ1bmRsZSwgZXJyKVxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGNvbnNvbGUubG9nKFwiPT096ISa5pys5YiG5YyF5Yqg6L295a6M5oiQXCIsIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGltZSlcblx0XHRcdHRoaXMudHh0VGlwcy5zdHJpbmcgPSBcIuato+WcqOWKoOi9vemFjee9ri4uLlwiXG5cdFx0XHRpbXBvcnQoXCJSZW1vdGVDb25maWdcIiBhcyBhbnkpLnRoZW4oKHJlbW90ZVBhcmFtKSA9PiB7XG5cdFx0XHRcdGxldCByZW1vdGVDb25maWcgPSByZW1vdGVQYXJhbS5kZWZhdWx0XG5cdFx0XHRcdGltcG9ydChcIkdhbWVDb250cm9sbGVyXCIgYXMgYW55KS50aGVuKChnYW1lQ3RybFBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0bGV0IGdhbWVDb250cm9sbGVyID0gZ2FtZUN0cmxQYXJhbS5kZWZhdWx0XG5cdFx0XHRcdFx0aW1wb3J0KFwiQ29uZmlnXCIgYXMgYW55KS50aGVuKChjZmdQYXJhbSkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGNvbmZpZyA9IGNmZ1BhcmFtLmRlZmF1bHRcblx0XHRcdFx0XHRcdC8vIHBhZFxuXHRcdFx0XHRcdFx0Y29uZmlnLmlzUGFkID0gY2Mud2luU2l6ZS53aWR0aCAvIGNjLndpblNpemUuaGVpZ2h0ID4gKDc1MCAvIDEzMzQpXG5cdFx0XHRcdFx0XHQvLyDmmL7npLrniYjmnKzlj7dcblx0XHRcdFx0XHRcdHRoaXMudHh0VmVyc2lvbi5ub2RlLmFjdGl2ZSA9IHRydWVcblx0XHRcdFx0XHRcdHRoaXMudHh0VmVyc2lvbi5zdHJpbmcgPSBcIueJiOacrOWPtzpcIiArIGNvbmZpZy5hcHBWZXJzaW9uXG5cdFx0XHRcdFx0XHR0aGlzLnR4dFRpcHMuc3RyaW5nID0gXCLmuLjmiI/liJ3lp4vljJbkuK0oNTAlKS4uLlwiXG5cdFx0XHRcdFx0XHRyZW1vdGVDb25maWcuaW5pdCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudHh0VGlwcy5zdHJpbmcgPSBcIua4uOaIj+WIneWni+WMluS4rSg4MCUpLi4uXCJcblx0XHRcdFx0XHRcdFx0Ly/nlLXprYJzZGvmvI/mlpfmiZPngrlcblx0XHRcdFx0XHRcdFx0aWYgKHdpbmRvd1snZGhTREsnXSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIOS6i+S7tklEXG5cdFx0XHRcdFx0XHRcdFx0bGV0IGV2ZW50SWQgPSBcIjEwMDEwMjo6R0FNRV9DUkVBVEVfVkVSU0lPTl9TVUNDRVNTXCI7IC8vIOihqOekulNES+WuouaIt+err+S4iuaKpeeahOWQr+WKqOS6i+S7tlxuXHRcdFx0XHRcdFx0XHRcdC8vIOS6i+S7tuWPguaVsFxuXHRcdFx0XHRcdFx0XHRcdGxldCBldmVudFBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdC8vIOW/heWhq+WPguaVsFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50UGFyYW1zW1wibG9nTGV2ZWxcIl0gPSBcImRcIjtcblx0XHRcdFx0XHRcdFx0XHRldmVudFBhcmFtc1tcImxvZ0NvbnRlbnRcIl0gPSBcIuajgOafpeeJiOacrOe7k+adn1wiO1xuXHRcdFx0XHRcdFx0XHRcdC8vIOaJp+ihjOS4iuaKpVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvd1snZGhTREsnXS50cmFja0V2ZW50KGV2ZW50SWQsIGV2ZW50UGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvL+eUtemtgnNka+a8j+aWl+aJk+eCuVxuXHRcdFx0XHRcdFx0XHRpZiAod2luZG93WydkaFNESyddKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8g5LqL5Lu2SURcblx0XHRcdFx0XHRcdFx0XHRsZXQgZXZlbnRJZCA9IFwiMjExMDAwOjpHQU1FX0NMSUVOVF9JTklUX1NUQVJUXCI7IC8vIOihqOekulNES+WuouaIt+err+S4iuaKpeeahOWQr+WKqOS6i+S7tlxuXHRcdFx0XHRcdFx0XHRcdC8vIOS6i+S7tuWPguaVsFxuXHRcdFx0XHRcdFx0XHRcdGxldCBldmVudFBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdC8vIOW/heWhq+WPguaVsFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50UGFyYW1zW1wibG9nTGV2ZWxcIl0gPSBcImRcIjtcblx0XHRcdFx0XHRcdFx0XHRldmVudFBhcmFtc1tcImxvZ0NvbnRlbnRcIl0gPSBcIua4uOaIj+i1hOa6kOWMheWKoOi9vei/m+W6puadoeW8gOWni1wiO1xuXHRcdFx0XHRcdFx0XHRcdC8vIOaJp+ihjOS4iuaKpVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvd1snZGhTREsnXS50cmFja0V2ZW50KGV2ZW50SWQsIGV2ZW50UGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYW1lQ29udHJvbGxlci5pbml0KChpc1N1Y2M6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXNTdWNjKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvL+eUtemtgnNka+a8j+aWl+aJk+eCuVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHdpbmRvd1snZGhTREsnXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyDkuovku7ZJRFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgZXZlbnRJZCA9IFwiMjExMDAxOjpHQU1FX0NMSUVOVF9JTklUX0VORFwiOyAvLyDooajnpLpTREvlrqLmiLfnq6/kuIrmiqXnmoTlkK/liqjkuovku7Zcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8g5LqL5Lu25Y+C5pWwXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBldmVudFBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyDlv4Xloavlj4LmlbBcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRQYXJhbXNbXCJsb2dMZXZlbFwiXSA9IFwiZFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmVudFBhcmFtc1tcImxvZ0NvbnRlbnRcIl0gPSBcIua4uOaIj+i1hOa6kOWMheWKoOi9vei/m+W6puadoee7k+adn1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyDmiafooYzkuIrmiqVcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2luZG93WydkaFNESyddLnRyYWNrRXZlbnQoZXZlbnRJZCwgZXZlbnRQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50eHRUaXBzLnN0cmluZyA9IFwi5ri45oiP5Yid5aeL5YyW5LitKDEwMCUpLi4uXCJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIOiuoeeul+Wxj+W5leWuveW6piwg6ICD6JmR5YiY5rW35bGPXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25maWcuc2FmZUFyZWFSZWN0ID0gY2Muc3lzLmdldFNhZmVBcmVhUmVjdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAvL+aYr+WQpuaYr+eUteiEkeerr+W+ruS/oVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gbGV0IGlzV2luQnlXeCA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiAoY2Muc3lzLnBsYXRmb3JtID09IGNjLnN5cy5XRUNIQVRfR0FNRSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gXHRsZXQgc3lzSW5mbyA9IHd4LmdldFN5c3RlbUluZm9TeW5jKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBcdGlmIChzeXNJbmZvPy5wbGF0Zm9ybSA9PSBcIndpbmRvd3NcIiB8fCBzeXNJbmZvPy5wbGF0Zm9ybSA9PSBcIm1hY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBcdFx0aXNXaW5CeVd4ID0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gXHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29uZmlnLnNhZmVBcmVhUmVjdC55ID09IDAgJiYgY2Mud2luU2l6ZS53aWR0aCAvIGNjLndpblNpemUuaGVpZ2h0IDwgMC41KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8v6K+G5Yir5LiN5Yiw5a6J5YWo5Yy65Z+f55qE6K6+5aSH77yM5by65Yi26aKE55WZXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpZy5zYWZlQXJlYVJlY3QueSA9IDUwXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuWuieWFqOWMuuWfnzpcIiwgY29uZmlnLnNhZmVBcmVhUmVjdC54LCBjb25maWcuc2FmZUFyZWFSZWN0LnksIGNvbmZpZy5zYWZlQXJlYVJlY3Qud2lkdGgsIGNvbmZpZy5zYWZlQXJlYVJlY3QuaGVpZ2h0KVxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHBlclkgPSBjb25maWcuc2FmZUFyZWFSZWN0LnkgLyAoY29uZmlnLnNhZmVBcmVhUmVjdC5oZWlnaHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuWxj+W5leWuvemrmDpcIiwgY2Mud2luU2l6ZS53aWR0aCwgY2Mud2luU2l6ZS5oZWlnaHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcmVhbFNhZmVZID0gY29uZmlnLnNhZmVBcmVhUmVjdC55Oy8vcGVyWSAqIGNjLndpblNpemUuaGVpZ2h0ICAvL2NvbmZpZy5zYWZlQXJlYVJlY3QueVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCLljaDnlKjnmb7liIbmr5Q6XCIsIHBlclksIFwi55yf5a6e5a6J5YWo5Yy65Z+f5YOP57SgeDpcIiwgcmVhbFNhZmVZKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlnLnJlYWxIZWlnaHQgPSBjYy53aW5TaXplLmhlaWdodCAtIE1hdGguYWJzKHJlYWxTYWZlWSkgKiAxLjVcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwi5pyA57uI6auY5bqmOlwiLCBjb25maWcucmVhbEhlaWdodClcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNjLnN5cy5pc05hdGl2ZSAmJiAoY2Muc3lzLnBsYXRmb3JtID09IGNjLnN5cy5BTkRST0lEIHx8IGNjLnN5cy5wbGF0Zm9ybSA9PSBjYy5zeXMuSVBIT05FIHx8IGNjLnN5cy5wbGF0Zm9ybSA9PSBjYy5zeXMuSVBBRCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly/nrYnlvoXmo4DmtYvmm7TmlrDlkI7lho3liIfmjaLlnLrmma9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IGhvdFVwZGF0ZUNvbSA9IHRoaXMubm9kZS5nZXRDb21wb25lbnQoXCJIb3RVcGRhdGVcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aG90VXBkYXRlQ29tLmNoZWNrVXBkYXRlKClcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIOWKoOi9vei1hOa6kFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJsb2FkaW5nXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRcdC8vIOiuvue9rua4uOaIj+S4u+W+queOr+WIt+aWsOW4p+eOh1xuXHRcdFx0XHRcdFx0Y2MuZ2FtZS5zZXRGcmFtZVJhdGUoY29uZmlnLkdBTUVfRlJBTUUpXG5cdFx0XHRcdFx0XHQvLyDorr7nva7liqjnlLvpl7TpmpRcblx0XHRcdFx0XHRcdC8vIGNjLmRpcmVjdG9yLnNldEFuaW1hdGlvbkludGVydmFsKDEwMDAgLyBjb25maWcuR0FNRV9GUkFNRSlcblxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXG5cdFx0fSlcblx0fVxufVxuIl19