fedipod-server 0.21.0 → 0.26.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 (4010) hide show
  1. package/README.md +5 -4
  2. package/dist/claims.d.ts +3 -1
  3. package/dist/claims.js +20 -7
  4. package/dist/components/context.jsonld +6 -0
  5. package/dist/handler.d.ts +29 -1
  6. package/dist/handler.js +85 -4
  7. package/dist/handler.jsonld +36 -1
  8. package/lib/client/c2s.mjs +100 -3
  9. package/lib/client/masto/accounts.mjs +44 -4
  10. package/lib/client/masto/body.mjs +90 -3
  11. package/lib/client/masto/index.mjs +5 -1
  12. package/lib/client/masto/instance.mjs +11 -3
  13. package/lib/client/masto/media.mjs +3 -57
  14. package/lib/client/masto/oauth.mjs +66 -9
  15. package/lib/client/masto/render.mjs +62 -5
  16. package/lib/client/masto/statuses.mjs +25 -1
  17. package/lib/client/masto/timelines.mjs +128 -6
  18. package/lib/connections/tagfeed.mjs +42 -5
  19. package/lib/core/as2.mjs +36 -5
  20. package/lib/core/contexts/index.mjs +14 -0
  21. package/lib/core/contexts/litepub-0.1.json +60 -0
  22. package/lib/core/contexts/map.json +3 -1
  23. package/lib/core/contexts/quotes.json +18 -0
  24. package/lib/core/graphview.mjs +41 -3
  25. package/lib/core/intake/activities.mjs +136 -2
  26. package/lib/core/intake/activity.mjs +79 -1
  27. package/lib/core/intake/group.mjs +37 -3
  28. package/lib/core/intake/index.mjs +32 -2
  29. package/lib/core/intake/notes.mjs +60 -3
  30. package/lib/core/lease.mjs +12 -2
  31. package/lib/core/profile-page.mjs +104 -0
  32. package/lib/core/publisher/collections.mjs +6 -1
  33. package/lib/core/publisher/index.mjs +32 -17
  34. package/lib/core/publisher/notes.mjs +104 -3
  35. package/lib/core/shapes/activitystreams.ttl +28 -0
  36. package/lib/core/shapes/index.mjs +26 -1
  37. package/lib/core/wire-quotes.mjs +71 -0
  38. package/lib/core/wire.mjs +49 -102
  39. package/lib/device/admin/routes/lifecycle.mjs +9 -0
  40. package/lib/device/admin/static.mjs +4 -1
  41. package/lib/device/admin/surface.mjs +26 -2
  42. package/lib/device/certs.mjs +18 -2
  43. package/lib/device/cli/commands/state.mjs +3 -1
  44. package/lib/gateway/front-core.mjs +189 -17
  45. package/lib/pod/root.mjs +6 -3
  46. package/lib/pod/transport.mjs +5 -1
  47. package/lib/session/README.md +123 -0
  48. package/lib/session/demo.html +94 -0
  49. package/lib/session/fedi-account.mjs +346 -0
  50. package/lib/session/fedi-login.mjs +123 -0
  51. package/lib/session/oidc-session.mjs +233 -0
  52. package/lib/session/package.json +41 -0
  53. package/package.json +1 -1
  54. package/run-agent.mjs +9 -0
  55. package/vendor/gate.cjs +6 -3
  56. package/web/admin/bar.css +32 -0
  57. package/web/admin/bar.js +38 -0
  58. package/web/admin/client/index.html +2 -1
  59. package/web/admin/client-pick.js +79 -0
  60. package/web/admin/index.html +2 -1
  61. package/web/admin/oauth-signin.mjs +37 -0
  62. package/web/admin/setup/index.html +2 -1
  63. package/web/admin/tokens.css +15 -3
  64. package/web/app/admin-facade.mjs +25 -2
  65. package/web/app/agent.mjs +99 -3
  66. package/web/app/authorize_interaction.html +56 -0
  67. package/web/app/authorize_interaction.js +69 -0
  68. package/web/app/boot.mjs +81 -5
  69. package/web/app/dist/boot.js +245 -156
  70. package/web/app/dist/boot.js.map +4 -4
  71. package/web/app/dist/sw.js +1702 -478
  72. package/web/app/dist/sw.js.map +4 -4
  73. package/web/app/index.html +4 -3
  74. package/web/app/oidc-session.mjs +5 -188
  75. package/web/app/site/_headers +22 -0
  76. package/web/app/site/_redirects +17 -0
  77. package/web/app/site/admin/bar.css +32 -0
  78. package/web/app/site/admin/bar.js +38 -0
  79. package/web/app/site/admin/client/index.html +21 -3
  80. package/web/app/site/admin/client-phanpy/index.html +61 -0
  81. package/web/app/site/admin/client-pick.js +79 -0
  82. package/web/app/site/admin/index.html +19 -1
  83. package/web/app/site/admin/oauth-signin.mjs +37 -0
  84. package/web/app/site/admin/setup/index.html +5 -1
  85. package/web/app/site/admin/tokens.css +15 -3
  86. package/web/app/site/app/compose/index.html +4 -1
  87. package/web/app/site/app/index.html +4 -1
  88. package/web/app/site/authorize_interaction.html +59 -0
  89. package/web/app/site/authorize_interaction.js +69 -0
  90. package/web/app/site/bb/bb.js +1617 -0
  91. package/web/app/site/bb/index.html +300 -0
  92. package/web/app/site/bb/markdown.mjs +0 -0
  93. package/web/app/site/bb/masto.mjs +179 -0
  94. package/web/app/site/bb/mine.mjs +48 -0
  95. package/web/app/site/bb/oidc-session.mjs +6 -0
  96. package/web/app/site/bb/pod.mjs +340 -0
  97. package/web/app/site/bb/private.mjs +98 -0
  98. package/web/app/site/bb/read.mjs +296 -0
  99. package/web/app/site/bb/seen.mjs +64 -0
  100. package/web/app/site/bb/solid-oidc-session.mjs +233 -0
  101. package/web/app/site/bb/tokens.css +68 -0
  102. package/web/app/site/boot.js +245 -156
  103. package/web/app/site/build.json +1 -0
  104. package/web/app/site/demo/fedi-account.mjs +346 -0
  105. package/web/app/site/demo/fedi-login.mjs +123 -0
  106. package/web/app/site/demo/index.html +94 -0
  107. package/web/app/site/demo/oidc-session.mjs +233 -0
  108. package/web/app/site/demo/tokens.css +68 -0
  109. package/web/app/site/icons/forum.svg +11 -0
  110. package/web/app/site/icons/gateway.svg +14 -0
  111. package/web/app/site/icons/local.svg +11 -0
  112. package/web/app/site/index.html +7 -3
  113. package/web/app/site/sengi/3rdpartylicenses.txt +832 -0
  114. package/web/app/site/sengi/Roboto-Black.72f6fd218b59c42e804c.woff2 +0 -0
  115. package/web/app/site/sengi/Roboto-Black.fdd88b742a9f6304f05b.woff +0 -0
  116. package/web/app/site/sengi/Roboto-Bold.08cb8f79715774f9a628.woff +0 -0
  117. package/web/app/site/sengi/Roboto-Bold.f3a02e2578bee50e620e.woff2 +0 -0
  118. package/web/app/site/sengi/Roboto-Light.10ad0f861c0c58077340.woff +0 -0
  119. package/web/app/site/sengi/Roboto-Light.ed4b08d2702fa26acc32.woff2 +0 -0
  120. package/web/app/site/sengi/Roboto-Medium.50d01d3e6c994995bcaf.woff2 +0 -0
  121. package/web/app/site/sengi/Roboto-Medium.9a3bf7acae14d9b5ed5a.woff +0 -0
  122. package/web/app/site/sengi/Roboto-Regular.94dac78eee406a8c8f04.woff +0 -0
  123. package/web/app/site/sengi/Roboto-Regular.9feb0110b6dff9ee2b9e.woff2 +0 -0
  124. package/web/app/site/sengi/Roboto-Thin.46888f279ddb7baaf897.woff2 +0 -0
  125. package/web/app/site/sengi/Roboto-Thin.f09d9b5e8e8a5f3843c1.woff +0 -0
  126. package/web/app/site/sengi/arrow_1.bc5b1e3edc01f84c94d7.png +0 -0
  127. package/web/app/site/sengi/arrow_2.4ca4d04924079fc62d23.png +0 -0
  128. package/web/app/site/sengi/assets/audio/all-eyes-on-me.mp3 +0 -0
  129. package/web/app/site/sengi/assets/audio/appointed.mp3 +0 -0
  130. package/web/app/site/sengi/assets/audio/boop.mp3 +0 -0
  131. package/web/app/site/sengi/assets/audio/exquisite.mp3 +0 -0
  132. package/web/app/site/sengi/assets/docs/privacy.html +20 -0
  133. package/web/app/site/sengi/assets/emoji/64/0023-20e3.png +0 -0
  134. package/web/app/site/sengi/assets/emoji/64/0023.png +0 -0
  135. package/web/app/site/sengi/assets/emoji/64/002a-20e3.png +0 -0
  136. package/web/app/site/sengi/assets/emoji/64/002a.png +0 -0
  137. package/web/app/site/sengi/assets/emoji/64/0030-20e3.png +0 -0
  138. package/web/app/site/sengi/assets/emoji/64/0030.png +0 -0
  139. package/web/app/site/sengi/assets/emoji/64/0031-20e3.png +0 -0
  140. package/web/app/site/sengi/assets/emoji/64/0031.png +0 -0
  141. package/web/app/site/sengi/assets/emoji/64/0032-20e3.png +0 -0
  142. package/web/app/site/sengi/assets/emoji/64/0032.png +0 -0
  143. package/web/app/site/sengi/assets/emoji/64/0033-20e3.png +0 -0
  144. package/web/app/site/sengi/assets/emoji/64/0033.png +0 -0
  145. package/web/app/site/sengi/assets/emoji/64/0034-20e3.png +0 -0
  146. package/web/app/site/sengi/assets/emoji/64/0034.png +0 -0
  147. package/web/app/site/sengi/assets/emoji/64/0035-20e3.png +0 -0
  148. package/web/app/site/sengi/assets/emoji/64/0035.png +0 -0
  149. package/web/app/site/sengi/assets/emoji/64/0036-20e3.png +0 -0
  150. package/web/app/site/sengi/assets/emoji/64/0036.png +0 -0
  151. package/web/app/site/sengi/assets/emoji/64/0037-20e3.png +0 -0
  152. package/web/app/site/sengi/assets/emoji/64/0037.png +0 -0
  153. package/web/app/site/sengi/assets/emoji/64/0038-20e3.png +0 -0
  154. package/web/app/site/sengi/assets/emoji/64/0038.png +0 -0
  155. package/web/app/site/sengi/assets/emoji/64/0039-20e3.png +0 -0
  156. package/web/app/site/sengi/assets/emoji/64/0039.png +0 -0
  157. package/web/app/site/sengi/assets/emoji/64/00a9.png +0 -0
  158. package/web/app/site/sengi/assets/emoji/64/00ae.png +0 -0
  159. package/web/app/site/sengi/assets/emoji/64/1f004.png +0 -0
  160. package/web/app/site/sengi/assets/emoji/64/1f0cf.png +0 -0
  161. package/web/app/site/sengi/assets/emoji/64/1f170.png +0 -0
  162. package/web/app/site/sengi/assets/emoji/64/1f171.png +0 -0
  163. package/web/app/site/sengi/assets/emoji/64/1f17e.png +0 -0
  164. package/web/app/site/sengi/assets/emoji/64/1f17f.png +0 -0
  165. package/web/app/site/sengi/assets/emoji/64/1f18e.png +0 -0
  166. package/web/app/site/sengi/assets/emoji/64/1f191.png +0 -0
  167. package/web/app/site/sengi/assets/emoji/64/1f192.png +0 -0
  168. package/web/app/site/sengi/assets/emoji/64/1f193.png +0 -0
  169. package/web/app/site/sengi/assets/emoji/64/1f194.png +0 -0
  170. package/web/app/site/sengi/assets/emoji/64/1f195.png +0 -0
  171. package/web/app/site/sengi/assets/emoji/64/1f196.png +0 -0
  172. package/web/app/site/sengi/assets/emoji/64/1f197.png +0 -0
  173. package/web/app/site/sengi/assets/emoji/64/1f198.png +0 -0
  174. package/web/app/site/sengi/assets/emoji/64/1f199.png +0 -0
  175. package/web/app/site/sengi/assets/emoji/64/1f19a.png +0 -0
  176. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1e8.png +0 -0
  177. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1e9.png +0 -0
  178. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ea.png +0 -0
  179. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1eb.png +0 -0
  180. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ec.png +0 -0
  181. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ee.png +0 -0
  182. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f1.png +0 -0
  183. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f2.png +0 -0
  184. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f4.png +0 -0
  185. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f6.png +0 -0
  186. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f7.png +0 -0
  187. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f8.png +0 -0
  188. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f9.png +0 -0
  189. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1fa.png +0 -0
  190. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1fc.png +0 -0
  191. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1fd.png +0 -0
  192. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ff.png +0 -0
  193. package/web/app/site/sengi/assets/emoji/64/1f1e6.png +0 -0
  194. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1e6.png +0 -0
  195. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1e7.png +0 -0
  196. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1e9.png +0 -0
  197. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ea.png +0 -0
  198. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1eb.png +0 -0
  199. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ec.png +0 -0
  200. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ed.png +0 -0
  201. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ee.png +0 -0
  202. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ef.png +0 -0
  203. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f1.png +0 -0
  204. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f2.png +0 -0
  205. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f3.png +0 -0
  206. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f4.png +0 -0
  207. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f6.png +0 -0
  208. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f7.png +0 -0
  209. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f8.png +0 -0
  210. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f9.png +0 -0
  211. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1fb.png +0 -0
  212. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1fc.png +0 -0
  213. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1fe.png +0 -0
  214. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ff.png +0 -0
  215. package/web/app/site/sengi/assets/emoji/64/1f1e7.png +0 -0
  216. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1e6.png +0 -0
  217. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1e8.png +0 -0
  218. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1e9.png +0 -0
  219. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1eb.png +0 -0
  220. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ec.png +0 -0
  221. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ed.png +0 -0
  222. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ee.png +0 -0
  223. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f0.png +0 -0
  224. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f1.png +0 -0
  225. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f2.png +0 -0
  226. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f3.png +0 -0
  227. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f4.png +0 -0
  228. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f5.png +0 -0
  229. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f6.png +0 -0
  230. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f7.png +0 -0
  231. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fa.png +0 -0
  232. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fb.png +0 -0
  233. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fc.png +0 -0
  234. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fd.png +0 -0
  235. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fe.png +0 -0
  236. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ff.png +0 -0
  237. package/web/app/site/sengi/assets/emoji/64/1f1e8.png +0 -0
  238. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ea.png +0 -0
  239. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ec.png +0 -0
  240. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ef.png +0 -0
  241. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1f0.png +0 -0
  242. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1f2.png +0 -0
  243. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1f4.png +0 -0
  244. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ff.png +0 -0
  245. package/web/app/site/sengi/assets/emoji/64/1f1e9.png +0 -0
  246. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1e6.png +0 -0
  247. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1e8.png +0 -0
  248. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1ea.png +0 -0
  249. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1ec.png +0 -0
  250. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1ed.png +0 -0
  251. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1f7.png +0 -0
  252. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1f8.png +0 -0
  253. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1f9.png +0 -0
  254. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1fa.png +0 -0
  255. package/web/app/site/sengi/assets/emoji/64/1f1ea.png +0 -0
  256. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1ee.png +0 -0
  257. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1ef.png +0 -0
  258. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f0.png +0 -0
  259. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f2.png +0 -0
  260. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f4.png +0 -0
  261. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f7.png +0 -0
  262. package/web/app/site/sengi/assets/emoji/64/1f1eb.png +0 -0
  263. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1e6.png +0 -0
  264. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1e7.png +0 -0
  265. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1e9.png +0 -0
  266. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ea.png +0 -0
  267. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1eb.png +0 -0
  268. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ec.png +0 -0
  269. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ed.png +0 -0
  270. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ee.png +0 -0
  271. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f1.png +0 -0
  272. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f2.png +0 -0
  273. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f3.png +0 -0
  274. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f5.png +0 -0
  275. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f6.png +0 -0
  276. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f7.png +0 -0
  277. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f8.png +0 -0
  278. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f9.png +0 -0
  279. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1fa.png +0 -0
  280. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1fc.png +0 -0
  281. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1fe.png +0 -0
  282. package/web/app/site/sengi/assets/emoji/64/1f1ec.png +0 -0
  283. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f0.png +0 -0
  284. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f2.png +0 -0
  285. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f3.png +0 -0
  286. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f7.png +0 -0
  287. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f9.png +0 -0
  288. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1fa.png +0 -0
  289. package/web/app/site/sengi/assets/emoji/64/1f1ed.png +0 -0
  290. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1e8.png +0 -0
  291. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1e9.png +0 -0
  292. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1ea.png +0 -0
  293. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f1.png +0 -0
  294. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f2.png +0 -0
  295. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f3.png +0 -0
  296. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f4.png +0 -0
  297. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f6.png +0 -0
  298. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f7.png +0 -0
  299. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f8.png +0 -0
  300. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f9.png +0 -0
  301. package/web/app/site/sengi/assets/emoji/64/1f1ee.png +0 -0
  302. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1ea.png +0 -0
  303. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1f2.png +0 -0
  304. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1f4.png +0 -0
  305. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1f5.png +0 -0
  306. package/web/app/site/sengi/assets/emoji/64/1f1ef.png +0 -0
  307. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ea.png +0 -0
  308. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ec.png +0 -0
  309. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ed.png +0 -0
  310. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ee.png +0 -0
  311. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f2.png +0 -0
  312. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f3.png +0 -0
  313. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f5.png +0 -0
  314. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f7.png +0 -0
  315. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1fc.png +0 -0
  316. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1fe.png +0 -0
  317. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ff.png +0 -0
  318. package/web/app/site/sengi/assets/emoji/64/1f1f0.png +0 -0
  319. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1e6.png +0 -0
  320. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1e7.png +0 -0
  321. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1e8.png +0 -0
  322. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1ee.png +0 -0
  323. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f0.png +0 -0
  324. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f7.png +0 -0
  325. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f8.png +0 -0
  326. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f9.png +0 -0
  327. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1fa.png +0 -0
  328. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1fb.png +0 -0
  329. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1fe.png +0 -0
  330. package/web/app/site/sengi/assets/emoji/64/1f1f1.png +0 -0
  331. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1e6.png +0 -0
  332. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1e8.png +0 -0
  333. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1e9.png +0 -0
  334. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ea.png +0 -0
  335. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1eb.png +0 -0
  336. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ec.png +0 -0
  337. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ed.png +0 -0
  338. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f0.png +0 -0
  339. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f1.png +0 -0
  340. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f2.png +0 -0
  341. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f3.png +0 -0
  342. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f4.png +0 -0
  343. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f5.png +0 -0
  344. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f6.png +0 -0
  345. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f7.png +0 -0
  346. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f8.png +0 -0
  347. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f9.png +0 -0
  348. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fa.png +0 -0
  349. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fb.png +0 -0
  350. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fc.png +0 -0
  351. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fd.png +0 -0
  352. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fe.png +0 -0
  353. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ff.png +0 -0
  354. package/web/app/site/sengi/assets/emoji/64/1f1f2.png +0 -0
  355. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1e6.png +0 -0
  356. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1e8.png +0 -0
  357. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ea.png +0 -0
  358. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1eb.png +0 -0
  359. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ec.png +0 -0
  360. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ee.png +0 -0
  361. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f1.png +0 -0
  362. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f4.png +0 -0
  363. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f5.png +0 -0
  364. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f7.png +0 -0
  365. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1fa.png +0 -0
  366. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ff.png +0 -0
  367. package/web/app/site/sengi/assets/emoji/64/1f1f3.png +0 -0
  368. package/web/app/site/sengi/assets/emoji/64/1f1f4-1f1f2.png +0 -0
  369. package/web/app/site/sengi/assets/emoji/64/1f1f4.png +0 -0
  370. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1e6.png +0 -0
  371. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1ea.png +0 -0
  372. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1eb.png +0 -0
  373. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1ec.png +0 -0
  374. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1ed.png +0 -0
  375. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f0.png +0 -0
  376. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f1.png +0 -0
  377. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f2.png +0 -0
  378. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f3.png +0 -0
  379. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f7.png +0 -0
  380. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f8.png +0 -0
  381. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f9.png +0 -0
  382. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1fc.png +0 -0
  383. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1fe.png +0 -0
  384. package/web/app/site/sengi/assets/emoji/64/1f1f5.png +0 -0
  385. package/web/app/site/sengi/assets/emoji/64/1f1f6-1f1e6.png +0 -0
  386. package/web/app/site/sengi/assets/emoji/64/1f1f6.png +0 -0
  387. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1ea.png +0 -0
  388. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1f4.png +0 -0
  389. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1f8.png +0 -0
  390. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1fa.png +0 -0
  391. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1fc.png +0 -0
  392. package/web/app/site/sengi/assets/emoji/64/1f1f7.png +0 -0
  393. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e6.png +0 -0
  394. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e7.png +0 -0
  395. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e8.png +0 -0
  396. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e9.png +0 -0
  397. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ea.png +0 -0
  398. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ec.png +0 -0
  399. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ed.png +0 -0
  400. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ee.png +0 -0
  401. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ef.png +0 -0
  402. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f0.png +0 -0
  403. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f1.png +0 -0
  404. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f2.png +0 -0
  405. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f3.png +0 -0
  406. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f4.png +0 -0
  407. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f7.png +0 -0
  408. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f8.png +0 -0
  409. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f9.png +0 -0
  410. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1fb.png +0 -0
  411. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1fd.png +0 -0
  412. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1fe.png +0 -0
  413. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ff.png +0 -0
  414. package/web/app/site/sengi/assets/emoji/64/1f1f8.png +0 -0
  415. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1e6.png +0 -0
  416. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1e8.png +0 -0
  417. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1e9.png +0 -0
  418. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1eb.png +0 -0
  419. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ec.png +0 -0
  420. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ed.png +0 -0
  421. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ef.png +0 -0
  422. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f0.png +0 -0
  423. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f1.png +0 -0
  424. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f2.png +0 -0
  425. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f3.png +0 -0
  426. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f4.png +0 -0
  427. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f7.png +0 -0
  428. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f9.png +0 -0
  429. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1fb.png +0 -0
  430. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1fc.png +0 -0
  431. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ff.png +0 -0
  432. package/web/app/site/sengi/assets/emoji/64/1f1f9.png +0 -0
  433. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1e6.png +0 -0
  434. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1ec.png +0 -0
  435. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1f2.png +0 -0
  436. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1f3.png +0 -0
  437. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1f8.png +0 -0
  438. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1fe.png +0 -0
  439. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1ff.png +0 -0
  440. package/web/app/site/sengi/assets/emoji/64/1f1fa.png +0 -0
  441. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1e6.png +0 -0
  442. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1e8.png +0 -0
  443. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1ea.png +0 -0
  444. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1ec.png +0 -0
  445. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1ee.png +0 -0
  446. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1f3.png +0 -0
  447. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1fa.png +0 -0
  448. package/web/app/site/sengi/assets/emoji/64/1f1fb.png +0 -0
  449. package/web/app/site/sengi/assets/emoji/64/1f1fc-1f1eb.png +0 -0
  450. package/web/app/site/sengi/assets/emoji/64/1f1fc-1f1f8.png +0 -0
  451. package/web/app/site/sengi/assets/emoji/64/1f1fc.png +0 -0
  452. package/web/app/site/sengi/assets/emoji/64/1f1fd-1f1f0.png +0 -0
  453. package/web/app/site/sengi/assets/emoji/64/1f1fd.png +0 -0
  454. package/web/app/site/sengi/assets/emoji/64/1f1fe-1f1ea.png +0 -0
  455. package/web/app/site/sengi/assets/emoji/64/1f1fe-1f1f9.png +0 -0
  456. package/web/app/site/sengi/assets/emoji/64/1f1fe.png +0 -0
  457. package/web/app/site/sengi/assets/emoji/64/1f1ff-1f1e6.png +0 -0
  458. package/web/app/site/sengi/assets/emoji/64/1f1ff-1f1f2.png +0 -0
  459. package/web/app/site/sengi/assets/emoji/64/1f1ff-1f1fc.png +0 -0
  460. package/web/app/site/sengi/assets/emoji/64/1f1ff.png +0 -0
  461. package/web/app/site/sengi/assets/emoji/64/1f201.png +0 -0
  462. package/web/app/site/sengi/assets/emoji/64/1f202.png +0 -0
  463. package/web/app/site/sengi/assets/emoji/64/1f21a.png +0 -0
  464. package/web/app/site/sengi/assets/emoji/64/1f22f.png +0 -0
  465. package/web/app/site/sengi/assets/emoji/64/1f232.png +0 -0
  466. package/web/app/site/sengi/assets/emoji/64/1f233.png +0 -0
  467. package/web/app/site/sengi/assets/emoji/64/1f234.png +0 -0
  468. package/web/app/site/sengi/assets/emoji/64/1f235.png +0 -0
  469. package/web/app/site/sengi/assets/emoji/64/1f236.png +0 -0
  470. package/web/app/site/sengi/assets/emoji/64/1f237.png +0 -0
  471. package/web/app/site/sengi/assets/emoji/64/1f238.png +0 -0
  472. package/web/app/site/sengi/assets/emoji/64/1f239.png +0 -0
  473. package/web/app/site/sengi/assets/emoji/64/1f23a.png +0 -0
  474. package/web/app/site/sengi/assets/emoji/64/1f250.png +0 -0
  475. package/web/app/site/sengi/assets/emoji/64/1f251.png +0 -0
  476. package/web/app/site/sengi/assets/emoji/64/1f300.png +0 -0
  477. package/web/app/site/sengi/assets/emoji/64/1f301.png +0 -0
  478. package/web/app/site/sengi/assets/emoji/64/1f302.png +0 -0
  479. package/web/app/site/sengi/assets/emoji/64/1f303.png +0 -0
  480. package/web/app/site/sengi/assets/emoji/64/1f304.png +0 -0
  481. package/web/app/site/sengi/assets/emoji/64/1f305.png +0 -0
  482. package/web/app/site/sengi/assets/emoji/64/1f306.png +0 -0
  483. package/web/app/site/sengi/assets/emoji/64/1f307.png +0 -0
  484. package/web/app/site/sengi/assets/emoji/64/1f308.png +0 -0
  485. package/web/app/site/sengi/assets/emoji/64/1f309.png +0 -0
  486. package/web/app/site/sengi/assets/emoji/64/1f30a.png +0 -0
  487. package/web/app/site/sengi/assets/emoji/64/1f30b.png +0 -0
  488. package/web/app/site/sengi/assets/emoji/64/1f30c.png +0 -0
  489. package/web/app/site/sengi/assets/emoji/64/1f30d.png +0 -0
  490. package/web/app/site/sengi/assets/emoji/64/1f30e.png +0 -0
  491. package/web/app/site/sengi/assets/emoji/64/1f30f.png +0 -0
  492. package/web/app/site/sengi/assets/emoji/64/1f310.png +0 -0
  493. package/web/app/site/sengi/assets/emoji/64/1f311.png +0 -0
  494. package/web/app/site/sengi/assets/emoji/64/1f312.png +0 -0
  495. package/web/app/site/sengi/assets/emoji/64/1f313.png +0 -0
  496. package/web/app/site/sengi/assets/emoji/64/1f314.png +0 -0
  497. package/web/app/site/sengi/assets/emoji/64/1f315.png +0 -0
  498. package/web/app/site/sengi/assets/emoji/64/1f316.png +0 -0
  499. package/web/app/site/sengi/assets/emoji/64/1f317.png +0 -0
  500. package/web/app/site/sengi/assets/emoji/64/1f318.png +0 -0
  501. package/web/app/site/sengi/assets/emoji/64/1f319.png +0 -0
  502. package/web/app/site/sengi/assets/emoji/64/1f31a.png +0 -0
  503. package/web/app/site/sengi/assets/emoji/64/1f31b.png +0 -0
  504. package/web/app/site/sengi/assets/emoji/64/1f31c.png +0 -0
  505. package/web/app/site/sengi/assets/emoji/64/1f31d.png +0 -0
  506. package/web/app/site/sengi/assets/emoji/64/1f31e.png +0 -0
  507. package/web/app/site/sengi/assets/emoji/64/1f31f.png +0 -0
  508. package/web/app/site/sengi/assets/emoji/64/1f320.png +0 -0
  509. package/web/app/site/sengi/assets/emoji/64/1f321.png +0 -0
  510. package/web/app/site/sengi/assets/emoji/64/1f324.png +0 -0
  511. package/web/app/site/sengi/assets/emoji/64/1f325.png +0 -0
  512. package/web/app/site/sengi/assets/emoji/64/1f326.png +0 -0
  513. package/web/app/site/sengi/assets/emoji/64/1f327.png +0 -0
  514. package/web/app/site/sengi/assets/emoji/64/1f328.png +0 -0
  515. package/web/app/site/sengi/assets/emoji/64/1f329.png +0 -0
  516. package/web/app/site/sengi/assets/emoji/64/1f32a.png +0 -0
  517. package/web/app/site/sengi/assets/emoji/64/1f32b.png +0 -0
  518. package/web/app/site/sengi/assets/emoji/64/1f32c.png +0 -0
  519. package/web/app/site/sengi/assets/emoji/64/1f32d.png +0 -0
  520. package/web/app/site/sengi/assets/emoji/64/1f32e.png +0 -0
  521. package/web/app/site/sengi/assets/emoji/64/1f32f.png +0 -0
  522. package/web/app/site/sengi/assets/emoji/64/1f330.png +0 -0
  523. package/web/app/site/sengi/assets/emoji/64/1f331.png +0 -0
  524. package/web/app/site/sengi/assets/emoji/64/1f332.png +0 -0
  525. package/web/app/site/sengi/assets/emoji/64/1f333.png +0 -0
  526. package/web/app/site/sengi/assets/emoji/64/1f334.png +0 -0
  527. package/web/app/site/sengi/assets/emoji/64/1f335.png +0 -0
  528. package/web/app/site/sengi/assets/emoji/64/1f336.png +0 -0
  529. package/web/app/site/sengi/assets/emoji/64/1f337.png +0 -0
  530. package/web/app/site/sengi/assets/emoji/64/1f338.png +0 -0
  531. package/web/app/site/sengi/assets/emoji/64/1f339.png +0 -0
  532. package/web/app/site/sengi/assets/emoji/64/1f33a.png +0 -0
  533. package/web/app/site/sengi/assets/emoji/64/1f33b.png +0 -0
  534. package/web/app/site/sengi/assets/emoji/64/1f33c.png +0 -0
  535. package/web/app/site/sengi/assets/emoji/64/1f33d.png +0 -0
  536. package/web/app/site/sengi/assets/emoji/64/1f33e.png +0 -0
  537. package/web/app/site/sengi/assets/emoji/64/1f33f.png +0 -0
  538. package/web/app/site/sengi/assets/emoji/64/1f340.png +0 -0
  539. package/web/app/site/sengi/assets/emoji/64/1f341.png +0 -0
  540. package/web/app/site/sengi/assets/emoji/64/1f342.png +0 -0
  541. package/web/app/site/sengi/assets/emoji/64/1f343.png +0 -0
  542. package/web/app/site/sengi/assets/emoji/64/1f344-1f7eb.png +0 -0
  543. package/web/app/site/sengi/assets/emoji/64/1f344.png +0 -0
  544. package/web/app/site/sengi/assets/emoji/64/1f345.png +0 -0
  545. package/web/app/site/sengi/assets/emoji/64/1f346.png +0 -0
  546. package/web/app/site/sengi/assets/emoji/64/1f347.png +0 -0
  547. package/web/app/site/sengi/assets/emoji/64/1f348.png +0 -0
  548. package/web/app/site/sengi/assets/emoji/64/1f349.png +0 -0
  549. package/web/app/site/sengi/assets/emoji/64/1f34a.png +0 -0
  550. package/web/app/site/sengi/assets/emoji/64/1f34b-1f7e9.png +0 -0
  551. package/web/app/site/sengi/assets/emoji/64/1f34b.png +0 -0
  552. package/web/app/site/sengi/assets/emoji/64/1f34c.png +0 -0
  553. package/web/app/site/sengi/assets/emoji/64/1f34d.png +0 -0
  554. package/web/app/site/sengi/assets/emoji/64/1f34e.png +0 -0
  555. package/web/app/site/sengi/assets/emoji/64/1f34f.png +0 -0
  556. package/web/app/site/sengi/assets/emoji/64/1f350.png +0 -0
  557. package/web/app/site/sengi/assets/emoji/64/1f351.png +0 -0
  558. package/web/app/site/sengi/assets/emoji/64/1f352.png +0 -0
  559. package/web/app/site/sengi/assets/emoji/64/1f353.png +0 -0
  560. package/web/app/site/sengi/assets/emoji/64/1f354.png +0 -0
  561. package/web/app/site/sengi/assets/emoji/64/1f355.png +0 -0
  562. package/web/app/site/sengi/assets/emoji/64/1f356.png +0 -0
  563. package/web/app/site/sengi/assets/emoji/64/1f357.png +0 -0
  564. package/web/app/site/sengi/assets/emoji/64/1f358.png +0 -0
  565. package/web/app/site/sengi/assets/emoji/64/1f359.png +0 -0
  566. package/web/app/site/sengi/assets/emoji/64/1f35a.png +0 -0
  567. package/web/app/site/sengi/assets/emoji/64/1f35b.png +0 -0
  568. package/web/app/site/sengi/assets/emoji/64/1f35c.png +0 -0
  569. package/web/app/site/sengi/assets/emoji/64/1f35d.png +0 -0
  570. package/web/app/site/sengi/assets/emoji/64/1f35e.png +0 -0
  571. package/web/app/site/sengi/assets/emoji/64/1f35f.png +0 -0
  572. package/web/app/site/sengi/assets/emoji/64/1f360.png +0 -0
  573. package/web/app/site/sengi/assets/emoji/64/1f361.png +0 -0
  574. package/web/app/site/sengi/assets/emoji/64/1f362.png +0 -0
  575. package/web/app/site/sengi/assets/emoji/64/1f363.png +0 -0
  576. package/web/app/site/sengi/assets/emoji/64/1f364.png +0 -0
  577. package/web/app/site/sengi/assets/emoji/64/1f365.png +0 -0
  578. package/web/app/site/sengi/assets/emoji/64/1f366.png +0 -0
  579. package/web/app/site/sengi/assets/emoji/64/1f367.png +0 -0
  580. package/web/app/site/sengi/assets/emoji/64/1f368.png +0 -0
  581. package/web/app/site/sengi/assets/emoji/64/1f369.png +0 -0
  582. package/web/app/site/sengi/assets/emoji/64/1f36a.png +0 -0
  583. package/web/app/site/sengi/assets/emoji/64/1f36b.png +0 -0
  584. package/web/app/site/sengi/assets/emoji/64/1f36c.png +0 -0
  585. package/web/app/site/sengi/assets/emoji/64/1f36d.png +0 -0
  586. package/web/app/site/sengi/assets/emoji/64/1f36e.png +0 -0
  587. package/web/app/site/sengi/assets/emoji/64/1f36f.png +0 -0
  588. package/web/app/site/sengi/assets/emoji/64/1f370.png +0 -0
  589. package/web/app/site/sengi/assets/emoji/64/1f371.png +0 -0
  590. package/web/app/site/sengi/assets/emoji/64/1f372.png +0 -0
  591. package/web/app/site/sengi/assets/emoji/64/1f373.png +0 -0
  592. package/web/app/site/sengi/assets/emoji/64/1f374.png +0 -0
  593. package/web/app/site/sengi/assets/emoji/64/1f375.png +0 -0
  594. package/web/app/site/sengi/assets/emoji/64/1f376.png +0 -0
  595. package/web/app/site/sengi/assets/emoji/64/1f377.png +0 -0
  596. package/web/app/site/sengi/assets/emoji/64/1f378.png +0 -0
  597. package/web/app/site/sengi/assets/emoji/64/1f379.png +0 -0
  598. package/web/app/site/sengi/assets/emoji/64/1f37a.png +0 -0
  599. package/web/app/site/sengi/assets/emoji/64/1f37b.png +0 -0
  600. package/web/app/site/sengi/assets/emoji/64/1f37c.png +0 -0
  601. package/web/app/site/sengi/assets/emoji/64/1f37d.png +0 -0
  602. package/web/app/site/sengi/assets/emoji/64/1f37e.png +0 -0
  603. package/web/app/site/sengi/assets/emoji/64/1f37f.png +0 -0
  604. package/web/app/site/sengi/assets/emoji/64/1f380.png +0 -0
  605. package/web/app/site/sengi/assets/emoji/64/1f381.png +0 -0
  606. package/web/app/site/sengi/assets/emoji/64/1f382.png +0 -0
  607. package/web/app/site/sengi/assets/emoji/64/1f383.png +0 -0
  608. package/web/app/site/sengi/assets/emoji/64/1f384.png +0 -0
  609. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fb.png +0 -0
  610. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fc.png +0 -0
  611. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fd.png +0 -0
  612. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fe.png +0 -0
  613. package/web/app/site/sengi/assets/emoji/64/1f385-1f3ff.png +0 -0
  614. package/web/app/site/sengi/assets/emoji/64/1f385.png +0 -0
  615. package/web/app/site/sengi/assets/emoji/64/1f386.png +0 -0
  616. package/web/app/site/sengi/assets/emoji/64/1f387.png +0 -0
  617. package/web/app/site/sengi/assets/emoji/64/1f388.png +0 -0
  618. package/web/app/site/sengi/assets/emoji/64/1f389.png +0 -0
  619. package/web/app/site/sengi/assets/emoji/64/1f38a.png +0 -0
  620. package/web/app/site/sengi/assets/emoji/64/1f38b.png +0 -0
  621. package/web/app/site/sengi/assets/emoji/64/1f38c.png +0 -0
  622. package/web/app/site/sengi/assets/emoji/64/1f38d.png +0 -0
  623. package/web/app/site/sengi/assets/emoji/64/1f38e.png +0 -0
  624. package/web/app/site/sengi/assets/emoji/64/1f38f.png +0 -0
  625. package/web/app/site/sengi/assets/emoji/64/1f390.png +0 -0
  626. package/web/app/site/sengi/assets/emoji/64/1f391.png +0 -0
  627. package/web/app/site/sengi/assets/emoji/64/1f392.png +0 -0
  628. package/web/app/site/sengi/assets/emoji/64/1f393.png +0 -0
  629. package/web/app/site/sengi/assets/emoji/64/1f396.png +0 -0
  630. package/web/app/site/sengi/assets/emoji/64/1f397.png +0 -0
  631. package/web/app/site/sengi/assets/emoji/64/1f399.png +0 -0
  632. package/web/app/site/sengi/assets/emoji/64/1f39a.png +0 -0
  633. package/web/app/site/sengi/assets/emoji/64/1f39b.png +0 -0
  634. package/web/app/site/sengi/assets/emoji/64/1f39e.png +0 -0
  635. package/web/app/site/sengi/assets/emoji/64/1f39f.png +0 -0
  636. package/web/app/site/sengi/assets/emoji/64/1f3a0.png +0 -0
  637. package/web/app/site/sengi/assets/emoji/64/1f3a1.png +0 -0
  638. package/web/app/site/sengi/assets/emoji/64/1f3a2.png +0 -0
  639. package/web/app/site/sengi/assets/emoji/64/1f3a3.png +0 -0
  640. package/web/app/site/sengi/assets/emoji/64/1f3a4.png +0 -0
  641. package/web/app/site/sengi/assets/emoji/64/1f3a5.png +0 -0
  642. package/web/app/site/sengi/assets/emoji/64/1f3a6.png +0 -0
  643. package/web/app/site/sengi/assets/emoji/64/1f3a7.png +0 -0
  644. package/web/app/site/sengi/assets/emoji/64/1f3a8.png +0 -0
  645. package/web/app/site/sengi/assets/emoji/64/1f3a9.png +0 -0
  646. package/web/app/site/sengi/assets/emoji/64/1f3aa.png +0 -0
  647. package/web/app/site/sengi/assets/emoji/64/1f3ab.png +0 -0
  648. package/web/app/site/sengi/assets/emoji/64/1f3ac.png +0 -0
  649. package/web/app/site/sengi/assets/emoji/64/1f3ad.png +0 -0
  650. package/web/app/site/sengi/assets/emoji/64/1f3ae.png +0 -0
  651. package/web/app/site/sengi/assets/emoji/64/1f3af.png +0 -0
  652. package/web/app/site/sengi/assets/emoji/64/1f3b0.png +0 -0
  653. package/web/app/site/sengi/assets/emoji/64/1f3b1.png +0 -0
  654. package/web/app/site/sengi/assets/emoji/64/1f3b2.png +0 -0
  655. package/web/app/site/sengi/assets/emoji/64/1f3b3.png +0 -0
  656. package/web/app/site/sengi/assets/emoji/64/1f3b4.png +0 -0
  657. package/web/app/site/sengi/assets/emoji/64/1f3b5.png +0 -0
  658. package/web/app/site/sengi/assets/emoji/64/1f3b6.png +0 -0
  659. package/web/app/site/sengi/assets/emoji/64/1f3b7.png +0 -0
  660. package/web/app/site/sengi/assets/emoji/64/1f3b8.png +0 -0
  661. package/web/app/site/sengi/assets/emoji/64/1f3b9.png +0 -0
  662. package/web/app/site/sengi/assets/emoji/64/1f3ba.png +0 -0
  663. package/web/app/site/sengi/assets/emoji/64/1f3bb.png +0 -0
  664. package/web/app/site/sengi/assets/emoji/64/1f3bc.png +0 -0
  665. package/web/app/site/sengi/assets/emoji/64/1f3bd.png +0 -0
  666. package/web/app/site/sengi/assets/emoji/64/1f3be.png +0 -0
  667. package/web/app/site/sengi/assets/emoji/64/1f3bf.png +0 -0
  668. package/web/app/site/sengi/assets/emoji/64/1f3c0.png +0 -0
  669. package/web/app/site/sengi/assets/emoji/64/1f3c1.png +0 -0
  670. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fb.png +0 -0
  671. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fc.png +0 -0
  672. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fd.png +0 -0
  673. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fe.png +0 -0
  674. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3ff.png +0 -0
  675. package/web/app/site/sengi/assets/emoji/64/1f3c2.png +0 -0
  676. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2640-27a1.png +0 -0
  677. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2640.png +0 -0
  678. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2642-27a1.png +0 -0
  679. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2642.png +0 -0
  680. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-27a1.png +0 -0
  681. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb.png +0 -0
  682. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2640-27a1.png +0 -0
  683. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2640.png +0 -0
  684. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2642-27a1.png +0 -0
  685. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2642.png +0 -0
  686. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-27a1.png +0 -0
  687. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc.png +0 -0
  688. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2640-27a1.png +0 -0
  689. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2640.png +0 -0
  690. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2642-27a1.png +0 -0
  691. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2642.png +0 -0
  692. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-27a1.png +0 -0
  693. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd.png +0 -0
  694. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2640-27a1.png +0 -0
  695. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2640.png +0 -0
  696. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2642-27a1.png +0 -0
  697. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2642.png +0 -0
  698. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-27a1.png +0 -0
  699. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe.png +0 -0
  700. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2640-27a1.png +0 -0
  701. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2640.png +0 -0
  702. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2642-27a1.png +0 -0
  703. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2642.png +0 -0
  704. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-27a1.png +0 -0
  705. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff.png +0 -0
  706. package/web/app/site/sengi/assets/emoji/64/1f3c3-2640-27a1.png +0 -0
  707. package/web/app/site/sengi/assets/emoji/64/1f3c3-2640.png +0 -0
  708. package/web/app/site/sengi/assets/emoji/64/1f3c3-2642-27a1.png +0 -0
  709. package/web/app/site/sengi/assets/emoji/64/1f3c3-2642.png +0 -0
  710. package/web/app/site/sengi/assets/emoji/64/1f3c3-27a1.png +0 -0
  711. package/web/app/site/sengi/assets/emoji/64/1f3c3.png +0 -0
  712. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fb-2640.png +0 -0
  713. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fb-2642.png +0 -0
  714. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fb.png +0 -0
  715. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fc-2640.png +0 -0
  716. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fc-2642.png +0 -0
  717. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fc.png +0 -0
  718. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fd-2640.png +0 -0
  719. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fd-2642.png +0 -0
  720. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fd.png +0 -0
  721. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fe-2640.png +0 -0
  722. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fe-2642.png +0 -0
  723. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fe.png +0 -0
  724. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3ff-2640.png +0 -0
  725. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3ff-2642.png +0 -0
  726. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3ff.png +0 -0
  727. package/web/app/site/sengi/assets/emoji/64/1f3c4-2640.png +0 -0
  728. package/web/app/site/sengi/assets/emoji/64/1f3c4-2642.png +0 -0
  729. package/web/app/site/sengi/assets/emoji/64/1f3c4.png +0 -0
  730. package/web/app/site/sengi/assets/emoji/64/1f3c5.png +0 -0
  731. package/web/app/site/sengi/assets/emoji/64/1f3c6.png +0 -0
  732. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fb.png +0 -0
  733. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fc.png +0 -0
  734. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fd.png +0 -0
  735. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fe.png +0 -0
  736. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3ff.png +0 -0
  737. package/web/app/site/sengi/assets/emoji/64/1f3c7.png +0 -0
  738. package/web/app/site/sengi/assets/emoji/64/1f3c8.png +0 -0
  739. package/web/app/site/sengi/assets/emoji/64/1f3c9.png +0 -0
  740. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fb-2640.png +0 -0
  741. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fb-2642.png +0 -0
  742. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fb.png +0 -0
  743. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fc-2640.png +0 -0
  744. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fc-2642.png +0 -0
  745. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fc.png +0 -0
  746. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fd-2640.png +0 -0
  747. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fd-2642.png +0 -0
  748. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fd.png +0 -0
  749. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fe-2640.png +0 -0
  750. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fe-2642.png +0 -0
  751. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fe.png +0 -0
  752. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3ff-2640.png +0 -0
  753. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3ff-2642.png +0 -0
  754. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3ff.png +0 -0
  755. package/web/app/site/sengi/assets/emoji/64/1f3ca-2640.png +0 -0
  756. package/web/app/site/sengi/assets/emoji/64/1f3ca-2642.png +0 -0
  757. package/web/app/site/sengi/assets/emoji/64/1f3ca.png +0 -0
  758. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fb-2640.png +0 -0
  759. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fb-2642.png +0 -0
  760. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fb.png +0 -0
  761. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fc-2640.png +0 -0
  762. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fc-2642.png +0 -0
  763. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fc.png +0 -0
  764. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fd-2640.png +0 -0
  765. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fd-2642.png +0 -0
  766. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fd.png +0 -0
  767. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fe-2640.png +0 -0
  768. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fe-2642.png +0 -0
  769. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fe.png +0 -0
  770. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3ff-2640.png +0 -0
  771. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3ff-2642.png +0 -0
  772. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3ff.png +0 -0
  773. package/web/app/site/sengi/assets/emoji/64/1f3cb-2640.png +0 -0
  774. package/web/app/site/sengi/assets/emoji/64/1f3cb-2642.png +0 -0
  775. package/web/app/site/sengi/assets/emoji/64/1f3cb.png +0 -0
  776. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fb-2640.png +0 -0
  777. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fb-2642.png +0 -0
  778. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fb.png +0 -0
  779. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fc-2640.png +0 -0
  780. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fc-2642.png +0 -0
  781. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fc.png +0 -0
  782. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fd-2640.png +0 -0
  783. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fd-2642.png +0 -0
  784. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fd.png +0 -0
  785. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fe-2640.png +0 -0
  786. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fe-2642.png +0 -0
  787. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fe.png +0 -0
  788. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3ff-2640.png +0 -0
  789. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3ff-2642.png +0 -0
  790. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3ff.png +0 -0
  791. package/web/app/site/sengi/assets/emoji/64/1f3cc-2640.png +0 -0
  792. package/web/app/site/sengi/assets/emoji/64/1f3cc-2642.png +0 -0
  793. package/web/app/site/sengi/assets/emoji/64/1f3cc.png +0 -0
  794. package/web/app/site/sengi/assets/emoji/64/1f3cd.png +0 -0
  795. package/web/app/site/sengi/assets/emoji/64/1f3ce.png +0 -0
  796. package/web/app/site/sengi/assets/emoji/64/1f3cf.png +0 -0
  797. package/web/app/site/sengi/assets/emoji/64/1f3d0.png +0 -0
  798. package/web/app/site/sengi/assets/emoji/64/1f3d1.png +0 -0
  799. package/web/app/site/sengi/assets/emoji/64/1f3d2.png +0 -0
  800. package/web/app/site/sengi/assets/emoji/64/1f3d3.png +0 -0
  801. package/web/app/site/sengi/assets/emoji/64/1f3d4.png +0 -0
  802. package/web/app/site/sengi/assets/emoji/64/1f3d5.png +0 -0
  803. package/web/app/site/sengi/assets/emoji/64/1f3d6.png +0 -0
  804. package/web/app/site/sengi/assets/emoji/64/1f3d7.png +0 -0
  805. package/web/app/site/sengi/assets/emoji/64/1f3d8.png +0 -0
  806. package/web/app/site/sengi/assets/emoji/64/1f3d9.png +0 -0
  807. package/web/app/site/sengi/assets/emoji/64/1f3da.png +0 -0
  808. package/web/app/site/sengi/assets/emoji/64/1f3db.png +0 -0
  809. package/web/app/site/sengi/assets/emoji/64/1f3dc.png +0 -0
  810. package/web/app/site/sengi/assets/emoji/64/1f3dd.png +0 -0
  811. package/web/app/site/sengi/assets/emoji/64/1f3de.png +0 -0
  812. package/web/app/site/sengi/assets/emoji/64/1f3df.png +0 -0
  813. package/web/app/site/sengi/assets/emoji/64/1f3e0.png +0 -0
  814. package/web/app/site/sengi/assets/emoji/64/1f3e1.png +0 -0
  815. package/web/app/site/sengi/assets/emoji/64/1f3e2.png +0 -0
  816. package/web/app/site/sengi/assets/emoji/64/1f3e3.png +0 -0
  817. package/web/app/site/sengi/assets/emoji/64/1f3e4.png +0 -0
  818. package/web/app/site/sengi/assets/emoji/64/1f3e5.png +0 -0
  819. package/web/app/site/sengi/assets/emoji/64/1f3e6.png +0 -0
  820. package/web/app/site/sengi/assets/emoji/64/1f3e7.png +0 -0
  821. package/web/app/site/sengi/assets/emoji/64/1f3e8.png +0 -0
  822. package/web/app/site/sengi/assets/emoji/64/1f3e9.png +0 -0
  823. package/web/app/site/sengi/assets/emoji/64/1f3ea.png +0 -0
  824. package/web/app/site/sengi/assets/emoji/64/1f3eb.png +0 -0
  825. package/web/app/site/sengi/assets/emoji/64/1f3ec.png +0 -0
  826. package/web/app/site/sengi/assets/emoji/64/1f3ed.png +0 -0
  827. package/web/app/site/sengi/assets/emoji/64/1f3ee.png +0 -0
  828. package/web/app/site/sengi/assets/emoji/64/1f3ef.png +0 -0
  829. package/web/app/site/sengi/assets/emoji/64/1f3f0.png +0 -0
  830. package/web/app/site/sengi/assets/emoji/64/1f3f3-1f308.png +0 -0
  831. package/web/app/site/sengi/assets/emoji/64/1f3f3-26a7.png +0 -0
  832. package/web/app/site/sengi/assets/emoji/64/1f3f3.png +0 -0
  833. package/web/app/site/sengi/assets/emoji/64/1f3f4-2620.png +0 -0
  834. package/web/app/site/sengi/assets/emoji/64/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png +0 -0
  835. package/web/app/site/sengi/assets/emoji/64/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png +0 -0
  836. package/web/app/site/sengi/assets/emoji/64/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png +0 -0
  837. package/web/app/site/sengi/assets/emoji/64/1f3f4.png +0 -0
  838. package/web/app/site/sengi/assets/emoji/64/1f3f5.png +0 -0
  839. package/web/app/site/sengi/assets/emoji/64/1f3f7.png +0 -0
  840. package/web/app/site/sengi/assets/emoji/64/1f3f8.png +0 -0
  841. package/web/app/site/sengi/assets/emoji/64/1f3f9.png +0 -0
  842. package/web/app/site/sengi/assets/emoji/64/1f3fa.png +0 -0
  843. package/web/app/site/sengi/assets/emoji/64/1f3fb.png +0 -0
  844. package/web/app/site/sengi/assets/emoji/64/1f3fc.png +0 -0
  845. package/web/app/site/sengi/assets/emoji/64/1f3fd.png +0 -0
  846. package/web/app/site/sengi/assets/emoji/64/1f3fe.png +0 -0
  847. package/web/app/site/sengi/assets/emoji/64/1f3ff.png +0 -0
  848. package/web/app/site/sengi/assets/emoji/64/1f400.png +0 -0
  849. package/web/app/site/sengi/assets/emoji/64/1f401.png +0 -0
  850. package/web/app/site/sengi/assets/emoji/64/1f402.png +0 -0
  851. package/web/app/site/sengi/assets/emoji/64/1f403.png +0 -0
  852. package/web/app/site/sengi/assets/emoji/64/1f404.png +0 -0
  853. package/web/app/site/sengi/assets/emoji/64/1f405.png +0 -0
  854. package/web/app/site/sengi/assets/emoji/64/1f406.png +0 -0
  855. package/web/app/site/sengi/assets/emoji/64/1f407.png +0 -0
  856. package/web/app/site/sengi/assets/emoji/64/1f408-2b1b.png +0 -0
  857. package/web/app/site/sengi/assets/emoji/64/1f408.png +0 -0
  858. package/web/app/site/sengi/assets/emoji/64/1f409.png +0 -0
  859. package/web/app/site/sengi/assets/emoji/64/1f40a.png +0 -0
  860. package/web/app/site/sengi/assets/emoji/64/1f40b.png +0 -0
  861. package/web/app/site/sengi/assets/emoji/64/1f40c.png +0 -0
  862. package/web/app/site/sengi/assets/emoji/64/1f40d.png +0 -0
  863. package/web/app/site/sengi/assets/emoji/64/1f40e.png +0 -0
  864. package/web/app/site/sengi/assets/emoji/64/1f40f.png +0 -0
  865. package/web/app/site/sengi/assets/emoji/64/1f410.png +0 -0
  866. package/web/app/site/sengi/assets/emoji/64/1f411.png +0 -0
  867. package/web/app/site/sengi/assets/emoji/64/1f412.png +0 -0
  868. package/web/app/site/sengi/assets/emoji/64/1f413.png +0 -0
  869. package/web/app/site/sengi/assets/emoji/64/1f414.png +0 -0
  870. package/web/app/site/sengi/assets/emoji/64/1f415-1f9ba.png +0 -0
  871. package/web/app/site/sengi/assets/emoji/64/1f415.png +0 -0
  872. package/web/app/site/sengi/assets/emoji/64/1f416.png +0 -0
  873. package/web/app/site/sengi/assets/emoji/64/1f417.png +0 -0
  874. package/web/app/site/sengi/assets/emoji/64/1f418.png +0 -0
  875. package/web/app/site/sengi/assets/emoji/64/1f419.png +0 -0
  876. package/web/app/site/sengi/assets/emoji/64/1f41a.png +0 -0
  877. package/web/app/site/sengi/assets/emoji/64/1f41b.png +0 -0
  878. package/web/app/site/sengi/assets/emoji/64/1f41c.png +0 -0
  879. package/web/app/site/sengi/assets/emoji/64/1f41d.png +0 -0
  880. package/web/app/site/sengi/assets/emoji/64/1f41e.png +0 -0
  881. package/web/app/site/sengi/assets/emoji/64/1f41f.png +0 -0
  882. package/web/app/site/sengi/assets/emoji/64/1f420.png +0 -0
  883. package/web/app/site/sengi/assets/emoji/64/1f421.png +0 -0
  884. package/web/app/site/sengi/assets/emoji/64/1f422.png +0 -0
  885. package/web/app/site/sengi/assets/emoji/64/1f423.png +0 -0
  886. package/web/app/site/sengi/assets/emoji/64/1f424.png +0 -0
  887. package/web/app/site/sengi/assets/emoji/64/1f425.png +0 -0
  888. package/web/app/site/sengi/assets/emoji/64/1f426-1f525.png +0 -0
  889. package/web/app/site/sengi/assets/emoji/64/1f426-2b1b.png +0 -0
  890. package/web/app/site/sengi/assets/emoji/64/1f426.png +0 -0
  891. package/web/app/site/sengi/assets/emoji/64/1f427.png +0 -0
  892. package/web/app/site/sengi/assets/emoji/64/1f428.png +0 -0
  893. package/web/app/site/sengi/assets/emoji/64/1f429.png +0 -0
  894. package/web/app/site/sengi/assets/emoji/64/1f42a.png +0 -0
  895. package/web/app/site/sengi/assets/emoji/64/1f42b.png +0 -0
  896. package/web/app/site/sengi/assets/emoji/64/1f42c.png +0 -0
  897. package/web/app/site/sengi/assets/emoji/64/1f42d.png +0 -0
  898. package/web/app/site/sengi/assets/emoji/64/1f42e.png +0 -0
  899. package/web/app/site/sengi/assets/emoji/64/1f42f.png +0 -0
  900. package/web/app/site/sengi/assets/emoji/64/1f430.png +0 -0
  901. package/web/app/site/sengi/assets/emoji/64/1f431.png +0 -0
  902. package/web/app/site/sengi/assets/emoji/64/1f432.png +0 -0
  903. package/web/app/site/sengi/assets/emoji/64/1f433.png +0 -0
  904. package/web/app/site/sengi/assets/emoji/64/1f434.png +0 -0
  905. package/web/app/site/sengi/assets/emoji/64/1f435.png +0 -0
  906. package/web/app/site/sengi/assets/emoji/64/1f436.png +0 -0
  907. package/web/app/site/sengi/assets/emoji/64/1f437.png +0 -0
  908. package/web/app/site/sengi/assets/emoji/64/1f438.png +0 -0
  909. package/web/app/site/sengi/assets/emoji/64/1f439.png +0 -0
  910. package/web/app/site/sengi/assets/emoji/64/1f43a.png +0 -0
  911. package/web/app/site/sengi/assets/emoji/64/1f43b-2744.png +0 -0
  912. package/web/app/site/sengi/assets/emoji/64/1f43b.png +0 -0
  913. package/web/app/site/sengi/assets/emoji/64/1f43c.png +0 -0
  914. package/web/app/site/sengi/assets/emoji/64/1f43d.png +0 -0
  915. package/web/app/site/sengi/assets/emoji/64/1f43e.png +0 -0
  916. package/web/app/site/sengi/assets/emoji/64/1f43f.png +0 -0
  917. package/web/app/site/sengi/assets/emoji/64/1f440.png +0 -0
  918. package/web/app/site/sengi/assets/emoji/64/1f441-1f5e8.png +0 -0
  919. package/web/app/site/sengi/assets/emoji/64/1f441.png +0 -0
  920. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fb.png +0 -0
  921. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fc.png +0 -0
  922. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fd.png +0 -0
  923. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fe.png +0 -0
  924. package/web/app/site/sengi/assets/emoji/64/1f442-1f3ff.png +0 -0
  925. package/web/app/site/sengi/assets/emoji/64/1f442.png +0 -0
  926. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fb.png +0 -0
  927. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fc.png +0 -0
  928. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fd.png +0 -0
  929. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fe.png +0 -0
  930. package/web/app/site/sengi/assets/emoji/64/1f443-1f3ff.png +0 -0
  931. package/web/app/site/sengi/assets/emoji/64/1f443.png +0 -0
  932. package/web/app/site/sengi/assets/emoji/64/1f444.png +0 -0
  933. package/web/app/site/sengi/assets/emoji/64/1f445.png +0 -0
  934. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fb.png +0 -0
  935. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fc.png +0 -0
  936. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fd.png +0 -0
  937. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fe.png +0 -0
  938. package/web/app/site/sengi/assets/emoji/64/1f446-1f3ff.png +0 -0
  939. package/web/app/site/sengi/assets/emoji/64/1f446.png +0 -0
  940. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fb.png +0 -0
  941. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fc.png +0 -0
  942. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fd.png +0 -0
  943. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fe.png +0 -0
  944. package/web/app/site/sengi/assets/emoji/64/1f447-1f3ff.png +0 -0
  945. package/web/app/site/sengi/assets/emoji/64/1f447.png +0 -0
  946. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fb.png +0 -0
  947. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fc.png +0 -0
  948. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fd.png +0 -0
  949. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fe.png +0 -0
  950. package/web/app/site/sengi/assets/emoji/64/1f448-1f3ff.png +0 -0
  951. package/web/app/site/sengi/assets/emoji/64/1f448.png +0 -0
  952. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fb.png +0 -0
  953. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fc.png +0 -0
  954. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fd.png +0 -0
  955. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fe.png +0 -0
  956. package/web/app/site/sengi/assets/emoji/64/1f449-1f3ff.png +0 -0
  957. package/web/app/site/sengi/assets/emoji/64/1f449.png +0 -0
  958. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fb.png +0 -0
  959. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fc.png +0 -0
  960. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fd.png +0 -0
  961. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fe.png +0 -0
  962. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3ff.png +0 -0
  963. package/web/app/site/sengi/assets/emoji/64/1f44a.png +0 -0
  964. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fb.png +0 -0
  965. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fc.png +0 -0
  966. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fd.png +0 -0
  967. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fe.png +0 -0
  968. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3ff.png +0 -0
  969. package/web/app/site/sengi/assets/emoji/64/1f44b.png +0 -0
  970. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fb.png +0 -0
  971. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fc.png +0 -0
  972. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fd.png +0 -0
  973. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fe.png +0 -0
  974. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3ff.png +0 -0
  975. package/web/app/site/sengi/assets/emoji/64/1f44c.png +0 -0
  976. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fb.png +0 -0
  977. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fc.png +0 -0
  978. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fd.png +0 -0
  979. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fe.png +0 -0
  980. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3ff.png +0 -0
  981. package/web/app/site/sengi/assets/emoji/64/1f44d.png +0 -0
  982. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fb.png +0 -0
  983. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fc.png +0 -0
  984. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fd.png +0 -0
  985. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fe.png +0 -0
  986. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3ff.png +0 -0
  987. package/web/app/site/sengi/assets/emoji/64/1f44e.png +0 -0
  988. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fb.png +0 -0
  989. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fc.png +0 -0
  990. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fd.png +0 -0
  991. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fe.png +0 -0
  992. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3ff.png +0 -0
  993. package/web/app/site/sengi/assets/emoji/64/1f44f.png +0 -0
  994. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fb.png +0 -0
  995. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fc.png +0 -0
  996. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fd.png +0 -0
  997. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fe.png +0 -0
  998. package/web/app/site/sengi/assets/emoji/64/1f450-1f3ff.png +0 -0
  999. package/web/app/site/sengi/assets/emoji/64/1f450.png +0 -0
  1000. package/web/app/site/sengi/assets/emoji/64/1f451.png +0 -0
  1001. package/web/app/site/sengi/assets/emoji/64/1f452.png +0 -0
  1002. package/web/app/site/sengi/assets/emoji/64/1f453.png +0 -0
  1003. package/web/app/site/sengi/assets/emoji/64/1f454.png +0 -0
  1004. package/web/app/site/sengi/assets/emoji/64/1f455.png +0 -0
  1005. package/web/app/site/sengi/assets/emoji/64/1f456.png +0 -0
  1006. package/web/app/site/sengi/assets/emoji/64/1f457.png +0 -0
  1007. package/web/app/site/sengi/assets/emoji/64/1f458.png +0 -0
  1008. package/web/app/site/sengi/assets/emoji/64/1f459.png +0 -0
  1009. package/web/app/site/sengi/assets/emoji/64/1f45a.png +0 -0
  1010. package/web/app/site/sengi/assets/emoji/64/1f45b.png +0 -0
  1011. package/web/app/site/sengi/assets/emoji/64/1f45c.png +0 -0
  1012. package/web/app/site/sengi/assets/emoji/64/1f45d.png +0 -0
  1013. package/web/app/site/sengi/assets/emoji/64/1f45e.png +0 -0
  1014. package/web/app/site/sengi/assets/emoji/64/1f45f.png +0 -0
  1015. package/web/app/site/sengi/assets/emoji/64/1f460.png +0 -0
  1016. package/web/app/site/sengi/assets/emoji/64/1f461.png +0 -0
  1017. package/web/app/site/sengi/assets/emoji/64/1f462.png +0 -0
  1018. package/web/app/site/sengi/assets/emoji/64/1f463.png +0 -0
  1019. package/web/app/site/sengi/assets/emoji/64/1f464.png +0 -0
  1020. package/web/app/site/sengi/assets/emoji/64/1f465.png +0 -0
  1021. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fb.png +0 -0
  1022. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fc.png +0 -0
  1023. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fd.png +0 -0
  1024. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fe.png +0 -0
  1025. package/web/app/site/sengi/assets/emoji/64/1f466-1f3ff.png +0 -0
  1026. package/web/app/site/sengi/assets/emoji/64/1f466.png +0 -0
  1027. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fb.png +0 -0
  1028. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fc.png +0 -0
  1029. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fd.png +0 -0
  1030. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fe.png +0 -0
  1031. package/web/app/site/sengi/assets/emoji/64/1f467-1f3ff.png +0 -0
  1032. package/web/app/site/sengi/assets/emoji/64/1f467.png +0 -0
  1033. package/web/app/site/sengi/assets/emoji/64/1f468-1f33e.png +0 -0
  1034. package/web/app/site/sengi/assets/emoji/64/1f468-1f373.png +0 -0
  1035. package/web/app/site/sengi/assets/emoji/64/1f468-1f37c.png +0 -0
  1036. package/web/app/site/sengi/assets/emoji/64/1f468-1f393.png +0 -0
  1037. package/web/app/site/sengi/assets/emoji/64/1f468-1f3a4.png +0 -0
  1038. package/web/app/site/sengi/assets/emoji/64/1f468-1f3a8.png +0 -0
  1039. package/web/app/site/sengi/assets/emoji/64/1f468-1f3eb.png +0 -0
  1040. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ed.png +0 -0
  1041. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f33e.png +0 -0
  1042. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f373.png +0 -0
  1043. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f37c.png +0 -0
  1044. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f393.png +0 -0
  1045. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3a4.png +0 -0
  1046. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3a8.png +0 -0
  1047. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3eb.png +0 -0
  1048. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3ed.png +0 -0
  1049. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f4bb.png +0 -0
  1050. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f4bc.png +0 -0
  1051. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f527.png +0 -0
  1052. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f52c.png +0 -0
  1053. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f680.png +0 -0
  1054. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f692.png +0 -0
  1055. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3fc.png +0 -0
  1056. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3fd.png +0 -0
  1057. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3fe.png +0 -0
  1058. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3ff.png +0 -0
  1059. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9af-27a1.png +0 -0
  1060. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9af.png +0 -0
  1061. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b0.png +0 -0
  1062. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b1.png +0 -0
  1063. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b2.png +0 -0
  1064. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b3.png +0 -0
  1065. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bc-27a1.png +0 -0
  1066. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bc.png +0 -0
  1067. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bd-27a1.png +0 -0
  1068. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bd.png +0 -0
  1069. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2695.png +0 -0
  1070. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2696.png +0 -0
  1071. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2708.png +0 -0
  1072. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fb.png +0 -0
  1073. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fc.png +0 -0
  1074. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fd.png +0 -0
  1075. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fe.png +0 -0
  1076. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3ff.png +0 -0
  1077. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fb.png +0 -0
  1078. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fc.png +0 -0
  1079. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fd.png +0 -0
  1080. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fe.png +0 -0
  1081. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3ff.png +0 -0
  1082. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb.png +0 -0
  1083. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f33e.png +0 -0
  1084. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f373.png +0 -0
  1085. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f37c.png +0 -0
  1086. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f393.png +0 -0
  1087. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3a4.png +0 -0
  1088. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3a8.png +0 -0
  1089. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3eb.png +0 -0
  1090. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3ed.png +0 -0
  1091. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f4bb.png +0 -0
  1092. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f4bc.png +0 -0
  1093. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f527.png +0 -0
  1094. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f52c.png +0 -0
  1095. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f680.png +0 -0
  1096. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f692.png +0 -0
  1097. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3fb.png +0 -0
  1098. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3fd.png +0 -0
  1099. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3fe.png +0 -0
  1100. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3ff.png +0 -0
  1101. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9af-27a1.png +0 -0
  1102. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9af.png +0 -0
  1103. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b0.png +0 -0
  1104. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b1.png +0 -0
  1105. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b2.png +0 -0
  1106. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b3.png +0 -0
  1107. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bc-27a1.png +0 -0
  1108. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bc.png +0 -0
  1109. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bd-27a1.png +0 -0
  1110. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bd.png +0 -0
  1111. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2695.png +0 -0
  1112. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2696.png +0 -0
  1113. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2708.png +0 -0
  1114. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fb.png +0 -0
  1115. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fc.png +0 -0
  1116. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fd.png +0 -0
  1117. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fe.png +0 -0
  1118. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3ff.png +0 -0
  1119. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fb.png +0 -0
  1120. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fc.png +0 -0
  1121. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fd.png +0 -0
  1122. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fe.png +0 -0
  1123. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3ff.png +0 -0
  1124. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc.png +0 -0
  1125. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f33e.png +0 -0
  1126. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f373.png +0 -0
  1127. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f37c.png +0 -0
  1128. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f393.png +0 -0
  1129. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3a4.png +0 -0
  1130. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3a8.png +0 -0
  1131. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3eb.png +0 -0
  1132. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3ed.png +0 -0
  1133. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f4bb.png +0 -0
  1134. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f4bc.png +0 -0
  1135. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f527.png +0 -0
  1136. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f52c.png +0 -0
  1137. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f680.png +0 -0
  1138. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f692.png +0 -0
  1139. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3fb.png +0 -0
  1140. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3fc.png +0 -0
  1141. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3fe.png +0 -0
  1142. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3ff.png +0 -0
  1143. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9af-27a1.png +0 -0
  1144. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9af.png +0 -0
  1145. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b0.png +0 -0
  1146. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b1.png +0 -0
  1147. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b2.png +0 -0
  1148. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b3.png +0 -0
  1149. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bc-27a1.png +0 -0
  1150. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bc.png +0 -0
  1151. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bd-27a1.png +0 -0
  1152. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bd.png +0 -0
  1153. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2695.png +0 -0
  1154. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2696.png +0 -0
  1155. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2708.png +0 -0
  1156. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fb.png +0 -0
  1157. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fc.png +0 -0
  1158. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fd.png +0 -0
  1159. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fe.png +0 -0
  1160. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3ff.png +0 -0
  1161. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fb.png +0 -0
  1162. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fc.png +0 -0
  1163. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fd.png +0 -0
  1164. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fe.png +0 -0
  1165. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3ff.png +0 -0
  1166. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd.png +0 -0
  1167. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f33e.png +0 -0
  1168. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f373.png +0 -0
  1169. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f37c.png +0 -0
  1170. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f393.png +0 -0
  1171. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3a4.png +0 -0
  1172. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3a8.png +0 -0
  1173. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3eb.png +0 -0
  1174. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3ed.png +0 -0
  1175. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f4bb.png +0 -0
  1176. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f4bc.png +0 -0
  1177. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f527.png +0 -0
  1178. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f52c.png +0 -0
  1179. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f680.png +0 -0
  1180. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f692.png +0 -0
  1181. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3fb.png +0 -0
  1182. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3fc.png +0 -0
  1183. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3fd.png +0 -0
  1184. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3ff.png +0 -0
  1185. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9af-27a1.png +0 -0
  1186. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9af.png +0 -0
  1187. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b0.png +0 -0
  1188. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b1.png +0 -0
  1189. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b2.png +0 -0
  1190. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b3.png +0 -0
  1191. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bc-27a1.png +0 -0
  1192. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bc.png +0 -0
  1193. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bd-27a1.png +0 -0
  1194. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bd.png +0 -0
  1195. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2695.png +0 -0
  1196. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2696.png +0 -0
  1197. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2708.png +0 -0
  1198. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fb.png +0 -0
  1199. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fc.png +0 -0
  1200. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fd.png +0 -0
  1201. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fe.png +0 -0
  1202. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3ff.png +0 -0
  1203. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fb.png +0 -0
  1204. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fc.png +0 -0
  1205. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fd.png +0 -0
  1206. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fe.png +0 -0
  1207. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3ff.png +0 -0
  1208. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe.png +0 -0
  1209. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f33e.png +0 -0
  1210. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f373.png +0 -0
  1211. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f37c.png +0 -0
  1212. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f393.png +0 -0
  1213. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3a4.png +0 -0
  1214. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3a8.png +0 -0
  1215. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3eb.png +0 -0
  1216. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3ed.png +0 -0
  1217. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f4bb.png +0 -0
  1218. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f4bc.png +0 -0
  1219. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f527.png +0 -0
  1220. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f52c.png +0 -0
  1221. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f680.png +0 -0
  1222. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f692.png +0 -0
  1223. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fb.png +0 -0
  1224. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fc.png +0 -0
  1225. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fd.png +0 -0
  1226. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fe.png +0 -0
  1227. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9af-27a1.png +0 -0
  1228. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9af.png +0 -0
  1229. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b0.png +0 -0
  1230. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b1.png +0 -0
  1231. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b2.png +0 -0
  1232. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b3.png +0 -0
  1233. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bc-27a1.png +0 -0
  1234. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bc.png +0 -0
  1235. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bd-27a1.png +0 -0
  1236. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bd.png +0 -0
  1237. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2695.png +0 -0
  1238. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2696.png +0 -0
  1239. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2708.png +0 -0
  1240. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fb.png +0 -0
  1241. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fc.png +0 -0
  1242. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fd.png +0 -0
  1243. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fe.png +0 -0
  1244. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3ff.png +0 -0
  1245. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fb.png +0 -0
  1246. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fc.png +0 -0
  1247. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fd.png +0 -0
  1248. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fe.png +0 -0
  1249. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3ff.png +0 -0
  1250. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff.png +0 -0
  1251. package/web/app/site/sengi/assets/emoji/64/1f468-1f466-1f466.png +0 -0
  1252. package/web/app/site/sengi/assets/emoji/64/1f468-1f466.png +0 -0
  1253. package/web/app/site/sengi/assets/emoji/64/1f468-1f467-1f466.png +0 -0
  1254. package/web/app/site/sengi/assets/emoji/64/1f468-1f467-1f467.png +0 -0
  1255. package/web/app/site/sengi/assets/emoji/64/1f468-1f467.png +0 -0
  1256. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f466-1f466.png +0 -0
  1257. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f466.png +0 -0
  1258. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f467-1f466.png +0 -0
  1259. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f467-1f467.png +0 -0
  1260. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f467.png +0 -0
  1261. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f466-1f466.png +0 -0
  1262. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f466.png +0 -0
  1263. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f467-1f466.png +0 -0
  1264. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f467-1f467.png +0 -0
  1265. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f467.png +0 -0
  1266. package/web/app/site/sengi/assets/emoji/64/1f468-1f4bb.png +0 -0
  1267. package/web/app/site/sengi/assets/emoji/64/1f468-1f4bc.png +0 -0
  1268. package/web/app/site/sengi/assets/emoji/64/1f468-1f527.png +0 -0
  1269. package/web/app/site/sengi/assets/emoji/64/1f468-1f52c.png +0 -0
  1270. package/web/app/site/sengi/assets/emoji/64/1f468-1f680.png +0 -0
  1271. package/web/app/site/sengi/assets/emoji/64/1f468-1f692.png +0 -0
  1272. package/web/app/site/sengi/assets/emoji/64/1f468-1f9af-27a1.png +0 -0
  1273. package/web/app/site/sengi/assets/emoji/64/1f468-1f9af.png +0 -0
  1274. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b0.png +0 -0
  1275. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b1.png +0 -0
  1276. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b2.png +0 -0
  1277. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b3.png +0 -0
  1278. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bc-27a1.png +0 -0
  1279. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bc.png +0 -0
  1280. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bd-27a1.png +0 -0
  1281. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bd.png +0 -0
  1282. package/web/app/site/sengi/assets/emoji/64/1f468-2695.png +0 -0
  1283. package/web/app/site/sengi/assets/emoji/64/1f468-2696.png +0 -0
  1284. package/web/app/site/sengi/assets/emoji/64/1f468-2708.png +0 -0
  1285. package/web/app/site/sengi/assets/emoji/64/1f468-2764-1f468.png +0 -0
  1286. package/web/app/site/sengi/assets/emoji/64/1f468-2764-1f48b-1f468.png +0 -0
  1287. package/web/app/site/sengi/assets/emoji/64/1f468.png +0 -0
  1288. package/web/app/site/sengi/assets/emoji/64/1f469-1f33e.png +0 -0
  1289. package/web/app/site/sengi/assets/emoji/64/1f469-1f373.png +0 -0
  1290. package/web/app/site/sengi/assets/emoji/64/1f469-1f37c.png +0 -0
  1291. package/web/app/site/sengi/assets/emoji/64/1f469-1f393.png +0 -0
  1292. package/web/app/site/sengi/assets/emoji/64/1f469-1f3a4.png +0 -0
  1293. package/web/app/site/sengi/assets/emoji/64/1f469-1f3a8.png +0 -0
  1294. package/web/app/site/sengi/assets/emoji/64/1f469-1f3eb.png +0 -0
  1295. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ed.png +0 -0
  1296. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f33e.png +0 -0
  1297. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f373.png +0 -0
  1298. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f37c.png +0 -0
  1299. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f393.png +0 -0
  1300. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3a4.png +0 -0
  1301. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3a8.png +0 -0
  1302. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3eb.png +0 -0
  1303. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3ed.png +0 -0
  1304. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f4bb.png +0 -0
  1305. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f4bc.png +0 -0
  1306. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f527.png +0 -0
  1307. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f52c.png +0 -0
  1308. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f680.png +0 -0
  1309. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f692.png +0 -0
  1310. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3fc.png +0 -0
  1311. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3fd.png +0 -0
  1312. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3fe.png +0 -0
  1313. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3ff.png +0 -0
  1314. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3fc.png +0 -0
  1315. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3fd.png +0 -0
  1316. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3fe.png +0 -0
  1317. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3ff.png +0 -0
  1318. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9af-27a1.png +0 -0
  1319. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9af.png +0 -0
  1320. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b0.png +0 -0
  1321. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b1.png +0 -0
  1322. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b2.png +0 -0
  1323. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b3.png +0 -0
  1324. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bc-27a1.png +0 -0
  1325. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bc.png +0 -0
  1326. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bd-27a1.png +0 -0
  1327. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bd.png +0 -0
  1328. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2695.png +0 -0
  1329. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2696.png +0 -0
  1330. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2708.png +0 -0
  1331. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fb.png +0 -0
  1332. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fc.png +0 -0
  1333. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fd.png +0 -0
  1334. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fe.png +0 -0
  1335. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3ff.png +0 -0
  1336. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fb.png +0 -0
  1337. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fc.png +0 -0
  1338. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fd.png +0 -0
  1339. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fe.png +0 -0
  1340. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3ff.png +0 -0
  1341. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fb.png +0 -0
  1342. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fc.png +0 -0
  1343. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fd.png +0 -0
  1344. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fe.png +0 -0
  1345. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3ff.png +0 -0
  1346. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fb.png +0 -0
  1347. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fc.png +0 -0
  1348. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fd.png +0 -0
  1349. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fe.png +0 -0
  1350. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3ff.png +0 -0
  1351. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb.png +0 -0
  1352. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f33e.png +0 -0
  1353. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f373.png +0 -0
  1354. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f37c.png +0 -0
  1355. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f393.png +0 -0
  1356. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3a4.png +0 -0
  1357. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3a8.png +0 -0
  1358. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3eb.png +0 -0
  1359. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3ed.png +0 -0
  1360. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f4bb.png +0 -0
  1361. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f4bc.png +0 -0
  1362. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f527.png +0 -0
  1363. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f52c.png +0 -0
  1364. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f680.png +0 -0
  1365. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f692.png +0 -0
  1366. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3fb.png +0 -0
  1367. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3fd.png +0 -0
  1368. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3fe.png +0 -0
  1369. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3ff.png +0 -0
  1370. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3fb.png +0 -0
  1371. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3fd.png +0 -0
  1372. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3fe.png +0 -0
  1373. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3ff.png +0 -0
  1374. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9af-27a1.png +0 -0
  1375. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9af.png +0 -0
  1376. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b0.png +0 -0
  1377. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b1.png +0 -0
  1378. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b2.png +0 -0
  1379. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b3.png +0 -0
  1380. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bc-27a1.png +0 -0
  1381. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bc.png +0 -0
  1382. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bd-27a1.png +0 -0
  1383. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bd.png +0 -0
  1384. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2695.png +0 -0
  1385. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2696.png +0 -0
  1386. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2708.png +0 -0
  1387. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fb.png +0 -0
  1388. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fc.png +0 -0
  1389. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fd.png +0 -0
  1390. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fe.png +0 -0
  1391. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3ff.png +0 -0
  1392. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fb.png +0 -0
  1393. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fc.png +0 -0
  1394. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fd.png +0 -0
  1395. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fe.png +0 -0
  1396. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3ff.png +0 -0
  1397. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fb.png +0 -0
  1398. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fc.png +0 -0
  1399. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fd.png +0 -0
  1400. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fe.png +0 -0
  1401. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3ff.png +0 -0
  1402. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fb.png +0 -0
  1403. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fc.png +0 -0
  1404. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fd.png +0 -0
  1405. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fe.png +0 -0
  1406. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3ff.png +0 -0
  1407. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc.png +0 -0
  1408. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f33e.png +0 -0
  1409. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f373.png +0 -0
  1410. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f37c.png +0 -0
  1411. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f393.png +0 -0
  1412. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3a4.png +0 -0
  1413. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3a8.png +0 -0
  1414. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3eb.png +0 -0
  1415. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3ed.png +0 -0
  1416. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f4bb.png +0 -0
  1417. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f4bc.png +0 -0
  1418. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f527.png +0 -0
  1419. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f52c.png +0 -0
  1420. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f680.png +0 -0
  1421. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f692.png +0 -0
  1422. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3fb.png +0 -0
  1423. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3fc.png +0 -0
  1424. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3fe.png +0 -0
  1425. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3ff.png +0 -0
  1426. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3fb.png +0 -0
  1427. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3fc.png +0 -0
  1428. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3fe.png +0 -0
  1429. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3ff.png +0 -0
  1430. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9af-27a1.png +0 -0
  1431. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9af.png +0 -0
  1432. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b0.png +0 -0
  1433. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b1.png +0 -0
  1434. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b2.png +0 -0
  1435. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b3.png +0 -0
  1436. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bc-27a1.png +0 -0
  1437. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bc.png +0 -0
  1438. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bd-27a1.png +0 -0
  1439. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bd.png +0 -0
  1440. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2695.png +0 -0
  1441. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2696.png +0 -0
  1442. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2708.png +0 -0
  1443. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fb.png +0 -0
  1444. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fc.png +0 -0
  1445. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fd.png +0 -0
  1446. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fe.png +0 -0
  1447. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3ff.png +0 -0
  1448. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fb.png +0 -0
  1449. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fc.png +0 -0
  1450. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fd.png +0 -0
  1451. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fe.png +0 -0
  1452. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3ff.png +0 -0
  1453. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fb.png +0 -0
  1454. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fc.png +0 -0
  1455. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fd.png +0 -0
  1456. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fe.png +0 -0
  1457. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3ff.png +0 -0
  1458. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fb.png +0 -0
  1459. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fc.png +0 -0
  1460. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fd.png +0 -0
  1461. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fe.png +0 -0
  1462. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3ff.png +0 -0
  1463. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd.png +0 -0
  1464. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f33e.png +0 -0
  1465. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f373.png +0 -0
  1466. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f37c.png +0 -0
  1467. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f393.png +0 -0
  1468. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3a4.png +0 -0
  1469. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3a8.png +0 -0
  1470. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3eb.png +0 -0
  1471. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3ed.png +0 -0
  1472. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f4bb.png +0 -0
  1473. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f4bc.png +0 -0
  1474. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f527.png +0 -0
  1475. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f52c.png +0 -0
  1476. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f680.png +0 -0
  1477. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f692.png +0 -0
  1478. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3fb.png +0 -0
  1479. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3fc.png +0 -0
  1480. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3fd.png +0 -0
  1481. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3ff.png +0 -0
  1482. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3fb.png +0 -0
  1483. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3fc.png +0 -0
  1484. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3fd.png +0 -0
  1485. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3ff.png +0 -0
  1486. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9af-27a1.png +0 -0
  1487. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9af.png +0 -0
  1488. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b0.png +0 -0
  1489. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b1.png +0 -0
  1490. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b2.png +0 -0
  1491. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b3.png +0 -0
  1492. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bc-27a1.png +0 -0
  1493. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bc.png +0 -0
  1494. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bd-27a1.png +0 -0
  1495. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bd.png +0 -0
  1496. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2695.png +0 -0
  1497. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2696.png +0 -0
  1498. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2708.png +0 -0
  1499. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fb.png +0 -0
  1500. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fc.png +0 -0
  1501. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fd.png +0 -0
  1502. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fe.png +0 -0
  1503. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3ff.png +0 -0
  1504. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fb.png +0 -0
  1505. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fc.png +0 -0
  1506. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fd.png +0 -0
  1507. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fe.png +0 -0
  1508. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3ff.png +0 -0
  1509. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fb.png +0 -0
  1510. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fc.png +0 -0
  1511. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fd.png +0 -0
  1512. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fe.png +0 -0
  1513. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3ff.png +0 -0
  1514. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fb.png +0 -0
  1515. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fc.png +0 -0
  1516. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fd.png +0 -0
  1517. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fe.png +0 -0
  1518. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3ff.png +0 -0
  1519. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe.png +0 -0
  1520. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f33e.png +0 -0
  1521. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f373.png +0 -0
  1522. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f37c.png +0 -0
  1523. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f393.png +0 -0
  1524. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3a4.png +0 -0
  1525. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3a8.png +0 -0
  1526. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3eb.png +0 -0
  1527. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3ed.png +0 -0
  1528. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f4bb.png +0 -0
  1529. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f4bc.png +0 -0
  1530. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f527.png +0 -0
  1531. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f52c.png +0 -0
  1532. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f680.png +0 -0
  1533. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f692.png +0 -0
  1534. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fb.png +0 -0
  1535. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fc.png +0 -0
  1536. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fd.png +0 -0
  1537. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fe.png +0 -0
  1538. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fb.png +0 -0
  1539. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fc.png +0 -0
  1540. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fd.png +0 -0
  1541. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fe.png +0 -0
  1542. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9af-27a1.png +0 -0
  1543. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9af.png +0 -0
  1544. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b0.png +0 -0
  1545. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b1.png +0 -0
  1546. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b2.png +0 -0
  1547. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b3.png +0 -0
  1548. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bc-27a1.png +0 -0
  1549. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bc.png +0 -0
  1550. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bd-27a1.png +0 -0
  1551. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bd.png +0 -0
  1552. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2695.png +0 -0
  1553. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2696.png +0 -0
  1554. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2708.png +0 -0
  1555. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fb.png +0 -0
  1556. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fc.png +0 -0
  1557. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fd.png +0 -0
  1558. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fe.png +0 -0
  1559. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3ff.png +0 -0
  1560. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fb.png +0 -0
  1561. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fc.png +0 -0
  1562. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fd.png +0 -0
  1563. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fe.png +0 -0
  1564. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3ff.png +0 -0
  1565. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fb.png +0 -0
  1566. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fc.png +0 -0
  1567. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fd.png +0 -0
  1568. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fe.png +0 -0
  1569. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3ff.png +0 -0
  1570. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fb.png +0 -0
  1571. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fc.png +0 -0
  1572. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fd.png +0 -0
  1573. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fe.png +0 -0
  1574. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3ff.png +0 -0
  1575. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff.png +0 -0
  1576. package/web/app/site/sengi/assets/emoji/64/1f469-1f466-1f466.png +0 -0
  1577. package/web/app/site/sengi/assets/emoji/64/1f469-1f466.png +0 -0
  1578. package/web/app/site/sengi/assets/emoji/64/1f469-1f467-1f466.png +0 -0
  1579. package/web/app/site/sengi/assets/emoji/64/1f469-1f467-1f467.png +0 -0
  1580. package/web/app/site/sengi/assets/emoji/64/1f469-1f467.png +0 -0
  1581. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f466-1f466.png +0 -0
  1582. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f466.png +0 -0
  1583. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f467-1f466.png +0 -0
  1584. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f467-1f467.png +0 -0
  1585. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f467.png +0 -0
  1586. package/web/app/site/sengi/assets/emoji/64/1f469-1f4bb.png +0 -0
  1587. package/web/app/site/sengi/assets/emoji/64/1f469-1f4bc.png +0 -0
  1588. package/web/app/site/sengi/assets/emoji/64/1f469-1f527.png +0 -0
  1589. package/web/app/site/sengi/assets/emoji/64/1f469-1f52c.png +0 -0
  1590. package/web/app/site/sengi/assets/emoji/64/1f469-1f680.png +0 -0
  1591. package/web/app/site/sengi/assets/emoji/64/1f469-1f692.png +0 -0
  1592. package/web/app/site/sengi/assets/emoji/64/1f469-1f9af-27a1.png +0 -0
  1593. package/web/app/site/sengi/assets/emoji/64/1f469-1f9af.png +0 -0
  1594. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b0.png +0 -0
  1595. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b1.png +0 -0
  1596. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b2.png +0 -0
  1597. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b3.png +0 -0
  1598. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bc-27a1.png +0 -0
  1599. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bc.png +0 -0
  1600. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bd-27a1.png +0 -0
  1601. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bd.png +0 -0
  1602. package/web/app/site/sengi/assets/emoji/64/1f469-2695.png +0 -0
  1603. package/web/app/site/sengi/assets/emoji/64/1f469-2696.png +0 -0
  1604. package/web/app/site/sengi/assets/emoji/64/1f469-2708.png +0 -0
  1605. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f468.png +0 -0
  1606. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f469.png +0 -0
  1607. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f48b-1f468.png +0 -0
  1608. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f48b-1f469.png +0 -0
  1609. package/web/app/site/sengi/assets/emoji/64/1f469.png +0 -0
  1610. package/web/app/site/sengi/assets/emoji/64/1f46a.png +0 -0
  1611. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fb.png +0 -0
  1612. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fc.png +0 -0
  1613. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fd.png +0 -0
  1614. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fe.png +0 -0
  1615. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3ff.png +0 -0
  1616. package/web/app/site/sengi/assets/emoji/64/1f46b.png +0 -0
  1617. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fb.png +0 -0
  1618. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fc.png +0 -0
  1619. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fd.png +0 -0
  1620. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fe.png +0 -0
  1621. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3ff.png +0 -0
  1622. package/web/app/site/sengi/assets/emoji/64/1f46c.png +0 -0
  1623. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fb.png +0 -0
  1624. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fc.png +0 -0
  1625. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fd.png +0 -0
  1626. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fe.png +0 -0
  1627. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3ff.png +0 -0
  1628. package/web/app/site/sengi/assets/emoji/64/1f46d.png +0 -0
  1629. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fb-2640.png +0 -0
  1630. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fb-2642.png +0 -0
  1631. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fb.png +0 -0
  1632. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fc-2640.png +0 -0
  1633. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fc-2642.png +0 -0
  1634. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fc.png +0 -0
  1635. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fd-2640.png +0 -0
  1636. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fd-2642.png +0 -0
  1637. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fd.png +0 -0
  1638. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fe-2640.png +0 -0
  1639. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fe-2642.png +0 -0
  1640. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fe.png +0 -0
  1641. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3ff-2640.png +0 -0
  1642. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3ff-2642.png +0 -0
  1643. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3ff.png +0 -0
  1644. package/web/app/site/sengi/assets/emoji/64/1f46e-2640.png +0 -0
  1645. package/web/app/site/sengi/assets/emoji/64/1f46e-2642.png +0 -0
  1646. package/web/app/site/sengi/assets/emoji/64/1f46e.png +0 -0
  1647. package/web/app/site/sengi/assets/emoji/64/1f46f-2640.png +0 -0
  1648. package/web/app/site/sengi/assets/emoji/64/1f46f-2642.png +0 -0
  1649. package/web/app/site/sengi/assets/emoji/64/1f46f.png +0 -0
  1650. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fb-2640.png +0 -0
  1651. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fb-2642.png +0 -0
  1652. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fb.png +0 -0
  1653. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fc-2640.png +0 -0
  1654. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fc-2642.png +0 -0
  1655. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fc.png +0 -0
  1656. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fd-2640.png +0 -0
  1657. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fd-2642.png +0 -0
  1658. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fd.png +0 -0
  1659. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fe-2640.png +0 -0
  1660. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fe-2642.png +0 -0
  1661. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fe.png +0 -0
  1662. package/web/app/site/sengi/assets/emoji/64/1f470-1f3ff-2640.png +0 -0
  1663. package/web/app/site/sengi/assets/emoji/64/1f470-1f3ff-2642.png +0 -0
  1664. package/web/app/site/sengi/assets/emoji/64/1f470-1f3ff.png +0 -0
  1665. package/web/app/site/sengi/assets/emoji/64/1f470-2640.png +0 -0
  1666. package/web/app/site/sengi/assets/emoji/64/1f470-2642.png +0 -0
  1667. package/web/app/site/sengi/assets/emoji/64/1f470.png +0 -0
  1668. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fb-2640.png +0 -0
  1669. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fb-2642.png +0 -0
  1670. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fb.png +0 -0
  1671. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fc-2640.png +0 -0
  1672. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fc-2642.png +0 -0
  1673. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fc.png +0 -0
  1674. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fd-2640.png +0 -0
  1675. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fd-2642.png +0 -0
  1676. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fd.png +0 -0
  1677. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fe-2640.png +0 -0
  1678. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fe-2642.png +0 -0
  1679. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fe.png +0 -0
  1680. package/web/app/site/sengi/assets/emoji/64/1f471-1f3ff-2640.png +0 -0
  1681. package/web/app/site/sengi/assets/emoji/64/1f471-1f3ff-2642.png +0 -0
  1682. package/web/app/site/sengi/assets/emoji/64/1f471-1f3ff.png +0 -0
  1683. package/web/app/site/sengi/assets/emoji/64/1f471-2640.png +0 -0
  1684. package/web/app/site/sengi/assets/emoji/64/1f471-2642.png +0 -0
  1685. package/web/app/site/sengi/assets/emoji/64/1f471.png +0 -0
  1686. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fb.png +0 -0
  1687. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fc.png +0 -0
  1688. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fd.png +0 -0
  1689. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fe.png +0 -0
  1690. package/web/app/site/sengi/assets/emoji/64/1f472-1f3ff.png +0 -0
  1691. package/web/app/site/sengi/assets/emoji/64/1f472.png +0 -0
  1692. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fb-2640.png +0 -0
  1693. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fb-2642.png +0 -0
  1694. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fb.png +0 -0
  1695. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fc-2640.png +0 -0
  1696. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fc-2642.png +0 -0
  1697. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fc.png +0 -0
  1698. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fd-2640.png +0 -0
  1699. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fd-2642.png +0 -0
  1700. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fd.png +0 -0
  1701. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fe-2640.png +0 -0
  1702. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fe-2642.png +0 -0
  1703. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fe.png +0 -0
  1704. package/web/app/site/sengi/assets/emoji/64/1f473-1f3ff-2640.png +0 -0
  1705. package/web/app/site/sengi/assets/emoji/64/1f473-1f3ff-2642.png +0 -0
  1706. package/web/app/site/sengi/assets/emoji/64/1f473-1f3ff.png +0 -0
  1707. package/web/app/site/sengi/assets/emoji/64/1f473-2640.png +0 -0
  1708. package/web/app/site/sengi/assets/emoji/64/1f473-2642.png +0 -0
  1709. package/web/app/site/sengi/assets/emoji/64/1f473.png +0 -0
  1710. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fb.png +0 -0
  1711. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fc.png +0 -0
  1712. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fd.png +0 -0
  1713. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fe.png +0 -0
  1714. package/web/app/site/sengi/assets/emoji/64/1f474-1f3ff.png +0 -0
  1715. package/web/app/site/sengi/assets/emoji/64/1f474.png +0 -0
  1716. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fb.png +0 -0
  1717. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fc.png +0 -0
  1718. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fd.png +0 -0
  1719. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fe.png +0 -0
  1720. package/web/app/site/sengi/assets/emoji/64/1f475-1f3ff.png +0 -0
  1721. package/web/app/site/sengi/assets/emoji/64/1f475.png +0 -0
  1722. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fb.png +0 -0
  1723. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fc.png +0 -0
  1724. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fd.png +0 -0
  1725. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fe.png +0 -0
  1726. package/web/app/site/sengi/assets/emoji/64/1f476-1f3ff.png +0 -0
  1727. package/web/app/site/sengi/assets/emoji/64/1f476.png +0 -0
  1728. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fb-2640.png +0 -0
  1729. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fb-2642.png +0 -0
  1730. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fb.png +0 -0
  1731. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fc-2640.png +0 -0
  1732. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fc-2642.png +0 -0
  1733. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fc.png +0 -0
  1734. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fd-2640.png +0 -0
  1735. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fd-2642.png +0 -0
  1736. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fd.png +0 -0
  1737. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fe-2640.png +0 -0
  1738. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fe-2642.png +0 -0
  1739. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fe.png +0 -0
  1740. package/web/app/site/sengi/assets/emoji/64/1f477-1f3ff-2640.png +0 -0
  1741. package/web/app/site/sengi/assets/emoji/64/1f477-1f3ff-2642.png +0 -0
  1742. package/web/app/site/sengi/assets/emoji/64/1f477-1f3ff.png +0 -0
  1743. package/web/app/site/sengi/assets/emoji/64/1f477-2640.png +0 -0
  1744. package/web/app/site/sengi/assets/emoji/64/1f477-2642.png +0 -0
  1745. package/web/app/site/sengi/assets/emoji/64/1f477.png +0 -0
  1746. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fb.png +0 -0
  1747. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fc.png +0 -0
  1748. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fd.png +0 -0
  1749. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fe.png +0 -0
  1750. package/web/app/site/sengi/assets/emoji/64/1f478-1f3ff.png +0 -0
  1751. package/web/app/site/sengi/assets/emoji/64/1f478.png +0 -0
  1752. package/web/app/site/sengi/assets/emoji/64/1f479.png +0 -0
  1753. package/web/app/site/sengi/assets/emoji/64/1f47a.png +0 -0
  1754. package/web/app/site/sengi/assets/emoji/64/1f47b.png +0 -0
  1755. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fb.png +0 -0
  1756. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fc.png +0 -0
  1757. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fd.png +0 -0
  1758. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fe.png +0 -0
  1759. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3ff.png +0 -0
  1760. package/web/app/site/sengi/assets/emoji/64/1f47c.png +0 -0
  1761. package/web/app/site/sengi/assets/emoji/64/1f47d.png +0 -0
  1762. package/web/app/site/sengi/assets/emoji/64/1f47e.png +0 -0
  1763. package/web/app/site/sengi/assets/emoji/64/1f47f.png +0 -0
  1764. package/web/app/site/sengi/assets/emoji/64/1f480.png +0 -0
  1765. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fb-2640.png +0 -0
  1766. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fb-2642.png +0 -0
  1767. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fb.png +0 -0
  1768. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fc-2640.png +0 -0
  1769. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fc-2642.png +0 -0
  1770. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fc.png +0 -0
  1771. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fd-2640.png +0 -0
  1772. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fd-2642.png +0 -0
  1773. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fd.png +0 -0
  1774. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fe-2640.png +0 -0
  1775. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fe-2642.png +0 -0
  1776. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fe.png +0 -0
  1777. package/web/app/site/sengi/assets/emoji/64/1f481-1f3ff-2640.png +0 -0
  1778. package/web/app/site/sengi/assets/emoji/64/1f481-1f3ff-2642.png +0 -0
  1779. package/web/app/site/sengi/assets/emoji/64/1f481-1f3ff.png +0 -0
  1780. package/web/app/site/sengi/assets/emoji/64/1f481-2640.png +0 -0
  1781. package/web/app/site/sengi/assets/emoji/64/1f481-2642.png +0 -0
  1782. package/web/app/site/sengi/assets/emoji/64/1f481.png +0 -0
  1783. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fb-2640.png +0 -0
  1784. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fb-2642.png +0 -0
  1785. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fb.png +0 -0
  1786. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fc-2640.png +0 -0
  1787. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fc-2642.png +0 -0
  1788. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fc.png +0 -0
  1789. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fd-2640.png +0 -0
  1790. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fd-2642.png +0 -0
  1791. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fd.png +0 -0
  1792. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fe-2640.png +0 -0
  1793. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fe-2642.png +0 -0
  1794. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fe.png +0 -0
  1795. package/web/app/site/sengi/assets/emoji/64/1f482-1f3ff-2640.png +0 -0
  1796. package/web/app/site/sengi/assets/emoji/64/1f482-1f3ff-2642.png +0 -0
  1797. package/web/app/site/sengi/assets/emoji/64/1f482-1f3ff.png +0 -0
  1798. package/web/app/site/sengi/assets/emoji/64/1f482-2640.png +0 -0
  1799. package/web/app/site/sengi/assets/emoji/64/1f482-2642.png +0 -0
  1800. package/web/app/site/sengi/assets/emoji/64/1f482.png +0 -0
  1801. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fb.png +0 -0
  1802. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fc.png +0 -0
  1803. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fd.png +0 -0
  1804. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fe.png +0 -0
  1805. package/web/app/site/sengi/assets/emoji/64/1f483-1f3ff.png +0 -0
  1806. package/web/app/site/sengi/assets/emoji/64/1f483.png +0 -0
  1807. package/web/app/site/sengi/assets/emoji/64/1f484.png +0 -0
  1808. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fb.png +0 -0
  1809. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fc.png +0 -0
  1810. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fd.png +0 -0
  1811. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fe.png +0 -0
  1812. package/web/app/site/sengi/assets/emoji/64/1f485-1f3ff.png +0 -0
  1813. package/web/app/site/sengi/assets/emoji/64/1f485.png +0 -0
  1814. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fb-2640.png +0 -0
  1815. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fb-2642.png +0 -0
  1816. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fb.png +0 -0
  1817. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fc-2640.png +0 -0
  1818. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fc-2642.png +0 -0
  1819. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fc.png +0 -0
  1820. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fd-2640.png +0 -0
  1821. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fd-2642.png +0 -0
  1822. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fd.png +0 -0
  1823. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fe-2640.png +0 -0
  1824. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fe-2642.png +0 -0
  1825. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fe.png +0 -0
  1826. package/web/app/site/sengi/assets/emoji/64/1f486-1f3ff-2640.png +0 -0
  1827. package/web/app/site/sengi/assets/emoji/64/1f486-1f3ff-2642.png +0 -0
  1828. package/web/app/site/sengi/assets/emoji/64/1f486-1f3ff.png +0 -0
  1829. package/web/app/site/sengi/assets/emoji/64/1f486-2640.png +0 -0
  1830. package/web/app/site/sengi/assets/emoji/64/1f486-2642.png +0 -0
  1831. package/web/app/site/sengi/assets/emoji/64/1f486.png +0 -0
  1832. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fb-2640.png +0 -0
  1833. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fb-2642.png +0 -0
  1834. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fb.png +0 -0
  1835. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fc-2640.png +0 -0
  1836. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fc-2642.png +0 -0
  1837. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fc.png +0 -0
  1838. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fd-2640.png +0 -0
  1839. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fd-2642.png +0 -0
  1840. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fd.png +0 -0
  1841. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fe-2640.png +0 -0
  1842. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fe-2642.png +0 -0
  1843. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fe.png +0 -0
  1844. package/web/app/site/sengi/assets/emoji/64/1f487-1f3ff-2640.png +0 -0
  1845. package/web/app/site/sengi/assets/emoji/64/1f487-1f3ff-2642.png +0 -0
  1846. package/web/app/site/sengi/assets/emoji/64/1f487-1f3ff.png +0 -0
  1847. package/web/app/site/sengi/assets/emoji/64/1f487-2640.png +0 -0
  1848. package/web/app/site/sengi/assets/emoji/64/1f487-2642.png +0 -0
  1849. package/web/app/site/sengi/assets/emoji/64/1f487.png +0 -0
  1850. package/web/app/site/sengi/assets/emoji/64/1f488.png +0 -0
  1851. package/web/app/site/sengi/assets/emoji/64/1f489.png +0 -0
  1852. package/web/app/site/sengi/assets/emoji/64/1f48a.png +0 -0
  1853. package/web/app/site/sengi/assets/emoji/64/1f48b.png +0 -0
  1854. package/web/app/site/sengi/assets/emoji/64/1f48c.png +0 -0
  1855. package/web/app/site/sengi/assets/emoji/64/1f48d.png +0 -0
  1856. package/web/app/site/sengi/assets/emoji/64/1f48e.png +0 -0
  1857. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fb.png +0 -0
  1858. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fc.png +0 -0
  1859. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fd.png +0 -0
  1860. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fe.png +0 -0
  1861. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3ff.png +0 -0
  1862. package/web/app/site/sengi/assets/emoji/64/1f48f.png +0 -0
  1863. package/web/app/site/sengi/assets/emoji/64/1f490.png +0 -0
  1864. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fb.png +0 -0
  1865. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fc.png +0 -0
  1866. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fd.png +0 -0
  1867. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fe.png +0 -0
  1868. package/web/app/site/sengi/assets/emoji/64/1f491-1f3ff.png +0 -0
  1869. package/web/app/site/sengi/assets/emoji/64/1f491.png +0 -0
  1870. package/web/app/site/sengi/assets/emoji/64/1f492.png +0 -0
  1871. package/web/app/site/sengi/assets/emoji/64/1f493.png +0 -0
  1872. package/web/app/site/sengi/assets/emoji/64/1f494.png +0 -0
  1873. package/web/app/site/sengi/assets/emoji/64/1f495.png +0 -0
  1874. package/web/app/site/sengi/assets/emoji/64/1f496.png +0 -0
  1875. package/web/app/site/sengi/assets/emoji/64/1f497.png +0 -0
  1876. package/web/app/site/sengi/assets/emoji/64/1f498.png +0 -0
  1877. package/web/app/site/sengi/assets/emoji/64/1f499.png +0 -0
  1878. package/web/app/site/sengi/assets/emoji/64/1f49a.png +0 -0
  1879. package/web/app/site/sengi/assets/emoji/64/1f49b.png +0 -0
  1880. package/web/app/site/sengi/assets/emoji/64/1f49c.png +0 -0
  1881. package/web/app/site/sengi/assets/emoji/64/1f49d.png +0 -0
  1882. package/web/app/site/sengi/assets/emoji/64/1f49e.png +0 -0
  1883. package/web/app/site/sengi/assets/emoji/64/1f49f.png +0 -0
  1884. package/web/app/site/sengi/assets/emoji/64/1f4a0.png +0 -0
  1885. package/web/app/site/sengi/assets/emoji/64/1f4a1.png +0 -0
  1886. package/web/app/site/sengi/assets/emoji/64/1f4a2.png +0 -0
  1887. package/web/app/site/sengi/assets/emoji/64/1f4a3.png +0 -0
  1888. package/web/app/site/sengi/assets/emoji/64/1f4a4.png +0 -0
  1889. package/web/app/site/sengi/assets/emoji/64/1f4a5.png +0 -0
  1890. package/web/app/site/sengi/assets/emoji/64/1f4a6.png +0 -0
  1891. package/web/app/site/sengi/assets/emoji/64/1f4a7.png +0 -0
  1892. package/web/app/site/sengi/assets/emoji/64/1f4a8.png +0 -0
  1893. package/web/app/site/sengi/assets/emoji/64/1f4a9.png +0 -0
  1894. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fb.png +0 -0
  1895. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fc.png +0 -0
  1896. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fd.png +0 -0
  1897. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fe.png +0 -0
  1898. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3ff.png +0 -0
  1899. package/web/app/site/sengi/assets/emoji/64/1f4aa.png +0 -0
  1900. package/web/app/site/sengi/assets/emoji/64/1f4ab.png +0 -0
  1901. package/web/app/site/sengi/assets/emoji/64/1f4ac.png +0 -0
  1902. package/web/app/site/sengi/assets/emoji/64/1f4ad.png +0 -0
  1903. package/web/app/site/sengi/assets/emoji/64/1f4ae.png +0 -0
  1904. package/web/app/site/sengi/assets/emoji/64/1f4af.png +0 -0
  1905. package/web/app/site/sengi/assets/emoji/64/1f4b0.png +0 -0
  1906. package/web/app/site/sengi/assets/emoji/64/1f4b1.png +0 -0
  1907. package/web/app/site/sengi/assets/emoji/64/1f4b2.png +0 -0
  1908. package/web/app/site/sengi/assets/emoji/64/1f4b3.png +0 -0
  1909. package/web/app/site/sengi/assets/emoji/64/1f4b4.png +0 -0
  1910. package/web/app/site/sengi/assets/emoji/64/1f4b5.png +0 -0
  1911. package/web/app/site/sengi/assets/emoji/64/1f4b6.png +0 -0
  1912. package/web/app/site/sengi/assets/emoji/64/1f4b7.png +0 -0
  1913. package/web/app/site/sengi/assets/emoji/64/1f4b8.png +0 -0
  1914. package/web/app/site/sengi/assets/emoji/64/1f4b9.png +0 -0
  1915. package/web/app/site/sengi/assets/emoji/64/1f4ba.png +0 -0
  1916. package/web/app/site/sengi/assets/emoji/64/1f4bb.png +0 -0
  1917. package/web/app/site/sengi/assets/emoji/64/1f4bc.png +0 -0
  1918. package/web/app/site/sengi/assets/emoji/64/1f4bd.png +0 -0
  1919. package/web/app/site/sengi/assets/emoji/64/1f4be.png +0 -0
  1920. package/web/app/site/sengi/assets/emoji/64/1f4bf.png +0 -0
  1921. package/web/app/site/sengi/assets/emoji/64/1f4c0.png +0 -0
  1922. package/web/app/site/sengi/assets/emoji/64/1f4c1.png +0 -0
  1923. package/web/app/site/sengi/assets/emoji/64/1f4c2.png +0 -0
  1924. package/web/app/site/sengi/assets/emoji/64/1f4c3.png +0 -0
  1925. package/web/app/site/sengi/assets/emoji/64/1f4c4.png +0 -0
  1926. package/web/app/site/sengi/assets/emoji/64/1f4c5.png +0 -0
  1927. package/web/app/site/sengi/assets/emoji/64/1f4c6.png +0 -0
  1928. package/web/app/site/sengi/assets/emoji/64/1f4c7.png +0 -0
  1929. package/web/app/site/sengi/assets/emoji/64/1f4c8.png +0 -0
  1930. package/web/app/site/sengi/assets/emoji/64/1f4c9.png +0 -0
  1931. package/web/app/site/sengi/assets/emoji/64/1f4ca.png +0 -0
  1932. package/web/app/site/sengi/assets/emoji/64/1f4cb.png +0 -0
  1933. package/web/app/site/sengi/assets/emoji/64/1f4cc.png +0 -0
  1934. package/web/app/site/sengi/assets/emoji/64/1f4cd.png +0 -0
  1935. package/web/app/site/sengi/assets/emoji/64/1f4ce.png +0 -0
  1936. package/web/app/site/sengi/assets/emoji/64/1f4cf.png +0 -0
  1937. package/web/app/site/sengi/assets/emoji/64/1f4d0.png +0 -0
  1938. package/web/app/site/sengi/assets/emoji/64/1f4d1.png +0 -0
  1939. package/web/app/site/sengi/assets/emoji/64/1f4d2.png +0 -0
  1940. package/web/app/site/sengi/assets/emoji/64/1f4d3.png +0 -0
  1941. package/web/app/site/sengi/assets/emoji/64/1f4d4.png +0 -0
  1942. package/web/app/site/sengi/assets/emoji/64/1f4d5.png +0 -0
  1943. package/web/app/site/sengi/assets/emoji/64/1f4d6.png +0 -0
  1944. package/web/app/site/sengi/assets/emoji/64/1f4d7.png +0 -0
  1945. package/web/app/site/sengi/assets/emoji/64/1f4d8.png +0 -0
  1946. package/web/app/site/sengi/assets/emoji/64/1f4d9.png +0 -0
  1947. package/web/app/site/sengi/assets/emoji/64/1f4da.png +0 -0
  1948. package/web/app/site/sengi/assets/emoji/64/1f4db.png +0 -0
  1949. package/web/app/site/sengi/assets/emoji/64/1f4dc.png +0 -0
  1950. package/web/app/site/sengi/assets/emoji/64/1f4dd.png +0 -0
  1951. package/web/app/site/sengi/assets/emoji/64/1f4de.png +0 -0
  1952. package/web/app/site/sengi/assets/emoji/64/1f4df.png +0 -0
  1953. package/web/app/site/sengi/assets/emoji/64/1f4e0.png +0 -0
  1954. package/web/app/site/sengi/assets/emoji/64/1f4e1.png +0 -0
  1955. package/web/app/site/sengi/assets/emoji/64/1f4e2.png +0 -0
  1956. package/web/app/site/sengi/assets/emoji/64/1f4e3.png +0 -0
  1957. package/web/app/site/sengi/assets/emoji/64/1f4e4.png +0 -0
  1958. package/web/app/site/sengi/assets/emoji/64/1f4e5.png +0 -0
  1959. package/web/app/site/sengi/assets/emoji/64/1f4e6.png +0 -0
  1960. package/web/app/site/sengi/assets/emoji/64/1f4e7.png +0 -0
  1961. package/web/app/site/sengi/assets/emoji/64/1f4e8.png +0 -0
  1962. package/web/app/site/sengi/assets/emoji/64/1f4e9.png +0 -0
  1963. package/web/app/site/sengi/assets/emoji/64/1f4ea.png +0 -0
  1964. package/web/app/site/sengi/assets/emoji/64/1f4eb.png +0 -0
  1965. package/web/app/site/sengi/assets/emoji/64/1f4ec.png +0 -0
  1966. package/web/app/site/sengi/assets/emoji/64/1f4ed.png +0 -0
  1967. package/web/app/site/sengi/assets/emoji/64/1f4ee.png +0 -0
  1968. package/web/app/site/sengi/assets/emoji/64/1f4ef.png +0 -0
  1969. package/web/app/site/sengi/assets/emoji/64/1f4f0.png +0 -0
  1970. package/web/app/site/sengi/assets/emoji/64/1f4f1.png +0 -0
  1971. package/web/app/site/sengi/assets/emoji/64/1f4f2.png +0 -0
  1972. package/web/app/site/sengi/assets/emoji/64/1f4f3.png +0 -0
  1973. package/web/app/site/sengi/assets/emoji/64/1f4f4.png +0 -0
  1974. package/web/app/site/sengi/assets/emoji/64/1f4f5.png +0 -0
  1975. package/web/app/site/sengi/assets/emoji/64/1f4f6.png +0 -0
  1976. package/web/app/site/sengi/assets/emoji/64/1f4f7.png +0 -0
  1977. package/web/app/site/sengi/assets/emoji/64/1f4f8.png +0 -0
  1978. package/web/app/site/sengi/assets/emoji/64/1f4f9.png +0 -0
  1979. package/web/app/site/sengi/assets/emoji/64/1f4fa.png +0 -0
  1980. package/web/app/site/sengi/assets/emoji/64/1f4fb.png +0 -0
  1981. package/web/app/site/sengi/assets/emoji/64/1f4fc.png +0 -0
  1982. package/web/app/site/sengi/assets/emoji/64/1f4fd.png +0 -0
  1983. package/web/app/site/sengi/assets/emoji/64/1f4ff.png +0 -0
  1984. package/web/app/site/sengi/assets/emoji/64/1f500.png +0 -0
  1985. package/web/app/site/sengi/assets/emoji/64/1f501.png +0 -0
  1986. package/web/app/site/sengi/assets/emoji/64/1f502.png +0 -0
  1987. package/web/app/site/sengi/assets/emoji/64/1f503.png +0 -0
  1988. package/web/app/site/sengi/assets/emoji/64/1f504.png +0 -0
  1989. package/web/app/site/sengi/assets/emoji/64/1f505.png +0 -0
  1990. package/web/app/site/sengi/assets/emoji/64/1f506.png +0 -0
  1991. package/web/app/site/sengi/assets/emoji/64/1f507.png +0 -0
  1992. package/web/app/site/sengi/assets/emoji/64/1f508.png +0 -0
  1993. package/web/app/site/sengi/assets/emoji/64/1f509.png +0 -0
  1994. package/web/app/site/sengi/assets/emoji/64/1f50a.png +0 -0
  1995. package/web/app/site/sengi/assets/emoji/64/1f50b.png +0 -0
  1996. package/web/app/site/sengi/assets/emoji/64/1f50c.png +0 -0
  1997. package/web/app/site/sengi/assets/emoji/64/1f50d.png +0 -0
  1998. package/web/app/site/sengi/assets/emoji/64/1f50e.png +0 -0
  1999. package/web/app/site/sengi/assets/emoji/64/1f50f.png +0 -0
  2000. package/web/app/site/sengi/assets/emoji/64/1f510.png +0 -0
  2001. package/web/app/site/sengi/assets/emoji/64/1f511.png +0 -0
  2002. package/web/app/site/sengi/assets/emoji/64/1f512.png +0 -0
  2003. package/web/app/site/sengi/assets/emoji/64/1f513.png +0 -0
  2004. package/web/app/site/sengi/assets/emoji/64/1f514.png +0 -0
  2005. package/web/app/site/sengi/assets/emoji/64/1f515.png +0 -0
  2006. package/web/app/site/sengi/assets/emoji/64/1f516.png +0 -0
  2007. package/web/app/site/sengi/assets/emoji/64/1f517.png +0 -0
  2008. package/web/app/site/sengi/assets/emoji/64/1f518.png +0 -0
  2009. package/web/app/site/sengi/assets/emoji/64/1f519.png +0 -0
  2010. package/web/app/site/sengi/assets/emoji/64/1f51a.png +0 -0
  2011. package/web/app/site/sengi/assets/emoji/64/1f51b.png +0 -0
  2012. package/web/app/site/sengi/assets/emoji/64/1f51c.png +0 -0
  2013. package/web/app/site/sengi/assets/emoji/64/1f51d.png +0 -0
  2014. package/web/app/site/sengi/assets/emoji/64/1f51e.png +0 -0
  2015. package/web/app/site/sengi/assets/emoji/64/1f51f.png +0 -0
  2016. package/web/app/site/sengi/assets/emoji/64/1f520.png +0 -0
  2017. package/web/app/site/sengi/assets/emoji/64/1f521.png +0 -0
  2018. package/web/app/site/sengi/assets/emoji/64/1f522.png +0 -0
  2019. package/web/app/site/sengi/assets/emoji/64/1f523.png +0 -0
  2020. package/web/app/site/sengi/assets/emoji/64/1f524.png +0 -0
  2021. package/web/app/site/sengi/assets/emoji/64/1f525.png +0 -0
  2022. package/web/app/site/sengi/assets/emoji/64/1f526.png +0 -0
  2023. package/web/app/site/sengi/assets/emoji/64/1f527.png +0 -0
  2024. package/web/app/site/sengi/assets/emoji/64/1f528.png +0 -0
  2025. package/web/app/site/sengi/assets/emoji/64/1f529.png +0 -0
  2026. package/web/app/site/sengi/assets/emoji/64/1f52a.png +0 -0
  2027. package/web/app/site/sengi/assets/emoji/64/1f52b.png +0 -0
  2028. package/web/app/site/sengi/assets/emoji/64/1f52c.png +0 -0
  2029. package/web/app/site/sengi/assets/emoji/64/1f52d.png +0 -0
  2030. package/web/app/site/sengi/assets/emoji/64/1f52e.png +0 -0
  2031. package/web/app/site/sengi/assets/emoji/64/1f52f.png +0 -0
  2032. package/web/app/site/sengi/assets/emoji/64/1f530.png +0 -0
  2033. package/web/app/site/sengi/assets/emoji/64/1f531.png +0 -0
  2034. package/web/app/site/sengi/assets/emoji/64/1f532.png +0 -0
  2035. package/web/app/site/sengi/assets/emoji/64/1f533.png +0 -0
  2036. package/web/app/site/sengi/assets/emoji/64/1f534.png +0 -0
  2037. package/web/app/site/sengi/assets/emoji/64/1f535.png +0 -0
  2038. package/web/app/site/sengi/assets/emoji/64/1f536.png +0 -0
  2039. package/web/app/site/sengi/assets/emoji/64/1f537.png +0 -0
  2040. package/web/app/site/sengi/assets/emoji/64/1f538.png +0 -0
  2041. package/web/app/site/sengi/assets/emoji/64/1f539.png +0 -0
  2042. package/web/app/site/sengi/assets/emoji/64/1f53a.png +0 -0
  2043. package/web/app/site/sengi/assets/emoji/64/1f53b.png +0 -0
  2044. package/web/app/site/sengi/assets/emoji/64/1f53c.png +0 -0
  2045. package/web/app/site/sengi/assets/emoji/64/1f53d.png +0 -0
  2046. package/web/app/site/sengi/assets/emoji/64/1f549.png +0 -0
  2047. package/web/app/site/sengi/assets/emoji/64/1f54a.png +0 -0
  2048. package/web/app/site/sengi/assets/emoji/64/1f54b.png +0 -0
  2049. package/web/app/site/sengi/assets/emoji/64/1f54c.png +0 -0
  2050. package/web/app/site/sengi/assets/emoji/64/1f54d.png +0 -0
  2051. package/web/app/site/sengi/assets/emoji/64/1f54e.png +0 -0
  2052. package/web/app/site/sengi/assets/emoji/64/1f550.png +0 -0
  2053. package/web/app/site/sengi/assets/emoji/64/1f551.png +0 -0
  2054. package/web/app/site/sengi/assets/emoji/64/1f552.png +0 -0
  2055. package/web/app/site/sengi/assets/emoji/64/1f553.png +0 -0
  2056. package/web/app/site/sengi/assets/emoji/64/1f554.png +0 -0
  2057. package/web/app/site/sengi/assets/emoji/64/1f555.png +0 -0
  2058. package/web/app/site/sengi/assets/emoji/64/1f556.png +0 -0
  2059. package/web/app/site/sengi/assets/emoji/64/1f557.png +0 -0
  2060. package/web/app/site/sengi/assets/emoji/64/1f558.png +0 -0
  2061. package/web/app/site/sengi/assets/emoji/64/1f559.png +0 -0
  2062. package/web/app/site/sengi/assets/emoji/64/1f55a.png +0 -0
  2063. package/web/app/site/sengi/assets/emoji/64/1f55b.png +0 -0
  2064. package/web/app/site/sengi/assets/emoji/64/1f55c.png +0 -0
  2065. package/web/app/site/sengi/assets/emoji/64/1f55d.png +0 -0
  2066. package/web/app/site/sengi/assets/emoji/64/1f55e.png +0 -0
  2067. package/web/app/site/sengi/assets/emoji/64/1f55f.png +0 -0
  2068. package/web/app/site/sengi/assets/emoji/64/1f560.png +0 -0
  2069. package/web/app/site/sengi/assets/emoji/64/1f561.png +0 -0
  2070. package/web/app/site/sengi/assets/emoji/64/1f562.png +0 -0
  2071. package/web/app/site/sengi/assets/emoji/64/1f563.png +0 -0
  2072. package/web/app/site/sengi/assets/emoji/64/1f564.png +0 -0
  2073. package/web/app/site/sengi/assets/emoji/64/1f565.png +0 -0
  2074. package/web/app/site/sengi/assets/emoji/64/1f566.png +0 -0
  2075. package/web/app/site/sengi/assets/emoji/64/1f567.png +0 -0
  2076. package/web/app/site/sengi/assets/emoji/64/1f56f.png +0 -0
  2077. package/web/app/site/sengi/assets/emoji/64/1f570.png +0 -0
  2078. package/web/app/site/sengi/assets/emoji/64/1f573.png +0 -0
  2079. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fb.png +0 -0
  2080. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fc.png +0 -0
  2081. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fd.png +0 -0
  2082. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fe.png +0 -0
  2083. package/web/app/site/sengi/assets/emoji/64/1f574-1f3ff.png +0 -0
  2084. package/web/app/site/sengi/assets/emoji/64/1f574.png +0 -0
  2085. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fb-2640.png +0 -0
  2086. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fb-2642.png +0 -0
  2087. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fb.png +0 -0
  2088. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fc-2640.png +0 -0
  2089. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fc-2642.png +0 -0
  2090. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fc.png +0 -0
  2091. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fd-2640.png +0 -0
  2092. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fd-2642.png +0 -0
  2093. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fd.png +0 -0
  2094. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fe-2640.png +0 -0
  2095. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fe-2642.png +0 -0
  2096. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fe.png +0 -0
  2097. package/web/app/site/sengi/assets/emoji/64/1f575-1f3ff-2640.png +0 -0
  2098. package/web/app/site/sengi/assets/emoji/64/1f575-1f3ff-2642.png +0 -0
  2099. package/web/app/site/sengi/assets/emoji/64/1f575-1f3ff.png +0 -0
  2100. package/web/app/site/sengi/assets/emoji/64/1f575-2640.png +0 -0
  2101. package/web/app/site/sengi/assets/emoji/64/1f575-2642.png +0 -0
  2102. package/web/app/site/sengi/assets/emoji/64/1f575.png +0 -0
  2103. package/web/app/site/sengi/assets/emoji/64/1f576.png +0 -0
  2104. package/web/app/site/sengi/assets/emoji/64/1f577.png +0 -0
  2105. package/web/app/site/sengi/assets/emoji/64/1f578.png +0 -0
  2106. package/web/app/site/sengi/assets/emoji/64/1f579.png +0 -0
  2107. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fb.png +0 -0
  2108. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fc.png +0 -0
  2109. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fd.png +0 -0
  2110. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fe.png +0 -0
  2111. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3ff.png +0 -0
  2112. package/web/app/site/sengi/assets/emoji/64/1f57a.png +0 -0
  2113. package/web/app/site/sengi/assets/emoji/64/1f587.png +0 -0
  2114. package/web/app/site/sengi/assets/emoji/64/1f58a.png +0 -0
  2115. package/web/app/site/sengi/assets/emoji/64/1f58b.png +0 -0
  2116. package/web/app/site/sengi/assets/emoji/64/1f58c.png +0 -0
  2117. package/web/app/site/sengi/assets/emoji/64/1f58d.png +0 -0
  2118. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fb.png +0 -0
  2119. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fc.png +0 -0
  2120. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fd.png +0 -0
  2121. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fe.png +0 -0
  2122. package/web/app/site/sengi/assets/emoji/64/1f590-1f3ff.png +0 -0
  2123. package/web/app/site/sengi/assets/emoji/64/1f590.png +0 -0
  2124. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fb.png +0 -0
  2125. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fc.png +0 -0
  2126. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fd.png +0 -0
  2127. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fe.png +0 -0
  2128. package/web/app/site/sengi/assets/emoji/64/1f595-1f3ff.png +0 -0
  2129. package/web/app/site/sengi/assets/emoji/64/1f595.png +0 -0
  2130. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fb.png +0 -0
  2131. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fc.png +0 -0
  2132. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fd.png +0 -0
  2133. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fe.png +0 -0
  2134. package/web/app/site/sengi/assets/emoji/64/1f596-1f3ff.png +0 -0
  2135. package/web/app/site/sengi/assets/emoji/64/1f596.png +0 -0
  2136. package/web/app/site/sengi/assets/emoji/64/1f5a4.png +0 -0
  2137. package/web/app/site/sengi/assets/emoji/64/1f5a5.png +0 -0
  2138. package/web/app/site/sengi/assets/emoji/64/1f5a8.png +0 -0
  2139. package/web/app/site/sengi/assets/emoji/64/1f5b1.png +0 -0
  2140. package/web/app/site/sengi/assets/emoji/64/1f5b2.png +0 -0
  2141. package/web/app/site/sengi/assets/emoji/64/1f5bc.png +0 -0
  2142. package/web/app/site/sengi/assets/emoji/64/1f5c2.png +0 -0
  2143. package/web/app/site/sengi/assets/emoji/64/1f5c3.png +0 -0
  2144. package/web/app/site/sengi/assets/emoji/64/1f5c4.png +0 -0
  2145. package/web/app/site/sengi/assets/emoji/64/1f5d1.png +0 -0
  2146. package/web/app/site/sengi/assets/emoji/64/1f5d2.png +0 -0
  2147. package/web/app/site/sengi/assets/emoji/64/1f5d3.png +0 -0
  2148. package/web/app/site/sengi/assets/emoji/64/1f5dc.png +0 -0
  2149. package/web/app/site/sengi/assets/emoji/64/1f5dd.png +0 -0
  2150. package/web/app/site/sengi/assets/emoji/64/1f5de.png +0 -0
  2151. package/web/app/site/sengi/assets/emoji/64/1f5e1.png +0 -0
  2152. package/web/app/site/sengi/assets/emoji/64/1f5e3.png +0 -0
  2153. package/web/app/site/sengi/assets/emoji/64/1f5e8.png +0 -0
  2154. package/web/app/site/sengi/assets/emoji/64/1f5ef.png +0 -0
  2155. package/web/app/site/sengi/assets/emoji/64/1f5f3.png +0 -0
  2156. package/web/app/site/sengi/assets/emoji/64/1f5fa.png +0 -0
  2157. package/web/app/site/sengi/assets/emoji/64/1f5fb.png +0 -0
  2158. package/web/app/site/sengi/assets/emoji/64/1f5fc.png +0 -0
  2159. package/web/app/site/sengi/assets/emoji/64/1f5fd.png +0 -0
  2160. package/web/app/site/sengi/assets/emoji/64/1f5fe.png +0 -0
  2161. package/web/app/site/sengi/assets/emoji/64/1f5ff.png +0 -0
  2162. package/web/app/site/sengi/assets/emoji/64/1f600.png +0 -0
  2163. package/web/app/site/sengi/assets/emoji/64/1f601.png +0 -0
  2164. package/web/app/site/sengi/assets/emoji/64/1f602.png +0 -0
  2165. package/web/app/site/sengi/assets/emoji/64/1f603.png +0 -0
  2166. package/web/app/site/sengi/assets/emoji/64/1f604.png +0 -0
  2167. package/web/app/site/sengi/assets/emoji/64/1f605.png +0 -0
  2168. package/web/app/site/sengi/assets/emoji/64/1f606.png +0 -0
  2169. package/web/app/site/sengi/assets/emoji/64/1f607.png +0 -0
  2170. package/web/app/site/sengi/assets/emoji/64/1f608.png +0 -0
  2171. package/web/app/site/sengi/assets/emoji/64/1f609.png +0 -0
  2172. package/web/app/site/sengi/assets/emoji/64/1f60a.png +0 -0
  2173. package/web/app/site/sengi/assets/emoji/64/1f60b.png +0 -0
  2174. package/web/app/site/sengi/assets/emoji/64/1f60c.png +0 -0
  2175. package/web/app/site/sengi/assets/emoji/64/1f60d.png +0 -0
  2176. package/web/app/site/sengi/assets/emoji/64/1f60e.png +0 -0
  2177. package/web/app/site/sengi/assets/emoji/64/1f60f.png +0 -0
  2178. package/web/app/site/sengi/assets/emoji/64/1f610.png +0 -0
  2179. package/web/app/site/sengi/assets/emoji/64/1f611.png +0 -0
  2180. package/web/app/site/sengi/assets/emoji/64/1f612.png +0 -0
  2181. package/web/app/site/sengi/assets/emoji/64/1f613.png +0 -0
  2182. package/web/app/site/sengi/assets/emoji/64/1f614.png +0 -0
  2183. package/web/app/site/sengi/assets/emoji/64/1f615.png +0 -0
  2184. package/web/app/site/sengi/assets/emoji/64/1f616.png +0 -0
  2185. package/web/app/site/sengi/assets/emoji/64/1f617.png +0 -0
  2186. package/web/app/site/sengi/assets/emoji/64/1f618.png +0 -0
  2187. package/web/app/site/sengi/assets/emoji/64/1f619.png +0 -0
  2188. package/web/app/site/sengi/assets/emoji/64/1f61a.png +0 -0
  2189. package/web/app/site/sengi/assets/emoji/64/1f61b.png +0 -0
  2190. package/web/app/site/sengi/assets/emoji/64/1f61c.png +0 -0
  2191. package/web/app/site/sengi/assets/emoji/64/1f61d.png +0 -0
  2192. package/web/app/site/sengi/assets/emoji/64/1f61e.png +0 -0
  2193. package/web/app/site/sengi/assets/emoji/64/1f61f.png +0 -0
  2194. package/web/app/site/sengi/assets/emoji/64/1f620.png +0 -0
  2195. package/web/app/site/sengi/assets/emoji/64/1f621.png +0 -0
  2196. package/web/app/site/sengi/assets/emoji/64/1f622.png +0 -0
  2197. package/web/app/site/sengi/assets/emoji/64/1f623.png +0 -0
  2198. package/web/app/site/sengi/assets/emoji/64/1f624.png +0 -0
  2199. package/web/app/site/sengi/assets/emoji/64/1f625.png +0 -0
  2200. package/web/app/site/sengi/assets/emoji/64/1f626.png +0 -0
  2201. package/web/app/site/sengi/assets/emoji/64/1f627.png +0 -0
  2202. package/web/app/site/sengi/assets/emoji/64/1f628.png +0 -0
  2203. package/web/app/site/sengi/assets/emoji/64/1f629.png +0 -0
  2204. package/web/app/site/sengi/assets/emoji/64/1f62a.png +0 -0
  2205. package/web/app/site/sengi/assets/emoji/64/1f62b.png +0 -0
  2206. package/web/app/site/sengi/assets/emoji/64/1f62c.png +0 -0
  2207. package/web/app/site/sengi/assets/emoji/64/1f62d.png +0 -0
  2208. package/web/app/site/sengi/assets/emoji/64/1f62e-1f4a8.png +0 -0
  2209. package/web/app/site/sengi/assets/emoji/64/1f62e.png +0 -0
  2210. package/web/app/site/sengi/assets/emoji/64/1f62f.png +0 -0
  2211. package/web/app/site/sengi/assets/emoji/64/1f630.png +0 -0
  2212. package/web/app/site/sengi/assets/emoji/64/1f631.png +0 -0
  2213. package/web/app/site/sengi/assets/emoji/64/1f632.png +0 -0
  2214. package/web/app/site/sengi/assets/emoji/64/1f633.png +0 -0
  2215. package/web/app/site/sengi/assets/emoji/64/1f634.png +0 -0
  2216. package/web/app/site/sengi/assets/emoji/64/1f635-1f4ab.png +0 -0
  2217. package/web/app/site/sengi/assets/emoji/64/1f635.png +0 -0
  2218. package/web/app/site/sengi/assets/emoji/64/1f636-1f32b.png +0 -0
  2219. package/web/app/site/sengi/assets/emoji/64/1f636.png +0 -0
  2220. package/web/app/site/sengi/assets/emoji/64/1f637.png +0 -0
  2221. package/web/app/site/sengi/assets/emoji/64/1f638.png +0 -0
  2222. package/web/app/site/sengi/assets/emoji/64/1f639.png +0 -0
  2223. package/web/app/site/sengi/assets/emoji/64/1f63a.png +0 -0
  2224. package/web/app/site/sengi/assets/emoji/64/1f63b.png +0 -0
  2225. package/web/app/site/sengi/assets/emoji/64/1f63c.png +0 -0
  2226. package/web/app/site/sengi/assets/emoji/64/1f63d.png +0 -0
  2227. package/web/app/site/sengi/assets/emoji/64/1f63e.png +0 -0
  2228. package/web/app/site/sengi/assets/emoji/64/1f63f.png +0 -0
  2229. package/web/app/site/sengi/assets/emoji/64/1f640.png +0 -0
  2230. package/web/app/site/sengi/assets/emoji/64/1f641.png +0 -0
  2231. package/web/app/site/sengi/assets/emoji/64/1f642-2194.png +0 -0
  2232. package/web/app/site/sengi/assets/emoji/64/1f642-2195.png +0 -0
  2233. package/web/app/site/sengi/assets/emoji/64/1f642.png +0 -0
  2234. package/web/app/site/sengi/assets/emoji/64/1f643.png +0 -0
  2235. package/web/app/site/sengi/assets/emoji/64/1f644.png +0 -0
  2236. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fb-2640.png +0 -0
  2237. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fb-2642.png +0 -0
  2238. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fb.png +0 -0
  2239. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fc-2640.png +0 -0
  2240. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fc-2642.png +0 -0
  2241. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fc.png +0 -0
  2242. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fd-2640.png +0 -0
  2243. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fd-2642.png +0 -0
  2244. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fd.png +0 -0
  2245. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fe-2640.png +0 -0
  2246. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fe-2642.png +0 -0
  2247. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fe.png +0 -0
  2248. package/web/app/site/sengi/assets/emoji/64/1f645-1f3ff-2640.png +0 -0
  2249. package/web/app/site/sengi/assets/emoji/64/1f645-1f3ff-2642.png +0 -0
  2250. package/web/app/site/sengi/assets/emoji/64/1f645-1f3ff.png +0 -0
  2251. package/web/app/site/sengi/assets/emoji/64/1f645-2640.png +0 -0
  2252. package/web/app/site/sengi/assets/emoji/64/1f645-2642.png +0 -0
  2253. package/web/app/site/sengi/assets/emoji/64/1f645.png +0 -0
  2254. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fb-2640.png +0 -0
  2255. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fb-2642.png +0 -0
  2256. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fb.png +0 -0
  2257. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fc-2640.png +0 -0
  2258. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fc-2642.png +0 -0
  2259. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fc.png +0 -0
  2260. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fd-2640.png +0 -0
  2261. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fd-2642.png +0 -0
  2262. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fd.png +0 -0
  2263. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fe-2640.png +0 -0
  2264. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fe-2642.png +0 -0
  2265. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fe.png +0 -0
  2266. package/web/app/site/sengi/assets/emoji/64/1f646-1f3ff-2640.png +0 -0
  2267. package/web/app/site/sengi/assets/emoji/64/1f646-1f3ff-2642.png +0 -0
  2268. package/web/app/site/sengi/assets/emoji/64/1f646-1f3ff.png +0 -0
  2269. package/web/app/site/sengi/assets/emoji/64/1f646-2640.png +0 -0
  2270. package/web/app/site/sengi/assets/emoji/64/1f646-2642.png +0 -0
  2271. package/web/app/site/sengi/assets/emoji/64/1f646.png +0 -0
  2272. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fb-2640.png +0 -0
  2273. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fb-2642.png +0 -0
  2274. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fb.png +0 -0
  2275. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fc-2640.png +0 -0
  2276. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fc-2642.png +0 -0
  2277. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fc.png +0 -0
  2278. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fd-2640.png +0 -0
  2279. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fd-2642.png +0 -0
  2280. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fd.png +0 -0
  2281. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fe-2640.png +0 -0
  2282. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fe-2642.png +0 -0
  2283. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fe.png +0 -0
  2284. package/web/app/site/sengi/assets/emoji/64/1f647-1f3ff-2640.png +0 -0
  2285. package/web/app/site/sengi/assets/emoji/64/1f647-1f3ff-2642.png +0 -0
  2286. package/web/app/site/sengi/assets/emoji/64/1f647-1f3ff.png +0 -0
  2287. package/web/app/site/sengi/assets/emoji/64/1f647-2640.png +0 -0
  2288. package/web/app/site/sengi/assets/emoji/64/1f647-2642.png +0 -0
  2289. package/web/app/site/sengi/assets/emoji/64/1f647.png +0 -0
  2290. package/web/app/site/sengi/assets/emoji/64/1f648.png +0 -0
  2291. package/web/app/site/sengi/assets/emoji/64/1f649.png +0 -0
  2292. package/web/app/site/sengi/assets/emoji/64/1f64a.png +0 -0
  2293. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fb-2640.png +0 -0
  2294. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fb-2642.png +0 -0
  2295. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fb.png +0 -0
  2296. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fc-2640.png +0 -0
  2297. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fc-2642.png +0 -0
  2298. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fc.png +0 -0
  2299. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fd-2640.png +0 -0
  2300. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fd-2642.png +0 -0
  2301. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fd.png +0 -0
  2302. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fe-2640.png +0 -0
  2303. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fe-2642.png +0 -0
  2304. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fe.png +0 -0
  2305. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3ff-2640.png +0 -0
  2306. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3ff-2642.png +0 -0
  2307. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3ff.png +0 -0
  2308. package/web/app/site/sengi/assets/emoji/64/1f64b-2640.png +0 -0
  2309. package/web/app/site/sengi/assets/emoji/64/1f64b-2642.png +0 -0
  2310. package/web/app/site/sengi/assets/emoji/64/1f64b.png +0 -0
  2311. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fb.png +0 -0
  2312. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fc.png +0 -0
  2313. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fd.png +0 -0
  2314. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fe.png +0 -0
  2315. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3ff.png +0 -0
  2316. package/web/app/site/sengi/assets/emoji/64/1f64c.png +0 -0
  2317. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fb-2640.png +0 -0
  2318. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fb-2642.png +0 -0
  2319. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fb.png +0 -0
  2320. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fc-2640.png +0 -0
  2321. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fc-2642.png +0 -0
  2322. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fc.png +0 -0
  2323. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fd-2640.png +0 -0
  2324. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fd-2642.png +0 -0
  2325. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fd.png +0 -0
  2326. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fe-2640.png +0 -0
  2327. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fe-2642.png +0 -0
  2328. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fe.png +0 -0
  2329. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3ff-2640.png +0 -0
  2330. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3ff-2642.png +0 -0
  2331. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3ff.png +0 -0
  2332. package/web/app/site/sengi/assets/emoji/64/1f64d-2640.png +0 -0
  2333. package/web/app/site/sengi/assets/emoji/64/1f64d-2642.png +0 -0
  2334. package/web/app/site/sengi/assets/emoji/64/1f64d.png +0 -0
  2335. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fb-2640.png +0 -0
  2336. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fb-2642.png +0 -0
  2337. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fb.png +0 -0
  2338. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fc-2640.png +0 -0
  2339. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fc-2642.png +0 -0
  2340. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fc.png +0 -0
  2341. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fd-2640.png +0 -0
  2342. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fd-2642.png +0 -0
  2343. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fd.png +0 -0
  2344. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fe-2640.png +0 -0
  2345. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fe-2642.png +0 -0
  2346. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fe.png +0 -0
  2347. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3ff-2640.png +0 -0
  2348. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3ff-2642.png +0 -0
  2349. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3ff.png +0 -0
  2350. package/web/app/site/sengi/assets/emoji/64/1f64e-2640.png +0 -0
  2351. package/web/app/site/sengi/assets/emoji/64/1f64e-2642.png +0 -0
  2352. package/web/app/site/sengi/assets/emoji/64/1f64e.png +0 -0
  2353. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fb.png +0 -0
  2354. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fc.png +0 -0
  2355. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fd.png +0 -0
  2356. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fe.png +0 -0
  2357. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3ff.png +0 -0
  2358. package/web/app/site/sengi/assets/emoji/64/1f64f.png +0 -0
  2359. package/web/app/site/sengi/assets/emoji/64/1f680.png +0 -0
  2360. package/web/app/site/sengi/assets/emoji/64/1f681.png +0 -0
  2361. package/web/app/site/sengi/assets/emoji/64/1f682.png +0 -0
  2362. package/web/app/site/sengi/assets/emoji/64/1f683.png +0 -0
  2363. package/web/app/site/sengi/assets/emoji/64/1f684.png +0 -0
  2364. package/web/app/site/sengi/assets/emoji/64/1f685.png +0 -0
  2365. package/web/app/site/sengi/assets/emoji/64/1f686.png +0 -0
  2366. package/web/app/site/sengi/assets/emoji/64/1f687.png +0 -0
  2367. package/web/app/site/sengi/assets/emoji/64/1f688.png +0 -0
  2368. package/web/app/site/sengi/assets/emoji/64/1f689.png +0 -0
  2369. package/web/app/site/sengi/assets/emoji/64/1f68a.png +0 -0
  2370. package/web/app/site/sengi/assets/emoji/64/1f68b.png +0 -0
  2371. package/web/app/site/sengi/assets/emoji/64/1f68c.png +0 -0
  2372. package/web/app/site/sengi/assets/emoji/64/1f68d.png +0 -0
  2373. package/web/app/site/sengi/assets/emoji/64/1f68e.png +0 -0
  2374. package/web/app/site/sengi/assets/emoji/64/1f68f.png +0 -0
  2375. package/web/app/site/sengi/assets/emoji/64/1f690.png +0 -0
  2376. package/web/app/site/sengi/assets/emoji/64/1f691.png +0 -0
  2377. package/web/app/site/sengi/assets/emoji/64/1f692.png +0 -0
  2378. package/web/app/site/sengi/assets/emoji/64/1f693.png +0 -0
  2379. package/web/app/site/sengi/assets/emoji/64/1f694.png +0 -0
  2380. package/web/app/site/sengi/assets/emoji/64/1f695.png +0 -0
  2381. package/web/app/site/sengi/assets/emoji/64/1f696.png +0 -0
  2382. package/web/app/site/sengi/assets/emoji/64/1f697.png +0 -0
  2383. package/web/app/site/sengi/assets/emoji/64/1f698.png +0 -0
  2384. package/web/app/site/sengi/assets/emoji/64/1f699.png +0 -0
  2385. package/web/app/site/sengi/assets/emoji/64/1f69a.png +0 -0
  2386. package/web/app/site/sengi/assets/emoji/64/1f69b.png +0 -0
  2387. package/web/app/site/sengi/assets/emoji/64/1f69c.png +0 -0
  2388. package/web/app/site/sengi/assets/emoji/64/1f69d.png +0 -0
  2389. package/web/app/site/sengi/assets/emoji/64/1f69e.png +0 -0
  2390. package/web/app/site/sengi/assets/emoji/64/1f69f.png +0 -0
  2391. package/web/app/site/sengi/assets/emoji/64/1f6a0.png +0 -0
  2392. package/web/app/site/sengi/assets/emoji/64/1f6a1.png +0 -0
  2393. package/web/app/site/sengi/assets/emoji/64/1f6a2.png +0 -0
  2394. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fb-2640.png +0 -0
  2395. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fb-2642.png +0 -0
  2396. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fb.png +0 -0
  2397. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fc-2640.png +0 -0
  2398. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fc-2642.png +0 -0
  2399. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fc.png +0 -0
  2400. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fd-2640.png +0 -0
  2401. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fd-2642.png +0 -0
  2402. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fd.png +0 -0
  2403. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fe-2640.png +0 -0
  2404. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fe-2642.png +0 -0
  2405. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fe.png +0 -0
  2406. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3ff-2640.png +0 -0
  2407. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3ff-2642.png +0 -0
  2408. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3ff.png +0 -0
  2409. package/web/app/site/sengi/assets/emoji/64/1f6a3-2640.png +0 -0
  2410. package/web/app/site/sengi/assets/emoji/64/1f6a3-2642.png +0 -0
  2411. package/web/app/site/sengi/assets/emoji/64/1f6a3.png +0 -0
  2412. package/web/app/site/sengi/assets/emoji/64/1f6a4.png +0 -0
  2413. package/web/app/site/sengi/assets/emoji/64/1f6a5.png +0 -0
  2414. package/web/app/site/sengi/assets/emoji/64/1f6a6.png +0 -0
  2415. package/web/app/site/sengi/assets/emoji/64/1f6a7.png +0 -0
  2416. package/web/app/site/sengi/assets/emoji/64/1f6a8.png +0 -0
  2417. package/web/app/site/sengi/assets/emoji/64/1f6a9.png +0 -0
  2418. package/web/app/site/sengi/assets/emoji/64/1f6aa.png +0 -0
  2419. package/web/app/site/sengi/assets/emoji/64/1f6ab.png +0 -0
  2420. package/web/app/site/sengi/assets/emoji/64/1f6ac.png +0 -0
  2421. package/web/app/site/sengi/assets/emoji/64/1f6ad.png +0 -0
  2422. package/web/app/site/sengi/assets/emoji/64/1f6ae.png +0 -0
  2423. package/web/app/site/sengi/assets/emoji/64/1f6af.png +0 -0
  2424. package/web/app/site/sengi/assets/emoji/64/1f6b0.png +0 -0
  2425. package/web/app/site/sengi/assets/emoji/64/1f6b1.png +0 -0
  2426. package/web/app/site/sengi/assets/emoji/64/1f6b2.png +0 -0
  2427. package/web/app/site/sengi/assets/emoji/64/1f6b3.png +0 -0
  2428. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fb-2640.png +0 -0
  2429. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fb-2642.png +0 -0
  2430. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fb.png +0 -0
  2431. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fc-2640.png +0 -0
  2432. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fc-2642.png +0 -0
  2433. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fc.png +0 -0
  2434. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fd-2640.png +0 -0
  2435. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fd-2642.png +0 -0
  2436. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fd.png +0 -0
  2437. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fe-2640.png +0 -0
  2438. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fe-2642.png +0 -0
  2439. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fe.png +0 -0
  2440. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3ff-2640.png +0 -0
  2441. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3ff-2642.png +0 -0
  2442. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3ff.png +0 -0
  2443. package/web/app/site/sengi/assets/emoji/64/1f6b4-2640.png +0 -0
  2444. package/web/app/site/sengi/assets/emoji/64/1f6b4-2642.png +0 -0
  2445. package/web/app/site/sengi/assets/emoji/64/1f6b4.png +0 -0
  2446. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fb-2640.png +0 -0
  2447. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fb-2642.png +0 -0
  2448. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fb.png +0 -0
  2449. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fc-2640.png +0 -0
  2450. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fc-2642.png +0 -0
  2451. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fc.png +0 -0
  2452. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fd-2640.png +0 -0
  2453. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fd-2642.png +0 -0
  2454. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fd.png +0 -0
  2455. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fe-2640.png +0 -0
  2456. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fe-2642.png +0 -0
  2457. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fe.png +0 -0
  2458. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3ff-2640.png +0 -0
  2459. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3ff-2642.png +0 -0
  2460. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3ff.png +0 -0
  2461. package/web/app/site/sengi/assets/emoji/64/1f6b5-2640.png +0 -0
  2462. package/web/app/site/sengi/assets/emoji/64/1f6b5-2642.png +0 -0
  2463. package/web/app/site/sengi/assets/emoji/64/1f6b5.png +0 -0
  2464. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2640-27a1.png +0 -0
  2465. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2640.png +0 -0
  2466. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2642-27a1.png +0 -0
  2467. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2642.png +0 -0
  2468. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-27a1.png +0 -0
  2469. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb.png +0 -0
  2470. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2640-27a1.png +0 -0
  2471. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2640.png +0 -0
  2472. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2642-27a1.png +0 -0
  2473. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2642.png +0 -0
  2474. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-27a1.png +0 -0
  2475. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc.png +0 -0
  2476. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2640-27a1.png +0 -0
  2477. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2640.png +0 -0
  2478. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2642-27a1.png +0 -0
  2479. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2642.png +0 -0
  2480. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-27a1.png +0 -0
  2481. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd.png +0 -0
  2482. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2640-27a1.png +0 -0
  2483. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2640.png +0 -0
  2484. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2642-27a1.png +0 -0
  2485. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2642.png +0 -0
  2486. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-27a1.png +0 -0
  2487. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe.png +0 -0
  2488. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2640-27a1.png +0 -0
  2489. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2640.png +0 -0
  2490. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2642-27a1.png +0 -0
  2491. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2642.png +0 -0
  2492. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-27a1.png +0 -0
  2493. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff.png +0 -0
  2494. package/web/app/site/sengi/assets/emoji/64/1f6b6-2640-27a1.png +0 -0
  2495. package/web/app/site/sengi/assets/emoji/64/1f6b6-2640.png +0 -0
  2496. package/web/app/site/sengi/assets/emoji/64/1f6b6-2642-27a1.png +0 -0
  2497. package/web/app/site/sengi/assets/emoji/64/1f6b6-2642.png +0 -0
  2498. package/web/app/site/sengi/assets/emoji/64/1f6b6-27a1.png +0 -0
  2499. package/web/app/site/sengi/assets/emoji/64/1f6b6.png +0 -0
  2500. package/web/app/site/sengi/assets/emoji/64/1f6b7.png +0 -0
  2501. package/web/app/site/sengi/assets/emoji/64/1f6b8.png +0 -0
  2502. package/web/app/site/sengi/assets/emoji/64/1f6b9.png +0 -0
  2503. package/web/app/site/sengi/assets/emoji/64/1f6ba.png +0 -0
  2504. package/web/app/site/sengi/assets/emoji/64/1f6bb.png +0 -0
  2505. package/web/app/site/sengi/assets/emoji/64/1f6bc.png +0 -0
  2506. package/web/app/site/sengi/assets/emoji/64/1f6bd.png +0 -0
  2507. package/web/app/site/sengi/assets/emoji/64/1f6be.png +0 -0
  2508. package/web/app/site/sengi/assets/emoji/64/1f6bf.png +0 -0
  2509. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fb.png +0 -0
  2510. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fc.png +0 -0
  2511. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fd.png +0 -0
  2512. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fe.png +0 -0
  2513. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3ff.png +0 -0
  2514. package/web/app/site/sengi/assets/emoji/64/1f6c0.png +0 -0
  2515. package/web/app/site/sengi/assets/emoji/64/1f6c1.png +0 -0
  2516. package/web/app/site/sengi/assets/emoji/64/1f6c2.png +0 -0
  2517. package/web/app/site/sengi/assets/emoji/64/1f6c3.png +0 -0
  2518. package/web/app/site/sengi/assets/emoji/64/1f6c4.png +0 -0
  2519. package/web/app/site/sengi/assets/emoji/64/1f6c5.png +0 -0
  2520. package/web/app/site/sengi/assets/emoji/64/1f6cb.png +0 -0
  2521. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fb.png +0 -0
  2522. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fc.png +0 -0
  2523. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fd.png +0 -0
  2524. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fe.png +0 -0
  2525. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3ff.png +0 -0
  2526. package/web/app/site/sengi/assets/emoji/64/1f6cc.png +0 -0
  2527. package/web/app/site/sengi/assets/emoji/64/1f6cd.png +0 -0
  2528. package/web/app/site/sengi/assets/emoji/64/1f6ce.png +0 -0
  2529. package/web/app/site/sengi/assets/emoji/64/1f6cf.png +0 -0
  2530. package/web/app/site/sengi/assets/emoji/64/1f6d0.png +0 -0
  2531. package/web/app/site/sengi/assets/emoji/64/1f6d1.png +0 -0
  2532. package/web/app/site/sengi/assets/emoji/64/1f6d2.png +0 -0
  2533. package/web/app/site/sengi/assets/emoji/64/1f6d5.png +0 -0
  2534. package/web/app/site/sengi/assets/emoji/64/1f6d6.png +0 -0
  2535. package/web/app/site/sengi/assets/emoji/64/1f6d7.png +0 -0
  2536. package/web/app/site/sengi/assets/emoji/64/1f6dc.png +0 -0
  2537. package/web/app/site/sengi/assets/emoji/64/1f6dd.png +0 -0
  2538. package/web/app/site/sengi/assets/emoji/64/1f6de.png +0 -0
  2539. package/web/app/site/sengi/assets/emoji/64/1f6df.png +0 -0
  2540. package/web/app/site/sengi/assets/emoji/64/1f6e0.png +0 -0
  2541. package/web/app/site/sengi/assets/emoji/64/1f6e1.png +0 -0
  2542. package/web/app/site/sengi/assets/emoji/64/1f6e2.png +0 -0
  2543. package/web/app/site/sengi/assets/emoji/64/1f6e3.png +0 -0
  2544. package/web/app/site/sengi/assets/emoji/64/1f6e4.png +0 -0
  2545. package/web/app/site/sengi/assets/emoji/64/1f6e5.png +0 -0
  2546. package/web/app/site/sengi/assets/emoji/64/1f6e9.png +0 -0
  2547. package/web/app/site/sengi/assets/emoji/64/1f6eb.png +0 -0
  2548. package/web/app/site/sengi/assets/emoji/64/1f6ec.png +0 -0
  2549. package/web/app/site/sengi/assets/emoji/64/1f6f0.png +0 -0
  2550. package/web/app/site/sengi/assets/emoji/64/1f6f3.png +0 -0
  2551. package/web/app/site/sengi/assets/emoji/64/1f6f4.png +0 -0
  2552. package/web/app/site/sengi/assets/emoji/64/1f6f5.png +0 -0
  2553. package/web/app/site/sengi/assets/emoji/64/1f6f6.png +0 -0
  2554. package/web/app/site/sengi/assets/emoji/64/1f6f7.png +0 -0
  2555. package/web/app/site/sengi/assets/emoji/64/1f6f8.png +0 -0
  2556. package/web/app/site/sengi/assets/emoji/64/1f6f9.png +0 -0
  2557. package/web/app/site/sengi/assets/emoji/64/1f6fa.png +0 -0
  2558. package/web/app/site/sengi/assets/emoji/64/1f6fb.png +0 -0
  2559. package/web/app/site/sengi/assets/emoji/64/1f6fc.png +0 -0
  2560. package/web/app/site/sengi/assets/emoji/64/1f7e0.png +0 -0
  2561. package/web/app/site/sengi/assets/emoji/64/1f7e1.png +0 -0
  2562. package/web/app/site/sengi/assets/emoji/64/1f7e2.png +0 -0
  2563. package/web/app/site/sengi/assets/emoji/64/1f7e3.png +0 -0
  2564. package/web/app/site/sengi/assets/emoji/64/1f7e4.png +0 -0
  2565. package/web/app/site/sengi/assets/emoji/64/1f7e5.png +0 -0
  2566. package/web/app/site/sengi/assets/emoji/64/1f7e6.png +0 -0
  2567. package/web/app/site/sengi/assets/emoji/64/1f7e7.png +0 -0
  2568. package/web/app/site/sengi/assets/emoji/64/1f7e8.png +0 -0
  2569. package/web/app/site/sengi/assets/emoji/64/1f7e9.png +0 -0
  2570. package/web/app/site/sengi/assets/emoji/64/1f7ea.png +0 -0
  2571. package/web/app/site/sengi/assets/emoji/64/1f7eb.png +0 -0
  2572. package/web/app/site/sengi/assets/emoji/64/1f7f0.png +0 -0
  2573. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fb.png +0 -0
  2574. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fc.png +0 -0
  2575. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fd.png +0 -0
  2576. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fe.png +0 -0
  2577. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3ff.png +0 -0
  2578. package/web/app/site/sengi/assets/emoji/64/1f90c.png +0 -0
  2579. package/web/app/site/sengi/assets/emoji/64/1f90d.png +0 -0
  2580. package/web/app/site/sengi/assets/emoji/64/1f90e.png +0 -0
  2581. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fb.png +0 -0
  2582. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fc.png +0 -0
  2583. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fd.png +0 -0
  2584. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fe.png +0 -0
  2585. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3ff.png +0 -0
  2586. package/web/app/site/sengi/assets/emoji/64/1f90f.png +0 -0
  2587. package/web/app/site/sengi/assets/emoji/64/1f910.png +0 -0
  2588. package/web/app/site/sengi/assets/emoji/64/1f911.png +0 -0
  2589. package/web/app/site/sengi/assets/emoji/64/1f912.png +0 -0
  2590. package/web/app/site/sengi/assets/emoji/64/1f913.png +0 -0
  2591. package/web/app/site/sengi/assets/emoji/64/1f914.png +0 -0
  2592. package/web/app/site/sengi/assets/emoji/64/1f915.png +0 -0
  2593. package/web/app/site/sengi/assets/emoji/64/1f916.png +0 -0
  2594. package/web/app/site/sengi/assets/emoji/64/1f917.png +0 -0
  2595. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fb.png +0 -0
  2596. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fc.png +0 -0
  2597. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fd.png +0 -0
  2598. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fe.png +0 -0
  2599. package/web/app/site/sengi/assets/emoji/64/1f918-1f3ff.png +0 -0
  2600. package/web/app/site/sengi/assets/emoji/64/1f918.png +0 -0
  2601. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fb.png +0 -0
  2602. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fc.png +0 -0
  2603. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fd.png +0 -0
  2604. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fe.png +0 -0
  2605. package/web/app/site/sengi/assets/emoji/64/1f919-1f3ff.png +0 -0
  2606. package/web/app/site/sengi/assets/emoji/64/1f919.png +0 -0
  2607. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fb.png +0 -0
  2608. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fc.png +0 -0
  2609. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fd.png +0 -0
  2610. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fe.png +0 -0
  2611. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3ff.png +0 -0
  2612. package/web/app/site/sengi/assets/emoji/64/1f91a.png +0 -0
  2613. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fb.png +0 -0
  2614. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fc.png +0 -0
  2615. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fd.png +0 -0
  2616. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fe.png +0 -0
  2617. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3ff.png +0 -0
  2618. package/web/app/site/sengi/assets/emoji/64/1f91b.png +0 -0
  2619. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fb.png +0 -0
  2620. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fc.png +0 -0
  2621. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fd.png +0 -0
  2622. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fe.png +0 -0
  2623. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3ff.png +0 -0
  2624. package/web/app/site/sengi/assets/emoji/64/1f91c.png +0 -0
  2625. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fb.png +0 -0
  2626. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fc.png +0 -0
  2627. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fd.png +0 -0
  2628. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fe.png +0 -0
  2629. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3ff.png +0 -0
  2630. package/web/app/site/sengi/assets/emoji/64/1f91d.png +0 -0
  2631. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fb.png +0 -0
  2632. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fc.png +0 -0
  2633. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fd.png +0 -0
  2634. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fe.png +0 -0
  2635. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3ff.png +0 -0
  2636. package/web/app/site/sengi/assets/emoji/64/1f91e.png +0 -0
  2637. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fb.png +0 -0
  2638. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fc.png +0 -0
  2639. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fd.png +0 -0
  2640. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fe.png +0 -0
  2641. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3ff.png +0 -0
  2642. package/web/app/site/sengi/assets/emoji/64/1f91f.png +0 -0
  2643. package/web/app/site/sengi/assets/emoji/64/1f920.png +0 -0
  2644. package/web/app/site/sengi/assets/emoji/64/1f921.png +0 -0
  2645. package/web/app/site/sengi/assets/emoji/64/1f922.png +0 -0
  2646. package/web/app/site/sengi/assets/emoji/64/1f923.png +0 -0
  2647. package/web/app/site/sengi/assets/emoji/64/1f924.png +0 -0
  2648. package/web/app/site/sengi/assets/emoji/64/1f925.png +0 -0
  2649. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fb-2640.png +0 -0
  2650. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fb-2642.png +0 -0
  2651. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fb.png +0 -0
  2652. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fc-2640.png +0 -0
  2653. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fc-2642.png +0 -0
  2654. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fc.png +0 -0
  2655. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fd-2640.png +0 -0
  2656. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fd-2642.png +0 -0
  2657. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fd.png +0 -0
  2658. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fe-2640.png +0 -0
  2659. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fe-2642.png +0 -0
  2660. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fe.png +0 -0
  2661. package/web/app/site/sengi/assets/emoji/64/1f926-1f3ff-2640.png +0 -0
  2662. package/web/app/site/sengi/assets/emoji/64/1f926-1f3ff-2642.png +0 -0
  2663. package/web/app/site/sengi/assets/emoji/64/1f926-1f3ff.png +0 -0
  2664. package/web/app/site/sengi/assets/emoji/64/1f926-2640.png +0 -0
  2665. package/web/app/site/sengi/assets/emoji/64/1f926-2642.png +0 -0
  2666. package/web/app/site/sengi/assets/emoji/64/1f926.png +0 -0
  2667. package/web/app/site/sengi/assets/emoji/64/1f927.png +0 -0
  2668. package/web/app/site/sengi/assets/emoji/64/1f928.png +0 -0
  2669. package/web/app/site/sengi/assets/emoji/64/1f929.png +0 -0
  2670. package/web/app/site/sengi/assets/emoji/64/1f92a.png +0 -0
  2671. package/web/app/site/sengi/assets/emoji/64/1f92b.png +0 -0
  2672. package/web/app/site/sengi/assets/emoji/64/1f92c.png +0 -0
  2673. package/web/app/site/sengi/assets/emoji/64/1f92d.png +0 -0
  2674. package/web/app/site/sengi/assets/emoji/64/1f92e.png +0 -0
  2675. package/web/app/site/sengi/assets/emoji/64/1f92f.png +0 -0
  2676. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fb.png +0 -0
  2677. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fc.png +0 -0
  2678. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fd.png +0 -0
  2679. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fe.png +0 -0
  2680. package/web/app/site/sengi/assets/emoji/64/1f930-1f3ff.png +0 -0
  2681. package/web/app/site/sengi/assets/emoji/64/1f930.png +0 -0
  2682. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fb.png +0 -0
  2683. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fc.png +0 -0
  2684. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fd.png +0 -0
  2685. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fe.png +0 -0
  2686. package/web/app/site/sengi/assets/emoji/64/1f931-1f3ff.png +0 -0
  2687. package/web/app/site/sengi/assets/emoji/64/1f931.png +0 -0
  2688. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fb.png +0 -0
  2689. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fc.png +0 -0
  2690. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fd.png +0 -0
  2691. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fe.png +0 -0
  2692. package/web/app/site/sengi/assets/emoji/64/1f932-1f3ff.png +0 -0
  2693. package/web/app/site/sengi/assets/emoji/64/1f932.png +0 -0
  2694. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fb.png +0 -0
  2695. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fc.png +0 -0
  2696. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fd.png +0 -0
  2697. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fe.png +0 -0
  2698. package/web/app/site/sengi/assets/emoji/64/1f933-1f3ff.png +0 -0
  2699. package/web/app/site/sengi/assets/emoji/64/1f933.png +0 -0
  2700. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fb.png +0 -0
  2701. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fc.png +0 -0
  2702. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fd.png +0 -0
  2703. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fe.png +0 -0
  2704. package/web/app/site/sengi/assets/emoji/64/1f934-1f3ff.png +0 -0
  2705. package/web/app/site/sengi/assets/emoji/64/1f934.png +0 -0
  2706. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fb-2640.png +0 -0
  2707. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fb-2642.png +0 -0
  2708. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fb.png +0 -0
  2709. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fc-2640.png +0 -0
  2710. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fc-2642.png +0 -0
  2711. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fc.png +0 -0
  2712. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fd-2640.png +0 -0
  2713. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fd-2642.png +0 -0
  2714. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fd.png +0 -0
  2715. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fe-2640.png +0 -0
  2716. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fe-2642.png +0 -0
  2717. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fe.png +0 -0
  2718. package/web/app/site/sengi/assets/emoji/64/1f935-1f3ff-2640.png +0 -0
  2719. package/web/app/site/sengi/assets/emoji/64/1f935-1f3ff-2642.png +0 -0
  2720. package/web/app/site/sengi/assets/emoji/64/1f935-1f3ff.png +0 -0
  2721. package/web/app/site/sengi/assets/emoji/64/1f935-2640.png +0 -0
  2722. package/web/app/site/sengi/assets/emoji/64/1f935-2642.png +0 -0
  2723. package/web/app/site/sengi/assets/emoji/64/1f935.png +0 -0
  2724. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fb.png +0 -0
  2725. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fc.png +0 -0
  2726. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fd.png +0 -0
  2727. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fe.png +0 -0
  2728. package/web/app/site/sengi/assets/emoji/64/1f936-1f3ff.png +0 -0
  2729. package/web/app/site/sengi/assets/emoji/64/1f936.png +0 -0
  2730. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fb-2640.png +0 -0
  2731. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fb-2642.png +0 -0
  2732. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fb.png +0 -0
  2733. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fc-2640.png +0 -0
  2734. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fc-2642.png +0 -0
  2735. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fc.png +0 -0
  2736. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fd-2640.png +0 -0
  2737. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fd-2642.png +0 -0
  2738. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fd.png +0 -0
  2739. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fe-2640.png +0 -0
  2740. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fe-2642.png +0 -0
  2741. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fe.png +0 -0
  2742. package/web/app/site/sengi/assets/emoji/64/1f937-1f3ff-2640.png +0 -0
  2743. package/web/app/site/sengi/assets/emoji/64/1f937-1f3ff-2642.png +0 -0
  2744. package/web/app/site/sengi/assets/emoji/64/1f937-1f3ff.png +0 -0
  2745. package/web/app/site/sengi/assets/emoji/64/1f937-2640.png +0 -0
  2746. package/web/app/site/sengi/assets/emoji/64/1f937-2642.png +0 -0
  2747. package/web/app/site/sengi/assets/emoji/64/1f937.png +0 -0
  2748. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fb-2640.png +0 -0
  2749. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fb-2642.png +0 -0
  2750. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fb.png +0 -0
  2751. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fc-2640.png +0 -0
  2752. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fc-2642.png +0 -0
  2753. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fc.png +0 -0
  2754. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fd-2640.png +0 -0
  2755. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fd-2642.png +0 -0
  2756. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fd.png +0 -0
  2757. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fe-2640.png +0 -0
  2758. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fe-2642.png +0 -0
  2759. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fe.png +0 -0
  2760. package/web/app/site/sengi/assets/emoji/64/1f938-1f3ff-2640.png +0 -0
  2761. package/web/app/site/sengi/assets/emoji/64/1f938-1f3ff-2642.png +0 -0
  2762. package/web/app/site/sengi/assets/emoji/64/1f938-1f3ff.png +0 -0
  2763. package/web/app/site/sengi/assets/emoji/64/1f938-2640.png +0 -0
  2764. package/web/app/site/sengi/assets/emoji/64/1f938-2642.png +0 -0
  2765. package/web/app/site/sengi/assets/emoji/64/1f938.png +0 -0
  2766. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fb-2640.png +0 -0
  2767. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fb-2642.png +0 -0
  2768. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fb.png +0 -0
  2769. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fc-2640.png +0 -0
  2770. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fc-2642.png +0 -0
  2771. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fc.png +0 -0
  2772. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fd-2640.png +0 -0
  2773. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fd-2642.png +0 -0
  2774. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fd.png +0 -0
  2775. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fe-2640.png +0 -0
  2776. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fe-2642.png +0 -0
  2777. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fe.png +0 -0
  2778. package/web/app/site/sengi/assets/emoji/64/1f939-1f3ff-2640.png +0 -0
  2779. package/web/app/site/sengi/assets/emoji/64/1f939-1f3ff-2642.png +0 -0
  2780. package/web/app/site/sengi/assets/emoji/64/1f939-1f3ff.png +0 -0
  2781. package/web/app/site/sengi/assets/emoji/64/1f939-2640.png +0 -0
  2782. package/web/app/site/sengi/assets/emoji/64/1f939-2642.png +0 -0
  2783. package/web/app/site/sengi/assets/emoji/64/1f939.png +0 -0
  2784. package/web/app/site/sengi/assets/emoji/64/1f93a.png +0 -0
  2785. package/web/app/site/sengi/assets/emoji/64/1f93c-2640.png +0 -0
  2786. package/web/app/site/sengi/assets/emoji/64/1f93c-2642.png +0 -0
  2787. package/web/app/site/sengi/assets/emoji/64/1f93c.png +0 -0
  2788. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fb-2640.png +0 -0
  2789. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fb-2642.png +0 -0
  2790. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fb.png +0 -0
  2791. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fc-2640.png +0 -0
  2792. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fc-2642.png +0 -0
  2793. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fc.png +0 -0
  2794. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fd-2640.png +0 -0
  2795. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fd-2642.png +0 -0
  2796. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fd.png +0 -0
  2797. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fe-2640.png +0 -0
  2798. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fe-2642.png +0 -0
  2799. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fe.png +0 -0
  2800. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3ff-2640.png +0 -0
  2801. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3ff-2642.png +0 -0
  2802. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3ff.png +0 -0
  2803. package/web/app/site/sengi/assets/emoji/64/1f93d-2640.png +0 -0
  2804. package/web/app/site/sengi/assets/emoji/64/1f93d-2642.png +0 -0
  2805. package/web/app/site/sengi/assets/emoji/64/1f93d.png +0 -0
  2806. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fb-2640.png +0 -0
  2807. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fb-2642.png +0 -0
  2808. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fb.png +0 -0
  2809. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fc-2640.png +0 -0
  2810. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fc-2642.png +0 -0
  2811. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fc.png +0 -0
  2812. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fd-2640.png +0 -0
  2813. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fd-2642.png +0 -0
  2814. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fd.png +0 -0
  2815. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fe-2640.png +0 -0
  2816. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fe-2642.png +0 -0
  2817. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fe.png +0 -0
  2818. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3ff-2640.png +0 -0
  2819. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3ff-2642.png +0 -0
  2820. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3ff.png +0 -0
  2821. package/web/app/site/sengi/assets/emoji/64/1f93e-2640.png +0 -0
  2822. package/web/app/site/sengi/assets/emoji/64/1f93e-2642.png +0 -0
  2823. package/web/app/site/sengi/assets/emoji/64/1f93e.png +0 -0
  2824. package/web/app/site/sengi/assets/emoji/64/1f93f.png +0 -0
  2825. package/web/app/site/sengi/assets/emoji/64/1f940.png +0 -0
  2826. package/web/app/site/sengi/assets/emoji/64/1f941.png +0 -0
  2827. package/web/app/site/sengi/assets/emoji/64/1f942.png +0 -0
  2828. package/web/app/site/sengi/assets/emoji/64/1f943.png +0 -0
  2829. package/web/app/site/sengi/assets/emoji/64/1f944.png +0 -0
  2830. package/web/app/site/sengi/assets/emoji/64/1f945.png +0 -0
  2831. package/web/app/site/sengi/assets/emoji/64/1f947.png +0 -0
  2832. package/web/app/site/sengi/assets/emoji/64/1f948.png +0 -0
  2833. package/web/app/site/sengi/assets/emoji/64/1f949.png +0 -0
  2834. package/web/app/site/sengi/assets/emoji/64/1f94a.png +0 -0
  2835. package/web/app/site/sengi/assets/emoji/64/1f94b.png +0 -0
  2836. package/web/app/site/sengi/assets/emoji/64/1f94c.png +0 -0
  2837. package/web/app/site/sengi/assets/emoji/64/1f94d.png +0 -0
  2838. package/web/app/site/sengi/assets/emoji/64/1f94e.png +0 -0
  2839. package/web/app/site/sengi/assets/emoji/64/1f94f.png +0 -0
  2840. package/web/app/site/sengi/assets/emoji/64/1f950.png +0 -0
  2841. package/web/app/site/sengi/assets/emoji/64/1f951.png +0 -0
  2842. package/web/app/site/sengi/assets/emoji/64/1f952.png +0 -0
  2843. package/web/app/site/sengi/assets/emoji/64/1f953.png +0 -0
  2844. package/web/app/site/sengi/assets/emoji/64/1f954.png +0 -0
  2845. package/web/app/site/sengi/assets/emoji/64/1f955.png +0 -0
  2846. package/web/app/site/sengi/assets/emoji/64/1f956.png +0 -0
  2847. package/web/app/site/sengi/assets/emoji/64/1f957.png +0 -0
  2848. package/web/app/site/sengi/assets/emoji/64/1f958.png +0 -0
  2849. package/web/app/site/sengi/assets/emoji/64/1f959.png +0 -0
  2850. package/web/app/site/sengi/assets/emoji/64/1f95a.png +0 -0
  2851. package/web/app/site/sengi/assets/emoji/64/1f95b.png +0 -0
  2852. package/web/app/site/sengi/assets/emoji/64/1f95c.png +0 -0
  2853. package/web/app/site/sengi/assets/emoji/64/1f95d.png +0 -0
  2854. package/web/app/site/sengi/assets/emoji/64/1f95e.png +0 -0
  2855. package/web/app/site/sengi/assets/emoji/64/1f95f.png +0 -0
  2856. package/web/app/site/sengi/assets/emoji/64/1f960.png +0 -0
  2857. package/web/app/site/sengi/assets/emoji/64/1f961.png +0 -0
  2858. package/web/app/site/sengi/assets/emoji/64/1f962.png +0 -0
  2859. package/web/app/site/sengi/assets/emoji/64/1f963.png +0 -0
  2860. package/web/app/site/sengi/assets/emoji/64/1f964.png +0 -0
  2861. package/web/app/site/sengi/assets/emoji/64/1f965.png +0 -0
  2862. package/web/app/site/sengi/assets/emoji/64/1f966.png +0 -0
  2863. package/web/app/site/sengi/assets/emoji/64/1f967.png +0 -0
  2864. package/web/app/site/sengi/assets/emoji/64/1f968.png +0 -0
  2865. package/web/app/site/sengi/assets/emoji/64/1f969.png +0 -0
  2866. package/web/app/site/sengi/assets/emoji/64/1f96a.png +0 -0
  2867. package/web/app/site/sengi/assets/emoji/64/1f96b.png +0 -0
  2868. package/web/app/site/sengi/assets/emoji/64/1f96c.png +0 -0
  2869. package/web/app/site/sengi/assets/emoji/64/1f96d.png +0 -0
  2870. package/web/app/site/sengi/assets/emoji/64/1f96e.png +0 -0
  2871. package/web/app/site/sengi/assets/emoji/64/1f96f.png +0 -0
  2872. package/web/app/site/sengi/assets/emoji/64/1f970.png +0 -0
  2873. package/web/app/site/sengi/assets/emoji/64/1f971.png +0 -0
  2874. package/web/app/site/sengi/assets/emoji/64/1f972.png +0 -0
  2875. package/web/app/site/sengi/assets/emoji/64/1f973.png +0 -0
  2876. package/web/app/site/sengi/assets/emoji/64/1f974.png +0 -0
  2877. package/web/app/site/sengi/assets/emoji/64/1f975.png +0 -0
  2878. package/web/app/site/sengi/assets/emoji/64/1f976.png +0 -0
  2879. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fb.png +0 -0
  2880. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fc.png +0 -0
  2881. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fd.png +0 -0
  2882. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fe.png +0 -0
  2883. package/web/app/site/sengi/assets/emoji/64/1f977-1f3ff.png +0 -0
  2884. package/web/app/site/sengi/assets/emoji/64/1f977.png +0 -0
  2885. package/web/app/site/sengi/assets/emoji/64/1f978.png +0 -0
  2886. package/web/app/site/sengi/assets/emoji/64/1f979.png +0 -0
  2887. package/web/app/site/sengi/assets/emoji/64/1f97a.png +0 -0
  2888. package/web/app/site/sengi/assets/emoji/64/1f97b.png +0 -0
  2889. package/web/app/site/sengi/assets/emoji/64/1f97c.png +0 -0
  2890. package/web/app/site/sengi/assets/emoji/64/1f97d.png +0 -0
  2891. package/web/app/site/sengi/assets/emoji/64/1f97e.png +0 -0
  2892. package/web/app/site/sengi/assets/emoji/64/1f97f.png +0 -0
  2893. package/web/app/site/sengi/assets/emoji/64/1f980.png +0 -0
  2894. package/web/app/site/sengi/assets/emoji/64/1f981.png +0 -0
  2895. package/web/app/site/sengi/assets/emoji/64/1f982.png +0 -0
  2896. package/web/app/site/sengi/assets/emoji/64/1f983.png +0 -0
  2897. package/web/app/site/sengi/assets/emoji/64/1f984.png +0 -0
  2898. package/web/app/site/sengi/assets/emoji/64/1f985.png +0 -0
  2899. package/web/app/site/sengi/assets/emoji/64/1f986.png +0 -0
  2900. package/web/app/site/sengi/assets/emoji/64/1f987.png +0 -0
  2901. package/web/app/site/sengi/assets/emoji/64/1f988.png +0 -0
  2902. package/web/app/site/sengi/assets/emoji/64/1f989.png +0 -0
  2903. package/web/app/site/sengi/assets/emoji/64/1f98a.png +0 -0
  2904. package/web/app/site/sengi/assets/emoji/64/1f98b.png +0 -0
  2905. package/web/app/site/sengi/assets/emoji/64/1f98c.png +0 -0
  2906. package/web/app/site/sengi/assets/emoji/64/1f98d.png +0 -0
  2907. package/web/app/site/sengi/assets/emoji/64/1f98e.png +0 -0
  2908. package/web/app/site/sengi/assets/emoji/64/1f98f.png +0 -0
  2909. package/web/app/site/sengi/assets/emoji/64/1f990.png +0 -0
  2910. package/web/app/site/sengi/assets/emoji/64/1f991.png +0 -0
  2911. package/web/app/site/sengi/assets/emoji/64/1f992.png +0 -0
  2912. package/web/app/site/sengi/assets/emoji/64/1f993.png +0 -0
  2913. package/web/app/site/sengi/assets/emoji/64/1f994.png +0 -0
  2914. package/web/app/site/sengi/assets/emoji/64/1f995.png +0 -0
  2915. package/web/app/site/sengi/assets/emoji/64/1f996.png +0 -0
  2916. package/web/app/site/sengi/assets/emoji/64/1f997.png +0 -0
  2917. package/web/app/site/sengi/assets/emoji/64/1f998.png +0 -0
  2918. package/web/app/site/sengi/assets/emoji/64/1f999.png +0 -0
  2919. package/web/app/site/sengi/assets/emoji/64/1f99a.png +0 -0
  2920. package/web/app/site/sengi/assets/emoji/64/1f99b.png +0 -0
  2921. package/web/app/site/sengi/assets/emoji/64/1f99c.png +0 -0
  2922. package/web/app/site/sengi/assets/emoji/64/1f99d.png +0 -0
  2923. package/web/app/site/sengi/assets/emoji/64/1f99e.png +0 -0
  2924. package/web/app/site/sengi/assets/emoji/64/1f99f.png +0 -0
  2925. package/web/app/site/sengi/assets/emoji/64/1f9a0.png +0 -0
  2926. package/web/app/site/sengi/assets/emoji/64/1f9a1.png +0 -0
  2927. package/web/app/site/sengi/assets/emoji/64/1f9a2.png +0 -0
  2928. package/web/app/site/sengi/assets/emoji/64/1f9a3.png +0 -0
  2929. package/web/app/site/sengi/assets/emoji/64/1f9a4.png +0 -0
  2930. package/web/app/site/sengi/assets/emoji/64/1f9a5.png +0 -0
  2931. package/web/app/site/sengi/assets/emoji/64/1f9a6.png +0 -0
  2932. package/web/app/site/sengi/assets/emoji/64/1f9a7.png +0 -0
  2933. package/web/app/site/sengi/assets/emoji/64/1f9a8.png +0 -0
  2934. package/web/app/site/sengi/assets/emoji/64/1f9a9.png +0 -0
  2935. package/web/app/site/sengi/assets/emoji/64/1f9aa.png +0 -0
  2936. package/web/app/site/sengi/assets/emoji/64/1f9ab.png +0 -0
  2937. package/web/app/site/sengi/assets/emoji/64/1f9ac.png +0 -0
  2938. package/web/app/site/sengi/assets/emoji/64/1f9ad.png +0 -0
  2939. package/web/app/site/sengi/assets/emoji/64/1f9ae.png +0 -0
  2940. package/web/app/site/sengi/assets/emoji/64/1f9af.png +0 -0
  2941. package/web/app/site/sengi/assets/emoji/64/1f9b0.png +0 -0
  2942. package/web/app/site/sengi/assets/emoji/64/1f9b1.png +0 -0
  2943. package/web/app/site/sengi/assets/emoji/64/1f9b2.png +0 -0
  2944. package/web/app/site/sengi/assets/emoji/64/1f9b3.png +0 -0
  2945. package/web/app/site/sengi/assets/emoji/64/1f9b4.png +0 -0
  2946. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fb.png +0 -0
  2947. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fc.png +0 -0
  2948. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fd.png +0 -0
  2949. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fe.png +0 -0
  2950. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3ff.png +0 -0
  2951. package/web/app/site/sengi/assets/emoji/64/1f9b5.png +0 -0
  2952. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fb.png +0 -0
  2953. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fc.png +0 -0
  2954. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fd.png +0 -0
  2955. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fe.png +0 -0
  2956. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3ff.png +0 -0
  2957. package/web/app/site/sengi/assets/emoji/64/1f9b6.png +0 -0
  2958. package/web/app/site/sengi/assets/emoji/64/1f9b7.png +0 -0
  2959. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fb-2640.png +0 -0
  2960. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fb-2642.png +0 -0
  2961. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fb.png +0 -0
  2962. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fc-2640.png +0 -0
  2963. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fc-2642.png +0 -0
  2964. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fc.png +0 -0
  2965. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fd-2640.png +0 -0
  2966. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fd-2642.png +0 -0
  2967. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fd.png +0 -0
  2968. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fe-2640.png +0 -0
  2969. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fe-2642.png +0 -0
  2970. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fe.png +0 -0
  2971. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3ff-2640.png +0 -0
  2972. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3ff-2642.png +0 -0
  2973. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3ff.png +0 -0
  2974. package/web/app/site/sengi/assets/emoji/64/1f9b8-2640.png +0 -0
  2975. package/web/app/site/sengi/assets/emoji/64/1f9b8-2642.png +0 -0
  2976. package/web/app/site/sengi/assets/emoji/64/1f9b8.png +0 -0
  2977. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fb-2640.png +0 -0
  2978. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fb-2642.png +0 -0
  2979. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fb.png +0 -0
  2980. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fc-2640.png +0 -0
  2981. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fc-2642.png +0 -0
  2982. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fc.png +0 -0
  2983. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fd-2640.png +0 -0
  2984. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fd-2642.png +0 -0
  2985. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fd.png +0 -0
  2986. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fe-2640.png +0 -0
  2987. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fe-2642.png +0 -0
  2988. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fe.png +0 -0
  2989. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3ff-2640.png +0 -0
  2990. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3ff-2642.png +0 -0
  2991. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3ff.png +0 -0
  2992. package/web/app/site/sengi/assets/emoji/64/1f9b9-2640.png +0 -0
  2993. package/web/app/site/sengi/assets/emoji/64/1f9b9-2642.png +0 -0
  2994. package/web/app/site/sengi/assets/emoji/64/1f9b9.png +0 -0
  2995. package/web/app/site/sengi/assets/emoji/64/1f9ba.png +0 -0
  2996. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fb.png +0 -0
  2997. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fc.png +0 -0
  2998. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fd.png +0 -0
  2999. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fe.png +0 -0
  3000. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3ff.png +0 -0
  3001. package/web/app/site/sengi/assets/emoji/64/1f9bb.png +0 -0
  3002. package/web/app/site/sengi/assets/emoji/64/1f9bc.png +0 -0
  3003. package/web/app/site/sengi/assets/emoji/64/1f9bd.png +0 -0
  3004. package/web/app/site/sengi/assets/emoji/64/1f9be.png +0 -0
  3005. package/web/app/site/sengi/assets/emoji/64/1f9bf.png +0 -0
  3006. package/web/app/site/sengi/assets/emoji/64/1f9c0.png +0 -0
  3007. package/web/app/site/sengi/assets/emoji/64/1f9c1.png +0 -0
  3008. package/web/app/site/sengi/assets/emoji/64/1f9c2.png +0 -0
  3009. package/web/app/site/sengi/assets/emoji/64/1f9c3.png +0 -0
  3010. package/web/app/site/sengi/assets/emoji/64/1f9c4.png +0 -0
  3011. package/web/app/site/sengi/assets/emoji/64/1f9c5.png +0 -0
  3012. package/web/app/site/sengi/assets/emoji/64/1f9c6.png +0 -0
  3013. package/web/app/site/sengi/assets/emoji/64/1f9c7.png +0 -0
  3014. package/web/app/site/sengi/assets/emoji/64/1f9c8.png +0 -0
  3015. package/web/app/site/sengi/assets/emoji/64/1f9c9.png +0 -0
  3016. package/web/app/site/sengi/assets/emoji/64/1f9ca.png +0 -0
  3017. package/web/app/site/sengi/assets/emoji/64/1f9cb.png +0 -0
  3018. package/web/app/site/sengi/assets/emoji/64/1f9cc.png +0 -0
  3019. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fb-2640.png +0 -0
  3020. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fb-2642.png +0 -0
  3021. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fb.png +0 -0
  3022. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fc-2640.png +0 -0
  3023. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fc-2642.png +0 -0
  3024. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fc.png +0 -0
  3025. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fd-2640.png +0 -0
  3026. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fd-2642.png +0 -0
  3027. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fd.png +0 -0
  3028. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fe-2640.png +0 -0
  3029. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fe-2642.png +0 -0
  3030. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fe.png +0 -0
  3031. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3ff-2640.png +0 -0
  3032. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3ff-2642.png +0 -0
  3033. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3ff.png +0 -0
  3034. package/web/app/site/sengi/assets/emoji/64/1f9cd-2640.png +0 -0
  3035. package/web/app/site/sengi/assets/emoji/64/1f9cd-2642.png +0 -0
  3036. package/web/app/site/sengi/assets/emoji/64/1f9cd.png +0 -0
  3037. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2640-27a1.png +0 -0
  3038. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2640.png +0 -0
  3039. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2642-27a1.png +0 -0
  3040. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2642.png +0 -0
  3041. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-27a1.png +0 -0
  3042. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb.png +0 -0
  3043. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2640-27a1.png +0 -0
  3044. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2640.png +0 -0
  3045. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2642-27a1.png +0 -0
  3046. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2642.png +0 -0
  3047. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-27a1.png +0 -0
  3048. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc.png +0 -0
  3049. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2640-27a1.png +0 -0
  3050. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2640.png +0 -0
  3051. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2642-27a1.png +0 -0
  3052. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2642.png +0 -0
  3053. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-27a1.png +0 -0
  3054. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd.png +0 -0
  3055. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2640-27a1.png +0 -0
  3056. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2640.png +0 -0
  3057. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2642-27a1.png +0 -0
  3058. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2642.png +0 -0
  3059. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-27a1.png +0 -0
  3060. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe.png +0 -0
  3061. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2640-27a1.png +0 -0
  3062. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2640.png +0 -0
  3063. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2642-27a1.png +0 -0
  3064. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2642.png +0 -0
  3065. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-27a1.png +0 -0
  3066. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff.png +0 -0
  3067. package/web/app/site/sengi/assets/emoji/64/1f9ce-2640-27a1.png +0 -0
  3068. package/web/app/site/sengi/assets/emoji/64/1f9ce-2640.png +0 -0
  3069. package/web/app/site/sengi/assets/emoji/64/1f9ce-2642-27a1.png +0 -0
  3070. package/web/app/site/sengi/assets/emoji/64/1f9ce-2642.png +0 -0
  3071. package/web/app/site/sengi/assets/emoji/64/1f9ce-27a1.png +0 -0
  3072. package/web/app/site/sengi/assets/emoji/64/1f9ce.png +0 -0
  3073. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fb-2640.png +0 -0
  3074. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fb-2642.png +0 -0
  3075. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fb.png +0 -0
  3076. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fc-2640.png +0 -0
  3077. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fc-2642.png +0 -0
  3078. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fc.png +0 -0
  3079. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fd-2640.png +0 -0
  3080. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fd-2642.png +0 -0
  3081. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fd.png +0 -0
  3082. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fe-2640.png +0 -0
  3083. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fe-2642.png +0 -0
  3084. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fe.png +0 -0
  3085. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3ff-2640.png +0 -0
  3086. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3ff-2642.png +0 -0
  3087. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3ff.png +0 -0
  3088. package/web/app/site/sengi/assets/emoji/64/1f9cf-2640.png +0 -0
  3089. package/web/app/site/sengi/assets/emoji/64/1f9cf-2642.png +0 -0
  3090. package/web/app/site/sengi/assets/emoji/64/1f9cf.png +0 -0
  3091. package/web/app/site/sengi/assets/emoji/64/1f9d0.png +0 -0
  3092. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f33e.png +0 -0
  3093. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f373.png +0 -0
  3094. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f37c.png +0 -0
  3095. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f384.png +0 -0
  3096. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f393.png +0 -0
  3097. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3a4.png +0 -0
  3098. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3a8.png +0 -0
  3099. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3eb.png +0 -0
  3100. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ed.png +0 -0
  3101. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f33e.png +0 -0
  3102. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f373.png +0 -0
  3103. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f37c.png +0 -0
  3104. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f384.png +0 -0
  3105. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f393.png +0 -0
  3106. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3a4.png +0 -0
  3107. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3a8.png +0 -0
  3108. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3eb.png +0 -0
  3109. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3ed.png +0 -0
  3110. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f4bb.png +0 -0
  3111. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f4bc.png +0 -0
  3112. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f527.png +0 -0
  3113. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f52c.png +0 -0
  3114. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f680.png +0 -0
  3115. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f692.png +0 -0
  3116. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fb.png +0 -0
  3117. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fc.png +0 -0
  3118. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fd.png +0 -0
  3119. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fe.png +0 -0
  3120. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3ff.png +0 -0
  3121. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9af-27a1.png +0 -0
  3122. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9af.png +0 -0
  3123. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b0.png +0 -0
  3124. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b1.png +0 -0
  3125. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b2.png +0 -0
  3126. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b3.png +0 -0
  3127. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bc-27a1.png +0 -0
  3128. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bc.png +0 -0
  3129. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bd-27a1.png +0 -0
  3130. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bd.png +0 -0
  3131. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2695.png +0 -0
  3132. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2696.png +0 -0
  3133. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2708.png +0 -0
  3134. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3135. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3136. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3137. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3138. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3fc.png +0 -0
  3139. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3fd.png +0 -0
  3140. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3fe.png +0 -0
  3141. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3ff.png +0 -0
  3142. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb.png +0 -0
  3143. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f33e.png +0 -0
  3144. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f373.png +0 -0
  3145. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f37c.png +0 -0
  3146. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f384.png +0 -0
  3147. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f393.png +0 -0
  3148. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3a4.png +0 -0
  3149. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3a8.png +0 -0
  3150. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3eb.png +0 -0
  3151. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3ed.png +0 -0
  3152. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f4bb.png +0 -0
  3153. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f4bc.png +0 -0
  3154. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f527.png +0 -0
  3155. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f52c.png +0 -0
  3156. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f680.png +0 -0
  3157. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f692.png +0 -0
  3158. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fb.png +0 -0
  3159. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fc.png +0 -0
  3160. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fd.png +0 -0
  3161. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fe.png +0 -0
  3162. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3ff.png +0 -0
  3163. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9af-27a1.png +0 -0
  3164. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9af.png +0 -0
  3165. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b0.png +0 -0
  3166. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b1.png +0 -0
  3167. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b2.png +0 -0
  3168. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b3.png +0 -0
  3169. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bc-27a1.png +0 -0
  3170. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bc.png +0 -0
  3171. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bd-27a1.png +0 -0
  3172. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bd.png +0 -0
  3173. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2695.png +0 -0
  3174. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2696.png +0 -0
  3175. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2708.png +0 -0
  3176. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3177. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3178. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3179. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3180. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3fb.png +0 -0
  3181. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3fd.png +0 -0
  3182. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3fe.png +0 -0
  3183. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3ff.png +0 -0
  3184. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc.png +0 -0
  3185. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f33e.png +0 -0
  3186. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f373.png +0 -0
  3187. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f37c.png +0 -0
  3188. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f384.png +0 -0
  3189. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f393.png +0 -0
  3190. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3a4.png +0 -0
  3191. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3a8.png +0 -0
  3192. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3eb.png +0 -0
  3193. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3ed.png +0 -0
  3194. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f4bb.png +0 -0
  3195. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f4bc.png +0 -0
  3196. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f527.png +0 -0
  3197. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f52c.png +0 -0
  3198. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f680.png +0 -0
  3199. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f692.png +0 -0
  3200. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fb.png +0 -0
  3201. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fc.png +0 -0
  3202. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fd.png +0 -0
  3203. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fe.png +0 -0
  3204. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3ff.png +0 -0
  3205. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9af-27a1.png +0 -0
  3206. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9af.png +0 -0
  3207. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b0.png +0 -0
  3208. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b1.png +0 -0
  3209. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b2.png +0 -0
  3210. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b3.png +0 -0
  3211. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bc-27a1.png +0 -0
  3212. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bc.png +0 -0
  3213. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bd-27a1.png +0 -0
  3214. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bd.png +0 -0
  3215. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2695.png +0 -0
  3216. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2696.png +0 -0
  3217. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2708.png +0 -0
  3218. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3219. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3220. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3221. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3222. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3fb.png +0 -0
  3223. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3fc.png +0 -0
  3224. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3fe.png +0 -0
  3225. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3ff.png +0 -0
  3226. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd.png +0 -0
  3227. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f33e.png +0 -0
  3228. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f373.png +0 -0
  3229. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f37c.png +0 -0
  3230. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f384.png +0 -0
  3231. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f393.png +0 -0
  3232. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3a4.png +0 -0
  3233. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3a8.png +0 -0
  3234. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3eb.png +0 -0
  3235. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3ed.png +0 -0
  3236. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f4bb.png +0 -0
  3237. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f4bc.png +0 -0
  3238. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f527.png +0 -0
  3239. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f52c.png +0 -0
  3240. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f680.png +0 -0
  3241. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f692.png +0 -0
  3242. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fb.png +0 -0
  3243. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fc.png +0 -0
  3244. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fd.png +0 -0
  3245. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fe.png +0 -0
  3246. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3ff.png +0 -0
  3247. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9af-27a1.png +0 -0
  3248. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9af.png +0 -0
  3249. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b0.png +0 -0
  3250. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b1.png +0 -0
  3251. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b2.png +0 -0
  3252. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b3.png +0 -0
  3253. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bc-27a1.png +0 -0
  3254. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bc.png +0 -0
  3255. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bd-27a1.png +0 -0
  3256. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bd.png +0 -0
  3257. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2695.png +0 -0
  3258. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2696.png +0 -0
  3259. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2708.png +0 -0
  3260. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3261. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3262. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3263. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3264. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3fb.png +0 -0
  3265. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3fc.png +0 -0
  3266. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3fd.png +0 -0
  3267. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3ff.png +0 -0
  3268. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe.png +0 -0
  3269. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f33e.png +0 -0
  3270. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f373.png +0 -0
  3271. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f37c.png +0 -0
  3272. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f384.png +0 -0
  3273. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f393.png +0 -0
  3274. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3a4.png +0 -0
  3275. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3a8.png +0 -0
  3276. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3eb.png +0 -0
  3277. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3ed.png +0 -0
  3278. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f4bb.png +0 -0
  3279. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f4bc.png +0 -0
  3280. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f527.png +0 -0
  3281. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f52c.png +0 -0
  3282. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f680.png +0 -0
  3283. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f692.png +0 -0
  3284. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fb.png +0 -0
  3285. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fc.png +0 -0
  3286. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fd.png +0 -0
  3287. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fe.png +0 -0
  3288. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3ff.png +0 -0
  3289. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9af-27a1.png +0 -0
  3290. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9af.png +0 -0
  3291. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b0.png +0 -0
  3292. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b1.png +0 -0
  3293. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b2.png +0 -0
  3294. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b3.png +0 -0
  3295. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bc-27a1.png +0 -0
  3296. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bc.png +0 -0
  3297. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bd-27a1.png +0 -0
  3298. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bd.png +0 -0
  3299. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2695.png +0 -0
  3300. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2696.png +0 -0
  3301. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2708.png +0 -0
  3302. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3303. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3304. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3305. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3306. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fb.png +0 -0
  3307. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fc.png +0 -0
  3308. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fd.png +0 -0
  3309. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fe.png +0 -0
  3310. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff.png +0 -0
  3311. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f4bb.png +0 -0
  3312. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f4bc.png +0 -0
  3313. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f527.png +0 -0
  3314. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f52c.png +0 -0
  3315. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f680.png +0 -0
  3316. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f692.png +0 -0
  3317. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f91d-1f9d1.png +0 -0
  3318. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9af-27a1.png +0 -0
  3319. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9af.png +0 -0
  3320. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b0.png +0 -0
  3321. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b1.png +0 -0
  3322. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b2.png +0 -0
  3323. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b3.png +0 -0
  3324. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bc-27a1.png +0 -0
  3325. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bc.png +0 -0
  3326. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bd-27a1.png +0 -0
  3327. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bd.png +0 -0
  3328. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d1-1f9d2-1f9d2.png +0 -0
  3329. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d1-1f9d2.png +0 -0
  3330. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d2-1f9d2.png +0 -0
  3331. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d2.png +0 -0
  3332. package/web/app/site/sengi/assets/emoji/64/1f9d1-2695.png +0 -0
  3333. package/web/app/site/sengi/assets/emoji/64/1f9d1-2696.png +0 -0
  3334. package/web/app/site/sengi/assets/emoji/64/1f9d1-2708.png +0 -0
  3335. package/web/app/site/sengi/assets/emoji/64/1f9d1.png +0 -0
  3336. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fb.png +0 -0
  3337. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fc.png +0 -0
  3338. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fd.png +0 -0
  3339. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fe.png +0 -0
  3340. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3ff.png +0 -0
  3341. package/web/app/site/sengi/assets/emoji/64/1f9d2.png +0 -0
  3342. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fb.png +0 -0
  3343. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fc.png +0 -0
  3344. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fd.png +0 -0
  3345. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fe.png +0 -0
  3346. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3ff.png +0 -0
  3347. package/web/app/site/sengi/assets/emoji/64/1f9d3.png +0 -0
  3348. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fb-2640.png +0 -0
  3349. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fb-2642.png +0 -0
  3350. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fb.png +0 -0
  3351. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fc-2640.png +0 -0
  3352. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fc-2642.png +0 -0
  3353. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fc.png +0 -0
  3354. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fd-2640.png +0 -0
  3355. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fd-2642.png +0 -0
  3356. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fd.png +0 -0
  3357. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fe-2640.png +0 -0
  3358. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fe-2642.png +0 -0
  3359. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fe.png +0 -0
  3360. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3ff-2640.png +0 -0
  3361. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3ff-2642.png +0 -0
  3362. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3ff.png +0 -0
  3363. package/web/app/site/sengi/assets/emoji/64/1f9d4-2640.png +0 -0
  3364. package/web/app/site/sengi/assets/emoji/64/1f9d4-2642.png +0 -0
  3365. package/web/app/site/sengi/assets/emoji/64/1f9d4.png +0 -0
  3366. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fb.png +0 -0
  3367. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fc.png +0 -0
  3368. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fd.png +0 -0
  3369. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fe.png +0 -0
  3370. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3ff.png +0 -0
  3371. package/web/app/site/sengi/assets/emoji/64/1f9d5.png +0 -0
  3372. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fb-2640.png +0 -0
  3373. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fb-2642.png +0 -0
  3374. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fb.png +0 -0
  3375. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fc-2640.png +0 -0
  3376. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fc-2642.png +0 -0
  3377. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fc.png +0 -0
  3378. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fd-2640.png +0 -0
  3379. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fd-2642.png +0 -0
  3380. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fd.png +0 -0
  3381. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fe-2640.png +0 -0
  3382. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fe-2642.png +0 -0
  3383. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fe.png +0 -0
  3384. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3ff-2640.png +0 -0
  3385. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3ff-2642.png +0 -0
  3386. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3ff.png +0 -0
  3387. package/web/app/site/sengi/assets/emoji/64/1f9d6-2640.png +0 -0
  3388. package/web/app/site/sengi/assets/emoji/64/1f9d6-2642.png +0 -0
  3389. package/web/app/site/sengi/assets/emoji/64/1f9d6.png +0 -0
  3390. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fb-2640.png +0 -0
  3391. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fb-2642.png +0 -0
  3392. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fb.png +0 -0
  3393. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fc-2640.png +0 -0
  3394. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fc-2642.png +0 -0
  3395. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fc.png +0 -0
  3396. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fd-2640.png +0 -0
  3397. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fd-2642.png +0 -0
  3398. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fd.png +0 -0
  3399. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fe-2640.png +0 -0
  3400. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fe-2642.png +0 -0
  3401. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fe.png +0 -0
  3402. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3ff-2640.png +0 -0
  3403. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3ff-2642.png +0 -0
  3404. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3ff.png +0 -0
  3405. package/web/app/site/sengi/assets/emoji/64/1f9d7-2640.png +0 -0
  3406. package/web/app/site/sengi/assets/emoji/64/1f9d7-2642.png +0 -0
  3407. package/web/app/site/sengi/assets/emoji/64/1f9d7.png +0 -0
  3408. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fb-2640.png +0 -0
  3409. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fb-2642.png +0 -0
  3410. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fb.png +0 -0
  3411. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fc-2640.png +0 -0
  3412. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fc-2642.png +0 -0
  3413. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fc.png +0 -0
  3414. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fd-2640.png +0 -0
  3415. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fd-2642.png +0 -0
  3416. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fd.png +0 -0
  3417. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fe-2640.png +0 -0
  3418. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fe-2642.png +0 -0
  3419. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fe.png +0 -0
  3420. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3ff-2640.png +0 -0
  3421. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3ff-2642.png +0 -0
  3422. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3ff.png +0 -0
  3423. package/web/app/site/sengi/assets/emoji/64/1f9d8-2640.png +0 -0
  3424. package/web/app/site/sengi/assets/emoji/64/1f9d8-2642.png +0 -0
  3425. package/web/app/site/sengi/assets/emoji/64/1f9d8.png +0 -0
  3426. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fb-2640.png +0 -0
  3427. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fb-2642.png +0 -0
  3428. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fb.png +0 -0
  3429. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fc-2640.png +0 -0
  3430. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fc-2642.png +0 -0
  3431. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fc.png +0 -0
  3432. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fd-2640.png +0 -0
  3433. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fd-2642.png +0 -0
  3434. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fd.png +0 -0
  3435. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fe-2640.png +0 -0
  3436. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fe-2642.png +0 -0
  3437. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fe.png +0 -0
  3438. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3ff-2640.png +0 -0
  3439. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3ff-2642.png +0 -0
  3440. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3ff.png +0 -0
  3441. package/web/app/site/sengi/assets/emoji/64/1f9d9-2640.png +0 -0
  3442. package/web/app/site/sengi/assets/emoji/64/1f9d9-2642.png +0 -0
  3443. package/web/app/site/sengi/assets/emoji/64/1f9d9.png +0 -0
  3444. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fb-2640.png +0 -0
  3445. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fb-2642.png +0 -0
  3446. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fb.png +0 -0
  3447. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fc-2640.png +0 -0
  3448. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fc-2642.png +0 -0
  3449. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fc.png +0 -0
  3450. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fd-2640.png +0 -0
  3451. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fd-2642.png +0 -0
  3452. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fd.png +0 -0
  3453. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fe-2640.png +0 -0
  3454. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fe-2642.png +0 -0
  3455. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fe.png +0 -0
  3456. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3ff-2640.png +0 -0
  3457. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3ff-2642.png +0 -0
  3458. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3ff.png +0 -0
  3459. package/web/app/site/sengi/assets/emoji/64/1f9da-2640.png +0 -0
  3460. package/web/app/site/sengi/assets/emoji/64/1f9da-2642.png +0 -0
  3461. package/web/app/site/sengi/assets/emoji/64/1f9da.png +0 -0
  3462. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fb-2640.png +0 -0
  3463. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fb-2642.png +0 -0
  3464. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fb.png +0 -0
  3465. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fc-2640.png +0 -0
  3466. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fc-2642.png +0 -0
  3467. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fc.png +0 -0
  3468. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fd-2640.png +0 -0
  3469. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fd-2642.png +0 -0
  3470. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fd.png +0 -0
  3471. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fe-2640.png +0 -0
  3472. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fe-2642.png +0 -0
  3473. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fe.png +0 -0
  3474. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3ff-2640.png +0 -0
  3475. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3ff-2642.png +0 -0
  3476. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3ff.png +0 -0
  3477. package/web/app/site/sengi/assets/emoji/64/1f9db-2640.png +0 -0
  3478. package/web/app/site/sengi/assets/emoji/64/1f9db-2642.png +0 -0
  3479. package/web/app/site/sengi/assets/emoji/64/1f9db.png +0 -0
  3480. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fb-2640.png +0 -0
  3481. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fb-2642.png +0 -0
  3482. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fb.png +0 -0
  3483. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fc-2640.png +0 -0
  3484. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fc-2642.png +0 -0
  3485. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fc.png +0 -0
  3486. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fd-2640.png +0 -0
  3487. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fd-2642.png +0 -0
  3488. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fd.png +0 -0
  3489. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fe-2640.png +0 -0
  3490. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fe-2642.png +0 -0
  3491. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fe.png +0 -0
  3492. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3ff-2640.png +0 -0
  3493. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3ff-2642.png +0 -0
  3494. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3ff.png +0 -0
  3495. package/web/app/site/sengi/assets/emoji/64/1f9dc-2640.png +0 -0
  3496. package/web/app/site/sengi/assets/emoji/64/1f9dc-2642.png +0 -0
  3497. package/web/app/site/sengi/assets/emoji/64/1f9dc.png +0 -0
  3498. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fb-2640.png +0 -0
  3499. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fb-2642.png +0 -0
  3500. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fb.png +0 -0
  3501. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fc-2640.png +0 -0
  3502. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fc-2642.png +0 -0
  3503. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fc.png +0 -0
  3504. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fd-2640.png +0 -0
  3505. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fd-2642.png +0 -0
  3506. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fd.png +0 -0
  3507. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fe-2640.png +0 -0
  3508. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fe-2642.png +0 -0
  3509. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fe.png +0 -0
  3510. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3ff-2640.png +0 -0
  3511. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3ff-2642.png +0 -0
  3512. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3ff.png +0 -0
  3513. package/web/app/site/sengi/assets/emoji/64/1f9dd-2640.png +0 -0
  3514. package/web/app/site/sengi/assets/emoji/64/1f9dd-2642.png +0 -0
  3515. package/web/app/site/sengi/assets/emoji/64/1f9dd.png +0 -0
  3516. package/web/app/site/sengi/assets/emoji/64/1f9de-2640.png +0 -0
  3517. package/web/app/site/sengi/assets/emoji/64/1f9de-2642.png +0 -0
  3518. package/web/app/site/sengi/assets/emoji/64/1f9de.png +0 -0
  3519. package/web/app/site/sengi/assets/emoji/64/1f9df-2640.png +0 -0
  3520. package/web/app/site/sengi/assets/emoji/64/1f9df-2642.png +0 -0
  3521. package/web/app/site/sengi/assets/emoji/64/1f9df.png +0 -0
  3522. package/web/app/site/sengi/assets/emoji/64/1f9e0.png +0 -0
  3523. package/web/app/site/sengi/assets/emoji/64/1f9e1.png +0 -0
  3524. package/web/app/site/sengi/assets/emoji/64/1f9e2.png +0 -0
  3525. package/web/app/site/sengi/assets/emoji/64/1f9e3.png +0 -0
  3526. package/web/app/site/sengi/assets/emoji/64/1f9e4.png +0 -0
  3527. package/web/app/site/sengi/assets/emoji/64/1f9e5.png +0 -0
  3528. package/web/app/site/sengi/assets/emoji/64/1f9e6.png +0 -0
  3529. package/web/app/site/sengi/assets/emoji/64/1f9e7.png +0 -0
  3530. package/web/app/site/sengi/assets/emoji/64/1f9e8.png +0 -0
  3531. package/web/app/site/sengi/assets/emoji/64/1f9e9.png +0 -0
  3532. package/web/app/site/sengi/assets/emoji/64/1f9ea.png +0 -0
  3533. package/web/app/site/sengi/assets/emoji/64/1f9eb.png +0 -0
  3534. package/web/app/site/sengi/assets/emoji/64/1f9ec.png +0 -0
  3535. package/web/app/site/sengi/assets/emoji/64/1f9ed.png +0 -0
  3536. package/web/app/site/sengi/assets/emoji/64/1f9ee.png +0 -0
  3537. package/web/app/site/sengi/assets/emoji/64/1f9ef.png +0 -0
  3538. package/web/app/site/sengi/assets/emoji/64/1f9f0.png +0 -0
  3539. package/web/app/site/sengi/assets/emoji/64/1f9f1.png +0 -0
  3540. package/web/app/site/sengi/assets/emoji/64/1f9f2.png +0 -0
  3541. package/web/app/site/sengi/assets/emoji/64/1f9f3.png +0 -0
  3542. package/web/app/site/sengi/assets/emoji/64/1f9f4.png +0 -0
  3543. package/web/app/site/sengi/assets/emoji/64/1f9f5.png +0 -0
  3544. package/web/app/site/sengi/assets/emoji/64/1f9f6.png +0 -0
  3545. package/web/app/site/sengi/assets/emoji/64/1f9f7.png +0 -0
  3546. package/web/app/site/sengi/assets/emoji/64/1f9f8.png +0 -0
  3547. package/web/app/site/sengi/assets/emoji/64/1f9f9.png +0 -0
  3548. package/web/app/site/sengi/assets/emoji/64/1f9fa.png +0 -0
  3549. package/web/app/site/sengi/assets/emoji/64/1f9fb.png +0 -0
  3550. package/web/app/site/sengi/assets/emoji/64/1f9fc.png +0 -0
  3551. package/web/app/site/sengi/assets/emoji/64/1f9fd.png +0 -0
  3552. package/web/app/site/sengi/assets/emoji/64/1f9fe.png +0 -0
  3553. package/web/app/site/sengi/assets/emoji/64/1f9ff.png +0 -0
  3554. package/web/app/site/sengi/assets/emoji/64/1fa70.png +0 -0
  3555. package/web/app/site/sengi/assets/emoji/64/1fa71.png +0 -0
  3556. package/web/app/site/sengi/assets/emoji/64/1fa72.png +0 -0
  3557. package/web/app/site/sengi/assets/emoji/64/1fa73.png +0 -0
  3558. package/web/app/site/sengi/assets/emoji/64/1fa74.png +0 -0
  3559. package/web/app/site/sengi/assets/emoji/64/1fa75.png +0 -0
  3560. package/web/app/site/sengi/assets/emoji/64/1fa76.png +0 -0
  3561. package/web/app/site/sengi/assets/emoji/64/1fa77.png +0 -0
  3562. package/web/app/site/sengi/assets/emoji/64/1fa78.png +0 -0
  3563. package/web/app/site/sengi/assets/emoji/64/1fa79.png +0 -0
  3564. package/web/app/site/sengi/assets/emoji/64/1fa7a.png +0 -0
  3565. package/web/app/site/sengi/assets/emoji/64/1fa7b.png +0 -0
  3566. package/web/app/site/sengi/assets/emoji/64/1fa7c.png +0 -0
  3567. package/web/app/site/sengi/assets/emoji/64/1fa80.png +0 -0
  3568. package/web/app/site/sengi/assets/emoji/64/1fa81.png +0 -0
  3569. package/web/app/site/sengi/assets/emoji/64/1fa82.png +0 -0
  3570. package/web/app/site/sengi/assets/emoji/64/1fa83.png +0 -0
  3571. package/web/app/site/sengi/assets/emoji/64/1fa84.png +0 -0
  3572. package/web/app/site/sengi/assets/emoji/64/1fa85.png +0 -0
  3573. package/web/app/site/sengi/assets/emoji/64/1fa86.png +0 -0
  3574. package/web/app/site/sengi/assets/emoji/64/1fa87.png +0 -0
  3575. package/web/app/site/sengi/assets/emoji/64/1fa88.png +0 -0
  3576. package/web/app/site/sengi/assets/emoji/64/1fa89.png +0 -0
  3577. package/web/app/site/sengi/assets/emoji/64/1fa8f.png +0 -0
  3578. package/web/app/site/sengi/assets/emoji/64/1fa90.png +0 -0
  3579. package/web/app/site/sengi/assets/emoji/64/1fa91.png +0 -0
  3580. package/web/app/site/sengi/assets/emoji/64/1fa92.png +0 -0
  3581. package/web/app/site/sengi/assets/emoji/64/1fa93.png +0 -0
  3582. package/web/app/site/sengi/assets/emoji/64/1fa94.png +0 -0
  3583. package/web/app/site/sengi/assets/emoji/64/1fa95.png +0 -0
  3584. package/web/app/site/sengi/assets/emoji/64/1fa96.png +0 -0
  3585. package/web/app/site/sengi/assets/emoji/64/1fa97.png +0 -0
  3586. package/web/app/site/sengi/assets/emoji/64/1fa98.png +0 -0
  3587. package/web/app/site/sengi/assets/emoji/64/1fa99.png +0 -0
  3588. package/web/app/site/sengi/assets/emoji/64/1fa9a.png +0 -0
  3589. package/web/app/site/sengi/assets/emoji/64/1fa9b.png +0 -0
  3590. package/web/app/site/sengi/assets/emoji/64/1fa9c.png +0 -0
  3591. package/web/app/site/sengi/assets/emoji/64/1fa9d.png +0 -0
  3592. package/web/app/site/sengi/assets/emoji/64/1fa9e.png +0 -0
  3593. package/web/app/site/sengi/assets/emoji/64/1fa9f.png +0 -0
  3594. package/web/app/site/sengi/assets/emoji/64/1faa0.png +0 -0
  3595. package/web/app/site/sengi/assets/emoji/64/1faa1.png +0 -0
  3596. package/web/app/site/sengi/assets/emoji/64/1faa2.png +0 -0
  3597. package/web/app/site/sengi/assets/emoji/64/1faa3.png +0 -0
  3598. package/web/app/site/sengi/assets/emoji/64/1faa4.png +0 -0
  3599. package/web/app/site/sengi/assets/emoji/64/1faa5.png +0 -0
  3600. package/web/app/site/sengi/assets/emoji/64/1faa6.png +0 -0
  3601. package/web/app/site/sengi/assets/emoji/64/1faa7.png +0 -0
  3602. package/web/app/site/sengi/assets/emoji/64/1faa8.png +0 -0
  3603. package/web/app/site/sengi/assets/emoji/64/1faa9.png +0 -0
  3604. package/web/app/site/sengi/assets/emoji/64/1faaa.png +0 -0
  3605. package/web/app/site/sengi/assets/emoji/64/1faab.png +0 -0
  3606. package/web/app/site/sengi/assets/emoji/64/1faac.png +0 -0
  3607. package/web/app/site/sengi/assets/emoji/64/1faad.png +0 -0
  3608. package/web/app/site/sengi/assets/emoji/64/1faae.png +0 -0
  3609. package/web/app/site/sengi/assets/emoji/64/1faaf.png +0 -0
  3610. package/web/app/site/sengi/assets/emoji/64/1fab0.png +0 -0
  3611. package/web/app/site/sengi/assets/emoji/64/1fab1.png +0 -0
  3612. package/web/app/site/sengi/assets/emoji/64/1fab2.png +0 -0
  3613. package/web/app/site/sengi/assets/emoji/64/1fab3.png +0 -0
  3614. package/web/app/site/sengi/assets/emoji/64/1fab4.png +0 -0
  3615. package/web/app/site/sengi/assets/emoji/64/1fab5.png +0 -0
  3616. package/web/app/site/sengi/assets/emoji/64/1fab6.png +0 -0
  3617. package/web/app/site/sengi/assets/emoji/64/1fab7.png +0 -0
  3618. package/web/app/site/sengi/assets/emoji/64/1fab8.png +0 -0
  3619. package/web/app/site/sengi/assets/emoji/64/1fab9.png +0 -0
  3620. package/web/app/site/sengi/assets/emoji/64/1faba.png +0 -0
  3621. package/web/app/site/sengi/assets/emoji/64/1fabb.png +0 -0
  3622. package/web/app/site/sengi/assets/emoji/64/1fabc.png +0 -0
  3623. package/web/app/site/sengi/assets/emoji/64/1fabd.png +0 -0
  3624. package/web/app/site/sengi/assets/emoji/64/1fabe.png +0 -0
  3625. package/web/app/site/sengi/assets/emoji/64/1fabf.png +0 -0
  3626. package/web/app/site/sengi/assets/emoji/64/1fac0.png +0 -0
  3627. package/web/app/site/sengi/assets/emoji/64/1fac1.png +0 -0
  3628. package/web/app/site/sengi/assets/emoji/64/1fac2.png +0 -0
  3629. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fb.png +0 -0
  3630. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fc.png +0 -0
  3631. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fd.png +0 -0
  3632. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fe.png +0 -0
  3633. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3ff.png +0 -0
  3634. package/web/app/site/sengi/assets/emoji/64/1fac3.png +0 -0
  3635. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fb.png +0 -0
  3636. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fc.png +0 -0
  3637. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fd.png +0 -0
  3638. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fe.png +0 -0
  3639. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3ff.png +0 -0
  3640. package/web/app/site/sengi/assets/emoji/64/1fac4.png +0 -0
  3641. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fb.png +0 -0
  3642. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fc.png +0 -0
  3643. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fd.png +0 -0
  3644. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fe.png +0 -0
  3645. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3ff.png +0 -0
  3646. package/web/app/site/sengi/assets/emoji/64/1fac5.png +0 -0
  3647. package/web/app/site/sengi/assets/emoji/64/1fac6.png +0 -0
  3648. package/web/app/site/sengi/assets/emoji/64/1face.png +0 -0
  3649. package/web/app/site/sengi/assets/emoji/64/1facf.png +0 -0
  3650. package/web/app/site/sengi/assets/emoji/64/1fad0.png +0 -0
  3651. package/web/app/site/sengi/assets/emoji/64/1fad1.png +0 -0
  3652. package/web/app/site/sengi/assets/emoji/64/1fad2.png +0 -0
  3653. package/web/app/site/sengi/assets/emoji/64/1fad3.png +0 -0
  3654. package/web/app/site/sengi/assets/emoji/64/1fad4.png +0 -0
  3655. package/web/app/site/sengi/assets/emoji/64/1fad5.png +0 -0
  3656. package/web/app/site/sengi/assets/emoji/64/1fad6.png +0 -0
  3657. package/web/app/site/sengi/assets/emoji/64/1fad7.png +0 -0
  3658. package/web/app/site/sengi/assets/emoji/64/1fad8.png +0 -0
  3659. package/web/app/site/sengi/assets/emoji/64/1fad9.png +0 -0
  3660. package/web/app/site/sengi/assets/emoji/64/1fada.png +0 -0
  3661. package/web/app/site/sengi/assets/emoji/64/1fadb.png +0 -0
  3662. package/web/app/site/sengi/assets/emoji/64/1fadc.png +0 -0
  3663. package/web/app/site/sengi/assets/emoji/64/1fadf.png +0 -0
  3664. package/web/app/site/sengi/assets/emoji/64/1fae0.png +0 -0
  3665. package/web/app/site/sengi/assets/emoji/64/1fae1.png +0 -0
  3666. package/web/app/site/sengi/assets/emoji/64/1fae2.png +0 -0
  3667. package/web/app/site/sengi/assets/emoji/64/1fae3.png +0 -0
  3668. package/web/app/site/sengi/assets/emoji/64/1fae4.png +0 -0
  3669. package/web/app/site/sengi/assets/emoji/64/1fae5.png +0 -0
  3670. package/web/app/site/sengi/assets/emoji/64/1fae6.png +0 -0
  3671. package/web/app/site/sengi/assets/emoji/64/1fae7.png +0 -0
  3672. package/web/app/site/sengi/assets/emoji/64/1fae8.png +0 -0
  3673. package/web/app/site/sengi/assets/emoji/64/1fae9.png +0 -0
  3674. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fb.png +0 -0
  3675. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fc.png +0 -0
  3676. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fd.png +0 -0
  3677. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fe.png +0 -0
  3678. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3ff.png +0 -0
  3679. package/web/app/site/sengi/assets/emoji/64/1faf0.png +0 -0
  3680. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3fc.png +0 -0
  3681. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3fd.png +0 -0
  3682. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3fe.png +0 -0
  3683. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3ff.png +0 -0
  3684. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb.png +0 -0
  3685. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3fb.png +0 -0
  3686. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3fd.png +0 -0
  3687. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3fe.png +0 -0
  3688. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3ff.png +0 -0
  3689. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc.png +0 -0
  3690. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3fb.png +0 -0
  3691. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3fc.png +0 -0
  3692. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3fe.png +0 -0
  3693. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3ff.png +0 -0
  3694. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd.png +0 -0
  3695. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3fb.png +0 -0
  3696. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3fc.png +0 -0
  3697. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3fd.png +0 -0
  3698. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3ff.png +0 -0
  3699. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe.png +0 -0
  3700. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fb.png +0 -0
  3701. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fc.png +0 -0
  3702. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fd.png +0 -0
  3703. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fe.png +0 -0
  3704. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff.png +0 -0
  3705. package/web/app/site/sengi/assets/emoji/64/1faf1.png +0 -0
  3706. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fb.png +0 -0
  3707. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fc.png +0 -0
  3708. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fd.png +0 -0
  3709. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fe.png +0 -0
  3710. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3ff.png +0 -0
  3711. package/web/app/site/sengi/assets/emoji/64/1faf2.png +0 -0
  3712. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fb.png +0 -0
  3713. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fc.png +0 -0
  3714. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fd.png +0 -0
  3715. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fe.png +0 -0
  3716. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3ff.png +0 -0
  3717. package/web/app/site/sengi/assets/emoji/64/1faf3.png +0 -0
  3718. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fb.png +0 -0
  3719. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fc.png +0 -0
  3720. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fd.png +0 -0
  3721. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fe.png +0 -0
  3722. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3ff.png +0 -0
  3723. package/web/app/site/sengi/assets/emoji/64/1faf4.png +0 -0
  3724. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fb.png +0 -0
  3725. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fc.png +0 -0
  3726. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fd.png +0 -0
  3727. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fe.png +0 -0
  3728. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3ff.png +0 -0
  3729. package/web/app/site/sengi/assets/emoji/64/1faf5.png +0 -0
  3730. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fb.png +0 -0
  3731. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fc.png +0 -0
  3732. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fd.png +0 -0
  3733. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fe.png +0 -0
  3734. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3ff.png +0 -0
  3735. package/web/app/site/sengi/assets/emoji/64/1faf6.png +0 -0
  3736. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fb.png +0 -0
  3737. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fc.png +0 -0
  3738. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fd.png +0 -0
  3739. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fe.png +0 -0
  3740. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3ff.png +0 -0
  3741. package/web/app/site/sengi/assets/emoji/64/1faf7.png +0 -0
  3742. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fb.png +0 -0
  3743. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fc.png +0 -0
  3744. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fd.png +0 -0
  3745. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fe.png +0 -0
  3746. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3ff.png +0 -0
  3747. package/web/app/site/sengi/assets/emoji/64/1faf8.png +0 -0
  3748. package/web/app/site/sengi/assets/emoji/64/203c.png +0 -0
  3749. package/web/app/site/sengi/assets/emoji/64/2049.png +0 -0
  3750. package/web/app/site/sengi/assets/emoji/64/2122.png +0 -0
  3751. package/web/app/site/sengi/assets/emoji/64/2139.png +0 -0
  3752. package/web/app/site/sengi/assets/emoji/64/2194.png +0 -0
  3753. package/web/app/site/sengi/assets/emoji/64/2195.png +0 -0
  3754. package/web/app/site/sengi/assets/emoji/64/2196.png +0 -0
  3755. package/web/app/site/sengi/assets/emoji/64/2197.png +0 -0
  3756. package/web/app/site/sengi/assets/emoji/64/2198.png +0 -0
  3757. package/web/app/site/sengi/assets/emoji/64/2199.png +0 -0
  3758. package/web/app/site/sengi/assets/emoji/64/21a9.png +0 -0
  3759. package/web/app/site/sengi/assets/emoji/64/21aa.png +0 -0
  3760. package/web/app/site/sengi/assets/emoji/64/231a.png +0 -0
  3761. package/web/app/site/sengi/assets/emoji/64/231b.png +0 -0
  3762. package/web/app/site/sengi/assets/emoji/64/2328.png +0 -0
  3763. package/web/app/site/sengi/assets/emoji/64/23cf.png +0 -0
  3764. package/web/app/site/sengi/assets/emoji/64/23e9.png +0 -0
  3765. package/web/app/site/sengi/assets/emoji/64/23ea.png +0 -0
  3766. package/web/app/site/sengi/assets/emoji/64/23eb.png +0 -0
  3767. package/web/app/site/sengi/assets/emoji/64/23ec.png +0 -0
  3768. package/web/app/site/sengi/assets/emoji/64/23ed.png +0 -0
  3769. package/web/app/site/sengi/assets/emoji/64/23ee.png +0 -0
  3770. package/web/app/site/sengi/assets/emoji/64/23ef.png +0 -0
  3771. package/web/app/site/sengi/assets/emoji/64/23f0.png +0 -0
  3772. package/web/app/site/sengi/assets/emoji/64/23f1.png +0 -0
  3773. package/web/app/site/sengi/assets/emoji/64/23f2.png +0 -0
  3774. package/web/app/site/sengi/assets/emoji/64/23f3.png +0 -0
  3775. package/web/app/site/sengi/assets/emoji/64/23f8.png +0 -0
  3776. package/web/app/site/sengi/assets/emoji/64/23f9.png +0 -0
  3777. package/web/app/site/sengi/assets/emoji/64/23fa.png +0 -0
  3778. package/web/app/site/sengi/assets/emoji/64/24c2.png +0 -0
  3779. package/web/app/site/sengi/assets/emoji/64/25aa.png +0 -0
  3780. package/web/app/site/sengi/assets/emoji/64/25ab.png +0 -0
  3781. package/web/app/site/sengi/assets/emoji/64/25b6.png +0 -0
  3782. package/web/app/site/sengi/assets/emoji/64/25c0.png +0 -0
  3783. package/web/app/site/sengi/assets/emoji/64/25fb.png +0 -0
  3784. package/web/app/site/sengi/assets/emoji/64/25fc.png +0 -0
  3785. package/web/app/site/sengi/assets/emoji/64/25fd.png +0 -0
  3786. package/web/app/site/sengi/assets/emoji/64/25fe.png +0 -0
  3787. package/web/app/site/sengi/assets/emoji/64/2600.png +0 -0
  3788. package/web/app/site/sengi/assets/emoji/64/2601.png +0 -0
  3789. package/web/app/site/sengi/assets/emoji/64/2602.png +0 -0
  3790. package/web/app/site/sengi/assets/emoji/64/2603.png +0 -0
  3791. package/web/app/site/sengi/assets/emoji/64/2604.png +0 -0
  3792. package/web/app/site/sengi/assets/emoji/64/260e.png +0 -0
  3793. package/web/app/site/sengi/assets/emoji/64/2611.png +0 -0
  3794. package/web/app/site/sengi/assets/emoji/64/2614.png +0 -0
  3795. package/web/app/site/sengi/assets/emoji/64/2615.png +0 -0
  3796. package/web/app/site/sengi/assets/emoji/64/2618.png +0 -0
  3797. package/web/app/site/sengi/assets/emoji/64/261d-1f3fb.png +0 -0
  3798. package/web/app/site/sengi/assets/emoji/64/261d-1f3fc.png +0 -0
  3799. package/web/app/site/sengi/assets/emoji/64/261d-1f3fd.png +0 -0
  3800. package/web/app/site/sengi/assets/emoji/64/261d-1f3fe.png +0 -0
  3801. package/web/app/site/sengi/assets/emoji/64/261d-1f3ff.png +0 -0
  3802. package/web/app/site/sengi/assets/emoji/64/261d.png +0 -0
  3803. package/web/app/site/sengi/assets/emoji/64/2620.png +0 -0
  3804. package/web/app/site/sengi/assets/emoji/64/2622.png +0 -0
  3805. package/web/app/site/sengi/assets/emoji/64/2623.png +0 -0
  3806. package/web/app/site/sengi/assets/emoji/64/2626.png +0 -0
  3807. package/web/app/site/sengi/assets/emoji/64/262a.png +0 -0
  3808. package/web/app/site/sengi/assets/emoji/64/262e.png +0 -0
  3809. package/web/app/site/sengi/assets/emoji/64/262f.png +0 -0
  3810. package/web/app/site/sengi/assets/emoji/64/2638.png +0 -0
  3811. package/web/app/site/sengi/assets/emoji/64/2639.png +0 -0
  3812. package/web/app/site/sengi/assets/emoji/64/263a.png +0 -0
  3813. package/web/app/site/sengi/assets/emoji/64/2640.png +0 -0
  3814. package/web/app/site/sengi/assets/emoji/64/2642.png +0 -0
  3815. package/web/app/site/sengi/assets/emoji/64/2648.png +0 -0
  3816. package/web/app/site/sengi/assets/emoji/64/2649.png +0 -0
  3817. package/web/app/site/sengi/assets/emoji/64/264a.png +0 -0
  3818. package/web/app/site/sengi/assets/emoji/64/264b.png +0 -0
  3819. package/web/app/site/sengi/assets/emoji/64/264c.png +0 -0
  3820. package/web/app/site/sengi/assets/emoji/64/264d.png +0 -0
  3821. package/web/app/site/sengi/assets/emoji/64/264e.png +0 -0
  3822. package/web/app/site/sengi/assets/emoji/64/264f.png +0 -0
  3823. package/web/app/site/sengi/assets/emoji/64/2650.png +0 -0
  3824. package/web/app/site/sengi/assets/emoji/64/2651.png +0 -0
  3825. package/web/app/site/sengi/assets/emoji/64/2652.png +0 -0
  3826. package/web/app/site/sengi/assets/emoji/64/2653.png +0 -0
  3827. package/web/app/site/sengi/assets/emoji/64/265f.png +0 -0
  3828. package/web/app/site/sengi/assets/emoji/64/2660.png +0 -0
  3829. package/web/app/site/sengi/assets/emoji/64/2663.png +0 -0
  3830. package/web/app/site/sengi/assets/emoji/64/2665.png +0 -0
  3831. package/web/app/site/sengi/assets/emoji/64/2666.png +0 -0
  3832. package/web/app/site/sengi/assets/emoji/64/2668.png +0 -0
  3833. package/web/app/site/sengi/assets/emoji/64/267b.png +0 -0
  3834. package/web/app/site/sengi/assets/emoji/64/267e.png +0 -0
  3835. package/web/app/site/sengi/assets/emoji/64/267f.png +0 -0
  3836. package/web/app/site/sengi/assets/emoji/64/2692.png +0 -0
  3837. package/web/app/site/sengi/assets/emoji/64/2693.png +0 -0
  3838. package/web/app/site/sengi/assets/emoji/64/2694.png +0 -0
  3839. package/web/app/site/sengi/assets/emoji/64/2695.png +0 -0
  3840. package/web/app/site/sengi/assets/emoji/64/2696.png +0 -0
  3841. package/web/app/site/sengi/assets/emoji/64/2697.png +0 -0
  3842. package/web/app/site/sengi/assets/emoji/64/2699.png +0 -0
  3843. package/web/app/site/sengi/assets/emoji/64/269b.png +0 -0
  3844. package/web/app/site/sengi/assets/emoji/64/269c.png +0 -0
  3845. package/web/app/site/sengi/assets/emoji/64/26a0.png +0 -0
  3846. package/web/app/site/sengi/assets/emoji/64/26a1.png +0 -0
  3847. package/web/app/site/sengi/assets/emoji/64/26a7.png +0 -0
  3848. package/web/app/site/sengi/assets/emoji/64/26aa.png +0 -0
  3849. package/web/app/site/sengi/assets/emoji/64/26ab.png +0 -0
  3850. package/web/app/site/sengi/assets/emoji/64/26b0.png +0 -0
  3851. package/web/app/site/sengi/assets/emoji/64/26b1.png +0 -0
  3852. package/web/app/site/sengi/assets/emoji/64/26bd.png +0 -0
  3853. package/web/app/site/sengi/assets/emoji/64/26be.png +0 -0
  3854. package/web/app/site/sengi/assets/emoji/64/26c4.png +0 -0
  3855. package/web/app/site/sengi/assets/emoji/64/26c5.png +0 -0
  3856. package/web/app/site/sengi/assets/emoji/64/26c8.png +0 -0
  3857. package/web/app/site/sengi/assets/emoji/64/26ce.png +0 -0
  3858. package/web/app/site/sengi/assets/emoji/64/26cf.png +0 -0
  3859. package/web/app/site/sengi/assets/emoji/64/26d1.png +0 -0
  3860. package/web/app/site/sengi/assets/emoji/64/26d3-1f4a5.png +0 -0
  3861. package/web/app/site/sengi/assets/emoji/64/26d3.png +0 -0
  3862. package/web/app/site/sengi/assets/emoji/64/26d4.png +0 -0
  3863. package/web/app/site/sengi/assets/emoji/64/26e9.png +0 -0
  3864. package/web/app/site/sengi/assets/emoji/64/26ea.png +0 -0
  3865. package/web/app/site/sengi/assets/emoji/64/26f0.png +0 -0
  3866. package/web/app/site/sengi/assets/emoji/64/26f1.png +0 -0
  3867. package/web/app/site/sengi/assets/emoji/64/26f2.png +0 -0
  3868. package/web/app/site/sengi/assets/emoji/64/26f3.png +0 -0
  3869. package/web/app/site/sengi/assets/emoji/64/26f4.png +0 -0
  3870. package/web/app/site/sengi/assets/emoji/64/26f5.png +0 -0
  3871. package/web/app/site/sengi/assets/emoji/64/26f7.png +0 -0
  3872. package/web/app/site/sengi/assets/emoji/64/26f8.png +0 -0
  3873. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fb-2640.png +0 -0
  3874. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fb-2642.png +0 -0
  3875. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fb.png +0 -0
  3876. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fc-2640.png +0 -0
  3877. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fc-2642.png +0 -0
  3878. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fc.png +0 -0
  3879. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fd-2640.png +0 -0
  3880. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fd-2642.png +0 -0
  3881. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fd.png +0 -0
  3882. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fe-2640.png +0 -0
  3883. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fe-2642.png +0 -0
  3884. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fe.png +0 -0
  3885. package/web/app/site/sengi/assets/emoji/64/26f9-1f3ff-2640.png +0 -0
  3886. package/web/app/site/sengi/assets/emoji/64/26f9-1f3ff-2642.png +0 -0
  3887. package/web/app/site/sengi/assets/emoji/64/26f9-1f3ff.png +0 -0
  3888. package/web/app/site/sengi/assets/emoji/64/26f9-2640.png +0 -0
  3889. package/web/app/site/sengi/assets/emoji/64/26f9-2642.png +0 -0
  3890. package/web/app/site/sengi/assets/emoji/64/26f9.png +0 -0
  3891. package/web/app/site/sengi/assets/emoji/64/26fa.png +0 -0
  3892. package/web/app/site/sengi/assets/emoji/64/26fd.png +0 -0
  3893. package/web/app/site/sengi/assets/emoji/64/2702.png +0 -0
  3894. package/web/app/site/sengi/assets/emoji/64/2705.png +0 -0
  3895. package/web/app/site/sengi/assets/emoji/64/2708.png +0 -0
  3896. package/web/app/site/sengi/assets/emoji/64/2709.png +0 -0
  3897. package/web/app/site/sengi/assets/emoji/64/270a-1f3fb.png +0 -0
  3898. package/web/app/site/sengi/assets/emoji/64/270a-1f3fc.png +0 -0
  3899. package/web/app/site/sengi/assets/emoji/64/270a-1f3fd.png +0 -0
  3900. package/web/app/site/sengi/assets/emoji/64/270a-1f3fe.png +0 -0
  3901. package/web/app/site/sengi/assets/emoji/64/270a-1f3ff.png +0 -0
  3902. package/web/app/site/sengi/assets/emoji/64/270a.png +0 -0
  3903. package/web/app/site/sengi/assets/emoji/64/270b-1f3fb.png +0 -0
  3904. package/web/app/site/sengi/assets/emoji/64/270b-1f3fc.png +0 -0
  3905. package/web/app/site/sengi/assets/emoji/64/270b-1f3fd.png +0 -0
  3906. package/web/app/site/sengi/assets/emoji/64/270b-1f3fe.png +0 -0
  3907. package/web/app/site/sengi/assets/emoji/64/270b-1f3ff.png +0 -0
  3908. package/web/app/site/sengi/assets/emoji/64/270b.png +0 -0
  3909. package/web/app/site/sengi/assets/emoji/64/270c-1f3fb.png +0 -0
  3910. package/web/app/site/sengi/assets/emoji/64/270c-1f3fc.png +0 -0
  3911. package/web/app/site/sengi/assets/emoji/64/270c-1f3fd.png +0 -0
  3912. package/web/app/site/sengi/assets/emoji/64/270c-1f3fe.png +0 -0
  3913. package/web/app/site/sengi/assets/emoji/64/270c-1f3ff.png +0 -0
  3914. package/web/app/site/sengi/assets/emoji/64/270c.png +0 -0
  3915. package/web/app/site/sengi/assets/emoji/64/270d-1f3fb.png +0 -0
  3916. package/web/app/site/sengi/assets/emoji/64/270d-1f3fc.png +0 -0
  3917. package/web/app/site/sengi/assets/emoji/64/270d-1f3fd.png +0 -0
  3918. package/web/app/site/sengi/assets/emoji/64/270d-1f3fe.png +0 -0
  3919. package/web/app/site/sengi/assets/emoji/64/270d-1f3ff.png +0 -0
  3920. package/web/app/site/sengi/assets/emoji/64/270d.png +0 -0
  3921. package/web/app/site/sengi/assets/emoji/64/270f.png +0 -0
  3922. package/web/app/site/sengi/assets/emoji/64/2712.png +0 -0
  3923. package/web/app/site/sengi/assets/emoji/64/2714.png +0 -0
  3924. package/web/app/site/sengi/assets/emoji/64/2716.png +0 -0
  3925. package/web/app/site/sengi/assets/emoji/64/271d.png +0 -0
  3926. package/web/app/site/sengi/assets/emoji/64/2721.png +0 -0
  3927. package/web/app/site/sengi/assets/emoji/64/2728.png +0 -0
  3928. package/web/app/site/sengi/assets/emoji/64/2733.png +0 -0
  3929. package/web/app/site/sengi/assets/emoji/64/2734.png +0 -0
  3930. package/web/app/site/sengi/assets/emoji/64/2744.png +0 -0
  3931. package/web/app/site/sengi/assets/emoji/64/2747.png +0 -0
  3932. package/web/app/site/sengi/assets/emoji/64/274c.png +0 -0
  3933. package/web/app/site/sengi/assets/emoji/64/274e.png +0 -0
  3934. package/web/app/site/sengi/assets/emoji/64/2753.png +0 -0
  3935. package/web/app/site/sengi/assets/emoji/64/2754.png +0 -0
  3936. package/web/app/site/sengi/assets/emoji/64/2755.png +0 -0
  3937. package/web/app/site/sengi/assets/emoji/64/2757.png +0 -0
  3938. package/web/app/site/sengi/assets/emoji/64/2763.png +0 -0
  3939. package/web/app/site/sengi/assets/emoji/64/2764-1f525.png +0 -0
  3940. package/web/app/site/sengi/assets/emoji/64/2764-1fa79.png +0 -0
  3941. package/web/app/site/sengi/assets/emoji/64/2764.png +0 -0
  3942. package/web/app/site/sengi/assets/emoji/64/2795.png +0 -0
  3943. package/web/app/site/sengi/assets/emoji/64/2796.png +0 -0
  3944. package/web/app/site/sengi/assets/emoji/64/2797.png +0 -0
  3945. package/web/app/site/sengi/assets/emoji/64/27a1.png +0 -0
  3946. package/web/app/site/sengi/assets/emoji/64/27b0.png +0 -0
  3947. package/web/app/site/sengi/assets/emoji/64/27bf.png +0 -0
  3948. package/web/app/site/sengi/assets/emoji/64/2934.png +0 -0
  3949. package/web/app/site/sengi/assets/emoji/64/2935.png +0 -0
  3950. package/web/app/site/sengi/assets/emoji/64/2b05.png +0 -0
  3951. package/web/app/site/sengi/assets/emoji/64/2b06.png +0 -0
  3952. package/web/app/site/sengi/assets/emoji/64/2b07.png +0 -0
  3953. package/web/app/site/sengi/assets/emoji/64/2b1b.png +0 -0
  3954. package/web/app/site/sengi/assets/emoji/64/2b1c.png +0 -0
  3955. package/web/app/site/sengi/assets/emoji/64/2b50.png +0 -0
  3956. package/web/app/site/sengi/assets/emoji/64/2b55.png +0 -0
  3957. package/web/app/site/sengi/assets/emoji/64/3030.png +0 -0
  3958. package/web/app/site/sengi/assets/emoji/64/303d.png +0 -0
  3959. package/web/app/site/sengi/assets/emoji/64/3297.png +0 -0
  3960. package/web/app/site/sengi/assets/emoji/64/3299.png +0 -0
  3961. package/web/app/site/sengi/assets/fonts/Black/Roboto-Black.woff +0 -0
  3962. package/web/app/site/sengi/assets/fonts/Black/Roboto-Black.woff2 +0 -0
  3963. package/web/app/site/sengi/assets/fonts/Bold/Roboto-Bold.woff +0 -0
  3964. package/web/app/site/sengi/assets/fonts/Bold/Roboto-Bold.woff2 +0 -0
  3965. package/web/app/site/sengi/assets/fonts/Light/Roboto-Light.woff +0 -0
  3966. package/web/app/site/sengi/assets/fonts/Light/Roboto-Light.woff2 +0 -0
  3967. package/web/app/site/sengi/assets/fonts/Medium/Roboto-Medium.woff +0 -0
  3968. package/web/app/site/sengi/assets/fonts/Medium/Roboto-Medium.woff2 +0 -0
  3969. package/web/app/site/sengi/assets/fonts/Regular/Roboto-Regular.woff +0 -0
  3970. package/web/app/site/sengi/assets/fonts/Regular/Roboto-Regular.woff2 +0 -0
  3971. package/web/app/site/sengi/assets/fonts/Thin/Roboto-Thin.woff +0 -0
  3972. package/web/app/site/sengi/assets/fonts/Thin/Roboto-Thin.woff2 +0 -0
  3973. package/web/app/site/sengi/assets/icons/icon-128x128.png +0 -0
  3974. package/web/app/site/sengi/assets/icons/icon-144x144.png +0 -0
  3975. package/web/app/site/sengi/assets/icons/icon-152x152.png +0 -0
  3976. package/web/app/site/sengi/assets/icons/icon-192x192.png +0 -0
  3977. package/web/app/site/sengi/assets/icons/icon-384x384.png +0 -0
  3978. package/web/app/site/sengi/assets/icons/icon-512x512.png +0 -0
  3979. package/web/app/site/sengi/assets/icons/icon-72x72.png +0 -0
  3980. package/web/app/site/sengi/assets/icons/icon-96x96.png +0 -0
  3981. package/web/app/site/sengi/assets/img/account.png +0 -0
  3982. package/web/app/site/sengi/assets/img/arrow_1.png +0 -0
  3983. package/web/app/site/sengi/assets/img/arrow_1_dark.png +0 -0
  3984. package/web/app/site/sengi/assets/img/arrow_2.png +0 -0
  3985. package/web/app/site/sengi/assets/img/arrow_2_dark.png +0 -0
  3986. package/web/app/site/sengi/assets/img/avatar-not-found.png +0 -0
  3987. package/web/app/site/sengi/assets/img/juche-background.jpg +0 -0
  3988. package/web/app/site/sengi/assets/img/labels.png +0 -0
  3989. package/web/app/site/sengi/assets/scss/modules/_fonts.scss +48 -0
  3990. package/web/app/site/sengi/assets/video/flashing.gif +0 -0
  3991. package/web/app/site/sengi/assets/video/flashing.mp4 +0 -0
  3992. package/web/app/site/sengi/assets/video/notification.mp4 +0 -0
  3993. package/web/app/site/sengi/favicon.ico +0 -0
  3994. package/web/app/site/sengi/index.html +64 -0
  3995. package/web/app/site/sengi/juche-background.5779872958c0aa8356d2.jpg +0 -0
  3996. package/web/app/site/sengi/main.1f5d89d26480c74fad14.js +1 -0
  3997. package/web/app/site/sengi/manifest.json +51 -0
  3998. package/web/app/site/sengi/polyfills.c1e766542f6691fc86da.js +1 -0
  3999. package/web/app/site/sengi/runtime.26209474bfa8dc87a77c.js +1 -0
  4000. package/web/app/site/sengi/styles.6f7454aa4cf8f2d23457.css +6 -0
  4001. package/web/app/site/sw.js +1702 -478
  4002. package/web/app/site/update.js +66 -0
  4003. package/web/app/update.js +66 -0
  4004. package/web/front/admin.html +2 -2
  4005. package/web/front/new-account.html +2 -2
  4006. package/web/front/run.html +15 -8
  4007. package/web/front/run.js +124 -36
  4008. package/web/icons/forum.svg +11 -0
  4009. package/web/icons/gateway.svg +14 -0
  4010. package/web/icons/local.svg +11 -0
@@ -157,6 +157,116 @@ var init_urls = __esm({
157
157
  }
158
158
  });
159
159
 
160
+ // lib/core/profile-page.mjs
161
+ function profilePageHtml({
162
+ name,
163
+ address,
164
+ summary = null,
165
+ icon = null,
166
+ image = null,
167
+ fields = [],
168
+ joined = null,
169
+ pinned = [],
170
+ kind = "person"
171
+ }) {
172
+ const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => ({ ...HTML_ESCAPES, '"': "&quot;" })[c]);
173
+ const what = kind === "group" ? "a group" : "an account";
174
+ const month = (iso) => {
175
+ const d = new Date(iso);
176
+ return Number.isNaN(d.getTime()) ? null : d.toLocaleDateString("en", { month: "long", year: "numeric", timeZone: "UTC" });
177
+ };
178
+ const day = (iso) => {
179
+ const d = new Date(iso);
180
+ return Number.isNaN(d.getTime()) ? "" : d.toISOString().slice(0, 10);
181
+ };
182
+ const fieldRows = fields.filter((f) => f?.name && f?.value !== void 0 && f?.value !== null && String(f.value) !== "");
183
+ const joinedText = joined ? month(joined) : null;
184
+ const pins = pinned.filter((x) => x && typeof x.content === "string");
185
+ return `<!doctype html>
186
+ <html lang="en">
187
+ <head>
188
+ <meta charset="utf-8">
189
+ <meta name="viewport" content="width=device-width, initial-scale=1">
190
+ <title>${esc(name)} (${esc(address)})</title>
191
+ <style>
192
+ :root { color-scheme: light dark; }
193
+ body { font: 112.5%/1.5 system-ui, sans-serif; max-width: 34rem; margin: 3rem auto; padding: 0 1rem; }
194
+ img.header { width: 100%; max-height: 12rem; object-fit: cover; border-radius: 1rem; }
195
+ img.avatar { width: 6rem; height: 6rem; border-radius: 1rem; object-fit: cover; margin-top: 1rem; }
196
+ h1 { margin: .5rem 0 0; }
197
+ .address { font-size: 1.1rem; user-select: all; }
198
+ dl.fields { display: grid; grid-template-columns: max-content 1fr; gap: .4rem 1rem; margin: 1.5rem 0; }
199
+ dl.fields dt { font-weight: 600; }
200
+ dl.fields dd { margin: 0; overflow-wrap: anywhere; }
201
+ .joined { margin: 1rem 0; }
202
+ section.pinned h2 { font-size: 1.1rem; margin: 2rem 0 .5rem; }
203
+ article.pin { border: 1px solid #8884; border-radius: 1rem; padding: 1rem 1.2rem; margin: 1rem 0; }
204
+ article.pin p:last-child { margin-bottom: 0; }
205
+ article.pin .when { font-size: 1rem; }
206
+ form { margin-top: 2rem; }
207
+ label { display: block; margin-bottom: .3rem; }
208
+ input { font: inherit; padding: .5rem; width: 14rem; max-width: 100%; }
209
+ button { font: inherit; padding: .5rem 1rem; }
210
+ .hint { color: #666; font-size: 1rem; }
211
+ .err { color: #b00020; }
212
+ .err:empty { display: none; }
213
+ @media (prefers-color-scheme: dark) {
214
+ .hint { color: #aaa; }
215
+ .err { color: #ff8a80; }
216
+ }
217
+ </style>
218
+ </head>
219
+ <body>
220
+ <main>
221
+ ${image ? `<img class="header" src="${esc(image)}" alt="">` : ""}
222
+ ${icon ? `<img class="avatar" src="${esc(icon)}" alt="">` : ""}
223
+ <h1>${esc(name)}</h1>
224
+ <p class="address">${esc(address)}</p>
225
+ ${summary ? `<div>${summary}</div>` : ""}
226
+ ${fieldRows.length ? `<dl class="fields">
227
+ ${fieldRows.map((f) => `<dt>${esc(f.name)}</dt><dd>${esc(f.value)}</dd>`).join("\n")}
228
+ </dl>` : ""}
229
+ ${joinedText ? `<p class="joined">Joined ${esc(joinedText)}</p>` : ""}
230
+ ${pins.length ? `<section class="pinned">
231
+ <h2>Pinned</h2>
232
+ ${pins.map((x) => `<article class="pin">
233
+ ${x.content}
234
+ <p class="when">${x.url ? `<a href="${esc(x.url)}">${esc(day(x.published))}</a>` : esc(day(x.published))}</p>
235
+ </article>`).join("\n")}
236
+ </section>` : ""}
237
+ <p>This is ${what} on the Fediverse. To follow it, paste the address above
238
+ into the search box of Mastodon or any Fediverse app \u2014 or use the form.</p>
239
+ <form id="follow">
240
+ <label for="server">your server</label>
241
+ <input id="server" type="text" placeholder="mastodon.social" autocomplete="off"
242
+ required aria-describedby="follow-err">
243
+ <button type="submit">Follow</button>
244
+ <p class="err" id="follow-err" role="alert"></p>
245
+ </form>
246
+ <p class="hint">The form sends you to your own server's follow screen.</p>
247
+ </main>
248
+ <script>
249
+ document.getElementById('follow').addEventListener('submit', (ev) => {
250
+ ev.preventDefault();
251
+ const s = document.getElementById('server').value.trim().replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');
252
+ const err = document.getElementById('follow-err');
253
+ const addr = document.querySelector('.address').textContent.trim();
254
+ if (!s) { err.textContent = 'Enter your server, e.g. mastodon.social'; return; }
255
+ err.textContent = '';
256
+ location.href = 'https://' + s + '/authorize_interaction?uri=' + encodeURIComponent(addr);
257
+ });
258
+ <\/script>
259
+ </body>
260
+ </html>
261
+ `;
262
+ }
263
+ var HTML_ESCAPES;
264
+ var init_profile_page = __esm({
265
+ "lib/core/profile-page.mjs"() {
266
+ HTML_ESCAPES = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
267
+ }
268
+ });
269
+
160
270
  // node_modules/entities/dist/decode-codepoint.js
161
271
  function replaceCodePoint(codePoint) {
162
272
  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
@@ -9592,7 +9702,9 @@ __export(wire_exports, {
9592
9702
  HASHTAG_RE: () => HASHTAG_RE,
9593
9703
  MENTION_RE: () => MENTION_RE,
9594
9704
  OUTBOX_PAGE_SIZE: () => OUTBOX_PAGE_SIZE,
9705
+ POLICY_CTX: () => POLICY_CTX,
9595
9706
  PUBLIC: () => PUBLIC,
9707
+ QUOTE_CTX: () => QUOTE_CTX,
9596
9708
  SEC_CTX: () => SEC_CTX,
9597
9709
  acceptActivity: () => acceptActivity,
9598
9710
  actorDoc: () => actorDoc,
@@ -9640,6 +9752,7 @@ __export(wire_exports, {
9640
9752
  profilePageHtml: () => profilePageHtml,
9641
9753
  publicHandle: () => publicHandle,
9642
9754
  questionDoc: () => questionDoc,
9755
+ quotePolicy: () => quotePolicy,
9643
9756
  rejectActivity: () => rejectActivity,
9644
9757
  repliesId: () => repliesId,
9645
9758
  sanitizeHtml: () => sanitizeHtml,
@@ -9728,7 +9841,9 @@ function actorDoc({
9728
9841
  return {
9729
9842
  "@context": context,
9730
9843
  id: urls.actor,
9731
- type: kind === "group" ? "Group" : "Person",
9844
+ // A group is a community; an application is a service that speaks for a
9845
+ // site rather than a person — the actor a forum publishes for itself.
9846
+ type: kind === "group" ? "Group" : kind === "application" ? "Application" : "Person",
9732
9847
  ...approveJoins ? { manuallyApprovesFollowers: true } : {},
9733
9848
  ...assertionKey ? { assertionMethod: [{
9734
9849
  id: assertionKeyId(urls),
@@ -9753,8 +9868,8 @@ function actorDoc({
9753
9868
  ...fields.length ? {
9754
9869
  attachment: fields.map((f) => ({
9755
9870
  type: "PropertyValue",
9756
- name: String(f.name).replace(/[&<>]/g, (c) => HTML_ESCAPES[c]),
9757
- value: String(f.value).replace(/[&<>]/g, (c) => HTML_ESCAPES[c])
9871
+ name: String(f.name).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c]),
9872
+ value: String(f.value).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c])
9758
9873
  }))
9759
9874
  } : {},
9760
9875
  // The human page. Remote servers send profile clicks here, so it must be
@@ -9797,108 +9912,6 @@ function actorDoc({
9797
9912
  publicKey: { id: urls.actor + "#main-key", owner: urls.actor, publicKeyPem }
9798
9913
  };
9799
9914
  }
9800
- function profilePageHtml({
9801
- name,
9802
- address,
9803
- summary = null,
9804
- icon = null,
9805
- image = null,
9806
- fields = [],
9807
- joined = null,
9808
- pinned = [],
9809
- kind = "person"
9810
- }) {
9811
- const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => ({ ...HTML_ESCAPES, '"': "&quot;" })[c]);
9812
- const what = kind === "group" ? "a group" : "an account";
9813
- const month = (iso) => {
9814
- const d = new Date(iso);
9815
- return Number.isNaN(d.getTime()) ? null : d.toLocaleDateString("en", { month: "long", year: "numeric", timeZone: "UTC" });
9816
- };
9817
- const day = (iso) => {
9818
- const d = new Date(iso);
9819
- return Number.isNaN(d.getTime()) ? "" : d.toISOString().slice(0, 10);
9820
- };
9821
- const fieldRows = fields.filter((f) => f?.name && f?.value !== void 0 && f?.value !== null && String(f.value) !== "");
9822
- const joinedText = joined ? month(joined) : null;
9823
- const pins = pinned.filter((x) => x && typeof x.content === "string");
9824
- return `<!doctype html>
9825
- <html lang="en">
9826
- <head>
9827
- <meta charset="utf-8">
9828
- <meta name="viewport" content="width=device-width, initial-scale=1">
9829
- <title>${esc(name)} (${esc(address)})</title>
9830
- <style>
9831
- :root { color-scheme: light dark; }
9832
- body { font: 112.5%/1.5 system-ui, sans-serif; max-width: 34rem; margin: 3rem auto; padding: 0 1rem; }
9833
- img.header { width: 100%; max-height: 12rem; object-fit: cover; border-radius: 1rem; }
9834
- img.avatar { width: 6rem; height: 6rem; border-radius: 1rem; object-fit: cover; margin-top: 1rem; }
9835
- h1 { margin: .5rem 0 0; }
9836
- .address { font-size: 1.1rem; user-select: all; }
9837
- dl.fields { display: grid; grid-template-columns: max-content 1fr; gap: .4rem 1rem; margin: 1.5rem 0; }
9838
- dl.fields dt { font-weight: 600; }
9839
- dl.fields dd { margin: 0; overflow-wrap: anywhere; }
9840
- .joined { margin: 1rem 0; }
9841
- section.pinned h2 { font-size: 1.1rem; margin: 2rem 0 .5rem; }
9842
- article.pin { border: 1px solid #8884; border-radius: 1rem; padding: 1rem 1.2rem; margin: 1rem 0; }
9843
- article.pin p:last-child { margin-bottom: 0; }
9844
- article.pin .when { font-size: 1rem; }
9845
- form { margin-top: 2rem; }
9846
- label { display: block; margin-bottom: .3rem; }
9847
- input { font: inherit; padding: .5rem; width: 14rem; max-width: 100%; }
9848
- button { font: inherit; padding: .5rem 1rem; }
9849
- .hint { color: #666; font-size: 1rem; }
9850
- .err { color: #b00020; }
9851
- .err:empty { display: none; }
9852
- @media (prefers-color-scheme: dark) {
9853
- .hint { color: #aaa; }
9854
- .err { color: #ff8a80; }
9855
- }
9856
- </style>
9857
- </head>
9858
- <body>
9859
- <main>
9860
- ${image ? `<img class="header" src="${esc(image)}" alt="">` : ""}
9861
- ${icon ? `<img class="avatar" src="${esc(icon)}" alt="">` : ""}
9862
- <h1>${esc(name)}</h1>
9863
- <p class="address">${esc(address)}</p>
9864
- ${summary ? `<div>${summary}</div>` : ""}
9865
- ${fieldRows.length ? `<dl class="fields">
9866
- ${fieldRows.map((f) => `<dt>${esc(f.name)}</dt><dd>${esc(f.value)}</dd>`).join("\n")}
9867
- </dl>` : ""}
9868
- ${joinedText ? `<p class="joined">Joined ${esc(joinedText)}</p>` : ""}
9869
- ${pins.length ? `<section class="pinned">
9870
- <h2>Pinned</h2>
9871
- ${pins.map((x) => `<article class="pin">
9872
- ${x.content}
9873
- <p class="when">${x.url ? `<a href="${esc(x.url)}">${esc(day(x.published))}</a>` : esc(day(x.published))}</p>
9874
- </article>`).join("\n")}
9875
- </section>` : ""}
9876
- <p>This is ${what} on the Fediverse. To follow it, paste the address above
9877
- into the search box of Mastodon or any Fediverse app \u2014 or use the form.</p>
9878
- <form id="follow">
9879
- <label for="server">your server</label>
9880
- <input id="server" type="text" placeholder="mastodon.social" autocomplete="off"
9881
- required aria-describedby="follow-err">
9882
- <button type="submit">Follow</button>
9883
- <p class="err" id="follow-err" role="alert"></p>
9884
- </form>
9885
- <p class="hint">The form sends you to your own server's follow screen.</p>
9886
- </main>
9887
- <script>
9888
- document.getElementById('follow').addEventListener('submit', (ev) => {
9889
- ev.preventDefault();
9890
- const s = document.getElementById('server').value.trim().replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');
9891
- const err = document.getElementById('follow-err');
9892
- const addr = document.querySelector('.address').textContent.trim();
9893
- if (!s) { err.textContent = 'Enter your server, e.g. mastodon.social'; return; }
9894
- err.textContent = '';
9895
- location.href = 'https://' + s + '/authorize_interaction?uri=' + encodeURIComponent(addr);
9896
- });
9897
- <\/script>
9898
- </body>
9899
- </html>
9900
- `;
9901
- }
9902
9915
  function deleteActorActivity(urls, stamp) {
9903
9916
  return {
9904
9917
  "@context": AS_CTX,
@@ -10082,7 +10095,7 @@ function titledContent(note) {
10082
10095
  if (!title || types.includes("Note")) return html;
10083
10096
  const opening = html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim().toLowerCase();
10084
10097
  if (opening.startsWith(title.toLowerCase())) return html;
10085
- const esc = String(title).replace(/[&<>]/g, (c) => HTML_ESCAPES[c]);
10098
+ const esc = String(title).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c]);
10086
10099
  return `<p><strong>${esc}</strong></p>${html}`;
10087
10100
  }
10088
10101
  function attachmentsOf(note) {
@@ -10108,18 +10121,18 @@ function tagHref(urls, name) {
10108
10121
  return urls.profileHtml + "?tag=" + encodeURIComponent(String(name).toLowerCase());
10109
10122
  }
10110
10123
  function contentHtml(text, mentions = [], hashtags = []) {
10111
- let html = String(text).replace(/[&<>]/g, (c) => HTML_ESCAPES[c]);
10124
+ let html = String(text).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c]);
10112
10125
  if (hashtags.length) {
10113
10126
  const byName = new Map(hashtags.filter((h) => h?.name && h?.href).map((h) => [h.name.toLowerCase(), h.href]));
10114
10127
  html = html.replace(HASHTAG_RE, (all, lead, name) => {
10115
10128
  const href = byName.get(name.toLowerCase());
10116
10129
  if (!href) return all;
10117
- return `${lead}<a href="${String(href).replace(/[&<>"]/g, (c) => HTML_ESCAPES[c] || "&quot;")}" class="mention hashtag" rel="tag">#<span>${name}</span></a>`;
10130
+ return `${lead}<a href="${String(href).replace(/[&<>"]/g, (c) => HTML_ESCAPES2[c] || "&quot;")}" class="mention hashtag" rel="tag">#<span>${name}</span></a>`;
10118
10131
  });
10119
10132
  }
10120
10133
  for (const m of mentions) {
10121
10134
  if (!m?.handle || !m?.actor) continue;
10122
- const href = String(m.page || m.actor).replace(/[&<>"]/g, (c) => HTML_ESCAPES[c] || "&quot;");
10135
+ const href = String(m.page || m.actor).replace(/[&<>"]/g, (c) => HTML_ESCAPES2[c] || "&quot;");
10123
10136
  html = html.split("@" + m.handle).join(
10124
10137
  `<a href="${href}" class="u-url mention">@${m.handle.split("@")[0]}</a>`
10125
10138
  );
@@ -10134,6 +10147,10 @@ function addressing(urls, visibility, who = []) {
10134
10147
  direct: { to: who, cc: [] }
10135
10148
  }[visibility] || { to: [PUBLIC], cc: [urls.followers, ...who] };
10136
10149
  }
10150
+ function quotePolicy(visibility) {
10151
+ const open2 = visibility === "public" || visibility === "unlisted";
10152
+ return { canQuote: { automaticApproval: open2 ? [PUBLIC] : [], manualApproval: [] } };
10153
+ }
10137
10154
  function noteDoc({
10138
10155
  urls,
10139
10156
  slug,
@@ -10147,7 +10164,8 @@ function noteDoc({
10147
10164
  sensitive = false,
10148
10165
  updated = null,
10149
10166
  container = null,
10150
- also = []
10167
+ also = [],
10168
+ quote = null
10151
10169
  }) {
10152
10170
  const id = (container || urls.notes) + slug;
10153
10171
  const who = mentions.map((m) => m.actor);
@@ -10155,7 +10173,7 @@ function noteDoc({
10155
10173
  const addressed = addressing(urls, visibility, [...who, ...extra]);
10156
10174
  const hashtags = hashtagsIn(content).map((name) => ({ name, href: tagHref(urls, name) }));
10157
10175
  const note = {
10158
- "@context": AS_CTX,
10176
+ "@context": [AS_CTX, { ...POLICY_CTX, ...quote?.id ? QUOTE_CTX : {} }],
10159
10177
  id,
10160
10178
  type: "Note",
10161
10179
  attributedTo: urls.actor,
@@ -10163,8 +10181,15 @@ function noteDoc({
10163
10181
  published,
10164
10182
  to: addressed.to,
10165
10183
  cc: addressed.cc,
10166
- replies: repliesId(id)
10184
+ replies: repliesId(id),
10185
+ interactionPolicy: quotePolicy(visibility)
10167
10186
  };
10187
+ if (quote?.id) {
10188
+ note.quote = quote.id;
10189
+ note.quoteUri = quote.id;
10190
+ note._misskey_quote = quote.id;
10191
+ if (quote.authorization) note.quoteAuthorization = quote.authorization;
10192
+ }
10168
10193
  if (summary) note.summary = summary;
10169
10194
  if (summary || sensitive) note.sensitive = true;
10170
10195
  if (updated) note.updated = updated;
@@ -10206,7 +10231,7 @@ function questionDoc({
10206
10231
  if (endTime) question.endTime = endTime;
10207
10232
  if (closed) question.closed = closed;
10208
10233
  if (votersCount !== null && votersCount !== void 0) {
10209
- question["@context"] = [AS_CTX, {
10234
+ question["@context"] = [...[].concat(note["@context"]), {
10210
10235
  toot: "http://joinmastodon.org/ns#",
10211
10236
  votersCount: {
10212
10237
  "@id": "toot:votersCount",
@@ -10301,10 +10326,10 @@ function updateActorActivity({ urls, actor, serial, published = (/* @__PURE__ */
10301
10326
  object
10302
10327
  };
10303
10328
  }
10304
- function updateActivity(note, urls) {
10329
+ function updateActivity(note, urls, { serial = null } = {}) {
10305
10330
  return {
10306
10331
  "@context": AS_CTX,
10307
- id: note.id + "#update-" + String(note.updated || "").replace(/[^0-9TZ]/g, ""),
10332
+ id: note.id + "#update-" + (note.updated ? String(note.updated).replace(/[^0-9TZ]/g, "") : "q" + (serial ?? Date.now())),
10308
10333
  type: "Update",
10309
10334
  actor: urls.actor,
10310
10335
  to: note.to,
@@ -10350,11 +10375,12 @@ function addRemoveActivity({ urls, type, object, target, serial }) {
10350
10375
  target
10351
10376
  };
10352
10377
  }
10353
- var import_sanitize_html, AS_CTX, SEC_CTX, PUBLIC, DEFAULT_ROOT, assertionKeyId, OUTBOX_PAGE_SIZE, outboxPageId, outboxPageCount, outboxItemId, outboxWireItem, outboxLocalItem, FOLLOWERS_PAGE_SIZE, followersPageId, followersPageCount, ALLOWED_TAGS, ALLOWED_ATTRS, MAX_ATTACHMENTS, MAX_ATTACHMENT_URL, attachmentUrl, HTML_ESCAPES, MENTION_RE, HASHTAG_RE;
10378
+ var import_sanitize_html, AS_CTX, SEC_CTX, PUBLIC, DEFAULT_ROOT, assertionKeyId, OUTBOX_PAGE_SIZE, outboxPageId, outboxPageCount, outboxItemId, outboxWireItem, outboxLocalItem, FOLLOWERS_PAGE_SIZE, followersPageId, followersPageCount, ALLOWED_TAGS, ALLOWED_ATTRS, MAX_ATTACHMENTS, MAX_ATTACHMENT_URL, attachmentUrl, HTML_ESCAPES2, MENTION_RE, HASHTAG_RE, QUOTE_CTX, POLICY_CTX;
10354
10379
  var init_wire = __esm({
10355
10380
  "lib/core/wire.mjs"() {
10356
10381
  init_urls();
10357
10382
  init_urls();
10383
+ init_profile_page();
10358
10384
  import_sanitize_html = __toESM(require_sanitize_html(), 1);
10359
10385
  AS_CTX = "https://www.w3.org/ns/activitystreams";
10360
10386
  SEC_CTX = "https://w3id.org/security/v1";
@@ -10405,9 +10431,22 @@ var init_wire = __esm({
10405
10431
  return null;
10406
10432
  }
10407
10433
  };
10408
- HTML_ESCAPES = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
10434
+ HTML_ESCAPES2 = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
10409
10435
  MENTION_RE = /@([A-Za-z0-9_.-]+)@([A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d+)?)/g;
10410
10436
  HASHTAG_RE = /(^|[^\/\w)])#([\p{L}\p{N}_]*[\p{L}_][\p{L}\p{N}_]*)/gu;
10437
+ QUOTE_CTX = {
10438
+ quote: { "@id": "https://w3id.org/fep/044f#quote", "@type": "@id" },
10439
+ quoteUri: { "@id": "http://fedibird.com/ns#quoteUri", "@type": "@id" },
10440
+ _misskey_quote: { "@id": "https://misskey-hub.net/ns#_misskey_quote", "@type": "@id" },
10441
+ quoteAuthorization: { "@id": "https://w3id.org/fep/044f#quoteAuthorization", "@type": "@id" }
10442
+ };
10443
+ POLICY_CTX = {
10444
+ gts: "https://gotosocial.org/ns#",
10445
+ interactionPolicy: { "@id": "gts:interactionPolicy", "@type": "@id" },
10446
+ canQuote: { "@id": "gts:canQuote", "@type": "@id" },
10447
+ automaticApproval: { "@id": "gts:automaticApproval", "@type": "@id" },
10448
+ manualApproval: { "@id": "gts:manualApproval", "@type": "@id" }
10449
+ };
10411
10450
  }
10412
10451
  });
10413
10452
 
@@ -23600,7 +23639,7 @@ var require_constants = __commonJS({
23600
23639
  "node_modules/jsonld/lib/constants.js"(exports, module2) {
23601
23640
  "use strict";
23602
23641
  var RDF5 = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
23603
- var XSD2 = "http://www.w3.org/2001/XMLSchema#";
23642
+ var XSD3 = "http://www.w3.org/2001/XMLSchema#";
23604
23643
  module2.exports = {
23605
23644
  // TODO: Deprecated and will be removed later. Use LINK_HEADER_CONTEXT.
23606
23645
  LINK_HEADER_REL: "http://www.w3.org/ns/json-ld#context",
@@ -23616,11 +23655,11 @@ var require_constants = __commonJS({
23616
23655
  RDF_JSON_LITERAL: RDF5 + "JSON",
23617
23656
  RDF_OBJECT: RDF5 + "object",
23618
23657
  RDF_LANGSTRING: RDF5 + "langString",
23619
- XSD: XSD2,
23620
- XSD_BOOLEAN: XSD2 + "boolean",
23621
- XSD_DOUBLE: XSD2 + "double",
23622
- XSD_INTEGER: XSD2 + "integer",
23623
- XSD_STRING: XSD2 + "string"
23658
+ XSD: XSD3,
23659
+ XSD_BOOLEAN: XSD3 + "boolean",
23660
+ XSD_DOUBLE: XSD3 + "double",
23661
+ XSD_INTEGER: XSD3 + "integer",
23662
+ XSD_STRING: XSD3 + "string"
23624
23663
  };
23625
23664
  }
23626
23665
  });
@@ -32650,6 +32689,73 @@ var init_safefetch = __esm({
32650
32689
  }
32651
32690
  });
32652
32691
 
32692
+ // lib/core/wire-quotes.mjs
32693
+ var wire_quotes_exports = {};
32694
+ __export(wire_quotes_exports, {
32695
+ QUOTE_TYPES_CTX: () => QUOTE_TYPES_CTX,
32696
+ quoteAnswerActivity: () => quoteAnswerActivity,
32697
+ quoteAuthorizationDoc: () => quoteAuthorizationDoc,
32698
+ quoteAuthorizationId: () => quoteAuthorizationId,
32699
+ quoteRequestActivity: () => quoteRequestActivity
32700
+ });
32701
+ function quoteRequestActivity({ urls, note, quoted, quotedActor, serial }) {
32702
+ const { "@context": ctx, ...instrument } = note;
32703
+ return {
32704
+ "@context": [AS_CTX, { ...QUOTE_CTX, ...POLICY_CTX, QuoteRequest: QUOTE_TYPES_CTX.QuoteRequest }],
32705
+ id: urls.actor + "#quote-request-" + serial,
32706
+ type: "QuoteRequest",
32707
+ actor: urls.actor,
32708
+ to: [quotedActor],
32709
+ object: quoted,
32710
+ instrument
32711
+ };
32712
+ }
32713
+ function quoteAuthorizationId(noteId, instrumentId) {
32714
+ return noteId + "-quote-" + node_crypto_default.createHash("sha256").update(String(instrumentId)).digest("hex").slice(0, 16);
32715
+ }
32716
+ function quoteAuthorizationDoc({ urls, id, instrument, target }) {
32717
+ return {
32718
+ "@context": [AS_CTX, QUOTE_TYPES_CTX],
32719
+ id,
32720
+ type: "QuoteAuthorization",
32721
+ attributedTo: urls.actor,
32722
+ interactingObject: instrument,
32723
+ interactionTarget: target
32724
+ };
32725
+ }
32726
+ function quoteAnswerActivity({ urls, type, request, result = null, to, serial }) {
32727
+ const idOf3 = (v) => typeof v === "string" ? v : v?.id;
32728
+ return {
32729
+ "@context": [AS_CTX, { QuoteRequest: QUOTE_TYPES_CTX.QuoteRequest }],
32730
+ id: urls.actor + "#" + type.toLowerCase() + "-" + serial,
32731
+ type,
32732
+ actor: urls.actor,
32733
+ to: [to],
32734
+ object: {
32735
+ id: idOf3(request),
32736
+ type: "QuoteRequest",
32737
+ actor: idOf3(request?.actor),
32738
+ object: idOf3(request?.object),
32739
+ instrument: idOf3(request?.instrument)
32740
+ },
32741
+ ...result ? { result } : {}
32742
+ };
32743
+ }
32744
+ var QUOTE_TYPES_CTX;
32745
+ var init_wire_quotes = __esm({
32746
+ "lib/core/wire-quotes.mjs"() {
32747
+ init_node_crypto();
32748
+ init_wire();
32749
+ QUOTE_TYPES_CTX = {
32750
+ QuoteRequest: "https://w3id.org/fep/044f#QuoteRequest",
32751
+ QuoteAuthorization: "https://w3id.org/fep/044f#QuoteAuthorization",
32752
+ gts: "https://gotosocial.org/ns#",
32753
+ interactingObject: { "@id": "gts:interactingObject", "@type": "@id" },
32754
+ interactionTarget: { "@id": "gts:interactionTarget", "@type": "@id" }
32755
+ };
32756
+ }
32757
+ });
32758
+
32653
32759
  // web/app/shims/fedify-sig.mjs
32654
32760
  async function sign({ url, method = "POST", headers = {}, body }, privateKey, keyId) {
32655
32761
  const u = new URL(url);
@@ -34096,6 +34202,61 @@ var require_src = __commonJS({
34096
34202
  }
34097
34203
  });
34098
34204
 
34205
+ // web/app/idb-kv.mjs
34206
+ var DB = "fedipod-accounts";
34207
+ function open() {
34208
+ return new Promise((res, rej) => {
34209
+ const r = indexedDB.open(DB, 1);
34210
+ r.onupgradeneeded = () => {
34211
+ const db = r.result;
34212
+ if (!db.objectStoreNames.contains("kv")) db.createObjectStore("kv");
34213
+ };
34214
+ r.onsuccess = () => res(r.result);
34215
+ r.onerror = () => rej(r.error);
34216
+ });
34217
+ }
34218
+ async function kvGet(key) {
34219
+ const db = await open();
34220
+ return new Promise((res, rej) => {
34221
+ const rq = db.transaction("kv", "readonly").objectStore("kv").get(key);
34222
+ rq.onsuccess = () => res(rq.result ?? null);
34223
+ rq.onerror = () => rej(rq.error);
34224
+ });
34225
+ }
34226
+ async function kvAll() {
34227
+ const db = await open();
34228
+ return new Promise((res, rej) => {
34229
+ const out = {};
34230
+ const cur = db.transaction("kv", "readonly").objectStore("kv").openCursor();
34231
+ cur.onsuccess = () => {
34232
+ const c = cur.result;
34233
+ if (c) {
34234
+ out[c.key] = c.value;
34235
+ c.continue();
34236
+ } else res(out);
34237
+ };
34238
+ cur.onerror = () => rej(cur.error);
34239
+ });
34240
+ }
34241
+ async function kvPut(key, val) {
34242
+ const db = await open();
34243
+ return new Promise((res, rej) => {
34244
+ const tx = db.transaction("kv", "readwrite");
34245
+ tx.objectStore("kv").put(val, key);
34246
+ tx.oncomplete = () => res();
34247
+ tx.onerror = () => rej(tx.error);
34248
+ });
34249
+ }
34250
+ async function kvDel(key) {
34251
+ const db = await open();
34252
+ return new Promise((res, rej) => {
34253
+ const tx = db.transaction("kv", "readwrite");
34254
+ tx.objectStore("kv").delete(key);
34255
+ tx.oncomplete = () => res();
34256
+ tx.onerror = () => rej(tx.error);
34257
+ });
34258
+ }
34259
+
34099
34260
  // web/app/agent.mjs
34100
34261
  init_wire();
34101
34262
 
@@ -45482,7 +45643,8 @@ var ALL_COLLECTIONS = {
45482
45643
  outbox: true,
45483
45644
  acls: true,
45484
45645
  pending: true,
45485
- blocked: true
45646
+ blocked: true,
45647
+ featured: true
45486
45648
  };
45487
45649
  async function publishOutbox(publisher, outbox, { acls = false, force = false } = {}) {
45488
45650
  const { urls } = publisher;
@@ -45581,6 +45743,7 @@ async function publishCollections(publisher, which = ALL_COLLECTIONS) {
45581
45743
  }
45582
45744
  if (which.pending) await publisher.publishPending();
45583
45745
  if (which.blocked) await publisher.publishBlocked();
45746
+ if (which.featured) await publisher.publishFeatured();
45584
45747
  if (which.outbox) {
45585
45748
  const outbox = publisher.store.read("outbox.json", []);
45586
45749
  const known2 = publisher.store.read("published.json", {}).outboxIndex;
@@ -55704,6 +55867,88 @@ var anno_default = {
55704
55867
  }
55705
55868
  };
55706
55869
 
55870
+ // lib/core/contexts/litepub-0.1.json
55871
+ var litepub_0_1_default = {
55872
+ "@context": [
55873
+ "https://www.w3.org/ns/activitystreams",
55874
+ "https://w3id.org/security/v1",
55875
+ {
55876
+ Emoji: "toot:Emoji",
55877
+ Hashtag: "as:Hashtag",
55878
+ PropertyValue: "schema:PropertyValue",
55879
+ atomUri: "ostatus:atomUri",
55880
+ conversation: {
55881
+ "@id": "ostatus:conversation",
55882
+ "@type": "@id"
55883
+ },
55884
+ discoverable: "toot:discoverable",
55885
+ manuallyApprovesFollowers: "as:manuallyApprovesFollowers",
55886
+ capabilities: "litepub:capabilities",
55887
+ ostatus: "http://ostatus.org#",
55888
+ schema: "http://schema.org#",
55889
+ toot: "http://joinmastodon.org/ns#",
55890
+ misskey: "https://misskey-hub.net/ns#",
55891
+ fedibird: "http://fedibird.com/ns#",
55892
+ sharkey: "https://joinsharkey.org/ns#",
55893
+ value: "schema:value",
55894
+ sensitive: "as:sensitive",
55895
+ litepub: "http://litepub.social/ns#",
55896
+ invisible: "litepub:invisible",
55897
+ directMessage: "litepub:directMessage",
55898
+ listMessage: {
55899
+ "@id": "litepub:listMessage",
55900
+ "@type": "@id"
55901
+ },
55902
+ quoteUrl: "as:quoteUrl",
55903
+ quoteUri: "fedibird:quoteUri",
55904
+ oauthRegistrationEndpoint: {
55905
+ "@id": "litepub:oauthRegistrationEndpoint",
55906
+ "@type": "@id"
55907
+ },
55908
+ EmojiReact: "litepub:EmojiReact",
55909
+ ChatMessage: "litepub:ChatMessage",
55910
+ alsoKnownAs: {
55911
+ "@id": "as:alsoKnownAs",
55912
+ "@type": "@id"
55913
+ },
55914
+ vcard: "http://www.w3.org/2006/vcard/ns#",
55915
+ formerRepresentations: "litepub:formerRepresentations",
55916
+ contentMap: {
55917
+ "@id": "as:content",
55918
+ "@container": "@language"
55919
+ },
55920
+ featured: {
55921
+ "@id": "toot:featured",
55922
+ "@type": "@id"
55923
+ },
55924
+ backgroundUrl: {
55925
+ "@id": "sharkey:backgroundUrl",
55926
+ "@type": "@id"
55927
+ }
55928
+ }
55929
+ ]
55930
+ };
55931
+
55932
+ // lib/core/contexts/quotes.json
55933
+ var quotes_default = {
55934
+ "@context": {
55935
+ quote: {
55936
+ "@id": "https://w3id.org/fep/044f#quote",
55937
+ "@type": "@id"
55938
+ },
55939
+ quoteAuthorization: {
55940
+ "@id": "https://w3id.org/fep/044f#quoteAuthorization",
55941
+ "@type": "@id"
55942
+ },
55943
+ QuoteRequest: "https://w3id.org/fep/044f#QuoteRequest",
55944
+ QuoteAuthorization: "https://w3id.org/fep/044f#QuoteAuthorization",
55945
+ _misskey_quote: {
55946
+ "@id": "https://misskey-hub.net/ns#_misskey_quote",
55947
+ "@type": "@id"
55948
+ }
55949
+ }
55950
+ };
55951
+
55707
55952
  // lib/core/contexts/index.mjs
55708
55953
  var CONTEXTS = {
55709
55954
  "https://www.w3.org/ns/activitystreams": activitystreams_default,
@@ -55720,7 +55965,9 @@ var CONTEXTS = {
55720
55965
  "https://join-lemmy.org/context.json": join_lemmy_default,
55721
55966
  "http://joinmastodon.org/ns": joinmastodon_default,
55722
55967
  "https://purl.archive.org/miscellany": miscellany_default,
55723
- "http://www.w3.org/ns/anno.jsonld": anno_default
55968
+ "http://www.w3.org/ns/anno.jsonld": anno_default,
55969
+ "http://litepub.social/ns": litepub_0_1_default,
55970
+ "https://w3id.org/fep/044f": quotes_default
55724
55971
  };
55725
55972
 
55726
55973
  // lib/core/graphview.mjs
@@ -55757,8 +56004,10 @@ function buildTerms() {
55757
56004
  const terms = /* @__PURE__ */ new Map();
55758
56005
  const order = [AS_CTX, ...Object.keys(CONTEXTS).filter((u) => u !== AS_CTX)];
55759
56006
  for (const url of order) {
55760
- const ctx = CONTEXTS[url]?.["@context"];
55761
- if (!ctx || typeof ctx !== "object") continue;
56007
+ const body = CONTEXTS[url]?.["@context"];
56008
+ const maps = (Array.isArray(body) ? body : [body]).filter((c) => c && typeof c === "object");
56009
+ if (!maps.length) continue;
56010
+ const ctx = Object.assign({}, ...maps);
55762
56011
  const prefixes = {};
55763
56012
  for (const [k, v] of Object.entries(ctx)) {
55764
56013
  if (typeof v === "string" && /^https?:\/\//.test(v)) prefixes[k] = v;
@@ -55843,8 +56092,40 @@ function isListHead(term3, ctx) {
55843
56092
  if (term3.termType !== "BlankNode" && term3.termType !== "NamedNode") return false;
55844
56093
  return !!ctx.bySubject.get(term3.value)?.has(RDF_FIRST);
55845
56094
  }
56095
+ var XSD2 = "http://www.w3.org/2001/XMLSchema#";
56096
+ var NUMERIC = new Set([
56097
+ "integer",
56098
+ "decimal",
56099
+ "double",
56100
+ "float",
56101
+ "long",
56102
+ "int",
56103
+ "short",
56104
+ "byte",
56105
+ "nonNegativeInteger",
56106
+ "positiveInteger",
56107
+ "nonPositiveInteger",
56108
+ "negativeInteger",
56109
+ "unsignedLong",
56110
+ "unsignedInt",
56111
+ "unsignedShort",
56112
+ "unsignedByte"
56113
+ ].map((t) => XSD2 + t));
56114
+ function fromLiteral(term3) {
56115
+ const type = term3.datatype?.value || "";
56116
+ if (type === `${XSD2}boolean`) {
56117
+ if (term3.value === "true" || term3.value === "1") return true;
56118
+ if (term3.value === "false" || term3.value === "0") return false;
56119
+ return term3.value;
56120
+ }
56121
+ if (NUMERIC.has(type)) {
56122
+ const n = Number(term3.value);
56123
+ return Number.isFinite(n) ? n : term3.value;
56124
+ }
56125
+ return term3.value;
56126
+ }
55846
56127
  function toValue(term3, ctx, depth, path) {
55847
- if (term3.termType === "Literal") return term3.value;
56128
+ if (term3.termType === "Literal") return fromLiteral(term3);
55848
56129
  if (isListHead(term3, ctx)) return readList(term3.value, ctx, depth, path);
55849
56130
  const preds = ctx.bySubject.get(term3.value);
55850
56131
  if (preds && preds.size) return makeView(term3.value, ctx, depth + 1, path);
@@ -55912,8 +56193,10 @@ var AS2Error = class extends Error {
55912
56193
  this.context = context;
55913
56194
  }
55914
56195
  };
56196
+ var LITEPUB = "http://litepub.social/ns";
56197
+ var heldKey = (url) => typeof url === "string" && /\/schemas\/litepub-0\.1\.jsonld$/u.test(url) ? LITEPUB : url;
55915
56198
  function contextLoader(url) {
55916
- const doc = CONTEXTS[url];
56199
+ const doc = CONTEXTS[heldKey(url)];
55917
56200
  if (!doc) {
55918
56201
  return Promise.reject(new AS2Error(`context not held here: ${url}`, { context: url }));
55919
56202
  }
@@ -55948,7 +56231,7 @@ async function parseAS2(raw) {
55948
56231
  }
55949
56232
  function groundContext(input) {
55950
56233
  const ctx = input["@context"];
55951
- const held = (c) => typeof c === "string" ? Object.hasOwn(CONTEXTS, c) : c && typeof c === "object";
56234
+ const held = (c) => typeof c === "string" ? Object.hasOwn(CONTEXTS, heldKey(c)) : c && typeof c === "object";
55952
56235
  let kept;
55953
56236
  if (ctx === void 0 || ctx === null) kept = [];
55954
56237
  else if (Array.isArray(ctx)) kept = ctx.filter(held);
@@ -55956,6 +56239,17 @@ function groundContext(input) {
55956
56239
  if (!kept.some((c) => c === AS_CTX)) kept.unshift(AS_CTX);
55957
56240
  return { ...input, "@context": kept.length === 1 ? kept[0] : kept };
55958
56241
  }
56242
+ function carryRemovals(input, view) {
56243
+ if (!input || typeof input !== "object" || !view || typeof view !== "object") return view;
56244
+ for (const [key, value] of Object.entries(input)) {
56245
+ if (value === null) {
56246
+ if (!(key in view)) view[key] = null;
56247
+ } else if (key === "object" && typeof value === "object" && !Array.isArray(value) && view.object && typeof view.object === "object" && !Array.isArray(view.object)) {
56248
+ carryRemovals(value, view.object);
56249
+ }
56250
+ }
56251
+ return view;
56252
+ }
55959
56253
  async function readLenient(raw) {
55960
56254
  let input = null;
55961
56255
  try {
@@ -55966,12 +56260,12 @@ async function readLenient(raw) {
55966
56260
  const root = typeof own === "string" && /^https?:\/\//u.test(own) ? own : null;
55967
56261
  try {
55968
56262
  const { doc, graph: graph2 } = await parseAS2(raw);
55969
- return { doc, graph: graph2, view: graphView(graph2, { root }), degraded: null };
56263
+ return { doc, graph: graph2, view: carryRemovals(input, graphView(graph2, { root })), degraded: null };
55970
56264
  } catch (e) {
55971
56265
  if (!input || typeof input !== "object") return { doc: null, graph: null, view: null, degraded: e.message };
55972
56266
  try {
55973
56267
  const { graph: graph2 } = await parseAS2(groundContext(input));
55974
- return { doc: input, graph: graph2, view: graphView(graph2, { root }), degraded: e.message };
56268
+ return { doc: input, graph: graph2, view: carryRemovals(input, graphView(graph2, { root })), degraded: e.message };
55975
56269
  } catch (inner) {
55976
56270
  return { doc: input, graph: null, view: null, degraded: `${e.message}; grounded read also failed: ${inner.message}` };
55977
56271
  }
@@ -55981,6 +56275,7 @@ async function readLenient(raw) {
55981
56275
  // lib/core/publisher/notes.mjs
55982
56276
  init_node_crypto();
55983
56277
  init_wire();
56278
+ init_wire_quotes();
55984
56279
  async function ensureMediaContainer(publisher) {
55985
56280
  if (publisher._mediaReady) return;
55986
56281
  if (await exists(publisher.remote, publisher.urls.media)) {
@@ -56084,7 +56379,7 @@ function rowContent(obj) {
56084
56379
  const esc = (v) => String(v).replace(/[&<>"]/gu, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" })[c]);
56085
56380
  return `<p><a href="${esc(obj?.id || "")}">${esc(obj?.type || "object")}</a></p>`;
56086
56381
  }
56087
- async function publishNote(publisher, content, { inReplyTo, attachments, visibility = "public", spoilerText = null, sensitive = false, slug: wanted = null, also = [], deliverTo = [] } = {}) {
56382
+ async function publishNote(publisher, content, { inReplyTo, attachments, visibility = "public", spoilerText = null, sensitive = false, slug: wanted = null, also = [], deliverTo = [], quote = null } = {}) {
56088
56383
  const { urls } = publisher;
56089
56384
  const priv = visibility === "private" || visibility === "direct";
56090
56385
  if (priv) {
@@ -56096,6 +56391,12 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56096
56391
  const mentions = await publisher._mentionsFor(content, inReplyTo);
56097
56392
  if (visibility === "direct") assertDirectAddressed(content, mentions);
56098
56393
  const reply = await replyTarget(publisher, inReplyTo, mentions, visibility);
56394
+ const selfQuote = quote?.id && quote.actor === urls.actor;
56395
+ const quoted = quote?.id ? {
56396
+ id: quote.id,
56397
+ // Our own post: the authorization is minted here, before the note goes out.
56398
+ authorization: selfQuote ? await grantQuote(publisher, quote.id, (priv ? urls.privateNotes : urls.notes) + slug) : null
56399
+ } : null;
56099
56400
  const note = noteDoc({
56100
56401
  urls,
56101
56402
  slug,
@@ -56108,9 +56409,10 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56108
56409
  summary: spoilerText,
56109
56410
  sensitive,
56110
56411
  container: priv ? urls.privateNotes : urls.notes,
56111
- also: [...also, ...reply ? [reply.actor] : []]
56412
+ also: [...also, ...reply ? [reply.actor] : [], ...quote?.actor && !selfQuote ? [quote.actor] : []],
56413
+ quote: quoted
56112
56414
  });
56113
- const addressedInboxes = await inboxesFor(publisher, [...also, ...deliverTo]);
56415
+ const addressedInboxes = await inboxesFor(publisher, [...also, ...deliverTo, ...quote?.actor && !selfQuote ? [quote.actor] : []]);
56114
56416
  await write4(publisher.remote, note.id, note);
56115
56417
  await writeEmptyReplies(
56116
56418
  publisher.remote,
@@ -56118,6 +56420,7 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56118
56420
  collection(repliesId(note.id), [])
56119
56421
  );
56120
56422
  if (!priv) await publisher.recordOutbox(note.id);
56423
+ const request = quote?.id && !selfQuote ? quoteRequestActivity({ urls, note, quoted: quote.id, quotedActor: quote.actor, serial: Date.now() }) : null;
56121
56424
  publisher.store.addStatus({
56122
56425
  noteId: note.id,
56123
56426
  actor: urls.actor,
@@ -56131,7 +56434,13 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56131
56434
  ...spoilerText ? { spoiler: spoilerText } : {},
56132
56435
  ...note.sensitive ? { sensitive: true } : {},
56133
56436
  ...attachments?.length ? { attachments } : {},
56134
- ...rowTags(note)
56437
+ ...rowTags(note),
56438
+ ...quote?.id ? {
56439
+ quote: quote.id,
56440
+ quoteState: selfQuote ? "accepted" : "pending",
56441
+ ...quoted.authorization ? { quoteAuthorization: quoted.authorization } : {},
56442
+ ...request ? { quoteRequest: { id: request.id, actor: quote.actor } } : {}
56443
+ } : {}
56135
56444
  });
56136
56445
  if (await publisher.store.commit?.() === false) publisher.log(`post published but its timeline row was refused: ${note.id}`);
56137
56446
  const create = createActivity(note, urls);
@@ -56145,6 +56454,11 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56145
56454
  ].filter(Boolean))];
56146
56455
  await publisher.deliverer.deliverToAll(inboxes, create);
56147
56456
  publisher.log(`note published: ${note.id} \u2192 ${inboxes.length} inbox(es)`);
56457
+ if (request) {
56458
+ const [inbox] = await inboxesFor(publisher, [quote.actor]);
56459
+ if (inbox) await publisher.deliverer.deliver(inbox, request);
56460
+ else publisher.log(`quote of ${quote.id}: no inbox found for ${quote.actor} \u2014 the quote stays pending`);
56461
+ }
56148
56462
  if (visibility === "public" && publisher.atproto?.connected() && publisher.store.getConfig()?.atproto?.crossPost) {
56149
56463
  try {
56150
56464
  const mirror = await publisher.atproto.crossPost(
@@ -56253,7 +56567,8 @@ async function updateNote(publisher, s, { content, spoilerText = null, sensitive
56253
56567
  sensitive: sensitive ?? !!s.sensitive,
56254
56568
  updated,
56255
56569
  container,
56256
- also: reply ? [reply.actor] : []
56570
+ also: reply ? [reply.actor] : [],
56571
+ quote: rowQuote(s)
56257
56572
  });
56258
56573
  await write4(publisher.remote, note.id, note);
56259
56574
  await writeCreate(publisher.remote, createActivityId(note.id), createActivity(note, urls));
@@ -56278,6 +56593,71 @@ async function updateNote(publisher, s, { content, spoilerText = null, sensitive
56278
56593
  publisher.log(`note edited: ${note.id} \u2192 ${inboxes.length} inbox(es)`);
56279
56594
  return patched;
56280
56595
  }
56596
+ function rowQuote(s) {
56597
+ if (!s?.quote || s.quoteState === "rejected") return null;
56598
+ return { id: s.quote, ...s.quoteAuthorization ? { authorization: s.quoteAuthorization } : {} };
56599
+ }
56600
+ async function restateNote(publisher, s, { quote }) {
56601
+ const { urls } = publisher;
56602
+ const content = s.text ?? "";
56603
+ const mentions = await publisher._mentionsFor(content, s.inReplyTo);
56604
+ const container = String(s.noteId).startsWith(urls.privateNotes) ? urls.privateNotes : urls.notes;
56605
+ const slug = s.slug || String(s.noteId).slice(container.length);
56606
+ const reply = await replyTarget(publisher, s.inReplyTo, mentions, s.visibility || "public");
56607
+ const note = noteDoc({
56608
+ urls,
56609
+ slug,
56610
+ content,
56611
+ published: s.published,
56612
+ inReplyTo: s.inReplyTo,
56613
+ attachments: s.attachments || [],
56614
+ mentions,
56615
+ visibility: s.visibility || "public",
56616
+ summary: s.spoiler || null,
56617
+ sensitive: !!s.sensitive,
56618
+ updated: s.editedAt || null,
56619
+ container,
56620
+ also: [...reply ? [reply.actor] : [], ...s.quoteRequest?.actor ? [s.quoteRequest.actor] : []],
56621
+ quote
56622
+ });
56623
+ await write4(publisher.remote, note.id, note);
56624
+ await writeCreate(publisher.remote, createActivityId(note.id), createActivity(note, urls));
56625
+ const update = updateActivity(note, urls, { serial: Date.now() });
56626
+ const contacts = publisher.store.getContacts();
56627
+ const inboxes = [...new Set([
56628
+ ...s.visibility === "direct" ? [] : contacts.followers.map((f) => f.sharedInbox || f.inbox),
56629
+ ...mentions.map((m) => m.inbox),
56630
+ reply?.inbox,
56631
+ ...await inboxesFor(publisher, s.quoteRequest?.actor ? [s.quoteRequest.actor] : [])
56632
+ ].filter(Boolean))];
56633
+ await publisher.deliverer.deliverToAll(inboxes, update);
56634
+ return inboxes.length;
56635
+ }
56636
+ async function authorizeQuote(publisher, s, authorizationId) {
56637
+ const patched = publisher.store.updateStatus(s.noteId, { quoteState: "accepted", quoteAuthorization: authorizationId });
56638
+ const n = await restateNote(publisher, patched || s, { quote: { id: s.quote, authorization: authorizationId } });
56639
+ publisher.log(`quote allowed by ${s.quoteRequest?.actor || "the author"}: ${s.noteId} \u2192 ${n} inbox(es)`);
56640
+ return patched;
56641
+ }
56642
+ async function withdrawQuote(publisher, s) {
56643
+ const patched = publisher.store.updateStatus(s.noteId, { quoteState: "rejected", quoteAuthorization: void 0 });
56644
+ const n = await restateNote(publisher, patched || s, { quote: null });
56645
+ publisher.log(`quote refused by ${s.quoteRequest?.actor || "the author"}: ${s.noteId} \u2192 ${n} inbox(es)`);
56646
+ return patched;
56647
+ }
56648
+ var MAX_QUOTED_BY = 200;
56649
+ async function grantQuote(publisher, noteId, instrumentId) {
56650
+ const { urls } = publisher;
56651
+ const id = quoteAuthorizationId(noteId, instrumentId);
56652
+ await write4(publisher.remote, id, quoteAuthorizationDoc({ urls, id, instrument: instrumentId, target: noteId }));
56653
+ const s = publisher.store.getStatuses().find((x) => x.noteId === noteId);
56654
+ if (s) {
56655
+ const quotedBy = (s.quotedBy || []).filter((q) => q.note !== instrumentId);
56656
+ quotedBy.unshift({ note: instrumentId, authorization: id });
56657
+ publisher.store.updateStatus(noteId, { quotedBy: quotedBy.slice(0, MAX_QUOTED_BY) });
56658
+ }
56659
+ return id;
56660
+ }
56281
56661
 
56282
56662
  // lib/core/publisher/restore.mjs
56283
56663
  var ACCEPT_AP = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
@@ -56331,11 +56711,11 @@ async function reconcileOutbox(publisher, outbox) {
56331
56711
  return 0;
56332
56712
  }
56333
56713
  if (!Array.isArray(published) || !published.length) return 0;
56334
- const idOf2 = (i) => typeof i === "string" ? i : i?.id || null;
56335
- const known2 = new Set(outbox.map(idOf2).filter(Boolean));
56714
+ const idOf3 = (i) => typeof i === "string" ? i : i?.id || null;
56715
+ const known2 = new Set(outbox.map(idOf3).filter(Boolean));
56336
56716
  const removed = new Set(publisher.store.read("outbox-removed.json", []).map((r) => r.id));
56337
56717
  const missing = published.filter((i) => {
56338
- const id = idOf2(i);
56718
+ const id = idOf3(i);
56339
56719
  return id && !known2.has(id) && !removed.has(id);
56340
56720
  });
56341
56721
  if (!missing.length) return 0;
@@ -56774,7 +57154,16 @@ var Publisher = class {
56774
57154
  // Every actor document this identity publishes, from one place: the
56775
57155
  // profile publish and a Move both write it, and a Move that rebuilt it
56776
57156
  // by hand dropped the gateway inbox, the outbox door and the collections.
56777
- actorDocFor({ priv = false, moderators = null, inbox = null, movedTo = this.config.movedTo || null } = {}) {
57157
+ // `clientOrigin` is overridden only by the agent serving a client its own
57158
+ // local actor: standalone, the published document cannot name a loopback
57159
+ // address, but a client already talking to that address can be told it.
57160
+ actorDocFor({
57161
+ priv = false,
57162
+ moderators = null,
57163
+ inbox = null,
57164
+ movedTo = this.config.movedTo || null,
57165
+ clientOrigin = this.clientOrigin
57166
+ } = {}) {
56778
57167
  const { urls } = this;
56779
57168
  return actorDoc({
56780
57169
  urls,
@@ -56799,11 +57188,11 @@ var Publisher = class {
56799
57188
  // The agent's own outbox endpoint, where it is reachable: a client
56800
57189
  // following the actor must arrive somewhere that will take a write.
56801
57190
  // Otherwise the Gateway's outbox door, when one is attached.
56802
- outbox: this.clientOrigin ? `${this.clientOrigin}ap/outbox` : this.gatewayOutbox(),
57191
+ outbox: clientOrigin ? `${clientOrigin}ap/outbox` : this.gatewayOutbox(),
56803
57192
  // How a client-to-server client finds the way in with nothing configured
56804
57193
  // by hand. Advertised only where the surface is publicly reachable.
56805
- oauthAuthorize: this.clientOrigin ? `${this.clientOrigin}oauth/authorize` : null,
56806
- oauthToken: this.clientOrigin ? `${this.clientOrigin}oauth/token` : null
57194
+ oauthAuthorize: clientOrigin ? `${clientOrigin}oauth/authorize` : null,
57195
+ oauthToken: clientOrigin ? `${clientOrigin}oauth/token` : null
56807
57196
  });
56808
57197
  }
56809
57198
  // The human half: a page a browser can open and follow from. The actor
@@ -56847,7 +57236,7 @@ var Publisher = class {
56847
57236
  const moderators = (this.config.moderators || []).length ? urls.moderators : null;
56848
57237
  const gw = this.config.gateway;
56849
57238
  const gwActive = gw && gw.url && gw.mode && gw.mode !== "off";
56850
- const actorDoc2 = this.actorDocFor({ priv, moderators, inbox: gwActive ? gw.url : null });
57239
+ const actorDoc2 = this.actorDocFor({ priv, moderators, inbox: gwActive ? gw.url : this.config.inboxUrl || null });
56851
57240
  const surface = node_crypto_default.createHash("sha256").update(JSON.stringify({
56852
57241
  actor: actorDoc2,
56853
57242
  handle: this.config.handle,
@@ -56861,18 +57250,20 @@ var Publisher = class {
56861
57250
  this.log("profile unchanged \u2014 nothing republished");
56862
57251
  return { unreachable: [], updated: 0, skipped: true };
56863
57252
  }
56864
- await writeWebfinger(
56865
- this.remote,
56866
- urls,
56867
- jrd({ handle: this.config.handle, host, actor: urls.actor, page: urls.profileHtml })
56868
- );
56869
- await writeHostMeta(this.remote, urls, hostMeta(urls.base));
56870
- const nodeinfoDocUrl = urls.home + "ap/nodeinfo-2.0";
56871
- const localPosts = this.store.getStatuses().filter((s) => s.kind === "post").length;
56872
- await writeNodeinfo(this.remote, urls, {
56873
- pointer: nodeinfoPointer(nodeinfoDocUrl),
56874
- doc: nodeinfoDoc({ version: AGENT_VERSION, localPosts })
56875
- });
57253
+ if (!this.config.forum) {
57254
+ await writeWebfinger(
57255
+ this.remote,
57256
+ urls,
57257
+ jrd({ handle: this.config.handle, host, actor: urls.actor, page: urls.profileHtml })
57258
+ );
57259
+ await writeHostMeta(this.remote, urls, hostMeta(urls.base));
57260
+ const nodeinfoDocUrl = urls.home + "ap/nodeinfo-2.0";
57261
+ const localPosts = this.store.getStatuses().filter((s) => s.kind === "post").length;
57262
+ await writeNodeinfo(this.remote, urls, {
57263
+ pointer: nodeinfoPointer(nodeinfoDocUrl),
57264
+ doc: nodeinfoDoc({ version: AGENT_VERSION, localPosts })
57265
+ });
57266
+ }
56876
57267
  const actor = actorDoc2;
56877
57268
  await write(this.remote, urls, actor);
56878
57269
  if (moderators) {
@@ -56883,7 +57274,8 @@ var Publisher = class {
56883
57274
  );
56884
57275
  }
56885
57276
  if (gwActive) await this.publishGatewayPolicy();
56886
- try {
57277
+ if (this.config.forum) {
57278
+ } else try {
56887
57279
  const wrote = await linkInWebIdProfile(this.remote, {
56888
57280
  actorUrl: urls.actor,
56889
57281
  accountName: `@${this.config.handle}@${host}`,
@@ -56949,12 +57341,13 @@ var Publisher = class {
56949
57341
  async verifyPublicSurface() {
56950
57342
  const { urls } = this;
56951
57343
  const targets = [
56952
- ["webfinger", urls.webfinger],
56953
- ["host-meta", urls.base + ".well-known/host-meta"],
57344
+ // Discovery documents are the pod's, not a forum category's (see publishProfile).
57345
+ ...this.config.forum ? [] : [["webfinger", urls.webfinger], ["host-meta", urls.base + ".well-known/host-meta"]],
56954
57346
  ["actor", urls.actor],
56955
57347
  ["notes", urls.notes],
56956
57348
  ["followers", urls.followers],
56957
57349
  ["following", urls.following],
57350
+ ["featured", urls.featured],
56958
57351
  ["outbox", urls.outbox]
56959
57352
  ];
56960
57353
  const unreachable = [];
@@ -57152,6 +57545,15 @@ var Publisher = class {
57152
57545
  publishNote(...a) {
57153
57546
  return publishNote(this, ...a);
57154
57547
  }
57548
+ authorizeQuote(...a) {
57549
+ return authorizeQuote(this, ...a);
57550
+ }
57551
+ withdrawQuote(...a) {
57552
+ return withdrawQuote(this, ...a);
57553
+ }
57554
+ grantQuote(...a) {
57555
+ return grantQuote(this, ...a);
57556
+ }
57155
57557
  publishObject(...a) {
57156
57558
  return publishObject(this, ...a);
57157
57559
  }
@@ -57237,15 +57639,25 @@ var MAX_FORWARDS_PER_DRAIN = 20;
57237
57639
  var ACCEPT_AP2 = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
57238
57640
  function trimActivity(a) {
57239
57641
  if (!a || typeof a !== "object") return a ?? null;
57240
- const idOf2 = (v) => typeof v === "string" ? v : v?.id ?? null;
57642
+ const idOf3 = (v) => typeof v === "string" ? v : v?.id ?? null;
57241
57643
  const out = {};
57242
57644
  for (const k of ["id", "type", "actor", "target"]) {
57243
- const v = idOf2(a[k]);
57645
+ const v = idOf3(a[k]);
57244
57646
  if (v) out[k] = String(v).slice(0, 2048);
57245
57647
  }
57246
- const obj = idOf2(a.object);
57247
- if (obj) out.object = String(obj).slice(0, 2048);
57248
- else if (a.object && typeof a.object === "object" && a.object.type) {
57648
+ const obj = idOf3(a.object);
57649
+ if (obj) {
57650
+ const asked = a.object && typeof a.object === "object" ? a.object : null;
57651
+ const said = {};
57652
+ if (asked) {
57653
+ if (typeof asked.name === "string") said.name = asked.name.slice(0, 300);
57654
+ if ("closed" in asked) {
57655
+ const v = asked.closed;
57656
+ said.closed = v === "false" ? false : v === "true" ? true : typeof v === "string" ? v.slice(0, 64) : !!v;
57657
+ }
57658
+ }
57659
+ out.object = Object.keys(said).length ? { id: String(obj).slice(0, 2048), ...said } : String(obj).slice(0, 2048);
57660
+ } else if (a.object && typeof a.object === "object" && a.object.type) {
57249
57661
  out.object = { type: String(a.object.type).slice(0, 64) };
57250
57662
  }
57251
57663
  return out;
@@ -57297,6 +57709,40 @@ function authorOf(note, delivered = null) {
57297
57709
  if (!author) return null;
57298
57710
  return sameIdentity(note?.id, author) ? author : null;
57299
57711
  }
57712
+ var MAX_REACTION_CHARS = 64;
57713
+ function reactionOf(activity) {
57714
+ if (!activity || activity.type !== "EmojiReact" && activity.type !== "Like") return null;
57715
+ const content = typeof activity.content === "string" ? activity.content.trim() : "";
57716
+ if (!content) return null;
57717
+ const emoji = content.slice(0, MAX_REACTION_CHARS);
57718
+ const bare = emoji.replace(/^:|:$/g, "");
57719
+ const custom = emojisOf(activity).find((e) => e.shortcode === bare);
57720
+ return { emoji, ...custom ? { url: custom.url } : {} };
57721
+ }
57722
+ var QUOTE_REL = "https://misskey-hub.net/ns#_misskey_quote";
57723
+ function quoteOf(note) {
57724
+ const idOf3 = (v) => typeof v === "string" ? v : v?.id;
57725
+ const named = [note?.quote, note?.quoteUri, note?._misskey_quote, note?.quoteUrl].map((v) => idOf3(Array.isArray(v) ? v[0] : v)).find(Boolean);
57726
+ const linked = [].concat(note?.tag || []).find((t) => t?.type === "Link" && t.href && [].concat(t.rel || []).includes(QUOTE_REL))?.href;
57727
+ const q = named || linked;
57728
+ return q && q !== note?.id ? httpOnly(String(q).slice(0, MAX_URL_CHARS)) : null;
57729
+ }
57730
+ function quotePolicyOf(note, author) {
57731
+ const can = note?.interactionPolicy?.canQuote;
57732
+ if (!can || typeof can !== "object") return null;
57733
+ const word = (v) => {
57734
+ const id = typeof v === "string" ? v : v?.id;
57735
+ if (!id) return null;
57736
+ if (id === "https://www.w3.org/ns/activitystreams#Public" || id === "as:Public" || id === "Public") return "public";
57737
+ if (author && sameIdentity(id, author)) {
57738
+ if (/\/followers\/?$/u.test(id)) return "followers";
57739
+ if (/\/following\/?$/u.test(id)) return "following";
57740
+ }
57741
+ return null;
57742
+ };
57743
+ const list3 = (v) => [...new Set([].concat(v || []).map(word).filter(Boolean))];
57744
+ return { automatic: list3(can.automaticApproval), manual: list3(can.manualApproval) };
57745
+ }
57300
57746
 
57301
57747
  // lib/pod/links.mjs
57302
57748
  function linkTargets(headerValue, rel, baseUrl) {
@@ -57554,6 +58000,7 @@ async function isGone(intake, url) {
57554
58000
 
57555
58001
  // lib/core/intake/group.mjs
57556
58002
  function isModerationAsk(intake, activity) {
58003
+ if (intake.isModerationAskExtra?.(activity)) return true;
57557
58004
  if (activity.type === "Block") return true;
57558
58005
  if (activity.type === "Undo") {
57559
58006
  return typeof activity.object === "object" && activity.object?.type === "Block";
@@ -57603,14 +58050,23 @@ async function amplify(intake, noteId, { approved = false, activity = null } = {
57603
58050
  const s = intake.store.getStatuses().find((x) => x.noteId === noteId);
57604
58051
  if (!s) return;
57605
58052
  if (s.announcedAt) return;
57606
- if (s.direct || s.nonPublic) {
58053
+ if (s.direct || s.nonPublic && !intake.config.private) {
57607
58054
  intake.log(`not amplified \u2014 ${noteId} was not addressed publicly, and a group never widens a post's audience`);
57608
58055
  return;
57609
58056
  }
57610
58057
  const contacts = intake.store.getContacts();
57611
58058
  if (!contacts.followers.some((f) => f.actor === s.actor)) {
57612
- intake.log(`not amplified \u2014 ${s.actor} is not a member`);
57613
- return;
58059
+ if (intake.onStranger) {
58060
+ const held2 = await intake.onStranger({ noteId, actor: s.actor, activity }).catch(() => false);
58061
+ if (held2) {
58062
+ intake.log(`held for a moderator \u2014 ${s.actor} is not a member`);
58063
+ return;
58064
+ }
58065
+ }
58066
+ if (!intake.store.getContacts().followers.some((f) => f.actor === s.actor)) {
58067
+ intake.log(`not amplified \u2014 ${s.actor} is not a member`);
58068
+ return;
58069
+ }
57614
58070
  }
57615
58071
  if (intake.store.getMuted().actors.includes(s.actor)) {
57616
58072
  intake.log(`not amplified \u2014 ${s.actor} is muted`);
@@ -57655,6 +58111,9 @@ async function amplify(intake, noteId, { approved = false, activity = null } = {
57655
58111
  await intake.publisher.recordOutbox(act);
57656
58112
  intake.store.setPending(intake.store.getPending().filter((p) => p.noteId !== noteId));
57657
58113
  intake.log(`amplified ${noteId} \u2192 ${inboxes.length} inbox(es)`);
58114
+ if (intake.onCarried) {
58115
+ await intake.onCarried({ noteId, actor: s.actor, activity: act, sent: activity }).catch((e) => intake.log(`after the carry of ${noteId}: ${e.message}`));
58116
+ }
57658
58117
  await intake.bskyGroup?.mirrorCarry(s).catch((e) => intake.log(`bluesky mirror of the carry failed: ${e.message}`));
57659
58118
  }
57660
58119
  async function isCoMember(intake, actor) {
@@ -57702,6 +58161,7 @@ function announceTargets(intake, author) {
57702
58161
  }
57703
58162
 
57704
58163
  // lib/core/intake/activities.mjs
58164
+ var idOf = (v) => typeof v === "string" ? v : v?.id;
57705
58165
  function onAddRemove(intake, activity, actor) {
57706
58166
  const target = typeof activity.target === "string" ? activity.target : activity.target?.id;
57707
58167
  const ours = target && [intake.urls.followers, intake.urls.following, intake.urls.featured].filter(Boolean).includes(target);
@@ -57765,7 +58225,7 @@ async function onFollow(intake, activity, actor, { trusted = false } = {}) {
57765
58225
  }
57766
58226
  async function onUndo(intake, activity, actor, { trusted = false } = {}) {
57767
58227
  const inner = activity.object && typeof activity.object === "object" ? activity.object : null;
57768
- if (inner?.type === "Like" || inner?.type === "Announce") return onUndoReaction(intake, inner, actor, { trusted });
58228
+ if (inner?.type === "Like" || inner?.type === "Announce" || inner?.type === "EmojiReact") return onUndoReaction(intake, inner, actor, { trusted });
57769
58229
  if (typeof activity.object === "object" && activity.object?.type && activity.object.type !== "Follow") return;
57770
58230
  const named = typeof activity.object === "string" ? activity.object : activity.object?.id;
57771
58231
  if (!named && !trusted) return;
@@ -57861,6 +58321,13 @@ async function onUndoReaction(intake, inner, actor, { trusted = false } = {}) {
57861
58321
  const objectId = typeof target === "string" ? target : target?.id;
57862
58322
  if (!objectId) return;
57863
58323
  if (objectId.startsWith(intake.urls.notes)) {
58324
+ const reaction = reactionOf(inner);
58325
+ if (reaction) {
58326
+ const gone2 = intake.store.removeNotifications((n) => n.type === "reaction" && n.actor === actor && n.noteId === objectId && n.emoji === reaction.emoji);
58327
+ if (gone2) intake.log(`reaction ${reaction.emoji} withdrawn by ${actor} on ${objectId}`);
58328
+ return;
58329
+ }
58330
+ if (inner.type === "EmojiReact") return;
57864
58331
  const type = inner.type === "Like" ? "favourite" : "reblog";
57865
58332
  const gone = intake.store.removeNotifications((n) => n.type === type && n.actor === actor && n.noteId === objectId);
57866
58333
  if (gone) intake.log(`${inner.type} withdrawn by ${actor} on ${objectId}`);
@@ -57921,6 +58388,9 @@ async function onDelete(intake, activity, actor) {
57921
58388
  }
57922
58389
  const s = intake.store.getStatuses().find((x) => x.noteId === objectId);
57923
58390
  if (s) await intake.forget(s);
58391
+ if (s && intake.onCarriedGone) {
58392
+ await intake.onCarriedGone({ noteId: objectId, actor }).catch((e) => intake.log(`carried gone ${objectId}: ${e.message}`));
58393
+ }
57924
58394
  intake.log(`deleted upstream: ${objectId}`);
57925
58395
  }
57926
58396
  async function onUpdate(intake, activity, actor) {
@@ -57945,10 +58415,16 @@ async function onUpdate(intake, activity, actor) {
57945
58415
  const attachments = attachmentsOf3(note);
57946
58416
  const freshPoll = pollOf(note);
57947
58417
  const freshEmojis = emojisOf(note);
58418
+ const quote = quoteOf(note);
58419
+ const quoteState = quote ? await intake.quoteStateOf(note, quote) : null;
58420
+ const quotePolicy2 = quotePolicyOf(note, s.actor);
57948
58421
  intake.store.updateStatus(objectId, {
57949
58422
  content,
57950
58423
  ...attachments.length ? { attachments } : {},
57951
58424
  emojis: freshEmojis.length ? freshEmojis : void 0,
58425
+ quote: quote || void 0,
58426
+ quoteState: quoteState || void 0,
58427
+ quotePolicy: quotePolicy2 || void 0,
57952
58428
  // The edit's own stamp when the note carries one; tallies and the
57953
58429
  // content warning follow the edit too. A poll refresh keeps our vote.
57954
58430
  editedAt: note.updated || (/* @__PURE__ */ new Date()).toISOString(),
@@ -57957,9 +58433,14 @@ async function onUpdate(intake, activity, actor) {
57957
58433
  poll: { ...freshPoll, voted: !!s.poll?.voted, ownVotes: s.poll?.ownVotes || [] }
57958
58434
  } : {}
57959
58435
  });
58436
+ if (intake.onCarriedEdit) {
58437
+ await intake.onCarriedEdit({ noteId: objectId, actor, note }).catch((e) => intake.log(`carried edit ${objectId}: ${e.message}`));
58438
+ }
57960
58439
  intake.log(`edited upstream: ${objectId}`);
57961
58440
  }
57962
58441
  async function onReject(intake, activity, actor, { trusted = false } = {}) {
58442
+ const asked = quoteAsked(intake, activity);
58443
+ if (asked) return onQuoteAnswered(intake, asked, activity, actor, "Reject");
57963
58444
  if (activity.object?.type && activity.object.type !== "Follow") return;
57964
58445
  const contacts = intake.store.getContacts();
57965
58446
  const rec = contacts.following.find((f) => f.actor === actor);
@@ -57997,6 +58478,8 @@ async function onMove(intake, activity, actor) {
57997
58478
  intake.log(`${actor} moved to ${target} \u2014 follow the new account to keep seeing them`);
57998
58479
  }
57999
58480
  async function onAccept(intake, activity, actor, { trusted = false } = {}) {
58481
+ const asked = quoteAsked(intake, activity);
58482
+ if (asked) return onQuoteAnswered(intake, asked, activity, actor, "Accept");
58000
58483
  const contacts = intake.store.getContacts();
58001
58484
  const rec = contacts.following.find((f) => f.actor === actor);
58002
58485
  const named = typeof activity.object === "string" ? activity.object : activity.object?.id;
@@ -58012,6 +58495,86 @@ async function onAccept(intake, activity, actor, { trusted = false } = {}) {
58012
58495
  intake.log(`follow accepted by ${actor}`);
58013
58496
  }
58014
58497
  }
58498
+ function quoteAsked(intake, activity) {
58499
+ const named = idOf(activity.object);
58500
+ if (!named) return null;
58501
+ return intake.store.getStatuses().find((x) => x.kind === "post" && x.quoteRequest?.id === named) || null;
58502
+ }
58503
+ async function onQuoteAnswered(intake, s, activity, actor, type) {
58504
+ if (actor !== s.quoteRequest?.actor) {
58505
+ intake.log(`${type} of our quote request from ${actor}, who is not ${s.quoteRequest?.actor} \u2014 ignored`);
58506
+ return;
58507
+ }
58508
+ if (type === "Reject") {
58509
+ if (s.quoteState === "rejected") return;
58510
+ await intake.publisher.withdrawQuote(s);
58511
+ return;
58512
+ }
58513
+ if (s.quoteState === "accepted") return;
58514
+ const resultId = idOf(activity.result);
58515
+ if (!resultId || !intake.sameIdentity(resultId, actor)) return `Accept of a quote request carries no authorization at ${actor}`;
58516
+ const auth = await intake.fetchAP(resultId);
58517
+ if (!auth) throw new Error(`cannot fetch quote authorization ${resultId} \u2014 will retry`);
58518
+ const ok = auth.id === resultId && auth.type === "QuoteAuthorization" && [].concat(auth.attributedTo || []).map(idOf).includes(actor) && idOf(auth.interactingObject) === s.noteId && idOf(auth.interactionTarget) === s.quote;
58519
+ if (!ok) return `quote authorization ${resultId} does not say ${s.noteId} may quote ${s.quote}`;
58520
+ await intake.publisher.authorizeQuote(s, resultId);
58521
+ }
58522
+ async function onQuoteRequest(intake, activity, actor) {
58523
+ const objectId = idOf(activity.object);
58524
+ const instrumentId = idOf(activity.instrument);
58525
+ if (!objectId || !instrumentId) return "QuoteRequest without object or instrument";
58526
+ const ours = objectId.startsWith(intake.urls.notes) || intake.urls.privateNotes && objectId.startsWith(intake.urls.privateNotes);
58527
+ if (!ours) {
58528
+ intake.log(`QuoteRequest from ${actor} names ${objectId}, not a post of ours \u2014 ignored`);
58529
+ return;
58530
+ }
58531
+ if (!intake.sameIdentity(instrumentId, actor)) return `QuoteRequest instrument/actor identity mismatch (${instrumentId})`;
58532
+ const s = intake.store.getStatuses().find((x) => x.noteId === objectId && x.kind === "post");
58533
+ if (!s) return `QuoteRequest for a post we do not hold (${objectId})`;
58534
+ const note = await intake.fetchAP(instrumentId);
58535
+ if (!note) return `quote request: instrument fetch failed (${instrumentId})`;
58536
+ if (note.id !== instrumentId || !isContentType(note.type)) return `quote request: instrument is not verifiable content (${instrumentId})`;
58537
+ if (authorOf(note, actor) !== actor) return `quote request: ${instrumentId} is not by ${actor}`;
58538
+ if (quoteOf(note) !== objectId) return `quote request: ${instrumentId} does not quote ${objectId}`;
58539
+ const doc = await intake.fetchAP(actor);
58540
+ const inbox = doc?.endpoints?.sharedInbox || doc?.inbox;
58541
+ if (!inbox) return `quote request: no inbox for ${actor}`;
58542
+ const { quoteAnswerActivity: quoteAnswerActivity2 } = await Promise.resolve().then(() => (init_wire_quotes(), wire_quotes_exports));
58543
+ const open2 = !s.visibility || s.visibility === "public" || s.visibility === "unlisted";
58544
+ if (!open2) {
58545
+ await intake.deliverer.deliver(
58546
+ inbox,
58547
+ quoteAnswerActivity2({ urls: intake.urls, type: "Reject", request: activity, to: actor, serial: intake.serial++ })
58548
+ );
58549
+ intake.log(`quote refused: ${instrumentId} asked to quote ${objectId}, which is not public`);
58550
+ return;
58551
+ }
58552
+ const authorization = await intake.publisher.grantQuote(objectId, instrumentId);
58553
+ await intake.deliverer.deliver(
58554
+ inbox,
58555
+ quoteAnswerActivity2({ urls: intake.urls, type: "Accept", request: activity, result: authorization, to: actor, serial: intake.serial++ })
58556
+ );
58557
+ const held = intake.store.getStatuses().find((x) => x.noteId === instrumentId);
58558
+ if (!held) {
58559
+ const rejected = await intake.ingestNote(instrumentId, actor, { inline: note });
58560
+ if (rejected) intake.log(`quote of ${objectId} by ${actor}: ${rejected}`);
58561
+ } else if (held.quoteState !== "accepted") {
58562
+ intake.store.updateStatus(instrumentId, { quote: objectId, quoteState: "accepted" });
58563
+ }
58564
+ intake.store.addNotification({ type: "quote", actor, noteId: instrumentId });
58565
+ intake.log(`quote allowed: ${instrumentId} quotes ${objectId}`);
58566
+ }
58567
+ async function quoteStateOf(intake, note, quote) {
58568
+ if (quote.startsWith(intake.urls.notes)) {
58569
+ const target = intake.store.getStatuses().find((x) => x.noteId === quote);
58570
+ return (target?.quotedBy || []).some((q) => q.note === note.id) ? "accepted" : "pending";
58571
+ }
58572
+ const authId = idOf(note.quoteAuthorization);
58573
+ if (!authId || !intake.sameIdentity(authId, quote)) return "pending";
58574
+ const auth = await intake.fetchAP(authId).catch(() => null);
58575
+ const ok = auth && auth.id === authId && auth.type === "QuoteAuthorization" && idOf(auth.interactingObject) === note.id && idOf(auth.interactionTarget) === quote;
58576
+ return ok ? "accepted" : "pending";
58577
+ }
58015
58578
 
58016
58579
  // lib/core/intake/notes.mjs
58017
58580
  init_wire();
@@ -58021,6 +58584,8 @@ function concernsUs(intake, doc, actor) {
58021
58584
  if (audience.includes(intake.urls.actor) || audience.includes(intake.urls.followers)) return true;
58022
58585
  const tagged = [].concat(doc?.tag || []).some((t) => t?.type === "Mention" && (t.href === intake.urls.actor || t.name?.includes(intake.urls.actor)));
58023
58586
  if (tagged) return true;
58587
+ const quoted = quoteOf(doc);
58588
+ if (quoted && quoted.startsWith(intake.urls.notes)) return true;
58024
58589
  const inReplyTo = typeof doc?.inReplyTo === "string" ? doc.inReplyTo : doc?.inReplyTo?.id;
58025
58590
  if (!inReplyTo) return false;
58026
58591
  if (String(inReplyTo).startsWith(intake.urls.notes)) return true;
@@ -58081,6 +58646,7 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58081
58646
  const content = titledContent2(note);
58082
58647
  const author = authorOf(note, actor);
58083
58648
  if (!author) return `object names an author its origin does not vouch for (${objectId})`;
58649
+ intake.recentNotes?.set(note.id, note);
58084
58650
  if (intake.store.isBlocked(author)) return `blocked author (${author})`;
58085
58651
  if (!via && !intake.concernsUs(note, author)) {
58086
58652
  return `the note its own server serves does not address us (${objectId})`;
@@ -58102,6 +58668,10 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58102
58668
  const hashtags = [].concat(note.tag || []).filter((t) => t?.type === "Hashtag" && t.name).slice(0, MAX_MENTIONS).map((t) => ({ name: String(t.name).replace(/^#/, "").slice(0, 128), url: httpOnly(String(t.href || "").slice(0, MAX_URL_CHARS)) })).filter((t) => t.name);
58103
58669
  const emojis = emojisOf(note);
58104
58670
  const poll = pollOf(note);
58671
+ const quote = quoteOf(note);
58672
+ const quotePolicy2 = quotePolicyOf(note, author);
58673
+ const quoteState = quote ? await intake.quoteStateOf(note, quote) : null;
58674
+ if (quote) await holdQuoted(intake, quote);
58105
58675
  const audience = [].concat(note.to || [], note.cc || []).map(String);
58106
58676
  const direct = audience.length > 0 && !audience.includes(PUBLIC) && !audience.some((a) => a.endsWith("/followers"));
58107
58677
  const nonPublic = audience.length > 0 && !audience.includes(PUBLIC);
@@ -58122,11 +58692,16 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58122
58692
  ...emojis.length ? { emojis } : {},
58123
58693
  ...mentions.length ? { mentions } : {},
58124
58694
  ...attachments.length ? { attachments } : {},
58695
+ ...quote ? { quote, quoteState } : {},
58696
+ ...quotePolicy2 ? { quotePolicy: quotePolicy2 } : {},
58125
58697
  ...via ? { via } : {}
58126
58698
  });
58127
58699
  const namesUs = mentions.some((m) => m.href === intake.urls.actor);
58128
58700
  const replyToOurs = !!note.inReplyTo && String(note.inReplyTo).startsWith(intake.urls.notes);
58129
- if (!followed || replyToOurs || direct || namesUs) {
58701
+ const quotesUs = !!quote && quote.startsWith(intake.urls.notes);
58702
+ if (quotesUs) {
58703
+ intake.store.addNotification({ type: "quote", actor: author, noteId: note.id });
58704
+ } else if (!followed || replyToOurs || direct || namesUs) {
58130
58705
  intake.store.addNotification({ type: "mention", actor: author, noteId: note.id });
58131
58706
  }
58132
58707
  if (note.inReplyTo && String(note.inReplyTo).startsWith(intake.urls.notes)) {
@@ -58134,6 +58709,39 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58134
58709
  }
58135
58710
  intake.log(`${kind}: ${note.id}${via ? ` (boosted by ${via})` : ""}`);
58136
58711
  }
58712
+ async function holdQuoted(intake, quoteId) {
58713
+ if (intake.store.getStatuses().some((s) => s.noteId === quoteId)) return;
58714
+ if (intake.store.isBlocked(quoteId)) return;
58715
+ const q = await intake.fetchAP(quoteId).catch(() => null);
58716
+ if (!q || q.id !== quoteId || !isContentType(q.type)) {
58717
+ intake.log(`quoted post ${quoteId} could not be read \u2014 the quote shows without it`);
58718
+ return;
58719
+ }
58720
+ const by = authorOf(q, null);
58721
+ if (!by || intake.store.isBlocked(by)) return;
58722
+ const { attachmentsOf: attachmentsOf3, titledContent: titledContent2 } = await Promise.resolve().then(() => (init_wire(), wire_exports));
58723
+ const attachments = attachmentsOf3(q);
58724
+ const emojis = emojisOf(q);
58725
+ const poll = pollOf(q);
58726
+ const quotePolicy2 = quotePolicyOf(q, by);
58727
+ const mentions = [].concat(q.tag || []).filter((t) => t?.type === "Mention" && t.href && t.name).slice(0, MAX_MENTIONS).map((t) => ({ href: httpOnly(String(t.href).slice(0, MAX_URL_CHARS)), name: String(t.name).slice(0, 256) })).filter((m) => m.href);
58728
+ intake.store.addStatus({
58729
+ noteId: q.id,
58730
+ actor: by,
58731
+ content: titledContent2(q),
58732
+ published: q.published,
58733
+ inReplyTo: q.inReplyTo,
58734
+ kind: "remote",
58735
+ ...q.summary ? { spoiler: String(q.summary).replace(/<[^>]*>/g, "") } : {},
58736
+ ...q.sensitive === true ? { sensitive: true } : {},
58737
+ ...poll ? { poll } : {},
58738
+ ...emojis.length ? { emojis } : {},
58739
+ ...mentions.length ? { mentions } : {},
58740
+ ...attachments.length ? { attachments } : {},
58741
+ ...quotePolicy2 ? { quotePolicy: quotePolicy2 } : {}
58742
+ });
58743
+ intake.log(`quoted post kept: ${q.id}`);
58744
+ }
58137
58745
  async function forget(intake, s, { collect = null } = {}) {
58138
58746
  if (s.announceActivity) {
58139
58747
  await intake.retract(s.noteId, { collect }).catch((e) => intake.log(`retract: ${e.message}`));
@@ -63145,6 +63753,34 @@ var activitystreams_default2 = `# activitystreams.ttl \u2014 shapes for the Acti
63145
63753
  sh:minCount 1 ;
63146
63754
  sh:maxCount 1 ;
63147
63755
  ] .
63756
+
63757
+ <#Update>
63758
+ a sh:NodeShape ;
63759
+ sh:targetClass as:Update ;
63760
+ sh:name "Update" ;
63761
+ sh:description "A change to the object it names, carrying the parts that are now different." ;
63762
+ sh:property [
63763
+ sh:path as:actor ;
63764
+ sh:name "actor" ;
63765
+ sh:description "The one that performed the activity." ;
63766
+ sh:nodeKind sh:BlankNodeOrIRI ;
63767
+ sh:minCount 1 ;
63768
+ sh:maxCount 1 ;
63769
+ ] ;
63770
+ sh:property [
63771
+ sh:path as:object ;
63772
+ sh:name "object" ;
63773
+ sh:description "The thing the activity is about." ;
63774
+ sh:minCount 1 ;
63775
+ sh:maxCount 1 ;
63776
+ ] ;
63777
+ sh:property [
63778
+ sh:path ( as:object as:closed ) ;
63779
+ sh:name "closed" ;
63780
+ sh:description "The time the object stopped taking anything more." ;
63781
+ sh:datatype xsd:dateTime ;
63782
+ sh:maxCount 1 ;
63783
+ ] .
63148
63784
  `;
63149
63785
 
63150
63786
  // web/app/shims/shapes-text.mjs
@@ -63173,6 +63809,18 @@ function asTerm(q) {
63173
63809
  };
63174
63810
  return rdf3.quad(term3(q.subject), term3(q.predicate), term3(q.object));
63175
63811
  }
63812
+ var SH_NAME = "http://www.w3.org/ns/shacl#name";
63813
+ function pathName(r) {
63814
+ const direct = r.path?.value ?? null;
63815
+ if (direct && /[#/]/u.test(direct)) return direct;
63816
+ const shape = r.sourceShape;
63817
+ if (shape) {
63818
+ for (const q of shacl().$shapes?.dataset ?? []) {
63819
+ if (q.subject.equals(shape) && q.predicate.value === SH_NAME) return q.object.value;
63820
+ }
63821
+ }
63822
+ return direct;
63823
+ }
63176
63824
  async function checkShapes(quads) {
63177
63825
  if (!Array.isArray(quads) || quads.length === 0) return null;
63178
63826
  let report;
@@ -63190,7 +63838,12 @@ async function checkShapes(quads) {
63190
63838
  conforms: false,
63191
63839
  results: report.results.slice(0, 10).map((r) => ({
63192
63840
  focus: r.focusNode?.value ?? null,
63193
- path: r.path?.value ?? null,
63841
+ // A SEQUENCE path — `( as:object as:closed )` — is an RDF list, so its
63842
+ // node is blank and `.value` is a generated label like "n3-13". Reported
63843
+ // as that, the record named nothing a reader could act on. The shape's
63844
+ // own `sh:name` is what it is called, so that is used when the path
63845
+ // cannot name itself.
63846
+ path: pathName(r),
63194
63847
  message: r.message?.[0]?.value ?? String(r.sourceConstraintComponent?.value ?? "does not fit the shape"),
63195
63848
  shape: r.sourceShape?.value ?? null
63196
63849
  }))
@@ -63457,6 +64110,7 @@ var Intake = class {
63457
64110
  }
63458
64111
  this.lastDrain = (/* @__PURE__ */ new Date()).toISOString();
63459
64112
  this.lastDrainAtMs = Date.now();
64113
+ if (this.afterDrain) setTimeout(() => this.afterDrain(), 0);
63460
64114
  this._pruneAttempts();
63461
64115
  let all;
63462
64116
  try {
@@ -63608,8 +64262,11 @@ var Intake = class {
63608
64262
  return this.onCreate(activity, actor, { trusted });
63609
64263
  case "Accept":
63610
64264
  return this.onAccept(activity, actor, { trusted });
64265
+ case "QuoteRequest":
64266
+ return this.onQuoteRequest(activity, actor, { trusted });
63611
64267
  case "Like":
63612
- case "Announce": {
64268
+ case "Announce":
64269
+ case "EmojiReact": {
63613
64270
  const wrapped = activity.object;
63614
64271
  if (activity.type === "Announce" && wrapped && typeof wrapped === "object" && wrapped.type === "Delete") {
63615
64272
  return this.onAnnouncedDelete(actor, wrapped);
@@ -63617,6 +64274,27 @@ var Intake = class {
63617
64274
  const inner = wrapped && typeof wrapped === "object" && (wrapped.type === "Create" || wrapped.type === "Update") ? wrapped.object : wrapped;
63618
64275
  const objectId = typeof inner === "string" ? inner : inner?.id;
63619
64276
  this.log(`${activity.type} from ${actor} on ${objectId}`);
64277
+ const reaction = activity.type !== "Announce" ? reactionOf(activity) : null;
64278
+ if (reaction) {
64279
+ if (!objectId || !objectId.startsWith(this.urls.notes)) return;
64280
+ this.store.addNotification({
64281
+ type: "reaction",
64282
+ actor,
64283
+ noteId: objectId,
64284
+ emoji: reaction.emoji,
64285
+ ...reaction.url ? { url: reaction.url } : {},
64286
+ ...this.known(actor) ? {} : { unverified: true }
64287
+ });
64288
+ if (reaction.url) {
64289
+ const s = this.store.getStatuses().find((x) => x.noteId === objectId);
64290
+ const shortcode = reaction.emoji.replace(/^:|:$/g, "");
64291
+ if (s && !(s.emojis || []).some((e) => e.shortcode === shortcode) && (s.emojis || []).length < MAX_EMOJIS) {
64292
+ this.store.updateStatus(objectId, { emojis: [...s.emojis || [], { shortcode, url: reaction.url }] });
64293
+ }
64294
+ }
64295
+ return;
64296
+ }
64297
+ if (activity.type === "EmojiReact") return;
63620
64298
  if (objectId && objectId.startsWith(this.urls.notes)) {
63621
64299
  this.store.addNotification({
63622
64300
  type: activity.type === "Like" ? "favourite" : "reblog",
@@ -63642,6 +64320,9 @@ var Intake = class {
63642
64320
  return this.onAddRemove(activity, actor);
63643
64321
  case "Block":
63644
64322
  return this.onBlock(activity, actor, { trusted });
64323
+ case "Flag":
64324
+ if (this.onReport) return this.onReport(activity, actor, { trusted });
64325
+ return;
63645
64326
  default:
63646
64327
  this.log(`ignored ${activity.type} from ${actor}`);
63647
64328
  }
@@ -63747,6 +64428,12 @@ var Intake = class {
63747
64428
  onAnnounce(...a) {
63748
64429
  return onAnnounce(this, ...a);
63749
64430
  }
64431
+ onQuoteRequest(...a) {
64432
+ return onQuoteRequest(this, ...a);
64433
+ }
64434
+ quoteStateOf(...a) {
64435
+ return quoteStateOf(this, ...a);
64436
+ }
63750
64437
  onDelete(...a) {
63751
64438
  return onDelete(this, ...a);
63752
64439
  }
@@ -64230,6 +64917,7 @@ async function pinStatus(agent2, s, pinned) {
64230
64917
  init_wire();
64231
64918
  var MAX_BODY = 512 * 1024;
64232
64919
  var MAX_INBOX_PAGE = 500;
64920
+ var MAX_OUTBOX_PAGE = 50;
64233
64921
  var ACTIVITY_TYPES = /* @__PURE__ */ new Set([
64234
64922
  "Create",
64235
64923
  "Update",
@@ -64246,7 +64934,7 @@ var ACTIVITY_TYPES = /* @__PURE__ */ new Set([
64246
64934
  "Move"
64247
64935
  ]);
64248
64936
  var arr = (v) => v === void 0 || v === null ? [] : Array.isArray(v) ? v : [v];
64249
- var idOf = (v) => typeof v === "string" ? v : v?.id || null;
64937
+ var idOf2 = (v) => typeof v === "string" ? v : v?.id || null;
64250
64938
  function readBody(req) {
64251
64939
  return new Promise((resolve2, reject) => {
64252
64940
  let size = 0;
@@ -64265,10 +64953,12 @@ function readBody(req) {
64265
64953
  });
64266
64954
  }
64267
64955
  var C2S = class {
64268
- constructor({ agent: agent2, log: log2 = console.log, auth }) {
64956
+ constructor({ agent: agent2, log: log2 = console.log, auth, scheme = null, mount = "" }) {
64269
64957
  this.agent = agent2;
64270
64958
  this.log = log2;
64271
64959
  this.auth = auth;
64960
+ this.scheme = scheme;
64961
+ this.mount = mount;
64272
64962
  }
64273
64963
  get store() {
64274
64964
  return this.agent.store;
@@ -64355,6 +65045,79 @@ var C2S = class {
64355
65045
  orderedItems: kept.map((k) => k.activity)
64356
65046
  });
64357
65047
  }
65048
+ // The actor a client-to-server client on this machine reads. The same
65049
+ // document the pod holds, but for the fields naming where a write goes —
65050
+ // the outbox and the two OAuth endpoints — and for `id`, which names this
65051
+ // address so the client files its credential here and comes back. The pod's
65052
+ // id stays on as an alias; the two are one identity.
65053
+ // What this agent calls itself, to the client that just asked. The Host
65054
+ // passed the Authorities firewall before any route ran, so whichever alias
65055
+ // the client used is one this agent answers on. The scheme is read off the
65056
+ // connection unless the caller named one: only the Server passes a scheme,
65057
+ // and standalone this listener is its own TLS.
65058
+ localOrigin(req) {
65059
+ const host = req.headers.host;
65060
+ if (!host) return null;
65061
+ const scheme = this.scheme || (req.socket?.encrypted || req.headers["x-forwarded-proto"] === "https" ? "https" : "http");
65062
+ return `${scheme}://${host}${this.mount}/`;
65063
+ }
65064
+ /**
65065
+ * The owner's own outbox, from what this agent recorded. The pod holds the
65066
+ * published copy and it stays the canonical one; this is served only where
65067
+ * that copy cannot be read by the client asking.
65068
+ */
65069
+ sendLocalOutbox(res, url, origin) {
65070
+ const id = `${origin}ap/outbox`;
65071
+ const outbox = this.store.read("outbox.json", []);
65072
+ const page2 = url?.searchParams?.get("page") || null;
65073
+ const ct = { "content-type": "application/activity+json; charset=utf-8" };
65074
+ if (!page2) {
65075
+ return this.send(res, 200, {
65076
+ "@context": AS_CTX,
65077
+ id,
65078
+ type: "OrderedCollection",
65079
+ totalItems: outbox.length,
65080
+ ...outbox.length ? { first: `${id}?page=1` } : { orderedItems: [] }
65081
+ }, ct);
65082
+ }
65083
+ const n = Number(page2);
65084
+ if (!Number.isInteger(n) || n < 1) {
65085
+ return this.send(res, 400, { error: "page is a whole number from 1" });
65086
+ }
65087
+ const start = (n - 1) * MAX_OUTBOX_PAGE;
65088
+ const items = outbox.slice(start, start + MAX_OUTBOX_PAGE);
65089
+ return this.send(res, 200, {
65090
+ "@context": AS_CTX,
65091
+ id: `${id}?page=${n}`,
65092
+ type: "OrderedCollectionPage",
65093
+ partOf: id,
65094
+ ...start + items.length < outbox.length ? { next: `${id}?page=${n + 1}` } : {},
65095
+ // A post is recorded by its object id and published as the Create beside
65096
+ // it — the same mapping the pod's copy uses, from the same helper.
65097
+ orderedItems: items.map(outboxWireItem)
65098
+ }, ct);
65099
+ }
65100
+ sendLocalActor(req, res, origin) {
65101
+ const pub = this.agent.publisher;
65102
+ const cfg = pub.config || {};
65103
+ const gw = cfg.gateway;
65104
+ const gwActive = gw && gw.url && gw.mode && gw.mode !== "off";
65105
+ const doc = pub.actorDocFor({
65106
+ inbox: gwActive ? gw.url : cfg.inboxUrl || null,
65107
+ clientOrigin: origin
65108
+ });
65109
+ const canonical2 = doc.id;
65110
+ doc.id = `${origin}ap/actor`;
65111
+ doc.alsoKnownAs = [.../* @__PURE__ */ new Set([...doc.alsoKnownAs || [], canonical2])];
65112
+ const body = JSON.stringify(doc);
65113
+ res.writeHead(200, {
65114
+ "content-type": "application/activity+json; charset=utf-8",
65115
+ "cache-control": "no-store",
65116
+ "content-length": Buffer.byteLength(body)
65117
+ });
65118
+ res.end(req.method === "HEAD" ? void 0 : body);
65119
+ return true;
65120
+ }
64358
65121
  async handle(req, res, pathname, url) {
64359
65122
  if (pathname !== "/ap/outbox" && pathname !== "/ap/actor" && pathname !== "/ap/inbox") return false;
64360
65123
  if (req.method === "OPTIONS") {
@@ -64374,6 +65137,9 @@ var C2S = class {
64374
65137
  return this.sendInbox(res, url);
64375
65138
  }
64376
65139
  if (req.method === "GET" || req.method === "HEAD") {
65140
+ const local = this.agent.publisher?.clientOrigin ? null : this.localOrigin(req);
65141
+ if (local && pathname === "/ap/actor") return this.sendLocalActor(req, res, local);
65142
+ if (local && pathname === "/ap/outbox") return this.sendLocalOutbox(res, url, local);
64377
65143
  const target = pathname === "/ap/actor" ? this.urls.actor : this.urls.outbox;
64378
65144
  res.writeHead(303, { location: target, "cache-control": "no-store" });
64379
65145
  res.end();
@@ -64414,8 +65180,8 @@ var C2S = class {
64414
65180
  // every client means by a post with no audience chosen, and what a client
64415
65181
  // that never addresses (dokieli's annotations) needs.
64416
65182
  visibilityOf(activity, object) {
64417
- const to = arr(activity.to ?? object?.to).map(idOf);
64418
- const cc = arr(activity.cc ?? object?.cc).map(idOf);
65183
+ const to = arr(activity.to ?? object?.to).map(idOf2);
65184
+ const cc = arr(activity.cc ?? object?.cc).map(idOf2);
64419
65185
  if (!to.length && !cc.length) return "public";
64420
65186
  if (to.includes(PUBLIC)) return "public";
64421
65187
  if (cc.includes(PUBLIC)) return "unlisted";
@@ -64441,13 +65207,13 @@ var C2S = class {
64441
65207
  // in to/cc are listed and delivered to; the ones in bto/bcc are delivered
64442
65208
  // to and never listed (§6).
64443
65209
  addressedActors(activity, object) {
64444
- const pick = (...fields) => [...new Set(fields.flatMap((f) => arr(activity[f] ?? object?.[f]).map(idOf)))].filter((a) => typeof a === "string" && /^https?:\/\//u.test(a) && a !== PUBLIC && a !== this.urls.followers && a !== this.urls.actor);
65210
+ const pick = (...fields) => [...new Set(fields.flatMap((f) => arr(activity[f] ?? object?.[f]).map(idOf2)))].filter((a) => typeof a === "string" && /^https?:\/\//u.test(a) && a !== PUBLIC && a !== this.urls.followers && a !== this.urls.actor);
64445
65211
  return { also: pick("to", "cc"), deliverTo: pick("bto", "bcc") };
64446
65212
  }
64447
65213
  async _dispatch(activity, { slug, raw, reply }) {
64448
65214
  const agent2 = this.agent;
64449
65215
  const object = typeof activity.object === "object" && activity.object !== null ? activity.object : null;
64450
- const objectId = idOf(activity.object);
65216
+ const objectId = idOf2(activity.object);
64451
65217
  switch (activity.type) {
64452
65218
  case "Create": {
64453
65219
  const makes = object?.type || "Note";
@@ -64470,7 +65236,7 @@ var C2S = class {
64470
65236
  options: titles,
64471
65237
  multiple: !one.length && many.length > 0,
64472
65238
  expiresAt: object.endTime || null,
64473
- inReplyTo: idOf(object.inReplyTo) || void 0,
65239
+ inReplyTo: idOf2(object.inReplyTo) || void 0,
64474
65240
  visibility,
64475
65241
  spoilerText: object.summary || null,
64476
65242
  sensitive: object.sensitive === true
@@ -64490,7 +65256,7 @@ var C2S = class {
64490
65256
  ...a?.name ? { description: a.name } : {}
64491
65257
  })).filter((a) => a.url);
64492
65258
  const note = await agent2.publisher.publishNote(text, {
64493
- inReplyTo: idOf(object.inReplyTo) || void 0,
65259
+ inReplyTo: idOf2(object.inReplyTo) || void 0,
64494
65260
  attachments,
64495
65261
  visibility,
64496
65262
  spoilerText: object.summary || null,
@@ -64583,28 +65349,28 @@ var C2S = class {
64583
65349
  }
64584
65350
  case "Undo": {
64585
65351
  const inner = object;
64586
- const innerId = idOf(activity.object);
65352
+ const innerId = idOf2(activity.object);
64587
65353
  if (inner?.type === "Block") {
64588
- const target = idOf(inner.object);
65354
+ const target = idOf2(inner.object);
64589
65355
  if (!target) return reply(400, { error: "unblock whom?" });
64590
65356
  await unblockActor(agent2, target);
64591
65357
  return reply(200, { ok: true, object: target });
64592
65358
  }
64593
65359
  const statuses = this.store.getStatuses();
64594
65360
  let s = innerId ? statuses.find((x) => x.likeActivity?.id === innerId) : null;
64595
- if (!s && inner?.type === "Like") s = this.byIri(idOf(inner.object));
65361
+ if (!s && inner?.type === "Like") s = this.byIri(idOf2(inner.object));
64596
65362
  if (s?.favourited) {
64597
65363
  const updated = await unfavourite(agent2, s);
64598
65364
  return reply(200, { ok: true, object: updated.noteId });
64599
65365
  }
64600
65366
  s = innerId ? statuses.find((x) => x.announceActivity?.id === innerId) : null;
64601
- if (!s && inner?.type === "Announce") s = this.byIri(idOf(inner.object));
65367
+ if (!s && inner?.type === "Announce") s = this.byIri(idOf2(inner.object));
64602
65368
  if (s?.reblogged) {
64603
65369
  const updated = await unreblog(agent2, s);
64604
65370
  return reply(200, { ok: true, object: updated.noteId });
64605
65371
  }
64606
65372
  const following = this.store.getContacts().following;
64607
- const rec = following.find((f) => f.followActivity?.id === innerId) || (inner?.type === "Follow" ? following.find((f) => f.actor === idOf(inner.object)) : null);
65373
+ const rec = following.find((f) => f.followActivity?.id === innerId) || (inner?.type === "Follow" ? following.find((f) => f.actor === idOf2(inner.object)) : null);
64608
65374
  if (rec) {
64609
65375
  await unfollowActor(agent2, rec.actor);
64610
65376
  return reply(200, { ok: true, object: rec.actor });
@@ -64618,7 +65384,7 @@ var C2S = class {
64618
65384
  }
64619
65385
  case "Add":
64620
65386
  case "Remove": {
64621
- if (idOf(activity.target) !== this.urls.featured) {
65387
+ if (idOf2(activity.target) !== this.urls.featured) {
64622
65388
  return reply(422, { error: "the featured collection is the one Add/Remove edits here" });
64623
65389
  }
64624
65390
  const s = this.byIri(objectId);
@@ -64628,7 +65394,7 @@ var C2S = class {
64628
65394
  }
64629
65395
  case "Accept":
64630
65396
  case "Reject": {
64631
- const requester = object?.actor ? idOf(object.actor) : objectId;
65397
+ const requester = object?.actor ? idOf2(object.actor) : objectId;
64632
65398
  if (!requester) return reply(400, { error: "whose request? object must name the Follow or its actor" });
64633
65399
  const r = activity.type === "Accept" ? await admitRequest(agent2, requester).catch((e) => ({ error: e.message })) : await refuseRequest(agent2, requester).catch((e) => ({ error: e.message }));
64634
65400
  if (r.error) return reply(404, { error: r.error });
@@ -64649,11 +65415,21 @@ var RENEW_MS = 9e4;
64649
65415
  var JITTER = () => 0.85 + Math.random() * 0.3;
64650
65416
  var UNREADABLE = /* @__PURE__ */ Symbol("lease-unreadable");
64651
65417
  var Lease = class {
64652
- constructor({ url, fetchImpl, log: log2 = console.log }) {
65418
+ // `id` names the HOLDER, and acquire() lets a holder reclaim its own lease
65419
+ // without waiting for the TTL — so whether it is stable decides whether a
65420
+ // restart is the same agent coming back or a second one arriving. A process
65421
+ // that is gone for good wants a new one each time; a browser does not, since
65422
+ // its agent lives in a service worker the browser is free to kill and restart
65423
+ // whenever it likes. Left to the default, every one of those restarts looked
65424
+ // like another device and asked the owner to take over their own account —
65425
+ // which is what switching between the two clients did, because that is a
65426
+ // navigation and a navigation can take the worker with it. The browser build
65427
+ // passes one it keeps.
65428
+ constructor({ url, fetchImpl, log: log2 = console.log, id = null }) {
64653
65429
  this.url = url;
64654
65430
  this.fetchImpl = fetchImpl;
64655
65431
  this.log = log2;
64656
- this.id = node_crypto_default.randomUUID();
65432
+ this.id = id || node_crypto_default.randomUUID();
64657
65433
  this.stopped = false;
64658
65434
  this.timer = null;
64659
65435
  this.heldUntil = 0;
@@ -64968,6 +65744,7 @@ function readBody2(req) {
64968
65744
  const ct = String(req.headers["content-type"] || "");
64969
65745
  try {
64970
65746
  if (ct.includes("application/json")) return resolve2(data ? JSON.parse(data) : {});
65747
+ if (ct.includes("multipart/form-data")) return resolve2(textFields(data, ct));
64971
65748
  const form = new URLSearchParams(data);
64972
65749
  const out = {};
64973
65750
  for (const key of new Set(form.keys())) {
@@ -64981,6 +65758,76 @@ function readBody2(req) {
64981
65758
  req.on("error", reject);
64982
65759
  });
64983
65760
  }
65761
+ function textFields(data, contentType) {
65762
+ const m = /boundary=(?:"([^"]+)"|([^;]+))/.exec(contentType);
65763
+ if (!m) return {};
65764
+ const out = {};
65765
+ for (const part of data.split("--" + (m[1] || m[2]).trim())) {
65766
+ const sep = part.indexOf("\r\n\r\n");
65767
+ if (sep < 0) continue;
65768
+ const head = part.slice(0, sep);
65769
+ const name = /name="([^"]*)"/.exec(head)?.[1];
65770
+ if (!name || /filename="/.test(head)) continue;
65771
+ const value = part.slice(sep + 4).replace(/\r\n$/, "");
65772
+ if (name.endsWith("[]")) (out[name] ||= []).push(value);
65773
+ else out[name] = value;
65774
+ }
65775
+ return out;
65776
+ }
65777
+ function readMultipart(req, limit = 12e6) {
65778
+ return new Promise((resolve2, reject) => {
65779
+ const chunks = [];
65780
+ let n = 0;
65781
+ req.on("data", (c) => {
65782
+ n += c.length;
65783
+ if (n > limit) {
65784
+ reject(new Error("upload too large"));
65785
+ req.destroy();
65786
+ return;
65787
+ }
65788
+ chunks.push(c);
65789
+ });
65790
+ req.on("error", reject);
65791
+ req.on("end", () => {
65792
+ try {
65793
+ const m = /boundary=(?:"([^"]+)"|([^;]+))/.exec(String(req.headers["content-type"] || ""));
65794
+ if (!m) return resolve2({ fields: {}, file: null });
65795
+ const buf = Buffer.concat(chunks);
65796
+ const boundary = Buffer.from("--" + (m[1] || m[2]).trim());
65797
+ const fields = {};
65798
+ const files = {};
65799
+ let file = null;
65800
+ let i = buf.indexOf(boundary);
65801
+ while (i >= 0) {
65802
+ const start = i + boundary.length;
65803
+ if (buf.slice(start, start + 2).toString() === "--") break;
65804
+ const next = buf.indexOf(boundary, start);
65805
+ if (next < 0) break;
65806
+ const part = buf.slice(start + 2, next - 2);
65807
+ const sep = part.indexOf("\r\n\r\n");
65808
+ if (sep >= 0) {
65809
+ const head = part.slice(0, sep).toString();
65810
+ const body = part.slice(sep + 4);
65811
+ const name = /name="([^"]*)"/.exec(head)?.[1];
65812
+ const filename = /filename="([^"]*)"/.exec(head)?.[1];
65813
+ if (filename !== void 0) {
65814
+ file = {
65815
+ filename,
65816
+ contentType: /content-type:\s*([^\r\n]+)/i.exec(head)?.[1]?.trim() || "application/octet-stream",
65817
+ data: body
65818
+ };
65819
+ if (name) files[name] = file;
65820
+ } else if (name) fields[name] = body.toString();
65821
+ }
65822
+ i = next;
65823
+ }
65824
+ resolve2({ fields, file, files });
65825
+ } catch (e) {
65826
+ reject(e);
65827
+ }
65828
+ });
65829
+ });
65830
+ }
64984
65831
 
64985
65832
  // lib/client/masto/oauth.mjs
64986
65833
  var TOKEN_TTL_MS = 90 * 24 * 60 * 60 * 1e3;
@@ -65008,6 +65855,39 @@ function checkPassword(rec, password) {
65008
65855
  }
65009
65856
  var escapeHtml = (s) => String(s).replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[c]);
65010
65857
  var parseRedirects = (v) => (Array.isArray(v) ? v : String(v || "").split(/\s+/)).map((s) => s.trim()).filter(Boolean);
65858
+ function sendPodSigninPage(res, client, webId, mount = "") {
65859
+ let asking = "";
65860
+ if (client && (client.name || client.redirect)) {
65861
+ let where = "";
65862
+ try {
65863
+ where = client.redirect ? new URL(client.redirect).host : "";
65864
+ } catch {
65865
+ }
65866
+ const who = client.name ? escapeHtml(client.name) : where ? escapeHtml(where) : "A client";
65867
+ asking = `<p><strong>${who}</strong> is asking to use your account${where ? `, and will be sent back to <code>${escapeHtml(where)}</code>` : ""}.</p>`;
65868
+ }
65869
+ res.writeHead(200, { "content-type": "text/html; charset=utf-8", "cache-control": "no-cache" });
65870
+ res.end(`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
65871
+ <title>Sign in with your pod</title>
65872
+ <style>:root{color-scheme:light dark;--heading:#1a4f8a;--btn:#3d6b35;--line:#9a9a9a}
65873
+ body{font:20px Arial,Helvetica,sans-serif;max-width:28rem;margin:12vh auto;padding:0 1rem}
65874
+ h1{color:var(--heading);font-size:1.5rem}
65875
+ code{word-break:break-all;background:rgba(120,120,120,.12);padding:.05em .35em;border-radius:4px}
65876
+ button{font:inherit;padding:.6rem 1.1rem;background:var(--btn);color:#fff;border:none;border-radius:9px;cursor:pointer}
65877
+ button[hidden]{display:none}
65878
+ #signin-status{min-height:1.5em;padding:.6rem .8rem;border:1px solid var(--line);border-radius:8px;margin-top:1rem}
65879
+ @media (prefers-color-scheme:dark){:root{--heading:#7fb3e8;--btn:#5a8a4f}}</style></head><body>
65880
+ <main>
65881
+ <h1>Sign in with your pod</h1>
65882
+ ${asking}
65883
+ <p>This account belongs to <a id="webid" href="${escapeHtml(webId)}">${escapeHtml(webId)}</a>. Sign in at that pod to allow it.</p>
65884
+ <p><button type="button" id="signin" hidden>Sign in with your pod</button></p>
65885
+ <p id="signin-status" role="status" aria-live="polite"></p>
65886
+ </main>
65887
+ <script type="module" src="${escapeHtml(mount)}/oauth/session/signin.mjs"><\/script>
65888
+ </body></html>`);
65889
+ return true;
65890
+ }
65011
65891
  function sendLoginForm(res, params, error2 = "", client = null, status2 = null, headers = {}) {
65012
65892
  const hidden = [...params.entries()].filter(([k]) => k !== "password").map(([k, v]) => `<input type="hidden" name="${escapeHtml(k)}" value="${escapeHtml(v)}">`).join("\n");
65013
65893
  let asking = "<p>Enter the agent password to authorize this client.</p>";
@@ -65276,6 +66156,16 @@ async function handle(api, ctx) {
65276
66156
  params = new URLSearchParams(body);
65277
66157
  }
65278
66158
  const redirect = params.get("redirect_uri") || "";
66159
+ let proved = false;
66160
+ if (req.method === "POST" && req.headers.authorization && req.headers.dpop && api.podAuth) {
66161
+ const proof = await api.podAuth(req, pathname);
66162
+ if (!proof.ok) return send(proof.status || 401, { error: proof.error });
66163
+ proved = true;
66164
+ }
66165
+ const ownerWebId = api.ownerWebId?.() || null;
66166
+ if (req.method === "GET" && !params.get("client_id") && params.get("code") && params.get("state") && ownerWebId) {
66167
+ return sendPodSigninPage(res, null, ownerWebId, api.mount || "");
66168
+ }
65279
66169
  const app = api.findApp(params.get("client_id") || "");
65280
66170
  const doc = app ? null : await api.resolveClientDocument(params.get("client_id") || "");
65281
66171
  const external = !!app || !!doc;
@@ -65283,13 +66173,14 @@ async function handle(api, ctx) {
65283
66173
  api.log(`authorize refused: cross-site navigation to the mint from ${req.headers.referer || "nowhere"}`);
65284
66174
  return send(403, { error: "a cross-site navigation may not authorize a client" });
65285
66175
  }
65286
- if (external && !api.store.getConfig()?.uiPassword && !api.redirectAllowed(redirect)) {
66176
+ const client = { name: app?.name || doc?.name || null, redirect, scope: params.get("scope") || "read" };
66177
+ if (external && !proved && !api.store.getConfig()?.uiPassword && !api.redirectAllowed(redirect)) {
66178
+ if (req.method === "GET" && ownerWebId) return sendPodSigninPage(res, client, ownerWebId, api.mount || "");
65287
66179
  api.log(`authorize refused: no UI password, and "${redirect}" is not an address of this agent`);
65288
66180
  return send(403, {
65289
66181
  error: "this client asks to be sent somewhere other than this agent, and no password is set to approve that with. Run `fedipod passwd` and try again."
65290
66182
  });
65291
66183
  }
65292
- const client = { name: app?.name || doc?.name || null, redirect, scope: params.get("scope") || "read" };
65293
66184
  if (app) {
65294
66185
  if (!app.redirectUris.includes(redirect)) {
65295
66186
  api.log(`authorize refused: redirect_uri "${redirect}" not registered for ${app.clientId}`);
@@ -65308,7 +66199,7 @@ async function handle(api, ctx) {
65308
66199
  api.log(`authorize refused: redirect_uri "${redirect}" is not this agent`);
65309
66200
  return send(400, { error: "redirect_uri must be an address of this agent" });
65310
66201
  }
65311
- if (req.method === "POST") {
66202
+ if (req.method === "POST" && !proved) {
65312
66203
  if (api.rateLimited()) {
65313
66204
  api.log("authorize rate limited");
65314
66205
  return sendLoginForm(
@@ -65323,12 +66214,13 @@ async function handle(api, ctx) {
65323
66214
  if (!pw || !checkPassword(pw, body.password || "")) {
65324
66215
  return sendLoginForm(res, params, "wrong password \u2014 try again", client);
65325
66216
  }
65326
- } else if (pw) {
66217
+ } else if (pw && !proved) {
65327
66218
  return sendLoginForm(res, params, "", client);
65328
- } else if (api.allowed && !api.allowed.isLocalRequest(req)) {
66219
+ } else if (!proved && api.allowed && !api.allowed.isLocalRequest(req) && !api.throughDoor?.(req)) {
66220
+ if (req.method === "GET" && ownerWebId) return sendPodSigninPage(res, client, ownerWebId, api.mount || "");
65329
66221
  api.log(`authorize refused: no UI password, and "${req.headers.host}" is not this machine`);
65330
66222
  return send(403, {
65331
- error: "this agent answers on an address outside this machine and has no password set \u2014 " + (api.embedded ? `POST {"password":"\u2026"} to the owner door's /config with its door secret before logging in` : "run `fedipod passwd` before logging in over that address")
66223
+ error: api.embedded ? "Open your account's management page first, then sign in from there." : "Signing in from another machine needs a password. On the machine that runs your account, run: fedipod passwd"
65332
66224
  });
65333
66225
  }
65334
66226
  const code = external ? api.mintCode({
@@ -65342,6 +66234,7 @@ async function handle(api, ctx) {
65342
66234
  const target = new URL(redirect);
65343
66235
  target.searchParams.set("code", code);
65344
66236
  if (params.get("state")) target.searchParams.set("state", params.get("state"));
66237
+ if (proved) return send(200, { redirect: target.href });
65345
66238
  res.writeHead(302, { location: target.href });
65346
66239
  res.end();
65347
66240
  return true;
@@ -65656,6 +66549,7 @@ var BskyFeed = class {
65656
66549
 
65657
66550
  // lib/client/masto/render.mjs
65658
66551
  var TRANSPARENT_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==";
66552
+ var DEFAULT_AVATAR = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABd0lEQVR42u3ZoW4CQRDG8Xk6NBLbVCJ5gBpMTQ2iBlFR29RXNsFhz1JHXV9hydfkEkoobW5n2F34i0kIHMfN73ZvdwYbTabpmsMAAAAAAAAAAAAAAAAAAACiY3wzS/ePz+n1bZW6zTZ9fH59h17rPX2mYy4OQEktnl5+JP1b6Bgdey6IcIDb2Ty9r7s/Ez8MfUffbRpACfznrp8aDdEIFjnsh9z5YyMhcjqEAWge5ybfh87VFIDuWM7QPzYVokZBCICWM6/k+9A5mwHQmu4NoHM2A+A5/PenQTMA3sn3AQBTgIcgyyAbIbbCFEOUwzREaInRFKUtDgAAFQLcPSxDCqH9Z4V+o0oAXVhU4ofhiWCtJe+NYKV3e6V3idkAHvv9nDqhKIBnxVeqUrRaav5SvQKrqetTols0GGDdbaoB0LWcFUBP31qS72PoimCtD//caWC1tL1Ltc2ttbXfe08wCKC25HP+OgMAAAAAAAAAAAAAAAAArhNgB1PE/x/JOiuNAAAAAElFTkSuQmCC";
65659
66553
  var selfIcon = (api, self2, cached) => (self2 ? api.store.getConfig()?.icon : null) || cached.icon;
65660
66554
  function selfAccount(api) {
65661
66555
  return api.account(api.urls.actor, { selfAcct: publicHandle(api.store.getConfig()) });
@@ -65693,8 +66587,8 @@ function account(api, actorUrl, { selfAcct } = {}) {
65693
66587
  note: (self2 ? api.store.getConfig()?.summary : cached.summary) || "",
65694
66588
  url: actorUrl,
65695
66589
  uri: actorUrl,
65696
- avatar: selfIcon(api, self2, cached) || TRANSPARENT_PNG,
65697
- avatar_static: selfIcon(api, self2, cached) || TRANSPARENT_PNG,
66590
+ avatar: selfIcon(api, self2, cached) || DEFAULT_AVATAR,
66591
+ avatar_static: selfIcon(api, self2, cached) || DEFAULT_AVATAR,
65698
66592
  header: (self2 ? api.store.getConfig()?.image : null) || TRANSPARENT_PNG,
65699
66593
  header_static: (self2 ? api.store.getConfig()?.image : null) || TRANSPARENT_PNG,
65700
66594
  // A remote actor's counts are whatever its own collections said when we
@@ -65709,11 +66603,11 @@ function account(api, actorUrl, { selfAcct } = {}) {
65709
66603
  fields: (self2 ? api.store.getConfig()?.fields : cached.fields) || []
65710
66604
  };
65711
66605
  }
65712
- function page(api, items, url, { limit = 20, max = 40, idOf: idOf2 = (s) => api.store.idFor(s.noteId) } = {}) {
66606
+ function page(api, items, url, { limit = 20, max = 40, idOf: idOf3 = (s) => api.store.idFor(s.noteId) } = {}) {
65713
66607
  const n = Math.min(Number(url.searchParams.get("limit")) || limit, max);
65714
66608
  const ids = /* @__PURE__ */ new Map();
65715
66609
  const idAt = (s) => {
65716
- if (!ids.has(s)) ids.set(s, idOf2(s));
66610
+ if (!ids.has(s)) ids.set(s, idOf3(s));
65717
66611
  return ids.get(s);
65718
66612
  };
65719
66613
  const cut = (param) => {
@@ -65737,8 +66631,8 @@ function page(api, items, url, { limit = 20, max = 40, idOf: idOf2 = (s) => api.
65737
66631
  for (const [k, v] of Object.entries(extra)) u.searchParams.set(k, v);
65738
66632
  return u.href;
65739
66633
  };
65740
- const links = [`<${q({ max_id: idOf2(pageItems2[pageItems2.length - 1]) })}>; rel="next"`];
65741
- if (pageItems2.length) links.push(`<${q({ min_id: idOf2(pageItems2[0]) })}>; rel="prev"`);
66634
+ const links = [`<${q({ max_id: idOf3(pageItems2[pageItems2.length - 1]) })}>; rel="next"`];
66635
+ if (pageItems2.length) links.push(`<${q({ min_id: idOf3(pageItems2[0]) })}>; rel="prev"`);
65742
66636
  return { items: pageItems2, headers: { link: links.join(", ") } };
65743
66637
  }
65744
66638
  async function bskyReply(api, send, body, parent, visibility) {
@@ -65849,7 +66743,26 @@ async function acctReply(api, send, body, parent, visibility) {
65849
66743
  return send(422, { error: e.message });
65850
66744
  }
65851
66745
  }
65852
- function status(api, s, { all } = {}) {
66746
+ function quoteJson(api, s, { all, depth = 0 } = {}) {
66747
+ if (!s.quote) return null;
66748
+ const state = s.quoteState || "pending";
66749
+ const quoted = state !== "rejected" && (all || api.store.getStatuses()).find((x) => x.noteId === s.quote);
66750
+ if (depth > 0) return { state, quoted_status_id: quoted ? api.store.idFor(quoted.noteId) : null };
66751
+ return { state, quoted_status: quoted ? api.status(quoted, { all, depth: depth + 1 }) : null };
66752
+ }
66753
+ function quoteApproval(api, s) {
66754
+ if (s.actor === api.urls?.actor) {
66755
+ const open2 = !s.visibility || s.visibility === "public" || s.visibility === "unlisted";
66756
+ return { automatic: open2 ? ["public"] : [], manual: [], current_user: open2 ? "automatic" : "denied" };
66757
+ }
66758
+ const p = s.quotePolicy;
66759
+ if (!p) return { automatic: [], manual: [], current_user: "unknown" };
66760
+ const follows = () => api.store.getContacts().following.some((f) => f.actor === s.actor && f.accepted);
66761
+ const may = (list3) => list3.includes("public") || list3.includes("followers") && follows();
66762
+ const current = may(p.automatic) ? "automatic" : may(p.manual) ? "manual" : "denied";
66763
+ return { automatic: p.automatic, manual: p.manual, current_user: current };
66764
+ }
66765
+ function status(api, s, { all, depth = 0 } = {}) {
65853
66766
  const replies = (all || api.store.getStatuses()).filter((x) => x.inReplyTo === s.noteId).length;
65854
66767
  return {
65855
66768
  id: api.store.idFor(s.noteId),
@@ -65905,6 +66818,8 @@ function status(api, s, { all } = {}) {
65905
66818
  })),
65906
66819
  card: null,
65907
66820
  poll: s.poll ? api.pollJson(s) : null,
66821
+ quote: quoteJson(api, s, { all, depth }),
66822
+ quote_approval: quoteApproval(api, s),
65908
66823
  // What a filter matched, if any. Mastodon's clients read this and do the
65909
66824
  // hiding or warning; they do NOT match keywords themselves — Phanpy does
65910
66825
  // not — so filters that were stored and served but never applied were a
@@ -65991,7 +66906,9 @@ function pushNotify(api, n) {
65991
66906
  reblog: "boosted your post",
65992
66907
  follow: "followed you",
65993
66908
  "follow-request": "asked to follow you",
65994
- move: "moved account"
66909
+ move: "moved account",
66910
+ reaction: `reacted ${n.emoji || ""} to your post`,
66911
+ quote: "quoted your post"
65995
66912
  };
65996
66913
  const s = n.noteId && api.store.getStatuses().find((x) => x.noteId === n.noteId);
65997
66914
  return api.push.notify(n, {
@@ -66072,10 +66989,14 @@ function relationship(api, actorUrl) {
66072
66989
  };
66073
66990
  }
66074
66991
  function notificationType(api, t) {
66075
- return t === "follow-request" ? "follow_request" : t;
66992
+ return t === "follow-request" ? "follow_request" : t === "reaction" ? "emoji_reaction" : t;
66076
66993
  }
66077
66994
  function notification(api, n) {
66078
66995
  const out = { id: n.id, type: api.notificationType(n.type), created_at: n.at, account: api.account(n.actor) };
66996
+ if (n.type === "reaction") {
66997
+ out.emoji = n.emoji;
66998
+ if (n.url) out.emoji_url = n.url;
66999
+ }
66079
67000
  if (n.noteId) {
66080
67001
  const s = api.store.getStatuses().find((x) => x.noteId === n.noteId);
66081
67002
  if (s) out.status = api.status(s);
@@ -66120,7 +67041,6 @@ var STUBS = new Map(Object.entries({
66120
67041
  "/api/v1/custom_emojis": [],
66121
67042
  "/api/v1/announcements": [],
66122
67043
  "/api/v1/instance/peers": [],
66123
- "/api/v1/trends/tags": [],
66124
67044
  "/api/v1/trends/links": [],
66125
67045
  "/api/v2/suggestions": [],
66126
67046
  "/api/v1/preferences": {}
@@ -66157,14 +67077,15 @@ function instanceTitle(api) {
66157
67077
  const cfg = api.store.getConfig();
66158
67078
  return cfg?.handle ? `@${cfg.handle}@${api.host}` : "FediPod";
66159
67079
  }
66160
- function tagObject(api, name, following, req) {
67080
+ function tagObject(api, name, following, req, history = []) {
66161
67081
  const host = req?.headers?.host || api.host;
66162
- return { name, url: `https://${host}/tags/${name}`, history: [], following: !!following };
67082
+ return { name, url: `https://${host}/tags/${name}`, history, following: !!following };
66163
67083
  }
66164
67084
  function instanceBlurb(api) {
66165
67085
  const kind = api.store.getConfig()?.kind === "group" ? "group" : "actor";
66166
67086
  return `Solid pod ActivityPub ${kind}`;
66167
67087
  }
67088
+ var API_VERSIONS = { mastodon: 7 };
66168
67089
  async function handle2(api, ctx) {
66169
67090
  const { req, res, pathname, url, send } = ctx;
66170
67091
  if (pathname === "/api/v1/instance") {
@@ -66176,6 +67097,7 @@ async function handle2(api, ctx) {
66176
67097
  description: api.instanceBlurb(),
66177
67098
  email: "",
66178
67099
  version: "4.2.0 (compatible; fedipod)",
67100
+ api_versions: API_VERSIONS,
66179
67101
  urls: su ? { streaming_api: su } : {},
66180
67102
  stats: { user_count: 1, status_count: api.store.countStatuses(), domain_count: 1 },
66181
67103
  languages: ["en"],
@@ -66193,6 +67115,7 @@ async function handle2(api, ctx) {
66193
67115
  domain: api.host,
66194
67116
  title: api.instanceTitle(),
66195
67117
  version: "4.2.0 (compatible; fedipod)",
67118
+ api_versions: API_VERSIONS,
66196
67119
  source_url: "https://github.com/jeff-zucker/FediPod",
66197
67120
  description: api.instanceBlurb(),
66198
67121
  usage: { users: { active_month: 1 } },
@@ -66220,124 +67143,15 @@ async function handle2(api, ctx) {
66220
67143
  // lib/client/masto/accounts.mjs
66221
67144
  var accounts_exports = {};
66222
67145
  __export(accounts_exports, {
66223
- handle: () => handle4
67146
+ handle: () => handle3
66224
67147
  });
66225
67148
  init_node_crypto();
66226
67149
 
66227
67150
  // lib/pod/media.mjs
66228
67151
  var write6 = (pod, url, bytes, contentType) => pod.put(url, bytes, contentType);
66229
67152
 
66230
- // lib/client/masto/media.mjs
66231
- var media_exports = {};
66232
- __export(media_exports, {
66233
- attachmentType: () => attachmentType,
66234
- extensionFor: () => extensionFor,
66235
- handle: () => handle3,
66236
- readMultipart: () => readMultipart
66237
- });
66238
- init_node_crypto();
66239
- var ATTACHMENT_KINDS = /* @__PURE__ */ new Set(["image", "video", "audio"]);
66240
- var NEVER = /* @__PURE__ */ new Set(["image/svg+xml", "image/svg"]);
66241
- var OPAQUE = "application/octet-stream";
66242
- function attachmentType(claimed) {
66243
- const t = String(claimed || "").split(";")[0].trim().toLowerCase();
66244
- if (!/^[a-z0-9.+-]+\/[a-z0-9.+-]+$/.test(t) || NEVER.has(t)) return OPAQUE;
66245
- return ATTACHMENT_KINDS.has(t.split("/")[0]) ? t : OPAQUE;
66246
- }
66247
- function extensionFor(mediaType, filename = "") {
66248
- if (mediaType === OPAQUE) return "bin";
66249
- const sub = mediaType.split("/")[1].replace(/[^a-z0-9]/g, "");
66250
- const given = String(filename || "").includes(".") ? filename.split(".").pop().toLowerCase().replace(/[^a-z0-9]/g, "") : "";
66251
- return given && (given === sub || sub.startsWith(given) || given.startsWith(sub)) ? given : sub || "bin";
66252
- }
66253
- function readMultipart(req, limit = 12e6) {
66254
- return new Promise((resolve2, reject) => {
66255
- const chunks = [];
66256
- let n = 0;
66257
- req.on("data", (c) => {
66258
- n += c.length;
66259
- if (n > limit) {
66260
- reject(new Error("upload too large"));
66261
- req.destroy();
66262
- return;
66263
- }
66264
- chunks.push(c);
66265
- });
66266
- req.on("error", reject);
66267
- req.on("end", () => {
66268
- try {
66269
- const m = /boundary=(?:"([^"]+)"|([^;]+))/.exec(String(req.headers["content-type"] || ""));
66270
- if (!m) return resolve2({ fields: {}, file: null });
66271
- const buf = Buffer.concat(chunks);
66272
- const boundary = Buffer.from("--" + (m[1] || m[2]).trim());
66273
- const fields = {};
66274
- const files = {};
66275
- let file = null;
66276
- let i = buf.indexOf(boundary);
66277
- while (i >= 0) {
66278
- const start = i + boundary.length;
66279
- if (buf.slice(start, start + 2).toString() === "--") break;
66280
- const next = buf.indexOf(boundary, start);
66281
- if (next < 0) break;
66282
- const part = buf.slice(start + 2, next - 2);
66283
- const sep = part.indexOf("\r\n\r\n");
66284
- if (sep >= 0) {
66285
- const head = part.slice(0, sep).toString();
66286
- const body = part.slice(sep + 4);
66287
- const name = /name="([^"]*)"/.exec(head)?.[1];
66288
- const filename = /filename="([^"]*)"/.exec(head)?.[1];
66289
- if (filename !== void 0) {
66290
- file = {
66291
- filename,
66292
- contentType: /content-type:\s*([^\r\n]+)/i.exec(head)?.[1]?.trim() || "application/octet-stream",
66293
- data: body
66294
- };
66295
- if (name) files[name] = file;
66296
- } else if (name) fields[name] = body.toString();
66297
- }
66298
- i = next;
66299
- }
66300
- resolve2({ fields, file, files });
66301
- } catch (e) {
66302
- reject(e);
66303
- }
66304
- });
66305
- });
66306
- }
66307
- async function handle3(api, ctx) {
66308
- const { req, res, pathname, url, send } = ctx;
66309
- if ((pathname === "/api/v2/media" || pathname === "/api/v1/media") && req.method === "POST") {
66310
- const { fields, file } = await readMultipart(req);
66311
- if (!file?.data?.length) return send(422, { error: "file required" });
66312
- const mediaType = attachmentType(file.contentType);
66313
- const ext = extensionFor(mediaType, file.filename);
66314
- const slug = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) + "-" + node_crypto_default.randomBytes(4).toString("hex") + "." + ext;
66315
- const mediaUrl = api.urls.media + slug;
66316
- await api.agent.publisher.ensureMediaContainer();
66317
- await write6(api.agent.remote, mediaUrl, file.data, mediaType);
66318
- const entry = { url: mediaUrl, mediaType, description: fields.description || "" };
66319
- const id = api.store.idFor(mediaUrl);
66320
- api.store.setMedia(id, entry);
66321
- return send(200, api.mediaJson({ id, ...entry }));
66322
- }
66323
- const mMedia = /^\/api\/v1\/media\/([a-f0-9]+)$/.exec(pathname);
66324
- if (mMedia) {
66325
- const entry = api.store.getMedia()[mMedia[1]];
66326
- if (!entry) return send(404, { error: "Record not found" });
66327
- if (req.method === "PUT") {
66328
- const body = await readBody2(req);
66329
- if (typeof body.description === "string") {
66330
- entry.description = body.description;
66331
- api.store.setMedia(mMedia[1], entry);
66332
- }
66333
- }
66334
- return send(200, api.mediaJson({ id: mMedia[1], ...entry }));
66335
- }
66336
- return false;
66337
- }
66338
-
66339
67153
  // lib/client/masto/accounts.mjs
66340
- async function handle4(api, ctx) {
67154
+ async function handle3(api, ctx) {
66341
67155
  const { req, res, pathname, url, send } = ctx;
66342
67156
  if (pathname === "/api/v1/accounts/verify_credentials") {
66343
67157
  const cfg0 = api.store.getConfig() || {};
@@ -66516,6 +67330,31 @@ async function handle4(api, ctx) {
66516
67330
  }
66517
67331
  }
66518
67332
  if (/^\/api\/v1\/accounts\/[a-f0-9]+\/featured_tags$/.test(pathname)) return send(200, []);
67333
+ if (pathname === "/api/v1/directory") return send(200, api.urls?.actor ? [api.account(api.urls.actor)] : []);
67334
+ if (pathname === "/api/v1/suggestions") return send(200, []);
67335
+ const mAccLists = /^\/api\/v1\/accounts\/([a-f0-9]+)\/lists$/.exec(pathname);
67336
+ if (mAccLists && req.method === "GET") {
67337
+ const actorUrl = api.store.urlFor(mAccLists[1]);
67338
+ if (!actorUrl) return send(404, { error: "Record not found" });
67339
+ return send(200, api.store.getLists().filter((l) => (l.members || []).includes(actorUrl)).map((l) => ({ id: l.id, title: l.title, replies_policy: l.repliesPolicy || "list", exclusive: false })));
67340
+ }
67341
+ if (pathname === "/api/v1/mutes" && req.method === "GET") {
67342
+ return send(200, (api.store.getMuted().actors || []).map((a) => api.account(a)));
67343
+ }
67344
+ if (pathname === "/api/v1/blocks" && req.method === "GET") {
67345
+ return send(200, (api.store.getBlocklist().actors || []).map((a) => api.account(a)));
67346
+ }
67347
+ if (pathname === "/api/v1/domain_blocks") {
67348
+ const b = api.store.getBlocklist();
67349
+ if (req.method === "GET") return send(200, [...b.domains]);
67350
+ const body = await readBody2(req);
67351
+ const domain = String(body.domain || url.searchParams.get("domain") || "").trim().toLowerCase();
67352
+ if (!/^[a-z0-9.-]+\.[a-z]{2,}$/u.test(domain)) return send(422, { error: "a domain is required" });
67353
+ if (req.method === "POST" && !b.domains.includes(domain)) b.domains.push(domain);
67354
+ if (req.method === "DELETE") b.domains = b.domains.filter((d) => d !== domain);
67355
+ api.store.setBlocklist(b);
67356
+ return send(200, {});
67357
+ }
66519
67358
  const mAccList = /^\/api\/v1\/accounts\/([a-f0-9]+)\/(following|followers)$/.exec(pathname);
66520
67359
  if (mAccList && req.method === "GET") {
66521
67360
  const actorUrl = api.store.urlFor(mAccList[1]);
@@ -66538,9 +67377,13 @@ async function handle4(api, ctx) {
66538
67377
  if (mAccStatuses) {
66539
67378
  const actorUrl = api.store.urlFor(mAccStatuses[1]);
66540
67379
  const all = api.store.getStatuses();
66541
- const pinnedOnly = url.searchParams.get("pinned") === "true";
67380
+ const q = url.searchParams;
67381
+ const is = (name) => q.get(name) === "true" || q.get(name) === "1";
67382
+ const pinnedOnly = is("pinned");
67383
+ const tagged = String(q.get("tagged") || "").replace(/^#/, "").toLowerCase();
67384
+ const isBoost = (s) => !!s.via && s.via !== s.actor;
66542
67385
  const { items, headers } = api.page(
66543
- all.filter((s) => s.actor === actorUrl && (!pinnedOnly || s.pinned)),
67386
+ all.filter((s) => s.actor === actorUrl && (!pinnedOnly || s.pinned)).filter((s) => !is("exclude_replies") || !s.inReplyTo).filter((s) => !is("exclude_reblogs") || !isBoost(s)).filter((s) => !is("only_media") || (s.attachments || []).length > 0).filter((s) => !tagged || (s.tags || []).some((t) => String(t.name).toLowerCase() === tagged)),
66544
67387
  url
66545
67388
  );
66546
67389
  return send(200, items.map((s) => api.statusOrBoost(s, { all })), headers);
@@ -66551,11 +67394,11 @@ async function handle4(api, ctx) {
66551
67394
  // lib/client/masto/timelines.mjs
66552
67395
  var timelines_exports = {};
66553
67396
  __export(timelines_exports, {
66554
- handle: () => handle5
67397
+ handle: () => handle4
66555
67398
  });
66556
67399
  init_node_crypto();
66557
67400
  init_wire();
66558
- async function handle5(api, ctx) {
67401
+ async function handle4(api, ctx) {
66559
67402
  const { req, res, pathname, url, send } = ctx;
66560
67403
  if (pathname === "/api/v1/timelines/home" || pathname === "/api/v1/timelines/public" || pathname === "/api/v1/trends/statuses") {
66561
67404
  const localOnly = pathname === "/api/v1/timelines/public" && url.searchParams.get("local") === "true";
@@ -66586,6 +67429,41 @@ async function handle5(api, ctx) {
66586
67429
  const following = (api.agent.tagfeed?.config().tags || []).includes(name);
66587
67430
  return send(200, api.tagObject(name, following, req));
66588
67431
  }
67432
+ if (pathname === "/api/v1/trends/tags" || pathname === "/api/v1/trends") {
67433
+ const DAY = 864e5;
67434
+ const today = Math.floor(Date.now() / DAY) * DAY;
67435
+ const seen = /* @__PURE__ */ new Map();
67436
+ for (const st2 of api.store.getStatuses()) {
67437
+ if (st2.kind !== "tag" || !st2.tag) continue;
67438
+ const at = Date.parse(st2.published || "");
67439
+ if (!Number.isFinite(at) || at < today - 6 * DAY) continue;
67440
+ const day = Math.floor(at / DAY) * DAY;
67441
+ if (!seen.has(st2.tag)) seen.set(st2.tag, /* @__PURE__ */ new Map());
67442
+ const days = seen.get(st2.tag);
67443
+ if (!days.has(day)) days.set(day, { uses: 0, accounts: /* @__PURE__ */ new Set() });
67444
+ const rec = days.get(day);
67445
+ rec.uses++;
67446
+ if (st2.actor) rec.accounts.add(st2.actor);
67447
+ }
67448
+ const followed = new Set(api.agent.tagfeed?.config().tags || []);
67449
+ const ranked = [...seen.entries()].map(([name, days]) => {
67450
+ const history = [];
67451
+ for (let i = 0; i < 7; i++) {
67452
+ const rec = days.get(today - i * DAY);
67453
+ history.push({
67454
+ day: String(Math.floor((today - i * DAY) / 1e3)),
67455
+ uses: String(rec ? rec.uses : 0),
67456
+ accounts: String(rec ? rec.accounts.size : 0)
67457
+ });
67458
+ }
67459
+ return {
67460
+ total: history.reduce((n, h) => n + Number(h.uses), 0),
67461
+ tag: api.tagObject(name, followed.has(name), req, history)
67462
+ };
67463
+ }).sort((a, b) => b.total - a.total);
67464
+ const limit = Math.min(Math.max(Number(url.searchParams.get("limit")) || 10, 1), 40);
67465
+ return send(200, ranked.slice(0, limit).map((x) => x.tag));
67466
+ }
66589
67467
  const mTagTl = pathname.match(/^\/api\/v1\/timelines\/tag\/([^/]+)$/);
66590
67468
  if (mTagTl && req.method === "GET") {
66591
67469
  const name = decodeURIComponent(mTagTl[1]).replace(/^#/, "").toLowerCase();
@@ -66722,7 +67600,81 @@ async function handle5(api, ctx) {
66722
67600
  last_status: api.status(c.last, { all })
66723
67601
  })));
66724
67602
  }
67603
+ if (pathname === "/api/v1/timelines/direct" && req.method === "GET") {
67604
+ const all = api.store.getStatuses();
67605
+ const items = all.filter((s) => s.direct || s.visibility === "direct");
67606
+ const { items: page2, headers } = api.page(items, url);
67607
+ return send(200, page2.map((s) => api.status(s, { all })), headers);
67608
+ }
67609
+ if (pathname === "/api/v1/notifications/clear" && req.method === "POST") {
67610
+ api.store.removeNotifications(() => true);
67611
+ return send(200, {});
67612
+ }
67613
+ const mNotif = /^\/api\/v1\/notifications\/([A-Za-z0-9_-]+)(\/dismiss)?$/.exec(pathname);
67614
+ if (mNotif) {
67615
+ const n = api.store.getNotifications().find((x) => x.id === mNotif[1]);
67616
+ if (!n) return send(404, { error: "Record not found" });
67617
+ if (mNotif[2] && req.method === "POST") {
67618
+ api.store.removeNotifications((x) => x.id === n.id);
67619
+ return send(200, {});
67620
+ }
67621
+ if (!mNotif[2] && req.method === "GET") return send(200, api.notification(n));
67622
+ }
67623
+ const mGroup = /^\/api\/v2\/notifications\/([A-Za-z0-9_-]+)(\/accounts|\/dismiss)?$/.exec(pathname);
67624
+ if (mGroup) {
67625
+ const n = api.store.getNotifications().find((x) => x.id === mGroup[1]);
67626
+ if (!n) return send(404, { error: "Record not found" });
67627
+ if (mGroup[2] === "/dismiss" && req.method === "POST") {
67628
+ api.store.removeNotifications((x) => x.id === n.id);
67629
+ return send(200, {});
67630
+ }
67631
+ if (mGroup[2] === "/accounts" && req.method === "GET") return send(200, [api.account(n.actor)]);
67632
+ if (!mGroup[2] && req.method === "GET") return send(200, groupedNotifications(api, [n]));
67633
+ }
67634
+ if (pathname === "/api/v2/notifications") {
67635
+ const { page: page2, headers } = notificationPage(api, ctx);
67636
+ return send(200, groupedNotifications(api, page2), headers);
67637
+ }
66725
67638
  if (pathname === "/api/v1/notifications") {
67639
+ const { page: page2, headers } = notificationPage(api, ctx);
67640
+ return send(200, page2.map((n) => api.notification(n)), headers);
67641
+ }
67642
+ if (pathname === "/api/v2/search" || pathname === "/api/v1/search") {
67643
+ return searchHandler(api, ctx);
67644
+ }
67645
+ return false;
67646
+ }
67647
+ function groupedNotifications(api, page2) {
67648
+ const accounts = /* @__PURE__ */ new Map();
67649
+ const statuses = /* @__PURE__ */ new Map();
67650
+ const groups = page2.map((n) => {
67651
+ const acct = api.account(n.actor);
67652
+ accounts.set(acct.id, acct);
67653
+ const s = n.noteId && api.store.getStatuses().find((x) => x.noteId === n.noteId);
67654
+ let statusId = null;
67655
+ if (s) {
67656
+ const j = api.status(s);
67657
+ statuses.set(j.id, j);
67658
+ statusId = j.id;
67659
+ }
67660
+ return {
67661
+ group_key: n.id,
67662
+ notifications_count: 1,
67663
+ type: api.notificationType(n.type),
67664
+ most_recent_notification_id: n.id,
67665
+ page_min_id: n.id,
67666
+ page_max_id: n.id,
67667
+ latest_page_notification_at: n.at,
67668
+ sample_account_ids: [acct.id],
67669
+ ...statusId ? { status_id: statusId } : {},
67670
+ ...n.type === "reaction" ? { emoji: n.emoji, ...n.url ? { emoji_url: n.url } : {} } : {}
67671
+ };
67672
+ });
67673
+ return { accounts: [...accounts.values()], statuses: [...statuses.values()], notification_groups: groups };
67674
+ }
67675
+ function notificationPage(api, ctx) {
67676
+ const { req, pathname, url } = ctx;
67677
+ {
66726
67678
  const limit = Math.min(Number(url.searchParams.get("limit")) || 30, 60);
66727
67679
  const q = url.searchParams;
66728
67680
  let items = api.store.getNotifications();
@@ -66753,13 +67705,16 @@ async function handle5(api, ctx) {
66753
67705
  for (const [k, v] of Object.entries(params)) u.searchParams.set(k, v);
66754
67706
  return u.href;
66755
67707
  };
66756
- return send(200, page2.map((n) => api.notification(n)), {
67708
+ return { page: page2, headers: {
66757
67709
  link: `<${link({ max_id: page2[page2.length - 1].id })}>; rel="next", <${link({ min_id: page2[0].id })}>; rel="prev"`
66758
- });
67710
+ } };
66759
67711
  }
66760
- return send(200, []);
67712
+ return { page: [], headers: void 0 };
66761
67713
  }
66762
- if (pathname === "/api/v2/search" || pathname === "/api/v1/search") {
67714
+ }
67715
+ async function searchHandler(api, ctx) {
67716
+ const { req, res, pathname, url, send } = ctx;
67717
+ {
66763
67718
  const q = String(url.searchParams.get("q") || "").trim();
66764
67719
  const type = url.searchParams.get("type");
66765
67720
  const out = { accounts: [], statuses: [], hashtags: [] };
@@ -66806,10 +67761,10 @@ async function handle5(api, ctx) {
66806
67761
  // lib/client/masto/statuses.mjs
66807
67762
  var statuses_exports = {};
66808
67763
  __export(statuses_exports, {
66809
- handle: () => handle6
67764
+ handle: () => handle5
66810
67765
  });
66811
67766
  init_node_crypto();
66812
- async function handle6(api, ctx) {
67767
+ async function handle5(api, ctx) {
66813
67768
  const { req, res, pathname, url, send } = ctx;
66814
67769
  if (pathname === "/api/v1/statuses" && req.method === "POST") {
66815
67770
  const body = await readBody2(req);
@@ -66832,8 +67787,22 @@ async function handle6(api, ctx) {
66832
67787
  const mediaIds = [].concat(body.media_ids || body["media_ids[]"] || []).filter(Boolean);
66833
67788
  const media = api.store.getMedia();
66834
67789
  const attachments = mediaIds.map((id) => media[id] && { id, ...media[id] }).filter(Boolean);
67790
+ let quote = null;
67791
+ if (body.quoted_status_id) {
67792
+ const quotedUrl = api.store.urlFor(String(body.quoted_status_id));
67793
+ const quoted = quotedUrl && api.store.getStatuses().find((x) => x.noteId === quotedUrl);
67794
+ if (!quoted) return send(404, { error: "Record not found" });
67795
+ if (["bsky", "acct"].includes(quoted.kind)) return send(422, { error: "that post cannot be quoted from this account" });
67796
+ if (visibility === "private" || visibility === "direct") return send(422, { error: "a quote post is public or unlisted" });
67797
+ const may = api.quoteApproval(quoted).current_user;
67798
+ if (may === "denied") return send(422, { error: "the author of that post does not allow quotes" });
67799
+ if (may === "unknown") return send(422, { error: "the author of that post has not said whether it may be quoted" });
67800
+ if (body.scheduled_at) return send(422, { error: "a quote cannot be scheduled" });
67801
+ quote = { id: quoted.noteId, actor: quoted.actor };
67802
+ }
66835
67803
  const asking = pollParams(body);
66836
67804
  if (asking) {
67805
+ if (quote) return send(422, { error: "a poll cannot quote a post" });
66837
67806
  if (attachments.length) return send(422, { error: "a poll cannot carry media" });
66838
67807
  if (body.scheduled_at) return send(422, { error: "a poll cannot be scheduled" });
66839
67808
  if (asking.options.length < 2) return send(422, { error: "a poll needs at least two options" });
@@ -66889,7 +67858,7 @@ async function handle6(api, ctx) {
66889
67858
  try {
66890
67859
  note = await api.agent.publisher.publishNote(
66891
67860
  body.status,
66892
- { inReplyTo, attachments, visibility, spoilerText, sensitive }
67861
+ { inReplyTo, attachments, visibility, spoilerText, sensitive, quote }
66893
67862
  );
66894
67863
  } catch (e) {
66895
67864
  if (e.code === "unaddressed") return send(422, { error: e.message });
@@ -66898,6 +67867,9 @@ async function handle6(api, ctx) {
66898
67867
  const s = api.store.getStatuses().find((x) => x.noteId === note.id);
66899
67868
  return send(200, api.status(s));
66900
67869
  }
67870
+ if (/^\/api\/v1\/statuses\/[a-f0-9]+\/interaction_policy$/.test(pathname) && req.method === "PUT") {
67871
+ return send(422, { error: "the quote policy is the same for every post here: anyone may quote a public or unlisted post, nobody a followers-only or direct one" });
67872
+ }
66901
67873
  const mSource = /^\/api\/v1\/statuses\/([a-f0-9]+)\/source$/.exec(pathname);
66902
67874
  if (mSource && req.method === "GET") {
66903
67875
  const noteUrl = api.store.urlFor(mSource[1]);
@@ -67106,6 +68078,60 @@ async function handle6(api, ctx) {
67106
68078
  return false;
67107
68079
  }
67108
68080
 
68081
+ // lib/client/masto/media.mjs
68082
+ var media_exports2 = {};
68083
+ __export(media_exports2, {
68084
+ attachmentType: () => attachmentType,
68085
+ extensionFor: () => extensionFor,
68086
+ handle: () => handle6
68087
+ });
68088
+ init_node_crypto();
68089
+ var ATTACHMENT_KINDS = /* @__PURE__ */ new Set(["image", "video", "audio"]);
68090
+ var NEVER = /* @__PURE__ */ new Set(["image/svg+xml", "image/svg"]);
68091
+ var OPAQUE = "application/octet-stream";
68092
+ function attachmentType(claimed) {
68093
+ const t = String(claimed || "").split(";")[0].trim().toLowerCase();
68094
+ if (!/^[a-z0-9.+-]+\/[a-z0-9.+-]+$/.test(t) || NEVER.has(t)) return OPAQUE;
68095
+ return ATTACHMENT_KINDS.has(t.split("/")[0]) ? t : OPAQUE;
68096
+ }
68097
+ function extensionFor(mediaType, filename = "") {
68098
+ if (mediaType === OPAQUE) return "bin";
68099
+ const sub = mediaType.split("/")[1].replace(/[^a-z0-9]/g, "");
68100
+ const given = String(filename || "").includes(".") ? filename.split(".").pop().toLowerCase().replace(/[^a-z0-9]/g, "") : "";
68101
+ return given && (given === sub || sub.startsWith(given) || given.startsWith(sub)) ? given : sub || "bin";
68102
+ }
68103
+ async function handle6(api, ctx) {
68104
+ const { req, res, pathname, url, send } = ctx;
68105
+ if ((pathname === "/api/v2/media" || pathname === "/api/v1/media") && req.method === "POST") {
68106
+ const { fields, file } = await readMultipart(req);
68107
+ if (!file?.data?.length) return send(422, { error: "file required" });
68108
+ const mediaType = attachmentType(file.contentType);
68109
+ const ext = extensionFor(mediaType, file.filename);
68110
+ const slug = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) + "-" + node_crypto_default.randomBytes(4).toString("hex") + "." + ext;
68111
+ const mediaUrl = api.urls.media + slug;
68112
+ await api.agent.publisher.ensureMediaContainer();
68113
+ await write6(api.agent.remote, mediaUrl, file.data, mediaType);
68114
+ const entry = { url: mediaUrl, mediaType, description: fields.description || "" };
68115
+ const id = api.store.idFor(mediaUrl);
68116
+ api.store.setMedia(id, entry);
68117
+ return send(200, api.mediaJson({ id, ...entry }));
68118
+ }
68119
+ const mMedia = /^\/api\/v1\/media\/([a-f0-9]+)$/.exec(pathname);
68120
+ if (mMedia) {
68121
+ const entry = api.store.getMedia()[mMedia[1]];
68122
+ if (!entry) return send(404, { error: "Record not found" });
68123
+ if (req.method === "PUT") {
68124
+ const body = await readBody2(req);
68125
+ if (typeof body.description === "string") {
68126
+ entry.description = body.description;
68127
+ api.store.setMedia(mMedia[1], entry);
68128
+ }
68129
+ }
68130
+ return send(200, api.mediaJson({ id: mMedia[1], ...entry }));
68131
+ }
68132
+ return false;
68133
+ }
68134
+
67109
68135
  // lib/client/masto/index.mjs
67110
68136
  var MastoApi = class _MastoApi {
67111
68137
  constructor({
@@ -67114,6 +68140,7 @@ var MastoApi = class _MastoApi {
67114
68140
  allowed = null,
67115
68141
  scheme = null,
67116
68142
  embedded = false,
68143
+ throughDoor = null,
67117
68144
  mount = "",
67118
68145
  streaming = true,
67119
68146
  webPush = true,
@@ -67124,6 +68151,7 @@ var MastoApi = class _MastoApi {
67124
68151
  this.embedded = embedded;
67125
68152
  this.log = log2;
67126
68153
  this.allowed = allowed;
68154
+ this.throughDoor = throughDoor;
67127
68155
  this.scheme = scheme;
67128
68156
  this.streaming = streaming;
67129
68157
  this.webPush = webPush;
@@ -67202,7 +68230,7 @@ var MastoApi = class _MastoApi {
67202
68230
  const took = await this.agent.requestTakeover?.();
67203
68231
  if (!took) return send(503, { error: "another agent is active for this pod \u2014 takeover failed, try again" });
67204
68232
  }
67205
- for (const area of [accounts_exports, timelines_exports, statuses_exports, media_exports]) {
68233
+ for (const area of [accounts_exports, timelines_exports, statuses_exports, media_exports2]) {
67206
68234
  if (await area.handle(this, ctx)) return true;
67207
68235
  }
67208
68236
  this.log(`mastoapi: unhandled ${req.method} ${pathname} \u2014 punch list`);
@@ -67273,6 +68301,9 @@ var MastoApi = class _MastoApi {
67273
68301
  status(...a) {
67274
68302
  return status(this, ...a);
67275
68303
  }
68304
+ quoteApproval(...a) {
68305
+ return quoteApproval(this, ...a);
68306
+ }
67276
68307
  filtersFor(...a) {
67277
68308
  return filtersFor(this, ...a);
67278
68309
  }
@@ -67322,11 +68353,32 @@ var MastoApi = class _MastoApi {
67322
68353
  var MAX_TIMELINE_BYTES = 2 * 1024 * 1024;
67323
68354
  var DEFAULTS2 = {
67324
68355
  instance: "https://mastodon.social",
67325
- tags: ["solidproject", "linkeddata", "rdf"],
68356
+ tags: [
68357
+ "fediverse",
68358
+ "activitypub",
68359
+ // the network this account is on
68360
+ "opensource",
68361
+ "foss",
68362
+ // how the software gets made
68363
+ "solidproject",
68364
+ "linkeddata",
68365
+ // where the data lives
68366
+ "privacy",
68367
+ "digitalrights",
68368
+ // what is at stake
68369
+ "indieweb",
68370
+ "smallweb",
68371
+ // publishing for yourself
68372
+ "commons",
68373
+ "platformcooperativism"
68374
+ // owning it together
68375
+ ],
67326
68376
  intervalMin: 15
67327
68377
  };
67328
68378
  var PER_TAG = 20;
67329
- var MAX_NEW_PER_SWEEP = 12;
68379
+ var MAX_NEW_PER_SWEEP = 8;
68380
+ var MAX_NEW_PER_TAG = 2;
68381
+ var TAGS_PER_SWEEP = 4;
67330
68382
  var MAX_TAG_ENTRIES = 200;
67331
68383
  var BACKOFF_MIN_MS2 = 15 * 6e4;
67332
68384
  var BACKOFF_MAX_MS2 = 6 * 60 * 6e4;
@@ -67336,6 +68388,7 @@ var TagFeed = class {
67336
68388
  Object.assign(this, { store, intake, log: log2, fetcher: fetcher2 });
67337
68389
  this.lastSweep = null;
67338
68390
  this.lastAdded = 0;
68391
+ this.cursor = 0;
67339
68392
  }
67340
68393
  config() {
67341
68394
  return { ...DEFAULTS2, ...this.store.read("tagfeed.json", {}) };
@@ -67393,9 +68446,13 @@ var TagFeed = class {
67393
68446
  const known2 = new Set(this.store.getStatuses().map((s) => s.noteId));
67394
68447
  let budget = MAX_NEW_PER_SWEEP;
67395
68448
  let added = 0;
68449
+ const start = this.cursor % tags.length;
68450
+ this.cursor = (start + TAGS_PER_SWEEP) % tags.length;
68451
+ const order = [...tags, ...tags].slice(start, start + Math.min(TAGS_PER_SWEEP, tags.length));
67396
68452
  this.store.hold?.();
67397
68453
  try {
67398
- for (const tag of tags) {
68454
+ for (const tag of order) {
68455
+ let perTag = MAX_NEW_PER_TAG;
67399
68456
  let list3;
67400
68457
  try {
67401
68458
  const { safeFetch: safeFetch2, retryAfterMs: retryAfterMs3, readCapped: readCapped3 } = await Promise.resolve().then(() => (init_safefetch(), safefetch_exports));
@@ -67415,7 +68472,9 @@ var TagFeed = class {
67415
68472
  for (const st2 of Array.isArray(list3) ? list3 : []) {
67416
68473
  const noteId = st2?.uri;
67417
68474
  if (!noteId || known2.has(noteId) || this.store.isBlocked(noteId)) continue;
67418
- if (budget-- <= 0) break;
68475
+ if (perTag <= 0 || budget <= 0) break;
68476
+ perTag--;
68477
+ budget--;
67419
68478
  const note = await this.intake.fetchAP(noteId).catch(() => null);
67420
68479
  if (!note || note.id !== noteId || !isContentType(note.type)) continue;
67421
68480
  const author = authorOf(note);
@@ -67439,6 +68498,7 @@ var TagFeed = class {
67439
68498
  known2.add(noteId);
67440
68499
  added++;
67441
68500
  }
68501
+ if (budget <= 0) break;
67442
68502
  }
67443
68503
  const all = this.store.getStatuses();
67444
68504
  const tagged = all.filter((s) => s.kind === "tag");
@@ -67450,7 +68510,7 @@ var TagFeed = class {
67450
68510
  this.store.release?.();
67451
68511
  }
67452
68512
  this.lastAdded = added;
67453
- if (added) this.log(`tagfeed: +${added} from #${tags.join(" #")}`);
68513
+ if (added) this.log(`tagfeed: +${added} from #${order.join(" #")}`);
67454
68514
  }
67455
68515
  };
67456
68516
 
@@ -67743,7 +68803,7 @@ var PodTransport = class {
67743
68803
  // leaves the private trees world-readable. $rdf.sym() also throws on an
67744
68804
  // illegal IRI, so a pod URL with something odd in it fails here rather than
67745
68805
  // silently producing a document that means something else.
67746
- aclDoc(targetUrl, publicModes, { appendAgents = [], aclUrl = null } = {}) {
68806
+ aclDoc(targetUrl, publicModes, { appendAgents = [], readAgents = [], aclUrl = null } = {}) {
67747
68807
  const url = aclUrl || targetUrl + ".acl";
67748
68808
  const doc = namedNode2(url);
67749
68809
  const target = namedNode2(targetUrl);
@@ -67759,6 +68819,7 @@ var PodTransport = class {
67759
68819
  authorize(namedNode2(url + "#public"), ACL("agentClass"), FOAF("Agent"), publicModes);
67760
68820
  }
67761
68821
  appendAgents.forEach((webId, i) => authorize(namedNode2(url + `#gw${i}`), ACL("agent"), namedNode2(webId), ["Append"]));
68822
+ readAgents.forEach((webId, i) => authorize(namedNode2(url + `#r${i}`), ACL("agent"), namedNode2(webId), ["Read"]));
67762
68823
  authorize(
67763
68824
  namedNode2(url + "#owner"),
67764
68825
  ACL("agent"),
@@ -67948,61 +69009,6 @@ var BrowserRemotePod = class extends PodTransport {
67948
69009
  }
67949
69010
  };
67950
69011
 
67951
- // web/app/idb-kv.mjs
67952
- var DB = "fedipod-accounts";
67953
- function open() {
67954
- return new Promise((res, rej) => {
67955
- const r = indexedDB.open(DB, 1);
67956
- r.onupgradeneeded = () => {
67957
- const db = r.result;
67958
- if (!db.objectStoreNames.contains("kv")) db.createObjectStore("kv");
67959
- };
67960
- r.onsuccess = () => res(r.result);
67961
- r.onerror = () => rej(r.error);
67962
- });
67963
- }
67964
- async function kvGet(key) {
67965
- const db = await open();
67966
- return new Promise((res, rej) => {
67967
- const rq = db.transaction("kv", "readonly").objectStore("kv").get(key);
67968
- rq.onsuccess = () => res(rq.result ?? null);
67969
- rq.onerror = () => rej(rq.error);
67970
- });
67971
- }
67972
- async function kvAll() {
67973
- const db = await open();
67974
- return new Promise((res, rej) => {
67975
- const out = {};
67976
- const cur = db.transaction("kv", "readonly").objectStore("kv").openCursor();
67977
- cur.onsuccess = () => {
67978
- const c = cur.result;
67979
- if (c) {
67980
- out[c.key] = c.value;
67981
- c.continue();
67982
- } else res(out);
67983
- };
67984
- cur.onerror = () => rej(cur.error);
67985
- });
67986
- }
67987
- async function kvPut(key, val) {
67988
- const db = await open();
67989
- return new Promise((res, rej) => {
67990
- const tx = db.transaction("kv", "readwrite");
67991
- tx.objectStore("kv").put(val, key);
67992
- tx.oncomplete = () => res();
67993
- tx.onerror = () => rej(tx.error);
67994
- });
67995
- }
67996
- async function kvDel(key) {
67997
- const db = await open();
67998
- return new Promise((res, rej) => {
67999
- const tx = db.transaction("kv", "readwrite");
68000
- tx.objectStore("kv").delete(key);
68001
- tx.oncomplete = () => res();
68002
- tx.onerror = () => rej(tx.error);
68003
- });
68004
- }
68005
-
68006
69012
  // web/app/keystore.mjs
68007
69013
  var PEM = (der, label) => {
68008
69014
  const b642 = btoa(String.fromCharCode(...new Uint8Array(der)));
@@ -68921,6 +69927,7 @@ var ADMIN_PATHS = /* @__PURE__ */ new Set([
68921
69927
  "/log",
68922
69928
  "/fediacct",
68923
69929
  "/describe",
69930
+ "/follow",
68924
69931
  "/atproto",
68925
69932
  "/atproto/connect",
68926
69933
  "/atproto/disconnect",
@@ -68930,6 +69937,7 @@ var ADMIN_PATHS = /* @__PURE__ */ new Set([
68930
69937
  "/inbox/prune",
68931
69938
  "/park",
68932
69939
  "/revive",
69940
+ "/takeover",
68933
69941
  "/fediacct/connect",
68934
69942
  "/fediacct/disconnect",
68935
69943
  "/fediacct/callback"
@@ -69155,6 +70163,29 @@ var AdminFacade = class {
69155
70163
  await a.publisher.publishProfile();
69156
70164
  return json2(200, { ok: true, summary: cfg.summary || null, icon: cfg.icon || null });
69157
70165
  }
70166
+ // Following somebody, the same call the Node agent's admin surface takes
70167
+ // (lib/device/admin/routes/social.mjs): by handle normally, by actor url
70168
+ // when WebFinger cannot answer for them. The remote-follow page
70169
+ // (/authorize_interaction) is what asks for it here — another server
70170
+ // sends its reader to that page when they press Follow and say they are
70171
+ // at this host.
70172
+ case "/follow": {
70173
+ await a.requestTakeover?.();
70174
+ if (body.actor) {
70175
+ await followActor(a, String(body.actor));
70176
+ return json2(200, { ok: true, actor: String(body.actor) });
70177
+ }
70178
+ if (!body.handle) return json2(400, { error: "handle or actor required" });
70179
+ return json2(200, await followHandle(a, String(body.handle)));
70180
+ }
70181
+ // Taking the account back. A viewer publishes nothing and drains
70182
+ // nothing, so an account whose lease is held by something that is not
70183
+ // running any more stays silent with no way to say so. The owner acting
70184
+ // HERE outranks whatever holds it.
70185
+ case "/takeover": {
70186
+ if (!await a.requestTakeover?.()) return json2(503, { error: "the lease could not be taken \u2014 the pod refused the write" });
70187
+ return json2(200, { ok: true, mode: a.status().mode });
70188
+ }
69158
70189
  // Going quiet, and coming back. The record page's active/parked select.
69159
70190
  case "/park": {
69160
70191
  if (!await a.requestTakeover?.()) return json2(503, { error: "another device is active for this pod \u2014 park from there" });
@@ -70582,6 +71613,48 @@ var originAuthorities = (host) => ({
70582
71613
  }
70583
71614
  // fetch-only: this build serves no socket
70584
71615
  });
71616
+ async function accountNotRead({ unread, podBase, state, webId, actorUrl = null, fetchImpl = globalThis.fetch }) {
71617
+ const host = (() => {
71618
+ try {
71619
+ return new URL(podBase).host;
71620
+ } catch {
71621
+ return podBase;
71622
+ }
71623
+ })();
71624
+ const of = (code, message) => {
71625
+ const e = new Error(message);
71626
+ e.code = code;
71627
+ return e;
71628
+ };
71629
+ if (!unread) {
71630
+ const actor = actorUrl ? await fetchImpl(actorUrl, { headers: { accept: "application/activity+json" } }).then((r) => r.ok ? r.json() : null).catch(() => null) : null;
71631
+ if (actor?.preferredUsername) {
71632
+ const at = (() => {
71633
+ try {
71634
+ return `@${actor.preferredUsername}@${new URL(actor.id || actorUrl).host}`;
71635
+ } catch {
71636
+ return actor.preferredUsername;
71637
+ }
71638
+ })();
71639
+ return of("device-account", `${host} holds the account ${at}, but not its record: this account is run by a DeviceAgent, and its record lives on that device. Open it from that device's admin page, not here. The sign-in used here was ${webId}.`);
71640
+ }
71641
+ return of("no-account", `${host} answered, and there is no FediPod account in it. Sign in with the pod that holds your account, or make an account in this one \u2014 both start from the sign-in page. The sign-in used here was ${webId}.`);
71642
+ }
71643
+ const status2 = Number((/HTTP (\d{3})/u.exec(unread.message) || [])[1]) || 0;
71644
+ if (status2 === 401 || status2 === 403) {
71645
+ return of("sign-in-refused", `${host} would not let this sign-in read your account \u2014 it answered "not allowed" (HTTP ${status2}) \u2014 and renewing the sign-in did not change its mind. Your account and everything in it are untouched. Signing in at ${host} again is the one thing that helps.`);
71646
+ }
71647
+ if (status2 === 429) {
71648
+ return of("pod-busy", `${host} is telling this browser it has asked for too much too quickly (HTTP 429), so your account could not be read. Nothing is wrong with your account, and nothing here needs doing: this page is waiting the throttle out and will ask again by itself. While a pod is rate-limiting you, only time helps.`);
71649
+ }
71650
+ if (status2 >= 500) {
71651
+ return of("pod-error", `${host} broke while handing your account over (HTTP ${status2}). That is the pod's own failure, not your account's. This page asks again by itself in a moment; if it keeps saying this, the pod is down and there is nothing to do here.`);
71652
+ }
71653
+ if (status2 === 404) {
71654
+ return of("no-account-here", `${host} says there is nothing at ${state} (HTTP 404). Either no FediPod account has ever been set up in this pod, or you signed in with a different pod than the one holding yours. Sign in with that one, or make an account in this one \u2014 both start from the sign-in page.`);
71655
+ }
71656
+ return of("pod-unreachable", `This browser could not reach ${host} to read your account (${unread.message}). Your account is still there. This page tries again by itself; if it keeps saying this, check that you are online and that the pod is up.`);
71657
+ }
70585
71658
  var BrowserAgent = class _BrowserAgent {
70586
71659
  constructor({ log: log2 = console.log } = {}) {
70587
71660
  this.log = log2;
@@ -70685,6 +71758,21 @@ var BrowserAgent = class _BrowserAgent {
70685
71758
  * - { credential, keysRecord, config }: a client-credential session with the
70686
71759
  * material in hand (the offline test path).
70687
71760
  */
71761
+ // This browser's name for itself, minted once and kept. Not an identity and
71762
+ // not a secret — it says only "the same browser as last time" to the lease.
71763
+ // If storage cannot be reached, a fresh one is honest: this browser cannot
71764
+ // prove it is the one that held the lease, so it should not claim to be.
71765
+ async deviceId() {
71766
+ try {
71767
+ const had = await kvGet("device-id");
71768
+ if (had) return had;
71769
+ const made = crypto.randomUUID();
71770
+ await kvPut("device-id", made);
71771
+ return made;
71772
+ } catch {
71773
+ return null;
71774
+ }
71775
+ }
70688
71776
  async boot({ oidc, credential, keysRecord, config, frontOrigin }) {
70689
71777
  let session;
70690
71778
  let webId;
@@ -70705,10 +71793,12 @@ var BrowserAgent = class _BrowserAgent {
70705
71793
  this.urls = apUrls2(remotePod, root);
70706
71794
  const podFetch = (u, i) => this.remote.fetch(u, i);
70707
71795
  this.store = new PodStore({ storage: new HttpStorage(this.urls.state, podFetch), log: this.log });
70708
- await this.store.load().catch(() => {
71796
+ let unread = null;
71797
+ await this.store.load().catch((e) => {
71798
+ unread = e;
70709
71799
  });
70710
71800
  const cfg = config || this.store.getConfig();
70711
- if (!cfg) throw new Error("no account config on this pod \u2014 sign up first");
71801
+ if (!cfg) throw await accountNotRead({ unread, podBase: remotePod, state: this.urls.state, webId, actorUrl: this.urls.actor });
70712
71802
  this.store.setConfig({ ...this.store.getConfig() || {}, ...cfg, root });
70713
71803
  config = this.store.getConfig();
70714
71804
  const publicBase = config.gateway?.frontActor ? config.gateway.frontActor.replace(/ap\/actor\/?$/, "") : null;
@@ -70746,7 +71836,17 @@ var BrowserAgent = class _BrowserAgent {
70746
71836
  this.atproto = new BrowserAtproto({ store: this.store, actorId: this.urls.actor, log: this.log });
70747
71837
  this.publisher.atproto = this.atproto;
70748
71838
  this.fediaccts = new BrowserFediAccounts({ store: this.store, actorId: this.urls.actor, log: this.log });
70749
- this.lease = new Lease({ url: this.urls.state + "lease.json", fetchImpl: podFetch, log: this.log });
71839
+ this.lease = new Lease({
71840
+ url: this.urls.state + "lease.json",
71841
+ fetchImpl: podFetch,
71842
+ log: this.log,
71843
+ // Kept on this origin, so THIS browser is one holder however many times
71844
+ // its worker is killed and restarted. Without it every restart was a new
71845
+ // holder: the old lease still had minutes to run, so the browser found
71846
+ // its own account "active on another device" and asked to take it over.
71847
+ // Switching between the clients did it every time, being a navigation.
71848
+ id: await this.deviceId()
71849
+ });
70750
71850
  this.c2s = new C2S({ agent: this, log: this.log });
70751
71851
  this.intake = new Intake({
70752
71852
  config: this.store.getConfig(),
@@ -70978,43 +72078,14 @@ var BrowserAgent = class _BrowserAgent {
70978
72078
  }
70979
72079
  };
70980
72080
 
70981
- // web/app/oidc-session.mjs
70982
- var DB2 = "fedipod-oidc";
72081
+ // lib/session/oidc-session.mjs
70983
72082
  var STORE = "session";
70984
72083
  var b64u3 = (buf) => btoa(String.fromCharCode(...new Uint8Array(buf))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
70985
72084
  var enc3 = (o) => b64u3(new TextEncoder().encode(JSON.stringify(o)));
70986
72085
  var sha2564 = (s) => crypto.subtle.digest("SHA-256", new TextEncoder().encode(s));
70987
- function idb() {
70988
- return new Promise((res, rej) => {
70989
- const r = indexedDB.open(DB2, 1);
70990
- r.onupgradeneeded = () => r.result.createObjectStore(STORE);
70991
- r.onsuccess = () => res(r.result);
70992
- r.onerror = () => rej(r.error);
70993
- });
70994
- }
70995
- async function idbGet(key) {
70996
- const db = await idb();
70997
- return new Promise((res, rej) => {
70998
- const t = db.transaction(STORE).objectStore(STORE).get(key);
70999
- t.onsuccess = () => res(t.result);
71000
- t.onerror = () => rej(t.error);
71001
- });
71002
- }
71003
- async function idbPut(key, val) {
71004
- const db = await idb();
71005
- return new Promise((res, rej) => {
71006
- const t = db.transaction(STORE, "readwrite").objectStore(STORE).put(val, key);
71007
- t.onsuccess = () => res();
71008
- t.onerror = () => rej(t.error);
71009
- });
71010
- }
71011
- async function idbDel(key) {
71012
- const db = await idb();
71013
- return new Promise((res, rej) => {
71014
- const t = db.transaction(STORE, "readwrite").objectStore(STORE).delete(key);
71015
- t.onsuccess = () => res();
71016
- t.onerror = () => rej(t.error);
71017
- });
72086
+ var rand = (n = 32) => b64u3(crypto.getRandomValues(new Uint8Array(n)));
72087
+ async function dpopKey() {
72088
+ return crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, false, ["sign"]);
71018
72089
  }
71019
72090
  async function publicJwk(pair) {
71020
72091
  const j = await crypto.subtle.exportKey("jwk", pair.publicKey);
@@ -71027,64 +72098,217 @@ async function dpopProof(pair, jwk, htm, htu, ath) {
71027
72098
  const sig = await crypto.subtle.sign({ name: "ECDSA", hash: "SHA-256" }, pair.privateKey, new TextEncoder().encode(data));
71028
72099
  return `${data}.${b64u3(sig)}`;
71029
72100
  }
71030
- async function getSession() {
71031
- const s = await idbGet("session");
71032
- return s ? sessionHandle(s) : null;
71033
- }
71034
- async function signOut() {
71035
- const s = await idbGet("session").catch(() => null);
71036
- if (s?.revocationEndpoint && s.refreshToken) {
71037
- try {
71038
- await fetch(s.revocationEndpoint, {
71039
- method: "POST",
71040
- headers: { "content-type": "application/x-www-form-urlencoded" },
71041
- body: new URLSearchParams({
71042
- token: s.refreshToken,
71043
- token_type_hint: "refresh_token",
71044
- client_id: s.client_id
71045
- })
71046
- });
71047
- } catch {
71048
- }
72101
+ var jwtPayload = (jwt) => {
72102
+ try {
72103
+ return JSON.parse(new TextDecoder().decode(Uint8Array.from(atob(jwt.split(".")[1].replace(/-/g, "+").replace(/_/g, "/")), (c) => c.charCodeAt(0))));
72104
+ } catch {
72105
+ return {};
71049
72106
  }
71050
- await idbDel("session");
71051
- await idbDel("pending");
72107
+ };
72108
+ async function discover(issuer) {
72109
+ const res = await fetch(`${issuer.replace(/\/+$/, "")}/.well-known/openid-configuration`, { headers: { accept: "application/json" } });
72110
+ if (!res.ok) throw new Error(`OIDC discovery failed at ${issuer} (HTTP ${res.status})`);
72111
+ return res.json();
71052
72112
  }
71053
- function sessionHandle(s) {
71054
- let { accessToken, expiresAt, refreshToken } = s;
71055
- const jwkP = publicJwk(s.pair);
71056
- const refresh = async () => {
71057
- if (!refreshToken) throw new Error("session expired and there is no refresh token \u2014 sign in again");
71058
- const jwk = await jwkP;
71059
- const res = await fetch(s.tokenEndpoint, {
72113
+ async function registerClient(cfg, redirectUri, clientName) {
72114
+ const res = await fetch(cfg.registration_endpoint, {
72115
+ method: "POST",
72116
+ headers: { "content-type": "application/json" },
72117
+ body: JSON.stringify({
72118
+ client_name: clientName,
72119
+ redirect_uris: [redirectUri],
72120
+ token_endpoint_auth_method: "none",
72121
+ grant_types: ["authorization_code", "refresh_token"],
72122
+ response_types: ["code"],
72123
+ application_type: "web",
72124
+ scope: "openid webid offline_access"
72125
+ })
72126
+ });
72127
+ if (!res.ok) throw new Error(`client registration failed (HTTP ${res.status})`);
72128
+ return (await res.json()).client_id;
72129
+ }
72130
+ function solidOidcSession({ dbName = "solid-oidc-session", clientName = "Solid app" } = {}) {
72131
+ function idb() {
72132
+ return new Promise((res, rej) => {
72133
+ const r = indexedDB.open(dbName, 1);
72134
+ r.onupgradeneeded = () => r.result.createObjectStore(STORE);
72135
+ r.onsuccess = () => res(r.result);
72136
+ r.onerror = () => rej(r.error);
72137
+ });
72138
+ }
72139
+ async function idbGet(key) {
72140
+ const db = await idb();
72141
+ return new Promise((res, rej) => {
72142
+ const t = db.transaction(STORE).objectStore(STORE).get(key);
72143
+ t.onsuccess = () => res(t.result);
72144
+ t.onerror = () => rej(t.error);
72145
+ });
72146
+ }
72147
+ async function idbPut(key, val) {
72148
+ const db = await idb();
72149
+ return new Promise((res, rej) => {
72150
+ const t = db.transaction(STORE, "readwrite").objectStore(STORE).put(val, key);
72151
+ t.onsuccess = () => res();
72152
+ t.onerror = () => rej(t.error);
72153
+ });
72154
+ }
72155
+ async function idbDel(key) {
72156
+ const db = await idb();
72157
+ return new Promise((res, rej) => {
72158
+ const t = db.transaction(STORE, "readwrite").objectStore(STORE).delete(key);
72159
+ t.onsuccess = () => res();
72160
+ t.onerror = () => rej(t.error);
72161
+ });
72162
+ }
72163
+ async function beginLogin2({ issuer, redirectUri, clientName: name = clientName, returnTo = null }) {
72164
+ const cfg = await discover(issuer);
72165
+ const client_id = await registerClient(cfg, redirectUri, name);
72166
+ const pair = await dpopKey();
72167
+ const verifier = rand(48);
72168
+ const challenge = b64u3(await sha2564(verifier));
72169
+ const state = rand(16);
72170
+ await idbPut("pending", {
72171
+ issuer,
72172
+ client_id,
72173
+ redirectUri,
72174
+ verifier,
72175
+ state,
72176
+ pair,
72177
+ returnTo,
72178
+ tokenEndpoint: cfg.token_endpoint,
72179
+ authorizationEndpoint: cfg.authorization_endpoint,
72180
+ revocationEndpoint: cfg.revocation_endpoint || null
72181
+ });
72182
+ const url = new URL(cfg.authorization_endpoint);
72183
+ for (const [k, v] of Object.entries({
72184
+ client_id,
72185
+ redirect_uri: redirectUri,
72186
+ response_type: "code",
72187
+ scope: "openid webid offline_access",
72188
+ code_challenge: challenge,
72189
+ code_challenge_method: "S256",
72190
+ state,
72191
+ prompt: "consent"
72192
+ })) url.searchParams.set(k, v);
72193
+ return { authorizationUrl: url.href };
72194
+ }
72195
+ async function completeLogin2({ currentUrl }) {
72196
+ const u = new URL(currentUrl);
72197
+ const code = u.searchParams.get("code");
72198
+ const state = u.searchParams.get("state");
72199
+ if (!code) return null;
72200
+ const p = await idbGet("pending");
72201
+ if (!p || p.state !== state) throw new Error("login state mismatch");
72202
+ const jwk = await publicJwk(p.pair);
72203
+ const res = await fetch(p.tokenEndpoint, {
71060
72204
  method: "POST",
71061
- headers: { "content-type": "application/x-www-form-urlencoded", dpop: await dpopProof(s.pair, jwk, "POST", s.tokenEndpoint) },
71062
- body: new URLSearchParams({ grant_type: "refresh_token", refresh_token: refreshToken, client_id: s.client_id, scope: "openid webid offline_access" })
72205
+ headers: { "content-type": "application/x-www-form-urlencoded", dpop: await dpopProof(p.pair, jwk, "POST", p.tokenEndpoint) },
72206
+ body: new URLSearchParams({ grant_type: "authorization_code", code, redirect_uri: p.redirectUri, client_id: p.client_id, code_verifier: p.verifier })
71063
72207
  });
71064
72208
  const tok = await res.json().catch(() => ({}));
71065
- if (!res.ok || !tok.access_token) {
71066
- await idbDel("session");
71067
- throw new Error("refresh failed \u2014 sign in again");
71068
- }
71069
- accessToken = tok.access_token;
71070
- expiresAt = Date.now() + Math.max(30, tok.expires_in || 300) * 1e3;
71071
- if (tok.refresh_token) refreshToken = tok.refresh_token;
71072
- const now = await idbGet("session");
71073
- if (now && now.webId !== s.webId) {
71074
- throw new Error("signed in as somebody else while this session was refreshing");
71075
- }
71076
- await idbPut("session", { ...s, accessToken, expiresAt, refreshToken });
71077
- };
71078
- const authFetch = async (url, init = {}) => {
71079
- if (Date.now() > expiresAt - 3e4) await refresh();
71080
- const jwk = await jwkP;
71081
- const ath = b64u3(await sha2564(accessToken));
71082
- const headers = { ...init.headers || {}, authorization: `DPoP ${accessToken}`, dpop: await dpopProof(s.pair, jwk, init.method || "GET", url, ath) };
71083
- return fetch(url, { ...init, headers });
71084
- };
71085
- return { webId: s.webId, fetch: authFetch, refresh, signOut };
72209
+ if (!res.ok || !tok.access_token) throw new Error(`token exchange failed (HTTP ${res.status}): ${tok.error || ""}`);
72210
+ const webId = jwtPayload(tok.access_token).webid || jwtPayload(tok.id_token || "").webid || null;
72211
+ const session = {
72212
+ issuer: p.issuer,
72213
+ client_id: p.client_id,
72214
+ tokenEndpoint: p.tokenEndpoint,
72215
+ pair: p.pair,
72216
+ // Where to hand the refresh token back at sign-out. Kept on the session
72217
+ // because discovery is a network round trip and sign-out should not need
72218
+ // one — see signOut().
72219
+ revocationEndpoint: p.revocationEndpoint || null,
72220
+ refreshToken: tok.refresh_token || null,
72221
+ accessToken: tok.access_token,
72222
+ expiresAt: Date.now() + Math.max(30, tok.expires_in || 300) * 1e3,
72223
+ webId
72224
+ };
72225
+ await idbPut("session", session);
72226
+ await idbDel("pending");
72227
+ return Object.assign(sessionHandle(session), p.returnTo ? { returnTo: p.returnTo } : {});
72228
+ }
72229
+ async function getSession2() {
72230
+ const s = await idbGet("session");
72231
+ return s ? sessionHandle(s) : null;
72232
+ }
72233
+ async function signOut2() {
72234
+ const s = await idbGet("session").catch(() => null);
72235
+ if (s?.revocationEndpoint && s.refreshToken) {
72236
+ try {
72237
+ await fetch(s.revocationEndpoint, {
72238
+ method: "POST",
72239
+ headers: { "content-type": "application/x-www-form-urlencoded" },
72240
+ body: new URLSearchParams({
72241
+ token: s.refreshToken,
72242
+ token_type_hint: "refresh_token",
72243
+ client_id: s.client_id
72244
+ })
72245
+ });
72246
+ } catch {
72247
+ }
72248
+ }
72249
+ await idbDel("session");
72250
+ await idbDel("pending");
72251
+ }
72252
+ function sessionHandle(s) {
72253
+ let { accessToken, expiresAt, refreshToken } = s;
72254
+ const jwkP = publicJwk(s.pair);
72255
+ const refresh = async () => {
72256
+ if (!refreshToken) throw new Error("session expired and there is no refresh token \u2014 sign in again");
72257
+ const jwk = await jwkP;
72258
+ let res;
72259
+ try {
72260
+ res = await fetch(s.tokenEndpoint, {
72261
+ method: "POST",
72262
+ headers: { "content-type": "application/x-www-form-urlencoded", dpop: await dpopProof(s.pair, jwk, "POST", s.tokenEndpoint) },
72263
+ body: new URLSearchParams({ grant_type: "refresh_token", refresh_token: refreshToken, client_id: s.client_id, scope: "openid webid offline_access" })
72264
+ });
72265
+ } catch (e) {
72266
+ throw new Error(`${e.message} \u2014 renewing your sign-in at ${new URL(s.tokenEndpoint).host}`);
72267
+ }
72268
+ const tok = await res.json().catch(() => ({}));
72269
+ if (res.status === 429) {
72270
+ throw new Error(`${new URL(s.tokenEndpoint).host} is asking us to slow down \u2014 your sign-in could not be renewed just now`);
72271
+ }
72272
+ if (!res.ok || !tok.access_token) {
72273
+ await idbDel("session");
72274
+ throw new Error("refresh failed \u2014 sign in again");
72275
+ }
72276
+ accessToken = tok.access_token;
72277
+ expiresAt = Date.now() + Math.max(30, tok.expires_in || 300) * 1e3;
72278
+ if (tok.refresh_token) refreshToken = tok.refresh_token;
72279
+ const now = await idbGet("session");
72280
+ if (now && now.webId !== s.webId) {
72281
+ throw new Error("signed in as somebody else while this session was refreshing");
72282
+ }
72283
+ await idbPut("session", { ...s, accessToken, expiresAt, refreshToken });
72284
+ };
72285
+ const send = async (url, init) => {
72286
+ const jwk = await jwkP;
72287
+ const ath = b64u3(await sha2564(accessToken));
72288
+ const headers = { ...init.headers || {}, authorization: `DPoP ${accessToken}`, dpop: await dpopProof(s.pair, jwk, init.method || "GET", url, ath) };
72289
+ return fetch(url, { ...init, headers });
72290
+ };
72291
+ const authFetch = async (url, init = {}) => {
72292
+ if (Date.now() > expiresAt - 3e4) await refresh();
72293
+ const res = await send(url, init);
72294
+ if (res.status === 401 && refreshToken) {
72295
+ try {
72296
+ await refresh();
72297
+ } catch {
72298
+ return res;
72299
+ }
72300
+ return send(url, init);
72301
+ }
72302
+ return res;
72303
+ };
72304
+ return { webId: s.webId, issuer: s.issuer, fetch: authFetch, refresh, signOut: signOut2 };
72305
+ }
72306
+ return { beginLogin: beginLogin2, completeLogin: completeLogin2, getSession: getSession2, signOut: signOut2 };
71086
72307
  }
71087
72308
 
72309
+ // web/app/oidc-session.mjs
72310
+ var { beginLogin, completeLogin, getSession, signOut } = solidOidcSession({ dbName: "fedipod-oidc", clientName: "FediPod" });
72311
+
71088
72312
  // web/app/sw-src.mjs
71089
72313
  var agent = null;
71090
72314
  var booting = null;