UIBase.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/logic/ui/UIBase.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, '76454/+dxNA36XaoEgldO2R', 'UIBase');
  13. // script/logic/ui/UIBase.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. exports.BASE_POP = void 0;
  36. var TypeConst_1 = require("../../data/const/TypeConst");
  37. var GameDataCenter_1 = require("../../data/GameDataCenter");
  38. var EventMng_1 = require("../../manager/EventMng");
  39. var UICommon_1 = require("../../utils/UICommon");
  40. // 弹出方式
  41. var BASE_POP;
  42. (function (BASE_POP) {
  43. BASE_POP["MAIN"] = "MAIN";
  44. BASE_POP["UI"] = "UI";
  45. BASE_POP["UI_HALF"] = "UI_HALF";
  46. BASE_POP["FULL"] = "FULL";
  47. BASE_POP["POP"] = "POP";
  48. BASE_POP["MemuBottom"] = "MemuBottom";
  49. BASE_POP["Battle"] = "Battle"; // 战斗弹窗
  50. })(BASE_POP = exports.BASE_POP || (exports.BASE_POP = {}));
  51. var PREFAB_UI_DIR = 'prefab/';
  52. var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
  53. var UIBase = /** @class */ (function (_super) {
  54. __extends(UIBase, _super);
  55. function UIBase() {
  56. var _this = _super !== null && _super.apply(this, arguments) || this;
  57. _this.belong = null;
  58. _this.showAnim = true;
  59. _this.bgm = TypeConst_1.AudioConst.empty;
  60. /** 是否注册防穿透事件 */
  61. _this.isRegisterStopEvent = true;
  62. _this.registerCount = 0;
  63. return _this;
  64. }
  65. UIBase.onCollectRes = function () {
  66. };
  67. Object.defineProperty(UIBase.prototype, "tag", {
  68. get: function () {
  69. return this.mTag;
  70. },
  71. set: function (value) {
  72. this.mTag = value;
  73. },
  74. enumerable: false,
  75. configurable: true
  76. });
  77. /**
  78. * 得到prefab的路径,相对于resources目录
  79. */
  80. UIBase.getUrl = function () {
  81. return this.prefabUrl;
  82. //return PREFAB_UI_DIR + this.prefabUrl;
  83. };
  84. /**
  85. * 类名,用于给UI命名
  86. */
  87. UIBase.getName = function () {
  88. return this.className;
  89. };
  90. UIBase.getPop = function () {
  91. return this.pop;
  92. };
  93. UIBase.getZindex = function () {
  94. return this._zindex;
  95. };
  96. /* ----------------------------- 以下方法不能在子类重写 ----------------------------- */
  97. /**初始化函数,在onLoad之前被调用,params为打开ui是传入的不定参数数组 */
  98. UIBase.prototype.init = function (params) {
  99. this.onInit(params);
  100. };
  101. /**onLoad 会在组件被首次加载的时候被回调。且优先于任何start */
  102. UIBase.prototype.onLoad = function () {
  103. this._notifyEventList = new Map();
  104. // this._registerEventList = new Map<string, RegisterEvent>();
  105. this.onUILoad();
  106. };
  107. UIBase.prototype.onDestroy = function () {
  108. this.onUIDestroy();
  109. };
  110. UIBase.prototype.onEnable = function () {
  111. // if (this.isRegisterStopEvent) {
  112. // this.onRegisterEvent(this.node, this.touchEvent, this);
  113. // }
  114. if (this.bgm != TypeConst_1.AudioConst.empty) {
  115. GameDataCenter_1.default.audio.playMusic(this.bgm);
  116. }
  117. this.onShow();
  118. };
  119. UIBase.prototype.onDisable = function () {
  120. if (this.isRegisterStopEvent) {
  121. this.unRegisterEvent(this.node);
  122. }
  123. this.onHide();
  124. try {
  125. var self_1 = this;
  126. this._notifyEventList.forEach(function (f, key) {
  127. // console.log("_notifyEventList key = "+key)
  128. EventMng_1.default.off(key, f, self_1);
  129. }, this);
  130. this._notifyEventList.clear();
  131. }
  132. catch (error) {
  133. console.error("onDisable->" + error);
  134. }
  135. if (this.registerCount > 0) {
  136. console.error(this.name + " 按钮注册后没off掉啊喂 \n(╯-_-)╯╧╧ ");
  137. }
  138. };
  139. /**注册notice事件,disable的时候会自动移除 */
  140. UIBase.prototype.initEvent = function (eventName, cb) {
  141. EventMng_1.default.on(eventName, cb, this);
  142. this._notifyEventList.set(eventName, cb);
  143. };
  144. UIBase.prototype.touchEvent = function (event) {
  145. event.stopPropagation();
  146. };
  147. UIBase.prototype.start = function () {
  148. // this.onStart(); // 改在UiMng中,在init和添加到父节点之后触发
  149. };
  150. UIBase.prototype.update = function (dt) {
  151. this.onUpdate(dt);
  152. };
  153. /* ---------------------------------------------------------------------------------- */
  154. UIBase.prototype.onInit = function (params) {
  155. };
  156. UIBase.prototype.onUILoad = function () {
  157. };
  158. UIBase.prototype.onUIDestroy = function () {
  159. };
  160. UIBase.prototype.onShow = function () {
  161. };
  162. UIBase.prototype.onHide = function () {
  163. };
  164. UIBase.prototype.onStart = function (isFirstTime) {
  165. };
  166. UIBase.prototype.onUpdate = function (dt) {
  167. };
  168. UIBase.prototype.onClose = function () {
  169. };
  170. /**
  171. * 注册touch事件
  172. * @param node
  173. * @param callback
  174. * @param target
  175. * @param playAudio 是否播放音效,默认播放
  176. */
  177. UIBase.prototype.onRegisterEvent = function (node, callback, target, params, audio) {
  178. if (target === void 0) { target = null; }
  179. if (params === void 0) { params = []; }
  180. if (audio === void 0) { audio = TypeConst_1.AudioConst.effect_click; }
  181. this.registerCount++;
  182. UICommon_1.uiCommon.onRegisterEvent(node, callback, target, params, audio);
  183. };
  184. UIBase.prototype.unRegisterEvent = function (node) {
  185. this.registerCount--;
  186. UICommon_1.uiCommon.unRegisterEvent(node);
  187. };
  188. UIBase.pop = BASE_POP.UI;
  189. UIBase = __decorate([
  190. ccclass
  191. ], UIBase);
  192. return UIBase;
  193. }(cc.Component));
  194. exports.default = UIBase;
  195. cc._RF.pop();
  196. }
  197. if (nodeEnv) {
  198. __define(__module.exports, __require, __module);
  199. }
  200. else {
  201. __quick_compile_project__.registerModuleFunc(__filename, function () {
  202. __define(__module.exports, __require, __module);
  203. });
  204. }
  205. })();
  206. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvbG9naWMvdWkvVUlCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBd0Q7QUFDeEQsNERBQXVEO0FBQ3ZELG1EQUE4QztBQUM5QyxpREFBZ0Q7QUFXaEQsT0FBTztBQUNQLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNoQix5QkFBYSxDQUFBO0lBQ2IscUJBQVMsQ0FBQTtJQUNULCtCQUFtQixDQUFBO0lBQ25CLHlCQUFhLENBQUE7SUFDYix1QkFBVyxDQUFBO0lBQ1gscUNBQXlCLENBQUE7SUFDekIsNkJBQWlCLENBQUEsQ0FBQyxPQUFPO0FBQzdCLENBQUMsRUFSVyxRQUFRLEdBQVIsZ0JBQVEsS0FBUixnQkFBUSxRQVFuQjtBQVFELElBQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUUxQixJQUFBLEtBQXdCLEVBQUUsQ0FBQyxVQUFVLEVBQW5DLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBa0IsQ0FBQztBQUU1QztJQUE2QywwQkFBWTtJQUF6RDtRQUFBLHFFQTJLQztRQXBJVSxZQUFNLEdBQVEsSUFBSSxDQUFBO1FBRWxCLGNBQVEsR0FBWSxJQUFJLENBQUE7UUFDeEIsU0FBRyxHQUFlLHNCQUFVLENBQUMsS0FBSyxDQUFBO1FBRXpDLGdCQUFnQjtRQUNOLHlCQUFtQixHQUFZLElBQUksQ0FBQztRQTZHOUMsbUJBQWEsR0FBVyxDQUFDLENBQUE7O0lBaUI3QixDQUFDO0lBdktVLG1CQUFZLEdBQW5CO0lBRUEsQ0FBQztJQUVELHNCQUFXLHVCQUFHO2FBQWQ7WUFDSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQzthQUNELFVBQWUsS0FBVTtZQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDOzs7T0FIQTtJQUtEOztPQUVHO0lBQ1csYUFBTSxHQUFwQjtRQUNJLE9BQU8sSUFBSSxDQUFD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Q0FBQztJQUVELHVCQUFNLEdBQU47SUFFQSxDQUFDO0lBRUQsd0JBQU8sR0FBUCxVQUFRLFdBQW9CO0lBRTVCLENBQUM7SUFFRCx5QkFBUSxHQUFSLFVBQVMsRUFBVTtJQUVuQixDQUFDO0lBRUQsd0JBQU8sR0FBUDtJQUVBLENBQUM7SUFHRDs7Ozs7O09BTUc7SUFDSCxnQ0FBZSxHQUFmLFVBQWdCLElBQWEsRUFBRSxRQUFRLEVBQUUsTUFBYSxFQUFFLE1BQWdCLEVBQUUsS0FBMkM7UUFBNUUsdUJBQUEsRUFBQSxhQUFhO1FBQUUsdUJBQUEsRUFBQSxXQUFnQjtRQUFFLHNCQUFBLEVBQUEsUUFBb0Isc0JBQVUsQ0FBQyxZQUFZO1FBQ2pILElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwQixtQkFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVELGdDQUFlLEdBQWYsVUFBZ0IsSUFBYTtRQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDcEIsbUJBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQTVJZ0IsVUFBRyxHQUFhLFFBQVEsQ0FBQyxFQUFFLENBQUE7SUE5QmxCLE1BQU07UUFEbkMsT0FBTztPQUNzQixNQUFNLENBMktuQztJQUFELGFBQUM7Q0EzS0QsQUEyS0MsQ0EzSzRDLEVBQUUsQ0FBQyxTQUFTLEdBMkt4RDtrQkEzSzZCLE1BQU0iLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdWRpb0NvbnN0IH0gZnJvbSBcIi4uLy4uL2RhdGEvY29uc3QvVHlwZUNvbnN0XCI7XG5pbXBvcnQgR2FtZURhdGFDZW50ZXIgZnJvbSBcIi4uLy4uL2RhdGEvR2FtZURhdGFDZW50ZXJcIjtcbmltcG9ydCBFdmVudE1uZyBmcm9tIFwiLi4vLi4vbWFuYWdlci9FdmVudE1uZ1wiO1xuaW1wb3J0IHsgdWlDb21tb24gfSBmcm9tIFwiLi4vLi4vdXRpbHMvVUlDb21tb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBVSUNsYXNzPFQgZXh0ZW5kcyBVSUJhc2U+IHtcbiAgICBuZXcoKTogVDtcbiAgICBnZXRVcmwoKTogc3RyaW5nO1xuICAgIGdldE5hbWUoKTogc3RyaW5nO1xuICAgIGdldFBvcCgpOiBCQVNFX1BPUDtcbiAgICBnZXRaaW5kZXgoKTogbnVtYmVyO1xuICAgIC8qKiDpooTliqDovb3pobXpnaLmiYDpnIDotYTmupAgKi9cbiAgICBvbkNvbGxlY3RSZXMoKTogdm9pZDtcbn1cbi8vIOW8ueWHuuaWueW8j1xuZXhwb3J0IGVudW0gQkFTRV9QT1Age1xuICAgIE1BSU4gPSBcIk1BSU5cIiwvL+S4u+WcuuaZr1xuICAgIFVJID0gXCJVSVwiLCAgIC8v6Zmk5LqGTUFJTuS7peWklueahOWFtuS7lumdnuW8ueeql1VJXG4gICAgVUlfSEFMRiA9IFwiVUlfSEFMRlwiLC8vIOS4jlVJ57G75Ly8LOS9huS4jeWxleekuuW6lemDqOaMiemSrizlj6rmmL7npLrpobbpg6jotYTmupDmoI9cbiAgICBGVUxMID0gXCJGVUxMXCIsLy8g55uW5L2P6I+c5Y2V55WM6Z2i55qE56qX5Y+jXG4gICAgUE9QID0gXCJQT1BcIiwgLy8g5by556qXXG4gICAgTWVtdUJvdHRvbSA9IFwiTWVtdUJvdHRvbVwiLCAvLyDkuLvnlYzpnaLnmoTlupXpg6joj5zljZXmoI91aVxuICAgIEJhdHRsZSA9IFwiQmF0dGxlXCIgLy8g5oiY5paX5by556qXXG59XG5cbmludGVyZmFjZSBSZWdpc3RlckV2ZW50IHtcbiAgICBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgdGFyZ2V0PzogYW55LFxuICAgIHBsYXlBdWRpbz86IGJvb2xlYW4sXG59XG5cbmNvbnN0IFBSRUZBQl9VSV9ESVIgPSAncHJlZmFiLyc7XG5cbmNvbnN0IHsgY2NjbGFzcywgcHJvcGVydHkgfSA9IGNjLl9kZWNvcmF0b3I7XG5AY2NjbGFzc1xuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgVUlCYXNlIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHByZWZhYlVybDtcbiAgICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzTmFtZTtcblxuICAgIHN0YXRpYyBvbkNvbGxlY3RSZXMoKSB7XG5cbiAgICB9XG4gICAgcHJvdGVjdGVkIG1UYWc6IGFueTtcbiAgICBwdWJsaWMgZ2V0IHRhZygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5tVGFnO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHRhZyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubVRhZyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW+l+WIsHByZWZhYueahOi3r+W+hO+8jOebuOWvueS6jnJlc291cmNlc+ebruW9lVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VXJsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZWZhYlVybDtcbiAgICAgICAgLy9yZXR1cm4gUFJFRkFCX1VJX0RJUiArIHRoaXMucHJlZmFiVXJsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOexu+WQje+8jOeUqOS6jue7mVVJ5ZG95ZCNXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RhdGljIHBvcDogQkFTRV9QT1AgPSBCQVNFX1BPUC5VSVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UG9wKCk6IEJBU0VfUE9QIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9wXG4gICAgfVxuICAgIHByb3RlY3RlZCBzdGF0aWMgX3ppbmRleDogbnVtYmVyXG4gICAgcHVibGljIHN0YXRpYyBnZXRaaW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ppbmRleFxuICAgIH1cblxuICAgIHB1YmxpYyBiZWxvbmc6IGFueSA9IG51bGxcblxuICAgIHB1YmxpYyBzaG93QW5pbTogYm9vbGVhbiA9IHRydWVcbiAgICBwdWJsaWMgYmdtOiBBdWRpb0NvbnN0ID0gQXVkaW9Db25zdC5lbXB0eVxuXG4gICAgLyoqIOaYr+WQpuazqOWGjOmYsuepv+mAj+S6i+S7tiAqL1xuICAgIHByb3RlY3RlZCBpc1JlZ2lzdGVyU3RvcEV2ZW50OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKumAmuefpeS6i+S7tuWIl+ihqCAqL1xuICAgIHByaXZhdGUgX25vdGlmeUV2ZW50TGlzdDogTWFwPHN0cmluZywgRnVuY3Rpb24+O1xuICAgIC8qKueCueWHu+S6i+S7tuWIl+ihqCAqL1xuICAgIHByaXZhdGUgX3JlZ2lzdGVyRXZlbnRMaXN0OiBNYXA8c3RyaW5nLCBSZWdpc3RlckV2ZW50PjtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOS7peS4i+aWueazleS4jeiDveWcqOWtkOexu+mHjeWGmSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgIC8qKuWIneWni+WMluWHveaVsO+8jOWcqG9uTG9hZOS5i+WJjeiiq+iwg+eUqO+8jHBhcmFtc+S4uuaJk+W8gHVp5piv5Lyg5YWl55qE5LiN5a6a5Y+C5pWw5pWw57uEICovXG4gICAgaW5pdChwYXJhbXMpIHtcbiAgICAgICAgdGhpcy5vbkluaXQocGFyYW1zKTtcbiAgICB9XG5cbiAgICAvKipvbkxvYWQg5Lya5Zyo57uE5Lu26KKr6aaW5qyh5Yqg6L2955qE5pe25YCZ6KKr5Zue6LCD44CC5LiU5LyY5YWI5LqO5Lu75L2Vc3RhcnQgKi9cbiAgICBvbkxvYWQoKSB7XG4gICAgICAgIHRoaXMuX25vdGlmeUV2ZW50TGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBGdW5jdGlvbj4oKTtcbiAgICAgICAgLy8gdGhpcy5fcmVnaXN0ZXJFdmVudExpc3QgPSBuZXcgTWFwPHN0cmluZywgUmVnaXN0ZXJFdmVudD4oKTtcblxuICAgICAgICB0aGlzLm9uVUlMb2FkKCk7XG4gICAgfVxuXG4gICAgb25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm9uVUlEZXN0cm95KCk7XG4gICAgfVxuXG4gICAgb25FbmFibGUoKSB7XG4gICAgICAgIC8vIGlmICh0aGlzLmlzUmVnaXN0ZXJTdG9wRXZlbnQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMub25SZWdpc3RlckV2ZW50KHRoaXMubm9kZSwgdGhpcy50b3VjaEV2ZW50LCB0aGlzKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBpZiAodGhpcy5iZ20gIT0gQXVkaW9Db25zdC5lbXB0eSkge1xuICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIuYXVkaW8ucGxheU11c2ljKHRoaXMuYmdtKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TaG93KCk7XG4gICAgfVxuXG4gICAgb25EaXNhYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JlZ2lzdGVyU3RvcEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnVuUmVnaXN0ZXJFdmVudCh0aGlzLm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkhpZGUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeUV2ZW50TGlzdC5mb3JFYWNoKChmLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIl9ub3RpZnlFdmVudExpc3Qga2V5ID0gXCIra2V5KVxuICAgICAgICAgICAgICAgIEV2ZW50TW5nLm9mZihrZXksIGYsIHNlbGYpO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnlFdmVudExpc3QuY2xlYXIoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJvbkRpc2FibGUtPlwiICsgZXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWdpc3RlckNvdW50ID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLm5hbWUgKyBcIiDmjInpkq7ms6jlhozlkI7msqFvZmbmjonllYrlloIgXFxu77yI4pWv77yN77y/77yN77yJ4pWv4pWn4pWnIFwiKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoq5rOo5YaMbm90aWNl5LqL5Lu277yMZGlzYWJsZeeahOaXtuWAmeS8muiHquWKqOenu+mZpCAqL1xuICAgIGluaXRFdmVudChldmVudE5hbWU6IHN0cmluZywgY2I6IEZ1bmN0aW9uKSB7XG4gICAgICAgIEV2ZW50TW5nLm9uKGV2ZW50TmFtZSwgY2IsIHRoaXMpO1xuICAgICAgICB0aGlzLl9ub3RpZnlFdmVudExpc3Quc2V0KGV2ZW50TmFtZSwgY2IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG91Y2hFdmVudChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBzdGFydCgpIHtcbiAgICAgICAgLy8gdGhpcy5vblN0YXJ0KCk7IC8vIOaUueWcqFVpTW5n5LitLOWcqGluaXTlkozmt7vliqDliLDniLboioLngrnkuYvlkI7op6blj5FcbiAgICB9XG5cbiAgICB1cGRhdGUoZHQpIHtcbiAgICAgICAgdGhpcy5vblVwZGF0ZShkdCk7XG4gICAgfVxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXG4gICAgb25Jbml0KHBhcmFtcykge1xuXG4gICAgfVxuXG4gICAgb25VSUxvYWQoKSB7XG5cbiAgICB9XG5cbiAgICBvblVJRGVzdHJveSgpIHtcblxuICAgIH1cblxuICAgIG9uU2hvdygpIHtcblxuICAgIH1cblxuICAgIG9uSGlkZSgpIHtcblxuICAgIH1cblxuICAgIG9uU3RhcnQoaXNGaXJzdFRpbWU6IGJvb2xlYW4pIHtcblxuICAgIH1cblxuICAgIG9uVXBkYXRlKGR0OiBudW1iZXIpIHtcblxuICAgIH1cblxuICAgIG9uQ2xvc2UoKSB7XG5cbiAgICB9XG5cbiAgICByZWdpc3RlckNvdW50OiBudW1iZXIgPSAwXG4gICAgLyoqXG4gICAgICog5rOo5YaMdG91Y2jkuovku7ZcbiAgICAgKiBAcGFyYW0gbm9kZSBcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgXG4gICAgICogQHBhcmFtIHRhcmdldCBcbiAgICAgKiBAcGFyYW0gcGxheUF1ZGlvIOaYr+WQpuaSreaUvumfs+aViO+8jOm7mOiupOaSreaUvlxuICAgICAqL1xuICAgIG9uUmVnaXN0ZXJFdmVudChub2RlOiBjYy5Ob2RlLCBjYWxsYmFjaywgdGFyZ2V0ID0gbnVsbCwgcGFyYW1zOiBhbnkgPSBbXSwgYXVkaW86IEF1ZGlvQ29uc3QgPSBBdWRpb0NvbnN0LmVmZmVjdF9jbGljaykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyQ291bnQrK1xuICAgICAgICB1aUNvbW1vbi5vblJlZ2lzdGVyRXZlbnQobm9kZSwgY2FsbGJhY2ssIHRhcmdldCwgcGFyYW1zLCBhdWRpbylcbiAgICB9XG5cbiAgICB1blJlZ2lzdGVyRXZlbnQobm9kZTogY2MuTm9kZSkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyQ291bnQtLVxuICAgICAgICB1aUNvbW1vbi51blJlZ2lzdGVyRXZlbnQobm9kZSlcbiAgICB9XG59Il19