From 61709c0945e91373152e3a70d684d9580a9962c2 Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Tue, 20 Oct 2026 09:54:55 +0200 Subject: [PATCH 1/3] feat(write,sheets): scroll to the page bottom, fix pasting line breaks, Pageless by default, mobile layouts (T-1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Write, Pages: the last block gets the rest of its page plus the 48 px canvas padding as bottom padding (PaginationStylePhase.tailPadding), so the scroll extent reaches the last page's bottom edge also when the page isn't full (#1). - Write, paste (#21): removing a block with spelling errors cleared its underlines from the document listener, before super_editor's layout saw the removal; the layout restyled its stale view model, threw "No such position in document" and stopped updating, so pasted line breaks stayed visible. The spellcheck now clears them in a microtask. - New documents (blank, built-in templates, the welcome document, Markdown) are Pageless unless the user's default layout is Pages (DriveService.newDocumentPageSetup, UserService.defaultPageless); the setting shows Pageless when unset (#22). - Write on mobile: always Pageless (layout only, the page setup is unchanged), 16 px around the text, a 1 px border line under the title row, and no text selection (selectionGuard collapses user selections, which a read-only document doesn't show) (#16). - Sheets on mobile: no cell selection (every pointer pans the grid, the selection isn't painted), taller sheet tabs, and only the all-sheets menu and the tabs in the tab bar (#17). - Specs: Write 04 §28-29, 05 §13.3/§16/§17, suite 02 §6.1, Sheets 03 §5, 04 §6, STATUS; TODO. Co-Authored-By: Claude Opus 5.5 --- TODO.md | 6 +- specs/02-design-system.md | 20 +- specs/wonky_sheets/03-grid-and-editing.md | 2 +- .../wonky_sheets/04-screens-menus-toolbar.md | 7 + specs/wonky_sheets/STATUS.md | 5 + specs/wonky_write/04-editor.md | 22 +- specs/wonky_write/05-screens-menus-toolbar.md | 9 +- .../lib/src/platform/drive/drive_service.dart | 29 ++- .../lib/src/platform/users/user_service.dart | 11 + .../platform/drive_endpoint_test.dart | 63 ++++++ .../platform/user_endpoint_test.dart | 10 + .../write/mcp/write_tools_test.dart | 7 +- wonky_sheets/lib/features/grid/grid_area.dart | 16 +- .../lib/features/grid/grid_touch.dart | 11 +- .../grid/paint/layers/overlay_layers.dart | 6 +- .../lib/features/tab_bar/sheet_tab_bar.dart | 149 ++++++++----- .../sheet_editor_screen_test.dart | 143 +++++++++++++ .../controller/write_editor_controller.dart | 16 ++ .../editor/pagination/pagination.dart | 52 ++++- .../features/editor/setup/editor_factory.dart | 24 +++ .../lib/features/editor/ui/wonky_editor.dart | 76 +++++-- .../screen/write_document_controller.dart | 17 +- .../screen/write_document_screen.dart | 19 ++ .../lib/features/settings/write_settings.dart | 7 +- .../settings/write_settings_commands.dart | 10 +- .../features/spellcheck/write_spellcheck.dart | 17 +- .../editor/paste/editor_clipboard_test.dart | 73 +++++++ .../ui/wonky_editor_pagination_test.dart | 56 +++++ .../screen/write_document_screen_test.dart | 202 ++++++++++++++++-- .../settings/write_settings_test.dart | 9 + .../spellcheck/write_spellcheck_test.dart | 25 +++ 31 files changed, 980 insertions(+), 139 deletions(-) diff --git a/TODO.md b/TODO.md index 6836526c..ef1f83dd 100644 --- a/TODO.md +++ b/TODO.md @@ -352,9 +352,9 @@ Everything below is deferred; the app works without it. Areas are in rough prior - **Settings split (D-12 follow-ups, suite 04 §4):** *Sign-in & security* lacks the Google account link status / *Link Google account* (needs a server call listing the user's identity providers) and *Sign out of all devices* (P2). *Offline & device data* shows only the current - app's device data, not the summary row per other app on this device. Write's *Page & export* defaults are stored but not yet - applied: new documents ignore the default layout / saved page setup and the export dialog - doesn't preselect the default format (as in v1). The `/settings/sheets` hand-over from + app's device data, not the summary row per other app on this device. Write's *Page & export* defaults are stored but not all + applied: new documents apply the default layout (T-1) but ignore the saved page setup, and the + export dialog doesn't preselect the default format (as in v1). The `/settings/sheets` hand-over from Write and the `/settings/write` redirect were checked in the browser (D-18); the *Settings of other apps* links were not clicked. - **Shared chart packages (D-3 follow-ups, SL-27 in M10, Slides 08 §2.7, §2.10):** `ChartData` diff --git a/specs/02-design-system.md b/specs/02-design-system.md index 11d8e24e..884d99b6 100644 --- a/specs/02-design-system.md +++ b/specs/02-design-system.md @@ -300,12 +300,20 @@ tests). There is no mobile editing; v2 apps are the same Flutter web builds. the frame the layout starts in, and `false` when it ends; the apps fold it into their view mode, so no edit command is enabled whatever the role and View › Mode › Editing is off. It is layout, not a change of the document: nothing is undoable or remembered, and widening the - window restores the mode the user had. Write: Viewing, no comment margin, and (T-12) 16 px - beside the text (`WriteDocumentScreen.mobileTextPadding` as `WonkyEditor.compactPadding`) - instead of the page margins — the page fills the width — or the pageless padding; the page - setup itself is unchanged. Sheets: the grid and sheet tabs (no formula bar or filter-view - bar), with (T-12) a 1 px line in the theme's `border` color between the title row and the - grid (`sheets.mobile.separator`). Slides: Slides 04 §16.1 and the presenter mode of + window restores the mode the user had. Write: Viewing, no comment margin, (T-1) always + Pageless (`WriteDocumentController.setReadOnlyView` sets the view's layout; the page setup + itself is unchanged), (T-12, T-1) 16 px beside, above and below the text + (`WriteDocumentScreen.mobileTextPadding` as `WonkyEditor.compactPadding`) instead of the + pageless padding, (T-1) a 1 px line in the theme's `border` color between the title row and + the page (`write.mobile.separator`), and (T-1) no text selection: the selections the user + makes are collapsed (`selectionGuard`, `WriteEditorController.selectable`), which a + read-only document doesn't show, so taps and swipes only scroll. Sheets: the grid and sheet + tabs (no formula bar or filter-view bar), with (T-12) a 1 px line in the theme's `border` + color between the title row and the grid (`sheets.mobile.separator`); (T-1) no cell + selection (every pointer pans the grid, taps and long presses do nothing, the selection + isn't painted) and a touch tab bar: 48 px tall with 42 px tabs in 15 px text, the all-sheets + menu (40 px) and the tabs only — no add button, tab menus (▾ or right-click), scroll arrows, + Explore or selection stats. Slides: Slides 04 §16.1 and the presenter mode of Slides 10 §1.6. - **Presenter bar** (`WonkyPresenterBar`, `wonky_ui`): the 52 px top bar of the mobile presenter mode — close (*Exit presenter mode*), title with "3 of 12", *Previous slide* / *Next slide* diff --git a/specs/wonky_sheets/03-grid-and-editing.md b/specs/wonky_sheets/03-grid-and-editing.md index df4b72d5..858bf5a9 100644 --- a/specs/wonky_sheets/03-grid-and-editing.md +++ b/specs/wonky_sheets/03-grid-and-editing.md @@ -517,7 +517,7 @@ Undo restores the previous count. |-------|----------| | Mouse wheel | Vertical: 3 × default row height × zoom per notch (platform delta respected); Shift+wheel: horizontal | | Trackpad | Pixel-precise 2D scrolling with platform momentum (`diagonalDragBehavior.free`) | -| Touch | `GridTouchTracker` (`grid/grid_touch.dart`): a tap selects like a click (double-tap edits); one finger past the touch slop scrolls, with a `ClampingScrollSimulation` fling on release; a long press (500 ms) then drag runs the grid's pointer drag (range selection, fill handle, drag-move, header resize/move, freeze bars) instead of scrolling; two fingers pinch-zoom about their midpoint (50–200 %, 5 % steps) and pan. Mouse, pen and trackpad input are unchanged | +| Touch | `GridTouchTracker` (`grid/grid_touch.dart`): a tap selects like a click (double-tap edits); one finger past the touch slop scrolls, with a `ClampingScrollSimulation` fling on release; a long press (500 ms) then drag runs the grid's pointer drag (range selection, fill handle, drag-move, header resize/move, freeze bars) instead of scrolling; two fingers pinch-zoom about their midpoint (50–200 %, 5 % steps) and pan. Mouse, pen and trackpad input are unchanged. In the read-only mobile layout (suite 02 §6.1, T-1) there is no cell selection: every pointer (a mouse in a narrow window too) pans like one finger, with the fling, taps and long presses do nothing, and the selection isn't painted (`SheetEditorController.readOnlyView`) | | Mod+wheel / pinch (`PointerScaleEvent`, trackpad pinch on web) | Zoom about pointer (§2.3) | | Pointer cancel | A `PointerCancelEvent` (the OS or browser took the pointer, a second finger during a long-press drag) aborts the drag in progress: no fill, move, resize, freeze or paint format is committed | | Scrollbars | Thin auto-hide (`WonkyScrollArea` style); dragging the vertical thumb shows a tooltip "Row 12,345" | diff --git a/specs/wonky_sheets/04-screens-menus-toolbar.md b/specs/wonky_sheets/04-screens-menus-toolbar.md index 3a414488..1d8e69a2 100644 --- a/specs/wonky_sheets/04-screens-menus-toolbar.md +++ b/specs/wonky_sheets/04-screens-menus-toolbar.md @@ -527,6 +527,13 @@ Specified in [03 §9](03-grid-and-editing.md#9-formula-bar). Hidden via View › All sheet commands are one undo step (delete restores the sheet with all rows, cells and rules by re-inserting the same ids). +**Mobile (T-1).** In the read-only mobile layout (suite 02 §6.1) the bar is 48 px tall +(`SheetTabBar.mobileHeight`) with 42 px tabs (`mobileTabHeight`) in 15 px text, and shows the +**≡** all-sheets menu (40 px) and the tabs only: no **+**, no tab menu (▾ or right-click), no +scroll arrows (the strip scrolls with a swipe), no Explore and no selection stats (there is no +cell selection, 03 §5). A tap activates a tab at once (no double-tap rename). The desktop bar is +unchanged. + --- ## 7. Selection statistics and Explore diff --git a/specs/wonky_sheets/STATUS.md b/specs/wonky_sheets/STATUS.md index c09e8da0..036f7b0f 100644 --- a/specs/wonky_sheets/STATUS.md +++ b/specs/wonky_sheets/STATUS.md @@ -149,6 +149,11 @@ menus at the pointer, `RangeInput` picking while focused (also the pivot source skeleton layer, automatic text color by fill contrast, sort undo/redo keeping the selection. Phase 4: `RangeInput` in the filter views panel, side panel restore precedence (02 §4 `LocalViewState`), row display order for sorted filter views (03 §2.3, 07 §4.4). +Mobile (suite 02 §6.1, T-12, T-1; `test/features/sheet_editor/sheet_editor_screen_test.dart`): +the read-only layout has no cell selection (every pointer pans the grid, taps and long presses +do nothing, the selection isn't painted; 03 §5) and a touch tab bar (48 px, 42 px tabs, only +the all-sheets menu and the tabs; 04 §6). The panning was checked in tests only, not on a +phone. Known gaps of the editor: no tile cache (direct painting; median 12.6–16 ms, p95 20–25 ms per frame at 1M cells in the debug test VM on a loaded machine — decided by a release profile), bundled cell fonts (families other than the UI fonts fall back), named-range dropdown in the name box, remote-edit toasts beyond "row deleted". diff --git a/specs/wonky_write/04-editor.md b/specs/wonky_write/04-editor.md index fa42f4fc..fe6f3859 100644 --- a/specs/wonky_write/04-editor.md +++ b/specs/wonky_write/04-editor.md @@ -1608,7 +1608,12 @@ takes < 100 ms on a 100-page document. document for the session (in-memory). The word being typed (caret inside or at its end) is checked once the caret leaves it. - **Rendering**: `SpellingAndGrammarStyler` style phase with `spellingErrorAttribution` (red - wavy underline in the `destructive` token). Presentation-only (§2.5). + wavy underline in the `destructive` token). Presentation-only (§2.5). When a flagged block is + removed (Backspace merging pasted empty paragraphs, a delete), its underlines are cleared in + a microtask, not from the document listener: that listener can run before `super_editor`'s + layout has seen the removal, and a style phase marked dirty then restyles the stale view + model, which still has the removed block. The layout threw ("No such position in document") + and stopped updating, so the pasted line breaks stayed visible and couldn't be deleted (#21). - **Interactions**: - Right-click a flagged word: the context-menu top section shows up to 5 suggestions (`write.spell.replace {nodeId, range, word}`, one undo step), *Ignore* @@ -1649,8 +1654,13 @@ fixes it in one undo step. layout). ### 29.2 Layout modes -`pageSetup.layout`: `pages` (default for new documents, overridable in Settings › Write) or -`pageless`. Set with `write.doc.setLayout {layout}` (View › Page layout ▸; also in Page setup). +`pageSetup.layout`: `pageless` (default for new documents, T-1; overridable in Settings › +Write › Page & export › Default layout) or `pages`. The server applies the default when it +creates a document (blank, built-in templates, the welcome document *New here? Read me first*, +Markdown and templates without a page setup; `DriveService.newDocumentPageSetup`: the locale +defaults of 07 §6.1 with the user's layout, `writeDefaults.pageless`, Pageless unless it is +`false`). Copies, imports and user templates keep their own page setup. Phones always show +Pageless (suite 02 §6.1), whatever the setting. Set with `write.doc.setLayout {layout}` (View › Page layout ▸; also in Page setup). This is a meta change, undoable (`write.meta`). The page setup model is owned by [07-import-export-print.md](07-import-export-print.md). @@ -1698,6 +1708,12 @@ Pages are **computed, never stored**. Manual page breaks are not supported (01 stylesheet is memoized so the presenter is not recreated on every keystroke. `PageChromeLayerBuilder` paints the page cards, headers, footers and page numbers in the underlay, at offsets computed by the controller. + The page cards are painted under the document, so the phase also gives the last block + bottom padding (`tailPadding`): the rest of the last page below it plus the 48 px bottom + canvas padding (05 §16). The document's scroll extent then reaches the last page's bottom + edge, also when that page isn't full (#1). It is component padding, outside the measured + box, so it never feeds back into the measure; the document padding would not do, since + `super_editor` rebuilds its layout only when a component's view model changes. 4. **Oversized blocks (v1, P0)**: the page boundary inside the block is drawn as a **seam**. The two page cards touch, there is a dashed separator line in the margin areas, and the page number label sits in the gutter. Content is never hidden. **P1**: diff --git a/specs/wonky_write/05-screens-menus-toolbar.md b/specs/wonky_write/05-screens-menus-toolbar.md index 636e70d0..36787b12 100644 --- a/specs/wonky_write/05-screens-menus-toolbar.md +++ b/specs/wonky_write/05-screens-menus-toolbar.md @@ -663,8 +663,9 @@ export* = default layout (`write.prefs.setDefaultLayout {layout}`, key `pageless page setup saved by *Page setup › Set as default* with *Reset* (`write.prefs.resetPageSetup`), default export format (`write.prefs.setExportFormat {format}`: md, html, pdf, docx, odt, txt); *Spelling* = *Ignore words in UPPERCASE* (`write.spell.toggleIgnoreUppercase`) and the personal -dictionary (remove = `write.prefs.removeDictionaryWord {word}`). New documents don't apply the -default layout/page setup yet and exports don't preselect the default format (TODO.md). +dictionary (remove = `write.prefs.removeDictionaryWord {word}`). The default layout is Pageless +when unset and new documents apply it (T-1, 04 §29.2); they don't apply the saved default page +setup yet and exports don't preselect the default format (TODO.md). ## 14. Empty, loading and error states @@ -714,7 +715,7 @@ Switching modes is instant; announcements via `SemanticsService` ("Suggesting mo | Document surface | page cards: `page` color, radius 2, light: shadow `0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.08)`; dark: 1 px `border` token, no shadow | full width | | Page size | page setup (mm/in → logical px at 96 dpi) × zoom | n/a | | Gap between pages | 16 px × zoom (min 8) | n/a | -| Canvas padding | 24 px top, 48 px bottom, horizontal centering; if viewport narrower than page: horizontal scroll unless *Fit width* | content column centered, 48 px top padding | +| Canvas padding | 24 px top, 48 px below the last page (the scroll extent always reaches it, also when the last page isn't full, 04 §29.3), horizontal centering; if viewport narrower than page: horizontal scroll unless *Fit width* | content column centered, 48 px top padding, 96 px below the last block (theme `pagelessPadding`) | | Content width | page width − margins | `min(theme pageless max width, viewport − 96)` | | Header/footer | painted in margins: theme `pageChrome` text style (default: 10 pt, `muted` equivalent of theme text), tokens expanded; double-click → Page setup › Header & footer | none | | Page number indicator | on scroll, a floating pill "Page 3 of 7" near the scrollbar thumb for 1 s | none | @@ -732,7 +733,7 @@ Breakpoints = shad `ShadBreakpoints` (sm 640, md 768, lg 1024, xl 1280, 2xl 1536 | lg–xl | full | prio ≥ 5 overflow | comment margin beside the page or overlaying the canvas's right edge | docked (squeezes canvas; Pages mode auto *Fit width* if the page no longer fits and user zoom was 100 %) | | md–lg | star/move move into a ⋮ menu; avatars max 2 | prio ≥ 3 overflow; mode switcher icon-only | comment margin overlays the right edge | docked min width or overlay if canvas < 480 px | | sm–md | title truncates; Share becomes icon button | prio ≥ 2 overflow | Pages rendered at fit-width zoom (indicator shows effective %); margin overlays (hidden below 600 px canvas) | overlay from the right over a scrim (380 px) | -| < sm (≥ 360) | app icon, title, ⋮, Share icon | Undo/Redo, style, B, I, link, list, ⋯ | Pageless-like padding 16 px (Pages still drawn as scaled cards); no margin | full-width overlay | +| < sm (≥ 360) | the read-only mobile layout (suite 02 §6.1): app icon, read-only title, sync status, *View only*, account menu, then a 1 px `border` line (`write.mobile.separator`, T-1) | none | always Pageless (T-1; the page setup is unchanged), 16 px beside, above and below the text, no text selection; no margin | none | The word count bar (§11), when on, is the same at every width. diff --git a/wonky_server/lib/src/platform/drive/drive_service.dart b/wonky_server/lib/src/platform/drive/drive_service.dart index c8b8ee80..868d428c 100644 --- a/wonky_server/lib/src/platform/drive/drive_service.dart +++ b/wonky_server/lib/src/platform/drive/drive_service.dart @@ -2,7 +2,8 @@ import 'dart:convert'; import 'package:serverpod/serverpod.dart'; import 'package:wonky_core/wonky_core.dart' show Role; -import 'package:wonky_write_core/wonky_write_core.dart' show Delta, DeltaUtils; +import 'package:wonky_write_core/wonky_write_core.dart' + show Delta, DeltaUtils, PageLayoutMode, PageSetup; import '../../sheets/spaces/space_copier.dart'; import '../../slides/decks/slides_decks.dart'; @@ -30,6 +31,7 @@ import '../sharing/acl_events.dart'; import '../storage/content_sizes.dart'; import '../storage/storage_hooks.dart'; import '../storage/storage_service.dart'; +import '../users/user_service.dart'; import 'drive_events.dart'; import 'drive_file_filters.dart'; import 'drive_listing.dart'; @@ -269,6 +271,21 @@ abstract final class DriveService { /// Creates a document. [documentUuid] and [itemUuid] may be generated by /// the client for offline creation; the call is idempotent on them. + /// The page setup JSON of a new document: the defaults for [language] + /// (`PageSetup.defaultsFor`, what the editor shows for `{}`) in the + /// user's default layout (`UserService.defaultPageless`). + static Future newDocumentPageSetup( + Session session, + Actor actor, { + String? language, + }) async { + final pageless = await UserService.defaultPageless(session, actor.userId); + final setup = PageSetup.defaultsFor(language ?? 'en').toJson() + ..['layout'] = + (pageless ? PageLayoutMode.pageless : PageLayoutMode.pages).name; + return jsonEncode(setup); + } + static Future createDocument( Session session, Actor actor, { @@ -330,6 +347,16 @@ abstract final class DriveService { } else if (initialMarkdown != null && initialMarkdown.isNotEmpty) { content = WriteContent.fromMarkdown(initialMarkdown).delta; } + // New documents (blank, built-in templates, the welcome document and + // templates without a page setup) open in the user's default layout: + // Pageless unless they chose Pages (Write 04 §29.2, T-1). + if (pageSetup == '{}') { + pageSetup = await newDocumentPageSetup( + session, + actor, + language: language, + ); + } // (v2) Quota (Drive 03 §7.2): blank documents are always allowed. if (content != null) { await StorageHooks.checkCaller( diff --git a/wonky_server/lib/src/platform/users/user_service.dart b/wonky_server/lib/src/platform/users/user_service.dart index a9bc8b3b..f5eea851 100644 --- a/wonky_server/lib/src/platform/users/user_service.dart +++ b/wonky_server/lib/src/platform/users/user_service.dart @@ -454,6 +454,17 @@ abstract final class UserService { return BuiltinThemeIds.wonkyDefault; } + /// Whether the user's new documents are Pageless (Write settings › Page & + /// export › Default layout, `writeDefaults.pageless`; Write 05 §13.3). + /// Pageless unless the user chose Pages (T-1). + static Future defaultPageless(Session session, int userId) async { + final prefs = await UserPreferences.db.findFirstRow( + session, + where: (t) => t.userId.equals(userId), + ); + return decodeObject(prefs?.writeDefaults)['pageless'] != false; + } + // --------------------------------------------------------------- search /// The users related to `@me`: the owners of and grantees on the items diff --git a/wonky_server/test/integration/platform/drive_endpoint_test.dart b/wonky_server/test/integration/platform/drive_endpoint_test.dart index 0605d4b3..88cf2299 100644 --- a/wonky_server/test/integration/platform/drive_endpoint_test.dart +++ b/wonky_server/test/integration/platform/drive_endpoint_test.dart @@ -2,10 +2,12 @@ library; import 'dart:async'; +import 'dart:convert'; import 'package:clock/clock.dart'; import 'package:serverpod/serverpod.dart'; import 'package:test/test.dart'; +import 'package:wonky_write_core/wonky_write_core.dart' show PageSetup; import 'package:wonky_server/src/platform/common/models.dart'; import 'package:wonky_server/src/platform/drive/drive_trash.dart'; import 'package:wonky_server/src/platform/drive/templates/builtin_templates.dart'; @@ -104,6 +106,67 @@ void main() { }, ); + group('when creating documents (T-1)', () { + Future> pageSetupOf(DriveItemView doc) async { + final session = sessionBuilder.build(); + final item = await DriveItem.db.findFirstRow( + session, + where: (t) => t.uuid.equals(doc.uuid), + ); + final row = await Document.db.findFirstRow( + session, + where: (t) => t.itemId.equals(item!.id), + ); + return (jsonDecode(row!.pageSetupJson) as Map).cast(); + } + + test('then a blank document is Pageless with the default page ' + 'setup', () async { + final doc = await TestDrive.document(endpoints, anna); + + final setup = await pageSetupOf(doc); + expect(setup['layout'], 'pageless'); + expect( + PageSetup.fromJson(setup), + PageSetup.fromJson( + PageSetup.defaultsFor('en').toJson()..['layout'] = 'pageless', + ), + ); + }); + + test('then documents from a built-in template or Markdown are ' + 'Pageless', () async { + final template = BuiltinTemplates.byKey('write.meeting-notes'); + final fromTemplate = await endpoints.drive.createDocument( + anna.endpointSession, + null, + 'Notes', + template.uuid, + null, + ); + final fromMarkdown = await TestDrive.document( + endpoints, + anna, + markdown: '# Hi', + ); + + expect((await pageSetupOf(fromTemplate))['layout'], 'pageless'); + expect((await pageSetupOf(fromMarkdown))['layout'], 'pageless'); + }); + + test('then a user who chose Pages as the default layout gets ' + 'Pages', () async { + await endpoints.user.updatePreferences( + anna.endpointSession, + UserPreferencesPatch(writeDefaults: jsonEncode({'pageless': false})), + ); + + final doc = await TestDrive.document(endpoints, anna); + + expect((await pageSetupOf(doc))['layout'], 'pages'); + }); + }); + test( 'when creating from a built-in template then its content is used', () async { diff --git a/wonky_server/test/integration/platform/user_endpoint_test.dart b/wonky_server/test/integration/platform/user_endpoint_test.dart index c0101e8d..5a1ad17e 100644 --- a/wonky_server/test/integration/platform/user_endpoint_test.dart +++ b/wonky_server/test/integration/platform/user_endpoint_test.dart @@ -38,6 +38,16 @@ void main() { ); expect(page.items.map((i) => i.name), ['New here? Read me first']); + // It opens Pageless, like every new document (T-1). + final item = await DriveItem.db.findFirstRow( + sessionBuilder.build(), + where: (t) => t.uuid.equals(page.items.single.uuid), + ); + final doc = await Document.db.findFirstRow( + sessionBuilder.build(), + where: (t) => t.itemId.equals(item!.id), + ); + expect(jsonDecode(doc!.pageSetupJson)['layout'], 'pageless'); }, ); diff --git a/wonky_server/test/integration/write/mcp/write_tools_test.dart b/wonky_server/test/integration/write/mcp/write_tools_test.dart index 574c362d..2fd00a45 100644 --- a/wonky_server/test/integration/write/mcp/write_tools_test.dart +++ b/wonky_server/test/integration/write/mcp/write_tools_test.dart @@ -404,19 +404,20 @@ void main() { () async { final r = await mcp.call('write.update_page_setup', { 'document_uuid': docOf(doc), - 'patch': {'layout': 'pageless'}, + // New documents are Pageless (T-1). + 'patch': {'layout': 'pages'}, }); var setup = await mcp.call('write.get_page_setup', { 'document_uuid': docOf(doc), }); - expect((setup['page_setup'] as Map)['layout'], 'pageless'); + expect((setup['page_setup'] as Map)['layout'], 'pages'); await mcp.call('changes.revert', {'change_id': r['change_id']}); setup = await mcp.call('write.get_page_setup', { 'document_uuid': docOf(doc), }); - expect((setup['page_setup'] as Map)['layout'], isNot('pageless')); + expect((setup['page_setup'] as Map)['layout'], 'pageless'); }, ); diff --git a/wonky_sheets/lib/features/grid/grid_area.dart b/wonky_sheets/lib/features/grid/grid_area.dart index bc4a3951..b8c657fb 100644 --- a/wonky_sheets/lib/features/grid/grid_area.dart +++ b/wonky_sheets/lib/features/grid/grid_area.dart @@ -559,6 +559,17 @@ class _GridAreaState extends State with TickerProviderStateMixin { void _onDown(PointerDownEvent e) { _stopFling(); + // The read-only mobile layout (suite 02 §6.1, T-1) has no cell + // selection: every pointer (also a mouse in a narrow window) pans the + // grid like a finger, and taps and long presses do nothing. + final readOnlyView = c.readOnlyView; + _touch.longPressEnabled = !readOnlyView; + if (readOnlyView) { + if (e.kind == PointerDeviceKind.touch || e.buttons == kPrimaryButton) { + _touch.down(e); + } + return; + } if (e.kind == PointerDeviceKind.touch) { _touch.down(e); return; @@ -618,10 +629,13 @@ class _GridAreaState extends State with TickerProviderStateMixin { late final GridTouchTracker _touch = GridTouchTracker( onTap: (down, up) { + if (c.readOnlyView) return; _press(down, touch: true); _release(); }, - onLongPress: (down) => _press(down, touch: true), + onLongPress: (down) { + if (!c.readOnlyView) _press(down, touch: true); + }, onDragMove: _dragTo, onDragEnd: (_) => _release(), onDragCancel: _cancelDrag, diff --git a/wonky_sheets/lib/features/grid/grid_touch.dart b/wonky_sheets/lib/features/grid/grid_touch.dart index 4c0f7baa..35dfd0fa 100644 --- a/wonky_sheets/lib/features/grid/grid_touch.dart +++ b/wonky_sheets/lib/features/grid/grid_touch.dart @@ -30,7 +30,8 @@ enum GridTouchPhase { /// selects (as a click), one finger scrolls with momentum, a long press /// then drag runs the grid's pointer drag (range selection, fill, move, /// resize), two fingers pinch-zoom. Mouse, stylus and trackpad input don't -/// come here. +/// come here, except in the read-only mobile layout (T-1), where every +/// pointer pans and taps and long presses do nothing. /// /// The grid is one raw `Listener` (no gesture arena), so this tracks the /// pointers itself. @@ -81,6 +82,10 @@ class GridTouchTracker { final Duration longPressTimeout; + /// Whether a long press starts the grid's drag. Off in the read-only + /// mobile layout (T-1): there a held finger that moves still pans. + bool longPressEnabled = true; + GridTouchPhase _phase = GridTouchPhase.none; GridTouchPhase get phase => _phase; @@ -104,7 +109,9 @@ class GridTouchTracker { _velocity = VelocityTracker.withKind(e.kind) ..addPosition(e.timeStamp, e.position); _longPress?.cancel(); - _longPress = Timer(longPressTimeout, _onLongPressTimer); + _longPress = longPressEnabled + ? Timer(longPressTimeout, _onLongPressTimer) + : null; case 2: _longPress?.cancel(); if (_phase == GridTouchPhase.drag) onDragCancel(); diff --git a/wonky_sheets/lib/features/grid/paint/layers/overlay_layers.dart b/wonky_sheets/lib/features/grid/paint/layers/overlay_layers.dart index 7eccd526..1f730c19 100644 --- a/wonky_sheets/lib/features/grid/paint/layers/overlay_layers.dart +++ b/wonky_sheets/lib/features/grid/paint/layers/overlay_layers.dart @@ -116,6 +116,8 @@ class SelectionLayer extends GridLayer { final c = ctx.controller; final sel = ctx.selection; if (sel.sheetId != ctx.sheetId) return; + // The read-only mobile layout has no cell selection (suite 02 §6.1, T-1). + if (c.readOnlyView) return; final tokens = ctx.tokens; final fill = Paint()..color = tokens.selectionFill; final border = Paint() @@ -381,7 +383,9 @@ class HeaderLayer extends GridLayer { bold: bold, align: TextAlign.center, ); - final sameSheet = sel.sheetId == ctx.sheetId; + // No selected headers in the read-only mobile layout (T-1). + final sameSheet = + sel.sheetId == ctx.sheetId && !ctx.controller.readOnlyView; // Column headers. for (final pane in g.panes) { diff --git a/wonky_sheets/lib/features/tab_bar/sheet_tab_bar.dart b/wonky_sheets/lib/features/tab_bar/sheet_tab_bar.dart index 3ef98ac7..7e3ae8cc 100644 --- a/wonky_sheets/lib/features/tab_bar/sheet_tab_bar.dart +++ b/wonky_sheets/lib/features/tab_bar/sheet_tab_bar.dart @@ -19,9 +19,18 @@ import '../toolbar/command_ui.dart'; /// The sheet tab bar (04 §6): add, all sheets, tabs (rename inline, color /// strip, menu, drag to reorder), scroll arrows and the selection stats. +/// +/// In the read-only mobile layout (suite 02 §6.1, T-1) the bar and its tabs +/// are taller (touch targets) and show the all-sheets menu and the tabs only: +/// no add button, tab menus, scroll arrows (the strip scrolls with a +/// swipe), Explore or selection stats (there is no cell selection). class SheetTabBar extends StatefulWidget { const SheetTabBar({super.key, required this.controller}); + /// Height of the bar and of a tab (desktop: 36 and 30). + static const double mobileHeight = 48; + static const double mobileTabHeight = 42; + final SheetEditorController controller; @override @@ -58,6 +67,7 @@ class _SheetTabBarState extends State { final cs = theme.colorScheme; final ui = CommandUi(context, c.services); final l = ui.l; + final mobile = WonkyLayout.isMobile(context); return ListenableBuilder( listenable: Listenable.merge([c, c.renamingSheet, c.services.registry]), builder: (context, _) { @@ -65,7 +75,7 @@ class _SheetTabBarState extends State { final hidden = c.model.sheets.where((s) => s.record!.hidden).length; return Container( key: const ValueKey('sheets.tabBar'), - height: 36, + height: mobile ? SheetTabBar.mobileHeight : 36, decoration: BoxDecoration( color: cs.muted.withValues(alpha: 0.5), border: Border(top: BorderSide(color: cs.border)), @@ -73,20 +83,24 @@ class _SheetTabBarState extends State { child: Row( children: [ const SizedBox(width: 4), - ShadTooltip( - builder: (_) => Text(l.cmdSheetAdd), - child: ShadIconButton.ghost( - key: const ValueKey('sheets.tab.add'), - width: 30, - height: 30, - iconSize: 16, - icon: const Icon(LucideIcons.plus), - semanticLabel: l.cmdSheetAdd, - enabled: ui.state('sheets.sheet.add').enabled, - onPressed: () => - ui.run('sheets.sheet.add', const {}, InvocationSource.ui), + if (!mobile) + ShadTooltip( + builder: (_) => Text(l.cmdSheetAdd), + child: ShadIconButton.ghost( + key: const ValueKey('sheets.tab.add'), + width: 30, + height: 30, + iconSize: 16, + icon: const Icon(LucideIcons.plus), + semanticLabel: l.cmdSheetAdd, + enabled: ui.state('sheets.sheet.add').enabled, + onPressed: () => ui.run( + 'sheets.sheet.add', + const {}, + InvocationSource.ui, + ), + ), ), - ), WonkyDropdownMenu( entries: () => [ for (final s in c.model.sheets) @@ -109,13 +123,13 @@ class _SheetTabBarState extends State { builder: (_) => Text(l.tabAllSheets), child: ShadIconButton.ghost( key: const ValueKey('sheets.tab.all'), - width: 30, - height: 30, + width: mobile ? 40 : 30, + height: mobile ? 40 : 30, iconSize: 16, icon: Stack( clipBehavior: Clip.none, children: [ - const Icon(LucideIcons.menu, size: 16), + Icon(LucideIcons.menu, size: mobile ? 20 : 16), if (hidden > 0) Positioned( right: -6, @@ -165,6 +179,7 @@ class _SheetTabBarState extends State { controller: c, sheet: sheets[i], ui: ui, + mobile: mobile, onDragStart: () => setState(() => _dragging = sheets[i].id), onDragUpdate: (globalX) => @@ -179,29 +194,33 @@ class _SheetTabBarState extends State { ), ), ), - ShadIconButton.ghost( - key: const ValueKey('sheets.tab.scrollLeft'), - width: 24, - height: 30, - iconSize: 14, - icon: const Icon(LucideIcons.chevronLeft), - semanticLabel: l.tabScrollLeft, - onPressed: () => _scrollBy(-120), - ), - ShadIconButton.ghost( - key: const ValueKey('sheets.tab.scrollRight'), - width: 24, - height: 30, - iconSize: 14, - icon: const Icon(LucideIcons.chevronRight), - semanticLabel: l.tabScrollRight, - onPressed: () => _scrollBy(120), - ), - const SizedBox(width: 8), + if (!mobile) ...[ + ShadIconButton.ghost( + key: const ValueKey('sheets.tab.scrollLeft'), + width: 24, + height: 30, + iconSize: 14, + icon: const Icon(LucideIcons.chevronLeft), + semanticLabel: l.tabScrollLeft, + onPressed: () => _scrollBy(-120), + ), + ShadIconButton.ghost( + key: const ValueKey('sheets.tab.scrollRight'), + width: 24, + height: 30, + iconSize: 14, + icon: const Icon(LucideIcons.chevronRight), + semanticLabel: l.tabScrollRight, + onPressed: () => _scrollBy(120), + ), + const SizedBox(width: 8), + ], RowLoadingStatus(controller: c), - ExploreButton(controller: c), - const SizedBox(width: 4), - SelectionStatsButton(controller: c), + if (!mobile) ...[ + ExploreButton(controller: c), + const SizedBox(width: 4), + SelectionStatsButton(controller: c), + ], const SizedBox(width: 8), ], ), @@ -264,6 +283,7 @@ class _SheetTab extends StatefulWidget { required this.controller, required this.sheet, required this.ui, + required this.mobile, required this.onDragStart, required this.onDragUpdate, required this.onDragEnd, @@ -272,6 +292,9 @@ class _SheetTab extends StatefulWidget { final SheetEditorController controller; final SheetModel sheet; final CommandUi ui; + + /// The read-only mobile layout: taller, larger text, no tab menu. + final bool mobile; final VoidCallback onDragStart; final ValueChanged onDragUpdate; final VoidCallback onDragEnd; @@ -438,6 +461,7 @@ class _SheetTabState extends State<_SheetTab> { widget.sheet.name, overflow: TextOverflow.ellipsis, style: theme.textTheme.small.copyWith( + fontSize: widget.mobile ? 15 : null, fontWeight: active ? FontWeight.w600 : FontWeight.normal, color: active ? cs.foreground : cs.mutedForeground, ), @@ -447,9 +471,12 @@ class _SheetTabState extends State<_SheetTab> { ), ); final tab = Container( - height: 30, + height: widget.mobile ? SheetTabBar.mobileTabHeight : 30, margin: const EdgeInsets.only(right: 2, top: 3), - padding: const EdgeInsets.only(left: 10, right: 2), + padding: EdgeInsets.only( + left: widget.mobile ? 14 : 10, + right: widget.mobile ? 14 : 2, + ), decoration: BoxDecoration( color: active ? cs.background : cs.muted, borderRadius: const BorderRadius.vertical(bottom: Radius.circular(6)), @@ -483,22 +510,23 @@ class _SheetTabState extends State<_SheetTab> { ], label, SheetTabPresence(controller: c, sheetId: widget.sheet.id), - WonkyDropdownMenu( - controller: _menu, - entries: _entries, - builder: (context, menu) => ShadIconButton.ghost( - key: ValueKey('sheets.tab.menu.${widget.sheet.id}'), - width: 22, - height: 22, - iconSize: 12, - icon: Icon( - LucideIcons.chevronDown, - color: cs.mutedForeground, + if (!widget.mobile) + WonkyDropdownMenu( + controller: _menu, + entries: _entries, + builder: (context, menu) => ShadIconButton.ghost( + key: ValueKey('sheets.tab.menu.${widget.sheet.id}'), + width: 22, + height: 22, + iconSize: 12, + icon: Icon( + LucideIcons.chevronDown, + color: cs.mutedForeground, + ), + semanticLabel: widget.ui.l.tabMenu(widget.sheet.name), + onPressed: menu.toggle, ), - semanticLabel: widget.ui.l.tabMenu(widget.sheet.name), - onPressed: menu.toggle, ), - ), ], ), if (color != null) @@ -513,7 +541,7 @@ class _SheetTabState extends State<_SheetTab> { ); return Listener( onPointerDown: (e) { - if (e.buttons == kSecondaryMouseButton) _menu.show(); + if (e.buttons == kSecondaryMouseButton && !widget.mobile) _menu.show(); }, child: GestureDetector( key: (context.findAncestorStateOfType<_SheetTabBarState>())?.keyFor( @@ -528,9 +556,12 @@ class _SheetTabState extends State<_SheetTab> { ); } }, - onDoubleTap: () { - if (c.canEdit) c.renamingSheet.value = widget.sheet.id; - }, + // Mobile: no rename (read-only), and a tap activates at once. + onDoubleTap: widget.mobile + ? null + : () { + if (c.canEdit) c.renamingSheet.value = widget.sheet.id; + }, onHorizontalDragStart: c.canEdit && !renaming ? (_) { _dragged = true; diff --git a/wonky_sheets/test/features/sheet_editor/sheet_editor_screen_test.dart b/wonky_sheets/test/features/sheet_editor/sheet_editor_screen_test.dart index f3d56b57..bced42b0 100644 --- a/wonky_sheets/test/features/sheet_editor/sheet_editor_screen_test.dart +++ b/wonky_sheets/test/features/sheet_editor/sheet_editor_screen_test.dart @@ -1,8 +1,10 @@ +import 'package:flutter/gestures.dart' show PointerDeviceKind; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:wonky_sheets/features/sheet_editor/sheet_editor_screen.dart'; import 'package:wonky_sheets/features/sheet_editor/sheets_document_controller.dart'; +import 'package:wonky_sheets/features/tab_bar/sheet_tab_bar.dart'; import 'package:shad/shad.dart' show ShadTheme; import 'package:wonky_ui/wonky_ui.dart' show DocumentTitleField, WonkyMenubar, WonkyToolbar; @@ -191,5 +193,146 @@ void main() { await tester.pump(const Duration(seconds: 2)); }); } + + /// The center of cell [row], [col] on screen (row header 48 px, column + /// header 24 px, rows 21 px, columns 100 px at 100 %). + Offset cellAt(WidgetTester tester, int row, int col) => + tester.getTopLeft(key('sheets.grid')) + + Offset(48 + col * 100 + 50, 24 + row * 21 + 10); + + Future drag( + WidgetTester tester, + Offset from, + Offset by, { + PointerDeviceKind kind = PointerDeviceKind.touch, + Duration hold = Duration.zero, + }) async { + final g = await tester.startGesture(from, kind: kind); + if (hold > Duration.zero) await tester.pump(hold); + for (var i = 0; i < 10; i++) { + await g.moveBy(by / 10); + await tester.pump(const Duration(milliseconds: 16)); + } + await g.up(); + await tester.pump(const Duration(seconds: 1)); + } + + testWidgets('when tapping or long-pressing cells then nothing is ' + 'selected, and swiping (also after a long press, or with a mouse) ' + 'pans the grid (T-1)', (tester) async { + await pumpScreen(tester, size: const Size(390, 844)); + final ed = doc().editor!; + final before = ed.selection.describe(); + + await tester.tapAt(cellAt(tester, 3, 1), kind: PointerDeviceKind.touch); + await tester.pump(const Duration(milliseconds: 500)); + expect(ed.selection.describe(), before); + + final press = await tester.startGesture( + cellAt(tester, 2, 1), + kind: PointerDeviceKind.touch, + ); + await tester.pump(const Duration(milliseconds: 700)); + await press.up(); + await tester.pump(const Duration(milliseconds: 500)); + expect(ed.selection.describe(), before); + + await drag(tester, cellAt(tester, 20, 1), const Offset(0, -200)); + final y = ed.scroll.y; + expect(y, greaterThan(150)); + expect(ed.selection.describe(), before); + + // A held finger that then moves pans instead of selecting a range. + await drag( + tester, + cellAt(tester, 10, 1), + const Offset(0, -100), + hold: const Duration(milliseconds: 700), + ); + expect(ed.scroll.y, greaterThan(y + 50)); + expect(ed.selection.describe(), before); + + // A mouse in a narrow window pans too. + final y2 = ed.scroll.y; + await drag( + tester, + cellAt(tester, 10, 1), + const Offset(0, -100), + kind: PointerDeviceKind.mouse, + ); + expect(ed.scroll.y, greaterThan(y2 + 50)); + expect(ed.selection.describe(), before); + expect(tester.takeException(), isNull); + await tester.pumpWidget(const SizedBox()); + await tester.pump(const Duration(seconds: 2)); + }); + + testWidgets('when the window is wide then a tap selects the cell (the ' + 'desktop is unchanged)', (tester) async { + await pumpScreen(tester); + final ed = doc().editor!; + await tester.tapAt(cellAt(tester, 3, 1), kind: PointerDeviceKind.touch); + await tester.pump(const Duration(milliseconds: 500)); + expect(ed.selection.describe(), 'B4'); + await tester.pumpWidget(const SizedBox()); + await tester.pump(const Duration(seconds: 2)); + }); + + for (final dark in [false, true]) { + testWidgets('when it shows in ${dark ? 'dark' : 'light'} then the sheet ' + 'tabs are taller and the bar shows the all-sheets menu and the tabs ' + 'only (T-1)', (tester) async { + await pumpScreen(tester, size: const Size(390, 844), dark: dark); + final sheetId = doc().editor!.activeSheetId; + + expect( + tester.getSize(key('sheets.tabBar')).height, + SheetTabBar.mobileHeight, + ); + final tab = find.descendant( + of: key('sheets.tab.$sheetId'), + matching: find.byType(Container), + ); + expect( + tester.getSize(tab.first).height, + greaterThanOrEqualTo(SheetTabBar.mobileTabHeight), + ); + expect(key('sheets.tab.all'), findsOneWidget); + expect(key('sheets.tab.$sheetId'), findsOneWidget); + for (final hidden in [ + 'sheets.tab.add', + 'sheets.tab.scrollLeft', + 'sheets.tab.scrollRight', + 'sheets.tab.explore', + 'sheets.tab.menu.$sheetId', + ]) { + expect(key(hidden), findsNothing, reason: hidden); + } + final theme = ShadTheme.of(tester.element(key('sheets.tabBar'))); + expect(theme.brightness, dark ? Brightness.dark : Brightness.light); + expect(tester.takeException(), isNull); + await tester.pumpWidget(const SizedBox()); + await tester.pump(const Duration(seconds: 2)); + }); + } + + testWidgets('when the window is wide then the tab bar keeps its height ' + 'and every control (the desktop is unchanged)', (tester) async { + await pumpScreen(tester); + final sheetId = doc().editor!.activeSheetId; + expect(tester.getSize(key('sheets.tabBar')).height, 36); + for (final shown in [ + 'sheets.tab.add', + 'sheets.tab.all', + 'sheets.tab.scrollLeft', + 'sheets.tab.scrollRight', + 'sheets.tab.explore', + 'sheets.tab.menu.$sheetId', + ]) { + expect(key(shown), findsOneWidget, reason: shown); + } + await tester.pumpWidget(const SizedBox()); + await tester.pump(const Duration(seconds: 2)); + }); }); } diff --git a/wonky_write/lib/features/editor/controller/write_editor_controller.dart b/wonky_write/lib/features/editor/controller/write_editor_controller.dart index f8dd4709..f511095b 100644 --- a/wonky_write/lib/features/editor/controller/write_editor_controller.dart +++ b/wonky_write/lib/features/editor/controller/write_editor_controller.dart @@ -57,6 +57,7 @@ class WriteEditorController extends ChangeNotifier { requestHandlers: [ ...wonkyRequestHandlers( mode: () => _mode, + selectable: () => _selectable, documentLength: () => mirror.length, onMaxLengthReached: () => _events.add(const EditorNotice(EditorNoticeKind.documentFull)), @@ -449,6 +450,21 @@ class WriteEditorController extends ChangeNotifier { EditorMode _mode; /// Editing, Suggesting or Viewing (Write 04 §31). + bool _selectable = true; + + /// Whether the user can select text (taps, drags, long presses). Off in + /// the read-only mobile layout (suite 02 §6.1, T-1); a layout setting, not + /// a change of the document. Turning it off clears the selection. + bool get selectable => _selectable; + set selectable(bool value) { + if (value == _selectable) return; + _selectable = value; + if (!value && composer.selection != null) { + editor.execute([const ClearSelectionRequest()]); + } + notifyListeners(); + } + EditorMode get mode => _mode; set mode(EditorMode value) { if (value == _mode) return; diff --git a/wonky_write/lib/features/editor/pagination/pagination.dart b/wonky_write/lib/features/editor/pagination/pagination.dart index eebd7c10..1ec2846d 100644 --- a/wonky_write/lib/features/editor/pagination/pagination.dart +++ b/wonky_write/lib/features/editor/pagination/pagination.dart @@ -27,9 +27,21 @@ class PaginationController extends ChangeNotifier { /// that runs before the layout picked up new gaps stays correct. Map _applied = const {}; int _pageCount = 1; + double _tail = 0; Map get gaps => _gaps; + /// Space below the canvas's last page (Write 05 §16: 48 px bottom canvas + /// padding), unscaled. + static const double canvasBottomPadding = 48; + + /// Extra bottom padding of the document layout (scaled): the room between + /// the last block and the last page's bottom edge, plus + /// [canvasBottomPadding]. The page cards are painted under the document, + /// so without it the scroll extent ends at the last line and a page that + /// isn't full can't be scrolled to its bottom (#1). + double get tailPadding => _tail + canvasBottomPadding * _zoom; + /// Number of pages after the last layout. int get pageCount => _pageCount; @@ -152,6 +164,7 @@ class PaginationController extends ChangeNotifier { final newGaps = {}; var shift = 0.0; var page = 0; + double? lastBottom; for (var i = 0; i < nodes.length; i += 1) { final rect = natural[i]; if (rect == null) continue; @@ -202,12 +215,20 @@ class PaginationController extends ChangeNotifier { // Oversized block: it overflows across the seam. page += 1; } + lastBottom = bottom; } final changed = !_sameGaps(newGaps, _gaps); if (changed) _gaps = newGaps; final count = page + 1; - if (changed || count != _pageCount) { + // The last block's bottom margin (the document padding) ends where its + // page ends; the rest of that page is the tail. + final tail = lastBottom == null + ? 0.0 + : (contentBottomOf(page) - lastBottom).clamp(0.0, double.infinity); + final tailChanged = (tail - _tail).abs() > 0.5; + if (tailChanged) _tail = tail; + if (changed || tailChanged || count != _pageCount) { _pageCount = count; notifyListeners(); } @@ -278,19 +299,34 @@ class PaginationStylePhase extends SingleColumnLayoutStylePhase { ) { final gaps = pagination.gaps; pagination.markApplied(gaps); - if (gaps.isEmpty) return viewModel; + final models = viewModel.componentViewModels; + // The layout reaches the last page's bottom edge (see `tailPadding`). + // It is the last block's bottom padding, not the document padding: the + // layout is rebuilt only when a component's view model changes, and the + // padding is outside the component, so its measured size is unchanged. + final tail = pagination.tailPadding; return SingleColumnLayoutViewModel( padding: viewModel.padding, componentViewModels: [ - for (final model in viewModel.componentViewModels) - if (gaps[model.nodeId] case final gap?) - (model.copy() - ..padding = model.padding.add(EdgeInsets.only(top: gap))) - else - model, + for (var i = 0; i < models.length; i += 1) + _padded( + models[i], + top: gaps[models[i].nodeId] ?? 0, + bottom: i == models.length - 1 ? tail : 0, + ), ], ); } + + static SingleColumnLayoutComponentViewModel _padded( + SingleColumnLayoutComponentViewModel model, { + required double top, + required double bottom, + }) { + if (top == 0 && bottom == 0) return model; + return model.copy() + ..padding = model.padding.add(EdgeInsets.only(top: top, bottom: bottom)); + } } /// Paints page cards, header/footer text and page numbers under the document diff --git a/wonky_write/lib/features/editor/setup/editor_factory.dart b/wonky_write/lib/features/editor/setup/editor_factory.dart index 26426a05..31852cd8 100644 --- a/wonky_write/lib/features/editor/setup/editor_factory.dart +++ b/wonky_write/lib/features/editor/setup/editor_factory.dart @@ -47,14 +47,38 @@ bool isTextInsertionRequest(EditRequest request) => request is InsertSoftNewlineAtCaretRequest || request is PasteEditorRequest; +/// Collapses the selections the user makes (double taps, drags, long presses) +/// while [selectable] is false: the read-only mobile layout has no text +/// selection (suite 02 §6.1, T-1). Read-only documents don't show a +/// collapsed selection, and super_editor's gesture interactors expect their +/// selection requests to set one (refusing them crashes the touch +/// interactors). Selections set by content changes still apply. +EditRequestHandler selectionGuard(bool Function() selectable) => + (editor, request) { + if (selectable() || + request is! ChangeSelectionRequest || + request.reason != SelectionReason.userInteraction) { + return null; + } + final selection = request.newSelection; + if (selection == null || selection.isCollapsed) return null; + return ChangeSelectionCommand( + DocumentSelection.collapsed(position: selection.extent), + request.changeType, + request.reason, + ); + }; + /// Request handlers that run before super_editor's own (Write 04 §2.2). List wonkyRequestHandlers({ required EditorMode Function() mode, + bool Function()? selectable, required int Function() documentLength, required void Function() onMaxLengthReached, int maxDocumentChars = 2000000, }) { return [ + if (selectable != null) selectionGuard(selectable), // Mode guard (§31): Viewing refuses every content change. (editor, request) => mode() == EditorMode.viewing && !isNonMutatingRequest(request) diff --git a/wonky_write/lib/features/editor/ui/wonky_editor.dart b/wonky_write/lib/features/editor/ui/wonky_editor.dart index d78aa9ce..8e5c148a 100644 --- a/wonky_write/lib/features/editor/ui/wonky_editor.dart +++ b/wonky_write/lib/features/editor/ui/wonky_editor.dart @@ -28,6 +28,7 @@ import '../paste/editor_clipboard.dart'; import '../plugins/slash_items.dart'; import '../plugins/trigger_queries.dart'; import '../popovers/editor_popovers.dart'; +import '../setup/editor_factory.dart' show selectionGuard; import '../styles/editor_theme.dart'; import '../styles/style_phases.dart'; import '../styles/write_stylesheet.dart'; @@ -139,9 +140,10 @@ class WonkyEditor extends StatefulWidget { final double endInset; /// Left and right padding around the text instead of the page margins - /// (Pages; the page then fills the width) or the pageless padding: the - /// mobile layout's (suite 02 §6.1, T-12). Null: the document's own. Only - /// the rendering changes, not the page setup. + /// (Pages; the page then fills the width) or the pageless padding, where + /// it is also the space above the first and below the last block: the + /// mobile layout's (suite 02 §6.1, T-12, T-1). Null: the document's own. + /// Only the rendering changes, not the page setup. final double? compactPadding; /// Source of OS drops (defaults to the platform's; tests inject one). @@ -609,9 +611,18 @@ class WonkyEditorState extends State { ? SuggestionView.accepted(delta) : SuggestionView.original(delta); final document = const DeltaDocumentMapper().documentFromDelta(viewed); - _previewEditor = createDefaultDocumentEditor( - document: document, - composer: MutableDocumentComposer(), + // No text selection where the controller has none (mobile, T-1). + _previewEditor = Editor( + editables: { + Editor.documentKey: document, + Editor.composerKey: MutableDocumentComposer(), + }, + requestHandlers: [ + selectionGuard(() => controller.selectable), + ...defaultRequestHandlers.cast(), + ], + reactionPipeline: List.from(defaultEditorReactions), + isHistoryEnabled: false, ); } @@ -675,12 +686,15 @@ class WonkyEditorState extends State { ) : compact == null ? style.stylesheet + // Pageless: [compact] also above the first and below the last block. : _paddedStylesheet( style.stylesheet, - _compact( - style.stylesheet.documentPadding ?? EdgeInsets.zero, - compact, + (style.stylesheet.documentPadding ?? EdgeInsets.zero).copyWith( + left: compact, + right: compact, + top: compact, ), + lastBlockBottom: compact, ); _tables ..onUndo = widget.shortcutCallbacks?.onUndo @@ -788,22 +802,50 @@ class WonkyEditorState extends State { : padding.copyWith(left: compact, right: compact); /// [base] with [margins] as document padding (Pages: the page margins; - /// `compactPadding`), memoized: a new stylesheet makes `super_editor` - /// recreate its layout presenter and restyle every block, which must not - /// happen on every keystroke. - Stylesheet _paddedStylesheet(Stylesheet base, EdgeInsets margins) { + /// `compactPadding`) and, when given, [lastBlockBottom] below the last + /// block, memoized: a new stylesheet makes `super_editor` recreate its + /// layout presenter and restyle every block, which must not happen on + /// every keystroke. + Stylesheet _paddedStylesheet( + Stylesheet base, + EdgeInsets margins, { + double? lastBlockBottom, + }) { final cached = _pagesSheet; if (cached != null && identical(cached.base, base) && - cached.margins == margins) { + cached.margins == margins && + cached.lastBlockBottom == lastBlockBottom) { return cached.sheet; } - final sheet = base.copyWith(documentPadding: margins); - _pagesSheet = (base: base, margins: margins, sheet: sheet); + final sheet = base.copyWith( + documentPadding: margins, + addRulesAfter: [ + if (lastBlockBottom != null) + StyleRule( + BlockSelector.all.last(), + (doc, node) => { + Styles.padding: CascadingPadding.only(bottom: lastBlockBottom), + }, + ), + ], + ); + _pagesSheet = ( + base: base, + margins: margins, + lastBlockBottom: lastBlockBottom, + sheet: sheet, + ); return sheet; } - ({Stylesheet base, EdgeInsets margins, Stylesheet sheet})? _pagesSheet; + ({ + Stylesheet base, + EdgeInsets margins, + double? lastBlockBottom, + Stylesheet sheet, + })? + _pagesSheet; /// The last SuperEditor/SuperReader widget and the inputs it was built /// from (see `_build`). diff --git a/wonky_write/lib/features/screen/write_document_controller.dart b/wonky_write/lib/features/screen/write_document_controller.dart index 3e125520..a5590347 100644 --- a/wonky_write/lib/features/screen/write_document_controller.dart +++ b/wonky_write/lib/features/screen/write_document_controller.dart @@ -308,7 +308,7 @@ class WriteDocumentController extends DocumentController { void _applyPageGeometry() { final setup = pageSetup; - view.layout = setup.layout == PageLayoutMode.pages + view.layout = setup.layout == PageLayoutMode.pages && !_mobileView ? LayoutMode.pages : LayoutMode.pageless; final i = item; @@ -612,9 +612,20 @@ class WriteDocumentController extends DocumentController { @override void focusEditor() => editor.focusNode.requestFocus(); - /// The mobile layout shows the document in Viewing (suite 02 §6.1). + /// The mobile layout shows the document in Viewing, always Pageless and + /// without text selection (suite 02 §6.1, T-1). It is layout, not a change + /// of the document: the page setup is unchanged and widening the window + /// restores it. @override - void setReadOnlyView(bool readOnly) => session.setReadOnlyView(readOnly); + void setReadOnlyView(bool readOnly) { + session.setReadOnlyView(readOnly); + editor.selectable = !readOnly; + if (readOnly == _mobileView) return; + _mobileView = readOnly; + _applyPageGeometry(); + } + + bool _mobileView = false; /// Scrolls [offset] into view. void reveal(int offset) => revealOffset?.call(offset); diff --git a/wonky_write/lib/features/screen/write_document_screen.dart b/wonky_write/lib/features/screen/write_document_screen.dart index ca01d7e6..dd020e64 100644 --- a/wonky_write/lib/features/screen/write_document_screen.dart +++ b/wonky_write/lib/features/screen/write_document_screen.dart @@ -225,6 +225,25 @@ class _WriteDocumentScreenState extends State { } Widget _body(BuildContext context, DriveItemView item) { + final body = _phaseBody(context, item); + if (!WonkyLayout.isMobile(context)) return body; + // The read-only mobile layout: a 1 px `border` line between the title + // row and the page, which otherwise blend (like Sheets, suite 02 §6.1, + // T-1). + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + SizedBox( + key: const ValueKey('write.mobile.separator'), + height: 1, + child: ColoredBox(color: ShadTheme.of(context).colorScheme.border), + ), + Expanded(child: body), + ], + ); + } + + Widget _phaseBody(BuildContext context, DriveItemView item) { return ValueListenableBuilder( valueListenable: session.phase, builder: (context, phase, _) { diff --git a/wonky_write/lib/features/settings/write_settings.dart b/wonky_write/lib/features/settings/write_settings.dart index 5e6632e8..3f7d52d6 100644 --- a/wonky_write/lib/features/settings/write_settings.dart +++ b/wonky_write/lib/features/settings/write_settings.dart @@ -213,9 +213,10 @@ class WritePageSettings extends StatelessWidget { builder: (context, _) { final l = writeL10n(context); final d = s.prefs.writeDefaults; - final layout = d[WriteSettingsKeys.pageless] == true - ? 'pageless' - : 'pages'; + // Pageless unless the user chose Pages (T-1). + final layout = d[WriteSettingsKeys.pageless] == false + ? 'pages' + : 'pageless'; final format = d[WriteSettingsKeys.exportFormat] as String? ?? 'md'; final hasPageSetup = d[WriteSettingsKeys.pageSetup] != null; String layoutLabel(String v) => diff --git a/wonky_write/lib/features/settings/write_settings_commands.dart b/wonky_write/lib/features/settings/write_settings_commands.dart index 3af322c7..d8123d05 100644 --- a/wonky_write/lib/features/settings/write_settings_commands.dart +++ b/wonky_write/lib/features/settings/write_settings_commands.dart @@ -6,7 +6,9 @@ import '../../commands/write_command.dart'; /// Keys of `UserPreferences.writeDefaults` set by Write settings (Write 05 /// §13.3) that have no command of their own elsewhere. abstract final class WriteSettingsKeys { - /// Default layout of new documents: true = pageless (v1 key). + /// Default layout of new documents: true = pageless (v1 key). Unset is + /// Pageless (T-1); the server applies it when it creates a document + /// (`UserService.defaultPageless`). static const pageless = 'pageless'; /// Default export format id (`md`, `html`, `pdf`, `docx`, `odt`, `txt`). @@ -38,9 +40,9 @@ List> writeSettingsCommands(ShellServices s) => [ ), checked: (ctx, a) => a.string('layout') == null ? null - : (s.prefs.writeDefaults[WriteSettingsKeys.pageless] == true - ? 'pageless' - : 'pages') == + : (s.prefs.writeDefaults[WriteSettingsKeys.pageless] == false + ? 'pages' + : 'pageless') == a.string('layout'), run: (ctx, a) async { await s.prefs.setWriteDefault( diff --git a/wonky_write/lib/features/spellcheck/write_spellcheck.dart b/wonky_write/lib/features/spellcheck/write_spellcheck.dart index ed3483a5..173e3c56 100644 --- a/wonky_write/lib/features/spellcheck/write_spellcheck.dart +++ b/wonky_write/lib/features/spellcheck/write_spellcheck.dart @@ -180,16 +180,27 @@ class WriteSpellcheck extends ChangeNotifier { void _onDocumentChange(DocumentChangeLog log) { if (_engine == null) return; + final removed = []; for (final change in log.changes) { if (change is NodeRemovedEvent) { _dirty.remove(change.nodeId); - if (_errors.remove(change.nodeId) != null) { - styler.clearErrorsForNode(change.nodeId); - } + if (_errors.remove(change.nodeId) != null) removed.add(change.nodeId); } else if (change is NodeDocumentChange) { _dirty.add(change.nodeId); } } + if (removed.isNotEmpty) { + // Not now: this listener may run before super_editor's layout has seen + // the removal, and a style phase marked dirty then makes the layout + // restyle its stale view model, which still has the removed block. It + // throws ("No such position in document") and stops updating (#21). + scheduleMicrotask(() { + if (_disposed) return; + for (final id in removed) { + styler.clearErrorsForNode(id); + } + }); + } _schedule(); } diff --git a/wonky_write/test/features/editor/paste/editor_clipboard_test.dart b/wonky_write/test/features/editor/paste/editor_clipboard_test.dart index 9c03d9e3..ff674439 100644 --- a/wonky_write/test/features/editor/paste/editor_clipboard_test.dart +++ b/wonky_write/test/features/editor/paste/editor_clipboard_test.dart @@ -1,6 +1,7 @@ import 'package:dart_quill_delta/dart_quill_delta.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:wonky_write/features/editor/commands/write_editor_commands.dart'; +import 'package:wonky_write/features/editor/controller/editor_types.dart'; import 'package:wonky_write/features/editor/paste/clipboard_codec.dart'; import 'package:wonky_write/features/editor/paste/editor_clipboard.dart'; import 'package:wonky_write/features/editor/paste/system_clipboard.dart'; @@ -184,4 +185,76 @@ void main() { expect(h.plainText, '# a\nb\n'); }, ); + + group('Given text with consecutive line breaks (#21)', () { + /// Redoes [change] like the redo handler: applies it again. + void redo(LocalDeltaChange change) => h.controller.applyLocal( + change.delta, + label: 'Redo', + source: LocalChangeSource.undo, + selectionAfter: change.selectionAfter, + ); + + for (final (name, content) in [ + ('plain text', const ClipboardContent(plainText: 'one\n\n\ntwo')), + ( + 'HTML', + const ClipboardContent( + plainText: 'one\n\n\ntwo', + html: '
one


two
', + ), + ), + ]) { + test('when pasting $name then each break is a paragraph, deleting ' + 'them restores the text and paste and deletes undo and redo', () { + setUpWith(Delta()..insert('abc\n')); + h.select(3); + + expect(clipboard.pasteContent(content), isTrue); + final pasted = h.plainText; + expect(pasted, startsWith('abcone\n\n\ntwo\n')); + expect(h.changes.single.label, 'Paste'); + + // Backspace over "two" and the three breaks. + for (var i = 0; i < 6; i += 1) { + h.backspace(); + } + expect(h.plainText, startsWith('abcone\n')); + expect(h.plainText, isNot(contains('two'))); + expect(h.controller.document.first.id, isNotNull); + + // Undo every step, the paste last; then redo them all. + final steps = List.of(h.changes); + for (final change in steps.reversed) { + h.undo(change); + } + expect(h.plainText, 'abc\n'); + for (final change in steps) { + redo(change); + } + expect(h.plainText, startsWith('abcone\n')); + expect(h.plainText, isNot(contains('two'))); + }); + } + + test('when pasting HTML with line breaks (br) then they are soft breaks ' + 'that backspace removes one at a time', () { + setUpWith(Delta()..insert('\n')); + h.select(0); + clipboard.pasteContent( + const ClipboardContent( + plainText: 'one\n\n\ntwo', + html: '

one


two

', + ), + ); + expect(h.plainText, 'one


two\n'); + for (var i = 0; i < 4; i += 1) { + h.backspace(); + } + expect(h.plainText, 'one

\n'); + h.backspace(); + h.backspace(); + expect(h.plainText, 'one\n'); + }); + }); } diff --git a/wonky_write/test/features/editor/ui/wonky_editor_pagination_test.dart b/wonky_write/test/features/editor/ui/wonky_editor_pagination_test.dart index 094b6c45..40c08e84 100644 --- a/wonky_write/test/features/editor/ui/wonky_editor_pagination_test.dart +++ b/wonky_write/test/features/editor/ui/wonky_editor_pagination_test.dart @@ -20,6 +20,7 @@ Future _pumpPages( Delta delta, { EditorImageServices images = const NetworkImageServices(), LayoutMode layout = LayoutMode.pages, + ScrollController? scroll, }) async { tester.view.physicalSize = const Size(1200, 900); tester.view.devicePixelRatio = 1; @@ -34,6 +35,7 @@ Future _pumpPages( controller: h.controller, documentTitle: 'Test doc', imageServices: images, + scrollController: scroll, ), ), ), @@ -242,6 +244,60 @@ void main() { ); }); + group('Given the Pages layout and a page that is not full (#1)', () { + /// How far below the top of the canvas the user can scroll to. + double scrollableBottom(ScrollController scroll) => + scroll.position.maxScrollExtent + scroll.position.viewportDimension; + + testWidgets( + 'when the document is one line then it scrolls to the bottom of the page and its padding', + (tester) async { + final scroll = ScrollController(); + addTearDown(scroll.dispose); + await _pumpPages(tester, Delta()..insert('Short\n'), scroll: scroll); + + final pagination = _state(tester).pagination; + final pageBottom = pagination.setup.size.height * pagination.zoom; + expect(pagination.pageCount, 1); + expect( + scrollableBottom(scroll), + greaterThanOrEqualTo( + pageBottom + PaginationController.canvasBottomPadding, + ), + ); + + scroll.jumpTo(scroll.position.maxScrollExtent); + await tester.pump(); + expect(scroll.offset, greaterThan(0)); + }, + ); + + testWidgets( + 'when the last page is partly full then the scroll extent reaches that page\x27s bottom', + (tester) async { + final scroll = ScrollController(); + addTearDown(scroll.dispose); + final h = await _pumpPages(tester, _paragraphs(40), scroll: scroll); + + final pagination = _state(tester).pagination; + final pages = pagination.pageCount; + expect(pages, greaterThan(1)); + final lastPageBottom = + (pages - 1) * pagination.pageStride + + pagination.setup.size.height * pagination.zoom; + final lastText = _rectOf(h, h.controller.document.last.id).bottom; + expect(lastText, lessThan(lastPageBottom - 100)); + expect( + scrollableBottom(scroll), + closeTo( + lastPageBottom + PaginationController.canvasBottomPadding, + 24, + ), + ); + }, + ); + }); + group('Given the Pageless layout', () { testWidgets( 'when an image is taller than a page then it keeps its natural height', diff --git a/wonky_write/test/features/screen/write_document_screen_test.dart b/wonky_write/test/features/screen/write_document_screen_test.dart index 70203228..5fcaa72d 100644 --- a/wonky_write/test/features/screen/write_document_screen_test.dart +++ b/wonky_write/test/features/screen/write_document_screen_test.dart @@ -1,7 +1,19 @@ +import 'dart:convert'; + import 'package:flutter/material.dart' show Material, MaterialType; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; +import 'package:super_editor/super_editor.dart' + show + ChangeSelectionRequest, + DocumentPosition, + DocumentSelection, + SelectionChangeType, + SelectionReason, + StandardEditables, + SuperReader, + TextNode; import 'package:shad/shad.dart'; import 'package:wonky_app/testing.dart'; import 'package:wonky_app/wonky_app.dart'; @@ -410,6 +422,40 @@ void main() { ); } + group('Given a new document (T-1)', () { + for (final (name, layout) in [ + ('the page setup the server gives new documents', 'pageless'), + ('a user default of Pages', 'pages'), + ]) { + testWidgets( + 'when it opens with $name then it shows ${layout == 'pageless' ? 'Pageless' : 'Pages'}', + (tester) async { + // What `DriveService.newDocumentPageSetup` stores. + server.meta = DocumentMetaView( + pageSetupJson: jsonEncode( + PageSetup.defaultsFor('en').toJson()..['layout'] = layout, + ), + ); + await pumpScreen(tester); + + final pageless = layout == 'pageless'; + expect( + session.editor.view.layout, + pageless ? LayoutMode.pageless : LayoutMode.pages, + ); + expect( + find.byKey(const ValueKey('write.page')), + pageless ? findsNothing : findsOneWidget, + ); + // The rest of the page setup is the locale default. + expect(session.editor.view.pageSetup.margins.left, 96); + await tester.pumpWidget(const SizedBox()); + await tester.pump(const Duration(seconds: 2)); + }, + ); + } + }); + group('Given a narrow (mobile) window', () { Future close(WidgetTester tester) async { await tester.pumpWidget(const SizedBox()); @@ -479,28 +525,150 @@ void main() { tester.getTopLeft(find.text('Hello world', findRichText: true)).dx - tester.getTopLeft(find.byType(WonkyEditor)).dx; - for (final layout in LayoutMode.values) { - testWidgets('when a ${layout.name} document shows then the text has ' - '16 px beside it instead of the margins (T-12)', (tester) async { - await pumpScreen(tester, size: const Size(390, 844)); - session.editor.view.layout = layout; + testWidgets('when a Pages document opens then it shows Pageless, and ' + 'Pages again once the window is wide; the page setup is unchanged ' + '(T-1)', (tester) async { + // The fake server's document has the default page setup: Pages. + await pumpScreen(tester, size: const Size(390, 844)); + await tester.pump(); + + expect(session.meta.value.pageSetup.layout, PageLayoutMode.pages); + expect(session.editor.view.layout, LayoutMode.pageless); + expect(find.byKey(const ValueKey('write.page')), findsNothing); + + tester.view.physicalSize = const Size(1440, 900); + await tester.pump(); + await tester.pump(); + expect(session.editor.view.layout, LayoutMode.pages); + expect(find.byKey(const ValueKey('write.page')), findsOneWidget); + await close(tester); + }); + + testWidgets('when the document shows then the text has 16 px beside and ' + 'above it instead of the margins (T-12, T-1)', (tester) async { + await pumpScreen(tester, size: const Size(390, 844)); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 50)); + + final editor = tester.widget(find.byType(WonkyEditor)); + expect(editor.compactPadding, WriteDocumentScreen.mobileTextPadding); + expect(textInset(tester), closeTo(16, 1)); + // The first block (the title) starts 16 px below the separator, not + // the pageless 48 px. + final top = + tester + .getTopLeft( + find.descendant( + of: find.byType(WonkyEditor), + matching: find.text('Plan', findRichText: true), + ), + ) + .dy - + tester.getTopLeft(find.byType(WonkyEditor)).dy; + expect(top, lessThan(24)); + // Below the last block: 16 px instead of the pageless 96 px. + final scrollable = tester.state( + find + .descendant( + of: find.byType(WonkyEditor), + matching: find.byType(Scrollable), + ) + .first, + ); + final viewport = tester.getSize(find.byType(WonkyEditor)).height; + final position = scrollable.position; + final contentHeight = position.maxScrollExtent + viewport; + final lastBottom = + tester.getBottomLeft(find.text('Money', findRichText: true)).dy - + tester.getTopLeft(find.byType(WonkyEditor)).dy; + if (position.maxScrollExtent > 0) { + expect(contentHeight - lastBottom, lessThan(40)); + } + await close(tester); + }); + + for (final dark in [false, true]) { + testWidgets('when the document shows in ${dark ? 'dark' : 'light'} ' + 'then a 1 px border line separates the title row from the page ' + '(T-1)', (tester) async { + await pumpScreen(tester, size: const Size(390, 844), dark: dark); await tester.pump(); - await tester.pump(const Duration(milliseconds: 50)); - expect(session.editor.view.layout, layout); - - final editor = tester.widget(find.byType(WonkyEditor)); - expect(editor.compactPadding, WriteDocumentScreen.mobileTextPadding); - expect(textInset(tester), closeTo(16, 1)); - if (layout == LayoutMode.pages) { - // The page fills the width; its setup keeps the 1-inch margins. - final page = tester.getRect(find.byKey(const ValueKey('write.page'))); - expect(page.width, tester.getSize(find.byType(WonkyEditor)).width); - expect(session.editor.view.pageSetup.margins.left, 96); - } + + final line = find.byKey(const ValueKey('write.mobile.separator')); + expect(line, findsOneWidget); + expect(tester.getSize(line).height, 1); + final color = tester + .widget( + find.descendant(of: line, matching: find.byType(ColoredBox)), + ) + .color; + final theme = dark ? WonkyTheme.dark() : WonkyTheme.light(); + expect(color, theme.colorScheme.border); + // Right below the title row, above the page. + expect( + tester.getTopLeft(line).dy, + lessThanOrEqualTo(tester.getTopLeft(find.byType(WonkyEditor)).dy), + ); await close(tester); }); } + testWidgets('when the user double-taps or long-presses a word then no ' + 'text is selected (T-1)', (tester) async { + await pumpScreen(tester, size: const Size(390, 844)); + await tester.pump(); + expect(session.editor.selectable, isFalse); + + final word = tester.getCenter( + find.text('Hello world', findRichText: true), + ); + await tester.tapAt(word); + await tester.pump(const Duration(milliseconds: 50)); + await tester.tapAt(word); + await tester.pump(const Duration(milliseconds: 400)); + await tester.longPressAt(word); + await tester.pump(const Duration(milliseconds: 400)); + + // Nothing is selected: at most a collapsed position, which a + // read-only document doesn't show. + final reader = tester.widget(find.byType(SuperReader)); + expect(reader.editor.composer.selection?.isCollapsed ?? true, isTrue); + expect(session.editor.selection?.isCollapsed ?? true, isTrue); + expect(tester.takeException(), isNull); + + // What the reader's gestures ask for (a word, a drag) is collapsed. + final node = reader.editor.document.first as TextNode; + reader.editor.execute([ + ChangeSelectionRequest( + DocumentSelection( + base: DocumentPosition( + nodeId: node.id, + nodePosition: node.beginningPosition, + ), + extent: DocumentPosition( + nodeId: node.id, + nodePosition: node.endPosition, + ), + ), + SelectionChangeType.expandSelection, + SelectionReason.userInteraction, + ), + ]); + await tester.pump(); + expect(reader.editor.composer.selection!.isCollapsed, isTrue); + expect( + reader.editor.composer.selection!.extent.nodePosition, + node.endPosition, + ); + + // The desktop selects again. + tester.view.physicalSize = const Size(1440, 900); + await tester.pump(); + await tester.pump(); + expect(session.editor.selectable, isTrue); + await close(tester); + }); + testWidgets('when the window is wide then the page keeps its margins and ' 'width (the desktop is unchanged)', (tester) async { await pumpScreen(tester); diff --git a/wonky_write/test/features/settings/write_settings_test.dart b/wonky_write/test/features/settings/write_settings_test.dart index daf8173b..248ea808 100644 --- a/wonky_write/test/features/settings/write_settings_test.dart +++ b/wonky_write/test/features/settings/write_settings_test.dart @@ -176,6 +176,15 @@ void main() { test('when the page and export defaults are invoked then they are ' 'stored, and invalid values fail', () async { + // Unset: new documents are Pageless (T-1). + expect( + h.services.dispatcher.stateOf('write.prefs.setDefaultLayout', { + 'layout': 'pageless', + }).checked, + isTrue, + ); + await h.invoke('write.prefs.setDefaultLayout', {'layout': 'pages'}); + expect(h.services.prefs.writeDefaults['pageless'], false); await h.invoke('write.prefs.setDefaultLayout', {'layout': 'pageless'}); expect(h.services.prefs.writeDefaults['pageless'], true); await h.invoke('write.prefs.setExportFormat', {'format': 'docx'}); diff --git a/wonky_write/test/features/spellcheck/write_spellcheck_test.dart b/wonky_write/test/features/spellcheck/write_spellcheck_test.dart index 96c48284..2bd0b08f 100644 --- a/wonky_write/test/features/spellcheck/write_spellcheck_test.dart +++ b/wonky_write/test/features/spellcheck/write_spellcheck_test.dart @@ -1,6 +1,7 @@ import 'package:dart_quill_delta/dart_quill_delta.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter_test_robots/flutter_test_robots.dart'; import 'package:super_editor/super_editor_test.dart'; import 'package:wonky_app/spellcheck.dart' show SpellDictionaries; import 'package:wonky_write/features/editor/applier/delta_applier.dart'; @@ -224,6 +225,30 @@ void main() { await _settle(tester); }); + testWidgets('when a block with misspellings is merged away then the editor ' + 'keeps rendering (#21)', (tester) async { + // Removing a flagged block cleared its underlines from the document + // listener, before super_editor's layout had seen the removal: the + // layout restyled its stale view model and threw "No such position in + // document" / a null check, and stopped updating. + final (h, spell) = await _pump(tester, Delta()..insert('Good\nborwn\n')); + expect(_flagged(spell), ['borwn']); + final second = h.controller.document.last.id; + + await tester.placeCaretInParagraph(second, 0); + await tester.pressBackspace(); + await _settle(tester); + + expect(tester.takeException(), isNull); + expect(h.plainText, 'Goodborwn\n'); + expect(h.controller.document.getNodeById(second), isNull); + await tester.pressBackspace(); + await _settle(tester); + expect(tester.takeException(), isNull); + expect(h.plainText, 'Gooborwn\n'); + expect(find.text('Gooborwn', findRichText: true), findsOneWidget); + }); + testWidgets('when turning spellcheck off then the underlines go away', ( tester, ) async { From 1c86f66fb8eb0bd128e6b1f62b99258cfb4646c5 Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Tue, 20 Oct 2026 09:54:56 +0200 Subject: [PATCH 2/3] chore: PR screenshots for T-1 (removed in the next commit) Co-Authored-By: Claude Opus 5.5 --- .github/pr-assets/t-1/sheets-mobile-dark.png | Bin 0 -> 27753 bytes .github/pr-assets/t-1/sheets-mobile-light.png | Bin 0 -> 27691 bytes .github/pr-assets/t-1/write-mobile-dark.png | Bin 0 -> 29620 bytes .github/pr-assets/t-1/write-mobile-light.png | Bin 0 -> 28778 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/pr-assets/t-1/sheets-mobile-dark.png create mode 100644 .github/pr-assets/t-1/sheets-mobile-light.png create mode 100644 .github/pr-assets/t-1/write-mobile-dark.png create mode 100644 .github/pr-assets/t-1/write-mobile-light.png diff --git a/.github/pr-assets/t-1/sheets-mobile-dark.png b/.github/pr-assets/t-1/sheets-mobile-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca198f9b32ce2b908df6e6ec92a9a939cceee2d GIT binary patch literal 27753 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 literal 0 HcmV?d00001 diff --git a/.github/pr-assets/t-1/sheets-mobile-light.png b/.github/pr-assets/t-1/sheets-mobile-light.png new file mode 100644 index 0000000000000000000000000000000000000000..c4980f046f25b8660f279bd081b09f5f94686dd5 GIT binary patch literal 27691 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ð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 z%0D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 literal 0 HcmV?d00001 From 69032abfb98b72bcd885c9a5c22d0a579042d92c Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Tue, 20 Oct 2026 09:54:56 +0200 Subject: [PATCH 3/3] chore: remove the T-1 PR screenshots Co-Authored-By: Claude Opus 5.5 --- .github/pr-assets/t-1/sheets-mobile-dark.png | Bin 27753 -> 0 bytes .github/pr-assets/t-1/sheets-mobile-light.png | Bin 27691 -> 0 bytes .github/pr-assets/t-1/write-mobile-dark.png | Bin 29620 -> 0 bytes .github/pr-assets/t-1/write-mobile-light.png | Bin 28778 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/pr-assets/t-1/sheets-mobile-dark.png delete mode 100644 .github/pr-assets/t-1/sheets-mobile-light.png delete mode 100644 .github/pr-assets/t-1/write-mobile-dark.png delete mode 100644 .github/pr-assets/t-1/write-mobile-light.png diff --git a/.github/pr-assets/t-1/sheets-mobile-dark.png b/.github/pr-assets/t-1/sheets-mobile-dark.png deleted file mode 100644 index 0ca198f9b32ce2b908df6e6ec92a9a939cceee2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27753 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 diff --git a/.github/pr-assets/t-1/sheets-mobile-light.png b/.github/pr-assets/t-1/sheets-mobile-light.png deleted file mode 100644 index c4980f046f25b8660f279bd081b09f5f94686dd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27691 zcmce8WmsI>mTdtE5Hx~o2*DkKTksHqyIb(!P&fn+kU#AJoPwgF zH{}zo4O}V>(u0ExvWU-YA5+*8NczSdUnB9jJ$T?CN#H6>j!njC)|Yr}DC9b~?&v6F zE1{~2OA+umJtnOR{W*BG{?-CsM5Pe@AB&=rKEe=1rEq%5ib@eM@NZ8XI<2*;r0$7W zMo*#SNAJ(SqJ6uIj4Rq~srBN%%ie&;KV?-_a^HVw ze0z3AU#w?6M>S=xauIRe@X4)|V{VSyWqCHerF8qJ;ZUD-)=8H{e*Vsc{esaNrd#JXo3_*vj>bb09#1+l zm73cANUFD8U(pH{fz#rvo5e+&o12d`if~qc&rR!ew(*MtiEJ^XiVkutFGr*hbxJ3vXHZ{XM3;K=7Sr z6Pci;md+2&!bs%=ZT9Do*ZPjKUG`&oIV{!0jHfSI=;|!9>Zg43M|5UNNF~)2MO3R= z&4Oor@sl=9cH~k!Q&RhC26JTO{bcV>IIo9hhlxilaoSq~x6syBn>x91bL?n2b!Ar1 zWIR3jVsns%4#b+VDFW=!S6Asvit8^t6>*(L<=~q1N8rX_~%<_b&R5 zRrR6q+U^e}6ifM4O8sk=q=k*;5qkw6ot)9+hOzi&>z%N>v~?GMOv{ewOr281kM3&gVNybsPX%IIdsk@uq!d>4Jw9Iu zYBTwwbT3Ory3%g$noc{FyYtza#w9N_v41(B=sSmcC~ZmM!Z)Gijg`^36OQ}esi}f9 zc0Fnjuuu?8$s0(Jcfu`6=xJ#+7`knjtR9P2R&QDIM@L8RW;+j%Kw(G;y^=X{Ne3T{ z-VUsG(-Uel*lJD+&1rSYzu@OAkb%!rej^cVRwRd>Me>v&0D)g0M|;9;k=Cqmovz6p zD>(ls>~5J?)!x@S3ucvFLZ3% z9KxlhSfs+c40|l9v)&cWurpbaGMv+IR56MA=#lBKPian@L+uvpxy99vr(3Eyr2R>` z^g4}Nj;+m#b{EfY>D7y8>QgOX=|>`0s&^dKo9;Faxmv2K`8%q#Sb<0R^!d9`mC@Gb z(DTDp7rZ_l!7#BrWbEi+T>OJ$E|3)7$y60!k>n>CZM(TUAGQ~deWu{S!R1#dqSq-d z^%Gk?D;6wO=T{&_n;=!;kG~IWJRO^M^+?#h6_=drNV#u#S};1bW6XK3BNa|!KgCw! zvh?dwESbKOj>q|)+2xV&Q76qbEyFcd!Y*2hXZe@a?)yJ;jn_#ISgNXdg$>RwKdnbc z3!>+R*PTfdWU0(LitfW5pejZcoL<(}) zmH0VTRWHvh+0tf%mlaf0f{|2dpR7K{8hg#iMB}GQP z@l`4+Z(QQ-l5cKAhlb{iSN<5@?3iI&G6gWG7auGJYfH;`L`>VjzI^?9$L*Y4piaCm z)YaYHW?5u#Vty-D*bz>;ywVwkLCW{t=l&Xf54KNpadkDP!kcK)5uS9ivDiWCGBdc; zucoGFT}pK}s>nau=cbb;kzZidCwMYPtbdh&fkAJeZk7CAO*Qb@YSsgneX$Z|p$Sqb zjz5B`s-nGucb4Cs?)6ZA1wOU0`W5snE62rUj~!)D!dKm!r2ml>TTYh@kNqmiJ)g$| zP-@Pv&X&(?1Qm8U%~UYRaxJ^byFP{A-Pd04!K%g&51Utn?;ZK9#tK&h@$rT-q$2Rh zhb^ldz_Pxhes+6x3R`S)cDWpnNu!{VOKh>M8mchsCs(1S@cz`BFmHUY0CPL)lyaVi zIc@%ok{1f?H8nn7JO9DH%Jz{Q=Q#;h2PR5<(HPp@b+h_GE6V+d_5HwfnseW_zPa^a z^K|7Az8Vz#)gkOZs&&tN_bcSt&CPlgfsjDrVq06t=Z1*SpFg{=^V%;xI6Uk>$RM9> zJ6K$t@%He+V|-JnUd?GWhG?#9G#;z^DTdGMiqXVm{t2m z@;omL>(AoK%h`o)SVC^F8+4u!rdw7>1KF3Jc%yt1AxXxu*z1cL+2!HS4YU zp*t^GSoVXOD;j<0BBE##xS!G0Hj7wkihnK?9zQuUiSFso@4P9Dw{5at*e*Eu^|FMR ztb%vlhMko*)X!a3c(PN*Bo_;XV%FpMBsI9UjpR+)DH?eqPm7EPm!g(i9AQc^C6^;- z7__NvzUhklp6?uYy6=u$PmfH6K~;qgnvcT|#gS9jd96xv0_#oL>e`CWdPOqwnR6yn z(BrJsv{%c>IETxvW`4lTtj9GzO)U5*!l$A4Y&T_jdAZH8zju7s+vi#Org;vqKB)%_{Qg`yx`(L>4y5c#lE=NnALN+EVXy8}>jv&Ww zA-27V=AOG?@J9)rJ#nGn;{u5d;&pvyQ&66>9ga6#t|dU=KWsy zW4Y&Vh{3f;3k4oglP9^i6$F>AtuK2f%JHnrkk%>r4Kcb?d3J8`m$3F#IMy*7z z?Hi>OEiJ9V-psm_FH)*h1X)iauM9d7SHhRt+D%z+8Z4<>^uu-;+4Ezm@S{{K^+3vd zvkp_`M}!LZ4!Wuj_k9%FugO))mgG78Z}qst(R=w^IAS&OVIJx{_M42UM(V2BHw`9RzF?dZv_Veot4|Mr)8emOz@RzR<93zQuy%4lsCEe z1;zFG{yO=+Yr>Bo1i8C!>pkld@%25Wr&;*S`hRg4{X(Ud_l|7z zI7ei4D;KIowXbNp-b1XJ9XnCt06&xTZ;a@>V`;vn=uhm}WMyk%K$d@hSuN`zGh6F1 zV8=`Sx6RVIWQ5vn1vD?D?~wZIlGU-U834f0df`>jhyD{sdEv ziitU@w?EgI@aUP*7AXtoDNDn_Pf_p7?wqu0DZ|nH(ah{7tdk)Vi0Km)psp)Wv!8eeZX=sLAI0kIbo@*=YuDhepHm!yAg6vFrXQyFX;nkdO&J zk*tdJ_3f8@(bGHFpyd3vaF!b1Vqd)S8~<)C5vHjtjU0>;9{*6Kv)L017Z+Q#b^5)y zDyb_iXF+y;ev;o22gb=Jx@9kYL27C)a=1Qic1jI74@NH5L-}Bu+xm-VlgDHb9GLIx z3Ud1Jcq&+Q3=1O}F@H2Dj26OWWy+crrc74j#a4%9V}+XC18HL0U+{nZ63F$q^|?RC zg-}X`k61^58sbzUd@n$3sr?XufkE#rl8m@i=0}7FmcYlsnSt{I5i6G%*x1q58ri7Up z9Z2&b?tc#oOvn72ZFIcxNhZM_F;OTs_M*hR9ygii` z4Z17$I;}SSd%|F>^8{3 zHsWz4ig2&>-0X(U&ab-eSYCDeH~=n_a5ilBe6!L~gO^gFFY6_qKJ`}J7bU~RZ3l_x zc$pk~bZ;cVY9#lQ`}8|%NB?WR`484TKiHPFRFEkW(_~_qKNE7q?@qfsCc4Uygnb8T zzB^g)`f{?LY$Utn>WWMFH33Fd_a?XD&j5n*@^V@_I>VXTvIoe>uj==!ib7~oJpIT7 z-3?w5g@kpRg1momeQp5e{`>bt8WtApu=b%1-G))Ev|ArBKFgS23IhE0OF!MbM<~CFWG9o*3cjWBr$I2) z_xs{iJAW^AGvV{tWp1tic{3!x%rU*;N4I*BD{b-)E${DG6DeLzMaimQQVCy^t!Ls_ z^Rmr0O}S=PG3|D0el_)Xm;J*1O@;>M<_d1>eY&!H_yh!~RY)C_lAmkWD)_g(@D`?R z(M_l$&2a|@moN5U=m6pwwffba`n7Ein`t&)m0%F5a2PI+(%>tI-OMT6)h`*gN4+;bJ>=m4D}6q<>G?Wxor%ZV-frfCo3k7uK#sJ0+L zgZ;!*6)~Y`EGc3ltCyw0()XK2|LDD4x>L~; zx)H|FWj5BIRBXy)&Yr43dx(N|7VrFxgq|XsjEAI(mjq|Mklf*5fueQ|(S|(^Qt5re zM@XpcTw>Or+o=s&3-VrOU9 zD1H9z8I9b`iY>kPaI)u-VzRe8QB%|GB+R9Gj6N3~&D*<%&F!ck;Q|EnOTKy&rkNmS zKg>rM7zQAMJ@4GO#DcM`?a1}@^|?M=@XN$7nk=;NYm~pIYrb<%Kl5zc7|bZuV4U$f zkAM)c8S&tS1s)t+8Gjjpa=L7feJL%a2nZalq&4mH%>vBoYkHbnRvn6@;bo2f7-AtKr2fNdTf@zN{Q9)IrVuoay!)i5nIFa-1ojvcG@vMKTb!cXM|N5<9=+F1KfRTAmpJ;E)C! zc5``hJ3ACEblKAVB2xK%(EP*MkA>5wt1Vgp%^CHZ3N=l(X6lsvr}yiJk>urxJg<0n zi|B{uEM1Fg_3ziN_npUPVj{k|y8qO5;R2nt8gfmU_I=n813uu2RMguPN+3gI$-%vb zlvh!!1bowqq-de}>9lC~`^g$Yg2z-aW|AV=)#VmNOb)*ej-Nh|`x_{>h$;D%3+D4* z6Tx$HrV2YGf-XTRUJXzEYY@o&v9Gg>Yz|rGo&qFbF*e-6J!RXUEC^~@`25Yn{d6R-}aYU;DwXh8i7d1XNhOJ!*srFgQDuRY}g?hO+1yO|I`R9jF{U5D?U9 zmUMI6|7lw}|LF%a; z`&IH&D?*W3_o4ZTuojyp*VI%VgB9zVjMUV8C{A$F7ClPzma1H$aC_O1Q4^hD_uzh? z{mv0#)7>7)5B|Z{C&QE6_?ueHC%U-2pD$gKh(ys*?BhC%Ai(l5we)0+BRTxxN1 z(>GWu7Mhg1?oLKV=Cn7Hry1hzSx@)*GD6NX#@R{>Q@F9&v0~VRi-GlIbH?A6C8a=@ z5&L@|vO|;LuQr#@3%){PmSjfCubn3p3kvLW>0{~Xd9)lt{f^B#o9)7H!rF24XtNfS z9;x#e5C}9XV4#sDlerS$2-s{RlBLoklUQ;#!Y*ca&h2Er5Ob>``aT|4#0g~9<etr1g&oWCAyK$F|i8xCB90m`3B5 zZ6mTcN;uK6%{Pxv-{Ri(2=eHAe>2AKi@cxZZK~7g;hx7;*0E^Mh{7jJM#e}^rqv@` z$V$CPV58^MoKo@kYgM=os7xObpv~baohHTD<=sH>c_jL&T0#*=Kv2*k-6gAy4XXG< zc>K@4e$fJKUnlCk&P*QZc+GVvfP8|ZqtM!XeD(Pl{jKLY~G9)qea{ma-830KICm!hFIF>l;VCVEsxYCsjxmoHrSqv+PNQ&c3gIfSF05`!tIJb1_6iaV9%E4l z&-L%tNXv+z4gyUgJ@U|=YPy`E&b`Vl);vSeaL32##af!2)24%CSZ@^%Tm!1*%r96x z_-1*wQ?%4Wh!Wea+SRS9pxR@KWLhCQ--H~5ef)xP2skpQO(2vrFj}(Do@pw1> z0Wx^udrAPLrHwa#ouc#=0iPKDZ%?e}DVu4-;QG_l4T%Db2?9X1D)*S}an- zORG8W7R0ze{4~ZKluLCwSY4~^^+rANe=S=5L(S@_0IHWkcSp*>U`)j2F}Z%b`KxNE zJzrr-#Cp_8PW03^nYXvV;YB|oJ5Ql%_vkn4%Zq2_)h3P}3eV@08J8A+pw#)y{1{_a zgVFe=VNTR>#Qqt4vO+2#{_D@d7_(e3bUexBE2|GPL_#9xVmU>hl6Ny2Tpe7wx-9>v zoB!8-EK95TD?n9W45z3suCFt+PPJz;z6@{Q3|>12$GmqkpO83{Lk-@P!5leSGSihA3S_mzUyeg zS&8fGi!c=Wj5P8=klJ^bgU54{l+!}H@Bb5+9tm?>;a5Cey9XE)phsQJLdksV+BrPy6Ljl3Rkq(y9vrZ0+degzDcaXUFkXF(HUp(uB%?3E7PI*7J*M z6_Lf`by3>*`XDk%Y7&awiyHO!DAu%4cwP6J5F(XpbOLC_a*tL%+ z#8Fgrb!8`A<`EV=rmbDw#{wR}wbelcRdw|!mjO|r!a`^o<=Eca(IzJ+vtKZRdn;OK z#^K>W^7Hd)dG*oQ8KhAu__D41MM+_eM1M)LwR$jOV~u8SK{#2Uhw|_toA-^YsF+xi z!_DS!4u|`RxoKbG=J#di2Wkb;*g_W{XJIa4)=BSDgh+jSd}h7t>gqDHve@jG#M9H$ zwel)=^<}m*Y*GMMVaOh*mDRJWDYHdMN$DSk&$0ygKY%?p=9`;kx>knp+N%3&I2_Le zm{gaF6!39=wzWON#?Ao@M?hfUw}gc4@5>$S?T0N$*gUHmq`sq;CTBa7JAmW~c}BzT zyrsgdTmQ=+Tj-6UVOq7klG0PhwH^v#;S@k-fkmD!S{p(6*luLlm&p4rk>}gRg)97e zAnRyX?d&Q#Zc}n|$MQO^v6}V}fN^b(6%j{K%l@>is?XG6wqpBm?a42ZBX>BQYhTPK zkpYGl^5x5@b@!h?1}lHQO>O`DDH<9UwmDj$-k57urA0?e3pn_vL_}`^6-XWR2+WMA zsOZ)#CnvNpGV*Dm8pGY)odzS`JL;%mE#^I=-Ki?4{kf!Q26fA6$#4?s*RLUt>wPBO zF-$l(ICe)X($%)}eE>yFtadC0qV`41V>(`S#F0SYA=ji9ftibr*j~DBnR?8=FeKAY% ziUITG=kM=)&l<4(Do5z*e80ckq}yqKd^Rq=cTHPuEIhUD)ZS~ns$jd##J9D7d|Wly z=1IZmTW|wILr%?wgqEXcwIwxy(%VW4EO56^&@i#y8Z9jpWx$5 zd3!f?Ur7hf^^SA^rXh~oHhCoa+3nXW(A>gF2Df9=u_EpD@+)%}|9(gUx2@^<-mFfo zoi8Ra7pv`@fN5|1!`EtRcwhuz4b88mBqc3xr|9VDNcc{?$`1jXwzRZFBp?qiQOQJyqE|6qq z?;fC_i0x{~h&ebo5U?7wFfprkoQiExGBAV%qT?R{F>EY>iqfVJJ1+tZ)5zF(vfKn6 zpGEIIAQG7Av|%6EPBw?7w(~X1j2<$m6%JgTdU<*hkt7y#e3&S8SLCCi2|hSDaKFB~ zxKPm3E1rffv;eBgGx1`&wxk|!NcjFz9^{a`-j>?xhhtCbN2Wq!#-wa)it%tV(K|1- zl*kjftY5IRE2(2IE-p^tsGC{E`Yvi!nD!b03hup$$rD^$iFfZX!2TX=TB+~)A?U#c zxXzap6uzt7u@&ZnFThl$cn)1GxXqT4xh^1p@RBz)q{z$5E7WVein$B7))W;*Y;A1? z0vDOv%99vo-L6dOD2VInsJb@Hl~m4gJEOGpE64_=?x&WI(3s)d%Kd~Egf@tIiwcsc zs3_et+dr$i($C0<`avy#UA_9k9{29$%a>mh6F-kyjxyhY>>;X%(__j3I`A>%k6;!7 z*Ng@PJPJrG%w=mjT+ z!P)^qR90ME+zP*>&BDeDgm{JRywHmmFBEVjt|u!klnY{-8^H-io!YP7w^xG|X7V@^ zi+MT8FDNKlO|bo-8=e?=VOg!kpSMw*vgK3yj3WfIF==a7G)Sc##}Z1eZK5J0A(eTJ zKQA+drtr*0gDa2|!{n0Eb2ln&v<(dO5s?u2pa$lDvSkzg^z^)BV|((kp+O)rDhh;R z0Y(#N>wgqI8SR1y;)g*{;ok#F5duf3Ks?BU?+P%g&dN`c}NjFss3gIL-Ye5ej*BEC!V#)r*(1 zBxLC5`Bw9lH%WLM0)G7x2l>u<8i*g#($aN##K~a6MBD7-(S!)>o+|B%n_*66#)CW zp2g+p+Sj{t+06U_3H(!NXuV;(Mv)rGq+pE~77S*a0RIPGnQrw;^cr~_*D&yzbq3~O zG3`dJe-+5BY9EZHF^}8RaZod#)6huORC_x(uotM8jHzvL#=Qfj--0O=5N#W3<2n_l zn5GqVz4K|+&fwd9CKHU0<1i~XY(uub_C-R`XmBk%^9l|Miv028jfeyBqTnwoaheh*4K7`6%$VB?U4jnan?9%j*CJnVZ+dKGtN`f2k92nsfc7?2=%||zOu@%DMYoEdE~nd_ znwNlCF{#5cT4|s4?mWnXw2X`+*67&S z7dE8CY*^Z*O0y z3sak}hVE(s2oO)gT5q@LC)3UFpb9@8RBP}ZiFVG5yJhs0lqxvtt>!l6-nI={PjfvjS@V**OK^y>8WA+TN`xdi=tE;P1 z*WjBMYE|W{c1=Bj7Z!DWFV*X&U=ZO6%mQH90g}$}xUc9Ja-0@8AQf77)D4K;%;GL7 zD&n43d=*2Yx7Ef;blsHTKA*IeG0PM(sPy!404xfH-nJ;aY5z=tyu3dDpRM(G7U){- zE&jJ|dMOc$Q!6JTA|jw`(M?`)@vGmzoqClAX0*y`+~H`Yle&Zs z2>1;*N8JD?Dr(Dg&ej&TA4Htbt%J;bIZLkgwZQ?GE1_34XGpWzyRmx9(9=`EWzLNT zpuN+WU$<$DcwyBCWUt-acjkC-H77F3%|v- z;AiB(!~mKX4HhYX^Cr+DFd-SgeH+TWIS4wGI;YL20PJIs3*7{be+PjW2l94JZ~Mmr zEetmlY(*8P(0L|(#43>&+sC`_T+JI8a;xfQOlE0_)6l7_YWjapK@dR3`g82dsic+_%r(kx|E zO)2YaA2jDyMSdV#s1<6YFAj!D$3)B(60M5yUnPaJ@NBGbtU3EkjZRW%TR zBwVOn6AtDkXU-)lI$FZpTj+SLN-iG3%wF1nfSqS2Cg-RS4smpq$cWyA{P_M|917*4 zpr8P07N~q0Ox#xRxhmm!4ax$T1sr_*<2jFg5o<_1k9|5G$y$F3_G|E=Kn61bdu*r> zU-*r#+`1JD9AyA&0&p+AQBlFsg+WK_<8m>nff`eOawhA#@=c1UA&nn&OQ72sYs4oc z1X-T|bX>#Lnt%#o*7-Akcg79CwykEJZfll*Kg_|U!qAuqa4w&SxPM3I3^8g|egZ8T z8^9gN70g*VIZ;VTz0upy`yTSXe<*c;-o)<}<@TKY~ zf`nHzMaau(dTVP#3pB=5LPAZtl@mHd1OTAb8V|gtr~j}*+Q1oN4Z6rqkeA(d$~xfC z6@cBI6k+{skKV2>qpt6CQ{=v#@8JjBNtM@A!a*Aw8woc|;!>vUaTB%nl=6b7INReT zX24hm6w_ERjn*k3D36YhAEBWkK7aW#008bk1Z_-8F1NYYO-y*`z-5I8;E>g7ByX@4 zl9&PH31yqx(qYQ+U`$c5Ky)~`+tRNPM(yg)M@J6KI<=`X%Wi_5Q4CY@6B8Q1Akz!r z7J@5?!$*%E4c@5%gbjzw=y;6JxwzD}uWlCnv9+pZb`=#AzS=yGpTZ-l8jr891jfD+ z8*bw;=0_NC0;zudKEF}Ot^8B!^YIctEhVL&AX7U51^?OL;9#PF+f&P&5RLH16CzM}o49v{Vw(LCtPzC_&jK-Ac z=+T8r4vTVhb+)*7?@diDi)QM1Pv9LF^(%PrflVcK?vk9CxKn++HeC(|0m^vc7co3M zymGrmQ6^SkmY3a{4@gBJ;OIPmrwPsWM4FEHwCn`K-3f8 zcD!dl1ifEmQqq^n50Z*Fph0)LSPZU;lm5HA0yu8>HXz`Ewfpv;Zo2D9T1It@_XP=nYu>DXI_ER4fB_v-2!-cJi7#K zJr7pgaCfym#YqVdW|T!}LPT0-W&oI6;=aeA+1@om7SUdm+wO&hWk2noHz&`-Ubm9- zdi5Jr6LM=S9K#x)HO;q?; z)am6e^gwgQeeYH6*poM2l}vjo8Ch2 zzX~-goa9BvN0p8DVb5Y~2&%oBlHw}X4^I!ZE1aBl6;J`VxSe4H`8b_cjyCNvCt!^L zChv*kkdk>cJs#1<*Hq(XY>T>%)4g#)@^jf!TJl#x}*~ zKY;q!PvFs_Vq^OT0J$d84mCUk08jE21b(-*{mP#wPoF)j+UEinl$Np<(E!IUCmeql zOa}prp4XKVba!esrl7RG5|m|^`Sp+vpYWQR!RQ=|Z<(1dK@TIYr9}jGiow;%rj`l| zu-||V2W+p%m>5Z*cmg9PiGb_Z^EnUfj{tIk8Zpt;9B7UWLSD1Z!6aiA(|PkniLMQ- z4@|eS%!lz?%!FQ3{FvHX50Kc2cfz&n9I}`fwEhA38|O+5#TtJBq+z%--#p(=1;vc5 zBG_^ez$PU54LT**)+@|h%P1+{KU=rP#p)b#Xd zQJufQcP!H?0(2yZu&k^st$7>3)m>gJM-XzDV)&zAL%XR{&B?i}r^LbM#k|hvl}qAt zR=z|O?jItB@OU6le>?B?c13-(F)hYVs{pDxV#UeKrMdlJmy@U#(A zSYKZ~QOOLH9n5ex&?f469!dZX>eJ`XFE{GTA^?wT1Vngw`Sl#(Te^Rs&$oL&e=(`X zW;=q~F1tqzAcwg*EocisHA?}i<(BCX>UwBs=nGI}0pw)^?CoCTxgMND1=j(})AMRG zClL%z9as(;8XDX$S7!rdeiMMGBV>QsgB#pL2ZQdu05tLLbWMfB>RUWU4TX|Cd|(6v zRa{Xu8W=PH?v7MrDB1V{hB{GWOAcJEBaz+8(`LG{a!^q7wDgYn08xc0H;Tud12UIv z0@tP~0iYIMP*U=O{5aBQnhxDD1B5Eb$B}Vyf3*=sGu&-dzJ>!WkEsP->0NIQwnZpD zp|q8@T9hm%|G~h>2$&`bk4CU>K|fGA4&X}`u>vWAgKE73{o?vMDlxHVs>-U$=YDf@Gcz;uF)1l#3n*^Ds}r(!J2a$J zvm4$-B`-wNlhU2)TVwOsbgI%~DoJfN0?_1u)eZ;Lts`1x0RyG4q}f-lM+ zfNF$}L2L2t>sLsX?3vr~nju$06^x5Qs~a%Ho8u)ZWBIOIc{y+1ys?``SJXZSf#$F= zKmn+*(DZ|=?UD+sac1kM-IW%@8{p!-Th#)!DrlKcDOMaj@dIc&wJ{+wtNTNsV1RwE za?aCZXyRkVNU+r_&X#$ye{>Qgpts|0*pPYscu(AvVpdDmYkoIP==~GHe+q)M`a3=L z(`?8eQ=5E?bRSRzn5*-xEL7NGx)AAXqrzD(mwfEaw@-nf_-|Fi;o@XZIS`IugVdV@ zZ^y8PgPLVxkS|k9A%hcE-DO!-Zoe#P-97>$*V2k&^j4Q!JW{$&(#D3_!omUq^e#55 zF~(WtzT@@&lJhuFI%{;Q=S_Sm+*awE_}t%l+#Uo3{{RA)dJ@)0y+-%450mV(?RN{U z{$RQ6&Szb=5yjlyuVh(xssRv$?$0sZKMs^>xL68S7oFfhT`MX ziiLatc^ZTmV0HsRPsGUhPWwe81*pl)#KyU~xv8Kal|;p9(a{Y&%pffzV+{BVAT%KZoggR08#FCk z!Pw-~0Cn+KKkj4yFu@A6o2v1S2=Wd93tPP^%F9!^2EW@i!Kr*;2cNA5HRx=AzN9fc zEGz?rXjr=vOGqTlURqtrLX!|ee3z3gyf+;sA#h)?j*5X{*S_hLo{<3@bu1vEk08D_ zH_ydm1#%c%n*rTM&=hkPIB@`EJuBItY{tJ?fdvelegj5&xYVwN_#LDWfOK0x+yM$0 z;1Zp+QFVRrln3(CI@E`v4iF;<1uTA&#m4!sPKKQHTWr3cCl8d7#(~ zBffTWdIfymG$6f_@F z$dnS3On|_WfeUm1K$roDwes!B;US>E;(?O4<-Mha{1?-$ad&s#tgNTk2h^3VUV+Cy zCy$PfK+zj{_z`ecaQ4hncq~yje3K zS&q<~I3veC2m+XWuhE5-g;}d>|E|=p!9N(TUF+KCBV&>aC64R+=;A{lcuZQqwo97( zHU{VW-@`i%US3UN#&YmTMT$@oNDsM5ZVKZnC>wK)uwn}zKu>9(XorNqWM_{A48v?Y zH65KaF-OLkt*RD!&F_Ddjz?+*xRyu~78ZGUUyIZjfU(}s#;+TMXT+aX{Fx$fxbSIW>ZgtRP z&}QN)V3YEV7-;fEf(=p$eKHljeSZcfb_5jc-CI!b^8qaQ;ti-JH}E*us6-f^h4YhV z&oTor->^eHbur2nAUITr(?XH%`yU_-lS%|2LjZOVXMJEGj#) zpIZ_zRPp%{zvoKb`=sx7`FHJ-3h=Zf_E7nz{WM*kC|kbS zoS=t0COpbNt^1rN{$)cTwwomIuc`SKaOs!^ZCKpDkNPdsEbTP935LrP(rrqGN%TtL z`kunS?c!`jT0QA4u+luMd&xS(&+|En-x0V(75LX!PxQEZz373H;ImA9B(Oucy8iTU zs5Pe(yt#o~l<4<5x97n>FRuGH!3)WtXKd^7lBgD=8ridpR zz6vWxEu{=D+%9vxsBq+(^4Ema3b4Mh0xqMOFc~EON<1J}-2&G7AHRy|MudA9Wd1t; zRVKRtaYoqYa{(3;xGHd^)9l|2`l!8+q^9>08*#?(fe;UJz%QEr&qyWFmZstjLJc2LkV2H*U=sVnBG1Ovd2qDcw-pG{$1`23DDT7_|K=oB3%r{?xe^hm;WW_{I}mBvRzyP9|V(aqvUIDGrOw)GxbgIwJUXNSF0TK)qZS63dfu~Bdp)g6oR1#+r0;&cft!aGv2@Nz#AYh+w;(Tt7t!Bt@{#+hs^~7Jwfapwg(}D-n$_QRt zN~HcWU;v7NrgE$AdZ*t14Y=dvWmA4no%-0X(ScCliBm>u^Pv*xNcE+d+6K`I{9IN{ z0rlr^yI&@Nlv}APhl%0c)KouS&7gj8#ml+e|H?wYT zZs}%qlCXYg$-Z?l{QRecg`t+m1O%@oBpw2O7&ziwg=#lQc*Y-#>3NW)0};CY$0->*#jl5?0UZch(ApW-#VKI&5K6H5AP3%eU! zT;FFtA$Z)P>oSK><(4vk*&*z9beO__4X-siEt|fJhtd%a_qA+ORv9(lKvaK9NlB@Y zhv$ojiDU%D{e9GvQ{YYGpM`&u`8$SHQRIMI@7#T$<*WNNn2JilAtP}6|EVSWM?;s` z4-xS~(uSdeWKm43UaVGcZ7^}YO7?40R4oYidcIfp`Y8Si-J2H~!mKeJF^`{~R$2FgN$nTjn-lGL1a|Mbx6(=f+6FNug zZ?Wsx?8emyA`U@uQJ%t9b#MAeO!s+F`fbnV)_00z6Kb}yAJswe9zjYcsfaz9eOz)t zvsvJG(;%bz60-0@C(?ix{BDkZHv1uV@3-mQCL9Sw2(!|Jf9rYy4GyG5SC?@)-nii}AP~c!QT-4IQY!?)`WWNygW75j z7anM@ne*VvJ}Q{VOhycbNsgTyk1F4g3q9;`lU4*!7VR2(ljn z#Nau>e?KU7e%kmuo4QD^LaoZ#S*zm6MQK_Kqr`S9Ju_3B^VO>@-|M|^9Z^PRWe^DQ zw@$4!=R7lT?21@m0f744A+$AOGt}pbu|HAPl{FH^$rvk z2PKA({2ntfCr8^ICAm=;g`IEsV`FU<^Jh>0b#W|EVJXs5g0gY|gC&w>YYY2pu7;={ z1^o(mpeyVUu$RKA%s)q`Zmc|j9@89u&CA2SW)^-7>g z@A~ry8VO$Bj4Ja(W1{a{iq=W;!&9?W4WT&_ahSJT}yw8eT6Lza}5~vn;KcRHDbpi9#jKi6X4x zJ~d#6hY6{DV`$A*yF3%mdiUE74*^oDsiBP#^61g;3DE;J(6~SzH~xHzVWoDrS2#`h z5&7dr$N%dH6zncn(J5C1Ydrq*;qmumE|ml>+tKX=uHdse(+k$#6z+~bBLoOnIVZtb z5zA2N$tztBPYv^gesyxRN08Si6;%v*2PjdTLN1AAz2%ITx8Cqbi!qthB!N7~_+ZWU zlKQ37#Mr<gG{w0MD9TAuOJZNn_3L{FYYUxXF% z8V8o?LggkvcXWO0M2GMi2i=3UNB`p4rRS-Vb{GXSvz$#0|4jQ|+Zq;`jVm_@wzIiH zz7!_r7x#;_x<%%vkby@a=+64--beHqy+eSI1kj`){I{KGXMMhBw-etV`JHdz*(N>Y zb?g#aWhEaM0lkYV{PCza>PXg!l@o3*Etj8|<@m^*s1P6+50D@&uUR4g?Z9CBrTZ6I zS*=FXBFpWqO4HT-%<8;q^&&T5U<$D`Hy_FL3wf810#WP%LG)ML{iOR{y%hQ7>QJ}F z3T$Hcg(i=aw})1LCAPRCrl5z%>qOf^*Pf^Ur?@WACI_h;jC~nQl5H5Wj(vXj)bo3ubDrz@Uf1`! zzSsGF|8T`@y+7~!zF)7`{dwQ_Ju@qk8JXP14OKg0o{;sM&df_Fg>6Q<{`e8sQ8(B& z!X{zA#*r>vOTd(Ps9cmtP)GlQoGUEAeHku2&H{H87x9jCcP^S^ zM&9=-A<1-svVEmE`Nj@pr6jVMxJp(KTMJ_9ZUA8h(`sY~Xm)0o^j+ z8A(no)mI&Po5;dk%*^b>@m~;2IZV(&*@FWKxEK=ga&<^%z>o@Z_apH}P*d?<^KoSm5R2i7!!#g%2rykOqWVH;>5<99EdtC>PZA9R9`4ZQ^Aykk9 z(JREN(>FG~?Ou`=dILh(gMO9KURY&NmZNS}RCkWRZ#$S?+eqBhc){JZW$Bf~w*SN( zKiC9wwAsPYzJ(_5V2nZYnvR#jC1U+r_d+>Hc1p^n9lc(WXOi|Pg|Q)BAOGxj=unH+ zz@^*r0sZ@dPc&;q1?WGo9K-bk`3Rh@&WsnTgI_0(Z%1~r>Ym+Du2!DHpVT45&CbOqm2zvg5mZa(GbM_3Z5oV;d z&#O;L0m%50#PO<~zQJdsI5PFF477b3IK~dE{NLQ_crDz2YpYYJ0x#oPQN7%q%4}Qp zzU}TXu!kqkvA9SJx!V9v3PCQe>|{I2c>OvJD05pL>DJoEU5ek=x1>DqL6GLU4oiqn z8Gq&shcnQ~GZ6?==O22&EQ+UB$YMDiDjh^2kS`BKgmc3aclEY9$h>i4E1fPIys;z+ z!5B~aew0gP6JY2#JsTj3^>^rP;?Q*Zn_|b8zsj8thQ+8IeNa;Sly)^Fq-1`H6Gf4B<_i|+^SN200pT1Oj%K4e=UOie)sPMREh{T*4l1<)?tW&0fhVf zkuU4_tY{6KBxXHVR#n1fNe>toApdtk6tXkJku!M3rs2$pgL5e+a(!+WF?1txf0w?>rhj9r zFFlie16}gTqGBGej^JuZn79>_)Cas*)jv%x*0rwLJG)!HwME+WK6^~ zp>aoJSFf>_2)hp#{TWmfQ{4YzD@SJ6PvOAL4)*iHV_I4VQBSFFzeOm?(LLd)<{wIo z6&711-&>i)miK#sjcZfSAYTq#-{*@zt^*sBgJRpgjSacQM+rK}$FciEi-zl`^Fudmc5xtI4DkK=rl$CdAb;XSDh#h3LJ>gpIP0?^TMFg*K8!@P0+f&V zDl0o3JGcS46!CxI@}ejZ+*kgpB$)Gl2)Z~( z50}lwSfuw56eUfT$H{mU+Y)?Q>z~rJxgHRxj|;aTYVHM+e2|#TCg7B3+i(-&0RK1t zUihaRX)Zdhlap*AL83-cr_ex5JbH=8OE8%SVHZJl#v92zl~3MqK)ZV{7YJx$EH<8F zX7+|jEDNLE&f9z%L^TuUHCbv;LfPrf@%k2x9ZX&pnSmKU?n}(5so9K*qR_7x8m8u| zsYT6=>I)a<@F8l?;REStr<~J^DXaeVS085nNI&EpRH%NPbWa{mq~HZTs0ln|yZ32-Be~DH6wIA{i*}>7wyeab$y_N6 zfTjj-S#Vruyn{DUe$TM<>LcIEWwJk9*i3qQ!eAnTJiS5TtA;Dc&dX_y${=lbdTI0o z7r1(6ZLv{!>|b*5!?(wiJB5(Dqm~$%UR8(T(-uVkZ(Dzwi38br{{O;EjuV5k?GB$> zEJALYu_5P#DS_8phx4@c^)G`g0ZR<(BpX3oSYhdawC)YxuY2-rgZz{dcn~N81Wh`= zy$5L4nr&lBr%pZIuB+e#pcXN7Gjji)lNFbczV>LU#lPqwivMN&H%Tgru?snM_b;}Y zBjf*+Eh2ai(JaY55ZP5%8LV*nOWK%$zoJ>7xdC}71pEVwgsne+Oe;#MF>l+TOYu+7 z==kkwX{8qH-oe|s&J?FAiXkOZlEsBlwvve2v$sE^ByhnB;YU&h{$3jBnCJUXEZ_h; z4U%-2?BB^H{Ca72xXT1M^$4D=dQ#bkg-wq{RpUhR{QdLFhm=@JBrvArHJQjP{D$`% z9L;8z8a?a1v5*L2V%zW!BO&xaQCgQcZ9>i+g_|XiI;SK{)<<=&-4sHUHaJC{ z(oj@7I#eg!vou3bA|Vw%nEc8plAoV{{=3F)x;U_(95|luw|H4!9r z_up$4U}tb1+DPZ;Db=FKHa~I8x4#p#W$k~>AN}GK&&Gee<|jDG>39?VrITD@D)TaQ z{Dn+&GuI50A=-b#$P_ad{u~6W{-i6aq$^QvkogZ(w|b1wTj@WQQsBXl|KN@-lf=3% z^IP>b1_oyci?a0oB6Mfu{_9@TAY;Sy^h7lNk!IEDN8nrxUxbSnOnYwi58z9kP}Z$EBi~*eN4O zYvIPhK!nH-Vyp(yk~Aw{O3Awru>8;r0`K>Se=pgOt1E*%H8!ib0CjMoVYkO2IU4dL zdQc~rqXknes*~r3>#PDRRoLKIaExta5fDf|@Sse2i2&Xn9FReMlF8X)tZ2`ZV3ACs zm#%_819K&0ZN1z(=LnB(aSjl211LkdqbGVqM9V3s*t=p%{HRiW7mG`#NET@jBO`Zs z5w-Mgl|@IB*jUMcE72TBf&&jdgtYdYDlo?n4K+>{e^r7Yjg}5Fd*U38^gKIEq}P8W z#g0UYEJ!9i%P&izSSfiF3q|8qT_PZwE13S_ljVNP-u-OIPCE#EP*nWMN|U)bNKR5H zS2rNd;s5iU#_JIUQ7}!^046NiJ2{2B8*>#_{ML@MD96r??i$NR-m{JUQgsVPkkb2S zlT?_ivs&n(Tvm_4)5DdTr;uCsrDPX-yV~}Yq#Qs=N=n*0tLz=K|M@NiDbSDG8tgy4 z_RX#AkXiU`C{DOUt)xD52bCY_{zx{sUYex4Z{J}L7?}BHzwi17h02s9WnxVVJDI!7 zv*hi6P!6b>C0dDn1E;pOwvmQL8p}?8X2Irh7WwPc)z^7b+mODe^&=}ag-x;uGBINB zOcm4i(+jM`xjvy7lB!BbETXr!wR6nQ;+xguzl9A_@xQu9bb>~tAZ6lZaOdf=p`DryM2_ejU-Y|pp zqGiN|K3-E<9(}U$p4!!ML$eArrnIvC`id~~>LHw$&6|knX}^-|8inQkp#>cy>YK+s zhkskq?ECx~AF{A*^Ty@TG>z-H`i?x8ECLo+NUtC9`u^oCe6W3etU|T9@HxFw7ujbq z6?qtEu_q!8No#lE|FV)aoqH1+W?_7(xt>7F&JjVuNFOqs$)2$K(03iz`ul@O+o8|K zGb_yQ0eM{MYE=86x{)!xxvMZOCQjjCvE*T^`!EuVP4JY#?GBfrdusJ)e@b~*XQYtw zYkifawl2>vYT>MF67v0?v^_5d%<%csK9Bw;KBt@Akx>3<95~@reK`E7F-$@cwknjLTzQuT_hGw%k1$K_qWUJMPVXMksM_~k(LUY3a6rzlO< zL(_xI5{+XuHA;552*O#&`i_7)Mthy`1$;Zt)?zKgkilm!P8;4+3)^__?zE}Lym`#C zaw!z8Q`)>WlX+mSY~#JXPQC9?D+?9ESY=qz`7gfh)7(Nukt&MmEiEJ(EoaL(P|J9T zYC=y+Kh){sg*nf~ISX?c8yiPKQDZt8PjP5PVpjQ zQu+F$Q|tlxxxHd28l@EXtDKyMM+Cb<@2!gR{zQ8_JGkxjkoRrYk@lAeN;t4mAN%QuI$L3Eo7!qxa=cpEiM^QmboKciJ{TJ)E3fw)7mlS7We_ zIWDTG{qVjJ%z#+eOqXchR~Ly{{-CgY?R}Ds7qm(m8yVS8^)uQs^?eCq6UJU|!%o-66$dc=8=!bEs@S$U&9uxdhSe@;yEJ31 zt*hH+6}hHAKi;Vi(-jo`SKn1K*Ti}%{fOqiu6cWpKgad-m@2O??&g=f`55{`bD?T4 zJ0ruGRlpf0o!<^K@JJ3d4|gp?fgBEc2uz^X5Dg2s*+4*3Cu-8~F;_=i=O^j0B8g|b zX{pqsl5~4BS50AhA5lLeBf!|(`vE_Hy!%khrpIAACf(FI7v{-JLQQI@mKgMQ1G_Qm z3CAu2*vED-+g#t&@G-erUCu+0Ue-mflz2_4g!9K_ffum+d-u`)bb$73{p5ba*HD$^ zdJAp&n}58hTsnL~rB#*beXXpFddb(9TGUYr0T>#_EX{wH8p**)3TQ6sCtQ=Nt*IG> zu?UJDw68WX`((c=CZ2LN0ZJHeW^w&#JRva=U#KRl-J2vBrb#pKp; zX0J)>^MU|0edOBZMkSZaZf*hd6Wy1yvc#~=HGV-6pkW#cJs4>Kf_CQ2RVq_Ev*+)P*81gzZ)4U*4M>7ng}~ zk>v6VbHVv>rj)Omfp4Y5l;kWZ8UA6{xwNsA$;|P5q8@mjY4PZ#K4==jLdye$Zw8Nq zzW{a$3Pf$IgAYO1pqK*VgMovllO*rak01F`9zWg%4F6gq#NOC+S%FSvR^I&MUEk>M zc2vokp~>j93ok*Kp|@;rIZS%}EI_uA zwRJ`kmZtDweG|K{Ysxr<5$2LHRl!IS$to;Faq_DC(z8C6X~V9u1MtU;*yz3ihMeWB zt?b~NB3{>c>d#ymsh$(79{fY0yW;a7`%@MdD*;^uI35}2m>YppHuhZblY)SK?6Pc8 z*~J*=rCz7VcXBD&j2{?%e~+IP-{biL`JbXWQ-^=^95u*OS$}tOkKw0JYcUDE7H|kK zSF>9`C)>WMlYc*Rrf?rLt}M^5eCe@zIVdGMW4e z%CdE!fz7~qGMr!D{@M9({tOt1f6=SgH4a)4GoV!ZK6{3AO*?u=b17+!PM)etUSTi~ z8C1^axrm)!3JaNG#jsQIm?2z^1dj2?VqF~R-j024#vw}gD?=%Q0)%7i0EwJ_0^801 zpv3K-V610Lg{!^N#8oU1oZk&BzafSlf$lvB)b=L_hfiraI!bfzf4-kTq4EjiX}SYW z@MbX?to!xghgm^t(KZ!Tm^&(I!%h8i5gEl2=5KRByHmWZ)obUnjQ4k>UV)PW;4GR> z%}X<9q@&Vd*!CEn^7_F#5#p6!#_}#4Dm%YBcsa_wmd8&WryuV=e5E@@12_3S2}--C zz8&QvB_tdNh!0<(?f}ZnHzSfd6k6c1n3%PTAi1=isISra*92(GA3yEO@LTEMq3lEM z_0^TGC_an9m+#{Uhuv1h7I(kvGB&0^wPtgtmsCUPwo?f65KBJfS7HkQoaKz-zHD-V zuNBzEz0d7>o%EuLfPyoJpC{;wFz}$~bmJ3=B zh@}YTu(oD)*V*FH4oP;DY2nvWV7jE&`Xn>Co2yr0)WD^S7sF3F9y2sI?`JFB%hDGt zF~zd#*&uc?>8SwQ@eXF1#rh07UU_B1&~X170hjVZx>UM%R60z@rY(&G;J5`s=e~wH z$lJHQaJgM2m2F+0bP0(P&_P+os-jujt zJ*XVmbb%Fa(9+*B+~8t6JFFmrLR%(+JmrbjdtA+L2L1X^1JW<8i+MkcD9Q3)FJeB=s)L41C zrZt6PoT<;e2TF*$0@u?g?o%ms<`g=UmzI^6*M7Sxulx;ZsEJ=m z8QlWo-b1hC-syP9?Y=Ov<*{@67Y&=37$uD+AzyDww=+5sc1C%jOS;jUnBDWc9W+X$ zP)X%Y=ooL=z}uqT%8$&yQ*7O4?uJd)?eN^;*Y2}l(MW*5_2C}k(PmD6XR{mB0D}Ub z(Q8w#2kRJ);KsT1ve2uT*YekYsTl1TvwV}A+jf5&l?aRLz_{?OP4iYqSZ?is9=NuX zLgW`NqXT!|H|Py;1W(@YHdYF;eCQlu(bL*!IV!a^xbZNbBI}Vp?Du^LdDs6hmeI&` zLFeV>8o5sA@XmX2at4scSeZ+OE#xy?iO#aVD-`N5Mip^CSp1j57|f)0=(lI^kdKEV z9}L66txS=oQkhc70fG$LP@(1;DzOfJs;{A%!)57N`TiM5EoAlw-HDYFIBw2uI<>tDw99Z|*%FFeXb92LV z6*=v~;|Rf(3+Xun$C!(C%vS3-KiP{{B84KDHn%BA=kPe z|1wgOARa+(Ys-Ze3UR4M!JfUlcUPCoTWGLGm{QBge#*+&xp#LfcA^rK%;a07NULsU z{!7+y*3Y(4lEvvDfNNDNJ@pb!rNqWwSsN5)w!uiVJ;1_oW}Yt!^&w?&r|mIw8`-^k zkVaO&Rd$WmoED;&bmP~G*(J9(hZIlydm5t@y=T(nU%vF9wb`MhP*RC1^u--c7UVg{YJQ(1PHw6&K>ktqYP`My{h z`(O)8ED8JiVhaaD5DOLFo%CY_>@^Jh2?-?7>m5#j@xt`#v_mLRpn1zvD6+(J2Mq4*{ zOqRZ(FD|u^spmI0!+URe1+9#DVn%Fx#nqlD>Y5Pc3HG7r_?FDzCx1jFC9)w!izM)! zSRu0^MY4euc?WGcoK&GBMIt~D>H1(uk?4_ZM*Y@^TxV3Ofc5_0@jBqkp6Ocl6)`80T&H|~s$i4=%f(v-b1Su$#a8=C-E{1kvC z1|PZ6ZUfhd7!5oD}SG6H+XQty7Ro7JGK;It_ zr>PMMz&?L-etIf&O>VwQaat)o-W31L5=rigw6&EhTXrC?i|y)?y%8i8>?tf?y47w= z<+(Mw!46+53>Q*Q3bRZFFY)O#!EEfeFG;dgO}$-4Pj8Hsyh?CKWh11cqL>m*SB;Pk zt=s}Z)QT!LZgb-*)Wl}XNcIF9%+hp!#`^m)U)!h0yAsW0tG|zJHoLm8Qpe9*lWv%7 z{2b^Ms2pYSzkiR`ysU!2whUm;`F%PNBUSHT9PLyI2wcVuCVEVR8xVYh>+4VQM5j+_ zD({;SORU*)fVg`?1o^?h7m3if4;xwQ=R4c$o^CN&Pi)E={_(=XO^<3#3EPo!PF~}}yhrK^Wh$?Fhd2Ne zNsH8{wA)y=?_Op{n%`uv%N1-ypT-CyERnXpy&d@W^TSxZEgq}MC`4OZTkf;GkJoc^ zbMt7X5FD%3BK*@6jE%GN!v~+*qqkXKHeM95ML|aE|4N%ISpDo8;K3*2#Cl1iikKP? zqR++|&)483Q}OhB970I`y}-o{MW0e;x&{LNXSHf;)xZ}IlM>;@f)*Nx>W_D%6snN& z)Kap}oG-bkKG+HzlSMlb?d`8z+}x&}l+D6Lsf2WOv41HPJR0#mj<$C3u>E9&n5?W> zy0~#WX*<5J4q5Ec-hznDpoRGFb(xd4mz%5)W!ds+!66_K9wo;b z9B?t-u$Zy_(?9KdjrF@@*F2juxLa;S34zivL~-9gF;UxOo|Q;jJN@RMOp}zio`NRs zqD7^+KxKp^f|xJmg)@4W;M)th_F1}#;j|V1prA*{It@8F|L&wKVr3l55yQc3G*LK7 zCIYAOb$DmmJ*h+5XEmGOqmLWatC^l2GrBj|^=A-tBqj?4qEcABR#IYf3f-?=F*gjW zyk2H;VY1{sfz%xhlBCOPM+u)7b+vf4G+B5tI=~2-Cc5X1Nkh1HKz*1nb65UjQUyh z#;0bn$W(#;!5gFf89hJ6ymMS#QD)8SaQc;Xb5rnNX9;2+1*KgE)BB8=b}uX?q?W9++TCdj?AOLWpD+UdJqsIwN>9(4712NuKH zY1K2X5Wh%;v8&otl89L!o!xT0MJEYDNf@@aw`cUv-rCywa&Kbc@KL+PEwfk# zLq|sk9*HBUtgLKep_E~5ZSBuUn|gsGH7?21quNPCKrN ziH|lw;f^Am-if(nKVd7*Ox8)kHqGr?f0pZxL4VW z=#>hL>Qv$=R)RkslMoBn?^Y%eH1l=V6tZdD2oRIm@~o*Xx9j7Gi=C16Fh+iH{dLwi zZ)LkmG``>59hBV|DJX11W8mR@V1(2AiEev1&A+?b^ycaQBs%@cH10x5!qIH1kd2tt zB>4HkIAzM{=_13@WHgiVt(+H9%)2&!E_=dkrJ`wBOL4kdEre#zd(7Y-eLD5n-nJKH zC4v$X$irzoL2TyJR07X5p96X%^S38T! zdeLgn_KVIQYI~#Pm^7Th+Il=SoUYrAWwX9{=e_HYbkje-pxO6|RWu+Jb!p{`-G$T4 zxB_O|VM#lqJFU$gE?QD}$7xpWi74q@t%x%^X`hb~7g1nW(-%#cc06>S4jlcP``>Fj z2fl=@=_a%77$EFO27C#aAu3ts-&U&|^V0^(dq_m^!Kb)UaiUX|FWyzRMu z{?NVmk+D8xprhX8aw;?PRnq{S*4;}#fBzpTDPd_m&RM1tdBI^M0eW45>!VpBs%>6y zZ5A#r#+of|1bchZV|kxRx_dF(gK=I*C*G7wpG!+P{#KFWz+PDK-ci@uK54T*o7QN= z(-#zc_4czHNsd^HZ*1%}*>a>PRqgHVkJoB{1_nf$oJKBATCV18OjwD3`oA`n>Fz!BL%Z@#G}2bZYwo0XGi}iEdQ#VYLmxQ+Es;)$98^vli(D{gq^otm!1#!GT01wNXCqMwLy{OF zHt!ie^zAi&JmkN{c9-R!c~d9glXVsHDAmx5qjz}d6>Opi&m z6qb}VjySIAa|*kJWYWO%LaQgOdYu(Ujk;xx*`HA+&*McdQBhI-;napirZt_}R!<~| zZo3bR-infWltFIXNbcg(Xq|l)iDud z_2vu@83kpnY?sIRH~{U%6O#r5*R9AO!;f#MTY^yV-s+vLKZ`8X>JbU>!z3_hiSGqme*e7hKEQqY^y%T=*47^$W+>_7*?G0MowCD}R$T^P(I+7oq@-{m2bDD~ z{~#o6fo`}n5niSv%OxkPrCQH(2g8NP8fF`+$1X%jpV=2}O#CGzVvbQqw)s@G$QbX0 z*KNq}>vICdUc>G%z;@Z`aax-Y;-*ErSQ60&T>RWLo1|aEGW2OcCjH{Uq|d% zS)urtgnlq%&8kuAdZ7#a9YDYvmp1zy*?NaP+(zdUM2N}UNBo6a%N@CMAt9mJTFWLi zH}K5;)zOa5^VPzKfFS2>oua9zzHd$TI}H0%EM;8+PBMS3XVf7ddzj*OCE;E%MGKjJ z2zo7E6Me^IGN%wAo3?1Pxw~-%M?rz;dC$uqkq~cJpJ>qH+3^Jv0gd;P}w zQIN@EI~pmG1*Z)~oz&8+3%${Co$x#_y5zeM>{s?8`MPq!Jw~g?Y4FZFDmLnZml9~l zvLA>7J6>~q$TNC`!{TBL=Ih38Xz({$r0f*QckZoM!G&lxI{eL|N#C2mW47Bw?m&40 ziCfk>Bf3#4m!@YdCupq3oa5nY0i{Suszkj;%)!CASf?%Uq}A>I>T^)tSM5^Ypq55- z2-NdH3_m;=$`>fAR(&g(GP*vzRXe@wkE5-3y?Co{fTRmR^{LSFbd?j>6}dvy;vdcO z!u{DIB0vAIfC%73m{7F3+zSEj-Z5XZGOv~2tZ8tyoKvZBdS&&^G3|zu{PbL3Ua|Yk z8FsXei-?wH{Zy!uA@h^7W7jGt*2C**xZB&*Da2iIqq@WGxr%ogYD=W3bbWqsNI0T@ zXt&#K(1~hc1%}Q1y3j}rR4OT2)Au79UjIs*ts@T^s4OlZT&Mn%j<&CD)G zM(^_ZXVZ0WjJUekCGX-QwfgoP(gi{9BF0+W2Lrx(&0vN6Jn|zG$`1z9`Ot<^IQp;z z9)cU}zm8`5GPd4Z#az66^$YWUE$GDdY#rg@f|uDan~AxWRS>238PSepOl0| z&u}pz_cD6mH8hL^F-TA&#QXt^KEvqb;^IO^-S=J8Tv{4wu-_T2wM^`}LWM}k>4a`> zMwQ!bB|v;gI8aZ|`Z8vR4oWoYUL_2i{hKLb((8P4xRMd_B}YtkDe{A~k%HzW&jWFb zu49@H1V>7mVg&;t*w%VXguCM_OSX7=!Prxge8i<(Wjbi$d{(6Ckn8jArN}fb(R%rnmdq!HHCtHHrAH{WF5?ZwA zvYK$<|7$+T(mX`@@rO*8s5L9u{~uXVC=!-~k|G>ZZ#GE#H;>L*l;4A##oX@l>%H6H zwVIqhrLbEY?Ml1y)t)cVzhPPbEX0JM$?R%tPbbu6|rPBrjoT+_fMQ3#5w~m0` z!mqP~v7Ekh@3uQLUJs97*kL`&aLE)jwkOsUAa{kD&# zJT%p$i$p%Y$}2zO#&q@%dd1hP39#eLI?Q-rj9&OGTsw4`)VuqcvJoHugT>w)S)Uid zVzTiM9>Z7|@`K4Qv3X-Idw+MpwmVw^2TjXza&j_>r;MUvVpM=cEW2!A2(IX+#a}T4 z;wNZh!}L5#LMaymoDSi#V{Ln=lLiT4H~*@|euo{TX4<7)vyc*YWMeWeh1&xEt#gTh zprDP*Jr<`6!}n;?BZf!I3!FRPRnoLF8V4W>!QUr4m(!o9Q!S;>p_xivUeek~;p{tK0 z^l!39*ecZN@b%Xy^7gYF!y{jA4c5x)_%2MrbWFuW<--#G{cIQW*mGiNkE|>d)RXnj zC+QPWt$62e%%=)#hIUA3L}>oGZud#kFffRjnubh`yxs~cUS?BFXnR^*9ew2%sYG4C zw#o}(qN{G4OZ}qWyL!b(pUkeCl`@_*hEX#V;xOT8N2*GAvzb5O(u9ZhBM<#pdrTMB zuY=w5C3*V4_WGu-k*{b>fmdjcqYI=+C1REW1`OYq_lCE)PqTXFp4t~ALp~7T27i@_B`Wf zZ*Z!z_Ie2=&By`o$mFG0Ct0~*QXZ*}6@7Q-;|$Dmt!{=lLiYC3sJRN zj!JbOqmD|tOe2_hxc*SGKQAeNmAc)WQlg?-aq<<-#S|A8qaz@293mp@x+6WtHFX@@ zmHxCpGmnj1vNcibnK&T&X_$?WQ6T?By`Kr&*EfEOEwLUZx<1Ut zWTVJLVFcsYigfYKzgM`@5DsUXa1t+0ydPdQPvS#6(th z$W$B80i6u7H+~vf+alxU-Y1!}v0i$Cp3_9DTLbB<*SjxpCtA>g#rlDa4p*M)^<=D! zR=%YRfk)uzX>nKAY{~6h>7mkWxJ6DlR$Se56DSKyS4+6n;~H6lsuEGAi6%Ir>{E*itDF2UV`#zpKWbc(HkC)hq;&Ba}$9DZk_2 z0^M=EJ$6F~rT$`jeS@#tia%3Oh84z!pw- z!SKxJqkXLH?CR>v-7B2>bYpZaAg{i^=g zPxr^c1JTm=4X#f2rDl*=#B0r;+Ik&&q+AbgC(U*i%*im(A+N0N1%Brz!njENlWVEC z>)r0d(l4h&`yug*BtmIrB-rRB@9}u?LTYIg3tZqvrjY|#Om)<8*192gzkNy6OF3jp zIod#+ETf{C(S`v!7dQ4&MPef(XPc`_s)xs!Yd`y{ueUaDnIMpjImmiETs!L?yz@!# zsN0Ru<}sq!Cgu+bSXlwmy0t9Kc!Ty%3@S|Qkm^QPGEN-M5<lzlFct)X3{UmLSC8oTKq!#m*PdEPHCrm-IIKt^1KcyT{luuyhv3so z#Bot517<({PkR9W^X33Kkt&~o4<1n9KQ@Fd_SB>yf#EtLD^cSJBjaSY3nEjB`oO}0 z9SE5JeARm3b+HFb2 zT|GbgF4PKV$q z6bQ-B8}9N$xImZ^S!!~ws&C#~@++w>({7>p6V=w%CUUPgSj{o@9nJd{A0HVcIzB!S zC^t9v972+kD5$8Y(MhhOxh>|nxVYE^)Z#!j{L<#-2{3=L*>xgITgBAW^z_1AGcT|g z>N`UIh*?TS@xOK2_<=ZbdcBfh;Y1P<71ieh^LRVcyQTZb;9`3S#F@8XwOlys zCE2*S26}u?Va9M;7j2qAjr!3g_t88bjBJb_z4y`oG6VJQLUgs6db-DIl z;PZOQm`r<4W~u26-jC7gt&{rY%tH&nSc(T%==^uPBHcYbYKz`r>IAgP*Ff+B=wMpk1nS9noH*metgK2`YudbHq;`x! zP<0R#h~?NyjwFEM`9cV)nFE(5gp*ZOP3(GSVE`Tsjv#yGBA2VM23Vs!O&s)Zfui4t zfdSGhe*R^v`Q9Ue>2nN7R}fZJiZWPK9P;I)5gj2RU$xfEwkAoLYVR4`Z~dV z20;&Cto3$VLsYyi{OJ+t75ANy;kR$e^ycb4sxOt6(oGv++d(~o&}VbLSqG3}(}BYr zP(@(jyt)eM+T`+Cs%J~PzxKRddRuh~!aeMy zb-^(HIg0;ow4fRZi`);?-KQH-0_(uYs@1!ARX*_`nyZXQP?uRs*sFeJWZy_H~m z{ThzKLpQw-lWabv#kgO=y}Q~pgwyjbe6^)Ff@I zYyMdLtZ1hJykVNSMB(mMIO?U_RUn(^PheEHGStEOuD&h@xqTGskC_!6*? zeX|t?CCgj99=i`Qo%yn9wKrbM%JFJ7Klf(8<|)#|P1ynHi(RcLxgru*GIIa%i2 zaYV0KesFOyT~(lsaQY{Py|~zn4C{&)lAr6{>m+RSH4t6X|5q;nOEo>n4FLfGuim_Y z*J=!S&E}{bR}>?&AVlYBrHQFz`i@!tJ$`U_cmU84IyyR_D!rOW+v{)&hT_8UafO6j zrKJUy7Ly8R4)^`Z53PLu(Z+Gou>PiO(WV@d;)%-QYG#_%-3k;JxzZC^^6zi_ zrpPHag%-gY>g!XvT^;%Yh%3Bsswh$^n|2~ZF1XNCh;!KLC#bq6J-RXhyGL(awBm}o zO($?GJnx-4+$kw3G5;+WpiV&c=s>IkxZQ~0=%sw~rrS*3hSdaDSi-3O4HHPAiD|{z z*@I=NGbI{9;4Xua^rde(1^m~Vv>lb8yjSXJ?pB0?N$!Bc(tg`0pWJZC>bjKhpnBIRf%DKI->OZEpYtF3*p1 z4{{m9c3sIvtJT4J8heq zOSc$19nD)-6b=%MAo9}61YKIqR~HOz6%j9@xDwYN{@nor1FCjdk3QHD!D~+V@q_aB zItn^^cRYQ{(A@(-xx@%AR-ni>pY?J+t?Z8FSZs@D$tP-gsyHq_kB-Wxbor$$|Kprk zH7C8yWP~#}xE!5mh~%*so2^lyiJM0+#=*g1i>4LcXHP%~1Zlg9e@jnK@0*es@WCJ; zmCzZeC$t(3V13(5;fK77`D?+iWkDRPyY^;{u0k~&q*wI^i+}q{-<@3XgI5nwwBQ!5CG+d%{d?Azv+DLOaREAY7}XDHvd{@ zdp~=DT9-VN;yAz$mXezR16@r`?dIWv@pPESIwh?ceFT5@XH1NNz2P_rQgu?Y$s2L& z5V0H~vwhy6>#k&=vw5)&17#?2NXw#`PuiKUwpgo)Fh@KJH+F%h#F>lA3`xaIE?z+0e6PL$bZPsHnj48_zGm`)~zJRz{v1sI-s7L3_)2TegaXM(+f_lOP)<~YkfNPA}qcSCLG_cpxK-7eV+W(=yz^RQSaYT6g z3lYwr9xQ2aq*p_2l~B3@h36&Z%1!Z@NwK!WdwkTY(sm_J*o^3RU(%4#0~FtFkV^tQ zp2%wf`~E~7(Mwrbl)=Hl*bZurQ-j{13*|jibiTIRokG=)d1n{T0-3fuV5K$6pCu(M z3*)sV116~h=jKR{gi90(PKP*F6d0+`2eWw)No0&KvgcaTH3JzY&(6+>m@);DIjk{( zf|(?P2*gGpXJ-HU1-}Ex696M~o~D4wLgIr`DP+pczk*7V(8}olcDdpM>yP%SKZnU~ zaCUwekupG0G7hfm53@l9wL!|1w@&F3DkM7fXDI#41a~HdaHL?!v>ob=9IDdc0 z<4`|6A}$w7gB0lA(^Kz7pYi+x8yf<7IOz0)h4_@o^m;4DczAeVgNqat8D>ke8Lf{t zo2PmXCp3LogE9$up1Z$sGdwH8y|uKAOp&({BV)COd%~dg!Z6uF+I&3aQDc8Kotd;F zIh+Bw4?QT72H^w&9==`WZIMGV+h1+%s<^)BgoL0f<6%gR3%{E}y$YLe8c!`+Yc#mm z_EDWbuZ^#!P*T9QRP!&~rH-&Mun$d*wxvdc$4g}foo{DV?<_MklU9-!oi+M08Av$a zW7b(O;l@q?vz;y7IZjo!oEeCzNH@ym&>$fiQ|JGp$}^U8aS1*X%8Lp1Xul$ zFkd;!e#~sMb7NkoK78CVPPt`eqQio`7K`W&{*p7+Qna|=>e2KK<5`5Ml?nqHx&1F* z-_W^beW*KlfRwv%bHd3{&Fb%LuZ|EIcVTy41j)^adNp##vCj3`mU%%l`YpGEV#wm6 z01iG8ymbM73cFQ%|JK0i+>3$H0()crvV6I;%0#S*N;a)`jT#(Y8iD5|Ar z9^7B|h4-9#w_<|E1PBxDJL$em(<yMws;w^)$!salgFmW)feA=BtUHc0>WaPI ziATN+`;ybwu0ewU!6zitUz%t0Lt`+G>bSKx9{X*J$6waa;H^J(zD4LCcjkOE`XzVO z{rwLK_!W$aljxR@%tr5X#>a81t(FiW<<|)rFh0+vZ)FmFYIM9UubV6$G%90NCOp}f zIKD!?nT*>BmM-;0Ivd;a%_0>mewFcHd-iv<%nyuxVBEvr@vQcQ`fgX<9dJmaEk&eY z_JXPlwSH#!(o{K{v$bq+OHKW@r|mG!L}x#z?s|WzRjqA&r6^MN2szf;`oo_m3jB3& z-`H|%V)n8w|6JhDXA+K6?{`C~-}yc7Den`1t|W|(#uIUPHS0e5_&_w<;-kPFx+jcn ziMiGiCz~M~ewnNLm89eXMBl%Ee@{mzdR=PQL15B^NmhP%kt-pU8VE4>a&G|(xJK9> z1lq|E`HidttmElI2%dzjWKS3l6cmJ%YPJsMznrLgr|t0pH-kYt{8zW>`}gme?iqN_ zHSE4+eD-X(qh+-u9DEMM*!j+p&+E=c@jHSCaRd3uqsb|l1b4)Hnm!L{IGw9Yd@pVw zAxkpmZSdaQ#J6N5EYel)<^ublV_{97Szu>pr<6*QlDL|>-HmSE>b|4ookBA7F*1N>CFDmBoOW3;P&7zoiqsIkwW8xYSB_H6|amK zGL&o2iJYDrvCf`ZCb!QHms(PWs#|gu7HOLQ=AYf>XC%j!RQ0uAHW|O?F)pgNW6<98 z)~H&M?yS{vAFWnn$p=Q$)1&m(#As{lLUKO8cfPAz8EhShe2AxM8Ue20usa*l#=^R3 zK6HoS(%^pmt}?l_(2SRfh~ib86!p#E%*+dV4Ze5v)Cm%A9*%O@>a3PX=}p_2NU6 z@cequ=x?@qmouzXfue&S>w{WB%n|DT2Q%jgCt4u#Qo~*p#g5dyeL@4c^{HE$F$FUT+n7YS4aRF zi0Bzeu(5rPG+4@k%^uvRaEQRgu}US{4)?&uxrZVZtyVtig)$j6Wfg6ifzHcBrEh6q zAY;{P<*R%fJnb*2s8-h~dk#lndr4rWSGhSB8I z%eYkvzsm7v@Pg{6*7BC3EUVAIh5MUl7Et$EN$~Yw9|bX2s@<~g;C+EaL+}PSWC#&V%ej_LT3Y%BuZU&Aj-3%0 zvu0s>?GJa)r%#|aeU*n8kN_&y>fEuXSXeP71URG~z4mr*&RFA#O4Z6;177(8D0;M7 z{QNfD`SUW@$$zMKNTZnj4vQ2&DCxwz-J2XNrcKzki+m4F_;ks_>DEUO&2HDO2p}`4 z^NqbM4F|);q_{7P4PhaDq~~fHL7eM1_%rl~2O|75O0C(aVG)-n?a{FKrF)1nQ)~z%0J5FU4S+)b3Q47??T;W{0I=%s?PQ!6VvFvF^{uFUl@EXEp^ z0cEAnRs-`_M{!1FPrh zDPQx}0hQ4GR+L=(?Ge!{H9^8Pc3_}K{y4A$HG>V1Tqh)ZkMYE(cx2|^U;THvI{W&9 zGA0NhPs2kcQxAdym)2It88;i9-__@yz{|2757<>}KzX~p`AWmJxPMEZJEJmd(bL02 z^XE>oA@@5wqnmz1zmuhj_RBiaVBY~ak_>|gEz?N9{k>Sf_&3Tk1Vq1! zk%sNc%8}aKehSG1{m|0651CG2L?FM#WXPTa=IEzZ0QKp$XOA=r#5tzL@-vjxy7tgCmT++#0XtpBj2zbbz zS3MuAE$?{|o5vTv%~?a))k)gwQ zFy7-KTPjJJ;vsgwx1K#-*6||T9GYAC+4A`P$^GFdneE}sVe@8=)?D1Xu9tLaC;5(y z-%@kB7aIuuIcnnNrW=S4073yI2?G=WMuRju#~DoYVj!C@C^Jz?b_Sr-gDroksQ`1S z|6&7|BNnwbA@kn^%+z8b*%z?+!|hzHAWYS(TLmb8($*#ypya&7s0L=Vy*;M}*Shk< zUTpLvP+8_Vg9}wht#1-?X8T85udW`?x1>$x_PM-VyABmc>Okx7vVFbB?aw7oGID`L z0bA!2nw=uAaC)^%W{_wH

56cLnvPFa7h=@;ZvU%Y!bU)7ikhfU_cWjBC$9X)#zz zDEp&RuZQ42KY(C+VEz0y6c{DvS*(6W4W|40J`ooH)CS3X%vS}R z=~{Yr%S9i+b8qx6zKJ>?1pYAS)xTT#ddtNDZbtJHhL!-_fviWLnJ(6)f802n=|d;D zHIRVK@n*RI(OY_D@6Y=MCC#g=mCR2j@4t;C`U2z>{Hh%Z9C>Nm>F6;YYHvWHqdjH* zdPj+fXy`BAocV1Xk_m_p%uhQH5Nq6P##{~z}jw5VL^+fUH?4Lj}Hi`fwKM<-JrI8mW)|h1|?p(HK6LF6)~#;mIpUn zU#DwZHKu3hcN%YaJQNf)Hmbnn)N9>jM-RXb?`fR_;-i59v(Lc=x?_F;lYbmQd)>6f{a>XJteCVq07n8)9PPV^;J|6##V zfTG4Ajx10sxAH zMaGnHA`;X2&i2-O*m)2VxADa6DQ2jzz{at>2H?crL2`a(Xz0MnF-vDndOtiGeFsW~`v|B}^o{bnkO+SzIaSBA*iv?(5}6B^)(R9w^qLn(FGtbdX# z>rNo2eJ5=>bx)`?&;3eI&!1r*KpX^kx_g&QKB=()iUzHjTS3jN@3uNHrGvr^Ti*#q zc(5>YOTjJaW_iw`ff_e}qQcy9TWlZ-LB74~?fsm5s)Pu&8}hr2(FXM2L!{1k(r^XvZ3M?z2=;Vs$&e*?<@1%|cAcRq znaIC%+sr!0heCyEB_*f@Le1RUj{v6)sIeT#Z~(*+DoeDL(9+W*!2g@D_1O4b!wOBV zz>Y<+WobN4f^;|r8{70yj|EBi+d|D74Oes^-@2UTN&xO^v8+A6;0)o6O+o>BiIA_* z&B>Yw#OIluzx(=-JNEX5&`Y|vmPUY=gI$jo?CU}cgxT|xlQEF!QeY~os{`7q%4Z-Z z-OUd-wC)4nwB||3lPz0vn*{ zaCxmP5!T_JlvJ=F!Fzu)yYc?T8!EsIB@b52d^e8&O@40zCC%T;dWEedjI^pE0)ggm zu>y{XTg?m9*`ob9r$B`Y4&SFyeLn4wfr=^65m?J6^*`? zk8^SEMXy>I0xbMbgUb({w?LRMr1+}*K?jNv^JQ&_ml0nr=WBc7y}eIH8~fsPjICF)uvh~%RJx)DPoKdi(y0m?v~~l60M!oi?cY;SQ^Vd>3b?Lw zB4UNqxpgkLIWu;XlXC)b>#3pw)6#e+@@Tg7DOYSuW@UX#t%a*ZL}R z?dK;7gZpW8D4fC}KEeGXVJ&x8GP8ar`vP!!Kh-dm*EaQ;d;}2n*!cLP-F9bpHpP~kzYpp4t5L?MH+;0|^%Xx0&9=^s0JS0nH5tZhu|3&Z zEJYfNmE|$OV=oi)8-HjV*6#a@mWNkSlhQ z{;MTvkk9sl88rPAX#XFM8!IlrS%H8?Mn-qIMNXG1g3=kAha$i0d_RZRLE~cnj2A zhd6O%$9SM;kKD>2yI%25DM{u{NMe%W@0?m!7s_LZ(lIe>a zQQ}(nohy3&XCOAJp4$>v#`Qtfnzquj_a#?XGdLjjyky?(7P&UkWZyPaL|o_{r~(fa zmAA@snK&FQJDqc=j@)ID*57i-gMu(x5uL35~6Be1FlK^NqTWt#m=-~#)SXF8T zt(uPno%6L@30&am>?TJ%#TXAJV+L?s?SC<8k6YaJ!0rn?56(iRgJ~#2df= zsLlhpYz5%v0HJyz>}8$=n zFRzb_Ek!Af<4Fc%MI*GkMw3o!uj8^6b3YD5y&fn7pFuuEyix z?Eb`Lu23o0%{%FsF??IBbnx8Y;QlpOmuibC)FW;OL5DgkmsTwvI<-sN+yOsq1)f4u zA|RXybI|KWk^9+h9dMZFIw#4d@oe}$6l;{x_)s!XwBfCfhKff`nE5)|6dqP%sC127e+5TE~5Q!xN+W&oA%d;tZ+QZ4s^ zq?QLLOI}TqEXH~u#T7+V#6z=|5Df?owgV2`eV&P%$Nx~4f}tWi_kQv?p~E%G_g%ms z7a7L1QENct0CEQ&5IZ}7x}rbirX|vF_A#%|d^52^BB@Of+b~s)AFxrDm1n_GqN8^g zBBrJ&kXiaLAZ!2#OPNSRN2Z+WqHg)AOs|7kqaFc-L?0;k0Hh5B-?T*%2?EEB5tNYt zs7G$3vsx@C*RO#8?@SGttKSC>42)?gHUKHcVR!On0;5i$-4lnEDi%e?-GdVnI%#ms zyGWjY-DgjrbMxx79oz@i#DTAVDO5nYx(0JlGGqCB<1K(XPRjd6d-M+$#QO8Y3s58a zE0<^(01-5E^T{)n&t9y25IkkOGi=G9CK_4=wc*$493nXMQ*oc7YNK*=l() zS45t(vTe9hg+FhKw|B%%wLc|iLYlks0T@^Pv6&mV!MYo3&Cb_vfa%H?O+l+>00&Iq zm3gf>?(AJRzAWIEZUnkf^BFmvEQWNPl|i}76Q8t}HVS1oaif8Yl#+N25#{FGe|mS@ zzw$NGfHvHnFaO`a?c;y!^!@+M2lY)c(# zrUy-Kkw2w!iMSo!OGzt@9HKCP{D=!W6(hYLi$SOEuj9h_c4+qjs`mZ;eU4nlGB{uZ z@#*m2*bR^XEzycK@QBjy9#c5*ZfT8@WR%HL2oxs_jg4Q^(iVwLBlv)Zjma_{ip(a6 z@E^QL*V4~CrG+8T?$ttZZfDH8`o$!ce0m1Z5oZODhzJXbmC99vtFXQMuO1C=pH+L% zjRl%&kC?G5_ey4Igk zDyvt3q)TE}96`y<{Nq_8SD}Fp+QW)~wwWX6Ae(kv@eDPdTWz54 zxynZ$n~*T@dL;vT@EtVZOs_ps21L&*zxG|riQ*U4)Fger3!?CHP@9i=`x!TN7VLa6 zXx_l_^DA8LPob@?rP0<{IXJMoUGC~RE`c7k+e}>#XIKcI`xSH>wOgNAEQ-7bDbTw0 zmJoD=_&H!4F@uJd0tGJc8*GXcrFF}djX;->KcBmo(;Pvya29sz4GRkkv*r8-PYgKX zXK=PIH(2OOs`dhcNjhs?!zY?0f9hSPTA@%b2bxel{w2!1?GmT(40gTPehpfFL6107 zB*!E<$V%pBmw$K4%b7rXtelNP3F^iU3@dTOTnHa6Em{yJS?OdW#O5$@e7zAo(U-0 z^eLWFO%7JpfafM~W^K00xNhzv?*G%?cSbd}wd=AKK@r4;D2V75L{LE`NHthNkRl}@ zoh{O(6GBHtK}A53B7GyhtCSF`Y!#%J0FfFIAtaOlAwa12UElu3J!g!2&pG#;`}Z5e z;eeF2)|~S#&-1+RoIHo$;E@gyk;~-3Wh4%A)f%gwdNW!^3Ne&FFPFeSX0BFrm(@Q7|_Vh z$oMi_z7uxUEQ&_Q7JrknXde@F-&kKiD>+7|yWobQUl3{6Q9L{* zanf!UcIs`dp+chTwX*( zIW6BmT1&$?7kEa>XW;W0`o!qjV-c>(cMn^C8$GzUO;_jf zvlcB;@dyoVtEgQ!Z-;$4uC`NRugEL+-Eq^~DpkL?ivQ8(y?K7kzLqfi>e;@L;xf~g z4bz~Gk{};+2V-sHQpdvhnZ+TGFhNuN2MaW(|0>lS_Pw`hINvd?MXW3xL`WTY2G zhNEn*hn70@=3}p2jWQ_mznU6YNkY+AHUc-6@O4h5JX_$>-G4pZ%7FIjcq#^i87QSL zYu2v)F;Hs1N(tI5+asiq(cG+#F)*MJwU-@O3w#q~`Miz{wKvSsP~pBcZGZM=bH#%q z_SEhzz3ggk`yHJIrOgMfJ0_w7D*e$GZ}=w$95#377IvLba{GCM^1PnD?6@+wk4Msk zVPSX~Uh1??Rm3@$#Bx4#F;3(TaU2&@W?qlTqnpkfIYr-z{_4jNkJ$%tCf|@AMS|te7m@&`#$`u@EXTd+I}@ zjf~vF=^t<;0~4*o_K7*UCZssLFoZXI=F%dT>i=##=bjwcc2E2MA-#5MgPzE;@SlGQ zO2^{Ln6|&8HTy%ynUKJHIp;ck0!IJZ5va%ZBjhG*1$ybYisoRuGN=kab3gu#&2ld{ z8(Xj?8{1*_?QEZpA7*3YsApq44@ZeTy!xMfr1PPj_RFjcjkWTy-`Ge)TXx~$1xCwR z&b65(o2BEt#)*W=_I3D3H%01|h-QLZnv54K+_?09?$5^XIFYBJp=Yed8Dy{5&fbC^ z?wCrK;#f)ZMJN6p6|-f{2R^sqJ!1!F`kqx(_)@gjS<2sLyjo_w@C~!IZu4Uej+6+Y z7lIRAOT5YtdYxRzn2b1!e8CjEq`{fke5*#6s>5xU&d6vE;`rd?L z4EL(x0lkkV+GuC`en;~BS02V>A=8L!cU6=9y|AS(r^jM26LPkhS=6*&xyA(lc&-Ho zO4K?bDmyFZx?PS)(-f07V^Nd&c)i-UF7=b!j@s>N5>mqb z%X)r+KCDp%Z0^MJp&v}&WI7?&!-Txdzc9Eo8fxJyoBUg-J$c5m+sr<;^^qr#!%r)EyMfvr71hHf`5kil!B7Vb6D;c zl`)~n;Fk>4!eHXc+*ubhJCf6-V{B0Y4cs^V?v?rwPeD(td06aOY^?Sz4PCGj?A)hE z3gbZw^C+>MaCP}D;Ri;;&UmdG8m zI-OpwISR{ar`_cIHByisee%22EWG0tP^u^Rv1HLr?Rht)jr6T6z07IKz_v#5_ums9 zpao$rBVhmMlqW1(d~U8yyd~}0ty|CZ_+iso9_K0TBF2-R5}eC9?^XLk(^?ITVUb<8 z)G^Nq8O$aax`#RRGG1`ck2>^pZyz3|Os~DZZDhK4tKsn6NexhN+7c;u>;A z87zz1+c@NTpka3P4ZQB~YNVXSEHiy-%;6tAI!b^GcjJa!5bt2QbMM^uyB;H$VTt#v zy%_aWMb*YgVOi`h^5sGS?j0-^ZLfgCfSw0&)>Fl#&cnF3R-hZcc-Yubx`z3&chir<@cSPdwiLhar&=Pvwyz3b~))HENwn& zp0f2P{2CJ{+&8mtU;C2Emj-GSnOv}E+_Htn^kx1Uvqyqeebw^7w(*_p*Xk7MJuo`n}^4$VI>2d@Av+L$85x=9fExw*H~-61cCvseTSP29rgx zfW6}B?Sud^MUyB`-2M9{5kBORV#OyUn<4`@owR$Z5$;(#`UcCf`5ZjQhV1$s=#C^+ zMeLvxUN&E{!c?-*FCbix-$r@$+4|;fxGidpOX>N+UljYsa^7)wLXwYWOdYiKL}he$ zZ$xE0UROG|nf-J^oFEP>(}2P(i;AC}K4n(zU7s69zi&(O@paZH6;s*Hv8TJd&?K2r z>pA~>%q%(k`|I@9kBa31lhI@0ts1#1W`E(d&v0H(sWvZurxfHEsDri6Ya4g(B{=e$ ziZ~kNw8TjzS~~=KNpdmx<%H}ZX!oKsY7X3hR+#ev!W*32ogb`J6S1cCu}lXftim)# ziy%?sy0!I!Z;gP!kzBAWf~jQ8^yX^B{Dg@DNjwPV1McU6evDz5_BsDmF<|9IFr^Wf z4HyC3;V--rGz8p7Tcp}3ZHbq9`wjK5C+74q#IBP;eUKk65gm@@lj$x7ESTBY4hnJc zh;;PEtV*HxiR*aJ@@Z|5F>nrnpBTsd(1a;_ZMG+B4hr#GFg@@j* ze5j<H4xr&OM$_=>XSJ-A+2)hjAwH4yl1Bo0XeaXr}MeR>F zt1@yIv@7VxGCLBBK_twBgd=cFFh6i(&4TeqTYb+)aB4u-z7KA+k&@6^&0BY-zv(2n zk}s1=lU8Q!nU;4ey#xH5T$2l$EdaB3?u%Ud0%&Brx8v}_ zanbCUkt=37H83cbUKWG$ctGX-I0Vg$CtksN+-&4_>_Zpb9ER&n4)vF4y}?)>|5ngb z%CUCPVYMRT2Ct|#W++F;MmU&*w=dIJ+qk0E|74v%T0ekun!ysNCJvWW-39w~Up={h z|C@sl49%nx`Uit@x*Q&auZ zsU6wRo&_qH2H^SST+IHenw)%na^kM3WE}B`z|8Zm)*gMcg|#WA1^k!ZV~mvHuazf% z|I0|~{Kc%?`33y2R~2#b?W?yL7v`-n=7DmPHqWn^dH>AKPV%Vw`IH-sdc(dY)VbwzPss1wAMvX=y97L?%5F;MU>t1kI&KX)|_AF%FDHHQeJ) z723P5-WqU|h+$)dujRsh+glblzwWA8?Y`YMVCdE7tNC_C+PeCqdfqWDeD-}j;UvT@ zVtQnoft_7wex-N0fsv>^#2y**B)Nd^(MWx^^oRO=BD|z13XRYXWC)SS*->DA4`1pkQggl=P z$)0Lke)ZmTS^}|u(<<&Z7(uea@X-s15rq+Rg1F zq>&|2hK|u?Wg2SnSz9^TpUcY3W-fH7YZ9AYyg1c@4={W!eW^|+LL9!L>_sphk|OG} zOwuJy!z#%Fl#>u4s!pB^c6j_3&LVMVh>Pxz$O(X0zGF-oa<0~p;LSEmwz-)#m4v8) zs8X>B1Z+W{$<@qm#tHt;ISSqJWtTtHOs|9p5@b=BrdfeaPF@1!;G>CX<;+I2LR3^#4E_|1NkYits zeU_@BBFD`x= z%I={~{IEE_2}oqf8UIry{33B}*e4r)hWz#*i#Pmb^x%y1T${7l83}#!z`LBvYZ_6D z0A!QndhuC_F4Theop%r*4MDc&sZ^c5=S$Vy{K_QSn!}5~@w{U#IRxPrQM0Kza6}*t za)%-@{qhCliWT{%Plq$0os9-^s(`$2sd?bcs<)UMY?vK##+Ag%>zWsJsNXKWN_DMq z^eA5PcUAvr)2@X@tMZ0*m4+Vc3ECh9$q<|&5BZ~0p^D>}h1*5{y_l3=G+dcTz3jIf zOPVSyNd_MCB8&_3DwXsuu3NV8W*xbjAqSShNHNPn;63%{O;QH8QyX|KcBaqFrMgz- zz^TpFR=@M|Ml*wD#3yUBZdpiT`fO#DOsA`q{D@z4soGhgRZ6g&;}*0*FGD`tCuVf^}4wPkG-e>h+=glydEjU4?A?A%Y?YwC_s{4w>E zJV1;Pv#wn~nV#WmZeI8A0kzX$WiR2an8+#nfyGdaX~pd$XHt1rl@Lq;FCO+g9;0XqQ@8U%Ph0r7A(bLtbz6A_l;Gb*Y;Hm8{tIcKOplOJpxfCy!@mXb>|j zlupOBj3=c}7ceK(nByb^$Ic)12*Z+OZD`dLx7J{b#uc z+6tvB=1U1#868l%M+Y%`4Hwp=IBGW2K3;?{o*fWqcRvHJ(R`Ox4eFkILj1NzI>wb` zBhrl5)MD-%g#Vm_J-_8^02>kJ6?IUy)#_TBBYqZntKyGiz+S`yhrF|u#~LN$zzGzv zT(xRvj~A@olTf2F_)h~ktC?RFC`pC2rFbJI4GCHzVD@Ou;?FPv0Y0blIEeOCX`7sa z=|8(E?Oo7)1^$ zAA>dGJtfA8U5C)k!x7su-W{|_38Dcv9H`B|6*N?PGRH;)KUnxmc>R-n%9SIc;=sm% zj%qKTTCdR$=$h_I&%U(Tq8N^T#0_LgwYh~)w)G#ZWdF!bX}!8YTKLizyVaLR6oNLB zkY|CLdS)%WEYVg&IDUwViv3_;A#ik^SwHzo$8UQ}A}wQcwYPrTUixpqA7N|lWR>$+ z4%w_r{M;-bIskJiOz5?%fho1H1M?JV_uWK-v0;%uHDzt~jmYq^eQ7|^MATwpVrV!@ zvM$!rl%Q)pI{+9m#a~Gi2m&WoRS?qo!$-l3Ymb9GW{VCfy(wB)_$;uGUrY_LGZ+T3 zpm7~0zYrpd!jlk%-(Gg@T#Q*Mh%}Ve2#~!sKP3?U^)NKV3p4zv@59Xd%k#ncGb}=eSOq*-f6g4sO zgxzdq;kMJab_9dV*v5Ga#jmtcI`Xa6^RY8d=QV>}RPB2DJ4|Izs)v~H zcNNY0vwEpQgJ{pCH5HpI5$f!>TjJjof(7*w9n}%YwQH;~k6wtUN{y(SRk)`059SmU z=y#0Nh^oOkv8w@BABj+1jp9Q#?pNp!*SW5HySC}^>{@@cfeI`L6j1JqKXynUFRXX; z&{_PTlR`P-_kL21?D}<^8+^*nNeF2I;8n5-D7}xWC)QR9ETzrQE6wQCSybsrmn7^c z#%Ap(@ds#*4JXONBGkIAwK`1TN++f`XyL|F zM1j!L&B`^aS{m3KB?aB_Q&&%#h=W6R5eqNW9T^BRjrz6rGt9>6GXUh}9a~FS))@(! z(uW7FO_*#gAz-Q+;6E7SN(*V>#Np|W=8J1n(aXqyjda{FEw%;z=15LFd2g(z#+G+D z@ztNe&62c6`yyKN2`K?1C4H*>u{&SQh5hW6ykQ>aV?WyMFf^%e9KC;kEy zznI8$QEa>L==Jq;;|vynLRsRr4OO0}Ne;|G_GY>}!E?1oJh$?QltM##^|Ctx`uhs} zN}Bdo0qw}c9|h7e2}X@bG`mv*2jp$b>f%;ay0NoEg#H$k;ol*J)YvHiR^r)2H@tD9 zP61a1NA6&5+)zGnxSmUC2auzrFe}inzD67!_uK}EDGMO^gy$2Ez#F7);U+VJ?l=m^ z9{AllQr=?b`oNjB;c)d-SqnrGQqXaf9CIgtJi=`|kbre@_!=hFw`Nso8Edi7V(p7C zgO1la7Lh}+#G~8L$~zJ7(_zbr_wtRc}UxAH7`pzb9mB;rZ1l5S_Z5@WVv`e#;3|)yShrtn_@a zRcqto!N}4SIB)mKBEd#zMaLRM(E_@r zi+u<%K7jI533ahMTJgNT^pA*VJNfu8ZK(zWIx)=Fl0Bo)F!n(4yhiDTN94jD!xTQL z`#E~q5yo?iL|rEIZRDKRtO$CC0Q)(WcOa|sfM8Hg1)0%(-DYD@0DbQXVz{AE*)-4; zZGV}50`^gQYF)EL!|jjPJ|DSk;wQMW+J7`G;_xFQTlp?kdr85tO0y9!A1rR`7O=_8 zlBtMXO?Uz*BoC+IYpJiJchdQ>8TxNRAdsXCI_lEKv+#!9sYmE_PQSw)XV8^jaC-us%0#Fq|-CO+htI7AYPhQWbSETY^ z_ix_3V>LhDwj$Yg#8gn}f@vr`cdz0vKD(V*4w-$R?2lC*E#hLU@cnOy`wduDalQ(; z2Y>Nxm^A*ys-O)+ittVo$m|^40z-LQ>kBxY9|2!No12Xn_t>zJ;x4hibe0%OX|8?^ zei1I1OAjdaxv6nWqx%KFMbAI80Cu%U4MFSK;IBUYFY~Qb3B$84Ig3Hke@pdc{mYYw z`1xon^JCZ%chUf`4h8x(w$7z8f>_8tH@DUC7cpAL*P+bk>or2WS}Y8iCQs6^*GJ&n zaH)}Uc%;j`U{#SUZ??upc^KQD;r1T&u3H^}&MEs>K=N)OTk@Z^2ogFOT{DZ351X2;T#X!j!P>l?^l+b)%lG%&czahkQ-=uk7yqwl^>);r zV{*px&pd>yL`l_z+-Qf`unx7zq3*TVxkJwm;sPo5pW8`R~PI3 z1>gZFEMKCXK)>#95ZbqIl^Cmh+WD=jB5t}90%J7VB`|$$hqDL(1Fr{zHt0AZrJOqN z8nC{K<51{(hvYP2JiQZ^n#S`S_z4DdU`VPn-$`_kQ`;b)g&>LBfpz=$9}rdB_5ArN9B#4* z{H2{>vb-t)UU({4?s&k6Kf$y}VQqd*N`B4$8=@7v8iC>n+PkBjeyRS35K<@r!5!D^ z1^g7DX#EYqnrsFCO@x0eq3C+j&O=kp2e8t66$CAa-tKc-%P4sJ{85YYnNL>%r^e00bDbr-YHJy^{c_w zXZ{ap$h=gK%BXOSLuk~HW+D<|gf6>(DX`FSyS6b~tryiJS{>%a&zB4Q3>0YUQA5C! z;j`&W#4n&$C+{-{w=w!7Esg1QD)i~o9awJQ;Q7nB<1l&o@Rjf)Xu>gKuwc^=VuSJJ zkngcxTT)0ELxc!MN8Ndbltt~(r0owC(!}G@{Nh^O{`z1EMep}t2f2n~@+)W13O093 z`jmkt0V=f)X5>p6QUUwf3;-|&Xjo8>MVJN>Q10vNGj}Mee^!0Dvoc%}_?W^IhFDZcz;;9j_SYwWsvJfe-*roPtEv9W;K&jQQ;#k0xm z&%N4`kM`1l4g-j?U-&K@@Swb8BhJF)TwDv(Q~lL+uLjma2r#IAHF_42V~pp2hP5k{ zL1pGDoOaZHfwSGLZR{@0Bz$PI)cSV1wIB#s#5l+{nn<+iP`5Ymb%Mn89X|G=+(iz~KC3a$(>W_L^Ms!lzih<@T#`9Owg4G7!D=Po>eXOv?x2B> zH=FeIN&y*_`_I*acs6wz2T=jl--fw&@;-cZqJiq^`SIPm`V%QoNu`aXs|H)mO-Uno zEdBW(>EUVsJR;4C3^wY`f8e+w>cg@ETll6DDeg)ciMq({cl6O_@F)6lz)IAys3_mh zlZkS&pTd7t?%_abw^`abI&f}(=+cfQHL|hU9Z5l2BDDWUO%ng5hWr22YVohD{Exd- w{xx;~n!5i^SJS`jF%FZojP^SKD%~x@Hc5O6hwSP2n2#6{^gS#1OgQZfxK#jhXvp42jfsomq#Op1xoFw%hd@^DW_(80k!wrLF(p5sKb;yU^WrfxxaGXI_4 z-`vpt=)%8o5Rt(jawEDrcbRe9J-K{o+ zki%y}NCY&eSaAZn@R3MWRck<+na!OfisyZJPYMsR)6of}r)@A?M4baQg}ZO$83E_Q za{*6UIzpAf$SNM!$qdi4wtszr1Rra8MK;gY=Z+XnkuFj#6?z>?X<)zo)i)$qYeEBN zROY5XE1gh9$y~e>use4gIy%avg+WLg^jOUBWN7TMA-c~#4L485C`U_Ghgfv+cFuRy zIAN~oY*-<8DPo6+$XqScD;ev^Szi6tCBLDe;kum}wP3Rw;B@BZVNU9)!%T9{3BfbH zp@(r>aaoadM!fY2HIfZZ%!l7wa(0lGOkK`V3B#KNo0|D_EH8IV-yaKS<*RczBEkfX zW~jZlSE1#cE|c!vYK=NqN6~9pw{F1C&4Y4YL?B6)RM+gRbodf>szV4zjI2ZGOuT{% zXMIqTPeH5`HoYWe3_)$Iz6)Moo$E#*35zA$7*%qZe+M4sGck#5Hl1g4s#hd3hJS-+b`g;cAGX_Ig#Kb0@pjJ5crhQANYij#IR z@#z<>f_9Q=XM(M2&7KJ6PlHN-^u_My@Mi5ZP7gn$6fYV>FG@iyphE-Q#W-5fRf#EVuiB45L4=(2knm2q|84ihRj#x!yAP%WCX3I5{ z){!J|@U2%^?O+-*rn7qm22=X}qtB^#aY*p`lj+Zmt$!I!c4m?!{p*55n#uK4(8DHv zuk`T+m76lNnlf&7l~E{Q=QUCNqrQL17!}M|b*O^oJ&M=W;goiR`WVxpr#vDljv zvyX|fGG+iW;k|B%`*sFaAMRDyq<5JbW9l@Y-3Wi}_r@!2*?{h&SET-|3}H+P%FCY} zE;T16CImA^7dV8V>JP__S#$I9MlFo0H0R@OPUt;vt5$~{;=M*m*H<)?wrh4HRvoL5 zOkGf!yIXPnDq@hswp(rRAhUd-ebR|obDOC!$Z`3wTGPRGf~NlphEf|kcCIPk=JCoinW z`|Hn1>=uO85p!x_2754ib%a4V9h=JB#QBQcH8g5EB^jv*$Jmax~e(NqWCeTRcFK)8tSIy>GAReLI};-j7?bZdH4!B^*4?A{XCxe zp)-`WV~amOJ%>M+jk5l|Uvy<9(Ko7vu&1V*wNIH@hk}ZVv7?PHE-vgjGQE#$7rW-< zzdZrAw7618>pZr8-lOBcb~Mc;e>nLaT0 z|Eq_qnsa3=-;EIJFl+teCgyW`vmPPYC^7>3D!lma$9U6Jce>Jhk=t-LD#fMG!O=n4 zfgPcK22nQ1%-ti8$Gl3e53fpotFL?=IHl4KedeswrGd@xj`y3MS&rjiI$hqGDSHoD z8O!?GJ2cexFR^6(u*OJ#v!A?S{QZXK*#LubnZ>*%G9hkQnZ7pqF?xPML7CGrl=*x$ z!Qp(3*!2pMSDfFn-!cxqmXm zBYSdnRbA`;`7=zhb_*&b+Fp{HhDKOX@oi&M)9T)ysgo9hiTQlZv1l6qQv$C`qk${% zG)9**=iEtC^W|m&`D{suH#ZD?>UR2Qf>(kXutmsQ@h>vZa?FoOR;aCmgD8A%SM7Cn z+vtRZVc*~2SnrIGUF?qMNc#vG2Y-kWr!}H~FjrSdAeu$=cvZRmkIn3ujN!SYTr>V7 z$8YUCgPHm!QRcLCB!Ou)6l8YA52w7XH)?_%KGTqvMc<=Mc4D52qm^fimLM54#sjWm z;h|X5-ef~~SIGz_XtmXF9B1;zgD{J8wT#dP7U%Aat0C2u;k0l2dtuS5kKf*mK;t{& z?73ClXg#9e{8l@0fJYA0(9}E~`x*n$jAG2m&qo{`WjZ-KYr~X5ZUz4Zzx2v;+HSbn zq&7D4Qej!nl^%M$zKl9lA-L@EI)Yzzt`367#zaHW+#-` zL@Cs~$D1mCL@rSF@?G}4?Azmjlp|SRjex1( z5WBP~n+gl{XBwQ+YQyC6I+vR6|0oq$+!e~)SROBVe4~ktcA$!tu+hxQG87%a#>QS7 zNf(JWQC01UN=h=bNs`jsi2F4&^=4O=B+=Q3$@q_r`uKbe9&>ZS=WeH}n@eTlqa#AC z-#dCtQtDF{b~-CAuv+t@FrE#vNP_e7doz@3WR~xOBA3hqJVNJIM_PzQ=Nemd2hD6d zC4cG9ja#7OulN?D4OCk3EYrf!iU%0Ya#yxA;&MoM^~Clxymvb|SNV7SNxF*AT?&Qu zAJd^LgJ!*fLuyxO{7Q_>lc=D{FT|1_y*z(BC&VB`vlb1i8H6mC!I*OQ>kfQqd z@ij!FQN`Qk{O^Y}d3g>Y`gko_FtPPoy@jY47{pv$xL}cS$x|oLh`9Z$%mjqAw1|r} z>U?u^oydKlA-uf2=y+V}$oQsJ_~Y49HEI;RR_^bbT?SnFyn17#jpyS;w3=Z}*+i}_ zyL0w`9&M!*6NJcTO8=+VTU19F#lQ{^A@8s&@tZL3)}W}>2(%- zKMos3P-FT{O*XWg02#z)6#*E|RJa~XzgTl$`Aex%HDU|;Cp5mB3aW$p*V@X}9XK>N zy>nB-fo_6C#8cXJwx7>#7wXPcs?E9Xt`5zrO~2H}e35+MSaP#M{Zk-%H{J5)WdNj; zIela^M1#-o@9)Xjubwft)oZPx;^@>PfYTRD%J{QZ5pX0h* zW@Vm_IS`1pwzg#A8z{)l(|rbrAk#y!_;oabLrB!0CXzjd-XPDTEw3L9axGNZ|RnB(2ZhW1qB z5w%DU8Rk5xQCKNB`b(!AI0ZwZyB=xx=cmAH97-cj8|mDEA1E;tQtZFk^*Z6*PugfI z25Rf;C5R=rH#b-3s`l4nI}hib$j|pls30dZ`jN9KGQ#-k+e1Xam^OO~?CtHs7HZvb z5IGzlAD^AY29ELyyO9EAnS|qeKJyUBu?cRT}-H%9Z^IuD;e7iGEZt*u&QX`K1V;h=-)#4OkDEGTPhHb)MRi$-pBiBm}8(lZ(`@9Zu7l#24( zo_L{^Y|tg4dnfQqL*`dFQB5g1{`DaSh4hW~XT3F$9$Mitf?U=3Oj*UghAcKXi9A0& z7SSs!DEJQxEc+S`#D$J$OMA>7U1E-DRGEy!iUgr{k7lUuEY1&`$BtRGJo?DzlruRV zAnBbeIyucl`%7jY%Fg~iIg#bG-$Cym7{I{iM%JviXXhz-TI>W~+t$$mZCgh;p6w9{ zqVUPZg`kcOY5xE%2(F<>IP?ikAtm{8!CpzOu)0zpk|(eqx?y2szvFVDYrfqwD;U7# zcZT&2B92ZkA9EK9C)s{gm+U9k$GDx+5=iDeA@(~?uJ7b|t#Z;IIHT?XE{=bsy^uHp z%RS^SJ*ZGXsFa$KQHvwcx0-;jm$YM&pbEE_)4Qb03&$SP)3>tL4he@18+YuWgGTGc zH7zLdiFJokrGryKns`co-D5MtIZ#S<50k9ShZvx4#@VOQY6Icax^GEAR{t>j7vwjF zmIp+L&ht~rXwiHIKm(#6qE%Zie)pn)H^~NmX0zU%rc%d@H##aS3JRU&r`EYDf)}5B z1?lg9YW;yRJmawahYvxmMURL{?{y#w(r4ox#!sJcmv^CCdh1P1eT|G-GzMW^8{EK z-qkQIKCX)cY8DdQIaPtWxr>uJrEb4dd-wX8r0A|rx4Cc6BJG!6G-ZG#273p zGovvlF|QYzdtc6qX?`mUYSktOS%WfC1d~GjWzUs1T-)qt)S<4=Jk`*g@MO76Sa08w zfwaV8)Eqc6qN^7(6&B_f{tH?de|V#B{q%0Xq;>JpiqnHzy^$8(x4i?cM(k5(D8w5; z%F?yu-OF5kW!HSFb9auzvouQX4ENDPhqZfys#bW6#9(0V4(Ok`MuI$5$BMCz`T#d>mZAMsKe^`JM=JSuJp&C44 zrE5wc$U0v6-btn>glJl$Z_#dL{M!|Mek)m!#&AI=7k@?W-j}m(thQK$KpLF9g3YFj zGt@Z_Cr7)(lSXo6NI(Ewn<>+usoHOWc#r4Etj`*yl_gM+(esGr*;zT4W?)>o3EVwbG)WMq0|b0A=C*$+-2_~L>=R!!}@!s5k0mfW2AfiiEJaM) z?Ci~_g?k$#!pF9Yq+tfJ+SXaTT4QV5XKhisR0Idn9BD7j(}7Jw*UN|fa}f1Vo| z_vjoF!OlE{wdE;IKVrZ|^g)VY4P%FLCmA_yAaI9Cqu!30?CD($ukEG8PWPs$UGhfY6`dx~d|JH!$`%v;IVgk7C(#DNf1H!i0?? z-py-Ody|`||H+7aXh^UmbxP)*J$!}T`cg_^X+nv>hF7F$i(ZZ8?GU|5s8Sf*uu#dX zFC4_sxHoQ-BUsNRP%@Mz!UKCj(v1sEOXzhbgjMFbS zhrj8idnl`{Gn zx^<*9)bcHLZKbTYonv>0MKVO!MN?%J*Y7K4*xv5(v5b%puQeeN)}MXFN{9WaxuXjb zM#7$S2eSboC`fmhrNyNotC+0~RCl@AA;1}Xtucy z1$pqL39aFHzj>6vre!|+baoiFF1z_$yP-0d`LvK$YO2RJG%4c}6eB&s`WaVvT z;hm^o6=i+r&&q3LMA^G(aX>s-_`%M0%(9}Y4EK*25$lD?xS|xw>g;Nf1@Y2&wh?m5 zTee#GY$7u#wz;5=Ffk$ONV4X79~VwkX6un1Vs0)dlmw^p z*;Y1?ySa3yPfa)CCIzR|uJsUx{o?x|-5Fo+;f^KzqV7?8Y>daVt2oCJMLU+2Giq%J z;V3C7Il1~e$@mYM93{;(K92mUtke~=*`FFj$Pk-%tbwRQi#%J>-yFp^tZ*J`LX|+_ zZu@)8dgP7Rk1uh$osABJDm)m;Dr?Dotk~78~VkS zei4C`tlkHe7;_WxS|7PF8@4Ty#=IAgEb{}v0z*SXrK`esKJTnLbfte020!PthZCU4 ze;rHrLq2{I@lkSAP@e^{{y_;PRZA72O7uQiNWQ=)Y}@Aeh$!qpD?A>q#)k!0;<+)% zY?Cm=YO%vg0yWEPNko+^vL7EdQJ%J!lhRsRdL>zt)DDD}tyh$IIRyP};`iuDr%{u+ zQB94MPft;Y7!l~gYWZVwC{GOHFjanH_I7sbrN+&)-1eo%(%spu5XgMFCE3;hK@^u+ zL$}UvHO6M_DmMI+>mwhNO1=`|+LSRx1{(O5zWVcW^m)|;PZ^BU-%l7MT z)>J3|X+wp!ovFrL*=bjRT2lc`G*G&IEhrwiuk z{jc0H>p3AeXRYhf+Y)tB-EWB9{u~6HC%ie+T>-_HKdXJ&I;FVnxaGXoBWQJq2$m6+g9C42fs^;_2eQoT2GTz@EQFKH3I8GBgJJi6 z{y-Q0^7XTi54!M=*D$cc@MLeWZ~=S&<(m$vKl(eN|LMT0hSHUo{5H7k3yZL(-hZh5 zeDeR}%m2sw{(p5q>Yac9iC83YfJBz*ULm?LGABp3#M$||4Je`eDp85JS5A9Kf`Wp? zQpOeY6nck;drDfKXcCu-)Hzt`K7&TS5WJyR%i)v^PLP)8o z;CY;m+(`#~qP9Zx!^#4`sAS3M0%)yLV@YIdYx{2q2Lr=rTH9-}7_*Mf1P%s9_v&Ca zfz?DVq%BrzZPIB};fX(pFhRDR~egS&rF(0gX) zF}-gP@5)M6-s=TBP>Ci=O(J%6b^VBlsQ&FJEsgr_{rfWORpI<%W6_st8Vid&acgU9 z%HWpFAJ@)VhtqBgSy))O5cai*xVZSsRnBje^Awz)AFqGL#eKif{PgMdyLa!xvU4&s zb+(6695(}43%f#bLfgnFC|+s-i@lE+!WWzucp`xG($mum%N7$A)$9C$u``nH$9dQp zjCu2LKKucSoQ@6!5D#4dXh~(acs+X>7#MuXwpgrx3vLo1oDP8$YSg_U;IPEnFNM-M zTByV2cjs(uY$PmC$@C0FB?{>XLgR2?hbQ~a$;w!$R@J{FtqU@+^J)N2*w*FwdB<0V zCVzkb*O{4_KgMICqZyq~bYhf$0zSF=ceQZ3pn?Kce}6yuZYrnEe-@TzT6KNM1O&8g z-vtKzA^k>$^&>pIYcPr9!=wnfEejql@-g)-UZ-HoDO?fLumq$<>k!wM+ULDR?{Qdjab<+qmGx}nxP*whz)$wSdFF!wj=3urW{H#DAl5aOL zIzGOKLMGMRkx2M9mEU9TpdS093Ta{*Q+G&6h>EdsZr_Elh=?k<=j=m5f6XdC$H(LR ze43=Q@3mTDB{J5a`UsuZR!}ggJc2>OR*{T}y8qch%S30yjpl!^UKK8ZKqb$K9)3H z{oarcjDm|5c_m_FQ#OiL?DhQQn1z9lPjjpB?c2BQ2SQG3LAj#0SXdiTd)}Z;p+aQu z-n|0NiN1dG+Q!C)J+1WeEe?+U!_8^5iLS1$N|P&_oSa-#bhK}2DP!ODOCkUHbHHTf zW!iJX0Ehjg^HegQ8@Ao{(A#qyJUo+M3_Gbfo7>y!QYGorM)?}LdL&yL8>IaF%}ci* zGPCS@SptC-`?ml5A+5Na+_K-Fk~+HubB3KR=b7*iC?^4{S+rrw1HuU)ipzNfvca_Z zvAa8M0*bo%9aCO@{-vXa)FSm73I3kWPMx7-uIR={e763b;?3Tl@0GOCzlw{u0b-uX zZcCD>$>n^DjGkUPT1i3zaceNi=u}l4yz}+-Ep2rjf$5_x4Mr?ZlBJNH z4YJH{0)FNP*zYnyX{B6ZhUb$3V9u|21cuRwA);b>k9`*B7-)YfM(T?Q5%k3C5-MO4~<4})p&=fx6Kt(_fq+Iy* z3+tnL^}k|PWUtn2V*20A_B-Fit6Iwq2dr0Gp~ydc2=*cS@Bs#tsVw)RRT-Q#f?M0$ z@A>$M;LwOG8_Y2D5?Al({L%GM^CZqLE?9qmH>(h9i=|a2PusVPy=g~cz@4O}{P1CR z!Zn9~&rR&FT%N&3!N2@m! z^vd2|$WoJA$M`tr=H{l-vK?tQND4)H6@p(XwoB=mM8j~&xKx2Vqh^SPM{9fr$@eSw zP=muhHlRxbfurE3>>w}uF%oWcgM~X&v-ceh5g^Y_*z8vprYIn{SWOqF44NdF^6AfH z%Kgzs?PTttZ}Pg^rTp~yb7D$Mb6ZN(y-&xIJ8*$`_o2SNw(f9(596S7g1G^ z1WgK9VB$_hJc0QGkAQ&jOsCzvpy#PT6FWNTrv7foLr9-pubK2`BV2as{y1F4&h>WlO;mz7XyaP{p#uJ!b54rBqaRErTg-J zGAn6My5pqHQcdl5S4}92-y6wf@`Koz7(cKIne<>eU92hU#D_B3ZrBq+gc5!9*gG&V zu#+h1?%vpEq|?{er|?8=k9FU9nhy3#ZPT*Z9jhe zh|1*id~p5*vh!MJuwLxs<^FV;eh+HK)d7fis4k;)VD^FMiGYj`8v6|(8-RAy4$9Mu z_w5`UV%?=dBmv$}et4}&^OpZ^=e;Y>v@{bFQ#7Whs3vrcNh_UC*SHr`KB|$>@lBaP`B>{;sX*i8BC)!ZPM?Bauv zj`dY}6vX&i+s%-hlVg(Sn;_ZgsV&gyAedKfY#Xk8yu4KCoC($#x+X2M@;bu!OpGdj zzft98p_nil4JEe$UqZ*hF|y@F@sY@4HbvA}<~Ttx3I6?AhcuH60jLS4z6c2kfdpE$ z!534YT%vcrH7M%G%XNqMmW&Px2G({tiOY@x#CLM1tia=xgmULoy&!&$cbQq%&UT8z zzX^2h+0~Q21qB3A$F1Mg)BmAz#8XKt$5v+8 z1_8H+@OO1&3CY;C=Lb*A+;S}6y4JYz^Yi_H(be~>M@N>^_5PJfv>oNfG~nqMS;vov z{LP-xCV5FU;MR>pChQbuE{eUIxJ3MK+S(qyDR@b$u!b(BS^+b=-W`E0(86)-@%joO zO499{v%?|c4yv$Q-ozd^-SmX(l`}Hm;Oq9dYN?2SR{E9=Sso+F)UgtkKL#X`!X3{`spU?`&-NI48}b z^Pj3!o4}v6gotm8WE)krnVsfZ7vodfTPx`u(GH3A`7+D*u?A`;CU{$2AJGR|OOquJ zq3sOQREP_U`76jGt^YSFLx+qtxOaRa{Hp(L7^ghUH_$ z^;Q!DeL=FA#S$ z;#*d%Rs*8nBWU)#9Xg0B!RcDdT;`5HW7lo$n(6qcNu~b|rBEVEFE%#T-15Smox`=6 zQ^rx69*Km<=kb?I7*qF5m#;83zoT#8h5vC=!?oV3K4obrOaM6I+0WbE*l-=4xw_aC zfAbif_59r~W4j_cTCN*cA8(mRZ)wr3tiN9(>DS{XW-^2Dj^cj>Qi~q z{8*<;+{ecn6)hYj#4cVH+VMcDuVeyWnC(7c>J^f~RakJYluClB( zkXm97k~NYBI-|acwtEiV9HE0J2$g$)3wn1{s;|_`4U;at!~*9V9MtiX2>6zb)i1rq z(V|7skniBaN;_bHNeJlf<+qsrV?+l80sK``%uLWiVwFH2AExj2ucn@t;@p4FTRuAc z3s1GW5WyN775Isp>i#dwf`*Z^{G-&S7!}VWrckVeVR_@fO~u~Or^tlel$*gaLp(Dd zq23ZtE`)glY83hL06{b7_M}tMOlRhD2QU0Ffpi2H_J1W!_pK*0nEgWw2=f{`j07gUEZDo1=lRFZoAWz{V01nPRFxIkX}9~ ztz^gjDZ1pAlZq}@K3?KDcVZx|B&U~Y&(GYX*k+)o?m`pz{_c9gWue|-;K+SW?>e>V z%Q9WlAu8elG=z$p+TlxzwaBk5>N}I^tR;7F)cGjOtCQ2S2oX?*>*V^CW zV7AaN)wi-%IEt2rqsC`c5; zgAB=}`=AnYo^840d$GvVNgEN!488!%{9mWuH!iQJ_Rwm(O>4)Oo98y-#sSM2HpL?x zV3O9o_dSBj{F9l9waxGl)_88zbvWgfYl%ieVnxVri`7TsMM^Cq_A5^=?-N)@8wF~a zFajQYKRC4Z!d|ZlT1E{H<9gNH`J-aZh6&n|JN$CVi`hH%{C#$$<@+1wuT!IAYLi@Y z6|U#EU8n1%9zFEpv{9L{Bq|m%&F)ktWA z3oV-OD(~y#qcm|bjL1?Fm&kha2my2`x%EG8&{| z^hYN4pEi;dySPVMUEha$h8zx1l?*3X+SEBMyAV`lY_;}GqYXzA`gQt$fXCzQ-DpHw zitG-Y7}UE9RHTboh(l8@La)hM_C~iqdVpUFNj7v+D;ai1nRhzy^%4|FTDC0usv1Ff z%4_*>OX=?Z7?qM@=EP68Y1qFZu4lJ2D{FUh#A7w>mKfFM7nM-@T0Upc8zk{&9(&wj zRJ6A($75M6Z!qJ2m`JAGQuy9qR#6XU_v`JhsXRR0lboRKz=4F;Nv{fQD02)fCo~dE^4?Pq;syM$sB=~_ht{niH z>R#s1Fu0#*mN?TfwH)0vUw9mwCqGhQgmyuI{*pG4@vc6?q7ZtQmKqUN6VXY?3p}#- z$el|)x?HGZ!VkW;kXoK{*)L$4Hne=4>Mv(f$Ww6Scplg8F8wSkQal|EI6YXCZWTGX zy{N~`<-2ZK6SeVgAcDm$%Xw6*aw`2kyPhLtEigj9+q3P`9cB){%{G>AiJhC+$D!J= zZ8(>UH^hI3;&F6zbh+o*o*d}BUX#A`j(y@k_jpuEvv9m98Sye_W1 zVZaGjHe2b#4`shOBLok`oQz*D2Wv`B*JvR3$Yb|6NtCGX$F*BaZqx(8RXm~7HT28< zUIkspPRw{D2;>mBXHnNRG^`JDd}nuHC->-N4YDQkuarcs(?2=A?D%gSBYvkh3?S*~ zIz>BhT>$ZBsx`TJwf`Htw4`zE(`Dp`Tr_D1oBT_@#18o?LB71NJ&UNw4Tnb5{Q`u* zWdMF)-5cXE%i(fo0FUYFc#n!g!(lbVPB3Wc5V4?Kz;5iv0^Fu;yg9RZ77$9 z#^YEy0o=X7kR&bY$F^7m#Rm!dZM!~v zz#gcstdxAv>W$2LdJJ&4oNpE>4|}rtBUexcKvmbVRFSgRE$B_iJuP^Ev(?hQ-tA6& z!zy#2$?v}{+D1dJ1IB51ONsD3f&3l%cL1?r9~&21w3KRfG|t|umsdBn+Z474Sj>8r z%1u>2S)$Z*#aUPuF0Xp@U}#plIvsbl_ekpq7!qSP6uyN;e5O9f)vrIY?dXw4Z-6eA z%TobJ6MQv{EqOji0cYrO7-OtX$nYjRRxPE={_Y8Ck*m#24w6COtTG-Ovw4O> z?$&TrU8_!!If|cmUO9_Kr0&SuxKZtR-RHZz{kPTP z&njcj^C$im#qRP`Ryr?`&453E75O~f>u==;#u;15Bt46J6q!XVfDFl4lw$T$Z z$|~_yk49fr=WWgL${msj&YheEOiE929ba%zG?R`1TK>BIaKOlvK zgocm(7o6cW$7N70z7Fd+ap}n#Xu%C%Gb|!;adL8!#1+66c(}m?C;*SEZrl2)eHaLK zMm8R%s+)`=d(cPjZ48XI+e?(uUJ^CI^fTP?pc@HDUbi?%7~o*g6;esm0F%IX;#3kY zSeEP-8a$*q;;H`X+}as~uQ*@Pikg}l$e7EN+sXpiF z0~T%x4wC8%o&F2X6+OMZ5)&8Cb9Pso^AhGar#AcA6UQ}GjW>AUG$Y5lBgppxr|`MY z^T^1&i5&mIa(Q zs5VdSw1^=qi@CFF&qn2T)|>r`VW=d#Cl=^?zXnrO2;1fdkO0ggALrMo5@t4TXj;R3 zV{`XURWgwm0e~1^?cvn5NaA|T(TGEJkS{~i&d*B895DNp6?D$KW$0i%I^1Ee5YT)0 zEu{-ByuOYo7%mce1K4UgCd5_DdJv#pQNQ5fK8g z*%YmI zhu@)l@&bJ!6tH=7EUHS3IjaQ*mZaqN^=^Zc4uC@cDfaL<+x43lZMMv-M;Cuo#hC^= zh0s)~*#;!lyC97@9Y+zu1?EqhzQ7KU@lX0EsDHR#r`@dfNX9scYB~&tc(^xyFqs?s zE1jnx;X9aEF}p^To2Jc>aXSf%wnQ055*m{u{dFoS&1-ax+hW$!Z0}5+xhm{LM@e8r zea`EWdjHNeqNOA5Z`+c-v&{pi`EuD;-rf8OQ}Ut*!NTv>id2xMdDs62TnVBeE5wzk zsFt{gJ3n##idWVF1@?Q&YeMFV2!f(%EP$L|hI2F39vO|u^z>?Mt{NIFZ$_@3{LJ9= zTqF0rhlPTGm(`o#7*6*MD%YJX5Z+aeV?{HeGpr@0t#C=fXOHI@Pi@=yFe1dn!Zf?b%{&Nt-$;9^@S&)atU_u zGSWFB|D*Z)zuOFNmhb4Psk?v^cG1eMdc~^IrQ%}K{b-A0s16?Z6&FXgx9BCImX~mL zY)IQ_Ar5#KFzG`vh6QpoBaaNID;EI4;NNuL9QW~gkCx%RjmsNA3_wR`4%2FKPB33yOl*5`d?GZa<3na}LfXi$&;55<8y-L; z!23W$UOxXZvr7YD4&X*;@HK#L*|LjXy(>Zq%r4QK!w0!sð-pRGYaDg62b#9eRTe??Bk(oF?U9l<&o5I-Q3?ziz|lTE9S$WS zT+Ta;(rH|wHSdg|>dT+4ClMdC$7m`j4}QK+?Fkon_6J}RNMtS4A{!cbfd92#Ri@~j zw;rRC2no9cdj0=?VaWD~Fo_p3uT8 z>-#|tVij2<*(bXMRTj&P$gC9Va zFC>r1-gomyUd8g~YR}Y=Lmo%KwvaqAn7oDEKO==lJn#eMk@fBw!;SqTtOf%^jjN)m z#l3}W{IVRd+70N{Dd!QONK$wN-VuwvGP^G+Hq_LPcp&1p#$QLc2JA+L(pz7e*#13v zFZHdmpgam|l*zl+vFiEyM%{wQI8aJW=-H|Gc<$!_E+cdRUMhVsZ@}i=M}2BdvBDl} z7msYU*hD=m{=uRKdKZowOSda+&Hg#ry?Y+_5mt$KTs}A6?^k4hgz0PUCYIw|%oPEG zlRbWtmkWQlFgCRfmB$rVy@-8#i}MnfgSPUR?03gh&nT+t78V!j=*KI1^s!4;_H2{k z2WIRHRnpc^0ZjQ39*R?-2rAMmFFOb*Xw)>PmfU~KO*aAo4d@}g;UU%KBN4wbex;(E z-2}MBOUXKV%z%|tgn~vC0xb4>(`S8qdSF9DYK%Dm+4GHZvBu{XD6gupM5aeY@kt~y zsqp{6;7{@|q?$}*P?Dh_=`{x^k_t|3xvv zI)h{h=sQ^jg^d$p-eYAzdcAlH^C8pn5j^VA^v+|O(SHg&RDGL+zoME9WSK6;r96Q^ zebE5RXtI0Jqf#776N~slJj&-pz#m|GgUb7bG~gAmm27fTs!|4<4S({RXVN(TZ&!8wM8`uM{0Ok7vFbk#zrQ?W^g_{M_ z#cmFH#+)HA0D#ho|AOi~$^ZwLVaxJQ9gw}Dx25b};O`5incPzvMkI^vAJx4Y)%r4r zULxw#^&r1SQ*tCAE_55(a7*T^!IULx=ybtuBnbz!NmTNU{`wk_p3x=qB?bd(;Pl|+ zTUZjK>Ot@rK&U-sF6%j*Zp@evMvtu|Tu^=#YYp{0H_rxjZiMX&nFYfo9|} zjo9#i$w|CC&LJi*9LMhNoa_R24}CizX7su*lx;3;`Co`#Fw`IB8*ICn|AjmRk*~}M zd;KZ`(K3PC0yg_oqd#bZ&6NR##FN743p^nn%D9H%WtD+ z4!AI4`*~)sI(p~Z%L9a+dTr^a8)zH#{~BNU<5p7SK@-l`T5vKlrv~Kz#%rwp7^JSO zc&cDEye^22Ti=^}2cYFtZq7KmA4cikU$E5rT>wdhf&yf1W*HY3nEWG!L@AMUg5ML# zIcbP(fPi?x4Y;h<5aR1=jyX?xfG0)ITtLtXs0v>1AT;`&BLz~(@S#zj0Ee^e$a3=Sd13bNrUuN zf|+@V57!3P0C=jcgd82|J%OSEZCRf|0)eWT!RxzURVRCMZ%0zBFW+KmwV%K5 z(E;v*F+&M~z7z22ac`K;yNu5}ysTt2$gH|m{y--NtO_`=^?556M%puyHOQ3%9g^^u z@mwbz^n5r(B!*zW8tB%`GuwjmWG*`;!n*#R9s+=)wdJy)H622fr|CiF6a&pGoBO1* zM^?iJ)>v(BdS%5Y;p`QuE{pbZl?pI`rwGHMwbRPykODxk7DU3rWO-m*F#wh>Os|>( z9v(sy7(EL&9$&3Sz`1TFr=-xB2ud_R zuRYaMOu3f(j@!wIZdlUEG?Fb?5(FzbpUp915*-MaiTLG89+37Q_4XZYnt)@kkc)xzSItp@7;W1 zSvP5w)T@|^!U9>0`T>}%qU%um?5X?J{I`xxHoUf-=Pwfw@L{Ew=L*1M z5j~$D(fY0^C_d&*v&2NT$-MjO^d`{q%NT&4UE6RYe5J}%SiSw+5mr`)D_{ybdvx3P zX?B3oT>(tt2N(59QdodFeruFe-3C1VeRekhF4*N^S@f}=mIhD_NLp!3L<$w3zKq-L zz*~YmLK8c;=DpG$6&NR7U!6IQ{!8KmIFo1&CV+0ekmB(tLE1;?4 z>m0KeU_~pIIX7i1a6FARTxMpBKgpMaHq5Fgr2(-oFwu z(Xi*Sl@*M6a)0dA3Lp>Y@racmJUB^bVj~t^_+L6t;Jt!~LMVnXG4g-sUBx&5+aFW- zAAe=x|7Qn`#K>PXneW9S5+0YpZdrbQ{*&`_yUx7>y@VRD0?+133=gEwtGN1w&A}T$ zHA7C`x#tcfKR<$lg{-ZuJ(NvYIvS~C`$g4jr~#Y+^!eI$Hhi2vx?V7V0OqkjfBFDr zn!)$){H2tgKw0F&7sX#GB1*3T(*aH~FCm08m~I zEYS8iK?C)m3Q)W_XC=qQO_BNtwfyd$pC>>J_$wO+;|*5z6%-Yr6!<>Do2=p&DMn|- zYy!a~SZ75AsQzHCYGCIc2tQBn!ID3|2VjGul9R*eHS0-%Kmv&3;L*@}Ml-~Uwgx83 z!Hz48bF#we#l^*qGdNU2K_Ke@!immJ@WoGX6<8?mYXr2X=&;^L3l1`W)&Nnr?x?gh zh9@Fy?5$FJuweE#BLgg;QzWJWISSYTsDHUP>BxWt0csIzJG+Y7qm2y%pwviwpr@xt z)%Lvo02CIl85kInYJ$KIdZ=Z*4rDPJBBh`ZeQ11H%Fk-D+m`MN<^#f|Cb#QAiL7?8 z34_t;Xn~vVe);(c2k0Hx8V-D*;X42Px0oXXC_^FM7Z>&~dKMss05VLRf=@UA_6v^e0Q$7J9(OLkG7P`Rw?X6Ir z0?@*O4dZ@(em3V@QZY`Lkf>k3$e%2nl~=a6gFrZZ5mlL(m^cFg8wMevc{z7@su<`> zlBmZy7wF^t)uEq6mhBhUyJP6rFfiiM2arGCs2JU@4!G%%AYgYTd!4zbXY))u4G`ZL z{2^e{^S`+U8XD8_E1-b38!;YKbUK*v0U8rvHZrg)18CMN8#W`;U*vOMXoQ?28@$4o z5%1%hTrcx)oGdMi`{33%td_8z`Q5HQHrYtQn=s)Q)tLenahGWdxJ?)_-`s|xtH^d2 z#=ugYo!G;?0^3`_-5P{X(TJyi(`oldSPQ-gBJl({uyhLS4J}H?*PG4y8o!oklv3{*6HkzxcmoQ#oBon%v2z z%vDwK_yj5Z7nJc2SM7l6*YS9X&T|S4_D*>M$ZgpXUq3${dr4*Q0;2-)h2Zs4I~Y~+ zdvY&AMpcHBc!>$BAvlNr{UKy{I#JftS8$+)B-+=`(N^!88RzXCBzc z8fUP_9;h|FfikF%7s!Bdo{ttAYHpl>>Ik?fP;(;gybAaL_6K9C!%L-bD;CaS5Id{8 z!lGkhzHgQXqLiRC&pQN>K;$;?YXd)j{W3WH+&Eid1hms{ASZKXCE`o^V7s{Q4UxUj z*OkLVI&mW)gW8!YBH-oY+x^Tb{N=orkd%QTvdU_CY0GQb>$yo5KR7t}`}VYqSDP

t(?!n@7wRgO?tvOIHyS8-_ixDcwm0;iHvqob(cDGfjLQu&!suv|B_^E-f^*QKEqSfqI z9cCp>fxx0KyV9v>X`$^WHC9(wPfkusYt4bmx!&nG0!Uv7786zQ-QKaYV*}+&+(!KG zN>KG61tCwY8w0}wS(cK_zrg>iz4MN0Dr^5emJvq;oKZkQL`D$-0Tlu1cBBa+ML>!o zAiai2Nf1#P5y3&qAWfv#D4m250g;g^1PBr!AW{RNw}g=UoVVR|*IoDbyYKzu{`I=V z6;e+2-sjoR^Z9=FKF8&t>!?pVMj#i!y%ctQO_^*X{=^$LWU8T|;ocquv24Ax|I+o# zu7X7|dwa@@t<#PA1ooLo3xGU&3R@|UNlQ0RvS8vq58>Xm%Tm9fI3Qcl02W8GEp|Qo z9P{ecQOyJLGBORYp|$Zu!886>us?C&{>E_-C*7wCVuba)z0cSL%_`~?i2rS8*kaUU zxNna(zn|TsVpV5k!*cl0W7x3u!O7&(?f@h8`Ou4L^Yi^ZJ#j-)N1v#_|NGs79&|4t zO7mREf1@z}n~N3xi>*F&dqLcGb(Lhd?}G194d409or*rHDgF!Km_8QwxBVKwgKpC< zEUp8M77p$NvaaRh)1ip+-~9+)fwf7`X}5ig7rd_9A(|9Xcx>9?(;FDa-ZTG@dxt;Z zcPWFgDKxZrQIN3InbBm=XF!Ezlc^w*&x1Goh$J+!u^H7#li$ZQz&5gp&clZi)1C?Erz;Wb`vvgk`tfV<2wrP~5X$FGST!0m`HoYc?&Iw7E z3+rYXpKbfa)Uhof>1Xj(@7s2htCJaElN|tscAN~-6wyL^51;<{AhES@^q_{vZ$KM} zX#+!W{l@9~GU(kGb>d9pJl94+#V&cYZ&$yIl9)Q!%sG+ z#N^{Es9kH>Q4*7@RL~Gy_)(n@Eh`x-3=C>LY~>MZ(LG;rN|e>xd<-Of&5KHZ?NU(I zXI{eE5Q4ce?#r+UhUgx9AJ|D{GE3g$sTJ8Dji5-!7j7&*ZMCI8yk0vlugxm9L{<2g5!QBXJ+9365erC9O#0 zj=y^HX6Iwx#GO}v+x=qKuaUB05&9-qWWGOjRgwHP#{To;16Sw=q_Y2#xMKL`QNqIZ zi?JuOk8j%%x-Y4j!|a;kr&E<8f?Y#%XM-%xMX%QdSo zxInsjMuPc1^NLQ_^ZjiR?m?3xM~-;JS2L#z21CTu{O`n+ZGMY$OoW_IZ>4oyk1@vj zye{$0o=&$=5I7>3T}i{5+beut&bLnQU2$tmWWUenRGBx#{8~Qo+C?^5%e-14oBnm= zL}L^0O^XdPjfK7pV`|ve>Iy$U&n;+@s{c%t70zhqnmfx$%85E&vRD+8$xiDfkS(pO zOhbn4DpA!+ztsmH(Nxd7Y@spBqjIa{$HK$bv&zxB$|z@A@B175gVt>O@V#d3v8OcD zS!Z5WuLw#UAISZsA$(=p!o+sQFnxw)@me7+MZr|k5S#wXmj*?@2f?`2=>3v!vfj@9 zX7}m$`?BpVl!&p8D)M92f?I0K$oHA8Zui=Bf7r0f)6LqgrX+nr)vS(aEntCupv}*R}T`UX3{*CQ=Y1i_5nqVaNB}_0lhMaiRNB z%JLZJ(rCEvDH5^*(;9P;t_YXIckjm6V=HWUlxLZY20$zM0g2Hfqr1V<^jtMgnqJ~o$-ZP4>*n^sq^yXTX`duhG3 zb4#q1j=Oh-(N@ns55}jb(GoLmRz~%NDa`Rt zF`fONqi-!RdGqs%$bHnafrF{Fxvm#J|Jk{?5$w2A_u=h7VN9K=BA)n+%I)k5h;d#~ zW_0IG_!w*4?8?`_VqYfd!pZdu*W2>-u5hol*R9aiwe_VeZLlr3W}1&QwFqgH4iHx+ zR|3nKPld`Kc5c4%)Z4lGlvZp(U!4t7lQuQ0HQg^6IcG{B6om9>2gN4GcreF4*6p$m zVWUz!&^<5}NpFe76X zB=iilqf&e7N^#TDI%^YK1n4;V>y!HmpZw~dP))0S6TXjbdHW}+p1qoLBSp!{^+>d~ zfJ0XQ>gS}0i07Q~3t#&(A4>#a0zKE5k!wp`o7X&AYW~$<;adK=mU60^>4j zPWg@<0ri8|JX!wh^T)^9|13`b`AdIQ-Y0iYGz(i7qb_>BZ@Asoyv8QUM#{gz>H8D7 z0fo7(6!a2iwwml(Dj`P-bw48JRu?iV;5pN`1`Y{RUhF@WHkTyRe=El@yoOJ%PzDOE zoS%enQq<%#kzJ|e&^G$YboW%eoctdlM3-{7N-2k1tZMGCOTRK|R;H~@QsBsuUV1_N zkSbM48BWm^j%#3{t%-h(S<&t6nL-^**9ja&Caoi+y~80eKg4#1hxWOaCd3|rdkfuv z`%|rmT!h{EwC!4Nphd20EGp?1zqhLntYLN2tJOLaxYqN#xQtu1j8D zY|n6U1%|J|zk45VdC=WBX`e0B1+j6N6;G}n!gpK=t6$x2kfZ!zimYPGz2JTI0(VcLdy z99%Dor>1;dTWb`uJt;nN4UO;Mv=N@r9xjo}=wbZw_`tLmoY z*KwqU?9VjKRjWcNxvN5h0u9ivB3ay)R$KDQ?|Zi9LMG)yR0J0B$^)m38tKZpc~ie9 z+OV65(l(@vii+iq%=88Wc%0s%Ot`vCx(0I!&95Y2WovGtziClkpr###%^pn)DbD<~ zQ$pgzBwlRGs30xmW`LpW>{3afaSb-?M#>&yM@MCwL{@WqVm?u^T-9e;0op!iK6FcO zWh^1Y%=q5pT}@Z$i4Gn4_vmz?vRceoWJeAp*1&RoOUwKd`c-VJTv0ic&|rZEr4VC5 zvaGFVZ*FmmO%HMctvSoYxs@u9zo#c8bB<%qdGFhX*C z#pn`C;K*tl&y-m3aIL1ZxgkucvvcaHr?JTp->9Zox2&8jtPHBE?;M1rfqM#+6Ki?| zB`IL8mH=sJTBhjsR-~Hj_x|0;5PFa>h4l^fau;687kXDZ+?kXf{?)tF`b-UpzGG>F z#9G6(s@!rIvl?4s4F&{h=9yViFQT3A{=uR_&MdUZ4FO*$a>+ zF|cmGrgZD*>F@UTgQyo2Pa}w%p#aw;k7|`cH)S=~7)To@bX5J9Uj_M-sxwVsxC1AO z+>s~7)tP|Jp2e(&#f{o(e(dz}l+9Y>LWdTbLj=TA4Orxv#fA{1B)wj(1QL-r{cy;> z+sL+HMV^$Y6>I+IYyi;)0W5>|%{<|0S5qtNtlnNT*${t+oU!nd&CdoBF7EE8?x?sZ zQH{(miCR51Kau<^hiP9 zG;*K%h~zzF?_#rC4^?V}s_J$@mmz!8v&!k26=CDkLR+^C)mI->njd|!v=|p3pKq_t zKb2Bh;oKqF1G)T)3r~BvlU6nWRen*i@nuYrv37QqgRU`z$nyHYPnKnNsYu(v$;iLo zQji^K6hGC95SCMjX(lwzpgB30FxQ3(5lNp>sM1#vO3aVe^!GTtx?d7h(DR7rXu+*T z&T^ngqJ>I3NEOj0?_>d)G~eDrYsv@>$ld>Jsm}lk(L3;?L{%B+`+;aCkUCHmk{2V~ z5p|`;iR^G1=PtA$v|D^wtbRqO*3QJo3pycs23{t2b=}M6=8+46-`f$*u^}rfD;n=i z`~2}Npg)0n3fCvNxVZ6?VNylv!iH-10!R*gvRM8q<^ag6`;KGh|Dn+sYt_z6@g9|b zus#;vpxy%UXGI#|c0?rH0B08YE`s4tGsVol=aEsq)WFXZ3bTAO=GzS0t@_f3Lfw}g z6NfeT#QyRif&67lxLGr-g?x1_Qhe6-R=MX~lj=ZU<~A+nAK3XYPAAcN@FWv*n z%0D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