StringUtil.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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/StringUtil.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, '4c029tekfZLEKj9xvuITEwf', 'StringUtil');
  13. // script/mk/utils/StringUtil.ts
  14. "use strict";
  15. Object.defineProperty(exports, "__esModule", { value: true });
  16. /**
  17. * 字符串工具类
  18. * @author 薛鸿潇
  19. */
  20. var StringUtil = /** @class */ (function () {
  21. function StringUtil() {
  22. /**
  23. * 颜色表
  24. */
  25. this.str_color = {
  26. /** 红色1 */
  27. red1: '#be2c1d',
  28. /** 棕色1 */
  29. bro1: '#4E301B',
  30. };
  31. }
  32. /**
  33. * 将数据表里的字符串转成相对颜色
  34. * @param 需要转换的字符串 比如 "你好[red中国]" 其中“中国”为红色...你好[red{s40}中国]
  35. * @return 返回一个富文本字符串
  36. * @author xhx
  37. */
  38. StringUtil.prototype.getTextByStringInData = function (str) {
  39. var newStr = str;
  40. var i = 0;
  41. var begin;
  42. var end;
  43. var sub;
  44. var searchValue;
  45. var replaceValue;
  46. var color_key;
  47. // 解析颜色
  48. while (i < str.length) {
  49. begin = str.indexOf("[", i);
  50. end = str.indexOf("]", begin);
  51. if (begin != -1 && end != -1) //把[redXXX]转成富文本
  52. {
  53. searchValue = str.slice(begin, end + 1);
  54. // 颜色内容
  55. color_key = str.slice(begin + 1, begin + 5);
  56. var color_str = this.str_color[color_key];
  57. if (color_str) {
  58. sub = str.slice(begin + 6, end);
  59. replaceValue = this.getColorStringColor(sub, color_str);
  60. newStr = newStr.replace(searchValue, replaceValue);
  61. }
  62. i = end;
  63. }
  64. else {
  65. break;
  66. }
  67. }
  68. var size_index = 0;
  69. var size_begin = 0;
  70. var size_end = 0;
  71. var size_searchValue;
  72. // let size_sub: string
  73. // 解析尺寸{40=100%},100%是40尺寸.例子2:[bro对目标造成][red{40=104%}][bro攻击伤害]
  74. while (size_index < newStr.length) {
  75. size_begin = newStr.indexOf("{", size_index);
  76. size_end = newStr.indexOf("}", size_begin);
  77. if (size_begin != -1 && size_end != -1) {
  78. // 尺寸内容
  79. size_searchValue = newStr.slice(size_begin, size_end + 1);
  80. var size_value = newStr.slice(size_begin + 1, size_begin + 3);
  81. var size_sub = size_searchValue.slice(4, size_searchValue.length - 1);
  82. if (size_sub) {
  83. var new_value = '<size = ' + size_value + '>' + size_sub + '</color>';
  84. newStr = newStr.replace(size_searchValue, new_value);
  85. }
  86. size_index = size_end;
  87. }
  88. else {
  89. break;
  90. }
  91. }
  92. return newStr;
  93. };
  94. /**按品质转换字符串颜色 */
  95. StringUtil.prototype.getColorStringColor = function (str, color_str) {
  96. if (str === void 0) { str = '#FFFFFF'; }
  97. return '<color=' + color_str + '>' + str + '</color>';
  98. };
  99. /**
  100. * 阿拉伯数字 转 汉字
  101. * @param num 要转的数字
  102. * @returns 汉字数字
  103. * @author xhx
  104. */
  105. StringUtil.prototype.arabicToChinese = function (num) {
  106. var unit_section = ['', '万', '亿', '万亿', '亿亿'];
  107. var unit_chn = ['', '十', '百', '千'];
  108. var chars = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  109. var unit_index = 0;
  110. var str_ins = '', zh_str = '';
  111. var need_zero = false;
  112. var SectionToChinese = function (section) {
  113. var _zh_str = '';
  114. var _unit_index = 0;
  115. var zero = true;
  116. while (section > 0) {
  117. var v = section % 10;
  118. var _str_ins = '';
  119. if (v === 0) {
  120. if (!zero) {
  121. zero = true;
  122. _zh_str = chars[v] + _zh_str;
  123. }
  124. }
  125. else {
  126. zero = false;
  127. if (_unit_index !== 1 || section > 1) {
  128. _str_ins = chars[v];
  129. }
  130. _str_ins += unit_chn[_unit_index];
  131. _zh_str = _str_ins + _zh_str;
  132. }
  133. ++_unit_index;
  134. section = Math.floor(section / 10);
  135. }
  136. return _zh_str;
  137. };
  138. if (num === 0) {
  139. return chars[0];
  140. }
  141. while (num > 0) {
  142. var section = num % 10000;
  143. if (need_zero) {
  144. zh_str = chars[0] + zh_str;
  145. }
  146. str_ins = SectionToChinese(section);
  147. str_ins += (section !== 0) ? unit_section[unit_index] : unit_section[0];
  148. zh_str = str_ins + zh_str;
  149. need_zero = (section < 1000) && (section > 0);
  150. num = Math.floor(num / 10000);
  151. ++unit_index;
  152. }
  153. return zh_str;
  154. };
  155. /**
  156. * 限制字符串长度,超出部分用...代替
  157. * @param str 要拆分的字符串
  158. * @param max_len 最大长度
  159. * @returns 被限制后的字符串
  160. * @author xhx
  161. */
  162. StringUtil.prototype.getNewLimitStr = function (str, max_len) {
  163. var arr_str = str.split("");
  164. var new_str = '';
  165. max_len = arr_str.length >= max_len ? max_len : arr_str.length; //字符串不能超出的长度,否则用...显示
  166. for (var i = 0; i < max_len; i++) {
  167. if (i == (max_len - 1)) {
  168. new_str += '...';
  169. }
  170. else {
  171. new_str += arr_str[i];
  172. }
  173. }
  174. return new_str;
  175. };
  176. return StringUtil;
  177. }());
  178. exports.default = StringUtil;
  179. cc._RF.pop();
  180. }
  181. if (nodeEnv) {
  182. __define(__module.exports, __require, __module);
  183. }
  184. else {
  185. __quick_compile_project__.registerModuleFunc(__filename, function () {
  186. __define(__module.exports, __require, __module);
  187. });
  188. }
  189. })();
  190. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0XFxta1xcdXRpbHNcXFN0cmluZ1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0dBR0c7QUFDSDtJQUFBO1FBRUk7O1dBRUc7UUFDSyxjQUFTLEdBQUc7WUFDaEIsVUFBVTtZQUNWLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVTtZQUNWLElBQUksRUFBRSxTQUFTO1NBQ2xCLENBQUE7SUF3SkwsQ0FBQztJQXRKRzs7Ozs7T0FLRztJQUNJLDBDQUFxQixHQUE1QixVQUE2QixHQUFXO1FBQ3BDLElBQUksTUFBTSxHQUFXLEdBQUcsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7UUFDbEIsSUFBSSxLQUFhLENBQUM7UUFDbEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxXQUFtQixDQUFDO1FBQ3hCLElBQUksWUFBb0IsQ0FBQztRQUN6QixJQUFJLFNBQWlCLENBQUM7UUFFdEIsT0FBTztRQUNQLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUMsZ0JBQWdCO2FBQzdDO2dCQUNJLFdBQVcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU87Z0JBQ1AsU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksU0FB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QUM7SUFDbkIsQ0FBQztJQUNMLGlCQUFDO0FBQUQsQ0FsS0EsQUFrS0MsSUFBQSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDlrZfnrKbkuLLlt6XlhbfnsbtcclxuICogQGF1dGhvciDolpvpuL/mvYdcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ1V0aWwge1xyXG5cclxuICAgIC8qKiBcclxuICAgICAqIOminOiJsuihqFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0cl9jb2xvciA9IHtcclxuICAgICAgICAvKiog57qi6ImyMSAqL1xyXG4gICAgICAgIHJlZDE6ICcjYmUyYzFkJyxcclxuICAgICAgICAvKiog5qOV6ImyMSAqL1xyXG4gICAgICAgIGJybzE6ICcjNEUzMDFCJyxcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiDlsIbmlbDmja7ooajph4znmoTlrZfnrKbkuLLovazmiJDnm7jlr7npopzoibJcclxuICAgICAqIEBwYXJhbSDpnIDopoHovazmjaLnmoTlrZfnrKbkuLIg5q+U5aaCICBcIuS9oOWlvVtyZWTkuK3lm71dXCIg5YW25Lit4oCc5Lit5Zu94oCd5Li657qi6ImyLi4u5L2g5aW9W3JlZHtzNDB95Lit5Zu9XVxyXG4gICAgICogQHJldHVybiDov5Tlm57kuIDkuKrlr4zmlofmnKzlrZfnrKbkuLJcclxuICAgICAqIEBhdXRob3IgeGh4XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRUZXh0QnlTdHJpbmdJbkRhdGEoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBuZXdTdHI6IHN0cmluZyA9IHN0cjtcclxuICAgICAgICB2YXIgaTogbnVtYmVyID0gMDtcclxuICAgICAgICB2YXIgYmVnaW46IG51bWJlcjtcclxuICAgICAgICB2YXIgZW5kOiBudW1iZXI7XHJcbiAgICAgICAgdmFyIHN1Yjogc3RyaW5nO1xyXG4gICAgICAgIHZhciBzZWFyY2hWYWx1ZTogc3RyaW5nO1xyXG4gICAgICAgIHZhciByZXBsYWNlVmFsdWU6IHN0cmluZztcclxuICAgICAgICB2YXIgY29sb3Jfa2V5OiBzdHJpbmc7XHJcblxyXG4gICAgICAgIC8vIOino+aekOminOiJslxyXG4gICAgICAgIHdoaWxlIChpIDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBiZWdpbiA9IHN0ci5pbmRleE9mKFwiW1wiLCBpKTtcclxuICAgICAgICAgICAgZW5kID0gc3RyLmluZGV4T2YoXCJdXCIsIGJlZ2luKTtcclxuICAgICAgICAgICAgaWYgKGJlZ2luICE9IC0xICYmIGVuZCAhPSAtMSkvL+aKiltyZWRYWFhd6L2s5oiQ5a+M5paH5pysXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlID0gc3RyLnNsaWNlKGJlZ2luLCBlbmQgKyAxKTtcclxuICAgICAgICAgICAgICAgIC8vIOminOiJsuWGheWuuVxyXG4gICAgICAgICAgICAgICAgY29sb3Jfa2V5ID0gc3RyLnNsaWNlKGJlZ2luICsgMSwgYmVnaW4gKyA1KTtcclxuICAgICAgICAgICAgICAgIGxldCBjb2xvcl9zdHIgPSB0aGlzLnN0cl9jb2xvcltjb2xvcl9rZXldXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sb3Jfc3RyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViID0gc3RyLnNsaWNlKGJlZ2luICsgNiwgZW5kKTtcclxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWUgPSB0aGlzLmdldENvbG9yU3RyaW5nQ29sb3Ioc3ViLCBjb2xvcl9zdHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5yZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSA9IGVuZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzaXplX2luZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBzaXplX2JlZ2luOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBzaXplX2VuZDogbnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgc2l6ZV9zZWFyY2hWYWx1ZTogc3RyaW5nO1xyXG4gICAgICAgIC8vIGxldCBzaXplX3N1Yjogc3RyaW5nXHJcblxyXG4gICAgICAgIC8vIOino+aekOWwuuWvuHs0MD0xMDAlfSwxMDAl5pivNDDlsLrlr7gu5L6L5a2QMu+8mlticm/lr7nnm67moIfpgKDmiJBdW3JlZHs0MD0xMDQlfV1bYnJv5pS75Ye75Lyk5a6zXVxyXG4gICAgICAgIHdoaWxlIChzaXplX2luZGV4IDwgbmV3U3RyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBzaXplX2JlZ2luID0gbmV3U3RyLmluZGV4T2YoXCJ7XCIsIHNpemVfaW5kZXgpO1xyXG4gICAgICAgICAgICBzaXplX2VuZCA9IG5ld1N0ci5pbmRleE9mKFwifVwiLCBzaXplX2JlZ2luKTtcclxuICAgICAgICAgICAgaWYgKHNpemVfYmVnaW4gIT0gLTEgJiYgc2l6ZV9lbmQgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIC8vIOWwuuWvuOWGheWuuVxyXG4gICAgICAgICAgICAgICAgc2l6ZV9zZWFyY2hWYWx1ZSA9IG5ld1N0ci5zbGljZShzaXplX2JlZ2luLCBzaXplX2VuZCArIDEpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNpemVfdmFsdWUgPSBuZXdTdHIuc2xpY2Uoc2l6ZV9iZWdpbiArIDEsIHNpemVfYmVnaW4gKyAzKTtcclxuICAgICAgICAgICAgICAgIGxldCBzaXplX3N1YiA9IHNpemVfc2VhcmNoVmFsdWUuc2xpY2UoNCwgc2l6ZV9zZWFyY2hWYWx1ZS5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChzaXplX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdfdmFsdWUgPSAnPHNpemUgPSAnICsgc2l6ZV92YWx1ZSArICc+JyArIHNpemVfc3ViICsgJzwvY29sb3I+JztcclxuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShzaXplX3NlYXJjaFZhbHVlLCBuZXdfdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNpemVfaW5kZXggPSBzaXplX2VuZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdTdHI7XHJcbiAgICB9XHJcbiAgICAvKirmjInlk4HotKjovazmjaLlrZfnrKbkuLLpopzoibIgKi9cclxuICAgIHByaXZhdGUgZ2V0Q29sb3JTdHJpbmdDb2xvcihzdHI6IHN0cmluZyA9ICcjRkZGRkZGJywgY29sb3Jfc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnPGNvbG9yPScgKyBjb2xvcl9zdHIgKyAnPicgKyBzdHIgKyAnPC9jb2xvcj4nO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIOmYv+aLieS8r+aVsOWtlyDovawg5rGJ5a2XXHJcbiAgICAgKiBAcGFyYW0gbnVtIOimgei9rOeahOaVsOWtl1xyXG4gICAgICogQHJldHVybnMg5rGJ5a2X5pWw5a2XXHJcbiAgICAgKiBAYXV0aG9yIHhoeFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXJhYmljVG9DaGluZXNlKG51bTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgdW5pdF9zZWN0aW9uID0gWycnLCAn5LiHJywgJ+S6vycsICfkuIfkur8nLCAn5Lq/5Lq/J107XHJcbiAgICAgICAgbGV0IHVuaXRfY2huID0gWycnLCAn5Y2BJywgJ+eZvicsICfljYMnXTtcclxuICAgICAgICBsZXQgY2hhcnMgPSBbJ+mbticsICfkuIAnLCAn5LqMJywgJ+S4iScsICflm5snLCAn5LqUJywgJ+WFrScsICfkuIMnLCAn5YWrJywgJ+S5nSddO1xyXG4gICAgICAgIGxldCB1bml0X2luZGV4ID0gMDtcclxuICAgICAgICBsZXQgc3RyX2lucyA9ICcnLCB6aF9zdHIgPSAnJztcclxuICAgICAgICBsZXQgbmVlZF96ZXJvID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBTZWN0aW9uVG9DaGluZXNlID0gZnVuY3Rpb24gKHNlY3Rpb24pIHtcclxuICAgICAgICAgICAgbGV0IF96aF9zdHIgPSAnJztcclxuICAgICAgICAgICAgbGV0IF91bml0X2luZGV4ID0gMDtcclxuICAgICAgICAgICAgbGV0IHplcm8gPSB0cnVlO1xyXG4gICAgICAgICAgICB3aGlsZSAoc2VjdGlvbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCB2ID0gc2VjdGlvbiAlIDEwO1xyXG4gICAgICAgICAgICAgICAgbGV0IF9zdHJfaW5zID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghemVybykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB6ZXJvID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3poX3N0ciA9IGNoYXJzW3ZdICsgX3poX3N0cjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHplcm8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3VuaXRfaW5kZXggIT09IDEgfHwgc2VjdGlvbiA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3N0cl9pbnMgPSBjaGFyc1t2XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF9zdHJfaW5zICs9IHVuaXRfY2huW191bml0X2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICBfemhfc3RyID0gX3N0cl9pbnMgKyBfemhfc3RyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKytfdW5pdF9pbmRleDtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBNYXRoLmZsb29yKHNlY3Rpb24gLyAxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF96aF9zdHI7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKG51bSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hhcnNbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAobnVtID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgc2VjdGlvbiA9IG51bSAlIDEwMDAwO1xyXG4gICAgICAgICAgICBpZiAobmVlZF96ZXJvKSB7XHJcbiAgICAgICAgICAgICAgICB6aF9zdHIgPSBjaGFyc1swXSArIHpoX3N0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdHJfaW5zID0gU2VjdGlvblRvQ2hpbmVzZShzZWN0aW9uKTtcclxuICAgICAgICAgICAgc3RyX2lucyArPSAoc2VjdGlvbiAhPT0gMCkgPyB1bml0X3NlY3Rpb25bdW5pdF9pbmRleF0gOiB1bml0X3NlY3Rpb25bMF07XHJcbiAgICAgICAgICAgIHpoX3N0ciA9IHN0cl9pbnMgKyB6aF9zdHI7XHJcbiAgICAgICAgICAgIG5lZWRfemVybyA9IChzZWN0aW9uIDwgMTAwMCkgJiYgKHNlY3Rpb24gPiAwKTtcclxuICAgICAgICAgICAgbnVtID0gTWF0aC5mbG9vcihudW0gLyAxMDAwMCk7XHJcbiAgICAgICAgICAgICsrdW5pdF9pbmRleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB6aF9zdHI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOmZkOWItuWtl+espuS4sumVv+W6pu+8jOi2heWHuumDqOWIhueUqC4uLuS7o+abv1xyXG4gICAgICogQHBhcmFtIHN0ciDopoHmi4bliIbnmoTlrZfnrKbkuLJcclxuICAgICAqIEBwYXJhbSBtYXhfbGVuIOacgOWkp+mVv+W6plxyXG4gICAgICogQHJldHVybnMg6KKr6ZmQ5Yi25ZCO55qE5a2X56ym5LiyXHJcbiAgICAgKiBAYXV0aG9yIHhoeFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TmV3TGltaXRTdHIoc3RyOiBzdHJpbmcsIG1heF9sZW46IG51bWJlcikge1xyXG4gICAgICAgIGxldCBhcnJfc3RyID0gc3RyLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGxldCBuZXdfc3RyID0gJyc7XHJcbiAgICAgICAgbWF4X2xlbiA9IGFycl9zdHIubGVuZ3RoID49IG1heF9sZW4gPyBtYXhfbGVuIDogYXJyX3N0ci5sZW5ndGg7Ly/lrZfnrKbkuLLkuI3og73otoXlh7rnmoTplb/luqbvvIzlkKbliJnnlKguLi7mmL7npLpcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heF9sZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaSA9PSAobWF4X2xlbiAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdfc3RyICs9ICcuLi4nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3X3N0ciArPSBhcnJfc3RyW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdfc3RyO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuIl19