@promptbook/core 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +5 -0
  2. package/esm/index.es.js +1403 -0
  3. package/esm/index.es.js.map +1 -0
  4. package/esm/typings/_packages/core.index.d.ts +17 -0
  5. package/esm/typings/_packages/execute-javascript.index.d.ts +3 -0
  6. package/esm/typings/_packages/openai.index.d.ts +3 -0
  7. package/esm/typings/_packages/remote-client.index.d.ts +4 -0
  8. package/esm/typings/_packages/remote-server.index.d.ts +3 -0
  9. package/esm/typings/_packages/types.index.d.ts +20 -0
  10. package/esm/typings/_packages/utils.index.d.ts +6 -0
  11. package/esm/typings/_packages/wizzard.index.d.ts +2 -0
  12. package/esm/typings/classes/PromptTemplatePipeline.d.ts +68 -0
  13. package/esm/typings/classes/PromptTemplatePipelineLibrary.d.ts +55 -0
  14. package/esm/typings/config.d.ts +10 -0
  15. package/esm/typings/conversion/_importPtp.d.ts +12 -0
  16. package/esm/typings/conversion/parseCommand.d.ts +6 -0
  17. package/esm/typings/conversion/parseCommand.test.d.ts +1 -0
  18. package/esm/typings/conversion/promptTemplatePipelineStringToJson.d.ts +12 -0
  19. package/esm/typings/conversion/promptTemplatePipelineStringToJson.test.d.ts +1 -0
  20. package/esm/typings/conversion/validatePromptTemplatePipelineJson.d.ts +26 -0
  21. package/esm/typings/conversion/validatePromptTemplatePipelineJson.test.d.ts +1 -0
  22. package/esm/typings/execution/CommonExecutionToolsOptions.d.ts +6 -0
  23. package/esm/typings/execution/ExecutionTools.d.ts +25 -0
  24. package/esm/typings/execution/NaturalExecutionTools.d.ts +22 -0
  25. package/esm/typings/execution/PromptResult.d.ts +38 -0
  26. package/esm/typings/execution/PtpExecutor.d.ts +19 -0
  27. package/esm/typings/execution/ScriptExecutionTools.d.ts +34 -0
  28. package/esm/typings/execution/UserInterfaceTools.d.ts +30 -0
  29. package/esm/typings/execution/createPtpExecutor.d.ts +18 -0
  30. package/esm/typings/execution/plugins/natural-execution-tools/mocked/MockedEchoNaturalExecutionTools.d.ts +22 -0
  31. package/esm/typings/execution/plugins/natural-execution-tools/mocked/mocked-chat.test.d.ts +4 -0
  32. package/esm/typings/execution/plugins/natural-execution-tools/mocked/mocked-completion.test.d.ts +4 -0
  33. package/esm/typings/execution/plugins/natural-execution-tools/openai/OpenAiExecutionTools.d.ts +27 -0
  34. package/esm/typings/execution/plugins/natural-execution-tools/openai/OpenAiExecutionToolsOptions.d.ts +11 -0
  35. package/esm/typings/execution/plugins/natural-execution-tools/remote/RemoteNaturalExecutionTools.d.ts +35 -0
  36. package/esm/typings/execution/plugins/natural-execution-tools/remote/RemoteNaturalExecutionToolsOptions.d.ts +16 -0
  37. package/esm/typings/execution/plugins/natural-execution-tools/remote/createRemoteServer.d.ts +16 -0
  38. package/esm/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Error.d.ts +3 -0
  39. package/esm/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Progress.d.ts +4 -0
  40. package/esm/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Request.d.ts +6 -0
  41. package/esm/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Response.d.ts +4 -0
  42. package/esm/typings/execution/plugins/natural-execution-tools/remote/interfaces/RemoteServerOptions.d.ts +20 -0
  43. package/esm/typings/execution/plugins/script-execution-tools/javascript/JavascriptEvalExecutionTools.d.ts +19 -0
  44. package/esm/typings/execution/plugins/script-execution-tools/javascript/JavascriptEvalExecutionTools.test.d.ts +4 -0
  45. package/esm/typings/execution/plugins/script-execution-tools/javascript/JavascriptExecutionTools.d.ts +20 -0
  46. package/esm/typings/execution/plugins/script-execution-tools/javascript/utils/preserve.d.ts +11 -0
  47. package/esm/typings/execution/plugins/script-execution-tools/postprocessing.test.d.ts +4 -0
  48. package/esm/typings/execution/plugins/script-execution-tools/python/PythonExecutionTools.d.ts +15 -0
  49. package/esm/typings/execution/plugins/script-execution-tools/script-execution-errors.test.d.ts +1 -0
  50. package/esm/typings/execution/plugins/script-execution-tools/script-execution-tools.test.d.ts +1 -0
  51. package/esm/typings/execution/plugins/script-execution-tools/typescript/TypescriptExecutionTools.d.ts +15 -0
  52. package/esm/typings/execution/plugins/user-interface-execution-tools/callback/CallbackInterfaceTools.d.ts +14 -0
  53. package/esm/typings/execution/plugins/user-interface-execution-tools/callback/CallbackInterfaceToolsOptions.d.ts +12 -0
  54. package/esm/typings/execution/plugins/user-interface-execution-tools/simple-prompt/SimplePromptInterfaceTools.d.ts +16 -0
  55. package/esm/typings/execution/plugins/user-interface-execution-tools/user-interface-execution-tools.test.d.ts +1 -0
  56. package/esm/typings/types/Command.d.ts +65 -0
  57. package/esm/typings/types/ExecutionTypes.d.ts +13 -0
  58. package/esm/typings/types/ModelRequirements.d.ts +28 -0
  59. package/esm/typings/types/Parameters.d.ts +14 -0
  60. package/esm/typings/types/Prompt.d.ts +35 -0
  61. package/esm/typings/types/PromptTemplatePipelineJson/PromptTemplateJson.d.ts +82 -0
  62. package/esm/typings/types/PromptTemplatePipelineJson/PromptTemplateParameterJson.d.ts +23 -0
  63. package/esm/typings/types/PromptTemplatePipelineJson/PromptTemplatePipelineJson.d.ts +56 -0
  64. package/esm/typings/types/PromptTemplatePipelineString.d.ts +14 -0
  65. package/esm/typings/types/ScriptLanguage.d.ts +9 -0
  66. package/esm/typings/types/TaskProgress.d.ts +12 -0
  67. package/esm/typings/types/typeAliasEmoji.d.ts +9 -0
  68. package/esm/typings/types/typeAliases.d.ts +477 -0
  69. package/esm/typings/utils/emojis.d.ts +16 -0
  70. package/esm/typings/utils/just.d.ts +10 -0
  71. package/esm/typings/utils/markdown/extractAllListItemsFromMarkdown.d.ts +15 -0
  72. package/esm/typings/utils/markdown/extractAllListItemsFromMarkdown.test.d.ts +1 -0
  73. package/esm/typings/utils/markdown/extractBlocksFromMarkdown.d.ts +13 -0
  74. package/esm/typings/utils/markdown/extractBlocksFromMarkdown.test.d.ts +1 -0
  75. package/esm/typings/utils/markdown/extractOneBlockFromMarkdown.d.ts +16 -0
  76. package/esm/typings/utils/markdown/extractOneBlockFromMarkdown.test.d.ts +1 -0
  77. package/esm/typings/utils/markdown/removeContentComments.d.ts +8 -0
  78. package/esm/typings/utils/markdown/removeContentComments.test.d.ts +1 -0
  79. package/esm/typings/utils/markdown/removeMarkdownFormatting.d.ts +8 -0
  80. package/esm/typings/utils/markdown/removeMarkdownFormatting.test.d.ts +1 -0
  81. package/esm/typings/utils/markdown-json/MarkdownStructure.d.ts +25 -0
  82. package/esm/typings/utils/markdown-json/countMarkdownStructureDeepness.d.ts +7 -0
  83. package/esm/typings/utils/markdown-json/countMarkdownStructureDeepness.test.d.ts +1 -0
  84. package/esm/typings/utils/markdown-json/markdownToMarkdownStructure.d.ts +13 -0
  85. package/esm/typings/utils/markdown-json/markdownToMarkdownStructure.test.d.ts +1 -0
  86. package/esm/typings/utils/removeEmojis.d.ts +7 -0
  87. package/esm/typings/utils/removeEmojis.test.d.ts +1 -0
  88. package/esm/typings/utils/removeQuotes.d.ts +13 -0
  89. package/esm/typings/utils/removeQuotes.test.d.ts +1 -0
  90. package/esm/typings/utils/replaceParameters.d.ts +16 -0
  91. package/esm/typings/utils/replaceParameters.test.d.ts +1 -0
  92. package/esm/typings/utils/unwrapResult.d.ts +13 -0
  93. package/esm/typings/utils/unwrapResult.test.d.ts +1 -0
  94. package/esm/typings/wizzard/Wizzard.d.ts +1 -0
  95. package/esm/typings/wizzard/sample.d.ts +5 -0
  96. package/package.json +43 -0
  97. package/umd/index.umd.js +1423 -0
  98. package/umd/index.umd.js.map +1 -0
  99. package/umd/typings/_packages/core.index.d.ts +17 -0
  100. package/umd/typings/_packages/execute-javascript.index.d.ts +3 -0
  101. package/umd/typings/_packages/openai.index.d.ts +3 -0
  102. package/umd/typings/_packages/remote-client.index.d.ts +4 -0
  103. package/umd/typings/_packages/remote-server.index.d.ts +3 -0
  104. package/umd/typings/_packages/types.index.d.ts +20 -0
  105. package/umd/typings/_packages/utils.index.d.ts +6 -0
  106. package/umd/typings/_packages/wizzard.index.d.ts +2 -0
  107. package/umd/typings/classes/PromptTemplatePipeline.d.ts +68 -0
  108. package/umd/typings/classes/PromptTemplatePipelineLibrary.d.ts +55 -0
  109. package/umd/typings/config.d.ts +10 -0
  110. package/umd/typings/conversion/_importPtp.d.ts +12 -0
  111. package/umd/typings/conversion/parseCommand.d.ts +6 -0
  112. package/umd/typings/conversion/parseCommand.test.d.ts +1 -0
  113. package/umd/typings/conversion/promptTemplatePipelineStringToJson.d.ts +12 -0
  114. package/umd/typings/conversion/promptTemplatePipelineStringToJson.test.d.ts +1 -0
  115. package/umd/typings/conversion/validatePromptTemplatePipelineJson.d.ts +26 -0
  116. package/umd/typings/conversion/validatePromptTemplatePipelineJson.test.d.ts +1 -0
  117. package/umd/typings/execution/CommonExecutionToolsOptions.d.ts +6 -0
  118. package/umd/typings/execution/ExecutionTools.d.ts +25 -0
  119. package/umd/typings/execution/NaturalExecutionTools.d.ts +22 -0
  120. package/umd/typings/execution/PromptResult.d.ts +38 -0
  121. package/umd/typings/execution/PtpExecutor.d.ts +19 -0
  122. package/umd/typings/execution/ScriptExecutionTools.d.ts +34 -0
  123. package/umd/typings/execution/UserInterfaceTools.d.ts +30 -0
  124. package/umd/typings/execution/createPtpExecutor.d.ts +18 -0
  125. package/umd/typings/execution/plugins/natural-execution-tools/mocked/MockedEchoNaturalExecutionTools.d.ts +22 -0
  126. package/umd/typings/execution/plugins/natural-execution-tools/mocked/mocked-chat.test.d.ts +4 -0
  127. package/umd/typings/execution/plugins/natural-execution-tools/mocked/mocked-completion.test.d.ts +4 -0
  128. package/umd/typings/execution/plugins/natural-execution-tools/openai/OpenAiExecutionTools.d.ts +27 -0
  129. package/umd/typings/execution/plugins/natural-execution-tools/openai/OpenAiExecutionToolsOptions.d.ts +11 -0
  130. package/umd/typings/execution/plugins/natural-execution-tools/remote/RemoteNaturalExecutionTools.d.ts +35 -0
  131. package/umd/typings/execution/plugins/natural-execution-tools/remote/RemoteNaturalExecutionToolsOptions.d.ts +16 -0
  132. package/umd/typings/execution/plugins/natural-execution-tools/remote/createRemoteServer.d.ts +16 -0
  133. package/umd/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Error.d.ts +3 -0
  134. package/umd/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Progress.d.ts +4 -0
  135. package/umd/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Request.d.ts +6 -0
  136. package/umd/typings/execution/plugins/natural-execution-tools/remote/interfaces/Ptps_Response.d.ts +4 -0
  137. package/umd/typings/execution/plugins/natural-execution-tools/remote/interfaces/RemoteServerOptions.d.ts +20 -0
  138. package/umd/typings/execution/plugins/script-execution-tools/javascript/JavascriptEvalExecutionTools.d.ts +19 -0
  139. package/umd/typings/execution/plugins/script-execution-tools/javascript/JavascriptEvalExecutionTools.test.d.ts +4 -0
  140. package/umd/typings/execution/plugins/script-execution-tools/javascript/JavascriptExecutionTools.d.ts +20 -0
  141. package/umd/typings/execution/plugins/script-execution-tools/javascript/utils/preserve.d.ts +11 -0
  142. package/umd/typings/execution/plugins/script-execution-tools/postprocessing.test.d.ts +4 -0
  143. package/umd/typings/execution/plugins/script-execution-tools/python/PythonExecutionTools.d.ts +15 -0
  144. package/umd/typings/execution/plugins/script-execution-tools/script-execution-errors.test.d.ts +1 -0
  145. package/umd/typings/execution/plugins/script-execution-tools/script-execution-tools.test.d.ts +1 -0
  146. package/umd/typings/execution/plugins/script-execution-tools/typescript/TypescriptExecutionTools.d.ts +15 -0
  147. package/umd/typings/execution/plugins/user-interface-execution-tools/callback/CallbackInterfaceTools.d.ts +14 -0
  148. package/umd/typings/execution/plugins/user-interface-execution-tools/callback/CallbackInterfaceToolsOptions.d.ts +12 -0
  149. package/umd/typings/execution/plugins/user-interface-execution-tools/simple-prompt/SimplePromptInterfaceTools.d.ts +16 -0
  150. package/umd/typings/execution/plugins/user-interface-execution-tools/user-interface-execution-tools.test.d.ts +1 -0
  151. package/umd/typings/types/Command.d.ts +65 -0
  152. package/umd/typings/types/ExecutionTypes.d.ts +13 -0
  153. package/umd/typings/types/ModelRequirements.d.ts +28 -0
  154. package/umd/typings/types/Parameters.d.ts +14 -0
  155. package/umd/typings/types/Prompt.d.ts +35 -0
  156. package/umd/typings/types/PromptTemplatePipelineJson/PromptTemplateJson.d.ts +82 -0
  157. package/umd/typings/types/PromptTemplatePipelineJson/PromptTemplateParameterJson.d.ts +23 -0
  158. package/umd/typings/types/PromptTemplatePipelineJson/PromptTemplatePipelineJson.d.ts +56 -0
  159. package/umd/typings/types/PromptTemplatePipelineString.d.ts +14 -0
  160. package/umd/typings/types/ScriptLanguage.d.ts +9 -0
  161. package/umd/typings/types/TaskProgress.d.ts +12 -0
  162. package/umd/typings/types/typeAliasEmoji.d.ts +9 -0
  163. package/umd/typings/types/typeAliases.d.ts +477 -0
  164. package/umd/typings/utils/emojis.d.ts +16 -0
  165. package/umd/typings/utils/just.d.ts +10 -0
  166. package/umd/typings/utils/markdown/extractAllListItemsFromMarkdown.d.ts +15 -0
  167. package/umd/typings/utils/markdown/extractAllListItemsFromMarkdown.test.d.ts +1 -0
  168. package/umd/typings/utils/markdown/extractBlocksFromMarkdown.d.ts +13 -0
  169. package/umd/typings/utils/markdown/extractBlocksFromMarkdown.test.d.ts +1 -0
  170. package/umd/typings/utils/markdown/extractOneBlockFromMarkdown.d.ts +16 -0
  171. package/umd/typings/utils/markdown/extractOneBlockFromMarkdown.test.d.ts +1 -0
  172. package/umd/typings/utils/markdown/removeContentComments.d.ts +8 -0
  173. package/umd/typings/utils/markdown/removeContentComments.test.d.ts +1 -0
  174. package/umd/typings/utils/markdown/removeMarkdownFormatting.d.ts +8 -0
  175. package/umd/typings/utils/markdown/removeMarkdownFormatting.test.d.ts +1 -0
  176. package/umd/typings/utils/markdown-json/MarkdownStructure.d.ts +25 -0
  177. package/umd/typings/utils/markdown-json/countMarkdownStructureDeepness.d.ts +7 -0
  178. package/umd/typings/utils/markdown-json/countMarkdownStructureDeepness.test.d.ts +1 -0
  179. package/umd/typings/utils/markdown-json/markdownToMarkdownStructure.d.ts +13 -0
  180. package/umd/typings/utils/markdown-json/markdownToMarkdownStructure.test.d.ts +1 -0
  181. package/umd/typings/utils/removeEmojis.d.ts +7 -0
  182. package/umd/typings/utils/removeEmojis.test.d.ts +1 -0
  183. package/umd/typings/utils/removeQuotes.d.ts +13 -0
  184. package/umd/typings/utils/removeQuotes.test.d.ts +1 -0
  185. package/umd/typings/utils/replaceParameters.d.ts +16 -0
  186. package/umd/typings/utils/replaceParameters.test.d.ts +1 -0
  187. package/umd/typings/utils/unwrapResult.d.ts +13 -0
  188. package/umd/typings/utils/unwrapResult.test.d.ts +1 -0
  189. package/umd/typings/wizzard/Wizzard.d.ts +1 -0
  190. package/umd/typings/wizzard/sample.d.ts +5 -0
@@ -0,0 +1,1423 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('n12'), require('spacetrim')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'n12', 'spacetrim'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["ptp-core"] = {}, global.n12, global.spaceTrim));
5
+ })(this, (function (exports, n12, spaceTrim) { 'use strict';
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var spaceTrim__default = /*#__PURE__*/_interopDefaultLegacy(spaceTrim);
10
+
11
+ /*! *****************************************************************************
12
+ Copyright (c) Microsoft Corporation.
13
+
14
+ Permission to use, copy, modify, and/or distribute this software for any
15
+ purpose with or without fee is hereby granted.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
18
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
19
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
20
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
21
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
22
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
23
+ PERFORMANCE OF THIS SOFTWARE.
24
+ ***************************************************************************** */
25
+
26
+ var __assign = function() {
27
+ __assign = Object.assign || function __assign(t) {
28
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
29
+ s = arguments[i];
30
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
31
+ }
32
+ return t;
33
+ };
34
+ return __assign.apply(this, arguments);
35
+ };
36
+
37
+ function __awaiter(thisArg, _arguments, P, generator) {
38
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
39
+ return new (P || (P = Promise))(function (resolve, reject) {
40
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
41
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
42
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
43
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
44
+ });
45
+ }
46
+
47
+ function __generator(thisArg, body) {
48
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
49
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
50
+ function verb(n) { return function (v) { return step([n, v]); }; }
51
+ function step(op) {
52
+ if (f) throw new TypeError("Generator is already executing.");
53
+ while (_) try {
54
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
55
+ if (y = 0, t) op = [op[0] & 2, t.value];
56
+ switch (op[0]) {
57
+ case 0: case 1: t = op; break;
58
+ case 4: _.label++; return { value: op[1], done: false };
59
+ case 5: _.label++; y = op[1]; op = [0]; continue;
60
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
61
+ default:
62
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
63
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
64
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
65
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
66
+ if (t[2]) _.ops.pop();
67
+ _.trys.pop(); continue;
68
+ }
69
+ op = body.call(thisArg, _);
70
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
71
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
72
+ }
73
+ }
74
+
75
+ function __values(o) {
76
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
77
+ if (m) return m.call(o);
78
+ if (o && typeof o.length === "number") return {
79
+ next: function () {
80
+ if (o && i >= o.length) o = void 0;
81
+ return { value: o && o[i++], done: !o };
82
+ }
83
+ };
84
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
85
+ }
86
+
87
+ function __read(o, n) {
88
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
89
+ if (!m) return o;
90
+ var i = m.call(o), r, ar = [], e;
91
+ try {
92
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
93
+ }
94
+ catch (error) { e = { error: error }; }
95
+ finally {
96
+ try {
97
+ if (r && !r.done && (m = i["return"])) m.call(i);
98
+ }
99
+ finally { if (e) throw e.error; }
100
+ }
101
+ return ar;
102
+ }
103
+
104
+ /**
105
+ * The version of the PTP
106
+ */
107
+ var PTP_VERSION = '0.1.0';
108
+ /**
109
+ * Default model requirements for the pipeline
110
+ */
111
+ var DEFAULT_MODEL_REQUIREMENTS = {
112
+ variant: 'CHAT',
113
+ };
114
+
115
+ /**
116
+ * Supported script languages
117
+ */
118
+ var SUPPORTED_SCRIPT_LANGUAGES = ['javascript', 'typescript', 'python'];
119
+
120
+ /**
121
+ * Computes the deepness of the markdown structure.
122
+ *
123
+ * @private within the library
124
+ */
125
+ function countMarkdownStructureDeepness(markdownStructure) {
126
+ var e_1, _a;
127
+ var maxDeepness = 0;
128
+ try {
129
+ for (var _b = __values(markdownStructure.sections), _c = _b.next(); !_c.done; _c = _b.next()) {
130
+ var section = _c.value;
131
+ maxDeepness = Math.max(maxDeepness, countMarkdownStructureDeepness(section));
132
+ }
133
+ }
134
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
135
+ finally {
136
+ try {
137
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
138
+ }
139
+ finally { if (e_1) throw e_1.error; }
140
+ }
141
+ return maxDeepness + 1;
142
+ }
143
+
144
+ /**
145
+ * Parse a markdown string into a MarkdownStructure object.
146
+ *
147
+ * Note: This function does work with code blocks
148
+ * Note: This function does not work with markdown comments
149
+ *
150
+ * @param markdown The markdown string to parse.
151
+ * @returns The MarkdownStructure object.
152
+ *
153
+ * @private within the library
154
+ */
155
+ function markdownToMarkdownStructure(markdown) {
156
+ var e_1, _a;
157
+ var lines = markdown.split('\n');
158
+ var root = { level: 0, title: '', contentLines: [], sections: [], parent: null };
159
+ var current = root;
160
+ var isInsideCodeBlock = false;
161
+ try {
162
+ for (var lines_1 = __values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
163
+ var line = lines_1_1.value;
164
+ var headingMatch = line.match(/^(?<mark>#{1,6})\s(?<title>.*)/);
165
+ if (isInsideCodeBlock || !headingMatch) {
166
+ if (line.startsWith('```')) {
167
+ isInsideCodeBlock = !isInsideCodeBlock;
168
+ }
169
+ current.contentLines.push(line);
170
+ }
171
+ else {
172
+ var level = headingMatch.groups.mark.length;
173
+ var title = headingMatch.groups.title.trim();
174
+ var parent_1 = void 0;
175
+ if (level > current.level) {
176
+ // Note: Going deeper (next section is child of current)
177
+ parent_1 = current;
178
+ }
179
+ else {
180
+ // Note: Going up or staying at the same level (next section is sibling or parent or grandparent,... of current)
181
+ parent_1 = current;
182
+ while (parent_1.level !== level - 1) {
183
+ if (parent_1.parent === null /* <- Note: We are in root */) {
184
+ throw new Error(spaceTrim__default["default"]("\n The file has an invalid structure.\n The markdown file must have exactly one top-level section.\n "));
185
+ }
186
+ parent_1 = parent_1.parent;
187
+ }
188
+ }
189
+ var section = { level: level, title: title, contentLines: [], sections: [], parent: parent_1 };
190
+ parent_1.sections.push(section);
191
+ current = section;
192
+ }
193
+ }
194
+ }
195
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
196
+ finally {
197
+ try {
198
+ if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
199
+ }
200
+ finally { if (e_1) throw e_1.error; }
201
+ }
202
+ if (root.sections.length === 1) {
203
+ var markdownStructure = parsingMarkdownStructureToMarkdownStructure(root.sections[0]);
204
+ return markdownStructure;
205
+ }
206
+ throw new Error('The markdown file must have exactly one top-level section.');
207
+ // return root;
208
+ }
209
+ /**
210
+ * @private
211
+ */
212
+ function parsingMarkdownStructureToMarkdownStructure(parsingMarkdownStructure) {
213
+ var level = parsingMarkdownStructure.level, title = parsingMarkdownStructure.title, contentLines = parsingMarkdownStructure.contentLines, sections = parsingMarkdownStructure.sections;
214
+ return {
215
+ level: level,
216
+ title: title,
217
+ content: spaceTrim__default["default"](contentLines.join('\n')),
218
+ sections: sections.map(parsingMarkdownStructureToMarkdownStructure),
219
+ };
220
+ }
221
+
222
+ /**
223
+ * Utility function to extract all list items from markdown
224
+ *
225
+ * Note: It works with both ul and ol
226
+ * Note: It omits list items in code blocks
227
+ * Note: It flattens nested lists
228
+ * Note: It can not work with html syntax and comments
229
+ *
230
+ * @param markdown any valid markdown
231
+ * @returns
232
+ *
233
+ * @private within the library
234
+ */
235
+ function extractAllListItemsFromMarkdown(markdown) {
236
+ var e_1, _a;
237
+ var lines = markdown.split('\n');
238
+ var listItems = [];
239
+ var isInCodeBlock = false;
240
+ try {
241
+ for (var lines_1 = __values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
242
+ var line = lines_1_1.value;
243
+ var trimmedLine = line.trim();
244
+ if (trimmedLine.startsWith('```')) {
245
+ isInCodeBlock = !isInCodeBlock;
246
+ }
247
+ if (!isInCodeBlock && (trimmedLine.startsWith('-') || trimmedLine.match(/^\d+\./))) {
248
+ var listItem = trimmedLine.replace(/^-|\d+\./, '').trim();
249
+ listItems.push(listItem);
250
+ }
251
+ }
252
+ }
253
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
254
+ finally {
255
+ try {
256
+ if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
257
+ }
258
+ finally { if (e_1) throw e_1.error; }
259
+ }
260
+ return listItems;
261
+ }
262
+
263
+ /**
264
+ * Extracts all code blocks from markdown.
265
+ *
266
+ * @param markdown any valid markdown
267
+ * @returns code blocks with language and content
268
+ *
269
+ * @private within the library
270
+ */
271
+ function extractBlocksFromMarkdown(markdown) {
272
+ var e_1, _a;
273
+ var codeBlocks = [];
274
+ var lines = markdown.split('\n');
275
+ var currentLanguage = null;
276
+ var currentBlock = [];
277
+ try {
278
+ for (var lines_1 = __values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
279
+ var line = lines_1_1.value;
280
+ if (line.startsWith('```')) {
281
+ if (currentLanguage !== null) {
282
+ codeBlocks.push({ language: currentLanguage.trim() || null, content: currentBlock.join('\n') });
283
+ currentLanguage = null;
284
+ currentBlock = [];
285
+ }
286
+ else {
287
+ currentLanguage = line.slice(3).trim();
288
+ }
289
+ }
290
+ else if (currentLanguage !== null) {
291
+ currentBlock.push(line);
292
+ }
293
+ }
294
+ }
295
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
296
+ finally {
297
+ try {
298
+ if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
299
+ }
300
+ finally { if (e_1) throw e_1.error; }
301
+ }
302
+ if (currentLanguage !== null) {
303
+ codeBlocks.push({ language: currentLanguage.trim() || null, content: currentBlock.join('\n') });
304
+ }
305
+ return codeBlocks;
306
+ }
307
+
308
+ /**
309
+ * Extracts exactly ONE code block from markdown.
310
+ *
311
+ * Note: This function is similar to extractBlocksFromMarkdown but it validates that there is exactly one code block.
312
+ * Note: If there are multiple or no code blocks the function throws an error
313
+ *
314
+ * @param markdown any valid markdown
315
+ * @returns code block with language and content
316
+ *
317
+ * @private within the library
318
+ */
319
+ function extractOneBlockFromMarkdown(markdown) {
320
+ var codeBlocks = extractBlocksFromMarkdown(markdown);
321
+ if (codeBlocks.length !== 1) {
322
+ throw new Error('There should be exactly one code block in the markdown');
323
+ }
324
+ return codeBlocks[0];
325
+ }
326
+
327
+ /**
328
+ * Removes HTML or Markdown comments from a string.
329
+ *
330
+ * @param {string} content - The string to remove comments from.
331
+ * @returns {string} The input string with all comments removed.
332
+ */
333
+ function removeContentComments(content) {
334
+ return spaceTrim__default["default"](content.replace(/<!--(.*?)-->/gs, ''));
335
+ }
336
+
337
+ /**
338
+ * Execution type describes the way how the block is executed
339
+ *
340
+ * @see https://github.com/webgptorg/promptbook#execution-type
341
+ */
342
+ var ExecutionTypes = ['PROMPT_TEMPLATE', 'SIMPLE_TEMPLATE', 'SCRIPT', 'PROMPT_DIALOG'];
343
+
344
+ /**
345
+ * Removes Markdown formatting tags from a string.
346
+ *
347
+ * @param {string} str - The string to remove Markdown tags from.
348
+ * @returns {string} The input string with all Markdown tags removed.
349
+ */
350
+ function removeMarkdownFormatting(str) {
351
+ // Remove bold formatting
352
+ str = str.replace(/\*\*(.*?)\*\*/g, '$1');
353
+ // Remove italic formatting
354
+ str = str.replace(/\*(.*?)\*/g, '$1');
355
+ // Remove code formatting
356
+ str = str.replace(/`(.*?)`/g, '$1');
357
+ return str;
358
+ }
359
+
360
+ /**
361
+ * Parses one line of ul/ol to command
362
+ */
363
+ function parseCommand(listItem) {
364
+ if (listItem.includes('\n') || listItem.includes('\r')) {
365
+ throw new Error('Command can not contain new line characters:');
366
+ }
367
+ var type = listItem.trim();
368
+ type = type.split('`').join('');
369
+ type = type.split('"').join('');
370
+ type = type.split("'").join('');
371
+ type = type.split('~').join('');
372
+ type = type.split('[').join('');
373
+ type = type.split(']').join('');
374
+ type = type.split('(').join('');
375
+ type = type.split(')').join('');
376
+ type = n12.normalizeTo_SCREAMING_CASE(type);
377
+ type = type.split('DIALOGUE').join('DIALOG');
378
+ var listItemParts = listItem
379
+ .split(' ')
380
+ .map(function (part) { return part.trim(); })
381
+ .filter(function (item) { return item !== ''; })
382
+ .filter(function (item) { return !/^PTP$/i.test(item); })
383
+ .map(removeMarkdownFormatting);
384
+ if (type.startsWith('URL') || type.startsWith('PTP_URL') || type.startsWith('PTPURL') || type.startsWith('HTTPS')) {
385
+ if (!(listItemParts.length === 2 || (listItemParts.length === 1 && type.startsWith('HTTPS')))) {
386
+ throw new Error(spaceTrim__default["default"]("\n Invalid PTP_URL command:\n\n - ".concat(listItem, "\n ")));
387
+ }
388
+ var ptpUrlString = listItemParts.pop();
389
+ var ptpUrl = new URL(ptpUrlString);
390
+ if (ptpUrl.protocol !== 'https:') {
391
+ throw new Error(spaceTrim__default["default"]("\n Invalid PTP_URL command:\n\n - ".concat(listItem, "\n\n Protocol must be HTTPS\n ")));
392
+ }
393
+ if (ptpUrl.hash !== '') {
394
+ throw new Error(spaceTrim__default["default"]("\n Invalid PTP_URL command:\n\n - ".concat(listItem, "\n\n URL must not contain hash\n Hash is used for identification of the prompt template in the pipeline\n ")));
395
+ }
396
+ return {
397
+ type: 'PTP_URL',
398
+ ptpUrl: ptpUrl,
399
+ };
400
+ }
401
+ else if (type.startsWith('PTP_VERSION')) {
402
+ if (listItemParts.length !== 2) {
403
+ throw new Error(spaceTrim__default["default"]("\n Invalid PTP_VERSION command:\n\n - ".concat(listItem, "\n ")));
404
+ }
405
+ var ptpVersion = listItemParts.pop();
406
+ // TODO: Validate version
407
+ return {
408
+ type: 'PTP_VERSION',
409
+ ptpVersion: ptpVersion,
410
+ };
411
+ }
412
+ else if (type.startsWith('EXECUTE') ||
413
+ type.startsWith('EXEC') ||
414
+ type.startsWith('PROMPT_DIALOG') ||
415
+ type.startsWith('SIMPLE_TEMPLATE')) {
416
+ var executionTypes = ExecutionTypes.filter(function (executionType) { return type.includes(executionType); });
417
+ if (executionTypes.length !== 1) {
418
+ throw new Error(spaceTrim__default["default"](function (block) { return "\n Unknown execution type in command:\n\n - ".concat(listItem, "\n\n Supported execution types are:\n ").concat(block(ExecutionTypes.join(', ')), "\n "); }));
419
+ }
420
+ return {
421
+ type: 'EXECUTE',
422
+ executionType: executionTypes[0],
423
+ };
424
+ }
425
+ else if (type.startsWith('USE')) {
426
+ // TODO: Make this more elegant and dynamically
427
+ if (type.includes('CHAT')) {
428
+ return {
429
+ type: 'USE',
430
+ key: 'variant',
431
+ value: 'CHAT',
432
+ };
433
+ }
434
+ else if (type.includes('COMPLETION')) {
435
+ return {
436
+ type: 'USE',
437
+ key: 'variant',
438
+ value: 'COMPLETION',
439
+ };
440
+ }
441
+ else {
442
+ throw new Error(spaceTrim__default["default"](function (block) { return "\n Unknown variant in command:\n\n - ".concat(listItem, "\n\n Supported variants are:\n ").concat(block(['CHAT', 'COMPLETION'].join(', ')), "\n "); }));
443
+ }
444
+ }
445
+ else if (type.startsWith('PARAM') ||
446
+ type.startsWith('INPUT_PARAM') ||
447
+ type.startsWith('OUTPUT_PARAM') ||
448
+ listItem.startsWith('{') ||
449
+ listItem.startsWith('> {') /* <- Note: This is a bit hack to parse return parameters defined at the end of each section */) {
450
+ var parametersMatch = listItem.match(/\{(?<parameterName>[a-z0-9_]+)\}[^\S\r\n]*(?<parameterDescription>.*)$/im);
451
+ if (!parametersMatch || !parametersMatch.groups || !parametersMatch.groups.parameterName) {
452
+ throw new Error(spaceTrim__default["default"]("\n Invalid parameter in command:\n\n - ".concat(listItem, "\n ")));
453
+ }
454
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
455
+ var _a = parametersMatch.groups, parameterName = _a.parameterName, parameterDescription = _a.parameterDescription;
456
+ if (parameterDescription && parameterDescription.match(/\{(?<parameterName>[a-z0-9_]+)\}/im)) {
457
+ throw new Error(spaceTrim__default["default"]("\n Parameter {".concat(parameterName, "} can not contain another parameter in description:\n\n - ").concat(listItem, "\n ")));
458
+ }
459
+ var isInputParameter = type.startsWith('INPUT');
460
+ return {
461
+ type: 'PARAMETER',
462
+ parameterName: parameterName,
463
+ parameterDescription: parameterDescription.trim() || null,
464
+ isInputParameter: isInputParameter,
465
+ };
466
+ }
467
+ else if (type.startsWith('POSTPROCESS') || type.startsWith('POST_PROCESS')) {
468
+ if (listItemParts.length !== 2) {
469
+ throw new Error(spaceTrim__default["default"]("\n Invalid POSTPROCESSING command:\n\n - ".concat(listItem, "\n ")));
470
+ }
471
+ var functionName = listItemParts.pop();
472
+ return {
473
+ type: 'POSTPROCESS',
474
+ functionName: functionName,
475
+ };
476
+ }
477
+ else {
478
+ throw new Error(spaceTrim__default["default"]("\n Unknown command:\n\n - ".concat(listItem, "\n\n Supported commands are:\n - Execute\n - Use\n - Parameter\n - Input parameter\n - Output parameter\n - PTP Version\n ")));
479
+ }
480
+ }
481
+
482
+ /**
483
+ * Parse prompt template pipeline from string format to JSON format
484
+ *
485
+ * Note: This function does not validate logic of the pipeline only the syntax
486
+ */
487
+ function promptTemplatePipelineStringToJson(promptTemplatePipelineString) {
488
+ var e_1, _a, e_2, _b;
489
+ var ptpJson = {
490
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
491
+ title: undefined /* <- Note: Putting here placeholder to keep `title` on top at final JSON */,
492
+ ptpUrl: undefined /* <- Note: Putting here placeholder to keep `ptpUrl` on top at final JSON */,
493
+ ptpVersion: PTP_VERSION,
494
+ description: undefined /* <- Note: Putting here placeholder to keep `description` on top at final JSON */,
495
+ parameters: [],
496
+ promptTemplates: [],
497
+ };
498
+ // =============================================================
499
+ // Note: 1๏ธโƒฃ Normalization of the PTP string
500
+ promptTemplatePipelineString = removeContentComments(promptTemplatePipelineString);
501
+ promptTemplatePipelineString = promptTemplatePipelineString.replaceAll(/`\{(?<paramName>[a-z0-9_]+)\}`/gi, '{$<paramName>}');
502
+ promptTemplatePipelineString = promptTemplatePipelineString.replaceAll(/`->\s+\{(?<paramName>[a-z0-9_]+)\}`/gi, '-> {$<paramName>}');
503
+ // =============================================================
504
+ ///Note: 2๏ธโƒฃ Function for adding parameters
505
+ var addParam = function (parameterCommand) {
506
+ var parameterName = parameterCommand.parameterName, parameterDescription = parameterCommand.parameterDescription, isInputParameter = parameterCommand.isInputParameter;
507
+ var existingParameter = ptpJson.parameters.find(function (parameter) { return parameter.name === parameterName; });
508
+ if (existingParameter &&
509
+ existingParameter.description &&
510
+ existingParameter.description !== parameterDescription &&
511
+ parameterDescription) {
512
+ throw new Error(spaceTrim__default["default"](function (block) { return "\n Parameter {".concat(parameterName, "} is defined multiple times with different description.\n\n First definition:\n ").concat(block(existingParameter.description || '[undefined]'), "\n\n Second definition:\n ").concat(block(parameterDescription || '[undefined]'), "\n "); }));
513
+ }
514
+ if (existingParameter) {
515
+ if (parameterDescription) {
516
+ existingParameter.description = parameterDescription;
517
+ }
518
+ }
519
+ else {
520
+ ptpJson.parameters.push({
521
+ name: parameterName,
522
+ description: parameterDescription || undefined,
523
+ isInput: isInputParameter,
524
+ });
525
+ }
526
+ };
527
+ // =============================================================
528
+ // Note: 3๏ธโƒฃ Parse the dynamic part - the template pipeline
529
+ var markdownStructure = markdownToMarkdownStructure(promptTemplatePipelineString);
530
+ var markdownStructureDeepness = countMarkdownStructureDeepness(markdownStructure);
531
+ if (markdownStructureDeepness !== 2) {
532
+ throw new Error(spaceTrim__default["default"]("\n Invalid markdown structure.\n The markdown must have exactly 2 levels of headings (one top-level section and one section for each template).\n Now it has ".concat(markdownStructureDeepness, " levels of headings.\n ")));
533
+ }
534
+ ptpJson.title = markdownStructure.title;
535
+ // TODO: [1] DRY description
536
+ var description = markdownStructure.content;
537
+ // Note: Remove codeblocks
538
+ description = description.split(/^```.*^```/gms).join('');
539
+ //Note: Remove lists and return statement
540
+ description = description.split(/^(?:(?:-)|(?:\d\))|(?:`?->))\s+.*$/gm).join('');
541
+ description = spaceTrim__default["default"](description);
542
+ if (description === '') {
543
+ description = undefined;
544
+ }
545
+ ptpJson.description = description;
546
+ var defaultModelRequirements = __assign({}, DEFAULT_MODEL_REQUIREMENTS);
547
+ var listItems = extractAllListItemsFromMarkdown(markdownStructure.content);
548
+ try {
549
+ for (var listItems_1 = __values(listItems), listItems_1_1 = listItems_1.next(); !listItems_1_1.done; listItems_1_1 = listItems_1.next()) {
550
+ var listItem = listItems_1_1.value;
551
+ var command = parseCommand(listItem);
552
+ switch (command.type) {
553
+ case 'PTP_URL':
554
+ ptpJson.ptpUrl = command.ptpUrl.href;
555
+ break;
556
+ case 'PTP_VERSION':
557
+ ptpJson.ptpVersion = command.ptpVersion;
558
+ break;
559
+ case 'USE':
560
+ defaultModelRequirements[command.key] = command.value;
561
+ break;
562
+ case 'PARAMETER':
563
+ addParam(command);
564
+ break;
565
+ default:
566
+ throw new Error("Command ".concat(command.type, " is not allowed in the head of the prompt template pipeline ONLY at the prompt template block"));
567
+ }
568
+ }
569
+ }
570
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
571
+ finally {
572
+ try {
573
+ if (listItems_1_1 && !listItems_1_1.done && (_a = listItems_1.return)) _a.call(listItems_1);
574
+ }
575
+ finally { if (e_1) throw e_1.error; }
576
+ }
577
+ var _loop_1 = function (section) {
578
+ var e_3, _e, e_4, _f;
579
+ // TODO: Parse prompt template description (the content out of the codeblock and lists)
580
+ var templateModelRequirements = __assign({}, defaultModelRequirements);
581
+ var postprocessingCommands = [];
582
+ var listItems_3 = extractAllListItemsFromMarkdown(section.content);
583
+ var executionType = 'PROMPT_TEMPLATE';
584
+ var isExecutionTypeChanged = false;
585
+ try {
586
+ for (var listItems_2 = (e_3 = void 0, __values(listItems_3)), listItems_2_1 = listItems_2.next(); !listItems_2_1.done; listItems_2_1 = listItems_2.next()) {
587
+ var listItem = listItems_2_1.value;
588
+ var command = parseCommand(listItem);
589
+ switch (command.type) {
590
+ case 'EXECUTE':
591
+ if (isExecutionTypeChanged) {
592
+ throw new Error('Execution type is already defined in the prompt template. It can be defined only once.');
593
+ }
594
+ executionType = command.executionType;
595
+ isExecutionTypeChanged = true;
596
+ break;
597
+ case 'USE':
598
+ templateModelRequirements[command.key] = command.value;
599
+ break;
600
+ case 'PARAMETER':
601
+ addParam(command);
602
+ break;
603
+ case 'POSTPROCESS':
604
+ postprocessingCommands.push(command);
605
+ break;
606
+ default:
607
+ throw new Error("Command ".concat(command.type, " is not allowed in the block of the prompt template ONLY at the head of the prompt template pipeline"));
608
+ }
609
+ }
610
+ }
611
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
612
+ finally {
613
+ try {
614
+ if (listItems_2_1 && !listItems_2_1.done && (_e = listItems_2.return)) _e.call(listItems_2);
615
+ }
616
+ finally { if (e_3) throw e_3.error; }
617
+ }
618
+ var _g = extractOneBlockFromMarkdown(section.content), language = _g.language, content = _g.content;
619
+ if (executionType === 'SCRIPT') {
620
+ if (!language) {
621
+ throw new Error('You must specify the language of the script in the prompt template');
622
+ }
623
+ else if (!SUPPORTED_SCRIPT_LANGUAGES.includes(language)) {
624
+ throw new Error(spaceTrim__default["default"](function (block) { return "\n Script language ".concat(language, " is not supported.\n\n Supported languages are:\n ").concat(block(SUPPORTED_SCRIPT_LANGUAGES.join(', ')), "\n\n "); }));
625
+ }
626
+ }
627
+ var lastLine = section.content.split('\n').pop();
628
+ var match = /^->\s*\{(?<resultingParamName>[a-z0-9_]+)\}/im.exec(lastLine);
629
+ if (!match || match.groups === undefined || match.groups.resultingParamName === undefined) {
630
+ throw new Error(spaceTrim__default["default"](function (block) { return "\n Invalid template - each section must end with \"-> {...}\"\n\n Invalid section:\n ".concat(block(
631
+ // TODO: Show code of invalid sections each time + DRY
632
+ section.content
633
+ .split('\n')
634
+ .map(function (line) { return "> ".concat(line); })
635
+ .join('\n')), "\n "); }));
636
+ }
637
+ var resultingParameterName = match.groups.resultingParamName;
638
+ // TODO: [1] DRY description
639
+ var description_1 = section.content;
640
+ // Note: Remove codeblocks
641
+ description_1 = description_1.split(/^```.*^```/gms).join('');
642
+ //Note: Remove lists and return statement
643
+ description_1 = description_1.split(/^(?:(?:-)|(?:\d\))|(?:`?->))\s+.*$/gm).join('');
644
+ description_1 = spaceTrim__default["default"](description_1);
645
+ if (description_1 === '') {
646
+ description_1 = undefined;
647
+ }
648
+ var getParameterName = function (i) {
649
+ var parameterName = postprocessingCommands.length <= i
650
+ ? resultingParameterName
651
+ : n12.normalizeTo_camelCase("".concat(resultingParameterName, " before ").concat(postprocessingCommands[i].functionName));
652
+ var isParameterDefined = ptpJson.parameters.some(function (parameter) { return parameter.name === parameterName; });
653
+ if (!isParameterDefined) {
654
+ var parameterDescription = "*(".concat(n12.capitalize(section.title), " postprocessing ").concat(i + 1, "/").concat(postprocessingCommands.length, ")* {").concat(resultingParameterName, "} before `").concat(postprocessingCommands[i].functionName, "`");
655
+ addParam({
656
+ parameterName: parameterName,
657
+ parameterDescription: parameterDescription,
658
+ isInputParameter: false,
659
+ // TODO:> isPrivate: true,
660
+ });
661
+ }
662
+ return parameterName;
663
+ };
664
+ ptpJson.promptTemplates.push({
665
+ name: n12.normalizeTo_PascalCase(section.title),
666
+ title: section.title,
667
+ description: description_1,
668
+ executionType: executionType,
669
+ modelRequirements: templateModelRequirements,
670
+ contentLanguage: executionType === 'SCRIPT' ? language : undefined,
671
+ content: content,
672
+ resultingParameterName: getParameterName(0),
673
+ });
674
+ try {
675
+ for (var _h = (e_4 = void 0, __values(postprocessingCommands.map(function (_a, i) {
676
+ var functionName = _a.functionName;
677
+ return [functionName, i];
678
+ }))), _j = _h.next(); !_j.done; _j = _h.next()) {
679
+ var _k = __read(_j.value, 2), functionName = _k[0], i = _k[1];
680
+ ptpJson.promptTemplates.push({
681
+ name: n12.normalizeTo_PascalCase(section.title + ' Postprocessing ' + i),
682
+ title: "(".concat(i + 1, "/").concat(postprocessingCommands.length, ") ").concat(section.title, " postprocessing"),
683
+ description: "Postprocessing of section ".concat(section.title, " finally with resulting parameter {").concat(resultingParameterName, "}"),
684
+ executionType: 'SCRIPT',
685
+ contentLanguage: 'javascript',
686
+ content: "".concat(functionName, "(").concat(getParameterName(i), ")"),
687
+ resultingParameterName: getParameterName(i + 1),
688
+ });
689
+ }
690
+ }
691
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
692
+ finally {
693
+ try {
694
+ if (_j && !_j.done && (_f = _h.return)) _f.call(_h);
695
+ }
696
+ finally { if (e_4) throw e_4.error; }
697
+ }
698
+ };
699
+ try {
700
+ for (var _c = __values(markdownStructure.sections), _d = _c.next(); !_d.done; _d = _c.next()) {
701
+ var section = _d.value;
702
+ _loop_1(section);
703
+ }
704
+ }
705
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
706
+ finally {
707
+ try {
708
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
709
+ }
710
+ finally { if (e_2) throw e_2.error; }
711
+ }
712
+ // =============================================================
713
+ return ptpJson;
714
+ }
715
+ /**
716
+ * TODO: Report here line/column of error
717
+ * TODO: Use spaceTrim more effectively
718
+ */
719
+
720
+ /**
721
+ * Validates PromptTemplatePipelineJson if it is logically valid.
722
+ *
723
+ * It checks:
724
+ * - if it has correct parameters dependency
725
+ *
726
+ * It does NOT check:
727
+ * - if it is valid json
728
+ * - if it is meaningful
729
+ *
730
+ * @param ptp valid or invalid PromptTemplatePipelineJson
731
+ * @throws {Error} if invalid
732
+ */
733
+ function validatePromptTemplatePipelineJson(ptp) {
734
+ var e_1, _a, e_2, _b;
735
+ var definedParameters = new Set(ptp.parameters.filter(function (_a) {
736
+ var isInput = _a.isInput;
737
+ return isInput;
738
+ }).map(function (_a) {
739
+ var name = _a.name;
740
+ return name;
741
+ }));
742
+ try {
743
+ for (var _c = __values(ptp.promptTemplates), _d = _c.next(); !_d.done; _d = _c.next()) {
744
+ var template = _d.value;
745
+ try {
746
+ for (var _e = (e_2 = void 0, __values(Array.from(template.content.matchAll(/\{(?<parameterName>[a-z0-9_]+)\}/gi)))), _f = _e.next(); !_f.done; _f = _e.next()) {
747
+ var match = _f.value;
748
+ var parameterName = match.groups.parameterName;
749
+ if (!definedParameters.has(parameterName)) {
750
+ throw new Error("Parameter {".concat(parameterName, "} used before defined"));
751
+ }
752
+ }
753
+ }
754
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
755
+ finally {
756
+ try {
757
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
758
+ }
759
+ finally { if (e_2) throw e_2.error; }
760
+ }
761
+ if (definedParameters.has(template.resultingParameterName)) {
762
+ throw new Error("Parameter {".concat(template.resultingParameterName, "} is defined multiple times"));
763
+ }
764
+ definedParameters.add(template.resultingParameterName);
765
+ }
766
+ }
767
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
768
+ finally {
769
+ try {
770
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
771
+ }
772
+ finally { if (e_1) throw e_1.error; }
773
+ }
774
+ }
775
+ /**
776
+ * TODO: [๐Ÿง ] Work with ptpVersion
777
+ * TODO: Use here some json-schema, Zod or something similar and change it to:
778
+ * > /**
779
+ * > * Validates PromptTemplatePipelineJson if it is logically valid.
780
+ * > *
781
+ * > * It checks:
782
+ * > * - it has a valid structure
783
+ * > * - ...
784
+ * > ex port function validatePromptTemplatePipelineJson(ptp: unknown): asserts ptp is PromptTemplatePipelineJson {
785
+ */
786
+
787
+ /**
788
+ * Prompt template pipeline is the **core concept of this library**.
789
+ * It represents a series of prompt templates chained together to form a pipeline / one big prompt template with input and result parameters.
790
+ *
791
+ * It can have 3 formats:
792
+ * - **.ptp.md file** in custom markdown format described above
793
+ * - **JSON** format, parsed from the .ptp.md file
794
+ * - _(this)_ **Object** which is created from JSON format and bound with tools around (but not the execution logic)
795
+ *
796
+ * @see https://github.com/webgptorg/promptbook#prompt-template-pipeline
797
+ */
798
+ var PromptTemplatePipeline = /** @class */ (function () {
799
+ function PromptTemplatePipeline(ptpUrl, parameters, promptTemplates) {
800
+ this.ptpUrl = ptpUrl;
801
+ this.parameters = parameters;
802
+ this.promptTemplates = promptTemplates;
803
+ if (promptTemplates.length === 0) {
804
+ throw new Error('Prompt template pipeline must have at least one prompt template');
805
+ }
806
+ }
807
+ /**
808
+ * Constructs PromptTemplatePipeline from any source
809
+ *
810
+ * Note: During the construction syntax and logic of source is validated
811
+ *
812
+ * @param source content of .ptp.md or .ptp.json file
813
+ * @returns PromptTemplatePipeline
814
+ */
815
+ PromptTemplatePipeline.fromSource = function (ptpSource) {
816
+ if (typeof ptpSource === 'string') {
817
+ return PromptTemplatePipeline.fromString(ptpSource);
818
+ }
819
+ else {
820
+ return PromptTemplatePipeline.fromJson(ptpSource);
821
+ }
822
+ };
823
+ /**
824
+ * Constructs PromptTemplatePipeline from markdown source
825
+ *
826
+ * Note: During the construction syntax and logic of source is validated
827
+ *
828
+ * @param ptpString content of .ptp.md file
829
+ * @returns PromptTemplatePipeline
830
+ */
831
+ PromptTemplatePipeline.fromString = function (ptpString) {
832
+ var ptpjson = promptTemplatePipelineStringToJson(ptpString);
833
+ return PromptTemplatePipeline.fromJson(ptpjson);
834
+ };
835
+ /**
836
+ * Constructs PromptTemplatePipeline from JSON source
837
+ *
838
+ * Note: During the construction the source is logic validated
839
+ *
840
+ * @param ptpjson content of .ptp.json file parsed into JSON
841
+ * @returns PromptTemplatePipeline
842
+ */
843
+ PromptTemplatePipeline.fromJson = function (ptpjson) {
844
+ validatePromptTemplatePipelineJson(ptpjson);
845
+ return new PromptTemplatePipeline(ptpjson.ptpUrl ? new URL(ptpjson.ptpUrl) : null, Object.fromEntries(ptpjson.parameters.map(function (parameter) { return [parameter.name, parameter]; })), ptpjson.promptTemplates);
846
+ };
847
+ Object.defineProperty(PromptTemplatePipeline.prototype, "entryPromptTemplate", {
848
+ /**
849
+ * Returns the first prompt template in the pipeline
850
+ */
851
+ get: function () {
852
+ return this.promptTemplates[0];
853
+ },
854
+ enumerable: false,
855
+ configurable: true
856
+ });
857
+ /**
858
+ * Gets the parameter that is the result of given prompt template
859
+ */
860
+ PromptTemplatePipeline.prototype.getResultingParameter = function (promptTemplateName) {
861
+ var index = this.promptTemplates.findIndex(function (_a) {
862
+ var name = _a.name;
863
+ return name === promptTemplateName;
864
+ });
865
+ if (index === -1) {
866
+ throw new Error('Prompt template is not in this pipeline');
867
+ }
868
+ var resultingParameterName = this.promptTemplates[index].resultingParameterName;
869
+ var resultingParameter = this.parameters[resultingParameterName];
870
+ if (!resultingParameter) {
871
+ // <- TODO: [๐Ÿฅจ] Make some NeverShouldHappenError
872
+ throw new Error("Resulting parameter of prompt template ".concat(promptTemplateName, " {").concat(resultingParameterName, "} is not defined"));
873
+ }
874
+ return resultingParameter;
875
+ };
876
+ /**
877
+ * Gets the following prompt template in the pipeline or null if there is no following prompt template and this is the last one
878
+ */
879
+ PromptTemplatePipeline.prototype.getFollowingPromptTemplate = function (promptTemplateName) {
880
+ var index = this.promptTemplates.findIndex(function (_a) {
881
+ var name = _a.name;
882
+ return name === promptTemplateName;
883
+ });
884
+ if (index === -1) {
885
+ throw new Error('Prompt template is not in this pipeline');
886
+ }
887
+ if (index === this.promptTemplates.length - 1) {
888
+ return null;
889
+ }
890
+ return this.promptTemplates[index + 1];
891
+ };
892
+ return PromptTemplatePipeline;
893
+ }());
894
+ /**
895
+ * TODO: !! [๐Ÿ‘][๐Ÿง ] Split of PromptTemplatePipeline,PromptTemplatePipelineLibrary between interface and class
896
+ * TODO: !! [๐Ÿ‘] Make parameters and promptTemplates private WHEN split between interface and class
897
+ * TODO: !! Add generic type for entry and result parameters
898
+ * TODO: Can be Array elegantly typed such as it must have at least one element?
899
+ * TODO: [๐Ÿง ] Each PromptTemplatePipeline should have its unique hash to be able to compare them and execute on server ONLY the desired ones
900
+ */
901
+
902
+ /**
903
+ * All possible emoji chars like "๐Ÿ†", "๐Ÿก", "๐Ÿค"...
904
+ * Note: this will be needed to update annually - now updated at 2022-01-19
905
+ *
906
+ * @see https://getemoji.com/
907
+ */
908
+ var EMOJIS_IN_CATEGORIES = {
909
+ Smileys: '๐Ÿ˜€ ๐Ÿ˜ƒ ๐Ÿ˜„ ๐Ÿ˜ ๐Ÿ˜† ๐Ÿ˜… ๐Ÿ˜‚ ๐Ÿคฃ ๐Ÿฅฒ โ˜บ๏ธ ๐Ÿ˜Š ๐Ÿ˜‡ ๐Ÿ™‚ ๐Ÿ™ƒ ๐Ÿ˜‰ ๐Ÿ˜Œ ๐Ÿ˜ ๐Ÿฅฐ ๐Ÿ˜˜ ๐Ÿ˜— ๐Ÿ˜™ ๐Ÿ˜š ๐Ÿ˜‹ ๐Ÿ˜› ๐Ÿ˜ ๐Ÿ˜œ ๐Ÿคช ๐Ÿคจ ๐Ÿง ๐Ÿค“ ๐Ÿ˜Ž ๐Ÿฅธ ๐Ÿคฉ ๐Ÿฅณ ๐Ÿ˜ ๐Ÿ˜’ ๐Ÿ˜ž ๐Ÿ˜” ๐Ÿ˜Ÿ ๐Ÿ˜• ๐Ÿ™ โ˜น๏ธ ๐Ÿ˜ฃ ๐Ÿ˜– ๐Ÿ˜ซ ๐Ÿ˜ฉ ๐Ÿฅบ ๐Ÿ˜ข ๐Ÿ˜ญ ๐Ÿ˜ค ๐Ÿ˜  ๐Ÿ˜ก ๐Ÿคฌ ๐Ÿคฏ ๐Ÿ˜ณ ๐Ÿฅต ๐Ÿฅถ ๐Ÿ˜ฑ ๐Ÿ˜จ ๐Ÿ˜ฐ ๐Ÿ˜ฅ ๐Ÿ˜“ ๐Ÿค— ๐Ÿค” ๐Ÿคญ ๐Ÿคซ ๐Ÿคฅ ๐Ÿ˜ถ ๐Ÿ˜ ๐Ÿ˜‘ ๐Ÿ˜ฌ ๐Ÿ™„ ๐Ÿ˜ฏ ๐Ÿ˜ฆ ๐Ÿ˜ง ๐Ÿ˜ฎ ๐Ÿ˜ฒ ๐Ÿฅฑ ๐Ÿ˜ด ๐Ÿคค ๐Ÿ˜ช ๐Ÿ˜ต ๐Ÿค ๐Ÿฅด ๐Ÿคข ๐Ÿคฎ ๐Ÿคง ๐Ÿ˜ท ๐Ÿค’ ๐Ÿค• ๐Ÿค‘ ๐Ÿค  ๐Ÿ˜ˆ ๐Ÿ‘ฟ ๐Ÿ‘น ๐Ÿ‘บ ๐Ÿคก ๐Ÿ’ฉ ๐Ÿ‘ป ๐Ÿ’€ โ˜ ๏ธ ๐Ÿ‘ฝ ๐Ÿ‘พ ๐Ÿค– ๐ŸŽƒ ๐Ÿ˜บ ๐Ÿ˜ธ ๐Ÿ˜น ๐Ÿ˜ป ๐Ÿ˜ผ ๐Ÿ˜ฝ ๐Ÿ™€ ๐Ÿ˜ฟ ๐Ÿ˜พ'.split(' '),
910
+ 'Gestures and Body Parts': '๐Ÿ‘‹ ๐Ÿคš ๐Ÿ– โœ‹ ๐Ÿ–– ๐Ÿ‘Œ ๐ŸคŒ ๐Ÿค โœŒ๏ธ ๐Ÿคž ๐ŸคŸ ๐Ÿค˜ ๐Ÿค™ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ‘† ๐Ÿ–• ๐Ÿ‘‡ โ˜๏ธ ๐Ÿ‘ ๐Ÿ‘Ž โœŠ ๐Ÿ‘Š ๐Ÿค› ๐Ÿคœ ๐Ÿ‘ ๐Ÿ™Œ ๐Ÿ‘ ๐Ÿคฒ ๐Ÿค ๐Ÿ™ โœ๏ธ ๐Ÿ’… ๐Ÿคณ ๐Ÿ’ช ๐Ÿฆพ ๐Ÿฆต ๐Ÿฆฟ ๐Ÿฆถ ๐Ÿ‘ฃ ๐Ÿ‘‚ ๐Ÿฆป ๐Ÿ‘ƒ ๐Ÿซ€ ๐Ÿซ ๐Ÿง  ๐Ÿฆท ๐Ÿฆด ๐Ÿ‘€ ๐Ÿ‘ ๐Ÿ‘… ๐Ÿ‘„ ๐Ÿ’‹ ๐Ÿฉธ'.split(' '),
911
+ 'People and Fantasy': '๐Ÿ‘ถ ๐Ÿ‘ง ๐Ÿง’ ๐Ÿ‘ฆ ๐Ÿ‘ฉ ๐Ÿง‘ ๐Ÿ‘จ ๐Ÿ‘ฉโ€๐Ÿฆฑ ๐Ÿง‘โ€๐Ÿฆฑ ๐Ÿ‘จโ€๐Ÿฆฑ ๐Ÿ‘ฉโ€๐Ÿฆฐ ๐Ÿง‘โ€๐Ÿฆฐ ๐Ÿ‘จโ€๐Ÿฆฐ ๐Ÿ‘ฑโ€โ™€๏ธ ๐Ÿ‘ฑ ๐Ÿ‘ฑโ€โ™‚๏ธ ๐Ÿ‘ฉโ€๐Ÿฆณ ๐Ÿง‘โ€๐Ÿฆณ ๐Ÿ‘จโ€๐Ÿฆณ ๐Ÿ‘ฉโ€๐Ÿฆฒ ๐Ÿง‘โ€๐Ÿฆฒ ๐Ÿ‘จโ€๐Ÿฆฒ ๐Ÿง” ๐Ÿ‘ต ๐Ÿง“ ๐Ÿ‘ด ๐Ÿ‘ฒ ๐Ÿ‘ณโ€โ™€๏ธ ๐Ÿ‘ณ ๐Ÿ‘ณโ€โ™‚๏ธ ๐Ÿง• ๐Ÿ‘ฎโ€โ™€๏ธ ๐Ÿ‘ฎ ๐Ÿ‘ฎโ€โ™‚๏ธ ๐Ÿ‘ทโ€โ™€๏ธ ๐Ÿ‘ท ๐Ÿ‘ทโ€โ™‚๏ธ ๐Ÿ’‚โ€โ™€๏ธ ๐Ÿ’‚ ๐Ÿ’‚โ€โ™‚๏ธ ๐Ÿ•ต๏ธโ€โ™€๏ธ ๐Ÿ•ต๏ธ ๐Ÿ•ต๏ธโ€โ™‚๏ธ ๐Ÿ‘ฉโ€โš•๏ธ ๐Ÿง‘โ€โš•๏ธ ๐Ÿ‘จโ€โš•๏ธ ๐Ÿ‘ฉโ€๐ŸŒพ ๐Ÿง‘โ€๐ŸŒพ ๐Ÿ‘จโ€๐ŸŒพ ๐Ÿ‘ฉโ€๐Ÿณ ๐Ÿง‘โ€๐Ÿณ ๐Ÿ‘จโ€๐Ÿณ ๐Ÿ‘ฉโ€๐ŸŽ“ ๐Ÿง‘โ€๐ŸŽ“ ๐Ÿ‘จโ€๐ŸŽ“ ๐Ÿ‘ฉโ€๐ŸŽค ๐Ÿง‘โ€๐ŸŽค ๐Ÿ‘จโ€๐ŸŽค ๐Ÿ‘ฉโ€๐Ÿซ ๐Ÿง‘โ€๐Ÿซ ๐Ÿ‘จโ€๐Ÿซ ๐Ÿ‘ฉโ€๐Ÿญ ๐Ÿง‘โ€๐Ÿญ ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿง‘โ€๐Ÿ’ป ๐Ÿ‘จโ€๐Ÿ’ป ๐Ÿ‘ฉโ€๐Ÿ’ผ ๐Ÿง‘โ€๐Ÿ’ผ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ‘ฉโ€๐Ÿ”ง ๐Ÿง‘โ€๐Ÿ”ง ๐Ÿ‘จโ€๐Ÿ”ง ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿง‘โ€๐Ÿ”ฌ ๐Ÿ‘จโ€๐Ÿ”ฌ ๐Ÿ‘ฉโ€๐ŸŽจ ๐Ÿง‘โ€๐ŸŽจ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ‘ฉโ€๐Ÿš’ ๐Ÿง‘โ€๐Ÿš’ ๐Ÿ‘จโ€๐Ÿš’ ๐Ÿ‘ฉโ€โœˆ๏ธ ๐Ÿง‘โ€โœˆ๏ธ ๐Ÿ‘จโ€โœˆ๏ธ ๐Ÿ‘ฉโ€๐Ÿš€ ๐Ÿง‘โ€๐Ÿš€ ๐Ÿ‘จโ€๐Ÿš€ ๐Ÿ‘ฉโ€โš–๏ธ ๐Ÿง‘โ€โš–๏ธ ๐Ÿ‘จโ€โš–๏ธ ๐Ÿ‘ฐโ€โ™€๏ธ ๐Ÿ‘ฐ ๐Ÿ‘ฐโ€โ™‚๏ธ ๐Ÿคตโ€โ™€๏ธ ๐Ÿคต ๐Ÿคตโ€โ™‚๏ธ ๐Ÿ‘ธ ๐Ÿคด ๐Ÿฅท ๐Ÿฆธโ€โ™€๏ธ ๐Ÿฆธ ๐Ÿฆธโ€โ™‚๏ธ ๐Ÿฆนโ€โ™€๏ธ ๐Ÿฆน ๐Ÿฆนโ€โ™‚๏ธ ๐Ÿคถ ๐Ÿง‘โ€๐ŸŽ„ ๐ŸŽ… ๐Ÿง™โ€โ™€๏ธ ๐Ÿง™ ๐Ÿง™โ€โ™‚๏ธ ๐Ÿงโ€โ™€๏ธ ๐Ÿง ๐Ÿงโ€โ™‚๏ธ ๐Ÿง›โ€โ™€๏ธ ๐Ÿง› ๐Ÿง›โ€โ™‚๏ธ ๐ŸงŸโ€โ™€๏ธ ๐ŸงŸ ๐ŸงŸโ€โ™‚๏ธ ๐Ÿงžโ€โ™€๏ธ ๐Ÿงž ๐Ÿงžโ€โ™‚๏ธ ๐Ÿงœโ€โ™€๏ธ ๐Ÿงœ ๐Ÿงœโ€โ™‚๏ธ ๐Ÿงšโ€โ™€๏ธ ๐Ÿงš ๐Ÿงšโ€โ™‚๏ธ ๐Ÿ‘ผ ๐Ÿคฐ ๐Ÿคฑ ๐Ÿ‘ฉโ€๐Ÿผ ๐Ÿง‘โ€๐Ÿผ ๐Ÿ‘จโ€๐Ÿผ ๐Ÿ™‡โ€โ™€๏ธ ๐Ÿ™‡ ๐Ÿ™‡โ€โ™‚๏ธ ๐Ÿ’โ€โ™€๏ธ ๐Ÿ’ ๐Ÿ’โ€โ™‚๏ธ ๐Ÿ™…โ€โ™€๏ธ ๐Ÿ™… ๐Ÿ™…โ€โ™‚๏ธ ๐Ÿ™†โ€โ™€๏ธ ๐Ÿ™† ๐Ÿ™†โ€โ™‚๏ธ ๐Ÿ™‹โ€โ™€๏ธ ๐Ÿ™‹ ๐Ÿ™‹โ€โ™‚๏ธ ๐Ÿงโ€โ™€๏ธ ๐Ÿง ๐Ÿงโ€โ™‚๏ธ ๐Ÿคฆโ€โ™€๏ธ ๐Ÿคฆ ๐Ÿคฆโ€โ™‚๏ธ ๐Ÿคทโ€โ™€๏ธ ๐Ÿคท ๐Ÿคทโ€โ™‚๏ธ ๐Ÿ™Žโ€โ™€๏ธ ๐Ÿ™Ž ๐Ÿ™Žโ€โ™‚๏ธ ๐Ÿ™โ€โ™€๏ธ ๐Ÿ™ ๐Ÿ™โ€โ™‚๏ธ ๐Ÿ’‡โ€โ™€๏ธ ๐Ÿ’‡ ๐Ÿ’‡โ€โ™‚๏ธ ๐Ÿ’†โ€โ™€๏ธ ๐Ÿ’† ๐Ÿ’†โ€โ™‚๏ธ ๐Ÿง–โ€โ™€๏ธ ๐Ÿง– ๐Ÿง–โ€โ™‚๏ธ ๐Ÿ’… ๐Ÿคณ ๐Ÿ’ƒ ๐Ÿ•บ ๐Ÿ‘ฏโ€โ™€๏ธ ๐Ÿ‘ฏ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ•ด ๐Ÿ‘ฉโ€๐Ÿฆฝ ๐Ÿง‘โ€๐Ÿฆฝ ๐Ÿ‘จโ€๐Ÿฆฝ ๐Ÿ‘ฉโ€๐Ÿฆผ ๐Ÿง‘โ€๐Ÿฆผ ๐Ÿ‘จโ€๐Ÿฆผ ๐Ÿšถโ€โ™€๏ธ ๐Ÿšถ ๐Ÿšถโ€โ™‚๏ธ ๐Ÿ‘ฉโ€๐Ÿฆฏ ๐Ÿง‘โ€๐Ÿฆฏ ๐Ÿ‘จโ€๐Ÿฆฏ ๐ŸงŽโ€โ™€๏ธ ๐ŸงŽ ๐ŸงŽโ€โ™‚๏ธ ๐Ÿƒโ€โ™€๏ธ ๐Ÿƒ ๐Ÿƒโ€โ™‚๏ธ ๐Ÿงโ€โ™€๏ธ ๐Ÿง ๐Ÿงโ€โ™‚๏ธ ๐Ÿ‘ญ ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ ๐Ÿ‘ฌ ๐Ÿ‘ซ ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ ๐Ÿ’‘ ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ ๐Ÿ’ ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ ๐Ÿ‘ช ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง ๐Ÿ‘จโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘ง ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง ๐Ÿ‘ฉโ€๐Ÿ‘ฆ ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ ๐Ÿ‘ฉโ€๐Ÿ‘ง ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง ๐Ÿ—ฃ ๐Ÿ‘ค ๐Ÿ‘ฅ ๐Ÿซ‚'.split(' '),
912
+ 'Clothing and Accessories': '๐Ÿงณ ๐ŸŒ‚ โ˜‚๏ธ ๐Ÿงต ๐Ÿชก ๐Ÿชข ๐Ÿงถ ๐Ÿ‘“ ๐Ÿ•ถ ๐Ÿฅฝ ๐Ÿฅผ ๐Ÿฆบ ๐Ÿ‘” ๐Ÿ‘• ๐Ÿ‘– ๐Ÿงฃ ๐Ÿงค ๐Ÿงฅ ๐Ÿงฆ ๐Ÿ‘— ๐Ÿ‘˜ ๐Ÿฅป ๐Ÿฉด ๐Ÿฉฑ ๐Ÿฉฒ ๐Ÿฉณ ๐Ÿ‘™ ๐Ÿ‘š ๐Ÿ‘› ๐Ÿ‘œ ๐Ÿ‘ ๐ŸŽ’ ๐Ÿ‘ž ๐Ÿ‘Ÿ ๐Ÿฅพ ๐Ÿฅฟ ๐Ÿ‘  ๐Ÿ‘ก ๐Ÿฉฐ ๐Ÿ‘ข ๐Ÿ‘‘ ๐Ÿ‘’ ๐ŸŽฉ ๐ŸŽ“ ๐Ÿงข โ›‘ ๐Ÿช– ๐Ÿ’„ ๐Ÿ’ ๐Ÿ’ผ'.split(' '),
913
+ 'Pale Emojis': '๐Ÿ‘‹๐Ÿป ๐Ÿคš๐Ÿป ๐Ÿ–๐Ÿป โœ‹๐Ÿป ๐Ÿ––๐Ÿป ๐Ÿ‘Œ๐Ÿป ๐ŸคŒ๐Ÿป ๐Ÿค๐Ÿป โœŒ๐Ÿป ๐Ÿคž๐Ÿป ๐ŸคŸ๐Ÿป ๐Ÿค˜๐Ÿป ๐Ÿค™๐Ÿป ๐Ÿ‘ˆ๐Ÿป ๐Ÿ‘‰๐Ÿป ๐Ÿ‘†๐Ÿป ๐Ÿ–•๐Ÿป ๐Ÿ‘‡๐Ÿป โ˜๐Ÿป ๐Ÿ‘๐Ÿป ๐Ÿ‘Ž๐Ÿป โœŠ๐Ÿป ๐Ÿ‘Š๐Ÿป ๐Ÿค›๐Ÿป ๐Ÿคœ๐Ÿป ๐Ÿ‘๐Ÿป ๐Ÿ™Œ๐Ÿป ๐Ÿ‘๐Ÿป ๐Ÿคฒ๐Ÿป ๐Ÿ™๐Ÿป โœ๐Ÿป ๐Ÿ’…๐Ÿป ๐Ÿคณ๐Ÿป ๐Ÿ’ช๐Ÿป ๐Ÿฆต๐Ÿป ๐Ÿฆถ๐Ÿป ๐Ÿ‘‚๐Ÿป ๐Ÿฆป๐Ÿป ๐Ÿ‘ƒ๐Ÿป ๐Ÿ‘ถ๐Ÿป ๐Ÿ‘ง๐Ÿป ๐Ÿง’๐Ÿป ๐Ÿ‘ฆ๐Ÿป ๐Ÿ‘ฉ๐Ÿป ๐Ÿง‘๐Ÿป ๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฑ ๐Ÿง‘๐Ÿปโ€๐Ÿฆฑ ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฑ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฐ ๐Ÿง‘๐Ÿปโ€๐Ÿฆฐ ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฐ ๐Ÿ‘ฑ๐Ÿปโ€โ™€๏ธ ๐Ÿ‘ฑ๐Ÿป ๐Ÿ‘ฑ๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณ ๐Ÿง‘๐Ÿปโ€๐Ÿฆณ ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆณ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฒ ๐Ÿง‘๐Ÿปโ€๐Ÿฆฒ ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฒ ๐Ÿง”๐Ÿป ๐Ÿ‘ต๐Ÿป ๐Ÿง“๐Ÿป ๐Ÿ‘ด๐Ÿป ๐Ÿ‘ฒ๐Ÿป ๐Ÿ‘ณ๐Ÿปโ€โ™€๏ธ ๐Ÿ‘ณ๐Ÿป ๐Ÿ‘ณ๐Ÿปโ€โ™‚๏ธ ๐Ÿง•๐Ÿป ๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ ๐Ÿ‘ฎ๐Ÿป ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ท๐Ÿปโ€โ™€๏ธ ๐Ÿ‘ท๐Ÿป ๐Ÿ‘ท๐Ÿปโ€โ™‚๏ธ ๐Ÿ’‚๐Ÿปโ€โ™€๏ธ ๐Ÿ’‚๐Ÿป ๐Ÿ’‚๐Ÿปโ€โ™‚๏ธ ๐Ÿ•ต๐Ÿปโ€โ™€๏ธ ๐Ÿ•ต๐Ÿป ๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿปโ€โš•๏ธ ๐Ÿง‘๐Ÿปโ€โš•๏ธ ๐Ÿ‘จ๐Ÿปโ€โš•๏ธ ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŒพ ๐Ÿง‘๐Ÿปโ€๐ŸŒพ ๐Ÿ‘จ๐Ÿปโ€๐ŸŒพ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿณ ๐Ÿง‘๐Ÿปโ€๐Ÿณ ๐Ÿ‘จ๐Ÿปโ€๐Ÿณ ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽ“ ๐Ÿง‘๐Ÿปโ€๐ŸŽ“ ๐Ÿ‘จ๐Ÿปโ€๐ŸŽ“ ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽค ๐Ÿง‘๐Ÿปโ€๐ŸŽค ๐Ÿ‘จ๐Ÿปโ€๐ŸŽค ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ ๐Ÿง‘๐Ÿปโ€๐Ÿซ ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ ๐Ÿง‘๐Ÿปโ€๐Ÿญ ๐Ÿ‘จ๐Ÿปโ€๐Ÿญ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ผ ๐Ÿง‘๐Ÿปโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ง ๐Ÿง‘๐Ÿปโ€๐Ÿ”ง ๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ง ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ ๐Ÿง‘๐Ÿปโ€๐Ÿ”ฌ ๐Ÿ‘จ๐Ÿปโ€๐Ÿ”ฌ ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽจ ๐Ÿง‘๐Ÿปโ€๐ŸŽจ ๐Ÿ‘จ๐Ÿปโ€๐ŸŽจ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš’ ๐Ÿง‘๐Ÿปโ€๐Ÿš’ ๐Ÿ‘จ๐Ÿปโ€๐Ÿš’ ๐Ÿ‘ฉ๐Ÿปโ€โœˆ๏ธ ๐Ÿง‘๐Ÿปโ€โœˆ๏ธ ๐Ÿ‘จ๐Ÿปโ€โœˆ๏ธ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš€ ๐Ÿง‘๐Ÿปโ€๐Ÿš€ ๐Ÿ‘จ๐Ÿปโ€๐Ÿš€ ๐Ÿ‘ฉ๐Ÿปโ€โš–๏ธ ๐Ÿง‘๐Ÿปโ€โš–๏ธ ๐Ÿ‘จ๐Ÿปโ€โš–๏ธ ๐Ÿ‘ฐ๐Ÿปโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿป ๐Ÿ‘ฐ๐Ÿปโ€โ™‚๏ธ ๐Ÿคต๐Ÿปโ€โ™€๏ธ ๐Ÿคต๐Ÿป ๐Ÿคต๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ธ๐Ÿป ๐Ÿคด๐Ÿป ๐Ÿฅท๐Ÿป ๐Ÿฆธ๐Ÿปโ€โ™€๏ธ ๐Ÿฆธ๐Ÿป ๐Ÿฆธ๐Ÿปโ€โ™‚๏ธ ๐Ÿฆน๐Ÿปโ€โ™€๏ธ ๐Ÿฆน๐Ÿป ๐Ÿฆน๐Ÿปโ€โ™‚๏ธ ๐Ÿคถ๐Ÿป ๐Ÿง‘๐Ÿปโ€๐ŸŽ„ ๐ŸŽ…๐Ÿป ๐Ÿง™๐Ÿปโ€โ™€๏ธ ๐Ÿง™๐Ÿป ๐Ÿง™๐Ÿปโ€โ™‚๏ธ ๐Ÿง๐Ÿปโ€โ™€๏ธ ๐Ÿง๐Ÿป ๐Ÿง๐Ÿปโ€โ™‚๏ธ ๐Ÿง›๐Ÿปโ€โ™€๏ธ ๐Ÿง›๐Ÿป ๐Ÿง›๐Ÿปโ€โ™‚๏ธ ๐Ÿงœ๐Ÿปโ€โ™€๏ธ ๐Ÿงœ๐Ÿป ๐Ÿงœ๐Ÿปโ€โ™‚๏ธ ๐Ÿงš๐Ÿปโ€โ™€๏ธ ๐Ÿงš๐Ÿป ๐Ÿงš๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ผ๐Ÿป ๐Ÿคฐ๐Ÿป ๐Ÿคฑ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿผ ๐Ÿง‘๐Ÿปโ€๐Ÿผ ๐Ÿ‘จ๐Ÿปโ€๐Ÿผ ๐Ÿ™‡๐Ÿปโ€โ™€๏ธ ๐Ÿ™‡๐Ÿป ๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ ๐Ÿ’๐Ÿปโ€โ™€๏ธ ๐Ÿ’๐Ÿป ๐Ÿ’๐Ÿปโ€โ™‚๏ธ ๐Ÿ™…๐Ÿปโ€โ™€๏ธ ๐Ÿ™…๐Ÿป ๐Ÿ™…๐Ÿปโ€โ™‚๏ธ ๐Ÿ™†๐Ÿปโ€โ™€๏ธ ๐Ÿ™†๐Ÿป ๐Ÿ™†๐Ÿปโ€โ™‚๏ธ ๐Ÿ™‹๐Ÿปโ€โ™€๏ธ ๐Ÿ™‹๐Ÿป ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ๐Ÿง๐Ÿปโ€โ™€๏ธ ๐Ÿง๐Ÿป ๐Ÿง๐Ÿปโ€โ™‚๏ธ ๐Ÿคฆ๐Ÿปโ€โ™€๏ธ ๐Ÿคฆ๐Ÿป ๐Ÿคฆ๐Ÿปโ€โ™‚๏ธ ๐Ÿคท๐Ÿปโ€โ™€๏ธ ๐Ÿคท๐Ÿป ๐Ÿคท๐Ÿปโ€โ™‚๏ธ ๐Ÿ™Ž๐Ÿปโ€โ™€๏ธ ๐Ÿ™Ž๐Ÿป ๐Ÿ™Ž๐Ÿปโ€โ™‚๏ธ ๐Ÿ™๐Ÿปโ€โ™€๏ธ ๐Ÿ™๐Ÿป ๐Ÿ™๐Ÿปโ€โ™‚๏ธ ๐Ÿ’‡๐Ÿปโ€โ™€๏ธ ๐Ÿ’‡๐Ÿป ๐Ÿ’‡๐Ÿปโ€โ™‚๏ธ ๐Ÿ’†๐Ÿปโ€โ™€๏ธ ๐Ÿ’†๐Ÿป ๐Ÿ’†๐Ÿปโ€โ™‚๏ธ ๐Ÿง–๐Ÿปโ€โ™€๏ธ ๐Ÿง–๐Ÿป ๐Ÿง–๐Ÿปโ€โ™‚๏ธ ๐Ÿ’ƒ๐Ÿป ๐Ÿ•บ๐Ÿป ๐Ÿ•ด๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฝ ๐Ÿง‘๐Ÿปโ€๐Ÿฆฝ ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฝ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆผ ๐Ÿง‘๐Ÿปโ€๐Ÿฆผ ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆผ ๐Ÿšถ๐Ÿปโ€โ™€๏ธ ๐Ÿšถ๐Ÿป ๐Ÿšถ๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฏ ๐Ÿง‘๐Ÿปโ€๐Ÿฆฏ ๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฏ ๐ŸงŽ๐Ÿปโ€โ™€๏ธ ๐ŸงŽ๐Ÿป ๐ŸงŽ๐Ÿปโ€โ™‚๏ธ ๐Ÿƒ๐Ÿปโ€โ™€๏ธ ๐Ÿƒ๐Ÿป ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ ๐Ÿง๐Ÿปโ€โ™€๏ธ ๐Ÿง๐Ÿป ๐Ÿง๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ญ๐Ÿป ๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿป ๐Ÿ‘ฌ๐Ÿป ๐Ÿ‘ซ๐Ÿป ๐Ÿง—๐Ÿปโ€โ™€๏ธ ๐Ÿง—๐Ÿป ๐Ÿง—๐Ÿปโ€โ™‚๏ธ ๐Ÿ‡๐Ÿป ๐Ÿ‚๐Ÿป ๐ŸŒ๐Ÿปโ€โ™€๏ธ ๐ŸŒ๐Ÿป ๐ŸŒ๐Ÿปโ€โ™‚๏ธ ๐Ÿ„๐Ÿปโ€โ™€๏ธ ๐Ÿ„๐Ÿป ๐Ÿ„๐Ÿปโ€โ™‚๏ธ ๐Ÿšฃ๐Ÿปโ€โ™€๏ธ ๐Ÿšฃ๐Ÿป ๐Ÿšฃ๐Ÿปโ€โ™‚๏ธ ๐ŸŠ๐Ÿปโ€โ™€๏ธ ๐ŸŠ๐Ÿป ๐ŸŠ๐Ÿปโ€โ™‚๏ธ โ›น๐Ÿปโ€โ™€๏ธ โ›น๐Ÿป โ›น๐Ÿปโ€โ™‚๏ธ ๐Ÿ‹๐Ÿปโ€โ™€๏ธ ๐Ÿ‹๐Ÿป ๐Ÿ‹๐Ÿปโ€โ™‚๏ธ ๐Ÿšด๐Ÿปโ€โ™€๏ธ ๐Ÿšด๐Ÿป ๐Ÿšด๐Ÿปโ€โ™‚๏ธ ๐Ÿšต๐Ÿปโ€โ™€๏ธ ๐Ÿšต๐Ÿป ๐Ÿšต๐Ÿปโ€โ™‚๏ธ ๐Ÿคธ๐Ÿปโ€โ™€๏ธ ๐Ÿคธ๐Ÿป ๐Ÿคธ๐Ÿปโ€โ™‚๏ธ ๐Ÿคฝ๐Ÿปโ€โ™€๏ธ ๐Ÿคฝ๐Ÿป ๐Ÿคฝ๐Ÿปโ€โ™‚๏ธ ๐Ÿคพ๐Ÿปโ€โ™€๏ธ ๐Ÿคพ๐Ÿป ๐Ÿคพ๐Ÿปโ€โ™‚๏ธ ๐Ÿคน๐Ÿปโ€โ™€๏ธ ๐Ÿคน๐Ÿป ๐Ÿคน๐Ÿปโ€โ™‚๏ธ ๐Ÿง˜๐Ÿปโ€โ™€๏ธ ๐Ÿง˜๐Ÿป ๐Ÿง˜๐Ÿปโ€โ™‚๏ธ ๐Ÿ›€๐Ÿป ๐Ÿ›Œ'.split(' '),
914
+ 'Cream White Emojis': '๐Ÿ‘‹๐Ÿผ ๐Ÿคš๐Ÿผ ๐Ÿ–๐Ÿผ โœ‹๐Ÿผ ๐Ÿ––๐Ÿผ ๐Ÿ‘Œ๐Ÿผ ๐ŸคŒ๐Ÿผ ๐Ÿค๐Ÿผ โœŒ๐Ÿผ ๐Ÿคž๐Ÿผ ๐ŸคŸ๐Ÿผ ๐Ÿค˜๐Ÿผ ๐Ÿค™๐Ÿผ ๐Ÿ‘ˆ๐Ÿผ ๐Ÿ‘‰๐Ÿผ ๐Ÿ‘†๐Ÿผ ๐Ÿ–•๐Ÿผ ๐Ÿ‘‡๐Ÿผ โ˜๐Ÿผ ๐Ÿ‘๐Ÿผ ๐Ÿ‘Ž๐Ÿผ โœŠ๐Ÿผ ๐Ÿ‘Š๐Ÿผ ๐Ÿค›๐Ÿผ ๐Ÿคœ๐Ÿผ ๐Ÿ‘๐Ÿผ ๐Ÿ™Œ๐Ÿผ ๐Ÿ‘๐Ÿผ ๐Ÿคฒ๐Ÿผ ๐Ÿ™๐Ÿผ โœ๐Ÿผ ๐Ÿ’…๐Ÿผ ๐Ÿคณ๐Ÿผ ๐Ÿ’ช๐Ÿผ ๐Ÿฆต๐Ÿผ ๐Ÿฆถ๐Ÿผ ๐Ÿ‘‚๐Ÿผ ๐Ÿฆป๐Ÿผ ๐Ÿ‘ƒ๐Ÿผ ๐Ÿ‘ถ๐Ÿผ ๐Ÿ‘ง๐Ÿผ ๐Ÿง’๐Ÿผ ๐Ÿ‘ฆ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผ ๐Ÿง‘๐Ÿผ ๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฑ ๐Ÿง‘๐Ÿผโ€๐Ÿฆฑ ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฑ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฐ ๐Ÿง‘๐Ÿผโ€๐Ÿฆฐ ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฐ ๐Ÿ‘ฑ๐Ÿผโ€โ™€๏ธ ๐Ÿ‘ฑ๐Ÿผ ๐Ÿ‘ฑ๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆณ ๐Ÿง‘๐Ÿผโ€๐Ÿฆณ ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆณ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฒ ๐Ÿง‘๐Ÿผโ€๐Ÿฆฒ ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฒ ๐Ÿง”๐Ÿผ ๐Ÿ‘ต๐Ÿผ ๐Ÿง“๐Ÿผ ๐Ÿ‘ด๐Ÿผ ๐Ÿ‘ฒ๐Ÿผ ๐Ÿ‘ณ๐Ÿผโ€โ™€๏ธ ๐Ÿ‘ณ๐Ÿผ ๐Ÿ‘ณ๐Ÿผโ€โ™‚๏ธ ๐Ÿง•๐Ÿผ ๐Ÿ‘ฎ๐Ÿผโ€โ™€๏ธ ๐Ÿ‘ฎ๐Ÿผ ๐Ÿ‘ฎ๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ท๐Ÿผโ€โ™€๏ธ ๐Ÿ‘ท๐Ÿผ ๐Ÿ‘ท๐Ÿผโ€โ™‚๏ธ ๐Ÿ’‚๐Ÿผโ€โ™€๏ธ ๐Ÿ’‚๐Ÿผ ๐Ÿ’‚๐Ÿผโ€โ™‚๏ธ ๐Ÿ•ต๐Ÿผโ€โ™€๏ธ ๐Ÿ•ต๐Ÿผ ๐Ÿ•ต๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿผโ€โš•๏ธ ๐Ÿง‘๐Ÿผโ€โš•๏ธ ๐Ÿ‘จ๐Ÿผโ€โš•๏ธ ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŒพ ๐Ÿง‘๐Ÿผโ€๐ŸŒพ ๐Ÿ‘จ๐Ÿผโ€๐ŸŒพ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿณ ๐Ÿง‘๐Ÿผโ€๐Ÿณ ๐Ÿ‘จ๐Ÿผโ€๐Ÿณ ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽ“ ๐Ÿง‘๐Ÿผโ€๐ŸŽ“ ๐Ÿ‘จ๐Ÿผโ€๐ŸŽ“ ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽค ๐Ÿง‘๐Ÿผโ€๐ŸŽค ๐Ÿ‘จ๐Ÿผโ€๐ŸŽค ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿซ ๐Ÿง‘๐Ÿผโ€๐Ÿซ ๐Ÿ‘จ๐Ÿผโ€๐Ÿซ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿญ ๐Ÿง‘๐Ÿผโ€๐Ÿญ ๐Ÿ‘จ๐Ÿผโ€๐Ÿญ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป ๐Ÿง‘๐Ÿผโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ป ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ผ ๐Ÿง‘๐Ÿผโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ง ๐Ÿง‘๐Ÿผโ€๐Ÿ”ง ๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ง ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ”ฌ ๐Ÿง‘๐Ÿผโ€๐Ÿ”ฌ ๐Ÿ‘จ๐Ÿผโ€๐Ÿ”ฌ ๐Ÿ‘ฉ๐Ÿผโ€๐ŸŽจ ๐Ÿง‘๐Ÿผโ€๐ŸŽจ ๐Ÿ‘จ๐Ÿผโ€๐ŸŽจ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš’ ๐Ÿง‘๐Ÿผโ€๐Ÿš’ ๐Ÿ‘จ๐Ÿผโ€๐Ÿš’ ๐Ÿ‘ฉ๐Ÿผโ€โœˆ๏ธ ๐Ÿง‘๐Ÿผโ€โœˆ๏ธ ๐Ÿ‘จ๐Ÿผโ€โœˆ๏ธ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš€ ๐Ÿง‘๐Ÿผโ€๐Ÿš€ ๐Ÿ‘จ๐Ÿผโ€๐Ÿš€ ๐Ÿ‘ฉ๐Ÿผโ€โš–๏ธ ๐Ÿง‘๐Ÿผโ€โš–๏ธ ๐Ÿ‘จ๐Ÿผโ€โš–๏ธ ๐Ÿ‘ฐ๐Ÿผโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿผ ๐Ÿ‘ฐ๐Ÿผโ€โ™‚๏ธ ๐Ÿคต๐Ÿผโ€โ™€๏ธ ๐Ÿคต๐Ÿผ ๐Ÿคต๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ธ๐Ÿผ ๐Ÿคด๐Ÿผ ๐Ÿฅท๐Ÿผ ๐Ÿฆธ๐Ÿผโ€โ™€๏ธ ๐Ÿฆธ๐Ÿผ ๐Ÿฆธ๐Ÿผโ€โ™‚๏ธ ๐Ÿฆน๐Ÿผโ€โ™€๏ธ ๐Ÿฆน๐Ÿผ ๐Ÿฆน๐Ÿผโ€โ™‚๏ธ ๐Ÿคถ๐Ÿผ ๐Ÿง‘๐Ÿผโ€๐ŸŽ„ ๐ŸŽ…๐Ÿผ ๐Ÿง™๐Ÿผโ€โ™€๏ธ ๐Ÿง™๐Ÿผ ๐Ÿง™๐Ÿผโ€โ™‚๏ธ ๐Ÿง๐Ÿผโ€โ™€๏ธ ๐Ÿง๐Ÿผ ๐Ÿง๐Ÿผโ€โ™‚๏ธ ๐Ÿง›๐Ÿผโ€โ™€๏ธ ๐Ÿง›๐Ÿผ ๐Ÿง›๐Ÿผโ€โ™‚๏ธ ๐Ÿงœ๐Ÿผโ€โ™€๏ธ ๐Ÿงœ๐Ÿผ ๐Ÿงœ๐Ÿผโ€โ™‚๏ธ ๐Ÿงš๐Ÿผโ€โ™€๏ธ ๐Ÿงš๐Ÿผ ๐Ÿงš๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ผ๐Ÿผ ๐Ÿคฐ๐Ÿผ ๐Ÿคฑ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿผ ๐Ÿง‘๐Ÿผโ€๐Ÿผ ๐Ÿ‘จ๐Ÿผโ€๐Ÿผ ๐Ÿ™‡๐Ÿผโ€โ™€๏ธ ๐Ÿ™‡๐Ÿผ ๐Ÿ™‡๐Ÿผโ€โ™‚๏ธ ๐Ÿ’๐Ÿผโ€โ™€๏ธ ๐Ÿ’๐Ÿผ ๐Ÿ’๐Ÿผโ€โ™‚๏ธ ๐Ÿ™…๐Ÿผโ€โ™€๏ธ ๐Ÿ™…๐Ÿผ ๐Ÿ™…๐Ÿผโ€โ™‚๏ธ ๐Ÿ™†๐Ÿผโ€โ™€๏ธ ๐Ÿ™†๐Ÿผ ๐Ÿ™†๐Ÿผโ€โ™‚๏ธ ๐Ÿ™‹๐Ÿผโ€โ™€๏ธ ๐Ÿ™‹๐Ÿผ ๐Ÿ™‹๐Ÿผโ€โ™‚๏ธ ๐Ÿง๐Ÿผโ€โ™€๏ธ ๐Ÿง๐Ÿผ ๐Ÿง๐Ÿผโ€โ™‚๏ธ ๐Ÿคฆ๐Ÿผโ€โ™€๏ธ ๐Ÿคฆ๐Ÿผ ๐Ÿคฆ๐Ÿผโ€โ™‚๏ธ ๐Ÿคท๐Ÿผโ€โ™€๏ธ ๐Ÿคท๐Ÿผ ๐Ÿคท๐Ÿผโ€โ™‚๏ธ ๐Ÿ™Ž๐Ÿผโ€โ™€๏ธ ๐Ÿ™Ž๐Ÿผ ๐Ÿ™Ž๐Ÿผโ€โ™‚๏ธ ๐Ÿ™๐Ÿผโ€โ™€๏ธ ๐Ÿ™๐Ÿผ ๐Ÿ™๐Ÿผโ€โ™‚๏ธ ๐Ÿ’‡๐Ÿผโ€โ™€๏ธ ๐Ÿ’‡๐Ÿผ ๐Ÿ’‡๐Ÿผโ€โ™‚๏ธ ๐Ÿ’†๐Ÿผโ€โ™€๏ธ ๐Ÿ’†๐Ÿผ ๐Ÿ’†๐Ÿผโ€โ™‚๏ธ ๐Ÿง–๐Ÿผโ€โ™€๏ธ ๐Ÿง–๐Ÿผ ๐Ÿง–๐Ÿผโ€โ™‚๏ธ ๐Ÿ’ƒ๐Ÿผ ๐Ÿ•บ๐Ÿผ ๐Ÿ•ด๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฝ ๐Ÿง‘๐Ÿผโ€๐Ÿฆฝ ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฝ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆผ ๐Ÿง‘๐Ÿผโ€๐Ÿฆผ ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆผ ๐Ÿšถ๐Ÿผโ€โ™€๏ธ ๐Ÿšถ๐Ÿผ ๐Ÿšถ๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆฏ ๐Ÿง‘๐Ÿผโ€๐Ÿฆฏ ๐Ÿ‘จ๐Ÿผโ€๐Ÿฆฏ ๐ŸงŽ๐Ÿผโ€โ™€๏ธ ๐ŸงŽ๐Ÿผ ๐ŸงŽ๐Ÿผโ€โ™‚๏ธ ๐Ÿƒ๐Ÿผโ€โ™€๏ธ ๐Ÿƒ๐Ÿผ ๐Ÿƒ๐Ÿผโ€โ™‚๏ธ ๐Ÿง๐Ÿผโ€โ™€๏ธ ๐Ÿง๐Ÿผ ๐Ÿง๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ญ๐Ÿผ ๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘๐Ÿผ ๐Ÿ‘ฌ๐Ÿผ ๐Ÿ‘ซ๐Ÿผ ๐Ÿง—๐Ÿผโ€โ™€๏ธ ๐Ÿง—๐Ÿผ ๐Ÿง—๐Ÿผโ€โ™‚๏ธ ๐Ÿ‡๐Ÿผ ๐Ÿ‚๐Ÿผ ๐ŸŒ๐Ÿผโ€โ™€๏ธ ๐ŸŒ๐Ÿผ ๐ŸŒ๐Ÿผโ€โ™‚๏ธ ๐Ÿ„๐Ÿผโ€โ™€๏ธ ๐Ÿ„๐Ÿผ ๐Ÿ„๐Ÿผโ€โ™‚๏ธ ๐Ÿšฃ๐Ÿผโ€โ™€๏ธ ๐Ÿšฃ๐Ÿผ ๐Ÿšฃ๐Ÿผโ€โ™‚๏ธ ๐ŸŠ๐Ÿผโ€โ™€๏ธ ๐ŸŠ๐Ÿผ ๐ŸŠ๐Ÿผโ€โ™‚๏ธ โ›น๐Ÿผโ€โ™€๏ธ โ›น๐Ÿผ โ›น๐Ÿผโ€โ™‚๏ธ ๐Ÿ‹๐Ÿผโ€โ™€๏ธ ๐Ÿ‹๐Ÿผ ๐Ÿ‹๐Ÿผโ€โ™‚๏ธ ๐Ÿšด๐Ÿผโ€โ™€๏ธ ๐Ÿšด๐Ÿผ ๐Ÿšด๐Ÿผโ€โ™‚๏ธ ๐Ÿšต๐Ÿผโ€โ™€๏ธ ๐Ÿšต๐Ÿผ ๐Ÿšต๐Ÿผโ€โ™‚๏ธ ๐Ÿคธ๐Ÿผโ€โ™€๏ธ ๐Ÿคธ๐Ÿผ ๐Ÿคธ๐Ÿผโ€โ™‚๏ธ ๐Ÿคฝ๐Ÿผโ€โ™€๏ธ ๐Ÿคฝ๐Ÿผ ๐Ÿคฝ๐Ÿผโ€โ™‚๏ธ ๐Ÿคพ๐Ÿผโ€โ™€๏ธ ๐Ÿคพ๐Ÿผ ๐Ÿคพ๐Ÿผโ€โ™‚๏ธ ๐Ÿคน๐Ÿผโ€โ™€๏ธ ๐Ÿคน๐Ÿผ ๐Ÿคน๐Ÿผโ€โ™‚๏ธ ๐Ÿง˜๐Ÿผโ€โ™€๏ธ ๐Ÿง˜๐Ÿผ ๐Ÿง˜๐Ÿผโ€โ™‚๏ธ ๐Ÿ›€๐Ÿผ ๐Ÿ›Œ'.split(' '),
915
+ 'Brown Emojis': '๐Ÿ‘‹๐Ÿฝ ๐Ÿคš๐Ÿฝ ๐Ÿ–๐Ÿฝ โœ‹๐Ÿฝ ๐Ÿ––๐Ÿฝ ๐Ÿ‘Œ๐Ÿฝ ๐ŸคŒ๐Ÿฝ ๐Ÿค๐Ÿฝ โœŒ๐Ÿฝ ๐Ÿคž๐Ÿฝ ๐ŸคŸ๐Ÿฝ ๐Ÿค˜๐Ÿฝ ๐Ÿค™๐Ÿฝ ๐Ÿ‘ˆ๐Ÿฝ ๐Ÿ‘‰๐Ÿฝ ๐Ÿ‘†๐Ÿฝ ๐Ÿ–•๐Ÿฝ ๐Ÿ‘‡๐Ÿฝ โ˜๐Ÿฝ ๐Ÿ‘๐Ÿฝ ๐Ÿ‘Ž๐Ÿฝ โœŠ๐Ÿฝ ๐Ÿ‘Š๐Ÿฝ ๐Ÿค›๐Ÿฝ ๐Ÿคœ๐Ÿฝ ๐Ÿ‘๐Ÿฝ ๐Ÿ™Œ๐Ÿฝ ๐Ÿ‘๐Ÿฝ ๐Ÿคฒ๐Ÿฝ ๐Ÿ™๐Ÿฝ โœ๐Ÿฝ ๐Ÿ’…๐Ÿฝ ๐Ÿคณ๐Ÿฝ ๐Ÿ’ช๐Ÿฝ ๐Ÿฆต๐Ÿฝ ๐Ÿฆถ๐Ÿฝ ๐Ÿ‘‚๐Ÿฝ ๐Ÿฆป๐Ÿฝ ๐Ÿ‘ƒ๐Ÿฝ ๐Ÿ‘ถ๐Ÿฝ ๐Ÿ‘ง๐Ÿฝ ๐Ÿง’๐Ÿฝ ๐Ÿ‘ฆ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝ ๐Ÿง‘๐Ÿฝ ๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฑ ๐Ÿง‘๐Ÿฝโ€๐Ÿฆฑ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฑ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฐ ๐Ÿง‘๐Ÿฝโ€๐Ÿฆฐ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฐ ๐Ÿ‘ฑ๐Ÿฝโ€โ™€๏ธ ๐Ÿ‘ฑ๐Ÿฝ ๐Ÿ‘ฑ๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆณ ๐Ÿง‘๐Ÿฝโ€๐Ÿฆณ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆณ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฒ ๐Ÿง‘๐Ÿฝโ€๐Ÿฆฒ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฒ ๐Ÿง”๐Ÿฝ ๐Ÿ‘ต๐Ÿฝ ๐Ÿง“๐Ÿฝ ๐Ÿ‘ด๐Ÿฝ ๐Ÿ‘ฒ๐Ÿฝ ๐Ÿ‘ณ๐Ÿฝโ€โ™€๏ธ ๐Ÿ‘ณ๐Ÿฝ ๐Ÿ‘ณ๐Ÿฝโ€โ™‚๏ธ ๐Ÿง•๐Ÿฝ ๐Ÿ‘ฎ๐Ÿฝโ€โ™€๏ธ ๐Ÿ‘ฎ๐Ÿฝ ๐Ÿ‘ฎ๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ท๐Ÿฝโ€โ™€๏ธ ๐Ÿ‘ท๐Ÿฝ ๐Ÿ‘ท๐Ÿฝโ€โ™‚๏ธ ๐Ÿ’‚๐Ÿฝโ€โ™€๏ธ ๐Ÿ’‚๐Ÿฝ ๐Ÿ’‚๐Ÿฝโ€โ™‚๏ธ ๐Ÿ•ต๐Ÿฝโ€โ™€๏ธ ๐Ÿ•ต๐Ÿฝ ๐Ÿ•ต๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฝโ€โš•๏ธ ๐Ÿง‘๐Ÿฝโ€โš•๏ธ ๐Ÿ‘จ๐Ÿฝโ€โš•๏ธ ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŒพ ๐Ÿง‘๐Ÿฝโ€๐ŸŒพ ๐Ÿ‘จ๐Ÿฝโ€๐ŸŒพ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿณ ๐Ÿง‘๐Ÿฝโ€๐Ÿณ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿณ ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽ“ ๐Ÿง‘๐Ÿฝโ€๐ŸŽ“ ๐Ÿ‘จ๐Ÿฝโ€๐ŸŽ“ ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽค ๐Ÿง‘๐Ÿฝโ€๐ŸŽค ๐Ÿ‘จ๐Ÿฝโ€๐ŸŽค ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿซ ๐Ÿง‘๐Ÿฝโ€๐Ÿซ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿซ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿญ ๐Ÿง‘๐Ÿฝโ€๐Ÿญ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿญ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ป ๐Ÿง‘๐Ÿฝโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ผ ๐Ÿง‘๐Ÿฝโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ง ๐Ÿง‘๐Ÿฝโ€๐Ÿ”ง ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ง ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ”ฌ ๐Ÿง‘๐Ÿฝโ€๐Ÿ”ฌ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ”ฌ ๐Ÿ‘ฉ๐Ÿฝโ€๐ŸŽจ ๐Ÿง‘๐Ÿฝโ€๐ŸŽจ ๐Ÿ‘จ๐Ÿฝโ€๐ŸŽจ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš’ ๐Ÿง‘๐Ÿฝโ€๐Ÿš’ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿš’ ๐Ÿ‘ฉ๐Ÿฝโ€โœˆ๏ธ ๐Ÿง‘๐Ÿฝโ€โœˆ๏ธ ๐Ÿ‘จ๐Ÿฝโ€โœˆ๏ธ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿš€ ๐Ÿง‘๐Ÿฝโ€๐Ÿš€ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿš€ ๐Ÿ‘ฉ๐Ÿฝโ€โš–๏ธ ๐Ÿง‘๐Ÿฝโ€โš–๏ธ ๐Ÿ‘จ๐Ÿฝโ€โš–๏ธ ๐Ÿ‘ฐ๐Ÿฝโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿฝ ๐Ÿ‘ฐ๐Ÿฝโ€โ™‚๏ธ ๐Ÿคต๐Ÿฝโ€โ™€๏ธ ๐Ÿคต๐Ÿฝ ๐Ÿคต๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ธ๐Ÿฝ ๐Ÿคด๐Ÿฝ ๐Ÿฅท๐Ÿฝ ๐Ÿฆธ๐Ÿฝโ€โ™€๏ธ ๐Ÿฆธ๐Ÿฝ ๐Ÿฆธ๐Ÿฝโ€โ™‚๏ธ ๐Ÿฆน๐Ÿฝโ€โ™€๏ธ ๐Ÿฆน๐Ÿฝ ๐Ÿฆน๐Ÿฝโ€โ™‚๏ธ ๐Ÿคถ๐Ÿฝ ๐Ÿง‘๐Ÿฝโ€๐ŸŽ„ ๐ŸŽ…๐Ÿฝ ๐Ÿง™๐Ÿฝโ€โ™€๏ธ ๐Ÿง™๐Ÿฝ ๐Ÿง™๐Ÿฝโ€โ™‚๏ธ ๐Ÿง๐Ÿฝโ€โ™€๏ธ ๐Ÿง๐Ÿฝ ๐Ÿง๐Ÿฝโ€โ™‚๏ธ ๐Ÿง›๐Ÿฝโ€โ™€๏ธ ๐Ÿง›๐Ÿฝ ๐Ÿง›๐Ÿฝโ€โ™‚๏ธ ๐Ÿงœ๐Ÿฝโ€โ™€๏ธ ๐Ÿงœ๐Ÿฝ ๐Ÿงœ๐Ÿฝโ€โ™‚๏ธ ๐Ÿงš๐Ÿฝโ€โ™€๏ธ ๐Ÿงš๐Ÿฝ ๐Ÿงš๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ผ๐Ÿฝ ๐Ÿคฐ๐Ÿฝ ๐Ÿคฑ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿผ ๐Ÿง‘๐Ÿฝโ€๐Ÿผ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿผ ๐Ÿ™‡๐Ÿฝโ€โ™€๏ธ ๐Ÿ™‡๐Ÿฝ ๐Ÿ™‡๐Ÿฝโ€โ™‚๏ธ ๐Ÿ’๐Ÿฝโ€โ™€๏ธ ๐Ÿ’๐Ÿฝ ๐Ÿ’๐Ÿฝโ€โ™‚๏ธ ๐Ÿ™…๐Ÿฝโ€โ™€๏ธ ๐Ÿ™…๐Ÿฝ ๐Ÿ™…๐Ÿฝโ€โ™‚๏ธ ๐Ÿ™†๐Ÿฝโ€โ™€๏ธ ๐Ÿ™†๐Ÿฝ ๐Ÿ™†๐Ÿฝโ€โ™‚๏ธ ๐Ÿ™‹๐Ÿฝโ€โ™€๏ธ ๐Ÿ™‹๐Ÿฝ ๐Ÿ™‹๐Ÿฝโ€โ™‚๏ธ ๐Ÿง๐Ÿฝโ€โ™€๏ธ ๐Ÿง๐Ÿฝ ๐Ÿง๐Ÿฝโ€โ™‚๏ธ ๐Ÿคฆ๐Ÿฝโ€โ™€๏ธ ๐Ÿคฆ๐Ÿฝ ๐Ÿคฆ๐Ÿฝโ€โ™‚๏ธ ๐Ÿคท๐Ÿฝโ€โ™€๏ธ ๐Ÿคท๐Ÿฝ ๐Ÿคท๐Ÿฝโ€โ™‚๏ธ ๐Ÿ™Ž๐Ÿฝโ€โ™€๏ธ ๐Ÿ™Ž๐Ÿฝ ๐Ÿ™Ž๐Ÿฝโ€โ™‚๏ธ ๐Ÿ™๐Ÿฝโ€โ™€๏ธ ๐Ÿ™๐Ÿฝ ๐Ÿ™๐Ÿฝโ€โ™‚๏ธ ๐Ÿ’‡๐Ÿฝโ€โ™€๏ธ ๐Ÿ’‡๐Ÿฝ ๐Ÿ’‡๐Ÿฝโ€โ™‚๏ธ ๐Ÿ’†๐Ÿฝโ€โ™€๏ธ ๐Ÿ’†๐Ÿฝ ๐Ÿ’†๐Ÿฝโ€โ™‚๏ธ ๐Ÿง–๐Ÿฝโ€โ™€๏ธ ๐Ÿง–๐Ÿฝ ๐Ÿง–๐Ÿฝโ€โ™‚๏ธ ๐Ÿ’ƒ๐Ÿฝ ๐Ÿ•บ๐Ÿฝ ๐Ÿ•ด๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฝ ๐Ÿง‘๐Ÿฝโ€๐Ÿฆฝ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฝ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆผ ๐Ÿง‘๐Ÿฝโ€๐Ÿฆผ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆผ ๐Ÿšถ๐Ÿฝโ€โ™€๏ธ ๐Ÿšถ๐Ÿฝ ๐Ÿšถ๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆฏ ๐Ÿง‘๐Ÿฝโ€๐Ÿฆฏ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿฆฏ ๐ŸงŽ๐Ÿฝโ€โ™€๏ธ ๐ŸงŽ๐Ÿฝ ๐ŸงŽ๐Ÿฝโ€โ™‚๏ธ ๐Ÿƒ๐Ÿฝโ€โ™€๏ธ ๐Ÿƒ๐Ÿฝ ๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ ๐Ÿง๐Ÿฝโ€โ™€๏ธ ๐Ÿง๐Ÿฝ ๐Ÿง๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ญ๐Ÿฝ ๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ ๐Ÿ‘ฌ๐Ÿฝ ๐Ÿ‘ซ๐Ÿฝ ๐Ÿง—๐Ÿฝโ€โ™€๏ธ ๐Ÿง—๐Ÿฝ ๐Ÿง—๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‡๐Ÿฝ ๐Ÿ‚๐Ÿฝ ๐ŸŒ๐Ÿฝโ€โ™€๏ธ ๐ŸŒ๐Ÿฝ ๐ŸŒ๐Ÿฝโ€โ™‚๏ธ ๐Ÿ„๐Ÿฝโ€โ™€๏ธ ๐Ÿ„๐Ÿฝ ๐Ÿ„๐Ÿฝโ€โ™‚๏ธ ๐Ÿšฃ๐Ÿฝโ€โ™€๏ธ ๐Ÿšฃ๐Ÿฝ ๐Ÿšฃ๐Ÿฝโ€โ™‚๏ธ ๐ŸŠ๐Ÿฝโ€โ™€๏ธ ๐ŸŠ๐Ÿฝ ๐ŸŠ๐Ÿฝโ€โ™‚๏ธ โ›น๐Ÿฝโ€โ™€๏ธ โ›น๐Ÿฝ โ›น๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‹๐Ÿฝโ€โ™€๏ธ ๐Ÿ‹๐Ÿฝ ๐Ÿ‹๐Ÿฝโ€โ™‚๏ธ ๐Ÿšด๐Ÿฝโ€โ™€๏ธ ๐Ÿšด๐Ÿฝ ๐Ÿšด๐Ÿฝโ€โ™‚๏ธ ๐Ÿšต๐Ÿฝโ€โ™€๏ธ ๐Ÿšต๐Ÿฝ ๐Ÿšต๐Ÿฝโ€โ™‚๏ธ ๐Ÿคธ๐Ÿฝโ€โ™€๏ธ ๐Ÿคธ๐Ÿฝ ๐Ÿคธ๐Ÿฝโ€โ™‚๏ธ ๐Ÿคฝ๐Ÿฝโ€โ™€๏ธ ๐Ÿคฝ๐Ÿฝ ๐Ÿคฝ๐Ÿฝโ€โ™‚๏ธ ๐Ÿคพ๐Ÿฝโ€โ™€๏ธ ๐Ÿคพ๐Ÿฝ ๐Ÿคพ๐Ÿฝโ€โ™‚๏ธ ๐Ÿคน๐Ÿฝโ€โ™€๏ธ ๐Ÿคน๐Ÿฝ ๐Ÿคน๐Ÿฝโ€โ™‚๏ธ ๐Ÿง˜๐Ÿฝโ€โ™€๏ธ ๐Ÿง˜๐Ÿฝ ๐Ÿง˜๐Ÿฝโ€โ™‚๏ธ ๐Ÿ›€๐Ÿฝ ๐Ÿ›Œ'.split(' '),
916
+ 'Dark Brown Emojis': '๐Ÿ‘‹๐Ÿพ ๐Ÿคš๐Ÿพ ๐Ÿ–๐Ÿพ โœ‹๐Ÿพ ๐Ÿ––๐Ÿพ ๐Ÿ‘Œ๐Ÿพ ๐ŸคŒ๐Ÿพ ๐Ÿค๐Ÿพ โœŒ๐Ÿพ ๐Ÿคž๐Ÿพ ๐ŸคŸ๐Ÿพ ๐Ÿค˜๐Ÿพ ๐Ÿค™๐Ÿพ ๐Ÿ‘ˆ๐Ÿพ ๐Ÿ‘‰๐Ÿพ ๐Ÿ‘†๐Ÿพ ๐Ÿ–•๐Ÿพ ๐Ÿ‘‡๐Ÿพ โ˜๐Ÿพ ๐Ÿ‘๐Ÿพ ๐Ÿ‘Ž๐Ÿพ โœŠ๐Ÿพ ๐Ÿ‘Š๐Ÿพ ๐Ÿค›๐Ÿพ ๐Ÿคœ๐Ÿพ ๐Ÿ‘๐Ÿพ ๐Ÿ™Œ๐Ÿพ ๐Ÿ‘๐Ÿพ ๐Ÿคฒ๐Ÿพ ๐Ÿ™๐Ÿพ โœ๐Ÿพ ๐Ÿ’…๐Ÿพ ๐Ÿคณ๐Ÿพ ๐Ÿ’ช๐Ÿพ ๐Ÿฆต๐Ÿพ ๐Ÿฆถ๐Ÿพ ๐Ÿ‘‚๐Ÿพ ๐Ÿฆป๐Ÿพ ๐Ÿ‘ƒ๐Ÿพ ๐Ÿ‘ถ๐Ÿพ ๐Ÿ‘ง๐Ÿพ ๐Ÿง’๐Ÿพ ๐Ÿ‘ฆ๐Ÿพ ๐Ÿ‘ฉ๐Ÿพ ๐Ÿง‘๐Ÿพ ๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฑ ๐Ÿง‘๐Ÿพโ€๐Ÿฆฑ ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฑ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฐ ๐Ÿง‘๐Ÿพโ€๐Ÿฆฐ ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฐ ๐Ÿ‘ฑ๐Ÿพโ€โ™€๏ธ ๐Ÿ‘ฑ๐Ÿพ ๐Ÿ‘ฑ๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆณ ๐Ÿง‘๐Ÿพโ€๐Ÿฆณ ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆณ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฒ ๐Ÿง‘๐Ÿพโ€๐Ÿฆฒ ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฒ ๐Ÿง”๐Ÿพ ๐Ÿ‘ต๐Ÿพ ๐Ÿง“๐Ÿพ ๐Ÿ‘ด๐Ÿพ ๐Ÿ‘ฒ๐Ÿพ ๐Ÿ‘ณ๐Ÿพโ€โ™€๏ธ ๐Ÿ‘ณ๐Ÿพ ๐Ÿ‘ณ๐Ÿพโ€โ™‚๏ธ ๐Ÿง•๐Ÿพ ๐Ÿ‘ฎ๐Ÿพโ€โ™€๏ธ ๐Ÿ‘ฎ๐Ÿพ ๐Ÿ‘ฎ๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ท๐Ÿพโ€โ™€๏ธ ๐Ÿ‘ท๐Ÿพ ๐Ÿ‘ท๐Ÿพโ€โ™‚๏ธ ๐Ÿ’‚๐Ÿพโ€โ™€๏ธ ๐Ÿ’‚๐Ÿพ ๐Ÿ’‚๐Ÿพโ€โ™‚๏ธ ๐Ÿ•ต๐Ÿพโ€โ™€๏ธ ๐Ÿ•ต๐Ÿพ ๐Ÿ•ต๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿพโ€โš•๏ธ ๐Ÿง‘๐Ÿพโ€โš•๏ธ ๐Ÿ‘จ๐Ÿพโ€โš•๏ธ ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŒพ ๐Ÿง‘๐Ÿพโ€๐ŸŒพ ๐Ÿ‘จ๐Ÿพโ€๐ŸŒพ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿณ ๐Ÿง‘๐Ÿพโ€๐Ÿณ ๐Ÿ‘จ๐Ÿพโ€๐Ÿณ ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽ“ ๐Ÿง‘๐Ÿพโ€๐ŸŽ“ ๐Ÿ‘จ๐Ÿพโ€๐ŸŽ“ ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽค ๐Ÿง‘๐Ÿพโ€๐ŸŽค ๐Ÿ‘จ๐Ÿพโ€๐ŸŽค ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿซ ๐Ÿง‘๐Ÿพโ€๐Ÿซ ๐Ÿ‘จ๐Ÿพโ€๐Ÿซ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿญ ๐Ÿง‘๐Ÿพโ€๐Ÿญ ๐Ÿ‘จ๐Ÿพโ€๐Ÿญ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ป ๐Ÿง‘๐Ÿพโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ผ ๐Ÿง‘๐Ÿพโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ง ๐Ÿง‘๐Ÿพโ€๐Ÿ”ง ๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ง ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ”ฌ ๐Ÿง‘๐Ÿพโ€๐Ÿ”ฌ ๐Ÿ‘จ๐Ÿพโ€๐Ÿ”ฌ ๐Ÿ‘ฉ๐Ÿพโ€๐ŸŽจ ๐Ÿง‘๐Ÿพโ€๐ŸŽจ ๐Ÿ‘จ๐Ÿพโ€๐ŸŽจ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš’ ๐Ÿง‘๐Ÿพโ€๐Ÿš’ ๐Ÿ‘จ๐Ÿพโ€๐Ÿš’ ๐Ÿ‘ฉ๐Ÿพโ€โœˆ๏ธ ๐Ÿง‘๐Ÿพโ€โœˆ๏ธ ๐Ÿ‘จ๐Ÿพโ€โœˆ๏ธ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿš€ ๐Ÿง‘๐Ÿพโ€๐Ÿš€ ๐Ÿ‘จ๐Ÿพโ€๐Ÿš€ ๐Ÿ‘ฉ๐Ÿพโ€โš–๏ธ ๐Ÿง‘๐Ÿพโ€โš–๏ธ ๐Ÿ‘จ๐Ÿพโ€โš–๏ธ ๐Ÿ‘ฐ๐Ÿพโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿพ ๐Ÿ‘ฐ๐Ÿพโ€โ™‚๏ธ ๐Ÿคต๐Ÿพโ€โ™€๏ธ ๐Ÿคต๐Ÿพ ๐Ÿคต๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ธ๐Ÿพ ๐Ÿคด๐Ÿพ ๐Ÿฅท๐Ÿพ ๐Ÿฆธ๐Ÿพโ€โ™€๏ธ ๐Ÿฆธ๐Ÿพ ๐Ÿฆธ๐Ÿพโ€โ™‚๏ธ ๐Ÿฆน๐Ÿพโ€โ™€๏ธ ๐Ÿฆน๐Ÿพ ๐Ÿฆน๐Ÿพโ€โ™‚๏ธ ๐Ÿคถ๐Ÿพ ๐Ÿง‘๐Ÿพโ€๐ŸŽ„ ๐ŸŽ…๐Ÿพ ๐Ÿง™๐Ÿพโ€โ™€๏ธ ๐Ÿง™๐Ÿพ ๐Ÿง™๐Ÿพโ€โ™‚๏ธ ๐Ÿง๐Ÿพโ€โ™€๏ธ ๐Ÿง๐Ÿพ ๐Ÿง๐Ÿพโ€โ™‚๏ธ ๐Ÿง›๐Ÿพโ€โ™€๏ธ ๐Ÿง›๐Ÿพ ๐Ÿง›๐Ÿพโ€โ™‚๏ธ ๐Ÿงœ๐Ÿพโ€โ™€๏ธ ๐Ÿงœ๐Ÿพ ๐Ÿงœ๐Ÿพโ€โ™‚๏ธ ๐Ÿงš๐Ÿพโ€โ™€๏ธ ๐Ÿงš๐Ÿพ ๐Ÿงš๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ผ๐Ÿพ ๐Ÿคฐ๐Ÿพ ๐Ÿคฑ๐Ÿพ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿผ ๐Ÿง‘๐Ÿพโ€๐Ÿผ ๐Ÿ‘จ๐Ÿพโ€๐Ÿผ ๐Ÿ™‡๐Ÿพโ€โ™€๏ธ ๐Ÿ™‡๐Ÿพ ๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ๐Ÿ’๐Ÿพโ€โ™€๏ธ ๐Ÿ’๐Ÿพ ๐Ÿ’๐Ÿพโ€โ™‚๏ธ ๐Ÿ™…๐Ÿพโ€โ™€๏ธ ๐Ÿ™…๐Ÿพ ๐Ÿ™…๐Ÿพโ€โ™‚๏ธ ๐Ÿ™†๐Ÿพโ€โ™€๏ธ ๐Ÿ™†๐Ÿพ ๐Ÿ™†๐Ÿพโ€โ™‚๏ธ ๐Ÿ™‹๐Ÿพโ€โ™€๏ธ ๐Ÿ™‹๐Ÿพ ๐Ÿ™‹๐Ÿพโ€โ™‚๏ธ ๐Ÿง๐Ÿพโ€โ™€๏ธ ๐Ÿง๐Ÿพ ๐Ÿง๐Ÿพโ€โ™‚๏ธ ๐Ÿคฆ๐Ÿพโ€โ™€๏ธ ๐Ÿคฆ๐Ÿพ ๐Ÿคฆ๐Ÿพโ€โ™‚๏ธ ๐Ÿคท๐Ÿพโ€โ™€๏ธ ๐Ÿคท๐Ÿพ ๐Ÿคท๐Ÿพโ€โ™‚๏ธ ๐Ÿ™Ž๐Ÿพโ€โ™€๏ธ ๐Ÿ™Ž๐Ÿพ ๐Ÿ™Ž๐Ÿพโ€โ™‚๏ธ ๐Ÿ™๐Ÿพโ€โ™€๏ธ ๐Ÿ™๐Ÿพ ๐Ÿ™๐Ÿพโ€โ™‚๏ธ ๐Ÿ’‡๐Ÿพโ€โ™€๏ธ ๐Ÿ’‡๐Ÿพ ๐Ÿ’‡๐Ÿพโ€โ™‚๏ธ ๐Ÿ’†๐Ÿพโ€โ™€๏ธ ๐Ÿ’†๐Ÿพ ๐Ÿ’†๐Ÿพโ€โ™‚๏ธ ๐Ÿง–๐Ÿพโ€โ™€๏ธ ๐Ÿง–๐Ÿพ ๐Ÿง–๐Ÿพโ€โ™‚๏ธ ๐Ÿ’ƒ๐Ÿพ ๐Ÿ•บ๐Ÿพ ๐Ÿ•ด๐Ÿฟ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฝ ๐Ÿง‘๐Ÿพโ€๐Ÿฆฝ ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฝ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆผ ๐Ÿง‘๐Ÿพโ€๐Ÿฆผ ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆผ ๐Ÿšถ๐Ÿพโ€โ™€๏ธ ๐Ÿšถ๐Ÿพ ๐Ÿšถ๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆฏ ๐Ÿง‘๐Ÿพโ€๐Ÿฆฏ ๐Ÿ‘จ๐Ÿพโ€๐Ÿฆฏ ๐ŸงŽ๐Ÿพโ€โ™€๏ธ ๐ŸงŽ๐Ÿพ ๐ŸงŽ๐Ÿพโ€โ™‚๏ธ ๐Ÿƒ๐Ÿพโ€โ™€๏ธ ๐Ÿƒ๐Ÿพ ๐Ÿƒ๐Ÿพโ€โ™‚๏ธ ๐Ÿง๐Ÿพโ€โ™€๏ธ ๐Ÿง๐Ÿพ ๐Ÿง๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ญ๐Ÿพ ๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘๐Ÿพ ๐Ÿ‘ฌ๐Ÿพ ๐Ÿ‘ซ๐Ÿพ ๐Ÿง—๐Ÿพโ€โ™€๏ธ ๐Ÿง—๐Ÿพ ๐Ÿง—๐Ÿพโ€โ™‚๏ธ ๐Ÿ‡๐Ÿพ ๐Ÿ‚๐Ÿพ ๐ŸŒ๐Ÿพโ€โ™€๏ธ ๐ŸŒ๐Ÿพ ๐ŸŒ๐Ÿพโ€โ™‚๏ธ ๐Ÿ„๐Ÿพโ€โ™€๏ธ ๐Ÿ„๐Ÿพ ๐Ÿ„๐Ÿพโ€โ™‚๏ธ ๐Ÿšฃ๐Ÿพโ€โ™€๏ธ ๐Ÿšฃ๐Ÿพ ๐Ÿšฃ๐Ÿพโ€โ™‚๏ธ ๐ŸŠ๐Ÿพโ€โ™€๏ธ ๐ŸŠ๐Ÿพ ๐ŸŠ๐Ÿพโ€โ™‚๏ธ โ›น๐Ÿพโ€โ™€๏ธ โ›น๐Ÿพ โ›น๐Ÿพโ€โ™‚๏ธ ๐Ÿ‹๐Ÿพโ€โ™€๏ธ ๐Ÿ‹๐Ÿพ ๐Ÿ‹๐Ÿพโ€โ™‚๏ธ ๐Ÿšด๐Ÿพโ€โ™€๏ธ ๐Ÿšด๐Ÿพ ๐Ÿšด๐Ÿพโ€โ™‚๏ธ ๐Ÿšต๐Ÿพโ€โ™€๏ธ ๐Ÿšต๐Ÿพ ๐Ÿšต๐Ÿพโ€โ™‚๏ธ ๐Ÿคธ๐Ÿพโ€โ™€๏ธ ๐Ÿคธ๐Ÿพ ๐Ÿคธ๐Ÿพโ€โ™‚๏ธ ๐Ÿคฝ๐Ÿพโ€โ™€๏ธ ๐Ÿคฝ๐Ÿพ ๐Ÿคฝ๐Ÿพโ€โ™‚๏ธ ๐Ÿคพ๐Ÿพโ€โ™€๏ธ ๐Ÿคพ๐Ÿพ ๐Ÿคพ๐Ÿพโ€โ™‚๏ธ ๐Ÿคน๐Ÿพโ€โ™€๏ธ ๐Ÿคน๐Ÿพ ๐Ÿคน๐Ÿพโ€โ™‚๏ธ ๐Ÿง˜๐Ÿพโ€โ™€๏ธ ๐Ÿง˜๐Ÿพ ๐Ÿง˜๐Ÿพโ€โ™‚๏ธ ๐Ÿ›€๐Ÿพ ๐Ÿ›Œ'.split(' '),
917
+ 'Black Emojis': '๐Ÿ‘‹๐Ÿฟ ๐Ÿคš๐Ÿฟ ๐Ÿ–๐Ÿฟ โœ‹๐Ÿฟ ๐Ÿ––๐Ÿฟ ๐Ÿ‘Œ๐Ÿฟ ๐ŸคŒ๐Ÿฟ ๐Ÿค๐Ÿฟ โœŒ๐Ÿฟ ๐Ÿคž๐Ÿฟ ๐ŸคŸ๐Ÿฟ ๐Ÿค˜๐Ÿฟ ๐Ÿค™๐Ÿฟ ๐Ÿ‘ˆ๐Ÿฟ ๐Ÿ‘‰๐Ÿฟ ๐Ÿ‘†๐Ÿฟ ๐Ÿ–•๐Ÿฟ ๐Ÿ‘‡๐Ÿฟ โ˜๐Ÿฟ ๐Ÿ‘๐Ÿฟ ๐Ÿ‘Ž๐Ÿฟ โœŠ๐Ÿฟ ๐Ÿ‘Š๐Ÿฟ ๐Ÿค›๐Ÿฟ ๐Ÿคœ๐Ÿฟ ๐Ÿ‘๐Ÿฟ ๐Ÿ™Œ๐Ÿฟ ๐Ÿ‘๐Ÿฟ ๐Ÿคฒ๐Ÿฟ ๐Ÿ™๐Ÿฟ โœ๐Ÿฟ ๐Ÿ’…๐Ÿฟ ๐Ÿคณ๐Ÿฟ ๐Ÿ’ช๐Ÿฟ ๐Ÿฆต๐Ÿฟ ๐Ÿฆถ๐Ÿฟ ๐Ÿ‘‚๐Ÿฟ ๐Ÿฆป๐Ÿฟ ๐Ÿ‘ƒ๐Ÿฟ ๐Ÿ‘ถ๐Ÿฟ ๐Ÿ‘ง๐Ÿฟ ๐Ÿง’๐Ÿฟ ๐Ÿ‘ฆ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟ ๐Ÿง‘๐Ÿฟ ๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฑ ๐Ÿง‘๐Ÿฟโ€๐Ÿฆฑ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฑ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฐ ๐Ÿง‘๐Ÿฟโ€๐Ÿฆฐ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฐ ๐Ÿ‘ฑ๐Ÿฟโ€โ™€๏ธ ๐Ÿ‘ฑ๐Ÿฟ ๐Ÿ‘ฑ๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆณ ๐Ÿง‘๐Ÿฟโ€๐Ÿฆณ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆณ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฒ ๐Ÿง‘๐Ÿฟโ€๐Ÿฆฒ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฒ ๐Ÿง”๐Ÿฟ ๐Ÿ‘ต๐Ÿฟ ๐Ÿง“๐Ÿฟ ๐Ÿ‘ด๐Ÿฟ ๐Ÿ‘ฒ๐Ÿฟ ๐Ÿ‘ณ๐Ÿฟโ€โ™€๏ธ ๐Ÿ‘ณ๐Ÿฟ ๐Ÿ‘ณ๐Ÿฟโ€โ™‚๏ธ ๐Ÿง•๐Ÿฟ ๐Ÿ‘ฎ๐Ÿฟโ€โ™€๏ธ ๐Ÿ‘ฎ๐Ÿฟ ๐Ÿ‘ฎ๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ท๐Ÿฟโ€โ™€๏ธ ๐Ÿ‘ท๐Ÿฟ ๐Ÿ‘ท๐Ÿฟโ€โ™‚๏ธ ๐Ÿ’‚๐Ÿฟโ€โ™€๏ธ ๐Ÿ’‚๐Ÿฟ ๐Ÿ’‚๐Ÿฟโ€โ™‚๏ธ ๐Ÿ•ต๐Ÿฟโ€โ™€๏ธ ๐Ÿ•ต๐Ÿฟ ๐Ÿ•ต๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฟโ€โš•๏ธ ๐Ÿง‘๐Ÿฟโ€โš•๏ธ ๐Ÿ‘จ๐Ÿฟโ€โš•๏ธ ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŒพ ๐Ÿง‘๐Ÿฟโ€๐ŸŒพ ๐Ÿ‘จ๐Ÿฟโ€๐ŸŒพ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿณ ๐Ÿง‘๐Ÿฟโ€๐Ÿณ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿณ ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽ“ ๐Ÿง‘๐Ÿฟโ€๐ŸŽ“ ๐Ÿ‘จ๐Ÿฟโ€๐ŸŽ“ ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽค ๐Ÿง‘๐Ÿฟโ€๐ŸŽค ๐Ÿ‘จ๐Ÿฟโ€๐ŸŽค ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ ๐Ÿง‘๐Ÿฟโ€๐Ÿซ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿซ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿญ ๐Ÿง‘๐Ÿฟโ€๐Ÿญ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿญ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ป ๐Ÿง‘๐Ÿฟโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ป ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ผ ๐Ÿง‘๐Ÿฟโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ง ๐Ÿง‘๐Ÿฟโ€๐Ÿ”ง ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ง ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ”ฌ ๐Ÿง‘๐Ÿฟโ€๐Ÿ”ฌ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ”ฌ ๐Ÿ‘ฉ๐Ÿฟโ€๐ŸŽจ ๐Ÿง‘๐Ÿฟโ€๐ŸŽจ ๐Ÿ‘จ๐Ÿฟโ€๐ŸŽจ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš’ ๐Ÿง‘๐Ÿฟโ€๐Ÿš’ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿš’ ๐Ÿ‘ฉ๐Ÿฟโ€โœˆ๏ธ ๐Ÿง‘๐Ÿฟโ€โœˆ๏ธ ๐Ÿ‘จ๐Ÿฟโ€โœˆ๏ธ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿš€ ๐Ÿง‘๐Ÿฟโ€๐Ÿš€ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿš€ ๐Ÿ‘ฉ๐Ÿฟโ€โš–๏ธ ๐Ÿง‘๐Ÿฟโ€โš–๏ธ ๐Ÿ‘จ๐Ÿฟโ€โš–๏ธ ๐Ÿ‘ฐ๐Ÿฟโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿฟ ๐Ÿ‘ฐ๐Ÿฟโ€โ™‚๏ธ ๐Ÿคต๐Ÿฟโ€โ™€๏ธ ๐Ÿคต๐Ÿฟ ๐Ÿคต๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ธ๐Ÿฟ ๐Ÿคด๐Ÿฟ ๐Ÿฅท๐Ÿฟ ๐Ÿฆธ๐Ÿฟโ€โ™€๏ธ ๐Ÿฆธ๐Ÿฟ ๐Ÿฆธ๐Ÿฟโ€โ™‚๏ธ ๐Ÿฆน๐Ÿฟโ€โ™€๏ธ ๐Ÿฆน๐Ÿฟ ๐Ÿฆน๐Ÿฟโ€โ™‚๏ธ ๐Ÿคถ๐Ÿฟ ๐Ÿง‘๐Ÿฟโ€๐ŸŽ„ ๐ŸŽ…๐Ÿฟ ๐Ÿง™๐Ÿฟโ€โ™€๏ธ ๐Ÿง™๐Ÿฟ ๐Ÿง™๐Ÿฟโ€โ™‚๏ธ ๐Ÿง๐Ÿฟโ€โ™€๏ธ ๐Ÿง๐Ÿฟ ๐Ÿง๐Ÿฟโ€โ™‚๏ธ ๐Ÿง›๐Ÿฟโ€โ™€๏ธ ๐Ÿง›๐Ÿฟ ๐Ÿง›๐Ÿฟโ€โ™‚๏ธ ๐Ÿงœ๐Ÿฟโ€โ™€๏ธ ๐Ÿงœ๐Ÿฟ ๐Ÿงœ๐Ÿฟโ€โ™‚๏ธ ๐Ÿงš๐Ÿฟโ€โ™€๏ธ ๐Ÿงš๐Ÿฟ ๐Ÿงš๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ผ๐Ÿฟ ๐Ÿคฐ๐Ÿฟ ๐Ÿคฑ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿผ ๐Ÿง‘๐Ÿฟโ€๐Ÿผ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿผ ๐Ÿ™‡๐Ÿฟโ€โ™€๏ธ ๐Ÿ™‡๐Ÿฟ ๐Ÿ™‡๐Ÿฟโ€โ™‚๏ธ ๐Ÿ’๐Ÿฟโ€โ™€๏ธ ๐Ÿ’๐Ÿฟ ๐Ÿ’๐Ÿฟโ€โ™‚๏ธ ๐Ÿ™…๐Ÿฟโ€โ™€๏ธ ๐Ÿ™…๐Ÿฟ ๐Ÿ™…๐Ÿฟโ€โ™‚๏ธ ๐Ÿ™†๐Ÿฟโ€โ™€๏ธ ๐Ÿ™†๐Ÿฟ ๐Ÿ™†๐Ÿฟโ€โ™‚๏ธ ๐Ÿ™‹๐Ÿฟโ€โ™€๏ธ ๐Ÿ™‹๐Ÿฟ ๐Ÿ™‹๐Ÿฟโ€โ™‚๏ธ ๐Ÿง๐Ÿฟโ€โ™€๏ธ ๐Ÿง๐Ÿฟ ๐Ÿง๐Ÿฟโ€โ™‚๏ธ ๐Ÿคฆ๐Ÿฟโ€โ™€๏ธ ๐Ÿคฆ๐Ÿฟ ๐Ÿคฆ๐Ÿฟโ€โ™‚๏ธ ๐Ÿคท๐Ÿฟโ€โ™€๏ธ ๐Ÿคท๐Ÿฟ ๐Ÿคท๐Ÿฟโ€โ™‚๏ธ ๐Ÿ™Ž๐Ÿฟโ€โ™€๏ธ ๐Ÿ™Ž๐Ÿฟ ๐Ÿ™Ž๐Ÿฟโ€โ™‚๏ธ ๐Ÿ™๐Ÿฟโ€โ™€๏ธ ๐Ÿ™๐Ÿฟ ๐Ÿ™๐Ÿฟโ€โ™‚๏ธ ๐Ÿ’‡๐Ÿฟโ€โ™€๏ธ ๐Ÿ’‡๐Ÿฟ ๐Ÿ’‡๐Ÿฟโ€โ™‚๏ธ ๐Ÿ’†๐Ÿฟโ€โ™€๏ธ ๐Ÿ’†๐Ÿฟ ๐Ÿ’†๐Ÿฟโ€โ™‚๏ธ ๐Ÿง–๐Ÿฟโ€โ™€๏ธ ๐Ÿง–๐Ÿฟ ๐Ÿง–๐Ÿฟโ€โ™‚๏ธ ๐Ÿ’ƒ๐Ÿฟ ๐Ÿ•บ๐Ÿฟ ๐Ÿ•ด๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฝ ๐Ÿง‘๐Ÿฟโ€๐Ÿฆฝ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฝ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆผ ๐Ÿง‘๐Ÿฟโ€๐Ÿฆผ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆผ ๐Ÿšถ๐Ÿฟโ€โ™€๏ธ ๐Ÿšถ๐Ÿฟ ๐Ÿšถ๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆฏ ๐Ÿง‘๐Ÿฟโ€๐Ÿฆฏ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆฏ ๐ŸงŽ๐Ÿฟโ€โ™€๏ธ ๐ŸงŽ๐Ÿฟ ๐ŸงŽ๐Ÿฟโ€โ™‚๏ธ ๐Ÿƒ๐Ÿฟโ€โ™€๏ธ ๐Ÿƒ๐Ÿฟ ๐Ÿƒ๐Ÿฟโ€โ™‚๏ธ ๐Ÿง๐Ÿฟโ€โ™€๏ธ ๐Ÿง๐Ÿฟ ๐Ÿง๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ญ๐Ÿฟ ๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ ๐Ÿ‘ฌ๐Ÿฟ ๐Ÿ‘ซ๐Ÿฟ ๐Ÿง—๐Ÿฟโ€โ™€๏ธ ๐Ÿง—๐Ÿฟ ๐Ÿง—๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‡๐Ÿฟ ๐Ÿ‚๐Ÿฟ ๐ŸŒ๐Ÿฟโ€โ™€๏ธ ๐ŸŒ๐Ÿฟ ๐ŸŒ๐Ÿฟโ€โ™‚๏ธ ๐Ÿ„๐Ÿฟโ€โ™€๏ธ ๐Ÿ„๐Ÿฟ ๐Ÿ„๐Ÿฟโ€โ™‚๏ธ ๐Ÿšฃ๐Ÿฟโ€โ™€๏ธ ๐Ÿšฃ๐Ÿฟ ๐Ÿšฃ๐Ÿฟโ€โ™‚๏ธ ๐ŸŠ๐Ÿฟโ€โ™€๏ธ ๐ŸŠ๐Ÿฟ ๐ŸŠ๐Ÿฟโ€โ™‚๏ธ โ›น๐Ÿฟโ€โ™€๏ธ โ›น๐Ÿฟ โ›น๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‹๐Ÿฟโ€โ™€๏ธ ๐Ÿ‹๐Ÿฟ ๐Ÿ‹๐Ÿฟโ€โ™‚๏ธ ๐Ÿšด๐Ÿฟโ€โ™€๏ธ ๐Ÿšด๐Ÿฟ ๐Ÿšด๐Ÿฟโ€โ™‚๏ธ ๐Ÿšต๐Ÿฟโ€โ™€๏ธ ๐Ÿšต๐Ÿฟ ๐Ÿšต๐Ÿฟโ€โ™‚๏ธ ๐Ÿคธ๐Ÿฟโ€โ™€๏ธ ๐Ÿคธ๐Ÿฟ ๐Ÿคธ๐Ÿฟโ€โ™‚๏ธ ๐Ÿคฝ๐Ÿฟโ€โ™€๏ธ ๐Ÿคฝ๐Ÿฟ ๐Ÿคฝ๐Ÿฟโ€โ™‚๏ธ ๐Ÿคพ๐Ÿฟโ€โ™€๏ธ ๐Ÿคพ๐Ÿฟ ๐Ÿคพ๐Ÿฟโ€โ™‚๏ธ ๐Ÿคน๐Ÿฟโ€โ™€๏ธ ๐Ÿคน๐Ÿฟ ๐Ÿคน๐Ÿฟโ€โ™‚๏ธ ๐Ÿง˜๐Ÿฟโ€โ™€๏ธ ๐Ÿง˜๐Ÿฟ ๐Ÿง˜๐Ÿฟโ€โ™‚๏ธ ๐Ÿ›€๐Ÿฟ ๐Ÿ›Œ๐Ÿฟ'.split(' '),
918
+ 'Animals & Nature': '๐Ÿถ ๐Ÿฑ ๐Ÿญ ๐Ÿน ๐Ÿฐ ๐ŸฆŠ ๐Ÿป ๐Ÿผ ๐Ÿปโ€โ„๏ธ ๐Ÿจ ๐Ÿฏ ๐Ÿฆ ๐Ÿฎ ๐Ÿท ๐Ÿฝ ๐Ÿธ ๐Ÿต ๐Ÿ™ˆ ๐Ÿ™‰ ๐Ÿ™Š ๐Ÿ’ ๐Ÿ” ๐Ÿง ๐Ÿฆ ๐Ÿค ๐Ÿฃ ๐Ÿฅ ๐Ÿฆ† ๐Ÿฆ… ๐Ÿฆ‰ ๐Ÿฆ‡ ๐Ÿบ ๐Ÿ— ๐Ÿด ๐Ÿฆ„ ๐Ÿ ๐Ÿชฑ ๐Ÿ› ๐Ÿฆ‹ ๐ŸŒ ๐Ÿž ๐Ÿœ ๐Ÿชฐ ๐Ÿชฒ ๐Ÿชณ ๐ŸฆŸ ๐Ÿฆ— ๐Ÿ•ท ๐Ÿ•ธ ๐Ÿฆ‚ ๐Ÿข ๐Ÿ ๐ŸฆŽ ๐Ÿฆ– ๐Ÿฆ• ๐Ÿ™ ๐Ÿฆ‘ ๐Ÿฆ ๐Ÿฆž ๐Ÿฆ€ ๐Ÿก ๐Ÿ  ๐ŸŸ ๐Ÿฌ ๐Ÿณ ๐Ÿ‹ ๐Ÿฆˆ ๐ŸŠ ๐Ÿ… ๐Ÿ† ๐Ÿฆ“ ๐Ÿฆ ๐Ÿฆง ๐Ÿฆฃ ๐Ÿ˜ ๐Ÿฆ› ๐Ÿฆ ๐Ÿช ๐Ÿซ ๐Ÿฆ’ ๐Ÿฆ˜ ๐Ÿฆฌ ๐Ÿƒ ๐Ÿ‚ ๐Ÿ„ ๐ŸŽ ๐Ÿ– ๐Ÿ ๐Ÿ‘ ๐Ÿฆ™ ๐Ÿ ๐ŸฆŒ ๐Ÿ• ๐Ÿฉ ๐Ÿฆฎ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿˆ ๐Ÿˆโ€โฌ› ๐Ÿชถ ๐Ÿ“ ๐Ÿฆƒ ๐Ÿฆค ๐Ÿฆš ๐Ÿฆœ ๐Ÿฆข ๐Ÿฆฉ ๐Ÿ•Š ๐Ÿ‡ ๐Ÿฆ ๐Ÿฆจ ๐Ÿฆก ๐Ÿฆซ ๐Ÿฆฆ ๐Ÿฆฅ ๐Ÿ ๐Ÿ€ ๐Ÿฟ ๐Ÿฆ” ๐Ÿพ ๐Ÿ‰ ๐Ÿฒ ๐ŸŒต ๐ŸŽ„ ๐ŸŒฒ ๐ŸŒณ ๐ŸŒด ๐Ÿชต ๐ŸŒฑ ๐ŸŒฟ โ˜˜๏ธ ๐Ÿ€ ๐ŸŽ ๐Ÿชด ๐ŸŽ‹ ๐Ÿƒ ๐Ÿ‚ ๐Ÿ ๐Ÿ„ ๐Ÿš ๐Ÿชจ ๐ŸŒพ ๐Ÿ’ ๐ŸŒท ๐ŸŒน ๐Ÿฅ€ ๐ŸŒบ ๐ŸŒธ ๐ŸŒผ ๐ŸŒป ๐ŸŒž ๐ŸŒ ๐ŸŒ› ๐ŸŒœ ๐ŸŒš ๐ŸŒ• ๐ŸŒ– ๐ŸŒ— ๐ŸŒ˜ ๐ŸŒ‘ ๐ŸŒ’ ๐ŸŒ“ ๐ŸŒ” ๐ŸŒ™ ๐ŸŒŽ ๐ŸŒ ๐ŸŒ ๐Ÿช ๐Ÿ’ซ โญ๏ธ ๐ŸŒŸ โœจ โšก๏ธ โ˜„๏ธ ๐Ÿ’ฅ ๐Ÿ”ฅ ๐ŸŒช ๐ŸŒˆ โ˜€๏ธ ๐ŸŒค โ›…๏ธ ๐ŸŒฅ โ˜๏ธ ๐ŸŒฆ ๐ŸŒง โ›ˆ ๐ŸŒฉ ๐ŸŒจ โ„๏ธ โ˜ƒ๏ธ โ›„๏ธ ๐ŸŒฌ ๐Ÿ’จ ๐Ÿ’ง ๐Ÿ’ฆ โ˜”๏ธ โ˜‚๏ธ ๐ŸŒŠ ๐ŸŒซ'.split(' '),
919
+ 'Food & Drink': '๐Ÿ ๐ŸŽ ๐Ÿ ๐ŸŠ ๐Ÿ‹ ๐ŸŒ ๐Ÿ‰ ๐Ÿ‡ ๐Ÿ“ ๐Ÿซ ๐Ÿˆ ๐Ÿ’ ๐Ÿ‘ ๐Ÿฅญ ๐Ÿ ๐Ÿฅฅ ๐Ÿฅ ๐Ÿ… ๐Ÿ† ๐Ÿฅ‘ ๐Ÿฅฆ ๐Ÿฅฌ ๐Ÿฅ’ ๐ŸŒถ ๐Ÿซ‘ ๐ŸŒฝ ๐Ÿฅ• ๐Ÿซ’ ๐Ÿง„ ๐Ÿง… ๐Ÿฅ” ๐Ÿ  ๐Ÿฅ ๐Ÿฅฏ ๐Ÿž ๐Ÿฅ– ๐Ÿฅจ ๐Ÿง€ ๐Ÿฅš ๐Ÿณ ๐Ÿงˆ ๐Ÿฅž ๐Ÿง‡ ๐Ÿฅ“ ๐Ÿฅฉ ๐Ÿ— ๐Ÿ– ๐Ÿฆด ๐ŸŒญ ๐Ÿ” ๐ŸŸ ๐Ÿ• ๐Ÿซ“ ๐Ÿฅช ๐Ÿฅ™ ๐Ÿง† ๐ŸŒฎ ๐ŸŒฏ ๐Ÿซ” ๐Ÿฅ— ๐Ÿฅ˜ ๐Ÿซ• ๐Ÿฅซ ๐Ÿ ๐Ÿœ ๐Ÿฒ ๐Ÿ› ๐Ÿฃ ๐Ÿฑ ๐ŸฅŸ ๐Ÿฆช ๐Ÿค ๐Ÿ™ ๐Ÿš ๐Ÿ˜ ๐Ÿฅ ๐Ÿฅ  ๐Ÿฅฎ ๐Ÿข ๐Ÿก ๐Ÿง ๐Ÿจ ๐Ÿฆ ๐Ÿฅง ๐Ÿง ๐Ÿฐ ๐ŸŽ‚ ๐Ÿฎ ๐Ÿญ ๐Ÿฌ ๐Ÿซ ๐Ÿฟ ๐Ÿฉ ๐Ÿช ๐ŸŒฐ ๐Ÿฅœ ๐Ÿฏ ๐Ÿฅ› ๐Ÿผ ๐Ÿซ– โ˜•๏ธ ๐Ÿต ๐Ÿงƒ ๐Ÿฅค ๐Ÿง‹ ๐Ÿถ ๐Ÿบ ๐Ÿป ๐Ÿฅ‚ ๐Ÿท ๐Ÿฅƒ ๐Ÿธ ๐Ÿน ๐Ÿง‰ ๐Ÿพ ๐ŸงŠ ๐Ÿฅ„ ๐Ÿด ๐Ÿฝ ๐Ÿฅฃ ๐Ÿฅก ๐Ÿฅข ๐Ÿง‚'.split(' '),
920
+ 'Activity and Sports': 'โšฝ๏ธ ๐Ÿ€ ๐Ÿˆ โšพ๏ธ ๐ŸฅŽ ๐ŸŽพ ๐Ÿ ๐Ÿ‰ ๐Ÿฅ ๐ŸŽฑ ๐Ÿช€ ๐Ÿ“ ๐Ÿธ ๐Ÿ’ ๐Ÿ‘ ๐Ÿฅ ๐Ÿ ๐Ÿชƒ ๐Ÿฅ… โ›ณ๏ธ ๐Ÿช ๐Ÿน ๐ŸŽฃ ๐Ÿคฟ ๐ŸฅŠ ๐Ÿฅ‹ ๐ŸŽฝ ๐Ÿ›น ๐Ÿ›ผ ๐Ÿ›ท โ›ธ ๐ŸฅŒ ๐ŸŽฟ โ›ท ๐Ÿ‚ ๐Ÿช‚ ๐Ÿ‹๏ธโ€โ™€๏ธ ๐Ÿ‹๏ธ ๐Ÿ‹๏ธโ€โ™‚๏ธ ๐Ÿคผโ€โ™€๏ธ ๐Ÿคผ ๐Ÿคผโ€โ™‚๏ธ ๐Ÿคธโ€โ™€๏ธ ๐Ÿคธ ๐Ÿคธโ€โ™‚๏ธ โ›น๏ธโ€โ™€๏ธ โ›น๏ธ โ›น๏ธโ€โ™‚๏ธ ๐Ÿคบ ๐Ÿคพโ€โ™€๏ธ ๐Ÿคพ ๐Ÿคพโ€โ™‚๏ธ ๐ŸŒ๏ธโ€โ™€๏ธ ๐ŸŒ๏ธ ๐ŸŒ๏ธโ€โ™‚๏ธ ๐Ÿ‡ ๐Ÿง˜โ€โ™€๏ธ ๐Ÿง˜ ๐Ÿง˜โ€โ™‚๏ธ ๐Ÿ„โ€โ™€๏ธ ๐Ÿ„ ๐Ÿ„โ€โ™‚๏ธ ๐ŸŠโ€โ™€๏ธ ๐ŸŠ ๐ŸŠโ€โ™‚๏ธ ๐Ÿคฝโ€โ™€๏ธ ๐Ÿคฝ ๐Ÿคฝโ€โ™‚๏ธ ๐Ÿšฃโ€โ™€๏ธ ๐Ÿšฃ ๐Ÿšฃโ€โ™‚๏ธ ๐Ÿง—โ€โ™€๏ธ ๐Ÿง— ๐Ÿง—โ€โ™‚๏ธ ๐Ÿšตโ€โ™€๏ธ ๐Ÿšต ๐Ÿšตโ€โ™‚๏ธ ๐Ÿšดโ€โ™€๏ธ ๐Ÿšด ๐Ÿšดโ€โ™‚๏ธ ๐Ÿ† ๐Ÿฅ‡ ๐Ÿฅˆ ๐Ÿฅ‰ ๐Ÿ… ๐ŸŽ– ๐Ÿต ๐ŸŽ— ๐ŸŽซ ๐ŸŽŸ ๐ŸŽช ๐Ÿคน ๐Ÿคนโ€โ™‚๏ธ ๐Ÿคนโ€โ™€๏ธ ๐ŸŽญ ๐Ÿฉฐ ๐ŸŽจ ๐ŸŽฌ ๐ŸŽค ๐ŸŽง ๐ŸŽผ ๐ŸŽน ๐Ÿฅ ๐Ÿช˜ ๐ŸŽท ๐ŸŽบ ๐Ÿช— ๐ŸŽธ ๐Ÿช• ๐ŸŽป ๐ŸŽฒ โ™Ÿ ๐ŸŽฏ ๐ŸŽณ ๐ŸŽฎ ๐ŸŽฐ ๐Ÿงฉ'.split(' '),
921
+ 'Travel & Places': '๐Ÿš— ๐Ÿš• ๐Ÿš™ ๐ŸšŒ ๐ŸšŽ ๐ŸŽ ๐Ÿš“ ๐Ÿš‘ ๐Ÿš’ ๐Ÿš ๐Ÿ›ป ๐Ÿšš ๐Ÿš› ๐Ÿšœ ๐Ÿฆฏ ๐Ÿฆฝ ๐Ÿฆผ ๐Ÿ›ด ๐Ÿšฒ ๐Ÿ›ต ๐Ÿ ๐Ÿ›บ ๐Ÿšจ ๐Ÿš” ๐Ÿš ๐Ÿš˜ ๐Ÿš– ๐Ÿšก ๐Ÿš  ๐ŸšŸ ๐Ÿšƒ ๐Ÿš‹ ๐Ÿšž ๐Ÿš ๐Ÿš„ ๐Ÿš… ๐Ÿšˆ ๐Ÿš‚ ๐Ÿš† ๐Ÿš‡ ๐ŸšŠ ๐Ÿš‰ โœˆ๏ธ ๐Ÿ›ซ ๐Ÿ›ฌ ๐Ÿ›ฉ ๐Ÿ’บ ๐Ÿ›ฐ ๐Ÿš€ ๐Ÿ›ธ ๐Ÿš ๐Ÿ›ถ โ›ต๏ธ ๐Ÿšค ๐Ÿ›ฅ ๐Ÿ›ณ โ›ด ๐Ÿšข โš“๏ธ ๐Ÿช โ›ฝ๏ธ ๐Ÿšง ๐Ÿšฆ ๐Ÿšฅ ๐Ÿš ๐Ÿ—บ ๐Ÿ—ฟ ๐Ÿ—ฝ ๐Ÿ—ผ ๐Ÿฐ ๐Ÿฏ ๐ŸŸ ๐ŸŽก ๐ŸŽข ๐ŸŽ  โ›ฒ๏ธ โ›ฑ ๐Ÿ– ๐Ÿ ๐Ÿœ ๐ŸŒ‹ โ›ฐ ๐Ÿ” ๐Ÿ—ป ๐Ÿ• โ›บ๏ธ ๐Ÿ›– ๐Ÿ  ๐Ÿก ๐Ÿ˜ ๐Ÿš ๐Ÿ— ๐Ÿญ ๐Ÿข ๐Ÿฌ ๐Ÿฃ ๐Ÿค ๐Ÿฅ ๐Ÿฆ ๐Ÿจ ๐Ÿช ๐Ÿซ ๐Ÿฉ ๐Ÿ’’ ๐Ÿ› โ›ช๏ธ ๐Ÿ•Œ ๐Ÿ• ๐Ÿ›• ๐Ÿ•‹ โ›ฉ ๐Ÿ›ค ๐Ÿ›ฃ ๐Ÿ—พ ๐ŸŽ‘ ๐Ÿž ๐ŸŒ… ๐ŸŒ„ ๐ŸŒ  ๐ŸŽ‡ ๐ŸŽ† ๐ŸŒ‡ ๐ŸŒ† ๐Ÿ™ ๐ŸŒƒ ๐ŸŒŒ ๐ŸŒ‰ ๐ŸŒ'.split(' '),
922
+ Objects: 'โŒš๏ธ ๐Ÿ“ฑ ๐Ÿ“ฒ ๐Ÿ’ป โŒจ๏ธ ๐Ÿ–ฅ ๐Ÿ–จ ๐Ÿ–ฑ ๐Ÿ–ฒ ๐Ÿ•น ๐Ÿ—œ ๐Ÿ’ฝ ๐Ÿ’พ ๐Ÿ’ฟ ๐Ÿ“€ ๐Ÿ“ผ ๐Ÿ“ท ๐Ÿ“ธ ๐Ÿ“น ๐ŸŽฅ ๐Ÿ“ฝ ๐ŸŽž ๐Ÿ“ž โ˜Ž๏ธ ๐Ÿ“Ÿ ๐Ÿ“  ๐Ÿ“บ ๐Ÿ“ป ๐ŸŽ™ ๐ŸŽš ๐ŸŽ› ๐Ÿงญ โฑ โฒ โฐ ๐Ÿ•ฐ โŒ›๏ธ โณ ๐Ÿ“ก ๐Ÿ”‹ ๐Ÿ”Œ ๐Ÿ’ก ๐Ÿ”ฆ ๐Ÿ•ฏ ๐Ÿช” ๐Ÿงฏ ๐Ÿ›ข ๐Ÿ’ธ ๐Ÿ’ต ๐Ÿ’ด ๐Ÿ’ถ ๐Ÿ’ท ๐Ÿช™ ๐Ÿ’ฐ ๐Ÿ’ณ ๐Ÿ’Ž โš–๏ธ ๐Ÿชœ ๐Ÿงฐ ๐Ÿช› ๐Ÿ”ง ๐Ÿ”จ โš’ ๐Ÿ›  โ› ๐Ÿชš ๐Ÿ”ฉ โš™๏ธ ๐Ÿชค ๐Ÿงฑ โ›“ ๐Ÿงฒ ๐Ÿ”ซ ๐Ÿ’ฃ ๐Ÿงจ ๐Ÿช“ ๐Ÿ”ช ๐Ÿ—ก โš”๏ธ ๐Ÿ›ก ๐Ÿšฌ โšฐ๏ธ ๐Ÿชฆ โšฑ๏ธ ๐Ÿบ ๐Ÿ”ฎ ๐Ÿ“ฟ ๐Ÿงฟ ๐Ÿ’ˆ โš—๏ธ ๐Ÿ”ญ ๐Ÿ”ฌ ๐Ÿ•ณ ๐Ÿฉน ๐Ÿฉบ ๐Ÿ’Š ๐Ÿ’‰ ๐Ÿฉธ ๐Ÿงฌ ๐Ÿฆ  ๐Ÿงซ ๐Ÿงช ๐ŸŒก ๐Ÿงน ๐Ÿช  ๐Ÿงบ ๐Ÿงป ๐Ÿšฝ ๐Ÿšฐ ๐Ÿšฟ ๐Ÿ› ๐Ÿ›€ ๐Ÿงผ ๐Ÿชฅ ๐Ÿช’ ๐Ÿงฝ ๐Ÿชฃ ๐Ÿงด ๐Ÿ›Ž ๐Ÿ”‘ ๐Ÿ— ๐Ÿšช ๐Ÿช‘ ๐Ÿ›‹ ๐Ÿ› ๐Ÿ›Œ ๐Ÿงธ ๐Ÿช† ๐Ÿ–ผ ๐Ÿชž ๐ŸชŸ ๐Ÿ› ๐Ÿ›’ ๐ŸŽ ๐ŸŽˆ ๐ŸŽ ๐ŸŽ€ ๐Ÿช„ ๐Ÿช… ๐ŸŽŠ ๐ŸŽ‰ ๐ŸŽŽ ๐Ÿฎ ๐ŸŽ ๐Ÿงง โœ‰๏ธ ๐Ÿ“ฉ ๐Ÿ“จ ๐Ÿ“ง ๐Ÿ’Œ ๐Ÿ“ฅ ๐Ÿ“ค ๐Ÿ“ฆ ๐Ÿท ๐Ÿชง ๐Ÿ“ช ๐Ÿ“ซ ๐Ÿ“ฌ ๐Ÿ“ญ ๐Ÿ“ฎ ๐Ÿ“ฏ ๐Ÿ“œ ๐Ÿ“ƒ ๐Ÿ“„ ๐Ÿ“‘ ๐Ÿงพ ๐Ÿ“Š ๐Ÿ“ˆ ๐Ÿ“‰ ๐Ÿ—’ ๐Ÿ—“ ๐Ÿ“† ๐Ÿ“… ๐Ÿ—‘ ๐Ÿ“‡ ๐Ÿ—ƒ ๐Ÿ—ณ ๐Ÿ—„ ๐Ÿ“‹ ๐Ÿ“ ๐Ÿ“‚ ๐Ÿ—‚ ๐Ÿ—ž ๐Ÿ“ฐ ๐Ÿ““ ๐Ÿ“” ๐Ÿ“’ ๐Ÿ“• ๐Ÿ“— ๐Ÿ“˜ ๐Ÿ“™ ๐Ÿ“š ๐Ÿ“– ๐Ÿ”– ๐Ÿงท ๐Ÿ”— ๐Ÿ“Ž ๐Ÿ–‡ ๐Ÿ“ ๐Ÿ“ ๐Ÿงฎ ๐Ÿ“Œ ๐Ÿ“ โœ‚๏ธ ๐Ÿ–Š ๐Ÿ–‹ โœ’๏ธ ๐Ÿ–Œ ๐Ÿ– ๐Ÿ“ โœ๏ธ ๐Ÿ” ๐Ÿ”Ž ๐Ÿ” ๐Ÿ” ๐Ÿ”’ ๐Ÿ”“'.split(' '),
923
+ Symbols: 'โค๏ธ ๐Ÿงก ๐Ÿ’› ๐Ÿ’š ๐Ÿ’™ ๐Ÿ’œ ๐Ÿ–ค ๐Ÿค ๐ŸคŽ ๐Ÿ’” โฃ๏ธ ๐Ÿ’• ๐Ÿ’ž ๐Ÿ’“ ๐Ÿ’— ๐Ÿ’– ๐Ÿ’˜ ๐Ÿ’ ๐Ÿ’Ÿ โ˜ฎ๏ธ โœ๏ธ โ˜ช๏ธ ๐Ÿ•‰ โ˜ธ๏ธ โœก๏ธ ๐Ÿ”ฏ ๐Ÿ•Ž โ˜ฏ๏ธ โ˜ฆ๏ธ ๐Ÿ› โ›Ž โ™ˆ๏ธ โ™‰๏ธ โ™Š๏ธ โ™‹๏ธ โ™Œ๏ธ โ™๏ธ โ™Ž๏ธ โ™๏ธ โ™๏ธ โ™‘๏ธ โ™’๏ธ โ™“๏ธ ๐Ÿ†” โš›๏ธ ๐Ÿ‰‘ โ˜ข๏ธ โ˜ฃ๏ธ ๐Ÿ“ด ๐Ÿ“ณ ๐Ÿˆถ ๐Ÿˆš๏ธ ๐Ÿˆธ ๐Ÿˆบ ๐Ÿˆท๏ธ โœด๏ธ ๐Ÿ†š ๐Ÿ’ฎ ๐Ÿ‰ ใŠ™๏ธ ใŠ—๏ธ ๐Ÿˆด ๐Ÿˆต ๐Ÿˆน ๐Ÿˆฒ ๐Ÿ…ฐ๏ธ ๐Ÿ…ฑ๏ธ ๐Ÿ†Ž ๐Ÿ†‘ ๐Ÿ…พ๏ธ ๐Ÿ†˜ โŒ โญ•๏ธ ๐Ÿ›‘ โ›”๏ธ ๐Ÿ“› ๐Ÿšซ ๐Ÿ’ฏ ๐Ÿ’ข โ™จ๏ธ ๐Ÿšท ๐Ÿšฏ ๐Ÿšณ ๐Ÿšฑ ๐Ÿ”ž ๐Ÿ“ต ๐Ÿšญ โ—๏ธ โ• โ“ โ” โ€ผ๏ธ โ‰๏ธ ๐Ÿ”… ๐Ÿ”† ใ€ฝ๏ธ โš ๏ธ ๐Ÿšธ ๐Ÿ”ฑ โšœ๏ธ ๐Ÿ”ฐ โ™ป๏ธ โœ… ๐Ÿˆฏ๏ธ ๐Ÿ’น โ‡๏ธ โœณ๏ธ โŽ ๐ŸŒ ๐Ÿ’  โ“‚๏ธ ๐ŸŒ€ ๐Ÿ’ค ๐Ÿง ๐Ÿšพ โ™ฟ๏ธ ๐Ÿ…ฟ๏ธ ๐Ÿ›— ๐Ÿˆณ ๐Ÿˆ‚๏ธ ๐Ÿ›‚ ๐Ÿ›ƒ ๐Ÿ›„ ๐Ÿ›… ๐Ÿšน ๐Ÿšบ ๐Ÿšผ โšง ๐Ÿšป ๐Ÿšฎ ๐ŸŽฆ ๐Ÿ“ถ ๐Ÿˆ ๐Ÿ”ฃ โ„น๏ธ ๐Ÿ”ค ๐Ÿ”ก ๐Ÿ”  ๐Ÿ†– ๐Ÿ†— ๐Ÿ†™ ๐Ÿ†’ ๐Ÿ†• ๐Ÿ†“ 0๏ธโƒฃ 1๏ธโƒฃ 2๏ธโƒฃ 3๏ธโƒฃ 4๏ธโƒฃ 5๏ธโƒฃ 6๏ธโƒฃ 7๏ธโƒฃ 8๏ธโƒฃ 9๏ธโƒฃ ๐Ÿ”Ÿ ๐Ÿ”ข #๏ธโƒฃ *๏ธโƒฃ โ๏ธ โ–ถ๏ธ โธ โฏ โน โบ โญ โฎ โฉ โช โซ โฌ โ—€๏ธ ๐Ÿ”ผ ๐Ÿ”ฝ โžก๏ธ โฌ…๏ธ โฌ†๏ธ โฌ‡๏ธ โ†—๏ธ โ†˜๏ธ โ†™๏ธ โ†–๏ธ โ†•๏ธ โ†”๏ธ โ†ช๏ธ โ†ฉ๏ธ โคด๏ธ โคต๏ธ ๐Ÿ”€ ๐Ÿ” ๐Ÿ”‚ ๐Ÿ”„ ๐Ÿ”ƒ ๐ŸŽต ๐ŸŽถ โž• โž– โž— โœ–๏ธ โ™พ ๐Ÿ’ฒ ๐Ÿ’ฑ โ„ข๏ธ ยฉ๏ธ ยฎ๏ธ ใ€ฐ๏ธ โžฐ โžฟ ๐Ÿ”š ๐Ÿ”™ ๐Ÿ”› ๐Ÿ” ๐Ÿ”œ โœ”๏ธ โ˜‘๏ธ ๐Ÿ”˜ ๐Ÿ”ด ๐ŸŸ  ๐ŸŸก ๐ŸŸข ๐Ÿ”ต ๐ŸŸฃ โšซ๏ธ โšช๏ธ ๐ŸŸค ๐Ÿ”บ ๐Ÿ”ป ๐Ÿ”ธ ๐Ÿ”น ๐Ÿ”ถ ๐Ÿ”ท ๐Ÿ”ณ ๐Ÿ”ฒ โ–ช๏ธ โ–ซ๏ธ โ—พ๏ธ โ—ฝ๏ธ โ—ผ๏ธ โ—ป๏ธ ๐ŸŸฅ ๐ŸŸง ๐ŸŸจ ๐ŸŸฉ ๐ŸŸฆ ๐ŸŸช โฌ›๏ธ โฌœ๏ธ ๐ŸŸซ ๐Ÿ”ˆ ๐Ÿ”‡ ๐Ÿ”‰ ๐Ÿ”Š ๐Ÿ”” ๐Ÿ”• ๐Ÿ“ฃ ๐Ÿ“ข ๐Ÿ‘โ€๐Ÿ—จ ๐Ÿ’ฌ ๐Ÿ’ญ ๐Ÿ—ฏ โ™ ๏ธ โ™ฃ๏ธ โ™ฅ๏ธ โ™ฆ๏ธ ๐Ÿƒ ๐ŸŽด ๐Ÿ€„๏ธ ๐Ÿ• ๐Ÿ•‘ ๐Ÿ•’ ๐Ÿ•“ ๐Ÿ•” ๐Ÿ•• ๐Ÿ•– ๐Ÿ•— ๐Ÿ•˜ ๐Ÿ•™ ๐Ÿ•š ๐Ÿ•› ๐Ÿ•œ ๐Ÿ• ๐Ÿ•ž ๐Ÿ•Ÿ ๐Ÿ•  ๐Ÿ•ก ๐Ÿ•ข ๐Ÿ•ฃ ๐Ÿ•ค ๐Ÿ•ฅ ๐Ÿ•ฆ ๐Ÿ•ง'.split(' '),
924
+ 'Non-Emoji Symbols': 'โœข โœฃ โœค โœฅ โœฆ โœง โ˜… โ˜† โœฏ โœก๏ธŽ โœฉ โœช โœซ โœฌ โœญ โœฎ โœถ โœท โœต โœธ โœน โ†’ โ‡’ โŸน โ‡จ โ‡พ โžพ โ‡ข โ˜› โ˜ž โž” โžœ โž™ โž› โž โžž โ™ ๏ธŽ โ™ฃ๏ธŽ โ™ฅ๏ธŽ โ™ฆ๏ธŽ โ™ค โ™ง โ™ก โ™ข โ™š โ™› โ™œ โ™ โ™ž โ™Ÿ โ™” โ™• โ™– โ™— โ™˜ โ™™ โš€ โš โš‚ โšƒ โš„ โš… ๐Ÿ‚  โšˆ โš‰ โš† โš‡ ๐“€€ ๐“€ ๐“€‚ ๐“€ƒ ๐“€„ ๐“€… ๐“€† ๐“€‡ ๐“€ˆ ๐“€‰ ๐“€Š ๐“€‹ ๐“€Œ ๐“€ ๐“€Ž ๐“€ ๐“€ ๐“€‘ ๐“€’ ๐“€“ ๐“€” ๐“€• ๐“€– ๐“€— ๐“€˜ ๐“€™ ๐“€š ๐“€› ๐“€œ ๐“€'.split(' '),
925
+ Flags: '๐Ÿณ๏ธ ๐Ÿด ๐Ÿ ๐Ÿšฉ ๐Ÿณ๏ธโ€๐ŸŒˆ ๐Ÿณ๏ธโ€โšง๏ธ ๐Ÿดโ€โ˜ ๏ธ'.split(' '),
926
+ Countries: '๐Ÿ‡ฆ๐Ÿ‡ซ ๐Ÿ‡ฆ๐Ÿ‡ฝ ๐Ÿ‡ฆ๐Ÿ‡ฑ ๐Ÿ‡ฉ๐Ÿ‡ฟ ๐Ÿ‡ฆ๐Ÿ‡ธ ๐Ÿ‡ฆ๐Ÿ‡ฉ ๐Ÿ‡ฆ๐Ÿ‡ด ๐Ÿ‡ฆ๐Ÿ‡ฎ ๐Ÿ‡ฆ๐Ÿ‡ถ ๐Ÿ‡ฆ๐Ÿ‡ฌ ๐Ÿ‡ฆ๐Ÿ‡ท ๐Ÿ‡ฆ๐Ÿ‡ฒ ๐Ÿ‡ฆ๐Ÿ‡ผ ๐Ÿ‡ฆ๐Ÿ‡บ ๐Ÿ‡ฆ๐Ÿ‡น ๐Ÿ‡ฆ๐Ÿ‡ฟ ๐Ÿ‡ง๐Ÿ‡ธ ๐Ÿ‡ง๐Ÿ‡ญ ๐Ÿ‡ง๐Ÿ‡ฉ ๐Ÿ‡ง๐Ÿ‡ง ๐Ÿ‡ง๐Ÿ‡พ ๐Ÿ‡ง๐Ÿ‡ช ๐Ÿ‡ง๐Ÿ‡ฟ ๐Ÿ‡ง๐Ÿ‡ฏ ๐Ÿ‡ง๐Ÿ‡ฒ ๐Ÿ‡ง๐Ÿ‡น ๐Ÿ‡ง๐Ÿ‡ด ๐Ÿ‡ง๐Ÿ‡ฆ ๐Ÿ‡ง๐Ÿ‡ผ ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡ฎ๐Ÿ‡ด ๐Ÿ‡ป๐Ÿ‡ฌ ๐Ÿ‡ง๐Ÿ‡ณ ๐Ÿ‡ง๐Ÿ‡ฌ ๐Ÿ‡ง๐Ÿ‡ซ ๐Ÿ‡ง๐Ÿ‡ฎ ๐Ÿ‡ฐ๐Ÿ‡ญ ๐Ÿ‡จ๐Ÿ‡ฒ ๐Ÿ‡จ๐Ÿ‡ฆ ๐Ÿ‡ฎ๐Ÿ‡จ ๐Ÿ‡จ๐Ÿ‡ป ๐Ÿ‡ง๐Ÿ‡ถ ๐Ÿ‡ฐ๐Ÿ‡พ ๐Ÿ‡จ๐Ÿ‡ซ ๐Ÿ‡น๐Ÿ‡ฉ ๐Ÿ‡จ๐Ÿ‡ฑ ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡จ๐Ÿ‡ฝ ๐Ÿ‡จ๐Ÿ‡จ ๐Ÿ‡จ๐Ÿ‡ด ๐Ÿ‡ฐ๐Ÿ‡ฒ ๐Ÿ‡จ๐Ÿ‡ฌ ๐Ÿ‡จ๐Ÿ‡ฉ ๐Ÿ‡จ๐Ÿ‡ฐ ๐Ÿ‡จ๐Ÿ‡ท ๐Ÿ‡จ๐Ÿ‡ฎ ๐Ÿ‡ญ๐Ÿ‡ท ๐Ÿ‡จ๐Ÿ‡บ ๐Ÿ‡จ๐Ÿ‡ผ ๐Ÿ‡จ๐Ÿ‡พ ๐Ÿ‡จ๐Ÿ‡ฟ ๐Ÿ‡ฉ๐Ÿ‡ฐ ๐Ÿ‡ฉ๐Ÿ‡ฏ ๐Ÿ‡ฉ๐Ÿ‡ฒ ๐Ÿ‡ฉ๐Ÿ‡ด ๐Ÿ‡ช๐Ÿ‡จ ๐Ÿ‡ช๐Ÿ‡ฌ ๐Ÿ‡ธ๐Ÿ‡ป ๐Ÿ‡ฌ๐Ÿ‡ถ ๐Ÿ‡ช๐Ÿ‡ท ๐Ÿ‡ช๐Ÿ‡ช ๐Ÿ‡ช๐Ÿ‡น ๐Ÿ‡ช๐Ÿ‡บ ๐Ÿ‡ซ๐Ÿ‡ฐ ๐Ÿ‡ซ๐Ÿ‡ด ๐Ÿ‡ซ๐Ÿ‡ฏ ๐Ÿ‡ซ๐Ÿ‡ฎ ๐Ÿ‡ซ๐Ÿ‡ท ๐Ÿ‡ฌ๐Ÿ‡ซ ๐Ÿ‡ต๐Ÿ‡ซ ๐Ÿ‡น๐Ÿ‡ซ ๐Ÿ‡ฌ๐Ÿ‡ฆ ๐Ÿ‡ฌ๐Ÿ‡ฒ ๐Ÿ‡ฌ๐Ÿ‡ช ๐Ÿ‡ฉ๐Ÿ‡ช ๐Ÿ‡ฌ๐Ÿ‡ญ ๐Ÿ‡ฌ๐Ÿ‡ฎ ๐Ÿ‡ฌ๐Ÿ‡ท ๐Ÿ‡ฌ๐Ÿ‡ฑ ๐Ÿ‡ฌ๐Ÿ‡ฉ ๐Ÿ‡ฌ๐Ÿ‡ต ๐Ÿ‡ฌ๐Ÿ‡บ ๐Ÿ‡ฌ๐Ÿ‡น ๐Ÿ‡ฌ๐Ÿ‡ฌ ๐Ÿ‡ฌ๐Ÿ‡ณ ๐Ÿ‡ฌ๐Ÿ‡ผ ๐Ÿ‡ฌ๐Ÿ‡พ ๐Ÿ‡ญ๐Ÿ‡น ๐Ÿ‡ญ๐Ÿ‡ณ ๐Ÿ‡ญ๐Ÿ‡ฐ ๐Ÿ‡ญ๐Ÿ‡บ ๐Ÿ‡ฎ๐Ÿ‡ธ ๐Ÿ‡ฎ๐Ÿ‡ณ ๐Ÿ‡ฎ๐Ÿ‡ฉ ๐Ÿ‡ฎ๐Ÿ‡ท ๐Ÿ‡ฎ๐Ÿ‡ถ ๐Ÿ‡ฎ๐Ÿ‡ช ๐Ÿ‡ฎ๐Ÿ‡ฒ ๐Ÿ‡ฎ๐Ÿ‡ฑ ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡ฏ๐Ÿ‡ฒ ๐Ÿ‡ฏ๐Ÿ‡ต ๐ŸŽŒ ๐Ÿ‡ฏ๐Ÿ‡ช ๐Ÿ‡ฏ๐Ÿ‡ด ๐Ÿ‡ฐ๐Ÿ‡ฟ ๐Ÿ‡ฐ๐Ÿ‡ช ๐Ÿ‡ฐ๐Ÿ‡ฎ ๐Ÿ‡ฝ๐Ÿ‡ฐ ๐Ÿ‡ฐ๐Ÿ‡ผ ๐Ÿ‡ฐ๐Ÿ‡ฌ ๐Ÿ‡ฑ๐Ÿ‡ฆ ๐Ÿ‡ฑ๐Ÿ‡ป ๐Ÿ‡ฑ๐Ÿ‡ง ๐Ÿ‡ฑ๐Ÿ‡ธ ๐Ÿ‡ฑ๐Ÿ‡ท ๐Ÿ‡ฑ๐Ÿ‡พ ๐Ÿ‡ฑ๐Ÿ‡ฎ ๐Ÿ‡ฑ๐Ÿ‡น ๐Ÿ‡ฑ๐Ÿ‡บ ๐Ÿ‡ฒ๐Ÿ‡ด ๐Ÿ‡ฒ๐Ÿ‡ฐ ๐Ÿ‡ฒ๐Ÿ‡ฌ ๐Ÿ‡ฒ๐Ÿ‡ผ ๐Ÿ‡ฒ๐Ÿ‡พ ๐Ÿ‡ฒ๐Ÿ‡ป ๐Ÿ‡ฒ๐Ÿ‡ฑ ๐Ÿ‡ฒ๐Ÿ‡น ๐Ÿ‡ฒ๐Ÿ‡ญ ๐Ÿ‡ฒ๐Ÿ‡ถ ๐Ÿ‡ฒ๐Ÿ‡ท ๐Ÿ‡ฒ๐Ÿ‡บ ๐Ÿ‡พ๐Ÿ‡น ๐Ÿ‡ฒ๐Ÿ‡ฝ ๐Ÿ‡ซ๐Ÿ‡ฒ ๐Ÿ‡ฒ๐Ÿ‡ฉ ๐Ÿ‡ฒ๐Ÿ‡จ ๐Ÿ‡ฒ๐Ÿ‡ณ ๐Ÿ‡ฒ๐Ÿ‡ช ๐Ÿ‡ฒ๐Ÿ‡ธ ๐Ÿ‡ฒ๐Ÿ‡ฆ ๐Ÿ‡ฒ๐Ÿ‡ฟ ๐Ÿ‡ฒ๐Ÿ‡ฒ ๐Ÿ‡ณ๐Ÿ‡ฆ ๐Ÿ‡ณ๐Ÿ‡ท ๐Ÿ‡ณ๐Ÿ‡ต ๐Ÿ‡ณ๐Ÿ‡ฑ ๐Ÿ‡ณ๐Ÿ‡จ ๐Ÿ‡ณ๐Ÿ‡ฟ ๐Ÿ‡ณ๐Ÿ‡ฎ ๐Ÿ‡ณ๐Ÿ‡ช ๐Ÿ‡ณ๐Ÿ‡ฌ ๐Ÿ‡ณ๐Ÿ‡บ ๐Ÿ‡ณ๐Ÿ‡ซ ๐Ÿ‡ฐ๐Ÿ‡ต ๐Ÿ‡ฒ๐Ÿ‡ต ๐Ÿ‡ณ๐Ÿ‡ด ๐Ÿ‡ด๐Ÿ‡ฒ ๐Ÿ‡ต๐Ÿ‡ฐ ๐Ÿ‡ต๐Ÿ‡ผ ๐Ÿ‡ต๐Ÿ‡ธ ๐Ÿ‡ต๐Ÿ‡ฆ ๐Ÿ‡ต๐Ÿ‡ฌ ๐Ÿ‡ต๐Ÿ‡พ ๐Ÿ‡ต๐Ÿ‡ช ๐Ÿ‡ต๐Ÿ‡ญ ๐Ÿ‡ต๐Ÿ‡ณ ๐Ÿ‡ต๐Ÿ‡ฑ ๐Ÿ‡ต๐Ÿ‡น ๐Ÿ‡ต๐Ÿ‡ท ๐Ÿ‡ถ๐Ÿ‡ฆ ๐Ÿ‡ท๐Ÿ‡ช ๐Ÿ‡ท๐Ÿ‡ด ๐Ÿ‡ท๐Ÿ‡บ ๐Ÿ‡ท๐Ÿ‡ผ ๐Ÿ‡ผ๐Ÿ‡ธ ๐Ÿ‡ธ๐Ÿ‡ฒ ๐Ÿ‡ธ๐Ÿ‡ฆ ๐Ÿ‡ธ๐Ÿ‡ณ ๐Ÿ‡ท๐Ÿ‡ธ ๐Ÿ‡ธ๐Ÿ‡จ ๐Ÿ‡ธ๐Ÿ‡ฑ ๐Ÿ‡ธ๐Ÿ‡ฌ ๐Ÿ‡ธ๐Ÿ‡ฝ ๐Ÿ‡ธ๐Ÿ‡ฐ ๐Ÿ‡ธ๐Ÿ‡ฎ ๐Ÿ‡ฌ๐Ÿ‡ธ ๐Ÿ‡ธ๐Ÿ‡ง ๐Ÿ‡ธ๐Ÿ‡ด ๐Ÿ‡ฟ๐Ÿ‡ฆ ๐Ÿ‡ฐ๐Ÿ‡ท ๐Ÿ‡ธ๐Ÿ‡ธ ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ‡ฑ๐Ÿ‡ฐ ๐Ÿ‡ง๐Ÿ‡ฑ ๐Ÿ‡ธ๐Ÿ‡ญ ๐Ÿ‡ฐ๐Ÿ‡ณ ๐Ÿ‡ฑ๐Ÿ‡จ ๐Ÿ‡ต๐Ÿ‡ฒ ๐Ÿ‡ป๐Ÿ‡จ ๐Ÿ‡ธ๐Ÿ‡ฉ ๐Ÿ‡ธ๐Ÿ‡ท ๐Ÿ‡ธ๐Ÿ‡ฟ ๐Ÿ‡ธ๐Ÿ‡ช ๐Ÿ‡จ๐Ÿ‡ญ ๐Ÿ‡ธ๐Ÿ‡พ ๐Ÿ‡น๐Ÿ‡ผ ๐Ÿ‡น๐Ÿ‡ฏ ๐Ÿ‡น๐Ÿ‡ฟ ๐Ÿ‡น๐Ÿ‡ญ ๐Ÿ‡น๐Ÿ‡ฑ ๐Ÿ‡น๐Ÿ‡ฌ ๐Ÿ‡น๐Ÿ‡ฐ ๐Ÿ‡น๐Ÿ‡ด ๐Ÿ‡น๐Ÿ‡น ๐Ÿ‡น๐Ÿ‡ณ ๐Ÿ‡น๐Ÿ‡ท ๐Ÿ‡น๐Ÿ‡ฒ ๐Ÿ‡น๐Ÿ‡จ ๐Ÿ‡น๐Ÿ‡ป ๐Ÿ‡ป๐Ÿ‡ฎ ๐Ÿ‡บ๐Ÿ‡ฌ ๐Ÿ‡บ๐Ÿ‡ฆ ๐Ÿ‡ฆ๐Ÿ‡ช ๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ‡บ๐Ÿ‡ณ ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡บ๐Ÿ‡พ ๐Ÿ‡บ๐Ÿ‡ฟ ๐Ÿ‡ป๐Ÿ‡บ ๐Ÿ‡ป๐Ÿ‡ฆ ๐Ÿ‡ป๐Ÿ‡ช ๐Ÿ‡ป๐Ÿ‡ณ ๐Ÿ‡ผ๐Ÿ‡ซ ๐Ÿ‡ช๐Ÿ‡ญ ๐Ÿ‡พ๐Ÿ‡ช ๐Ÿ‡ฟ๐Ÿ‡ฒ ๐Ÿ‡ฟ๐Ÿ‡ผ'.split(' '),
927
+ 'New Emojis 2020': '๐Ÿฅฒ ๐Ÿฅธ ๐ŸคŒ ๐ŸคŒ๐Ÿป ๐ŸคŒ๐Ÿผ ๐ŸคŒ๐Ÿฝ ๐ŸคŒ๐Ÿพ ๐ŸคŒ๐Ÿฟ ๐Ÿซ€ ๐Ÿซ ๐Ÿฅท ๐Ÿคตโ€โ™€๏ธ ๐Ÿคต๐Ÿปโ€โ™€๏ธ ๐Ÿคต๐Ÿผโ€โ™€๏ธ ๐Ÿคต๐Ÿฝโ€โ™€๏ธ ๐Ÿคต๐Ÿพโ€โ™€๏ธ ๐Ÿคต๐Ÿฟโ€โ™€๏ธ ๐Ÿคตโ€โ™‚๏ธ ๐Ÿคต๐Ÿปโ€โ™‚๏ธ ๐Ÿคต๐Ÿผโ€โ™‚๏ธ ๐Ÿคต๐Ÿฝโ€โ™‚๏ธ ๐Ÿคต๐Ÿพโ€โ™‚๏ธ ๐Ÿคต๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ฐโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿปโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿผโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿฝโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿพโ€โ™€๏ธ ๐Ÿ‘ฐ๐Ÿฟโ€โ™€๏ธ ๐Ÿ‘ฐโ€โ™‚๏ธ ๐Ÿ‘ฐ๐Ÿปโ€โ™‚๏ธ ๐Ÿ‘ฐ๐Ÿผโ€โ™‚๏ธ ๐Ÿ‘ฐ๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ฐ๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ฐ๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ฉโ€๐Ÿผ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿผ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿผ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿผ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿผ ๐Ÿง‘โ€๐Ÿผ ๐Ÿง‘๐Ÿปโ€๐Ÿผ ๐Ÿง‘๐Ÿผโ€๐Ÿผ ๐Ÿง‘๐Ÿฝโ€๐Ÿผ ๐Ÿง‘๐Ÿพโ€๐Ÿผ ๐Ÿง‘๐Ÿฟโ€๐Ÿผ ๐Ÿ‘จโ€๐Ÿผ ๐Ÿ‘จ๐Ÿปโ€๐Ÿผ ๐Ÿ‘จ๐Ÿผโ€๐Ÿผ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿผ ๐Ÿ‘จ๐Ÿพโ€๐Ÿผ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿผ ๐Ÿง‘โ€๐ŸŽ„ ๐Ÿง‘๐Ÿปโ€๐ŸŽ„ ๐Ÿง‘๐Ÿผโ€๐ŸŽ„ ๐Ÿง‘๐Ÿฝโ€๐ŸŽ„ ๐Ÿง‘๐Ÿพโ€๐ŸŽ„ ๐Ÿง‘๐Ÿฟโ€๐ŸŽ„ ๐Ÿซ‚ ๐Ÿˆโ€โฌ› ๐Ÿฆฌ ๐Ÿฆฃ ๐Ÿฆซ ๐Ÿปโ€โ„๏ธ ๐Ÿฆค ๐Ÿชถ ๐Ÿฆญ ๐Ÿชฒ ๐Ÿชณ ๐Ÿชฐ ๐Ÿชฑ ๐Ÿชด ๐Ÿซ ๐Ÿซ’ ๐Ÿซ‘ ๐Ÿซ“ ๐Ÿซ” ๐Ÿซ• ๐Ÿซ– ๐Ÿง‹ ๐Ÿชจ ๐Ÿชต ๐Ÿ›– ๐Ÿ›ป ๐Ÿ›ผ ๐Ÿช„ ๐Ÿช… ๐Ÿช† ๐Ÿชก ๐Ÿชข ๐Ÿฉด ๐Ÿช– ๐Ÿช— ๐Ÿช˜ ๐Ÿช™ ๐Ÿชƒ ๐Ÿชš ๐Ÿช› ๐Ÿช ๐Ÿชœ ๐Ÿ›— ๐Ÿชž ๐ŸชŸ ๐Ÿช  ๐Ÿชค ๐Ÿชฃ ๐Ÿชฅ ๐Ÿชฆ ๐Ÿชง ๐Ÿณ๏ธโ€โšง๏ธ'.split(' '),
928
+ 'New Emoji 2021': '๐Ÿ˜ฎโ€๐Ÿ’จ ๐Ÿ˜ตโ€๐Ÿ’ซ ๐Ÿ˜ถโ€๐ŸŒซ๏ธ โค๏ธโ€๐Ÿ”ฅ โค๏ธโ€๐Ÿฉน ๐Ÿง”โ€โ™€๏ธ ๐Ÿง”๐Ÿปโ€โ™€๏ธ ๐Ÿง”๐Ÿผโ€โ™€๏ธ ๐Ÿง”๐Ÿฝโ€โ™€๏ธ ๐Ÿง”๐Ÿพโ€โ™€๏ธ ๐Ÿง”๐Ÿฟโ€โ™€๏ธ ๐Ÿง”โ€โ™‚๏ธ ๐Ÿง”๐Ÿปโ€โ™‚๏ธ ๐Ÿง”๐Ÿผโ€โ™‚๏ธ ๐Ÿง”๐Ÿฝโ€โ™‚๏ธ ๐Ÿง”๐Ÿพโ€โ™‚๏ธ ๐Ÿง”๐Ÿฟโ€โ™‚๏ธ ๐Ÿ’‘๐Ÿป ๐Ÿ’‘๐Ÿผ ๐Ÿ’‘๐Ÿฝ ๐Ÿ’‘๐Ÿพ ๐Ÿ’‘๐Ÿฟ ๐Ÿ’๐Ÿป ๐Ÿ’๐Ÿผ ๐Ÿ’๐Ÿฝ ๐Ÿ’๐Ÿพ ๐Ÿ’๐Ÿฟ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿพ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿพ ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿพ ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿง‘๐Ÿพ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘จ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿป ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿฟ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿป ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿผ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฝ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿพ ๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿฟ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ ๐Ÿง‘๐Ÿปโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ ๐Ÿง‘๐Ÿผโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ ๐Ÿง‘๐Ÿฝโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿพโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฟ ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿป ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿผ ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿฝ ๐Ÿง‘๐Ÿฟโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿง‘๐Ÿพ'.split(' '),
929
+ 'New Emojis (Discorered randomly)': '๐Ÿ–Œ๏ธ'.split(' '),
930
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
931
+ 'Emojis used in WebGPT': ['โ–ถ', 'โค'],
932
+ };
933
+ /**
934
+ *
935
+ * All possible emoji chars like "๐Ÿ†", "๐Ÿก", "๐Ÿค"...
936
+ */
937
+ var EMOJIS = new Set(Object.values(EMOJIS_IN_CATEGORIES).flat());
938
+ /**
939
+ * TODO: Mirror from Collboard or some common library
940
+ */
941
+
942
+ /**
943
+ * Removes emojis from a string and fix whitespaces
944
+ *
945
+ * @param text with emojis
946
+ * @returns text without emojis
947
+ */
948
+ function removeEmojis(text) {
949
+ var e_1, _a;
950
+ text = ' ' + text + ' ';
951
+ try {
952
+ for (var _b = __values(Array.from(EMOJIS)), _c = _b.next(); !_c.done; _c = _b.next()) {
953
+ var emoji = _c.value;
954
+ text = text.split(" ".concat(emoji, " ")).join(' ');
955
+ text = text.split(" ".concat(emoji)).join(' ');
956
+ text = text.split("".concat(emoji, " ")).join(' ');
957
+ text = text.split(emoji).join('');
958
+ }
959
+ }
960
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
961
+ finally {
962
+ try {
963
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
964
+ }
965
+ finally { if (e_1) throw e_1.error; }
966
+ }
967
+ text = spaceTrim__default["default"](text);
968
+ return text;
969
+ }
970
+
971
+ /**
972
+ * Replaces parameters in template with values from parameters object
973
+ *
974
+ * @param template the template with parameters in {curly} braces
975
+ * @param parameters the object with parameters
976
+ * @returns the template with replaced parameters
977
+ *
978
+ * @private within the library
979
+ */
980
+ function replaceParameters(template, parameters) {
981
+ var e_1, _a;
982
+ var result = '';
983
+ var openedParamName = null;
984
+ // Note: We dont want parameters with index signature here because it wont be compatible with PromptTemplateParameters which has its own reasons to not have index signature
985
+ var parametersChecked = parameters; /* <- TODO: Make here some util validateTemplateParameters */
986
+ try {
987
+ for (var _b = __values(template.split('')), _c = _b.next(); !_c.done; _c = _b.next()) {
988
+ var char = _c.value;
989
+ if (char === '{') {
990
+ if (openedParamName !== null) {
991
+ throw new Error("Parameter is already opened");
992
+ }
993
+ openedParamName = '';
994
+ }
995
+ else if (char === '}') {
996
+ if (openedParamName === null) {
997
+ throw new Error("Parameter is not opened");
998
+ }
999
+ if (parametersChecked[openedParamName] === undefined) {
1000
+ throw new Error("Parameter {".concat(openedParamName, "} is not defined"));
1001
+ }
1002
+ result += parametersChecked[openedParamName];
1003
+ openedParamName = null;
1004
+ }
1005
+ else if (openedParamName === null) {
1006
+ result += char;
1007
+ }
1008
+ else if (openedParamName !== null) {
1009
+ openedParamName += char;
1010
+ }
1011
+ }
1012
+ }
1013
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
1014
+ finally {
1015
+ try {
1016
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1017
+ }
1018
+ finally { if (e_1) throw e_1.error; }
1019
+ }
1020
+ if (openedParamName !== null) {
1021
+ throw new Error("Parameter is not closed");
1022
+ }
1023
+ return result;
1024
+ }
1025
+ /**
1026
+ * TODO: [๐Ÿง ] More advanced templating
1027
+ * TODO: [๐Ÿง ] Maybe use some template engine / library not own simple implementation
1028
+ */
1029
+
1030
+ /**
1031
+ * Creates executor function from prompt template pipeline and execution tools.
1032
+ *
1033
+ * Note: Consider using getExecutor method of the library instead of using this function
1034
+ */
1035
+ function createPtpExecutor(options) {
1036
+ var _this = this;
1037
+ var ptp = options.ptp, tools = options.tools;
1038
+ var ptpExecutor = function (inputParameters, onProgress) { return __awaiter(_this, void 0, void 0, function () {
1039
+ var parametersToPass, currentTemplate, _loop_1;
1040
+ return __generator(this, function (_a) {
1041
+ switch (_a.label) {
1042
+ case 0:
1043
+ parametersToPass = inputParameters;
1044
+ currentTemplate = ptp.entryPromptTemplate;
1045
+ _loop_1 = function () {
1046
+ var resultingParameter, isPrograssLoggedForCurrentTemplate, prompt_1, chatThread, completionResult, promptResult, scriptExecutionErrors, isScriptExecutionSuccessful, _b, _c, _d, _e, scriptTools, error_1, e_1_1;
1047
+ var e_1, _f, _g;
1048
+ return __generator(this, function (_h) {
1049
+ switch (_h.label) {
1050
+ case 0:
1051
+ resultingParameter = ptp.getResultingParameter(currentTemplate.name);
1052
+ isPrograssLoggedForCurrentTemplate = currentTemplate.executionType === 'PROMPT_TEMPLATE';
1053
+ if (!(onProgress && isPrograssLoggedForCurrentTemplate)) return [3 /*break*/, 2];
1054
+ return [4 /*yield*/, onProgress({
1055
+ name: "ptp-executor-frame-".concat(currentTemplate.name),
1056
+ title: "\uD83D\uDD8B ".concat(removeEmojis(removeMarkdownFormatting(currentTemplate.title))),
1057
+ isDone: false,
1058
+ })];
1059
+ case 1:
1060
+ _h.sent();
1061
+ _h.label = 2;
1062
+ case 2:
1063
+ prompt_1 = void 0;
1064
+ chatThread = void 0;
1065
+ completionResult = void 0;
1066
+ promptResult = null;
1067
+ isScriptExecutionSuccessful = void 0;
1068
+ _b = currentTemplate.executionType;
1069
+ switch (_b) {
1070
+ case 'SIMPLE_TEMPLATE': return [3 /*break*/, 3];
1071
+ case 'PROMPT_TEMPLATE': return [3 /*break*/, 4];
1072
+ case 'SCRIPT': return [3 /*break*/, 11];
1073
+ case 'PROMPT_DIALOG': return [3 /*break*/, 22];
1074
+ }
1075
+ return [3 /*break*/, 24];
1076
+ case 3:
1077
+ promptResult = replaceParameters(currentTemplate.content, parametersToPass);
1078
+ return [3 /*break*/, 25];
1079
+ case 4:
1080
+ prompt_1 = {
1081
+ ptpUrl: "".concat(ptp.ptpUrl
1082
+ ? ptp.ptpUrl.href
1083
+ : 'anonymous' /* <- [๐Ÿง ] How to deal with anonymous PTPs, do here some auto-url like SHA-256 based ad-hoc identifier? */, "#").concat(currentTemplate.name),
1084
+ parameters: parametersToPass,
1085
+ content: replaceParameters(currentTemplate.content, parametersToPass),
1086
+ modelRequirements: currentTemplate.modelRequirements,
1087
+ };
1088
+ _c = currentTemplate.modelRequirements.variant;
1089
+ switch (_c) {
1090
+ case 'CHAT': return [3 /*break*/, 5];
1091
+ case 'COMPLETION': return [3 /*break*/, 7];
1092
+ }
1093
+ return [3 /*break*/, 9];
1094
+ case 5: return [4 /*yield*/, tools.natural.gptChat(prompt_1)];
1095
+ case 6:
1096
+ chatThread = _h.sent();
1097
+ // TODO: Use all information from chatThread like "model"
1098
+ // TODO: [๐Ÿฌ] Destroy chatThread
1099
+ promptResult = chatThread.content;
1100
+ return [3 /*break*/, 10];
1101
+ case 7: return [4 /*yield*/, tools.natural.gptComplete(prompt_1)];
1102
+ case 8:
1103
+ completionResult = _h.sent();
1104
+ // TODO: Use all information from chatThread like "model"
1105
+ promptResult = completionResult.content;
1106
+ return [3 /*break*/, 10];
1107
+ case 9: throw new Error("Unknown model variant \"".concat(currentTemplate.modelRequirements.variant, "\""));
1108
+ case 10: return [3 /*break*/, 25];
1109
+ case 11:
1110
+ if (tools.script.length === 0) {
1111
+ throw new Error('No script execution tools are available');
1112
+ }
1113
+ if (!currentTemplate.contentLanguage) {
1114
+ throw new Error("Script language is not defined for prompt template \"".concat(currentTemplate.name, "\""));
1115
+ }
1116
+ scriptExecutionErrors = [];
1117
+ isScriptExecutionSuccessful = false;
1118
+ _h.label = 12;
1119
+ case 12:
1120
+ _h.trys.push([12, 19, 20, 21]);
1121
+ _d = (e_1 = void 0, __values(tools.script)), _e = _d.next();
1122
+ _h.label = 13;
1123
+ case 13:
1124
+ if (!!_e.done) return [3 /*break*/, 18];
1125
+ scriptTools = _e.value;
1126
+ _h.label = 14;
1127
+ case 14:
1128
+ _h.trys.push([14, 16, , 17]);
1129
+ return [4 /*yield*/, scriptTools.execute({
1130
+ scriptLanguage: currentTemplate.contentLanguage,
1131
+ script: currentTemplate.content,
1132
+ parameters: parametersToPass,
1133
+ })];
1134
+ case 15:
1135
+ promptResult = _h.sent();
1136
+ isScriptExecutionSuccessful = true;
1137
+ return [3 /*break*/, 18];
1138
+ case 16:
1139
+ error_1 = _h.sent();
1140
+ if (!(error_1 instanceof Error)) {
1141
+ throw error_1;
1142
+ }
1143
+ scriptExecutionErrors.push(error_1);
1144
+ return [3 /*break*/, 17];
1145
+ case 17:
1146
+ _e = _d.next();
1147
+ return [3 /*break*/, 13];
1148
+ case 18: return [3 /*break*/, 21];
1149
+ case 19:
1150
+ e_1_1 = _h.sent();
1151
+ e_1 = { error: e_1_1 };
1152
+ return [3 /*break*/, 21];
1153
+ case 20:
1154
+ try {
1155
+ if (_e && !_e.done && (_f = _d.return)) _f.call(_d);
1156
+ }
1157
+ finally { if (e_1) throw e_1.error; }
1158
+ return [7 /*endfinally*/];
1159
+ case 21:
1160
+ if (isScriptExecutionSuccessful) {
1161
+ return [3 /*break*/, 25];
1162
+ }
1163
+ if (scriptExecutionErrors.length === 1) {
1164
+ throw scriptExecutionErrors[0];
1165
+ }
1166
+ else {
1167
+ throw new Error(spaceTrim__default["default"](function (block) { return "\n Script execution failed ".concat(scriptExecutionErrors.length, " times\n\n ").concat(block(scriptExecutionErrors.map(function (error) { return '- ' + error.message; }).join('\n\n')), "\n "); }));
1168
+ }
1169
+ case 22: return [4 /*yield*/, tools.userInterface.promptDialog({
1170
+ prompt: replaceParameters(currentTemplate.description || '', parametersToPass),
1171
+ defaultValue: replaceParameters(currentTemplate.content, parametersToPass),
1172
+ // TODO: [๐Ÿง ] !! Figure out how to define placeholder in .ptp.md file
1173
+ placeholder: undefined,
1174
+ })];
1175
+ case 23:
1176
+ promptResult = _h.sent();
1177
+ return [3 /*break*/, 25];
1178
+ case 24:
1179
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1180
+ throw new Error("Unknown execution type \"".concat(currentTemplate.executionType, "\""));
1181
+ case 25:
1182
+ if (promptResult === null) {
1183
+ // <- TODO: [๐Ÿฅจ] Make some NeverShouldHappenError
1184
+ throw new Error('Something went wrong and prompt result is null');
1185
+ }
1186
+ if (onProgress && isPrograssLoggedForCurrentTemplate) {
1187
+ onProgress({
1188
+ name: "ptp-executor-frame-".concat(currentTemplate.name),
1189
+ isDone: true,
1190
+ });
1191
+ }
1192
+ parametersToPass = __assign(__assign({}, parametersToPass), (_g = {}, _g[resultingParameter.name] = promptResult /* <- Note: Not need to detect parameter collision here because PromptTemplatePipeline checks logic consistency during construction */, _g));
1193
+ currentTemplate = ptp.getFollowingPromptTemplate(currentTemplate.name);
1194
+ return [2 /*return*/];
1195
+ }
1196
+ });
1197
+ };
1198
+ _a.label = 1;
1199
+ case 1:
1200
+ if (!(currentTemplate !== null)) return [3 /*break*/, 3];
1201
+ return [5 /*yield**/, _loop_1()];
1202
+ case 2:
1203
+ _a.sent();
1204
+ return [3 /*break*/, 1];
1205
+ case 3: return [2 /*return*/, parametersToPass];
1206
+ }
1207
+ });
1208
+ }); };
1209
+ return ptpExecutor;
1210
+ }
1211
+ /**
1212
+ * TODO: [๐Ÿ‘ง] Strongly type the executors to avoid need of remove nullables whtn noUncheckedIndexedAccess in tsconfig.json
1213
+ * Note: CreatePtpExecutorOptions are just connected to PtpExecutor so do not extract to types folder
1214
+ */
1215
+
1216
+ /**
1217
+ * Library of prompt template pipelines that groups together prompt template pipelines for an application. This is a very thin wrapper around the Array / Set of prompt template pipelines.
1218
+ *
1219
+ * Prompt Template Pipeline library is a useful helper in execution, it can be shared between execution and consumer parts of the app and make common knowledge about prompt template pipelines.
1220
+ *
1221
+ * It allows to create executor functions from prompt template pipelines in the library.
1222
+ *
1223
+ * @see https://github.com/webgptorg/promptbook#prompt-template-pipeline-library
1224
+ */
1225
+ var PromptTemplatePipelineLibrary = /** @class */ (function () {
1226
+ function PromptTemplatePipelineLibrary(promptTemplatePipelines) {
1227
+ this.promptTemplatePipelines = promptTemplatePipelines;
1228
+ }
1229
+ /**
1230
+ * Constructs PromptTemplatePipeline from any sources
1231
+ *
1232
+ * Note: During the construction syntax and logic of all sources are validated
1233
+ * Note: You can combine .ptp.md and .ptp.json files BUT it is not recommended
1234
+ *
1235
+ * @param ptpSources contents of .ptp.md or .ptp.json files
1236
+ * @returns PromptTemplatePipelineLibrary
1237
+ */
1238
+ PromptTemplatePipelineLibrary.fromSources = function (ptpSources) {
1239
+ var e_1, _a;
1240
+ var promptTemplatePipelines = {};
1241
+ try {
1242
+ for (var _b = __values(Object.entries(ptpSources)), _c = _b.next(); !_c.done; _c = _b.next()) {
1243
+ var _d = __read(_c.value, 2), name_1 = _d[0], source = _d[1];
1244
+ promptTemplatePipelines[name_1] = PromptTemplatePipeline.fromSource(source);
1245
+ }
1246
+ }
1247
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
1248
+ finally {
1249
+ try {
1250
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1251
+ }
1252
+ finally { if (e_1) throw e_1.error; }
1253
+ }
1254
+ return new PromptTemplatePipelineLibrary(promptTemplatePipelines);
1255
+ };
1256
+ /**
1257
+ * Gets prompt template pipeline by name
1258
+ */
1259
+ PromptTemplatePipelineLibrary.prototype.getPtp = function (name) {
1260
+ var promptTemplatePipeline = this.promptTemplatePipelines[name];
1261
+ if (!promptTemplatePipeline) {
1262
+ throw new Error("Prompt template pipeline with name \"".concat(name, "\" not found"));
1263
+ }
1264
+ return promptTemplatePipeline;
1265
+ };
1266
+ /**
1267
+ * Checks whether prompt is in the library
1268
+ */
1269
+ PromptTemplatePipelineLibrary.prototype.isPromptInLibrary = function (prompt) {
1270
+ return true;
1271
+ };
1272
+ /**
1273
+ * Gets executor function for given prompt template pipeline
1274
+ */
1275
+ PromptTemplatePipelineLibrary.prototype.createExecutor = function (name, tools) {
1276
+ var ptp = this.getPtp(name);
1277
+ return createPtpExecutor({ ptp: ptp, tools: tools });
1278
+ };
1279
+ return PromptTemplatePipelineLibrary;
1280
+ }());
1281
+ /**
1282
+ * TODO: !! [๐Ÿ‘][๐Ÿง ] Split of PromptTemplatePipeline,PromptTemplatePipelineLibrary between interface and class
1283
+ * TODO: !! [๐Ÿ‘] Make promptTemplatePipelines private WHEN split between interface and class
1284
+ * TODO: [๐Ÿง ] Maybe isPromptInLibrary should be separate utility function
1285
+ * TODO: [๐Ÿง ] Maybe createExecutor should be separate utility function
1286
+ * TODO: Static method fromDirectory
1287
+ * TODO: [๐Ÿคœ] Add generic type for entry and result parameters
1288
+ * TODO: [๐Ÿง ] Is it better to ptpLibrary.executePtp('writeXyz',{...}) OR ptpLibrary.createExecutor('writeXyz')({...}) OR createExecutor(ptpLibrary.getPtp('writeXyz'))
1289
+ * TODO: [๐Ÿง ] Formarly (before commit 62229afce7668a5b85077cc18becf798b583bf8d) there were two classes PromptTemplatePipelineLibrary+PtpLibraryExecutor (maybe it was better?)
1290
+ * TODO: [๐Ÿง ] Is it better to pass tools into getExecutor or into constructor
1291
+ * Maybe it is not a good idea to cache executors when they are can be created with different tools
1292
+ * TODO: [๐Ÿ‘ง] Strongly type the executors to avoid need of remove nullables whtn noUncheckedIndexedAccess in tsconfig.json
1293
+ */
1294
+
1295
+ /**
1296
+ * Mocked execution Tools for just echoing the requests for testing purposes.
1297
+ */
1298
+ var MockedEchoNaturalExecutionTools = /** @class */ (function () {
1299
+ function MockedEchoNaturalExecutionTools(options) {
1300
+ this.options = options;
1301
+ }
1302
+ /**
1303
+ * Mocks chat model
1304
+ */
1305
+ MockedEchoNaturalExecutionTools.prototype.gptChat = function (prompt) {
1306
+ return __awaiter(this, void 0, void 0, function () {
1307
+ return __generator(this, function (_a) {
1308
+ if (this.options.isVerbose) {
1309
+ console.info('๐Ÿ’ฌ Mocked gptChat call');
1310
+ }
1311
+ return [2 /*return*/, {
1312
+ content: spaceTrim__default["default"](function (block) { return "\n You said:\n ".concat(block(prompt.content), "\n "); }),
1313
+ model: 'mocked-echo',
1314
+ rawResponse: {
1315
+ note: 'This is mocked echo',
1316
+ },
1317
+ // <- [๐Ÿคนโ€โ™‚๏ธ]
1318
+ }];
1319
+ });
1320
+ });
1321
+ };
1322
+ /**
1323
+ * Mocks completion model
1324
+ */
1325
+ MockedEchoNaturalExecutionTools.prototype.gptComplete = function (prompt) {
1326
+ return __awaiter(this, void 0, void 0, function () {
1327
+ return __generator(this, function (_a) {
1328
+ if (this.options.isVerbose) {
1329
+ console.info('๐Ÿ–‹ Mocked gptComplete call');
1330
+ }
1331
+ return [2 /*return*/, {
1332
+ content: spaceTrim__default["default"](function (block) { return "\n ".concat(block(prompt.content), "\n And so on...\n "); }),
1333
+ model: 'mocked-echo',
1334
+ rawResponse: {
1335
+ note: 'This is mocked echo',
1336
+ },
1337
+ // <- [๐Ÿคนโ€โ™‚๏ธ]
1338
+ }];
1339
+ });
1340
+ });
1341
+ };
1342
+ return MockedEchoNaturalExecutionTools;
1343
+ }());
1344
+ /**
1345
+ * TODO: Allow in spaceTrim: nesting with > ${block(prompt.request)}
1346
+ */
1347
+
1348
+ /**
1349
+ * Delagates the user interaction to a async callback function
1350
+ * You need to provide your own implementation of this callback function and its bind to UI.
1351
+ */
1352
+ var CallbackInterfaceTools = /** @class */ (function () {
1353
+ function CallbackInterfaceTools(options) {
1354
+ this.options = options;
1355
+ }
1356
+ /**
1357
+ * Trigger the custom callback function
1358
+ */
1359
+ CallbackInterfaceTools.prototype.promptDialog = function (options) {
1360
+ return __awaiter(this, void 0, void 0, function () {
1361
+ var answer;
1362
+ return __generator(this, function (_a) {
1363
+ switch (_a.label) {
1364
+ case 0: return [4 /*yield*/, this.options.callback(options)];
1365
+ case 1:
1366
+ answer = _a.sent();
1367
+ if (this.options.isVerbose) {
1368
+ console.info(spaceTrim__default["default"](function (block) { return "\n \uD83D\uDCD6 ".concat(block(options.prompt), "\n \uD83D\uDC64 ").concat(block(answer), "\n "); }));
1369
+ }
1370
+ return [2 /*return*/, answer];
1371
+ }
1372
+ });
1373
+ });
1374
+ };
1375
+ return CallbackInterfaceTools;
1376
+ }());
1377
+
1378
+ /**
1379
+ * Wrapper around `window.prompt` synchronous function that interacts with the user via browser prompt
1380
+ *
1381
+ * Warning: It is used for testing and mocking
1382
+ * **NOT intended to use in the production** due to its synchronous nature.
1383
+ */
1384
+ var SimplePromptInterfaceTools = /** @class */ (function () {
1385
+ function SimplePromptInterfaceTools(options) {
1386
+ this.options = options;
1387
+ }
1388
+ /**
1389
+ * Trigger window.prompt dialog
1390
+ */
1391
+ SimplePromptInterfaceTools.prototype.promptDialog = function (options) {
1392
+ return __awaiter(this, void 0, void 0, function () {
1393
+ var answer;
1394
+ return __generator(this, function (_a) {
1395
+ answer = window.prompt(options.prompt);
1396
+ if (this.options.isVerbose) {
1397
+ console.info(spaceTrim__default["default"](function (block) { return "\n \uD83D\uDCD6 ".concat(block(options.prompt), "\n \uD83D\uDC64 ").concat(block(answer || '๐Ÿšซ User cancelled prompt'), "\n "); }));
1398
+ }
1399
+ if (answer === null) {
1400
+ throw new Error('User cancelled prompt');
1401
+ }
1402
+ return [2 /*return*/, answer];
1403
+ });
1404
+ });
1405
+ };
1406
+ return SimplePromptInterfaceTools;
1407
+ }());
1408
+
1409
+ exports.CallbackInterfaceTools = CallbackInterfaceTools;
1410
+ exports.ExecutionTypes = ExecutionTypes;
1411
+ exports.MockedEchoNaturalExecutionTools = MockedEchoNaturalExecutionTools;
1412
+ exports.PTP_VERSION = PTP_VERSION;
1413
+ exports.PromptTemplatePipeline = PromptTemplatePipeline;
1414
+ exports.PromptTemplatePipelineLibrary = PromptTemplatePipelineLibrary;
1415
+ exports.SimplePromptInterfaceTools = SimplePromptInterfaceTools;
1416
+ exports.createPtpExecutor = createPtpExecutor;
1417
+ exports.promptTemplatePipelineStringToJson = promptTemplatePipelineStringToJson;
1418
+ exports.validatePromptTemplatePipelineJson = validatePromptTemplatePipelineJson;
1419
+
1420
+ Object.defineProperty(exports, '__esModule', { value: true });
1421
+
1422
+ }));
1423
+ //# sourceMappingURL=index.umd.js.map