@lotus-tree/fg-notation 1.0.1 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. package/README.md +67 -0
  2. package/babel.config.js +6 -0
  3. package/dev/img/basic/1.png +0 -0
  4. package/dev/img/basic/12369.png +0 -0
  5. package/dev/img/basic/1237.png +0 -0
  6. package/dev/img/basic/1632143.png +0 -0
  7. package/dev/img/basic/2.png +0 -0
  8. package/dev/img/basic/21.png +0 -0
  9. package/dev/img/basic/214.png +0 -0
  10. package/dev/img/basic/21478.png +0 -0
  11. package/dev/img/basic/23.png +0 -0
  12. package/dev/img/basic/236.png +0 -0
  13. package/dev/img/basic/23698.png +0 -0
  14. package/dev/img/basic/28.png +0 -0
  15. package/dev/img/basic/3.png +0 -0
  16. package/dev/img/basic/32147.png +0 -0
  17. package/dev/img/basic/3219.png +0 -0
  18. package/dev/img/basic/341236.png +0 -0
  19. package/dev/img/basic/346.png +0 -0
  20. package/dev/img/basic/360.png +0 -0
  21. package/dev/img/basic/4.png +0 -0
  22. package/dev/img/basic/41236.png +0 -0
  23. package/dev/img/basic/421.png +0 -0
  24. package/dev/img/basic/46.png +0 -0
  25. package/dev/img/basic/4618346.png +0 -0
  26. package/dev/img/basic/47896.png +0 -0
  27. package/dev/img/basic/5.png +0 -0
  28. package/dev/img/basic/6.png +0 -0
  29. package/dev/img/basic/623.png +0 -0
  30. package/dev/img/basic/63214.png +0 -0
  31. package/dev/img/basic/64.png +0 -0
  32. package/dev/img/basic/6428.png +0 -0
  33. package/dev/img/basic/69874.png +0 -0
  34. package/dev/img/basic/7.png +0 -0
  35. package/dev/img/basic/7891.png +0 -0
  36. package/dev/img/basic/8.png +0 -0
  37. package/dev/img/basic/81237.png +0 -0
  38. package/dev/img/basic/82.png +0 -0
  39. package/dev/img/basic/87412.png +0 -0
  40. package/dev/img/basic/89632.png +0 -0
  41. package/dev/img/basic/9.png +0 -0
  42. package/dev/img/basic/[1].png +0 -0
  43. package/dev/img/basic/[2].png +0 -0
  44. package/dev/img/basic/[2]8.png +0 -0
  45. package/dev/img/basic/[3].png +0 -0
  46. package/dev/img/basic/[4].png +0 -0
  47. package/dev/img/basic/[6].png +0 -0
  48. package/dev/img/basic/[7].png +0 -0
  49. package/dev/img/basic/[8].png +0 -0
  50. package/dev/img/basic/[9].png +0 -0
  51. package/dev/img/basic/air.png +0 -0
  52. package/dev/img/basic/doubleforward.png +0 -0
  53. package/dev/img/credits.txt +4 -0
  54. package/dev/img/games/bb/a.png +0 -0
  55. package/dev/img/games/bb/b.png +0 -0
  56. package/dev/img/games/bb/c.png +0 -0
  57. package/dev/img/games/bb/d.png +0 -0
  58. package/dev/img/games/dbz/a1.png +0 -0
  59. package/dev/img/games/dbz/a2.png +0 -0
  60. package/dev/img/games/dbz/h.png +0 -0
  61. package/dev/img/games/dbz/l.png +0 -0
  62. package/dev/img/games/dbz/m.png +0 -0
  63. package/dev/img/games/dbz/s.png +0 -0
  64. package/dev/img/games/dnf/a.png +0 -0
  65. package/dev/img/games/dnf/as.png +0 -0
  66. package/dev/img/games/dnf/b.png +0 -0
  67. package/dev/img/games/dnf/g.png +0 -0
  68. package/dev/img/games/dnf/ms.png +0 -0
  69. package/dev/img/games/dnf/s.png +0 -0
  70. package/dev/img/games/gbf/g.png +0 -0
  71. package/dev/img/games/gbf/h.png +0 -0
  72. package/dev/img/games/gbf/l.png +0 -0
  73. package/dev/img/games/gbf/m.png +0 -0
  74. package/dev/img/games/gbf/s.png +0 -0
  75. package/dev/img/games/gg/d.png +0 -0
  76. package/dev/img/games/gg/hs.png +0 -0
  77. package/dev/img/games/gg/k.png +0 -0
  78. package/dev/img/games/gg/p.png +0 -0
  79. package/dev/img/games/gg/rc.png +0 -0
  80. package/dev/img/games/gg/s.png +0 -0
  81. package/dev/img/games/kof/a.png +0 -0
  82. package/dev/img/games/kof/b.png +0 -0
  83. package/dev/img/games/kof/c.png +0 -0
  84. package/dev/img/games/kof/d.png +0 -0
  85. package/dev/img/games/kof/max.png +0 -0
  86. package/dev/img/games/mk/1.png +0 -0
  87. package/dev/img/games/mk/2.png +0 -0
  88. package/dev/img/games/mk/3.png +0 -0
  89. package/dev/img/games/mk/4.png +0 -0
  90. package/dev/img/games/sc/[a].png +0 -0
  91. package/dev/img/games/sc/[b].png +0 -0
  92. package/dev/img/games/sc/[g].png +0 -0
  93. package/dev/img/games/sc/[k].png +0 -0
  94. package/dev/img/games/sc/a.png +0 -0
  95. package/dev/img/games/sc/b.png +0 -0
  96. package/dev/img/games/sc/g.png +0 -0
  97. package/dev/img/games/sc/k.png +0 -0
  98. package/dev/img/games/sf/hk.png +0 -0
  99. package/dev/img/games/sf/hp.png +0 -0
  100. package/dev/img/games/sf/j..png +0 -0
  101. package/dev/img/games/sf/lk.png +0 -0
  102. package/dev/img/games/sf/lp.png +0 -0
  103. package/dev/img/games/sf/max.png +0 -0
  104. package/dev/img/games/sf/mk.png +0 -0
  105. package/dev/img/games/sf/mp.png +0 -0
  106. package/dev/img/games/sf/tap.png +0 -0
  107. package/dev/img/games/sg/hk.png +0 -0
  108. package/dev/img/games/sg/hp.png +0 -0
  109. package/dev/img/games/sg/k.png +0 -0
  110. package/dev/img/games/sg/lk.png +0 -0
  111. package/dev/img/games/sg/lp.png +0 -0
  112. package/dev/img/games/sg/mk.png +0 -0
  113. package/dev/img/games/sg/mp.png +0 -0
  114. package/dev/img/games/sg/p.png +0 -0
  115. package/dev/img/games/tfh/a.png +0 -0
  116. package/dev/img/games/tfh/b.png +0 -0
  117. package/dev/img/games/tfh/c.png +0 -0
  118. package/dev/img/games/tfh/d.png +0 -0
  119. package/dev/img/games/tkn/1.png +0 -0
  120. package/dev/img/games/tkn/12.png +0 -0
  121. package/dev/img/games/tkn/1234.png +0 -0
  122. package/dev/img/games/tkn/13.png +0 -0
  123. package/dev/img/games/tkn/14.png +0 -0
  124. package/dev/img/games/tkn/2.png +0 -0
  125. package/dev/img/games/tkn/23.png +0 -0
  126. package/dev/img/games/tkn/24.png +0 -0
  127. package/dev/img/games/tkn/3.png +0 -0
  128. package/dev/img/games/tkn/34.png +0 -0
  129. package/dev/img/games/tkn/4.png +0 -0
  130. package/dev/img/games/tkn/b.png +0 -0
  131. package/dev/img/games/tkn/d-b.png +0 -0
  132. package/dev/img/games/tkn/d-f.png +0 -0
  133. package/dev/img/games/tkn/d.png +0 -0
  134. package/dev/img/games/tkn/f.png +0 -0
  135. package/dev/img/games/tkn/o.png +0 -0
  136. package/dev/img/games/tkn/u-b.png +0 -0
  137. package/dev/img/games/tkn/u-f.png +0 -0
  138. package/dev/img/games/tkn/u.png +0 -0
  139. package/dev/img/preview.png +0 -0
  140. package/dev/index.js +491 -0
  141. package/lib/img/games/gg/rc.png +0 -0
  142. package/lib/index.js +122 -13
  143. package/package.json +25 -10
  144. package/src/img/games/gg/rc.png +0 -0
  145. package/src/index.js +46 -1
package/lib/index.js CHANGED
@@ -11,10 +11,10 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
14
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
-
16
14
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
17
15
 
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
+
18
18
  var _sharp = _interopRequireDefault(require("sharp"));
19
19
 
20
20
  var _path = _interopRequireDefault(require("path"));
@@ -23,10 +23,54 @@ var _glob = _interopRequireDefault(require("glob"));
23
23
 
24
24
  var _sequelize = require("sequelize");
25
25
 
26
+ var _bent = _interopRequireDefault(require("bent"));
27
+
28
+ var getJSON = (0, _bent["default"])('json');
29
+
26
30
  var imgPath = _path["default"].join(__dirname, 'img');
27
31
 
28
32
  var basicInputs = new Map();
29
33
  var gameInputs = new Map();
34
+ var glossary = {};
35
+ var terms = [];
36
+ getGlossary();
37
+ setInterval(getGlossary, 5 * 60 * 1000);
38
+
39
+ function getGlossary() {
40
+ return _getGlossary.apply(this, arguments);
41
+ }
42
+
43
+ function _getGlossary() {
44
+ _getGlossary = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
45
+ var result, tempG, tempT;
46
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
47
+ while (1) {
48
+ switch (_context6.prev = _context6.next) {
49
+ case 0:
50
+ _context6.next = 2;
51
+ return getJSON('https://glossary.infil.net/json/glossary.json');
52
+
53
+ case 2:
54
+ result = _context6.sent;
55
+ tempG = {};
56
+ tempT = [];
57
+ result.forEach(function (i) {
58
+ var term = i.term.toLowerCase();
59
+ tempG[term] = i;
60
+ tempT.push(term);
61
+ });
62
+ glossary = tempG;
63
+ terms = tempT;
64
+
65
+ case 8:
66
+ case "end":
67
+ return _context6.stop();
68
+ }
69
+ }
70
+ }, _callee6);
71
+ }));
72
+ return _getGlossary.apply(this, arguments);
73
+ }
30
74
 
31
75
  _glob["default"].sync(_path["default"].join(imgPath, 'basic/**'), {
32
76
  nodir: true
@@ -64,13 +108,13 @@ function sendInput(_x, _x2, _x3, _x4) {
64
108
  }
65
109
 
66
110
  function _sendInput() {
67
- _sendInput = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(inputs, result, message, caption) {
111
+ _sendInput = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(inputs, result, message, caption) {
68
112
  var canvas;
69
- return _regenerator["default"].wrap(function _callee5$(_context5) {
113
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
70
114
  while (1) {
71
- switch (_context5.prev = _context5.next) {
115
+ switch (_context7.prev = _context7.next) {
72
116
  case 0:
73
- _context5.next = 2;
117
+ _context7.next = 2;
74
118
  return (0, _sharp["default"])({
75
119
  create: {
76
120
  width: 152 * result.length,
@@ -89,18 +133,18 @@ function _sendInput() {
89
133
  })).png().toBuffer();
90
134
 
91
135
  case 2:
92
- canvas = _context5.sent;
93
- return _context5.abrupt("return", message.reply({
136
+ canvas = _context7.sent;
137
+ return _context7.abrupt("return", message.reply({
94
138
  content: caption,
95
139
  files: [canvas]
96
140
  }));
97
141
 
98
142
  case 4:
99
143
  case "end":
100
- return _context5.stop();
144
+ return _context7.stop();
101
145
  }
102
146
  }
103
- }, _callee5);
147
+ }, _callee7);
104
148
  }));
105
149
  return _sendInput.apply(this, arguments);
106
150
  }
@@ -109,11 +153,15 @@ var builtin = {
109
153
  37: {
110
154
  game: 'sf',
111
155
  caption: '***LETS GO JUSTIN!***',
112
- input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623 hp >> 236 236 lk'
156
+ input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623 mp >> 236 236 lk'
113
157
  }
114
158
  };
115
159
  var _default = {
116
160
  name: 'fg-notation',
161
+ about: {
162
+ name: 'FG Notation',
163
+ value: '[Instructions and source code](https://lotus.chitowarlock.com/fgnotation)\n[Infil\'s Fighting Game Glossary](https://glossary.infil.net)\n[MagicianStuff\'s Fighthing Game notations emotes](https://twitter.com/MagicianStuff/status/1477931054484893697)'
164
+ },
117
165
  intents: ['GUILD_MESSAGES'],
118
166
  partials: ['MESSAGE'],
119
167
  preload: function preload(sequelize) {
@@ -373,10 +421,71 @@ var _default = {
373
421
  return _execute3.apply(this, arguments);
374
422
  }
375
423
 
424
+ return execute;
425
+ }()
426
+ },
427
+ fgglossary: {
428
+ usage: 'fgglossary [search term]',
429
+ desc: 'Searches for a term on Infil\'s Glossary',
430
+ example: 'fgglossary mexican uppercut',
431
+ execute: function () {
432
+ var _execute4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_ref7, _ref8) {
433
+ var param, sequelize, message, params, search, result, url;
434
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
435
+ while (1) {
436
+ switch (_context5.prev = _context5.next) {
437
+ case 0:
438
+ param = _ref7.param, sequelize = _ref7.sequelize;
439
+ message = _ref8.message;
440
+ params = param.slice(1);
441
+
442
+ if (!(params.length === 0)) {
443
+ _context5.next = 5;
444
+ break;
445
+ }
446
+
447
+ return _context5.abrupt("return", message.reply('Missing search term. Example: >fgglossary mexican uppercut'));
448
+
449
+ case 5:
450
+ search = params.join(' ').toLowerCase();
451
+ result = terms.filter(function (i) {
452
+ return i.includes(search);
453
+ });
454
+ url = "https://glossary.infil.net/?t=".concat(params.join('%20').toLowerCase());
455
+
456
+ if (!(result.length === 0)) {
457
+ _context5.next = 10;
458
+ break;
459
+ }
460
+
461
+ return _context5.abrupt("return", message.reply("Term \"".concat(search, "\" not found")));
462
+
463
+ case 10:
464
+ if (!(result.length === 1)) {
465
+ _context5.next = 12;
466
+ break;
467
+ }
468
+
469
+ return _context5.abrupt("return", message.reply("```".concat(glossary[result[0]].def, "```Source: <").concat(url, ">")));
470
+
471
+ case 12:
472
+ message.reply("Multiple terms found: ".concat(url));
473
+
474
+ case 13:
475
+ case "end":
476
+ return _context5.stop();
477
+ }
478
+ }
479
+ }, _callee5);
480
+ }));
481
+
482
+ function execute(_x11, _x12) {
483
+ return _execute4.apply(this, arguments);
484
+ }
485
+
376
486
  return execute;
377
487
  }()
378
488
  }
379
489
  }
380
490
  };
381
- exports["default"] = _default;
382
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJpbWdQYXRoIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJiYXNpY0lucHV0cyIsIk1hcCIsImdhbWVJbnB1dHMiLCJnbG9iIiwic3luYyIsIm5vZGlyIiwiZm9yRWFjaCIsInAiLCJpbnB1dCIsInNwbGl0IiwicG9wIiwicmVwbGFjZSIsInNldCIsInBhcnNlIiwicmVsYXRpdmUiLCJkaXIiLCJuYW1lIiwiaGFzIiwiZ2V0Iiwic29sdmVJbnB1dCIsImlucHV0cyIsImkiLCJsZW5ndGgiLCJzMSIsInNsaWNlIiwiRXJyb3IiLCJzZW5kSW5wdXQiLCJyZXN1bHQiLCJtZXNzYWdlIiwiY2FwdGlvbiIsImNyZWF0ZSIsIndpZHRoIiwiaGVpZ2h0IiwiY2hhbm5lbHMiLCJiYWNrZ3JvdW5kIiwiY29tcG9zaXRlIiwibWFwIiwiaXQiLCJpbmRleCIsImxlZnQiLCJ0b3AiLCJwbmciLCJ0b0J1ZmZlciIsImNhbnZhcyIsInJlcGx5IiwiY29udGVudCIsImZpbGVzIiwiYnVpbHRpbiIsImdhbWUiLCJpbnRlbnRzIiwicGFydGlhbHMiLCJwcmVsb2FkIiwic2VxdWVsaXplIiwiZGVmaW5lIiwiZ3VpbGQiLCJ0eXBlIiwiRGF0YVR5cGVzIiwiU1RSSU5HIiwicHJpbWFyeUtleSIsImNyZWF0ZWRCeSIsImV2ZW50cyIsIm1lc3NhZ2VDcmVhdGUiLCJnbG9iYWwiLCJjbGllbnQiLCJjb25maWciLCJhdXRob3IiLCJpZCIsInVzZXIiLCJtZW1iZXIiLCJndWlsZElkIiwicHJlZml4Iiwic3RhcnRzV2l0aCIsIm1vZGVscyIsImZnaW5wdXQiLCJmaW5kT25lIiwid2hlcmUiLCJyb3ciLCJjb21tYW5kcyIsImZnaSIsInVzYWdlIiwiZGVzYyIsImV4YW1wbGUiLCJleGVjdXRlIiwicGFyYW0iLCJpMSIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJ0b0xvd2VyQ2FzZSIsImZsYXQiLCJmZ3NhdmUiLCJjaGFubmVsIiwic2VuZCIsImZnY2FwdGlvbiIsInNhdmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBTUEsT0FBTyxHQUFHQyxpQkFBS0MsSUFBTCxDQUFVQyxTQUFWLEVBQXFCLEtBQXJCLENBQWhCOztBQUNBLElBQU1DLFdBQVcsR0FBRyxJQUFJQyxHQUFKLEVBQXBCO0FBQ0EsSUFBTUMsVUFBVSxHQUFHLElBQUlELEdBQUosRUFBbkI7O0FBRUFFLGlCQUFLQyxJQUFMLENBQVVQLGlCQUFLQyxJQUFMLENBQVVGLE9BQVYsRUFBbUIsVUFBbkIsQ0FBVixFQUEwQztBQUFFUyxFQUFBQSxLQUFLLEVBQUU7QUFBVCxDQUExQyxFQUNHQyxPQURILENBQ1csVUFBQUMsQ0FBQyxFQUFJO0FBQ1osTUFBTUMsS0FBSyxHQUFHRCxDQUFDLENBQUNFLEtBQUYsQ0FBUSxHQUFSLEVBQWFDLEdBQWIsR0FBbUJDLE9BQW5CLENBQTJCLE1BQTNCLEVBQW1DLEVBQW5DLENBQWQ7QUFDQVgsRUFBQUEsV0FBVyxDQUFDWSxHQUFaLENBQWdCSixLQUFoQixFQUF1QkQsQ0FBdkI7QUFDRCxDQUpIOztBQU1BUCxXQUFXLENBQUNZLEdBQVosQ0FBZ0IsSUFBaEIsRUFBc0JmLGlCQUFLQyxJQUFMLENBQVVGLE9BQVYsRUFBbUIseUJBQW5CLENBQXRCOztBQUVBTyxpQkFBS0MsSUFBTCxDQUFVUCxpQkFBS0MsSUFBTCxDQUFVRixPQUFWLEVBQW1CLFVBQW5CLENBQVYsRUFBMEM7QUFBRVMsRUFBQUEsS0FBSyxFQUFFO0FBQVQsQ0FBMUMsRUFDR0MsT0FESCxDQUNXLFVBQUFDLENBQUMsRUFBSTtBQUNaLG9CQUFzQlYsaUJBQUtnQixLQUFMLENBQVdoQixpQkFBS2lCLFFBQUwsQ0FBY2pCLGlCQUFLQyxJQUFMLENBQVVGLE9BQVYsRUFBbUIsT0FBbkIsQ0FBZCxFQUEyQ1csQ0FBM0MsQ0FBWCxDQUF0QjtBQUFBLE1BQVFRLEdBQVIsZUFBUUEsR0FBUjtBQUFBLE1BQWFDLElBQWIsZUFBYUEsSUFBYjs7QUFFQSxNQUFJLENBQUNkLFVBQVUsQ0FBQ2UsR0FBWCxDQUFlRixHQUFmLENBQUwsRUFBMEJiLFVBQVUsQ0FBQ1UsR0FBWCxDQUFlRyxHQUFmLEVBQW9CLElBQUlkLEdBQUosRUFBcEI7QUFDMUJDLEVBQUFBLFVBQVUsQ0FBQ2dCLEdBQVgsQ0FBZUgsR0FBZixFQUFvQkgsR0FBcEIsQ0FBd0JJLElBQXhCLEVBQThCVCxDQUE5QjtBQUNELENBTkg7O0FBUUEsU0FBU1ksVUFBVCxDQUFxQkMsTUFBckIsRUFBNkJaLEtBQTdCLEVBQW9DO0FBQ2xDLE1BQUlZLE1BQU0sQ0FBQ0gsR0FBUCxDQUFXVCxLQUFYLENBQUosRUFBdUIsT0FBTyxDQUFDQSxLQUFELENBQVA7O0FBRXZCLE9BQUssSUFBSWEsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2IsS0FBSyxDQUFDYyxNQUExQixFQUFrQ0QsQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxRQUFNRSxFQUFFLEdBQUdmLEtBQUssQ0FBQ2dCLEtBQU4sQ0FBWSxDQUFaLEVBQWUsSUFBSUgsQ0FBbkIsQ0FBWDtBQUNBLFFBQUlELE1BQU0sQ0FBQ0gsR0FBUCxDQUFXTSxFQUFYLENBQUosRUFBb0IsUUFBUUEsRUFBUiw2Q0FBZUosVUFBVSxDQUFDQyxNQUFELEVBQVNaLEtBQUssQ0FBQ2dCLEtBQU4sQ0FBWSxJQUFJSCxDQUFoQixDQUFULENBQXpCO0FBQ3JCOztBQUVELFFBQU0sSUFBSUksS0FBSix5QkFBMEJqQixLQUExQixnQ0FBTjtBQUNEOztTQUVja0IsUzs7Ozs7NkZBQWYsa0JBQTBCTixNQUExQixFQUFrQ08sTUFBbEMsRUFBMENDLE9BQTFDLEVBQW1EQyxPQUFuRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUN1Qix1QkFBTTtBQUFFQyxjQUFBQSxNQUFNLEVBQUU7QUFBRUMsZ0JBQUFBLEtBQUssRUFBRSxNQUFNSixNQUFNLENBQUNMLE1BQXRCO0FBQThCVSxnQkFBQUEsTUFBTSxFQUFFLEdBQXRDO0FBQTJDQyxnQkFBQUEsUUFBUSxFQUFFLENBQXJEO0FBQXdEQyxnQkFBQUEsVUFBVSxFQUFFO0FBQXBFO0FBQVYsYUFBTixFQUNsQkMsU0FEa0IsQ0FDUlIsTUFBTSxDQUFDUyxHQUFQLENBQVcsVUFBQ0MsRUFBRCxFQUFLQyxLQUFMO0FBQUEscUJBQ25CO0FBQUU5QixnQkFBQUEsS0FBSyxFQUFFWSxNQUFNLENBQUNGLEdBQVAsQ0FBV21CLEVBQVgsQ0FBVDtBQUF5QkUsZ0JBQUFBLElBQUksRUFBRUQsS0FBSyxHQUFHLEdBQXZDO0FBQTRDRSxnQkFBQUEsR0FBRyxFQUFFLENBQWpEO0FBQW9EVCxnQkFBQUEsS0FBSyxFQUFFLEdBQTNEO0FBQWdFQyxnQkFBQUEsTUFBTSxFQUFFO0FBQXhFLGVBRG1CO0FBQUEsYUFBWCxDQURRLEVBSWxCUyxHQUprQixHQUtsQkMsUUFMa0IsRUFEdkI7O0FBQUE7QUFDUUMsWUFBQUEsTUFEUjtBQUFBLDhDQVFTZixPQUFPLENBQUNnQixLQUFSLENBQWM7QUFBRUMsY0FBQUEsT0FBTyxFQUFFaEIsT0FBWDtBQUFvQmlCLGNBQUFBLEtBQUssRUFBRSxDQUFDSCxNQUFEO0FBQTNCLGFBQWQsQ0FSVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHOzs7O0FBV0EsSUFBTUksT0FBTyxHQUFHO0FBQ2QsTUFBSTtBQUNGQyxJQUFBQSxJQUFJLEVBQUUsSUFESjtBQUVGbkIsSUFBQUEsT0FBTyxFQUFFLHVCQUZQO0FBR0ZyQixJQUFBQSxLQUFLLEVBQUU7QUFITDtBQURVLENBQWhCO2VBUWU7QUFDYlEsRUFBQUEsSUFBSSxFQUFFLGFBRE87QUFFYmlDLEVBQUFBLE9BQU8sRUFBRSxDQUFDLGdCQUFELENBRkk7QUFHYkMsRUFBQUEsUUFBUSxFQUFFLENBQUMsU0FBRCxDQUhHO0FBS2JDLEVBQUFBLE9BQU8sRUFBRSxpQkFBQUMsU0FBUyxFQUFJO0FBQ3BCQSxJQUFBQSxTQUFTLENBQUNDLE1BQVYsQ0FBaUIsU0FBakIsRUFBNEI7QUFDMUJDLE1BQUFBLEtBQUssRUFBRTtBQUNMQyxRQUFBQSxJQUFJLEVBQUVDLHFCQUFVQyxNQURYO0FBRUxDLFFBQUFBLFVBQVUsRUFBRTtBQUZQLE9BRG1CO0FBSzFCMUMsTUFBQUEsSUFBSSxFQUFFO0FBQ0p1QyxRQUFBQSxJQUFJLEVBQUVDLHFCQUFVQyxNQURaO0FBRUpDLFFBQUFBLFVBQVUsRUFBRTtBQUZSLE9BTG9CO0FBUzFCQyxNQUFBQSxTQUFTLEVBQUVILHFCQUFVQyxNQVRLO0FBVTFCVCxNQUFBQSxJQUFJLEVBQUVRLHFCQUFVQyxNQVZVO0FBVzFCNUIsTUFBQUEsT0FBTyxFQUFFMkIscUJBQVVDLE1BWE87QUFZMUJqRCxNQUFBQSxLQUFLLEVBQUVnRCxxQkFBVUM7QUFaUyxLQUE1QjtBQWNELEdBcEJZO0FBc0JiRyxFQUFBQSxNQUFNLEVBQUU7QUFDQUMsSUFBQUEsYUFEQSx5QkFDZUMsTUFEZixFQUN1QmxDLE9BRHZCLEVBQ2dDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQzVCbUMsZ0JBQUFBLE1BRDRCLEdBQ0VELE1BREYsQ0FDNUJDLE1BRDRCLEVBQ3BCQyxNQURvQixHQUNFRixNQURGLENBQ3BCRSxNQURvQixFQUNaWixTQURZLEdBQ0VVLE1BREYsQ0FDWlYsU0FEWTs7QUFBQSxzQkFFaEN4QixPQUFPLENBQUNxQyxNQUFSLENBQWVDLEVBQWYsS0FBc0JILE1BQU0sQ0FBQ0ksSUFBUCxDQUFZRCxFQUFsQyxJQUF3QyxDQUFDdEMsT0FBTyxDQUFDd0MsTUFGakI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFJOUJDLGdCQUFBQSxPQUo4QixHQUlwQnpDLE9BQU8sQ0FBQ3lDLE9BSlk7QUFLNUJDLGdCQUFBQSxNQUw0QixHQUtqQk4sTUFBTSxDQUFDSyxPQUFELENBTFcsQ0FLNUJDLE1BTDRCOztBQUFBLHFCQU9oQzFDLE9BQU8sQ0FBQ2lCLE9BQVIsQ0FBZ0IwQixVQUFoQixDQUEyQkQsTUFBM0IsQ0FQZ0M7QUFBQTtBQUFBO0FBQUE7O0FBUTVCdEQsZ0JBQUFBLElBUjRCLEdBUXJCWSxPQUFPLENBQUNpQixPQUFSLENBQWdCcEMsS0FBaEIsQ0FBc0IsR0FBdEIsRUFBMkJDLEdBQTNCLEdBQWlDQyxPQUFqQyxDQUF5QzJELE1BQXpDLEVBQWlELEVBQWpELENBUnFCO0FBQUEsOEJBU3RCdkIsT0FBTyxDQUFDL0IsSUFBRCxDQVRlOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBVTFCb0MsU0FBUyxDQUFDb0IsTUFBVixDQUFpQkMsT0FBakIsQ0FBeUJDLE9BQXpCLENBQWlDO0FBQ3JDQyxrQkFBQUEsS0FBSyxFQUFFO0FBQUVyQixvQkFBQUEsS0FBSyxFQUFFMUIsT0FBTyxDQUFDMEIsS0FBUixDQUFjWSxFQUF2QjtBQUEyQmxELG9CQUFBQSxJQUFJLEVBQUpBO0FBQTNCO0FBRDhCLGlCQUFqQyxDQVYwQjs7QUFBQTtBQUFBOztBQUFBO0FBUzVCNEQsZ0JBQUFBLEdBVDRCOztBQWVsQyxvQkFBSUEsR0FBSixFQUFTO0FBQ0R4RCxrQkFBQUEsTUFEQyxHQUNRLElBQUluQixHQUFKLCtDQUFZRCxXQUFaLHVDQUE0QkUsVUFBVSxDQUFDZ0IsR0FBWCxDQUFlMEQsR0FBRyxDQUFDNUIsSUFBbkIsQ0FBNUIsR0FEUjtBQUVQdEIsa0JBQUFBLFNBQVMsQ0FBQ04sTUFBRCxFQUFTd0QsR0FBRyxDQUFDcEUsS0FBSixDQUFVQyxLQUFWLENBQWdCLEdBQWhCLENBQVQsRUFBK0JtQixPQUEvQixFQUF3Q2dELEdBQUcsQ0FBQy9DLE9BQTVDLENBQVQ7QUFDRDs7QUFsQmlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JyQztBQXJCSyxHQXRCSztBQThDYmdELEVBQUFBLFFBQVEsRUFBRTtBQUNSQyxJQUFBQSxHQUFHLEVBQUU7QUFDSEMsTUFBQUEsS0FBSyxFQUFFLHFCQURKO0FBRUhDLE1BQUFBLElBQUksRUFBRSx5Q0FGSDtBQUdIQyxNQUFBQSxPQUFPLEVBQUUsa0JBSE47QUFJSEMsTUFBQUEsT0FBTztBQUFBLHFHQUFFO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBU0Msa0JBQUFBLEtBQVQsUUFBU0EsS0FBVDtBQUFvQnZELGtCQUFBQSxPQUFwQixTQUFvQkEsT0FBcEI7QUFBQSwyREFDY3VELEtBRGQsTUFDRW5DLElBREYsY0FDUW9DLEVBRFI7O0FBQUEsd0JBRUgsQ0FBQ3BDLElBQUQsSUFBUyxDQUFDb0MsRUFGUDtBQUFBO0FBQUE7QUFBQTs7QUFBQSxvREFFa0J4RCxPQUFPLENBQUNnQixLQUFSLENBQWMsK0NBQWQsQ0FGbEI7O0FBQUE7QUFBQSxzQkFHRjFDLFVBQVUsQ0FBQ2UsR0FBWCxDQUFlK0IsSUFBZixDQUhFO0FBQUE7QUFBQTtBQUFBOztBQUFBLG9EQUcyQnBCLE9BQU8sQ0FBQ2dCLEtBQVIsYUFBa0JJLElBQWxCLHNEQUFpRXFDLEtBQUssQ0FBQ0MsSUFBTixDQUFXcEYsVUFBVSxDQUFDcUYsSUFBWCxFQUFYLEVBQThCekYsSUFBOUIsQ0FBbUMsR0FBbkMsQ0FBakUsRUFIM0I7O0FBQUE7QUFLRHNCLGtCQUFBQSxNQUxDLEdBS1EsSUFBSW5CLEdBQUosK0NBQVlELFdBQVosdUNBQTRCRSxVQUFVLENBQUNnQixHQUFYLENBQWU4QixJQUFmLENBQTVCLEdBTFI7QUFNRHJCLGtCQUFBQSxNQU5DLEdBTVF3RCxLQUFLLENBQUMzRCxLQUFOLENBQVksQ0FBWixFQUFlWSxHQUFmLENBQW1CLFVBQUFmLENBQUM7QUFBQSwyQkFBSUYsVUFBVSxDQUFDQyxNQUFELEVBQVNDLENBQUMsQ0FBQ21FLFdBQUYsRUFBVCxDQUFkO0FBQUEsbUJBQXBCLEVBQTZEQyxJQUE3RCxFQU5SO0FBUVAvRCxrQkFBQUEsU0FBUyxDQUFDTixNQUFELEVBQVNPLE1BQVQsRUFBaUJDLE9BQWpCLENBQVQ7O0FBUk87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBRjs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUpKLEtBREc7QUFnQlI4RCxJQUFBQSxNQUFNLEVBQUU7QUFDTlgsTUFBQUEsS0FBSyxFQUFFLCtCQUREO0FBRU5DLE1BQUFBLElBQUksRUFBRSx1Q0FGQTtBQUdOQyxNQUFBQSxPQUFPLEVBQUUsMkJBSEg7QUFJTkMsTUFBQUEsT0FBTztBQUFBLHNHQUFFO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBU0Msa0JBQUFBLEtBQVQsU0FBU0EsS0FBVCxFQUFnQi9CLFNBQWhCLFNBQWdCQSxTQUFoQjtBQUErQnhCLGtCQUFBQSxPQUEvQixTQUErQkEsT0FBL0I7QUFBQSw0REFDb0J1RCxLQURwQixNQUNFbkMsSUFERixlQUNRaEMsSUFEUixlQUNjb0UsRUFEZDs7QUFBQSx3QkFFSCxDQUFDcEMsSUFBRCxJQUFTLENBQUNoQyxJQUFWLElBQWtCLENBQUNvRSxFQUZoQjtBQUFBO0FBQUE7QUFBQTs7QUFBQSxvREFFMkJ4RCxPQUFPLENBQUNnQixLQUFSLENBQWMsd0RBQWQsQ0FGM0I7O0FBQUE7QUFBQSxzQkFHRjFDLFVBQVUsQ0FBQ2UsR0FBWCxDQUFlK0IsSUFBZixDQUhFO0FBQUE7QUFBQTtBQUFBOztBQUFBLG9EQUcyQnBCLE9BQU8sQ0FBQ2dCLEtBQVIsYUFBa0JJLElBQWxCLHNEQUFpRXFDLEtBQUssQ0FBQ0MsSUFBTixDQUFXcEYsVUFBVSxDQUFDcUYsSUFBWCxFQUFYLEVBQThCekYsSUFBOUIsQ0FBbUMsR0FBbkMsQ0FBakUsRUFIM0I7O0FBQUE7QUFLRHNCLGtCQUFBQSxNQUxDLEdBS1EsSUFBSW5CLEdBQUosK0NBQVlELFdBQVosdUNBQTRCRSxVQUFVLENBQUNnQixHQUFYLENBQWU4QixJQUFmLENBQTVCLEdBTFI7QUFNRHhDLGtCQUFBQSxLQU5DLEdBTU8yRSxLQUFLLENBQUMzRCxLQUFOLENBQVksQ0FBWixFQUFlWSxHQUFmLENBQW1CLFVBQUFmLENBQUM7QUFBQSwyQkFBSUYsVUFBVSxDQUFDQyxNQUFELEVBQVNDLENBQUMsQ0FBQ21FLFdBQUYsRUFBVCxDQUFkO0FBQUEsbUJBQXBCLEVBQTZEQyxJQUE3RCxHQUFvRTNGLElBQXBFLENBQXlFLEdBQXpFLENBTlA7QUFBQTtBQUFBLHlCQVFEc0QsU0FBUyxDQUFDb0IsTUFBVixDQUFpQkMsT0FBakIsQ0FBeUIzQyxNQUF6QixDQUFnQztBQUFFd0Isb0JBQUFBLEtBQUssRUFBRTFCLE9BQU8sQ0FBQzBCLEtBQVIsQ0FBY1ksRUFBdkI7QUFBMkJsRCxvQkFBQUEsSUFBSSxFQUFKQSxJQUEzQjtBQUFpQzJDLG9CQUFBQSxTQUFTLEVBQUUvQixPQUFPLENBQUNxQyxNQUFSLENBQWVDLEVBQTNEO0FBQStEbEIsb0JBQUFBLElBQUksRUFBSkEsSUFBL0Q7QUFBcUV4QyxvQkFBQUEsS0FBSyxFQUFMQTtBQUFyRSxtQkFBaEMsQ0FSQzs7QUFBQTtBQVVQb0Isa0JBQUFBLE9BQU8sQ0FBQytELE9BQVIsQ0FBZ0JDLElBQWhCLDJCQUF1Q3BGLEtBQXZDLHFCQUFxRFEsSUFBckQ7O0FBVk87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBRjs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUpELEtBaEJBO0FBaUNSNkUsSUFBQUEsU0FBUyxFQUFFO0FBQ1RkLE1BQUFBLEtBQUssRUFBRSw0QkFERTtBQUVUQyxNQUFBQSxJQUFJLEVBQUUseUNBRkc7QUFHVEMsTUFBQUEsT0FBTyxFQUFFLHNDQUhBO0FBSVRDLE1BQUFBLE9BQU87QUFBQSxzR0FBRTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQVNDLGtCQUFBQSxLQUFULFNBQVNBLEtBQVQsRUFBZ0IvQixTQUFoQixTQUFnQkEsU0FBaEI7QUFBK0J4QixrQkFBQUEsT0FBL0IsU0FBK0JBLE9BQS9CO0FBQUEsNERBQ2N1RCxLQURkLE1BQ0VuRSxJQURGLGVBQ1FvRSxFQURSOztBQUFBLHdCQUVILENBQUNwRSxJQUFELElBQVMsQ0FBQ29FLEVBRlA7QUFBQTtBQUFBO0FBQUE7O0FBQUEsb0RBRWtCeEQsT0FBTyxDQUFDZ0IsS0FBUixDQUFjLDZEQUFkLENBRmxCOztBQUFBO0FBQUE7QUFBQSx5QkFJV1EsU0FBUyxDQUFDb0IsTUFBVixDQUFpQkMsT0FBakIsQ0FBeUJDLE9BQXpCLENBQWlDO0FBQ2pEQyxvQkFBQUEsS0FBSyxFQUFFO0FBQUVyQixzQkFBQUEsS0FBSyxFQUFFMUIsT0FBTyxDQUFDMEIsS0FBUixDQUFjWSxFQUF2QjtBQUEyQmxELHNCQUFBQSxJQUFJLEVBQUpBO0FBQTNCO0FBRDBDLG1CQUFqQyxDQUpYOztBQUFBO0FBSUQ0RCxrQkFBQUEsR0FKQzs7QUFBQSxzQkFRRkEsR0FSRTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxvREFRVWhELE9BQU8sQ0FBQ2dCLEtBQVIsYUFBa0I1QixJQUFsQixrQ0FSVjs7QUFBQTtBQVNQNEQsa0JBQUFBLEdBQUcsQ0FBQy9DLE9BQUosR0FBY3NELEtBQUssQ0FBQzNELEtBQU4sQ0FBWSxDQUFaLEVBQWUxQixJQUFmLENBQW9CLEdBQXBCLENBQWQ7QUFUTztBQUFBLHlCQVVEOEUsR0FBRyxDQUFDa0IsSUFBSixFQVZDOztBQUFBO0FBWVBsRSxrQkFBQUEsT0FBTyxDQUFDK0QsT0FBUixDQUFnQkMsSUFBaEIsMENBQXNENUUsSUFBdEQ7O0FBWk87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBRjs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUpFO0FBakNIO0FBOUNHLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InXHJcbmltcG9ydCB7IERhdGFUeXBlcyB9IGZyb20gJ3NlcXVlbGl6ZSdcclxuXHJcbmNvbnN0IGltZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnaW1nJylcclxuY29uc3QgYmFzaWNJbnB1dHMgPSBuZXcgTWFwKClcclxuY29uc3QgZ2FtZUlucHV0cyA9IG5ldyBNYXAoKVxyXG5cclxuZ2xvYi5zeW5jKHBhdGguam9pbihpbWdQYXRoLCAnYmFzaWMvKionKSwgeyBub2RpcjogdHJ1ZSB9KVxyXG4gIC5mb3JFYWNoKHAgPT4ge1xyXG4gICAgY29uc3QgaW5wdXQgPSBwLnNwbGl0KCcvJykucG9wKCkucmVwbGFjZSgnLnBuZycsICcnKVxyXG4gICAgYmFzaWNJbnB1dHMuc2V0KGlucHV0LCBwKVxyXG4gIH0pXHJcblxyXG5iYXNpY0lucHV0cy5zZXQoJz4+JywgcGF0aC5qb2luKGltZ1BhdGgsICdiYXNpYy9kb3VibGVmb3J3YXJkLnBuZycpKVxyXG5cclxuZ2xvYi5zeW5jKHBhdGguam9pbihpbWdQYXRoLCAnZ2FtZXMvKionKSwgeyBub2RpcjogdHJ1ZSB9KVxyXG4gIC5mb3JFYWNoKHAgPT4ge1xyXG4gICAgY29uc3QgeyBkaXIsIG5hbWUgfSA9IHBhdGgucGFyc2UocGF0aC5yZWxhdGl2ZShwYXRoLmpvaW4oaW1nUGF0aCwgJ2dhbWVzJyksIHApKVxyXG5cclxuICAgIGlmICghZ2FtZUlucHV0cy5oYXMoZGlyKSkgZ2FtZUlucHV0cy5zZXQoZGlyLCBuZXcgTWFwKCkpXHJcbiAgICBnYW1lSW5wdXRzLmdldChkaXIpLnNldChuYW1lLCBwKVxyXG4gIH0pXHJcblxyXG5mdW5jdGlvbiBzb2x2ZUlucHV0IChpbnB1dHMsIGlucHV0KSB7XHJcbiAgaWYgKGlucHV0cy5oYXMoaW5wdXQpKSByZXR1cm4gW2lucHV0XVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBzMSA9IGlucHV0LnNsaWNlKDAsIDAgLSBpKVxyXG4gICAgaWYgKGlucHV0cy5oYXMoczEpKSByZXR1cm4gW3MxLCAuLi5zb2x2ZUlucHV0KGlucHV0cywgaW5wdXQuc2xpY2UoMCAtIGkpKV1cclxuICB9XHJcblxyXG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgXCIke2lucHV0fVwiIGFzIGEgcmVjb2duaXphYmxlIGlucHV0YClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc2VuZElucHV0IChpbnB1dHMsIHJlc3VsdCwgbWVzc2FnZSwgY2FwdGlvbikge1xyXG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IHNoYXJwKHsgY3JlYXRlOiB7IHdpZHRoOiAxNTIgKiByZXN1bHQubGVuZ3RoLCBoZWlnaHQ6IDE1MiwgY2hhbm5lbHM6IDQsIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcgfSB9KVxyXG4gICAgLmNvbXBvc2l0ZShyZXN1bHQubWFwKChpdCwgaW5kZXgpID0+XHJcbiAgICAgICh7IGlucHV0OiBpbnB1dHMuZ2V0KGl0KSwgbGVmdDogaW5kZXggKiAxNTIsIHRvcDogMCwgd2lkdGg6IDE1MiwgaGVpZ2h0OiAxNTIgfSlcclxuICAgICkpXHJcbiAgICAucG5nKClcclxuICAgIC50b0J1ZmZlcigpXHJcblxyXG4gIHJldHVybiBtZXNzYWdlLnJlcGx5KHsgY29udGVudDogY2FwdGlvbiwgZmlsZXM6IFtjYW52YXNdIH0pXHJcbn1cclxuXHJcbmNvbnN0IGJ1aWx0aW4gPSB7XHJcbiAgMzc6IHtcclxuICAgIGdhbWU6ICdzZicsXHJcbiAgICBjYXB0aW9uOiAnKioqTEVUUyBHTyBKVVNUSU4hKioqJyxcclxuICAgIGlucHV0OiAnNiA2IDYgNiA2IDYgNiA+PiA2IDYgNiA2IDYgNiA2ID4+IDggNiBqLiBoayA+PiAyIG1rID4+IDYyMyBocCA+PiAyMzYgMjM2IGxrJ1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG5hbWU6ICdmZy1ub3RhdGlvbicsXHJcbiAgaW50ZW50czogWydHVUlMRF9NRVNTQUdFUyddLFxyXG4gIHBhcnRpYWxzOiBbJ01FU1NBR0UnXSxcclxuXHJcbiAgcHJlbG9hZDogc2VxdWVsaXplID0+IHtcclxuICAgIHNlcXVlbGl6ZS5kZWZpbmUoJ2ZnaW5wdXQnLCB7XHJcbiAgICAgIGd1aWxkOiB7XHJcbiAgICAgICAgdHlwZTogRGF0YVR5cGVzLlNUUklORyxcclxuICAgICAgICBwcmltYXJ5S2V5OiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIG5hbWU6IHtcclxuICAgICAgICB0eXBlOiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICAgIHByaW1hcnlLZXk6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY3JlYXRlZEJ5OiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICBnYW1lOiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICBjYXB0aW9uOiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICBpbnB1dDogRGF0YVR5cGVzLlNUUklOR1xyXG4gICAgfSlcclxuICB9LFxyXG5cclxuICBldmVudHM6IHtcclxuICAgIGFzeW5jIG1lc3NhZ2VDcmVhdGUgKGdsb2JhbCwgbWVzc2FnZSkge1xyXG4gICAgICBjb25zdCB7IGNsaWVudCwgY29uZmlnLCBzZXF1ZWxpemUgfSA9IGdsb2JhbFxyXG4gICAgICBpZiAobWVzc2FnZS5hdXRob3IuaWQgPT09IGNsaWVudC51c2VyLmlkIHx8ICFtZXNzYWdlLm1lbWJlcikgcmV0dXJuXHJcblxyXG4gICAgICBjb25zdCBndWlsZElkID0gbWVzc2FnZS5ndWlsZElkXHJcbiAgICAgIGNvbnN0IHsgcHJlZml4IH0gPSBjb25maWdbZ3VpbGRJZF1cclxuXHJcbiAgICAgIGlmIChtZXNzYWdlLmNvbnRlbnQuc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IG1lc3NhZ2UuY29udGVudC5zcGxpdCgnICcpLnBvcCgpLnJlcGxhY2UocHJlZml4LCAnJylcclxuICAgICAgICBjb25zdCByb3cgPSBidWlsdGluW25hbWVdIHx8IChcclxuICAgICAgICAgIGF3YWl0IHNlcXVlbGl6ZS5tb2RlbHMuZmdpbnB1dC5maW5kT25lKHtcclxuICAgICAgICAgICAgd2hlcmU6IHsgZ3VpbGQ6IG1lc3NhZ2UuZ3VpbGQuaWQsIG5hbWUgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChyb3cpIHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0cyA9IG5ldyBNYXAoWy4uLmJhc2ljSW5wdXRzLCAuLi5nYW1lSW5wdXRzLmdldChyb3cuZ2FtZSldKVxyXG4gICAgICAgICAgc2VuZElucHV0KGlucHV0cywgcm93LmlucHV0LnNwbGl0KCcgJyksIG1lc3NhZ2UsIHJvdy5jYXB0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGNvbW1hbmRzOiB7XHJcbiAgICBmZ2k6IHtcclxuICAgICAgdXNhZ2U6ICdmZ2kgW2dhbWVdIFtpbnB1dHNdJyxcclxuICAgICAgZGVzYzogJ0NvbnZlcnRzIGEgbGlzdCBvZiBpbnB1dHMgaW50byBhbiBpbWFnZScsXHJcbiAgICAgIGV4YW1wbGU6ICdmZ2kgc2YgMjM2UCAyMTRLJyxcclxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgcGFyYW0gfSwgeyBtZXNzYWdlIH0pID0+IHtcclxuICAgICAgICBjb25zdCBbLCBnYW1lLCBpMV0gPSBwYXJhbVxyXG4gICAgICAgIGlmICghZ2FtZSB8fCAhaTEpIHJldHVybiBtZXNzYWdlLnJlcGx5KCdNaXNzaW5nIGFyZ3VtZW50cy4gRXhhbXBsZTogPmZnaSBzZiAyMzZQIDIxNEsnKVxyXG4gICAgICAgIGlmICghZ2FtZUlucHV0cy5oYXMoZ2FtZSkpIHJldHVybiBtZXNzYWdlLnJlcGx5KGBcIiR7Z2FtZX1cIiBpcyBub3QgYSB2YWxpZCBnYW1lLiBBdmFpbGFibGUgZ2FtZXM6ICR7QXJyYXkuZnJvbShnYW1lSW5wdXRzLmtleXMoKSkuam9pbignICcpfWApXHJcblxyXG4gICAgICAgIGNvbnN0IGlucHV0cyA9IG5ldyBNYXAoWy4uLmJhc2ljSW5wdXRzLCAuLi5nYW1lSW5wdXRzLmdldChnYW1lKV0pXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyYW0uc2xpY2UoMikubWFwKGkgPT4gc29sdmVJbnB1dChpbnB1dHMsIGkudG9Mb3dlckNhc2UoKSkpLmZsYXQoKVxyXG5cclxuICAgICAgICBzZW5kSW5wdXQoaW5wdXRzLCByZXN1bHQsIG1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBmZ3NhdmU6IHtcclxuICAgICAgdXNhZ2U6ICdmZ3NhdmUgW2dhbWVdIFtuYW1lXSBbaW5wdXRzXScsXHJcbiAgICAgIGRlc2M6ICdTYXZlcyBhIGxpc3Qgb2YgaW5wdXRzIGludG8gYSBjb21tYW5kJyxcclxuICAgICAgZXhhbXBsZTogJ2ZnaSBzZiB0ZXN0TmFtZSAyMzZQIDIxNEsnLFxyXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBwYXJhbSwgc2VxdWVsaXplIH0sIHsgbWVzc2FnZSB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgWywgZ2FtZSwgbmFtZSwgaTFdID0gcGFyYW1cclxuICAgICAgICBpZiAoIWdhbWUgfHwgIW5hbWUgfHwgIWkxKSByZXR1cm4gbWVzc2FnZS5yZXBseSgnTWlzc2luZyBhcmd1bWVudHMuIEV4YW1wbGU6ID5mZ2kgc2YgdGVzdE5hbWUgMjM2UCAyMTRLJylcclxuICAgICAgICBpZiAoIWdhbWVJbnB1dHMuaGFzKGdhbWUpKSByZXR1cm4gbWVzc2FnZS5yZXBseShgXCIke2dhbWV9XCIgaXMgbm90IGEgdmFsaWQgZ2FtZS4gQXZhaWxhYmxlIGdhbWVzOiAke0FycmF5LmZyb20oZ2FtZUlucHV0cy5rZXlzKCkpLmpvaW4oJyAnKX1gKVxyXG5cclxuICAgICAgICBjb25zdCBpbnB1dHMgPSBuZXcgTWFwKFsuLi5iYXNpY0lucHV0cywgLi4uZ2FtZUlucHV0cy5nZXQoZ2FtZSldKVxyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGFyYW0uc2xpY2UoMykubWFwKGkgPT4gc29sdmVJbnB1dChpbnB1dHMsIGkudG9Mb3dlckNhc2UoKSkpLmZsYXQoKS5qb2luKCcgJylcclxuXHJcbiAgICAgICAgYXdhaXQgc2VxdWVsaXplLm1vZGVscy5mZ2lucHV0LmNyZWF0ZSh7IGd1aWxkOiBtZXNzYWdlLmd1aWxkLmlkLCBuYW1lLCBjcmVhdGVkQnk6IG1lc3NhZ2UuYXV0aG9yLmlkLCBnYW1lLCBpbnB1dCB9KVxyXG5cclxuICAgICAgICBtZXNzYWdlLmNoYW5uZWwuc2VuZChgU2F2ZWQgY29tbWFuZCBcIiR7aW5wdXR9XCIgYXMgXCIke25hbWV9XCJgKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZmdjYXB0aW9uOiB7XHJcbiAgICAgIHVzYWdlOiAnZmdjYXB0aW9uIFtuYW1lXSBbY2FwdGlvbl0nLFxyXG4gICAgICBkZXNjOiAnQWRkcyBhIGNhcHRpb24gdG8gYSBzYXZlZCBpbnB1dCBjb21tYW5kJyxcclxuICAgICAgZXhhbXBsZTogJ2ZnY2FwdGlvbiB0ZXN0TmFtZSBUaGlzIGlzIGEgY2FwdGlvbicsXHJcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhcmFtLCBzZXF1ZWxpemUgfSwgeyBtZXNzYWdlIH0pID0+IHtcclxuICAgICAgICBjb25zdCBbLCBuYW1lLCBpMV0gPSBwYXJhbVxyXG4gICAgICAgIGlmICghbmFtZSB8fCAhaTEpIHJldHVybiBtZXNzYWdlLnJlcGx5KCdNaXNzaW5nIGFyZ3VtZW50cy4gRXhhbXBsZTogPmZnaSB0ZXN0TmFtZSBUaGlzIGlzIGEgY2FwdGlvbicpXHJcblxyXG4gICAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHNlcXVlbGl6ZS5tb2RlbHMuZmdpbnB1dC5maW5kT25lKHtcclxuICAgICAgICAgIHdoZXJlOiB7IGd1aWxkOiBtZXNzYWdlLmd1aWxkLmlkLCBuYW1lIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpZiAoIXJvdykgcmV0dXJuIG1lc3NhZ2UucmVwbHkoYFwiJHtuYW1lfVwiIGlzIG5vdCBhIHNhdmVkIGlucHV0IGxpc3RgKVxyXG4gICAgICAgIHJvdy5jYXB0aW9uID0gcGFyYW0uc2xpY2UoMikuam9pbignICcpXHJcbiAgICAgICAgYXdhaXQgcm93LnNhdmUoKVxyXG5cclxuICAgICAgICBtZXNzYWdlLmNoYW5uZWwuc2VuZChgU2F2ZWQgY2FwdGlvbiBmb3IgaW5wdXQgbGlzdCBcIiR7bmFtZX1cImApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
491
+ exports["default"] = _default;
package/package.json CHANGED
@@ -1,10 +1,25 @@
1
- {
2
- "name": "@lotus-tree/fg-notation",
3
- "version": "1.0.1",
4
- "main": "lib/index.js",
5
- "module": "src/index.js",
6
- "dependencies": {
7
- "glob": "^7.2.0",
8
- "sharp": "^0.29.3"
9
- }
10
- }
1
+ {
2
+ "name": "@lotus-tree/fg-notation",
3
+ "version": "1.1.4",
4
+ "main": "lib/index.js",
5
+ "module": "src/index.js",
6
+ "scripts": {
7
+ "run-babel": "babel --delete-dir-on-start --copy-files src",
8
+ "build": "yarn run run-babel --out-dir lib",
9
+ "dev": "yarn run run-babel --watch --out-dir dev",
10
+ "prepublishOnly": "yarn build"
11
+ },
12
+ "dependencies": {
13
+ "@lotus-tree/command-handler": "^2.1.0",
14
+ "bent": "^7.3.12",
15
+ "glob": "^7.2.0",
16
+ "sharp": "^0.29.3"
17
+ },
18
+ "devDependencies": {
19
+ "@babel/cli": "^7.16.7",
20
+ "@babel/core": "^7.16.7",
21
+ "@babel/node": "^7.16.7",
22
+ "@babel/plugin-transform-runtime": "^7.16.7",
23
+ "@babel/preset-env": "^7.16.7"
24
+ }
25
+ }
Binary file
package/src/index.js CHANGED
@@ -2,11 +2,34 @@ import sharp from 'sharp'
2
2
  import path from 'path'
3
3
  import glob from 'glob'
4
4
  import { DataTypes } from 'sequelize'
5
+ import bent from 'bent'
5
6
 
7
+ const getJSON = bent('json')
6
8
  const imgPath = path.join(__dirname, 'img')
7
9
  const basicInputs = new Map()
8
10
  const gameInputs = new Map()
9
11
 
12
+ let glossary = {}
13
+ let terms = []
14
+
15
+ getGlossary()
16
+ setInterval(getGlossary, 5 * 60 * 1000)
17
+
18
+ async function getGlossary () {
19
+ const result = await getJSON('https://glossary.infil.net/json/glossary.json')
20
+ const tempG = {}
21
+ const tempT = []
22
+
23
+ result.forEach(i => {
24
+ const term = i.term.toLowerCase()
25
+ tempG[term] = i
26
+ tempT.push(term)
27
+ })
28
+
29
+ glossary = tempG
30
+ terms = tempT
31
+ }
32
+
10
33
  glob.sync(path.join(imgPath, 'basic/**'), { nodir: true })
11
34
  .forEach(p => {
12
35
  const input = p.split('/').pop().replace('.png', '')
@@ -49,12 +72,16 @@ const builtin = {
49
72
  37: {
50
73
  game: 'sf',
51
74
  caption: '***LETS GO JUSTIN!***',
52
- input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623 hp >> 236 236 lk'
75
+ input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623 mp >> 236 236 lk'
53
76
  }
54
77
  }
55
78
 
56
79
  export default {
57
80
  name: 'fg-notation',
81
+ about: {
82
+ name: 'FG Notation',
83
+ value: '[Instructions and source code](https://lotus.chitowarlock.com/fgnotation)\n[Infil\'s Fighting Game Glossary](https://glossary.infil.net)\n[MagicianStuff\'s Fighthing Game notations emotes](https://twitter.com/MagicianStuff/status/1477931054484893697)'
84
+ },
58
85
  intents: ['GUILD_MESSAGES'],
59
86
  partials: ['MESSAGE'],
60
87
 
@@ -150,6 +177,24 @@ export default {
150
177
 
151
178
  message.channel.send(`Saved caption for input list "${name}"`)
152
179
  }
180
+ },
181
+ fgglossary: {
182
+ usage: 'fgglossary [search term]',
183
+ desc: 'Searches for a term on Infil\'s Glossary',
184
+ example: 'fgglossary mexican uppercut',
185
+ execute: async ({ param, sequelize }, { message }) => {
186
+ const params = param.slice(1)
187
+ if (params.length === 0) return message.reply('Missing search term. Example: >fgglossary mexican uppercut')
188
+
189
+ const search = params.join(' ').toLowerCase()
190
+ const result = terms.filter(i => i.includes(search))
191
+ const url = `https://glossary.infil.net/?t=${params.join('%20').toLowerCase()}`
192
+
193
+ if (result.length === 0) return message.reply(`Term "${search}" not found`)
194
+ if (result.length === 1) return message.reply(`\`\`\`${glossary[result[0]].def}\`\`\`Source: <${url}>`)
195
+
196
+ message.reply(`Multiple terms found: ${url}`)
197
+ }
153
198
  }
154
199
  }
155
200
  }