@servicetitan/dte-unlayer 0.89.0 → 0.90.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 (45) hide show
  1. package/dist/api-core.js +29 -22
  2. package/dist/api-core.js.map +1 -1
  3. package/dist/api-custom-tools.js +35 -42
  4. package/dist/api-custom-tools.js.map +1 -1
  5. package/dist/editor-core-source.d.ts +3 -3
  6. package/dist/editor-core-source.d.ts.map +1 -1
  7. package/dist/editor-core-source.js +4 -4
  8. package/dist/editor-core-source.js.map +1 -1
  9. package/dist/editor-core.js +2 -2
  10. package/dist/editor-core.js.map +1 -1
  11. package/dist/editor.js +73 -34
  12. package/dist/editor.js.map +1 -1
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/loadScript.d.ts.map +1 -1
  16. package/dist/loadScript.js +7 -6
  17. package/dist/loadScript.js.map +1 -1
  18. package/dist/shared/const.js +2 -1
  19. package/dist/shared/const.js.map +1 -1
  20. package/dist/shared/edit-icon.js +1 -0
  21. package/dist/shared/edit-icon.js.map +1 -1
  22. package/dist/shared/fonts.js +24 -17
  23. package/dist/shared/fonts.js.map +1 -1
  24. package/dist/shared/schema.d.ts.map +1 -1
  25. package/dist/shared/schema.js +91 -49
  26. package/dist/shared/schema.js.map +1 -1
  27. package/dist/shared/tools.d.ts.map +1 -1
  28. package/dist/shared/tools.js +13 -6
  29. package/dist/shared/tools.js.map +1 -1
  30. package/dist/store.d.ts +5 -5
  31. package/dist/store.d.ts.map +1 -1
  32. package/dist/store.js +235 -315
  33. package/dist/store.js.map +1 -1
  34. package/dist/tools.d.ts.map +1 -1
  35. package/dist/tools.js +120 -112
  36. package/dist/tools.js.map +1 -1
  37. package/dist/unlayer-interface.js +2 -1
  38. package/dist/unlayer-interface.js.map +1 -1
  39. package/dist/unlayer.d.ts +1 -0
  40. package/dist/unlayer.d.ts.map +1 -1
  41. package/dist/unlayer.js +115 -70
  42. package/dist/unlayer.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/editor-core-source.ts +3 -3
  45. package/src/unlayer.tsx +11 -1
package/dist/api-core.js CHANGED
@@ -1,26 +1,31 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
1
14
  import { editorCoreScript } from './editor-core';
2
15
  import { loadScriptSource } from './loadScript';
3
16
  const dummyStore = {
4
- renderHtml() {
17
+ renderHtml () {
5
18
  return '';
6
19
  },
7
- sendData() { },
8
- getTool() {
20
+ sendData () {},
21
+ getTool () {
9
22
  return undefined;
10
- },
23
+ }
11
24
  };
12
25
  export class UnlayerCoreApi {
13
- constructor() {
14
- Object.defineProperty(this, "loaded", {
15
- enumerable: true,
16
- configurable: true,
17
- writable: true,
18
- value: new Set()
19
- });
20
- }
21
26
  get dteStore() {
22
- var _a;
23
- return (_a = window.dteStore) !== null && _a !== void 0 ? _a : dummyStore;
27
+ var _window_dteStore;
28
+ return (_window_dteStore = window.dteStore) !== null && _window_dteStore !== void 0 ? _window_dteStore : dummyStore;
24
29
  }
25
30
  clean() {
26
31
  this.loaded = new Set();
@@ -33,30 +38,32 @@ export class UnlayerCoreApi {
33
38
  loadScriptSource(editorCoreScript);
34
39
  }
35
40
  getCustomToolModel(key) {
36
- var _a;
37
41
  const dteTool = this.dteStore.getTool(key);
38
42
  if (!dteTool) {
39
43
  return {};
40
44
  }
41
45
  try {
42
- return (_a = dteTool.getModel()) !== null && _a !== void 0 ? _a : {};
43
- }
44
- catch (_b) {
46
+ var _dteTool_getModel;
47
+ return (_dteTool_getModel = dteTool.getModel()) !== null && _dteTool_getModel !== void 0 ? _dteTool_getModel : {};
48
+ } catch (e) {
45
49
  return {};
46
50
  }
47
51
  }
48
52
  getToolDataSources(tool) {
49
- var _a;
50
53
  const dteTool = tool.slug ? this.dteStore.getTool(tool.slug) : undefined;
51
54
  if (!dteTool) {
52
55
  return [];
53
56
  }
54
57
  try {
55
- return (_a = dteTool.dataSources(tool.values)) !== null && _a !== void 0 ? _a : [];
56
- }
57
- catch (_b) {
58
+ var _dteTool_dataSources;
59
+ return (_dteTool_dataSources = dteTool.dataSources(tool.values)) !== null && _dteTool_dataSources !== void 0 ? _dteTool_dataSources : [];
60
+ } catch (e) {
58
61
  return [];
59
62
  }
60
63
  }
64
+ constructor(){
65
+ _define_property(this, "loaded", new Set());
66
+ }
61
67
  }
68
+
62
69
  //# sourceMappingURL=api-core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-core.js","sourceRoot":"","sources":["../src/api-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,UAAU,GAAiB;IAC7B,UAAU;QACN,OAAO,EAAE,CAAC;IACd,CAAC;IACD,QAAQ,KAAI,CAAC;IACb,OAAO;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ,CAAC;AAEF,MAAM,OAAO,cAAc;IAA3B;QACY;;;;mBAAS,IAAI,GAAG,EAAU;WAAC;IA8CvC,CAAC;IA5CG,IAAY,QAAQ;;QAChB,OAAO,MAAC,MAAc,CAAC,QAAQ,mCAAI,UAAU,CAAC;IAClD,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzB,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC;IAED,kBAAkB,CAAC,GAAW;;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACD,OAAO,MAAA,OAAO,CAAC,QAAQ,EAAE,mCAAI,EAAE,CAAC;QACpC,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,IAAuB;;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEzE,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACD,OAAO,MAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC;QAClD,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;CACJ"}
1
+ {"version":3,"sources":["../src/api-core.ts"],"sourcesContent":["import { editorCoreScript } from './editor-core';\nimport { loadScriptSource } from './loadScript';\nimport { UnlayerStore } from './shared/tools';\nimport { UnlayerDesignTool } from './unlayer-interface';\n\nconst dummyStore: UnlayerStore = {\n renderHtml() {\n return '';\n },\n sendData() {},\n getTool() {\n return undefined;\n },\n};\n\nexport class UnlayerCoreApi {\n private loaded = new Set<string>();\n\n private get dteStore(): UnlayerStore {\n return (window as any).dteStore ?? dummyStore;\n }\n\n clean() {\n this.loaded = new Set();\n }\n\n preloadCore() {\n if (this.loaded.has('_core')) {\n return;\n }\n this.loaded.add('_core');\n\n loadScriptSource(editorCoreScript);\n }\n\n getCustomToolModel(key: string): object {\n const dteTool = this.dteStore.getTool(key);\n\n if (!dteTool) {\n return {};\n }\n\n try {\n return dteTool.getModel() ?? {};\n } catch {\n return {};\n }\n }\n\n getToolDataSources(tool: UnlayerDesignTool): string[] {\n const dteTool = tool.slug ? this.dteStore.getTool(tool.slug) : undefined;\n\n if (!dteTool) {\n return [];\n }\n\n try {\n return dteTool.dataSources(tool.values) ?? [];\n } catch {\n return [];\n }\n }\n}\n"],"names":["editorCoreScript","loadScriptSource","dummyStore","renderHtml","sendData","getTool","undefined","UnlayerCoreApi","dteStore","window","clean","loaded","Set","preloadCore","has","add","getCustomToolModel","key","dteTool","getModel","getToolDataSources","tool","slug","dataSources","values"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,gBAAgB,QAAQ,gBAAgB;AACjD,SAASC,gBAAgB,QAAQ,eAAe;AAIhD,MAAMC,aAA2B;IAC7BC;QACI,OAAO;IACX;IACAC,aAAY;IACZC;QACI,OAAOC;IACX;AACJ;AAEA,OAAO,MAAMC;IAGT,IAAYC,WAAyB;YAC1B;QAAP,OAAO,CAAA,mBAAA,AAACC,OAAeD,QAAQ,cAAxB,8BAAA,mBAA4BN;IACvC;IAEAQ,QAAQ;QACJ,IAAI,CAACC,MAAM,GAAG,IAAIC;IACtB;IAEAC,cAAc;QACV,IAAI,IAAI,CAACF,MAAM,CAACG,GAAG,CAAC,UAAU;YAC1B;QACJ;QACA,IAAI,CAACH,MAAM,CAACI,GAAG,CAAC;QAEhBd,iBAAiBD;IACrB;IAEAgB,mBAAmBC,GAAW,EAAU;QACpC,MAAMC,UAAU,IAAI,CAACV,QAAQ,CAACH,OAAO,CAACY;QAEtC,IAAI,CAACC,SAAS;YACV,OAAO,CAAC;QACZ;QAEA,IAAI;gBACOA;YAAP,OAAOA,CAAAA,oBAAAA,QAAQC,QAAQ,gBAAhBD,+BAAAA,oBAAsB,CAAC;QAClC,EAAE,UAAM;YACJ,OAAO,CAAC;QACZ;IACJ;IAEAE,mBAAmBC,IAAuB,EAAY;QAClD,MAAMH,UAAUG,KAAKC,IAAI,GAAG,IAAI,CAACd,QAAQ,CAACH,OAAO,CAACgB,KAAKC,IAAI,IAAIhB;QAE/D,IAAI,CAACY,SAAS;YACV,OAAO,EAAE;QACb;QAEA,IAAI;gBACOA;YAAP,OAAOA,CAAAA,uBAAAA,QAAQK,WAAW,CAACF,KAAKG,MAAM,eAA/BN,kCAAAA,uBAAoC,EAAE;QACjD,EAAE,UAAM;YACJ,OAAO,EAAE;QACb;IACJ;;QA7CA,uBAAQP,UAAS,IAAIC;;AA8CzB"}
@@ -1,56 +1,49 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { loadScript } from './loadScript';
11
- import { unlayerCustomToolsGetRegisterUrls } from './tools';
12
- export class UnlayerCustomToolsApi {
13
- /*
14
- * ToDo: we need defaultPackageUrl to load schemas for single bundled components.
15
- * need to think how to better handle it
16
- */
17
- constructor(defaultPackageUrl) {
18
- Object.defineProperty(this, "defaultPackageUrl", {
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
19
5
  enumerable: true,
20
6
  configurable: true,
21
- writable: true,
22
- value: defaultPackageUrl
7
+ writable: true
23
8
  });
9
+ } else {
10
+ obj[key] = value;
24
11
  }
25
- loadSchemas(tools) {
26
- return __awaiter(this, void 0, void 0, function* () {
27
- const schemas = {};
28
- const schemaUrls = new Set();
29
- const toolKeys = new Set(tools.map(t => t.key));
30
- for (const tool of tools) {
31
- if (tool.groupUrl) {
32
- schemaUrls.add(`${tool.groupUrl}/schemas.json`);
33
- continue;
34
- }
35
- schemaUrls.add(`${this.defaultPackageUrl}/schemas.json`);
12
+ return obj;
13
+ }
14
+ import { loadScript } from './loadScript';
15
+ import { unlayerCustomToolsGetRegisterUrls } from './tools';
16
+ export class UnlayerCustomToolsApi {
17
+ async loadSchemas(tools) {
18
+ const schemas = {};
19
+ const schemaUrls = new Set();
20
+ const toolKeys = new Set(tools.map((t)=>t.key));
21
+ for (const tool of tools){
22
+ if (tool.groupUrl) {
23
+ schemaUrls.add(`${tool.groupUrl}/schemas.json`);
24
+ continue;
36
25
  }
37
- yield Promise.all(Array.from(schemaUrls).map(url => fetch(url)
38
- .then(response => response.json())
39
- .catch(() => ({}))
40
- .then(responseSchemas => {
41
- for (const key of Object.keys(schemas)) {
26
+ schemaUrls.add(`${this.defaultPackageUrl}/schemas.json`);
27
+ }
28
+ await Promise.all(Array.from(schemaUrls).map((url)=>fetch(url).then((response)=>response.json()).catch(()=>({})).then((responseSchemas)=>{
29
+ for (const key of Object.keys(schemas)){
42
30
  if (toolKeys.has(key)) {
43
31
  schemas[responseSchemas] = responseSchemas[key];
44
32
  }
45
33
  }
46
34
  })));
47
- return schemas;
48
- });
35
+ return schemas;
49
36
  }
50
- preload(tools) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- yield Promise.all(unlayerCustomToolsGetRegisterUrls(tools).map(url => loadScript(url).catch(() => null)));
53
- });
37
+ async preload(tools) {
38
+ await Promise.all(unlayerCustomToolsGetRegisterUrls(tools).map((url)=>loadScript(url).catch(()=>null)));
39
+ }
40
+ /*
41
+ * ToDo: we need defaultPackageUrl to load schemas for single bundled components.
42
+ * need to think how to better handle it
43
+ */ constructor(defaultPackageUrl){
44
+ _define_property(this, "defaultPackageUrl", void 0);
45
+ this.defaultPackageUrl = defaultPackageUrl;
54
46
  }
55
47
  }
48
+
56
49
  //# sourceMappingURL=api-custom-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-custom-tools.js","sourceRoot":"","sources":["../src/api-custom-tools.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iCAAiC,EAAE,MAAM,SAAS,CAAC;AAG5D,MAAM,OAAO,qBAAqB;IAC9B;;;OAGG;IACH,YAAoB,iBAAyB;QAAjC;;;;mBAAQ,iBAAiB;WAAQ;IAAG,CAAC;IAE3C,WAAW,CAAC,KAAgC;;YAC9C,MAAM,OAAO,GAAwB,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAExD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,eAAe,CAAC,CAAC;oBAChD,SAAS;gBACb,CAAC;gBAED,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,eAAe,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,OAAO,CAAC,GAAG,CACb,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAC7B,KAAK,CAAC,GAAG,CAAC;iBACL,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;iBACjC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;iBACjB,IAAI,CAAC,eAAe,CAAC,EAAE;gBACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpB,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;oBACpD,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CACT,CACJ,CAAC;YAEF,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;IAEK,OAAO,CAAC,KAAgC;;YAC1C,MAAM,OAAO,CAAC,GAAG,CACb,iCAAiC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CACzF,CAAC;QACN,CAAC;KAAA;CACJ"}
1
+ {"version":3,"sources":["../src/api-custom-tools.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { unlayerCustomToolsGetRegisterUrls } from './tools';\nimport { UnlayerEditorCustomTool } from './unlayer-interface';\n\nexport class UnlayerCustomToolsApi {\n /*\n * ToDo: we need defaultPackageUrl to load schemas for single bundled components.\n * need to think how to better handle it\n */\n constructor(private defaultPackageUrl: string) {}\n\n async loadSchemas(tools: UnlayerEditorCustomTool[]): Promise<Record<string, any>> {\n const schemas: Record<string, any> = {};\n const schemaUrls = new Set<string>();\n const toolKeys = new Set<string>(tools.map(t => t.key));\n\n for (const tool of tools) {\n if (tool.groupUrl) {\n schemaUrls.add(`${tool.groupUrl}/schemas.json`);\n continue;\n }\n\n schemaUrls.add(`${this.defaultPackageUrl}/schemas.json`);\n }\n\n await Promise.all(\n Array.from(schemaUrls).map(url =>\n fetch(url)\n .then(response => response.json())\n .catch(() => ({}))\n .then(responseSchemas => {\n for (const key of Object.keys(schemas)) {\n if (toolKeys.has(key)) {\n schemas[responseSchemas] = responseSchemas[key];\n }\n }\n })\n )\n );\n\n return schemas;\n }\n\n async preload(tools: UnlayerEditorCustomTool[]) {\n await Promise.all(\n unlayerCustomToolsGetRegisterUrls(tools).map(url => loadScript(url).catch(() => null))\n );\n }\n}\n"],"names":["loadScript","unlayerCustomToolsGetRegisterUrls","UnlayerCustomToolsApi","loadSchemas","tools","schemas","schemaUrls","Set","toolKeys","map","t","key","tool","groupUrl","add","defaultPackageUrl","Promise","all","Array","from","url","fetch","then","response","json","catch","responseSchemas","Object","keys","has","preload"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,iCAAiC,QAAQ,UAAU;AAG5D,OAAO,MAAMC;IAOT,MAAMC,YAAYC,KAAgC,EAAgC;QAC9E,MAAMC,UAA+B,CAAC;QACtC,MAAMC,aAAa,IAAIC;QACvB,MAAMC,WAAW,IAAID,IAAYH,MAAMK,GAAG,CAACC,CAAAA,IAAKA,EAAEC,GAAG;QAErD,KAAK,MAAMC,QAAQR,MAAO;YACtB,IAAIQ,KAAKC,QAAQ,EAAE;gBACfP,WAAWQ,GAAG,CAAC,GAAGF,KAAKC,QAAQ,CAAC,aAAa,CAAC;gBAC9C;YACJ;YAEAP,WAAWQ,GAAG,CAAC,GAAG,IAAI,CAACC,iBAAiB,CAAC,aAAa,CAAC;QAC3D;QAEA,MAAMC,QAAQC,GAAG,CACbC,MAAMC,IAAI,CAACb,YAAYG,GAAG,CAACW,CAAAA,MACvBC,MAAMD,KACDE,IAAI,CAACC,CAAAA,WAAYA,SAASC,IAAI,IAC9BC,KAAK,CAAC,IAAO,CAAA,CAAC,CAAA,GACdH,IAAI,CAACI,CAAAA;gBACF,KAAK,MAAMf,OAAOgB,OAAOC,IAAI,CAACvB,SAAU;oBACpC,IAAIG,SAASqB,GAAG,CAAClB,MAAM;wBACnBN,OAAO,CAACqB,gBAAgB,GAAGA,eAAe,CAACf,IAAI;oBACnD;gBACJ;YACJ;QAIZ,OAAON;IACX;IAEA,MAAMyB,QAAQ1B,KAAgC,EAAE;QAC5C,MAAMY,QAAQC,GAAG,CACbhB,kCAAkCG,OAAOK,GAAG,CAACW,CAAAA,MAAOpB,WAAWoB,KAAKK,KAAK,CAAC,IAAM;IAExF;IA1CA;;;KAGC,GACD,YAAY,AAAQV,iBAAyB,CAAE;;aAA3BA,oBAAAA;IAA4B;AAuCpD"}