@abyss-project/commons-front-core 1.0.146 → 1.0.147

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 (44) hide show
  1. package/dist/{CookieConsentSettings.component-OElkXdNK.js → CookieConsentSettings.component-Dkw8Ye0E.js} +205 -145
  2. package/dist/components/Layouts/AbyssBillingPlan/AbyssBillingPlan.component.d.ts +1 -1
  3. package/dist/components/PdfEditor/operations/actions.d.ts +14 -0
  4. package/dist/components/PdfEditor/operations/rotate-coords.d.ts +19 -0
  5. package/dist/components/PdfEditor/operations/rotate-coords.spec.d.ts +1 -0
  6. package/dist/components/PdfEditor/signature/SignaturePicker.d.ts +3 -0
  7. package/dist/components/PdfEditor/signature/SignatureSavedList.d.ts +3 -0
  8. package/dist/components/PdfEditor/signature/resolve-asset.d.ts +3 -0
  9. package/dist/components/PdfEditor/signature/resolve-asset.spec.d.ts +1 -0
  10. package/dist/components/PdfEditor/tools/FillFieldsTool.d.ts +2 -1
  11. package/dist/components/PdfEditor/tools/SignatureTool.d.ts +3 -0
  12. package/dist/components/PdfEditor/tools/Toolbar.d.ts +6 -0
  13. package/dist/components/PdfEditor/types.d.ts +9 -1
  14. package/dist/components/PdfEditor/viewer/PageOverlay.d.ts +3 -1
  15. package/dist/components/PdfEditor/viewer/PdfCanvas.d.ts +6 -2
  16. package/dist/components/PdfEditor/viewer/ViewerControls.d.ts +15 -0
  17. package/dist/cookie-consent.js +1 -1
  18. package/dist/hooks/use-rich-intl.hook.d.ts +62 -2
  19. package/dist/{index-C-0bb3BS.js → index-2CKJrPca.js} +2 -2
  20. package/dist/{index-HPIAkAU-.js → index-B3Q0CXvH.js} +2 -2
  21. package/dist/{index-paxe4Y8a.js → index-BHkn2ltL.js} +2 -2
  22. package/dist/{index-JqXrUnnS.js → index-BL7GRhPa.js} +4 -4
  23. package/dist/{index-CWQyokns.js → index-BOsYmSCD.js} +28048 -27307
  24. package/dist/{index-pojd1-xt.js → index-BW9Bye_5.js} +3 -3
  25. package/dist/{index-VzGJqZUr.js → index-BqukycfU.js} +3 -3
  26. package/dist/{index-DPJn-INz.js → index-C2KsBRfQ.js} +2 -2
  27. package/dist/{index-DP9EENt-.js → index-CaN4t0Xc.js} +2 -2
  28. package/dist/{index-DAG2YmhY.js → index-CrfvkYYN.js} +2 -2
  29. package/dist/{index-D-Z-Yepf.js → index-Cx0vAIWv.js} +2 -2
  30. package/dist/{index-D-prSy8i.js → index-D8zo5pJ7.js} +3 -3
  31. package/dist/{index-BStJ2eR5.js → index-DBRSsvnV.js} +2 -2
  32. package/dist/{index-C4iVvX_c.js → index-DCJSXRWb.js} +1 -1
  33. package/dist/{index-CTzGCHT1.js → index-DCjRpdx3.js} +4 -4
  34. package/dist/{index-CeZ2OKqT.js → index-DFfm18gp.js} +2 -2
  35. package/dist/{index-DMJCOIN6.js → index-DayoEcuw.js} +2 -2
  36. package/dist/{index-CCaYRiXR.js → index-Dn-WBCKE.js} +2 -2
  37. package/dist/{index-aJDianQ2.js → index-EZoUoL9o.js} +3 -3
  38. package/dist/{index-DedcVRIy.js → index-GG9dANvs.js} +4 -4
  39. package/dist/{index-0DKoS1Ho.js → index-HwfQ82MI.js} +2 -2
  40. package/dist/{index-C_VHuOIZ.js → index-xJbVPHgr.js} +2 -2
  41. package/dist/index.js +2 -2
  42. package/dist/translations/en.d.ts +31 -1
  43. package/dist/translations/fr.d.ts +31 -1
  44. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  import { default as React } from 'react';
2
2
  import { IPlanTemplate } from '@abyss-project/main';
3
3
  type Props = {
4
- planTemplate: IPlanTemplate;
4
+ planTemplate?: IPlanTemplate | null;
5
5
  label?: string;
6
6
  abyssUrl?: string;
7
7
  };
@@ -0,0 +1,14 @@
1
+ import { AcroFormField, EditorAction, PdfOperation, ToolKind } from '../types';
2
+ export declare const addOperation: (operation: PdfOperation) => EditorAction;
3
+ export declare const addOperationAllPages: (operation: PdfOperation, pageIndices: number[]) => EditorAction;
4
+ export declare const updateOperation: (opId: string, operation: PdfOperation) => EditorAction;
5
+ export declare const moveOperation: (opId: string, operation: PdfOperation) => EditorAction;
6
+ export declare const deleteOperation: (opId: string) => EditorAction;
7
+ export declare const undo: () => EditorAction;
8
+ export declare const redo: () => EditorAction;
9
+ export declare const setActiveTool: (tool: ToolKind) => EditorAction;
10
+ export declare const setActivePage: (pageIndex: number) => EditorAction;
11
+ export declare const setAcroFormFields: (fields: AcroFormField[]) => EditorAction;
12
+ export declare const setPendingSignature: (dataUrl: string | null) => EditorAction;
13
+ export declare const setPendingText: (text: string | null) => EditorAction;
14
+ export declare const setPendingApplyAllPages: (enabled: boolean) => EditorAction;
@@ -0,0 +1,19 @@
1
+ export type Rotation = 0 | 90 | 180 | 270;
2
+ export declare const normalizeRotation: (deg: number) => Rotation;
3
+ export declare const viewSize: (cw: number, ch: number, rotation: Rotation) => {
4
+ w: number;
5
+ h: number;
6
+ };
7
+ export declare const contentSize: (vw: number, vh: number, rotation: Rotation) => {
8
+ w: number;
9
+ h: number;
10
+ };
11
+ export declare const contentToView: (x: number, y: number, rotation: Rotation, cw: number, ch: number) => {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ export declare const viewToContent: (x: number, y: number, rotation: Rotation, cw: number, ch: number) => {
16
+ x: number;
17
+ y: number;
18
+ };
19
+ export declare const innerLayerTransform: (rotation: Rotation, contentWidthPx: number, contentHeightPx: number) => string;
@@ -1,5 +1,6 @@
1
1
  import { default as React } from 'react';
2
2
  import { AssetPalette, SaveSignatureFn } from '../types';
3
+ import { ResolveAssetBytes } from './resolve-asset';
3
4
  interface SignaturePickerProps {
4
5
  open: boolean;
5
6
  onClose: () => void;
@@ -7,6 +8,8 @@ interface SignaturePickerProps {
7
8
  onCaptureText?: (text: string) => void;
8
9
  assetPalette?: AssetPalette;
9
10
  onSaveSignature?: SaveSignatureFn;
11
+ resolveAssetBytes?: ResolveAssetBytes;
12
+ onAssetError?: (message: string) => void;
10
13
  manageAssetsUrl?: string;
11
14
  }
12
15
  export declare const SignaturePicker: React.FC<SignaturePickerProps>;
@@ -1,10 +1,13 @@
1
1
  import { default as React } from 'react';
2
2
  import { AssetPalette } from '../types';
3
+ import { ResolveAssetBytes } from './resolve-asset';
3
4
  interface SignatureSavedListProps {
4
5
  palette: AssetPalette;
5
6
  onPick: (dataUrl: string) => void;
6
7
  onPickText?: (text: string) => void;
7
8
  onClose: () => void;
9
+ resolveAssetBytes?: ResolveAssetBytes;
10
+ onAssetError?: (message: string) => void;
8
11
  }
9
12
  export declare const SignatureSavedList: React.FC<SignatureSavedListProps>;
10
13
  export {};
@@ -0,0 +1,3 @@
1
+ import { AssetPaletteItem } from '../types';
2
+ export type ResolveAssetBytes = (item: AssetPaletteItem) => Promise<string>;
3
+ export declare const resolveAssetDataUrl: (item: AssetPaletteItem, resolver?: ResolveAssetBytes) => Promise<string>;
@@ -1,7 +1,8 @@
1
1
  import { default as React } from 'react';
2
- import { AcroFormField, EditorAction } from '../types';
2
+ import { AcroFormField, EditorAction, PdfOperation } from '../types';
3
3
  interface FillFieldsToolProps {
4
4
  fields: AcroFormField[];
5
+ operations: PdfOperation[];
5
6
  dispatch: React.Dispatch<EditorAction>;
6
7
  }
7
8
  export declare const FillFieldsTool: React.FC<FillFieldsToolProps>;
@@ -1,11 +1,14 @@
1
1
  import { default as React } from 'react';
2
2
  import { AssetPalette, EditorAction, SaveSignatureFn } from '../types';
3
+ import { ResolveAssetBytes } from '../signature/resolve-asset';
3
4
  interface SignatureToolProps {
4
5
  pendingSignature: string | null;
5
6
  pendingApplyAllPages: boolean;
6
7
  dispatch: React.Dispatch<EditorAction>;
7
8
  assetPalette?: AssetPalette;
8
9
  onSaveSignature?: SaveSignatureFn;
10
+ resolveAssetBytes?: ResolveAssetBytes;
11
+ onAssetError?: (message: string) => void;
9
12
  manageAssetsUrl?: string;
10
13
  }
11
14
  export declare const SignatureTool: React.FC<SignatureToolProps>;
@@ -1,5 +1,6 @@
1
1
  import { default as React } from 'react';
2
2
  import { AssetPalette, ToolKind, EditorAction, ExportOption } from '../types';
3
+ import { ResolveAssetBytes } from '../signature/resolve-asset';
3
4
  interface ToolbarProps {
4
5
  activeTool: ToolKind;
5
6
  canUndo: boolean;
@@ -12,7 +13,12 @@ interface ToolbarProps {
12
13
  exportOptions: ExportOption[];
13
14
  fileName?: string;
14
15
  assetPalette?: AssetPalette;
16
+ resolveAssetBytes?: ResolveAssetBytes;
17
+ onAssetError?: (message: string) => void;
15
18
  pendingApplyAllPages?: boolean;
19
+ compact?: boolean;
20
+ sidebarOpen?: boolean;
21
+ onToggleSidebar?: () => void;
16
22
  }
17
23
  export declare const Toolbar: React.FC<ToolbarProps>;
18
24
  export {};
@@ -126,7 +126,7 @@ export type EditorAction = {
126
126
  type: 'ADD_OPERATION_ALL_PAGES';
127
127
  payload: {
128
128
  op: PdfOperation;
129
- pageCount: number;
129
+ pageIndices: number[];
130
130
  };
131
131
  } | {
132
132
  type: 'UPDATE_OPERATION';
@@ -134,6 +134,12 @@ export type EditorAction = {
134
134
  opId: string;
135
135
  op: PdfOperation;
136
136
  };
137
+ } | {
138
+ type: 'MOVE_OPERATION';
139
+ payload: {
140
+ opId: string;
141
+ op: PdfOperation;
142
+ };
137
143
  } | {
138
144
  type: 'DELETE_OPERATION';
139
145
  payload: {
@@ -205,6 +211,8 @@ export interface PdfEditorProps {
205
211
  initialOperations?: PdfOperation[];
206
212
  operationsAdapter?: OperationsAdapter;
207
213
  assetPalette?: AssetPalette;
214
+ resolveAssetBytes?: (item: AssetPaletteItem) => Promise<string>;
215
+ onAssetError?: (message: string) => void;
208
216
  onSaveSignature?: SaveSignatureFn;
209
217
  onExport: (request: ExportRequest) => Promise<void>;
210
218
  exportOptions: ExportOption[];
@@ -11,11 +11,13 @@ interface PageOverlayProps {
11
11
  pendingSignature: string | null;
12
12
  pendingText: string | null;
13
13
  pendingApplyAllPages: boolean;
14
- numPages: number;
14
+ pageIndices: number[];
15
15
  dispatch: React.Dispatch<EditorAction>;
16
16
  textInput?: string;
17
17
  drawColor?: string;
18
18
  drawStrokeWidth?: number;
19
+ scale?: number;
20
+ rotation?: number;
19
21
  }
20
22
  export declare const PageOverlay: React.FC<PageOverlayProps>;
21
23
  export {};
@@ -11,7 +11,11 @@ interface PdfCanvasProps {
11
11
  scale?: number;
12
12
  activePageIndex: number;
13
13
  pageOrder: number[];
14
- onPageDimensions?: (pageIndex: number, width: number, height: number) => void;
14
+ onPageDimensions?: (pageIndex: number, width: number, height: number, totalRotation: number, pointWidth: number) => void;
15
+ onVisiblePageChange?: (displayIndex: number) => void;
15
16
  children?: (virtualIndex: number, displayIndex: number) => React.ReactNode;
16
17
  }
17
- export declare const PdfCanvas: React.FC<PdfCanvasProps>;
18
+ export interface PdfCanvasHandle {
19
+ scrollToPage: (displayIndex: number) => void;
20
+ }
21
+ export declare const PdfCanvas: React.ForwardRefExoticComponent<PdfCanvasProps & React.RefAttributes<PdfCanvasHandle>>;
@@ -0,0 +1,15 @@
1
+ import { default as React } from 'react';
2
+ interface ViewerControlsProps {
3
+ zoom: number;
4
+ onZoomIn: () => void;
5
+ onZoomOut: () => void;
6
+ onFitWidth: () => void;
7
+ onResetZoom: () => void;
8
+ canZoomIn: boolean;
9
+ canZoomOut: boolean;
10
+ currentPage: number;
11
+ totalPages: number;
12
+ onGoToPage: (index: number) => void;
13
+ }
14
+ export declare const ViewerControls: React.FC<ViewerControlsProps>;
15
+ export {};
@@ -1,4 +1,4 @@
1
- import { A as s, c as a, C as n, a as i, R as C, V as t, d as r, f as k, r as c, e as A, u as l, b, w as d } from "./CookieConsentSettings.component-OElkXdNK.js";
1
+ import { A as s, c as a, C as n, a as i, R as C, V as t, d as r, f as k, r as c, e as A, u as l, b, w as d } from "./CookieConsentSettings.component-Dkw8Ye0E.js";
2
2
  export {
3
3
  s as AbyssCookieConsentProvider,
4
4
  a as COOKIE_NAME,
@@ -229,10 +229,25 @@ export declare const translations: {
229
229
  'save-to-cloud': string;
230
230
  'quick-sigs': string;
231
231
  'quick-texts': string;
232
+ 'toggle-pages': string;
233
+ aria: {
234
+ tools: string;
235
+ history: string;
236
+ 'quick-signatures': string;
237
+ };
232
238
  };
233
239
  sidebar: {
234
240
  pages: string;
235
241
  };
242
+ viewer: {
243
+ 'zoom-in': string;
244
+ 'zoom-out': string;
245
+ 'fit-width': string;
246
+ 'reset-zoom': string;
247
+ 'prev-page': string;
248
+ 'next-page': string;
249
+ 'page-indicator': string;
250
+ };
236
251
  insert: {
237
252
  button: string;
238
253
  reading: string;
@@ -250,6 +265,7 @@ export declare const translations: {
250
265
  };
251
266
  action: {
252
267
  cancel: string;
268
+ delete: string;
253
269
  };
254
270
  error: {
255
271
  'load-failed': string;
@@ -257,6 +273,7 @@ export declare const translations: {
257
273
  };
258
274
  text: {
259
275
  hint: string;
276
+ placeholder: string;
260
277
  };
261
278
  draw: {
262
279
  hint: string;
@@ -271,6 +288,7 @@ export declare const translations: {
271
288
  'add-button': string;
272
289
  'apply-all-pages': string;
273
290
  'manage-assets': string;
291
+ 'asset-load-failed': string;
274
292
  clear: string;
275
293
  'picker-title': string;
276
294
  tabs: {
@@ -335,6 +353,8 @@ export declare const translations: {
335
353
  'fill-fields': {
336
354
  empty: string;
337
355
  detected: string;
356
+ flatten: string;
357
+ 'flatten-hint': string;
338
358
  };
339
359
  page: {
340
360
  inserted: string;
@@ -951,6 +971,7 @@ export declare const translations: {
951
971
  };
952
972
  billing: {
953
973
  'current-plan': string;
974
+ 'free-plan': string;
954
975
  tier: {
955
976
  FREEMIUM: string;
956
977
  DEFAULT: string;
@@ -1030,6 +1051,14 @@ export declare const translations: {
1030
1051
  name: string;
1031
1052
  description: string;
1032
1053
  };
1054
+ 'family-free': {
1055
+ name: string;
1056
+ description: string;
1057
+ };
1058
+ 'family-paid': {
1059
+ name: string;
1060
+ description: string;
1061
+ };
1033
1062
  };
1034
1063
  'plan-feature': {
1035
1064
  PROJECTS_COUNT: string;
@@ -1051,13 +1080,14 @@ export declare const translations: {
1051
1080
  banner: {
1052
1081
  'no-family': string;
1053
1082
  'no-family-cta': string;
1083
+ 'no-family-sub': string;
1054
1084
  pending: string;
1055
- active: string;
1056
1085
  manage: string;
1057
1086
  'owner-badge': string;
1058
1087
  'coming-soon': string;
1059
1088
  settings: {
1060
1089
  'no-family-description': string;
1090
+ 'join-hint': string;
1061
1091
  'pending-description': string;
1062
1092
  'active-description': string;
1063
1093
  'owner-description': string;
@@ -1483,10 +1513,25 @@ export declare const translations: {
1483
1513
  'save-to-cloud': string;
1484
1514
  'quick-sigs': string;
1485
1515
  'quick-texts': string;
1516
+ 'toggle-pages': string;
1517
+ aria: {
1518
+ tools: string;
1519
+ history: string;
1520
+ 'quick-signatures': string;
1521
+ };
1486
1522
  };
1487
1523
  sidebar: {
1488
1524
  pages: string;
1489
1525
  };
1526
+ viewer: {
1527
+ 'zoom-in': string;
1528
+ 'zoom-out': string;
1529
+ 'fit-width': string;
1530
+ 'reset-zoom': string;
1531
+ 'prev-page': string;
1532
+ 'next-page': string;
1533
+ 'page-indicator': string;
1534
+ };
1490
1535
  insert: {
1491
1536
  button: string;
1492
1537
  reading: string;
@@ -1504,6 +1549,7 @@ export declare const translations: {
1504
1549
  };
1505
1550
  action: {
1506
1551
  cancel: string;
1552
+ delete: string;
1507
1553
  };
1508
1554
  error: {
1509
1555
  'load-failed': string;
@@ -1511,6 +1557,7 @@ export declare const translations: {
1511
1557
  };
1512
1558
  text: {
1513
1559
  hint: string;
1560
+ placeholder: string;
1514
1561
  };
1515
1562
  draw: {
1516
1563
  hint: string;
@@ -1525,6 +1572,7 @@ export declare const translations: {
1525
1572
  'add-button': string;
1526
1573
  'apply-all-pages': string;
1527
1574
  'manage-assets': string;
1575
+ 'asset-load-failed': string;
1528
1576
  clear: string;
1529
1577
  'picker-title': string;
1530
1578
  tabs: {
@@ -1589,6 +1637,8 @@ export declare const translations: {
1589
1637
  'fill-fields': {
1590
1638
  empty: string;
1591
1639
  detected: string;
1640
+ flatten: string;
1641
+ 'flatten-hint': string;
1592
1642
  };
1593
1643
  page: {
1594
1644
  inserted: string;
@@ -2205,6 +2255,7 @@ export declare const translations: {
2205
2255
  };
2206
2256
  billing: {
2207
2257
  'current-plan': string;
2258
+ 'free-plan': string;
2208
2259
  tier: {
2209
2260
  FREEMIUM: string;
2210
2261
  DEFAULT: string;
@@ -2284,6 +2335,14 @@ export declare const translations: {
2284
2335
  name: string;
2285
2336
  description: string;
2286
2337
  };
2338
+ 'family-free': {
2339
+ name: string;
2340
+ description: string;
2341
+ };
2342
+ 'family-paid': {
2343
+ name: string;
2344
+ description: string;
2345
+ };
2287
2346
  };
2288
2347
  'plan-feature': {
2289
2348
  PROJECTS_COUNT: string;
@@ -2496,13 +2555,14 @@ export declare const translations: {
2496
2555
  banner: {
2497
2556
  'no-family': string;
2498
2557
  'no-family-cta': string;
2558
+ 'no-family-sub': string;
2499
2559
  pending: string;
2500
- active: string;
2501
2560
  manage: string;
2502
2561
  'owner-badge': string;
2503
2562
  'coming-soon': string;
2504
2563
  settings: {
2505
2564
  'no-family-description': string;
2565
+ 'join-hint': string;
2506
2566
  'pending-description': string;
2507
2567
  'active-description': string;
2508
2568
  'owner-description': string;
@@ -1,5 +1,5 @@
1
- import { L as r } from "./index-C4iVvX_c.js";
2
- import { s as e, t as O, a as s, L as X, i as l, f as Y, c as $, j as S, m as o, g as t } from "./index-CWQyokns.js";
1
+ import { L as r } from "./index-DCJSXRWb.js";
2
+ import { s as e, t as O, a as s, L as X, i as l, f as Y, c as $, j as S, m as o, g as t } from "./index-BOsYmSCD.js";
3
3
  const Z = e({
4
4
  null: O.null,
5
5
  instanceof: O.operatorKeyword,
@@ -1,5 +1,5 @@
1
- import { L as M, E as X, a as h, C as E } from "./index-C4iVvX_c.js";
2
- import { s as A, t as i, E as C, a as J, n as o, L as I, b as B, d as D, e as u, h as K, i as N, f as H, c as g, j as F, m as OO, g as aO, J as j, x as QO, o as iO, I as eO } from "./index-CWQyokns.js";
1
+ import { L as M, E as X, a as h, C as E } from "./index-DCJSXRWb.js";
2
+ import { s as A, t as i, E as C, a as J, n as o, L as I, b as B, d as D, e as u, h as K, i as N, f as H, c as g, j as F, m as OO, g as aO, J as j, x as QO, o as iO, I as eO } from "./index-BOsYmSCD.js";
3
3
  const $O = 315, rO = 316, v = 1, tO = 2, lO = 3, nO = 4, oO = 317, sO = 319, ZO = 320, PO = 5, pO = 6, cO = 0, q = [
4
4
  9,
5
5
  10,
@@ -1,5 +1,5 @@
1
- import { L as o, E as t } from "./index-C4iVvX_c.js";
2
- import { s, t as Q, a as j, L as x, i as f, f as c, c as a, j as W, m as S, g as l } from "./index-CWQyokns.js";
1
+ import { L as o, E as t } from "./index-DCJSXRWb.js";
2
+ import { s, t as Q, a as j, L as x, i as f, f as c, c as a, j as W, m as S, g as l } from "./index-BOsYmSCD.js";
3
3
  const r = 1, q = 2, u = 3, n = 82, Z = 76, V = 117, T = 85, z = 97, w = 122, m = 65, b = 90, y = 95, i = 48, Y = 34, v = 40, P = 41, _ = 32, U = 62, p = new t((O) => {
4
4
  if (O.next == Z || O.next == T ? O.advance() : O.next == V && (O.advance(), O.next == i + 8 && O.advance()), O.next != n || (O.advance(), O.next != Y)) return;
5
5
  O.advance();
@@ -1,7 +1,7 @@
1
- import { a as p, L as u, p as n, s as l, t as e } from "./index-CWQyokns.js";
2
- import { html as m } from "./index-CTzGCHT1.js";
3
- import { javascriptLanguage as b } from "./index-HPIAkAU-.js";
4
- import { L as S, a as r } from "./index-C4iVvX_c.js";
1
+ import { a as p, L as u, p as n, s as l, t as e } from "./index-BOsYmSCD.js";
2
+ import { html as m } from "./index-DCjRpdx3.js";
3
+ import { javascriptLanguage as b } from "./index-B3Q0CXvH.js";
4
+ import { L as S, a as r } from "./index-DCJSXRWb.js";
5
5
  const c = /* @__PURE__ */ S.deserialize({
6
6
  version: 14,
7
7
  states: "%pOVOWOOObQPOOOpOSO'#C_OOOO'#Cp'#CpQVOWOOQxQPOOO!TQQOOQ!YQPOOOOOO,58y,58yO!_OSO,58yOOOO-E6n-E6nO!dQQO'#CqQ{QPOOO!iQPOOQ{QPOOO!qQPOOOOOO1G.e1G.eOOQO,59],59]OOQO-E6o-E6oO!yOpO'#CiO#RO`O'#CiQOQPOOO#ZO#tO'#CmO#fO!bO'#CmOOQO,59T,59TO#qOpO,59TO#vO`O,59TOOOO'#Cr'#CrO#{O#tO,59XOOQO,59X,59XOOOO'#Cs'#CsO$WO!bO,59XOOQO1G.o1G.oOOOO-E6p-E6pOOQO1G.s1G.sOOOO-E6q-E6q",