@feedmepos/mf-connect 0.0.16-beta.1 → 0.0.17-prod

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 (72) hide show
  1. package/dist/Analytic-CKM1hA08.js +612 -0
  2. package/dist/{Broadcast-X69Mtv3b.js → Broadcast-DzJRPvz5.js} +7 -7
  3. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-VWLBlxy1.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-D7J9gl35.js} +8 -8
  4. package/dist/{Card-D0X3v1UF.js → Card-BowvmBJD.js} +121 -121
  5. package/dist/{Collections-umR6Ehqf.js → Collections-DHi8bxpj.js} +129 -141
  6. package/dist/{Credit-C1EWF7R0.js → Credit-DakCAG7z.js} +7 -7
  7. package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-Bz6TSmbW.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-B6L77rz7.js} +22 -24
  8. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-AhWnHG02.js → EffectSheet.vue_vue_type_style_index_0_lang-RLmpxA5_.js} +6 -6
  9. package/dist/{Experience-CqL8wyPm.js → Experience-CnHloEig.js} +7 -7
  10. package/dist/{Game--kYe64EV.js → Game-D-X4EgC-.js} +7 -7
  11. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-BjOJ3XSL.js → ImageInput.vue_vue_type_script_setup_true_lang-DZhanVR2.js} +1 -1
  12. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-DykNOOFD.js → MainLayout-BAyMP_C8.js} +53 -20
  13. package/dist/{Marketing-CTCQ5ZmZ.js → Marketing-c4QG38L1.js} +25 -25
  14. package/dist/{Member-DCduX7zP.js → Member-DQBVPHCv.js} +2 -2
  15. package/dist/MemberList-Ci6LRnrH.js +1718 -0
  16. package/dist/{MemberTransactions-CTAx5jIV.js → MemberTransactions-CztAzAA6.js} +1 -1
  17. package/dist/MessageInput.vue_vue_type_script_setup_true_lang-B_hDmE8e.js +203 -0
  18. package/dist/{Mission-CVr9rS_D.js → Mission-Cj_hi3tv.js} +7 -7
  19. package/dist/{Point-BnZ6M74y.js → Point-BGDCrLdw.js} +7 -7
  20. package/dist/{Promotion-B0PUve5S.js → Promotion-BABafzmp.js} +8 -8
  21. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-CrpJySSp.js → RuleGroup.vue_vue_type_script_setup_true_lang-C7Tqs2pq.js} +14 -14
  22. package/dist/{Segment-B-XpkyM5.js → Segment-Bh8bddz_.js} +18 -19
  23. package/dist/{Setting-Zrj5P_4m.js → Setting-ByrGfBdk.js} +541 -571
  24. package/dist/Store-6lrxcf8I.js +1442 -0
  25. package/dist/{StoreRewards-D8410Q_-.js → StoreRewards-C5bJ9hxE.js} +74 -75
  26. package/dist/{StoreTransactions.vue_vue_type_script_setup_true_lang-DS4APaHw.js → StoreTransactions.vue_vue_type_script_setup_true_lang-DaboQyfR.js} +79 -82
  27. package/dist/TargetLocationInput.vue_vue_type_script_setup_true_lang-DUaTP2_0.js +124 -0
  28. package/dist/{Tier-DVWJyQ9S.js → Tier-D71DR1ez.js} +68 -71
  29. package/dist/{Title-B5kX64vs.js → Title-CxAYzUIx.js} +75 -78
  30. package/dist/{Transaction-CZBO4v4d.js → Transaction-BWRGkDrb.js} +1 -1
  31. package/dist/{Voucher-se-4JF9B.js → Voucher-BLy2jD1L.js} +37 -37
  32. package/dist/ZodTextField.vue_vue_type_script_setup_true_lang-3LlSDiq0.js +140 -0
  33. package/dist/{app-B2ImSO3V.js → app-BGUDahHa.js} +1 -1
  34. package/dist/{app-DkI7dYRN.js → app-roSGTcOh.js} +46 -46
  35. package/dist/app.js +1 -1
  36. package/dist/{campaign-BZJuknWK.js → campaign-B7-BUOfP.js} +11 -13
  37. package/dist/{collection.fn-DoCkZ6z4.js → collection.fn-DHlfGYAC.js} +2 -4
  38. package/dist/{dto-BWpvRpK2.js → dto-zv3OTrbd.js} +214 -215
  39. package/dist/{effect-B8kmnKvY.js → effect-DLtYeqVg.js} +1 -1
  40. package/dist/{export-Dm6LYnWo.js → export-Bm6xBE89.js} +3 -3
  41. package/dist/{helper-DR4XK3nv.js → helper-BaLvfRCZ.js} +1 -1
  42. package/dist/{index-DcUrk07Q.js → index-BmgXoYUK.js} +1 -1
  43. package/dist/{index-CuL5-ORK.js → index-D9Ft2U8O.js} +8 -9
  44. package/dist/{index-CWf0mh3a.js → index-DIA3Lkck.js} +2 -2
  45. package/dist/{index-BryrRq8O.js → index-DP2wL3EA.js} +37 -47
  46. package/dist/{index-CkiYkbXb.js → index-DgAr53Ae.js} +1 -1
  47. package/dist/{index-yxJMhfxj.js → index-DiC8aGiv.js} +66 -109
  48. package/dist/{index-boor8e80.js → index-DrA3F2aA.js} +27 -28
  49. package/dist/{index-BxkxVtgm.js → index-Qr6T_tfL.js} +1 -1
  50. package/dist/index-SdCqUstr.js +244 -0
  51. package/dist/{index-Bu4_26qI.js → index-aYwIKfns.js} +1 -1
  52. package/dist/{loading-BzV5acUX.js → loading-CB6v7hws.js} +4 -4
  53. package/dist/{lodash-mg4435Qq.js → lodash-DkICSg8W.js} +1 -1
  54. package/dist/{membership-CqbsLHqx.js → membership-CFVkuT3Z.js} +58 -63
  55. package/dist/{money-DA_gtp3q.js → money-DMEHb1PR.js} +1 -1
  56. package/dist/{number-C388eyOu.js → number-RVupiUMd.js} +3 -3
  57. package/dist/{rule-Clmr5y4j.js → rule-CpU35zT1.js} +2 -2
  58. package/dist/{rule-builder-BgqNbM-P.js → rule-builder-CrtuA_0Q.js} +1 -1
  59. package/dist/style.css +1 -1
  60. package/dist/{template-Dwp7heBA.js → template-DxvJmDC3.js} +6 -6
  61. package/dist/{usePagination-o5fgsZwU.js → usePagination-FlXHEH_R.js} +1 -1
  62. package/dist/{xlsx-BRdh9e2p.js → xlsx-BJ7B-X33.js} +309 -309
  63. package/package.json +2 -2
  64. package/dist/Analytic-C-zZmF5N.js +0 -760
  65. package/dist/MainLayout-D0AoA1tk.js +0 -41
  66. package/dist/MemberList-B0EkXZJu.js +0 -1729
  67. package/dist/MessageInput.vue_vue_type_script_setup_true_lang-C-BtHxSc.js +0 -432
  68. package/dist/Store-B2gywCt2.js +0 -1503
  69. package/dist/TargetLocationInput.vue_vue_type_script_setup_true_lang-ZYjWlDJ1.js +0 -139
  70. package/dist/ZodTextField.vue_vue_type_script_setup_true_lang-CWt4tVdk.js +0 -55
  71. package/dist/index-BobRgQrE.js +0 -291
  72. package/dist/zod-W_PvIofQ.js +0 -90
@@ -1,16 +1,16 @@
1
- import { defineComponent as B, ref as P, resolveComponent as c, openBlock as r, createBlock as C, unref as O, withCtx as g, renderSlot as T, createElementBlock as d, toDisplayString as u, createCommentVNode as H, createVNode as I, normalizeClass as L, createElementVNode as k, Fragment as Y, renderList as j } from "vue";
2
- import { z as e, F as m, m as f } from "./loading-BzV5acUX.js";
3
- import "./index-CWf0mh3a.js";
4
- import { R as a } from "./rule-builder-BgqNbM-P.js";
5
- import { i as o } from "./helper-DR4XK3nv.js";
6
- import { b as K, c as W } from "./index-CuL5-ORK.js";
7
- const X = {
1
+ import { defineComponent as U, ref as B, resolveComponent as c, openBlock as r, createBlock as C, unref as O, withCtx as g, renderSlot as T, createElementBlock as d, toDisplayString as u, createCommentVNode as P, createVNode as I, normalizeClass as L, createElementVNode as H, Fragment as k, renderList as Y } from "vue";
2
+ import { z as e, F as m, m as f } from "./loading-CB6v7hws.js";
3
+ import "./index-DIA3Lkck.js";
4
+ import { R as a } from "./rule-builder-CrtuA_0Q.js";
5
+ import { i as o } from "./helper-BaLvfRCZ.js";
6
+ import { b as K, c as W } from "./index-D9Ft2U8O.js";
7
+ const j = {
8
8
  key: 0,
9
9
  class: "fm-typo-en-body-lg-400 mb-4"
10
- }, q = {
10
+ }, X = {
11
11
  key: 1,
12
12
  class: "fm-typo-en-body-lg-400"
13
- }, z = { class: "rounded-md bg-white shadow-md max-h-[300px] overflow-y-scroll pl-4 py-12" }, ve = /* @__PURE__ */ B({
13
+ }, q = { class: "rounded-md bg-white shadow-md max-h-[300px] overflow-y-scroll pl-4 py-12" }, ue = /* @__PURE__ */ U({
14
14
  __name: "CustomSelect",
15
15
  props: {
16
16
  label: {
@@ -36,22 +36,22 @@ const X = {
36
36
  }
37
37
  },
38
38
  emits: ["update:model-value"],
39
- setup(t, { emit: M }) {
40
- const v = M, s = P(!1);
39
+ setup(t, { emit: N }) {
40
+ const v = N, s = B(!1);
41
41
  return (b, _) => {
42
- const A = c("FmIcon"), w = c("FmField"), F = c("FmMenuItem"), V = c("FmPopover");
43
- return r(), C(V, {
42
+ const M = c("FmIcon"), w = c("FmField"), F = c("FmMenuItem"), A = c("FmPopover");
43
+ return r(), C(A, {
44
44
  "show-popover": O(s),
45
45
  onPopoverChanged: _[0] || (_[0] = (i) => s.value = i),
46
46
  "z-index": t.zIndex
47
47
  }, {
48
48
  "popover-button": g(() => [
49
49
  T(b.$slots, "popover-button", {}, () => [
50
- t.label ? (r(), d("div", X, u(t.label), 1)) : H("", !0),
50
+ t.label ? (r(), d("div", j, u(t.label), 1)) : P("", !0),
51
51
  I(w, null, {
52
52
  append: g(() => [
53
53
  T(b.$slots, "append"),
54
- I(A, {
54
+ I(M, {
55
55
  name: O(s) ? "expand_less" : "expand_more",
56
56
  size: "md",
57
57
  color: "black"
@@ -60,7 +60,7 @@ const X = {
60
60
  default: g(() => {
61
61
  var i;
62
62
  return [
63
- t.multiselect ? (r(), d("div", q, u(t.items.filter((n) => {
63
+ t.multiselect ? (r(), d("div", X, u(t.items.filter((n) => {
64
64
  var p;
65
65
  return (p = t.modelValue) == null ? void 0 : p.includes(n.value);
66
66
  }).map((n) => n.label).join(", ")), 1)) : (r(), d("div", {
@@ -78,8 +78,8 @@ const X = {
78
78
  ])
79
79
  ]),
80
80
  default: g(() => [
81
- k("div", z, [
82
- (r(!0), d(Y, null, j(t.items, (i) => {
81
+ H("div", q, [
82
+ (r(!0), d(k, null, Y(t.items, (i) => {
83
83
  var n, p;
84
84
  return r(), C(F, {
85
85
  class: L(`${t.multiselect ? (n = t.modelValue) != null && n.some((l) => l == i.value) ? "bg-fm-color-system-warning-100" : "" : t.modelValue == i.value}`),
@@ -92,10 +92,10 @@ const X = {
92
92
  if (l.stopPropagation(), !t.multiselect)
93
93
  s.value = !1, v("update:model-value", i.value);
94
94
  else {
95
- const U = (E = t.modelValue) == null ? void 0 : E.some((y) => y == i.value);
95
+ const V = (E = t.modelValue) == null ? void 0 : E.some((y) => y == i.value);
96
96
  v(
97
97
  "update:model-value",
98
- U ? (t.modelValue ?? []).filter((y) => y !== i.value) : [...t.modelValue ?? [], i.value]
98
+ V ? (t.modelValue ?? []).filter((y) => y !== i.value) : [...t.modelValue ?? [], i.value]
99
99
  );
100
100
  }
101
101
  }
@@ -107,7 +107,7 @@ const X = {
107
107
  }, 8, ["show-popover", "z-index"]);
108
108
  };
109
109
  }
110
- }), be = {
110
+ }), fe = {
111
111
  PROMOTION: {
112
112
  name: "Promotion Template",
113
113
  description: "Promotion template for campaign creation.",
@@ -412,20 +412,6 @@ const X = {
412
412
  }
413
413
  ]
414
414
  },
415
- {
416
- name: "Redemption",
417
- fields: [
418
- {
419
- label: "Code",
420
- property: "campaign.code",
421
- type: "text"
422
- }
423
- ],
424
- condition: {
425
- property: "campaign.event.type",
426
- value: "SIMPLE_CLAIM"
427
- }
428
- },
429
415
  {
430
416
  name: "Notify audience",
431
417
  fields: [
@@ -455,15 +441,16 @@ const X = {
455
441
  }
456
442
  ],
457
443
  defaultValue: {
444
+ // TODO: templateId use in db
458
445
  templateId: "",
459
446
  campaign: {
460
447
  collectible: "",
461
448
  type: "VOUCHER",
449
+ // TODO: templateId use in db
462
450
  templateId: "",
463
451
  name: "",
464
452
  description: "",
465
453
  image: "",
466
- code: "",
467
454
  event: {
468
455
  type: "BILL_COMPLETED",
469
456
  rule: a.scaffoldGroup()
@@ -479,6 +466,13 @@ const X = {
479
466
  amount: 1
480
467
  },
481
468
  notify: !1
469
+ // notifyMessage: {
470
+ // channel: 'SMS',
471
+ // content: 'You received a reward.',
472
+ // language: 'en',
473
+ // variables: ['transaction.amount', 'collectible.name'],
474
+ // imageUrl: '',
475
+ // },
482
476
  },
483
477
  configs: o("VOUCHER", {
484
478
  name: "",
@@ -1827,7 +1821,7 @@ a.setRuleToGroup(a.scaffoldGroup(), [
1827
1821
  ({
1828
1822
  ...a.scaffoldGroup()
1829
1823
  });
1830
- const Q = e.enum([
1824
+ const z = e.enum([
1831
1825
  "MEMBER_REWARD",
1832
1826
  "PAID_LOYALTY",
1833
1827
  "COLLECT_FEEDBACK",
@@ -1837,7 +1831,7 @@ const Q = e.enum([
1837
1831
  "BROADCAST",
1838
1832
  "BIRTHDAY",
1839
1833
  "GAME"
1840
- ]), J = e.enum([
1834
+ ]), Q = e.enum([
1841
1835
  "text",
1842
1836
  "number",
1843
1837
  "textarea",
@@ -1864,33 +1858,33 @@ const Q = e.enum([
1864
1858
  "rule_feedback",
1865
1859
  "rule_birthday",
1866
1860
  "promotion_game_type"
1867
- ]), $ = e.object({
1861
+ ]), J = e.object({
1868
1862
  label: e.string().optional(),
1869
1863
  property: e.string().or(e.any()),
1870
- type: J,
1864
+ type: Q,
1871
1865
  extras: e.string().optional(),
1872
1866
  isRuleChildren: e.boolean().optional()
1873
- }), Z = e.object({
1867
+ }), $ = e.object({
1874
1868
  name: e.string().optional(),
1875
- fields: e.array($),
1869
+ fields: e.array(J),
1876
1870
  condition: e.object({
1877
1871
  not: e.boolean().optional(),
1878
1872
  property: e.string(),
1879
1873
  value: e.any()
1880
1874
  }).optional()
1881
- }), ee = e.object({
1875
+ }), Z = e.object({
1882
1876
  name: e.string(),
1883
- groups: e.array(Z)
1877
+ groups: e.array($)
1884
1878
  });
1885
1879
  e.object({
1886
1880
  _id: m,
1887
1881
  name: e.string(),
1888
1882
  description: e.string().nullish(),
1889
- steps: e.array(ee).min(1),
1890
- intention: e.array(Q),
1883
+ steps: e.array(Z).min(1),
1884
+ intention: e.array(z),
1891
1885
  defaultValue: e.any()
1892
1886
  }).describe(JSON.stringify({ collectionName: "MarketingTemplates" }));
1893
- const ae = {
1887
+ const ee = {
1894
1888
  collectionName: "Businesses",
1895
1889
  transform: {
1896
1890
  _id: "oid"
@@ -1902,20 +1896,20 @@ e.object({
1902
1896
  name: e.string(),
1903
1897
  credit: e.number(),
1904
1898
  forceSend: e.boolean().optional()
1905
- }).describe(f.describe(ae));
1906
- const D = e.enum(["PHONE"]), te = e.enum(["MOCEAN", "SLACK", "SMS", "EMAIL"]), ie = e.enum(["PENDING", "COMPLETED", "FAILED"]), ne = e.enum([
1899
+ }).describe(f.describe(ee));
1900
+ const D = e.enum(["PHONE"]), ae = e.enum(["MOCEAN", "SLACK"]), te = e.enum(["PENDING", "COMPLETED", "FAILED"]), ie = e.enum([
1907
1901
  "General",
1908
1902
  "Otp",
1909
1903
  "Marketing",
1910
1904
  "Ordering",
1911
1905
  "MemberInvitation"
1912
- ]), oe = e.object({
1906
+ ]), ne = e.object({
1913
1907
  type: D
1914
- }), x = oe.extend({
1908
+ }), x = ne.extend({
1915
1909
  type: e.literal(D.enum.PHONE),
1916
- provider: te,
1917
- usage: ne.optional()
1918
- }), re = {
1910
+ provider: ae,
1911
+ usage: ie.optional()
1912
+ }), oe = {
1919
1913
  collectionName: "Notifications",
1920
1914
  transform: { _id: "oid", business: "oid" }
1921
1915
  };
@@ -1926,9 +1920,9 @@ e.object({
1926
1920
  title: e.string().optional(),
1927
1921
  message: e.string(),
1928
1922
  option: x,
1929
- status: ie,
1923
+ status: te,
1930
1924
  ref: e.string().optional()
1931
- }).describe(f.describe(re));
1925
+ }).describe(f.describe(oe));
1932
1926
  e.object({
1933
1927
  target: e.string(),
1934
1928
  title: e.string().optional(),
@@ -1940,24 +1934,6 @@ e.object({
1940
1934
  phone: e.string(),
1941
1935
  message: e.string()
1942
1936
  });
1943
- const h = e.object({
1944
- name: e.string(),
1945
- address: e.string()
1946
- }), pe = e.object({
1947
- filename: e.string(),
1948
- content: e.instanceof(Uint8Array)
1949
- });
1950
- e.object({
1951
- from: h,
1952
- to: e.array(h),
1953
- subject: e.string(),
1954
- html: e.string().optional(),
1955
- attachments: e.array(pe).optional()
1956
- });
1957
- e.object({
1958
- subject: e.string(),
1959
- body: e.string()
1960
- });
1961
1937
  e.enum(["send_notification", "TRIGGER_EVENT"]);
1962
1938
  e.enum([
1963
1939
  "campaign.general",
@@ -1985,15 +1961,15 @@ e.object({
1985
1961
  claimIds: e.array(e.string()),
1986
1962
  billId: e.string()
1987
1963
  });
1988
- var S = /* @__PURE__ */ ((t) => (t[t.feedMe = 0] = "feedMe", t[t.business = 1] = "business", t[t.restaurant = 2] = "restaurant", t))(S || {});
1989
- e.nativeEnum(S);
1964
+ var h = /* @__PURE__ */ ((t) => (t[t.feedMe = 0] = "feedMe", t[t.business = 1] = "business", t[t.restaurant = 2] = "restaurant", t))(h || {});
1965
+ e.nativeEnum(h);
1990
1966
  e.enum(["manage", "create", "read", "update", "delete"]);
1991
1967
  e.enum(["all", "restaurant", "business", "delivery", "agent"]);
1992
1968
  e.enum(["quota"]);
1993
- var R = /* @__PURE__ */ ((t) => (t.marketing = "business::marketing", t.campaign = "business::campaign", t.counter = "business::counter", t.permission = "business::permission", t.role = "business::role", t))(R || {});
1994
- e.nativeEnum(R);
1969
+ var S = /* @__PURE__ */ ((t) => (t.marketing = "business::marketing", t.campaign = "business::campaign", t.counter = "business::counter", t.permission = "business::permission", t.role = "business::role", t))(S || {});
1970
+ e.nativeEnum(S);
1995
1971
  e.enum(["restaurant"]);
1996
- const le = e.object({
1972
+ const re = e.object({
1997
1973
  label: e.string(),
1998
1974
  subject: e.union([e.string(), e.array(e.string())]),
1999
1975
  actions: e.union([e.string(), e.array(e.string())]),
@@ -2008,7 +1984,7 @@ e.object({
2008
1984
  userId: e.string(),
2009
1985
  email: e.string().nullish(),
2010
1986
  phoneNo: e.string().nullish(),
2011
- permissions: e.array(e.lazy(() => le))
1987
+ permissions: e.array(e.lazy(() => re))
2012
1988
  }).describe(
2013
1989
  f.describe({
2014
1990
  collectionName: "PermissionUsers",
@@ -2017,27 +1993,27 @@ e.object({
2017
1993
  }
2018
1994
  })
2019
1995
  );
2020
- const G = e.object({
1996
+ const R = e.object({
2021
1997
  userId: e.string(),
2022
1998
  level: e.number(),
2023
1999
  role: e.string().optional(),
2024
2000
  businessId: e.string().optional(),
2025
2001
  restaurantId: e.string().optional()
2026
- }), me = e.function().args(e.any(), G).returns(e.boolean()), se = e.function().args(G).returns(e.promise(e.array(e.any())));
2002
+ }), pe = e.function().args(e.any(), R).returns(e.boolean()), le = e.function().args(R).returns(e.promise(e.array(e.any())));
2027
2003
  e.object({
2028
- isAdmin: me,
2029
- getRules: se
2004
+ isAdmin: pe,
2005
+ getRules: le
2030
2006
  });
2031
2007
  e.object({
2032
2008
  transactions: e.array(K),
2033
2009
  collections: e.array(W)
2034
2010
  });
2035
- const N = e.enum([
2011
+ const G = e.enum([
2036
2012
  "ROCK_PAPER_SCISSOR"
2037
2013
  ]);
2038
- N.enum.ROCK_PAPER_SCISSOR + "";
2014
+ G.enum.ROCK_PAPER_SCISSOR + "";
2039
2015
  e.object({
2040
- type: N
2016
+ type: G
2041
2017
  });
2042
2018
  e.object({
2043
2019
  host: e.string().url(),
@@ -2045,27 +2021,8 @@ e.object({
2045
2021
  token: e.string(),
2046
2022
  roomId: e.string()
2047
2023
  });
2048
- e.object({
2049
- id: e.number(),
2050
- name: e.string(),
2051
- email: e.string(),
2052
- phone: e.string(),
2053
- birthday: e.string(),
2054
- address: e.string().nullable(),
2055
- avatar: e.string(),
2056
- tier: e.string(),
2057
- visitCount: e.number().nullable(),
2058
- lastVisit: e.string().nullable(),
2059
- averageSpending: e.number().nullable(),
2060
- point: e.number()
2061
- });
2062
- e.object({
2063
- businessId: e.string(),
2064
- phone: e.string().optional(),
2065
- email: e.string().optional()
2066
- });
2067
2024
  export {
2068
- Q as F,
2069
- be as T,
2070
- ve as _
2025
+ z as F,
2026
+ fe as T,
2027
+ ue as _
2071
2028
  };