TimeUtil.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/mk/utils/TimeUtil.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, 'c10efJfgPlIRqo2IRARi4q9', 'TimeUtil');
  13. // script/mk/utils/TimeUtil.ts
  14. "use strict";
  15. Object.defineProperty(exports, "__esModule", { value: true });
  16. /**
  17. * @description 时间工具类
  18. * @author 邹勇
  19. */
  20. var TimeUtil = /** @class */ (function () {
  21. function TimeUtil() {
  22. /**
  23. * 本地时间与服务器时间的差值
  24. */
  25. this.offTime = 0;
  26. }
  27. /**
  28. * 设置服务器时间
  29. * @param time 服务器时间戳(秒)
  30. */
  31. TimeUtil.prototype.setServerTime = function (time) {
  32. this.offTime = time - Math.ceil(new Date().getTime() / 1000);
  33. };
  34. /**
  35. * 获取当前服务器时间,如果没有设置过服务器时间,默认为本地时间
  36. * @returns 当前服务器时间戳(秒)
  37. */
  38. TimeUtil.prototype.getServerTime = function () {
  39. return Math.ceil(new Date().getTime() / 1000 + this.offTime);
  40. };
  41. /**
  42. * 倒计时转换为时间格式(h:m:s),没有单位
  43. * @param t 时间(秒)
  44. * @param f 格式,默认"h:m:s",可以过滤,如 "m:s"
  45. * @returns 规定格式的字符串 如"04:22:06"
  46. */
  47. TimeUtil.prototype.format = function (t, f) {
  48. if (f === void 0) { f = "h:m:s"; }
  49. var d = Math.floor(t / 24 / 3600);
  50. var h = Math.floor((t / 3600) % 24);
  51. var m = Math.floor((t % 3600) / 60);
  52. var s = (t % 3600) % 60;
  53. function parse_format(t) {
  54. var s = t.toString();
  55. if (t < 10) {
  56. s = "0" + t;
  57. }
  58. return s;
  59. }
  60. if (f.indexOf("d") != -1) {
  61. f = f.replace(/d/g, parse_format(d));
  62. }
  63. else {
  64. h += d * 24;
  65. }
  66. if (f.indexOf("h") != -1) {
  67. f = f.replace(/h/g, parse_format(h));
  68. }
  69. else {
  70. m += h * 60;
  71. }
  72. if (f.indexOf("m") != -1) {
  73. f = f.replace(/m/g, parse_format(m));
  74. }
  75. else {
  76. if (f.indexOf("h") != -1) {
  77. s += m * 60;
  78. }
  79. else {
  80. s = t;
  81. }
  82. }
  83. if (f.indexOf("s") != -1) {
  84. f = f.replace(/s/g, parse_format(s));
  85. }
  86. return f;
  87. };
  88. /**
  89. * 倒计时转换为时间格式,带中文单位 ,可过滤
  90. * @param t 时间(秒)
  91. * @param f 格式,默认"天时分秒",可以过滤,如 "分秒"
  92. * @returns 规定格式的字符串 如“2天13时11分05秒”
  93. */
  94. TimeUtil.prototype.formatWithUnit = function (t, f) {
  95. if (f === void 0) { f = "天时分秒"; }
  96. var d = Math.floor(t / 24 / 3600);
  97. var h = Math.floor((t / 3600) % 24);
  98. var m = Math.floor((t % 3600) / 60);
  99. var s = (t % 3600) % 60;
  100. function parse_format(t, unit) {
  101. var s = t.toString();
  102. if (t < 10) {
  103. s = "0" + t;
  104. }
  105. return s + unit;
  106. }
  107. var str = '';
  108. if (f.indexOf("天") != -1) {
  109. str += d + "天";
  110. }
  111. else {
  112. h += d * 24;
  113. }
  114. if (f.indexOf("时") != -1) {
  115. str += parse_format(h, "时");
  116. }
  117. else {
  118. m += h * 60;
  119. }
  120. if (f.indexOf("分") != -1) {
  121. str += parse_format(m, "分");
  122. }
  123. else {
  124. s += m * 60;
  125. }
  126. if (f.indexOf("秒") != -1) {
  127. str += parse_format(s, "秒");
  128. }
  129. return str;
  130. };
  131. /**
  132. * 获取一年中的第n天
  133. * @param t 时间戳(毫秒)
  134. * @returns 一年中的第n天
  135. */
  136. TimeUtil.prototype.getDayInYear = function (t) {
  137. var time = new Date(t);
  138. var month = time.getMonth() + 1;
  139. var year = time.getFullYear();
  140. var days = time.getDate();
  141. var sum = 0;
  142. var a = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  143. var b = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  144. if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
  145. for (var i = 0; i < month - 1; i++) {
  146. sum += b[i];
  147. }
  148. return sum + days;
  149. }
  150. else {
  151. for (var i = 0; i < month - 1; i++) {
  152. sum += a[i];
  153. }
  154. return sum + days;
  155. }
  156. };
  157. /**
  158. * 返回时间点在当天的秒数
  159. * @param date 时间
  160. * @returns 从零点开始的秒数
  161. */
  162. TimeUtil.prototype.getSecondsInDay = function (date) {
  163. return date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds();
  164. };
  165. /**
  166. * 获取当前日期
  167. * @param replace 间隔符,默认'-',则返回2020-10-10
  168. * @returns 当前时间字符串
  169. */
  170. TimeUtil.prototype.getNowDayString = function (replace) {
  171. if (replace === void 0) { replace = '-'; }
  172. var date = new Date();
  173. return date.getFullYear() + replace + (date.getMonth() + 1) + replace + date.getDate();
  174. };
  175. return TimeUtil;
  176. }());
  177. exports.default = TimeUtil;
  178. cc._RF.pop();
  179. }
  180. if (nodeEnv) {
  181. __define(__module.exports, __require, __module);
  182. }
  183. else {
  184. __quick_compile_project__.registerModuleFunc(__filename, function () {
  185. __define(__module.exports, __require, __module);
  186. });
  187. }
  188. })();
  189. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0XFxta1xcdXRpbHNcXFRpbWVVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7OztHQUdHO0FBQ0g7SUFDSTtRQUlBOztXQUVHO1FBQ0ssWUFBTyxHQUFXLENBQUMsQ0FBQztJQUw1QixDQUFDO0lBTUQ7OztPQUdHO0lBQ0ksZ0NBQWEsR0FBcEIsVUFBcUIsSUFBWTtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdDQUFhLEdBQXBCO1FBQ0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx5QkFBTSxHQUFiLFVBQWMsQ0FBUyxFQUFFLENBQW1CO1FBQW5CLGtCQUFBLEVBQUEsV0FBbUI7UUFDeEMsSUFBSSxDQUFDLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFaEMsU0FBUyxZQUFZLENBQUMsQ0FBUztZQUMzQixJQUFJLENBQUMsR0FB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QUFFLENBQUM7SUFDM0YsQ0FBQztJQUNMLGVBQUM7QUFBRCxDQTFLQSxBQTBLQyxJQUFBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiDml7bpl7Tlt6XlhbfnsbtcclxuICogQGF1dGhvciDpgrnli4dcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbWVVdGlsIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOacrOWcsOaXtumXtOS4juacjeWKoeWZqOaXtumXtOeahOW3ruWAvFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9mZlRpbWU6IG51bWJlciA9IDA7XHJcbiAgICAvKipcclxuICAgICAqIOiuvue9ruacjeWKoeWZqOaXtumXtFxyXG4gICAgICogQHBhcmFtIHRpbWUgIOacjeWKoeWZqOaXtumXtOaIs++8iOenku+8iVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0U2VydmVyVGltZSh0aW1lOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm9mZlRpbWUgPSB0aW1lIC0gTWF0aC5jZWlsKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5blvZPliY3mnI3liqHlmajml7bpl7TvvIzlpoLmnpzmsqHmnInorr7nva7ov4fmnI3liqHlmajml7bpl7TvvIzpu5jorqTkuLrmnKzlnLDml7bpl7RcclxuICAgICAqIEByZXR1cm5zICAgICDlvZPliY3mnI3liqHlmajml7bpl7TmiLPvvIjnp5LvvIlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZlclRpbWUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCArIHRoaXMub2ZmVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlgJLorqHml7bovazmjaLkuLrml7bpl7TmoLzlvI8oaDptOnMp77yM5rKh5pyJ5Y2V5L2NXHJcbiAgICAgKiBAcGFyYW0gICB0ICDml7bpl7TvvIjnp5LvvIlcclxuICAgICAqIEBwYXJhbSAgIGYgIOagvOW8j++8jOm7mOiupFwiaDptOnNcIu+8jOWPr+S7pei/h+a7pO+8jOWmgiBcIm06c1wiXHJcbiAgICAgKiBAcmV0dXJucyAgICDop4TlrprmoLzlvI/nmoTlrZfnrKbkuLIg5aaCXCIwNDoyMjowNlwiXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmb3JtYXQodDogbnVtYmVyLCBmOiBzdHJpbmcgPSBcImg6bTpzXCIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBkOiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAyNCAvIDM2MDApO1xyXG4gICAgICAgIGxldCBoOiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC8gMzYwMCkgJSAyNCk7XHJcbiAgICAgICAgbGV0IG06IG51bWJlciA9IE1hdGguZmxvb3IoKHQgJSAzNjAwKSAvIDYwKTtcclxuICAgICAgICBsZXQgczogbnVtYmVyID0gKHQgJSAzNjAwKSAlIDYwO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBwYXJzZV9mb3JtYXQodDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgbGV0IHM6IHN0cmluZyA9IHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKHQgPCAxMCkge1xyXG4gICAgICAgICAgICAgICAgcyA9IFwiMFwiICsgdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmLmluZGV4T2YoXCJkXCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIGYgPSBmLnJlcGxhY2UoL2QvZywgcGFyc2VfZm9ybWF0KGQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGggKz0gZCAqIDI0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGYuaW5kZXhPZihcImhcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgZiA9IGYucmVwbGFjZSgvaC9nLCBwYXJzZV9mb3JtYXQoaCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbSArPSBoICogNjA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZi5pbmRleE9mKFwibVwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICBmID0gZi5yZXBsYWNlKC9tL2csIHBhcnNlX2Zvcm1hdChtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZi5pbmRleE9mKFwiaFwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcyArPSBtICogNjA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzID0gdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGYuaW5kZXhPZihcInNcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgZiA9IGYucmVwbGFjZSgvcy9nLCBwYXJzZV9mb3JtYXQocykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWAkuiuoeaXtui9rOaNouS4uuaXtumXtOagvOW8j++8jOW4puS4reaWh+WNleS9jSDvvIzlj6/ov4fmu6RcclxuICAgICAqIEBwYXJhbSAgIHQgICAgIOaXtumXtO+8iOenku+8iVxyXG4gICAgICogQHBhcmFtICAgZiAgICAg5qC85byP77yM6buY6K6kXCLlpKnml7bliIbnp5JcIu+8jOWPr+S7pei/h+a7pO+8jOWmgiBcIuWIhuenklwiXHJcbiAgICAgKiBAcmV0dXJucyAgICAgICDop4TlrprmoLzlvI/nmoTlrZfnrKbkuLIg5aaC4oCcMuWkqTEz5pe2MTHliIYwNeenkuKAnVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZm9ybWF0V2l0aFVuaXQodDogbnVtYmVyLCBmOiBzdHJpbmcgPSBcIuWkqeaXtuWIhuenklwiKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgZDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMjQgLyAzNjAwKTtcclxuICAgICAgICBsZXQgaDogbnVtYmVyID0gTWF0aC5mbG9vcigodCAvIDM2MDApICUgMjQpO1xyXG4gICAgICAgIGxldCBtOiBudW1iZXIgPSBNYXRoLmZsb29yKCh0ICUgMzYwMCkgLyA2MCk7XHJcbiAgICAgICAgbGV0IHM6IG51bWJlciA9ICh0ICUgMzYwMCkgJSA2MDtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VfZm9ybWF0KHQ6IG51bWJlciwgdW5pdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgbGV0IHM6IHN0cmluZyA9IHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKHQgPCAxMCkge1xyXG4gICAgICAgICAgICAgICAgcyA9IFwiMFwiICsgdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcyArIHVuaXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RyID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChmLmluZGV4T2YoXCLlpKlcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgc3RyICs9IGQgKyBcIuWkqVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaCArPSBkICogMjQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZi5pbmRleE9mKFwi5pe2XCIpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHN0ciArPSBwYXJzZV9mb3JtYXQoaCwgXCLml7ZcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtICs9IGggKiA2MDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmLmluZGV4T2YoXCLliIZcIikgIT0gLTEpIHtcclxuICAgICAgICAgICAgc3RyICs9IHBhcnNlX2Zvcm1hdChtLCBcIuWIhlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHMgKz0gbSAqIDYwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGYuaW5kZXhPZihcIuenklwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICBzdHIgKz0gcGFyc2VfZm9ybWF0KHMsIFwi56eSXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5LiA5bm05Lit55qE56ysbuWkqVxyXG4gICAgICogQHBhcmFtICAgdCAgIOaXtumXtOaIs++8iOavq+enku+8iVxyXG4gICAgICogQHJldHVybnMgICAgIOS4gOW5tOS4reeahOesrG7lpKlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERheUluWWVhcih0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHZhciB0aW1lOiBEYXRlID0gbmV3IERhdGUodCk7XHJcbiAgICAgICAgdmFyIG1vbnRoID0gdGltZS5nZXRNb250aCgpICsgMTtcclxuICAgICAgICB2YXIgeWVhciA9IHRpbWUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICB2YXIgZGF5cyA9IHRpbWUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIHZhciBzdW0gPSAwO1xyXG5cclxuICAgICAgICBsZXQgYSA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcclxuICAgICAgICBsZXQgYiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcclxuICAgICAgICBpZiAoeWVhciAlIDQwMCA9PSAwIHx8ICh5ZWFyICUgNCA9PSAwICYmIHllYXIgJSAxMDAgIT0gMCkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG1vbnRoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gYltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3VtICsgZGF5cztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgbW9udGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHN1bSArPSBhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzdW0gKyBkYXlzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOi/lOWbnuaXtumXtOeCueWcqOW9k+WkqeeahOenkuaVsFxyXG4gICAgICogQHBhcmFtICAgZGF0ZSAgICDml7bpl7RcclxuICAgICAqIEByZXR1cm5zICAgICAgICAg5LuO6Zu254K55byA5aeL55qE56eS5pWwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTZWNvbmRzSW5EYXkoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBkYXRlLmdldEhvdXJzKCkgKiAzNjAwICsgZGF0ZS5nZXRNaW51dGVzKCkgKiA2MCArIGRhdGUuZ2V0U2Vjb25kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5b2T5YmN5pel5pyfXHJcbiAgICAgKiBAcGFyYW0gICByZXBsYWNlICAgICDpl7TpmpTnrKbvvIzpu5jorqQnLSfvvIzliJnov5Tlm54yMDIwLTEwLTEwXHJcbiAgICAgKiBAcmV0dXJucyAgICAgICAgICAgICDlvZPliY3ml7bpl7TlrZfnrKbkuLJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE5vd0RheVN0cmluZyhyZXBsYWNlOiBzdHJpbmcgPSAnLScpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgcmVwbGFjZSArIChkYXRlLmdldE1vbnRoKCkgKyAxKSArIHJlcGxhY2UgKyBkYXRlLmdldERhdGUoKTtcclxuICAgIH1cclxufSJdfQ==