From 27192f11c43930914f8ace4950275cc877336c0f Mon Sep 17 00:00:00 2001 From: westito Date: Mon, 28 Mar 2022 00:05:15 +0200 Subject: [PATCH 01/15] Fix null aware type converter data class field suffix (#1775) --- drift_dev/lib/src/model/types.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drift_dev/lib/src/model/types.dart b/drift_dev/lib/src/model/types.dart index 0b061be7..5780123f 100644 --- a/drift_dev/lib/src/model/types.dart +++ b/drift_dev/lib/src/model/types.dart @@ -111,9 +111,9 @@ extension OperationOnTypes on HasType { final converter = typeConverter; if (converter != null) { final needsSuffix = options.nnbd && - (options.nullAwareTypeConverters - ? converter.hasNullableDartType - : (nullable && !converter.hasNullableDartType)); + !options.nullAwareTypeConverters && + nullable && + !converter.hasNullableDartType; final baseType = converter.mappedType.codeString(options); final inner = needsSuffix ? '$baseType?' : baseType; From a1c2ff893c93ba6efa38efdfb7a25c98857b213f Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Tue, 29 Mar 2022 22:00:55 +0200 Subject: [PATCH 02/15] Fix typo in `clientDefault` dart docs --- drift/lib/src/dsl/columns.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift/lib/src/dsl/columns.dart b/drift/lib/src/dsl/columns.dart index 24e89c62..1530a6f6 100644 --- a/drift/lib/src/dsl/columns.dart +++ b/drift/lib/src/dsl/columns.dart @@ -144,7 +144,7 @@ extension BuildColumn on ColumnBuilder { /// BlobColumn get rawData => blob(); /// /// @override - /// Set get primaryKey = {id}; + /// Set get primaryKey => {id}; /// } /// ``` /// From 8e3259c971855cc10673b3c948240497e2a8de9a Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 30 Mar 2022 09:59:41 +0200 Subject: [PATCH 03/15] Ignore all lints in generated code --- drift/example/main.g.dart | 2 +- drift/test/data/tables/custom_tables.g.dart | 2 +- drift/test/data/tables/todos.g.dart | 2 +- .../build/generators/moor_generator.dart | 18 +++--------------- 4 files changed, 6 insertions(+), 18 deletions(-) diff --git a/drift/example/main.g.dart b/drift/example/main.g.dart index 193359d1..4c21a041 100644 --- a/drift/example/main.g.dart +++ b/drift/example/main.g.dart @@ -6,7 +6,7 @@ part of 'main.dart'; // MoorGenerator // ************************************************************************** -// ignore_for_file: unnecessary_brace_in_string_interps, unnecessary_this +// ignore_for_file: type=lint class TodoCategory extends DataClass implements Insertable { final int id; final String name; diff --git a/drift/test/data/tables/custom_tables.g.dart b/drift/test/data/tables/custom_tables.g.dart index 204a4cc9..f6007a86 100644 --- a/drift/test/data/tables/custom_tables.g.dart +++ b/drift/test/data/tables/custom_tables.g.dart @@ -6,7 +6,7 @@ part of 'custom_tables.dart'; // MoorGenerator // ************************************************************************** -// ignore_for_file: unnecessary_brace_in_string_interps, unnecessary_this +// ignore_for_file: type=lint class Config extends DataClass implements Insertable { final String configKey; final String? configValue; diff --git a/drift/test/data/tables/todos.g.dart b/drift/test/data/tables/todos.g.dart index 474b4fcb..3a74db1d 100644 --- a/drift/test/data/tables/todos.g.dart +++ b/drift/test/data/tables/todos.g.dart @@ -6,7 +6,7 @@ part of 'todos.dart'; // MoorGenerator // ************************************************************************** -// ignore_for_file: unnecessary_brace_in_string_interps, unnecessary_this +// ignore_for_file: type=lint class Category extends DataClass implements Insertable { final int id; final String description; diff --git a/drift_dev/lib/src/backends/build/generators/moor_generator.dart b/drift_dev/lib/src/backends/build/generators/moor_generator.dart index 722385bb..e27b1585 100644 --- a/drift_dev/lib/src/backends/build/generators/moor_generator.dart +++ b/drift_dev/lib/src/backends/build/generators/moor_generator.dart @@ -3,18 +3,6 @@ import 'package:drift_dev/src/backends/build/moor_builder.dart'; import 'package:drift_dev/writer.dart'; import 'package:source_gen/source_gen.dart'; -const _ignoredLints = [ - 'unnecessary_brace_in_string_interps', - 'unnecessary_this', - // more style rules from the Flutter repo we're violating. Should we fix - // those? - /* - 'always_specify_types', - 'implicit_dynamic_parameter', - 'sort_constructors_first', - 'lines_longer_than_80_chars',*/ -]; - const _targetMajorVersion = 2; const _targetMinorVersion = 6; @@ -29,8 +17,8 @@ class MoorGenerator extends Generator implements BaseGenerator { builder.createWriter(nnbd: library.element.isNonNullableByDefault); if (parsed.declaredDatabases.isNotEmpty) { - final ignore = '// ignore_for_file: ${_ignoredLints.join(', ')}\n'; - writer.leaf().write(ignore); + const ignore = '// ignore_for_file: type=lint'; + writer.leaf().writeln(ignore); } for (final db in parsed.declaredDatabases) { @@ -49,7 +37,7 @@ class MoorGenerator extends Generator implements BaseGenerator { if (major < _targetMajorVersion || (major == _targetMajorVersion && minor < _targetMinorVersion)) { log.warning('The language version of this file is Dart $major.$minor. ' - 'Moor generates code for Dart $expected or later. Please consider ' + 'Drift generates code for Dart $expected or later. Please consider ' 'raising the minimum SDK version in your pubspec.yaml to at least ' '$expected.0.'); } From 221ca2382ffe377586d452b52025e0498a3d6696 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 30 Mar 2022 18:47:52 +0200 Subject: [PATCH 04/15] Fix type argument in `Batch.insert` (#1781) --- drift/lib/src/runtime/api/batch.dart | 2 +- drift/test/batch_test.dart | 35 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/drift/lib/src/runtime/api/batch.dart b/drift/lib/src/runtime/api/batch.dart index c38c9968..15269c85 100644 --- a/drift/lib/src/runtime/api/batch.dart +++ b/drift/lib/src/runtime/api/batch.dart @@ -48,7 +48,7 @@ class Batch { {InsertMode? mode, UpsertClause? onConflict}) { _addUpdate(table, UpdateKind.insert); final actualMode = mode ?? InsertMode.insert; - final context = InsertStatement(_user, table) + final context = InsertStatement(_user, table) .createContext(row, actualMode, onConflict: onConflict); _addContext(context); } diff --git a/drift/test/batch_test.dart b/drift/test/batch_test.dart index 350ec173..f01f914a 100644 --- a/drift/test/batch_test.dart +++ b/drift/test/batch_test.dart @@ -121,6 +121,41 @@ void main() { ))); }); + test('insert with where clause and excluded table', () async { + // https://github.com/simolus3/drift/issues/1781 + final entries = [ + CategoriesCompanion.insert(description: 'first'), + CategoriesCompanion.insert(description: 'second'), + ]; + + await db.batch((batch) { + batch.insertAll( + db.categories, + entries, + onConflict: DoUpdate.withExcluded( + (old, excluded) => CategoriesCompanion.custom( + description: old.description.dartCast(), + priority: excluded.priority.dartCast(), + ), + where: (old, excluded) => + old.id.dartCast().isBiggerOrEqual(excluded.id.dartCast()), + ), + ); + }); + + verify(executor.transactions.runBatched(BatchedStatements( + [ + ('INSERT INTO categories ("desc") VALUES (?) ON CONFLICT(id) ' + 'DO UPDATE SET "desc" = categories."desc", ' + 'priority = excluded.priority WHERE categories.id >= excluded.id') + ], + [ + ArgumentsForBatchedStatement(0, ['first']), + ArgumentsForBatchedStatement(0, ['second']), + ], + ))); + }); + test('can re-use an outer transaction', () async { await db.transaction(() async { await db.batch((b) {}); From 26c3dbfb4877e02cf6ec7acbdc65ed1d5da1ee6a Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Fri, 1 Apr 2022 22:02:38 +0200 Subject: [PATCH 05/15] Update docs on supported platforms --- docs/pages/docs/platforms.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/pages/docs/platforms.md b/docs/pages/docs/platforms.md index 0e98bc57..1bbc0884 100644 --- a/docs/pages/docs/platforms.md +++ b/docs/pages/docs/platforms.md @@ -16,6 +16,19 @@ outside of Flutter. When writing drift apps, prefer to mainly use the apis in `package:drift/drift.dart` as they are guaranteed to work across all platforms. Depending on your platform, you can choose a different `QueryExecutor`. +## Overview + +This table list all supported drift implementations and on which platforms they run on. + +| Implementation | Supported platforms | Notes | +|----------------|---------------------|-------| +| `SqfliteQueryExecutor` from `package:drift_sqflite` | Android, iOS | Uses platform channels, Flutter only, no isolate support, doesn't support `flutter test`. Formerly known as `moor_flutter` | +| `NativeDatabase` from `package:drift/native.dart` | Android, iOS, Windows, Linux, macOS | No further setup is required for Flutter users. For support outside of Flutter, or in `flutter test`, see the [desktop](#desktop) section below. Usage in a [isolate]({{ 'Advanced Features/isolates.md' | pageUrl }}) is recommended. Formerly known as `package:moor/ffi.dart`. | +| `WebDatabase` from `package:drift/web.dart` | Web | Works with or without Flutter. A bit of [additional setup]({{ 'Other engines/web.md' | pageUrl }}) is required. | + +To support all platforms in a shared codebase, you only need to change how you open your database, all other usages can stay the same. +[This repository](https://github.com/rodydavis/moor_shared) gives an example on how to do that with conditional imports. + ## Mobile (Android and iOS) There are two drift implementations for mobile that you can use: @@ -74,14 +87,24 @@ setup might be required: ### Windows -On Windows, you can [download sqlite](https://www.sqlite.org/download.html) and extract -`sqlite3.dll` into a folder that's in your `PATH` environment variable to use drift. +For Flutter apps, depending on the `sqlite3_flutter_libs` package is enough. It will automatically +bundle the latest sqlite3 version with your app as a DLL, and drift will automatically use that +version. + +If you don't want to use `sqlite3_flutter_libs`, or if you're not running as a Flutter app +(keep in mind that `flutter test` does not run as a full Flutter app!), you can [download sqlite](https://www.sqlite.org/download.html) +and extract`sqlite3.dll` into a folder that's in your `PATH` environment variable to use drift. You can also ship a custom `sqlite3.dll` along with your app. See the section below for details. ### Linux +When depending on `sqlite3_flutter_libs` in your pubspec and using Flutter, no additional setup +is necessary. +When not running as a Flutter app (this includes `flutter test`!), you need to either use a +`sqlite3` build from your distribution or include a custom `libsqlite3.so`. + On most distributions, `libsqlite3.so` is installed already. If you only need to use drift for development, you can just install the sqlite3 libraries. On Ubuntu and other Debian-based distros, you can install the `libsqlite3-dev` package for this. Virtually every other distribution From 204fbad68270e12061cf26ae591441fbc36a441e Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Fri, 1 Apr 2022 22:11:21 +0200 Subject: [PATCH 06/15] Move examples into top-level folder --- .../pages/docs/Advanced Features/builder_options.md | 2 +- docs/pages/docs/Advanced Features/migrations.md | 2 +- docs/pages/docs/Other engines/web.md | 8 ++++---- examples/README.md | 8 ++++++++ .../flutter_web_worker_example/.gitignore | 0 .../flutter_web_worker_example/README.md | 0 .../analysis_options.yaml | 0 .../flutter_web_worker_example/build.yaml | 0 .../flutter_web_worker_example/generate_js.sh | 0 .../flutter_web_worker_example/lib/main.dart | 0 .../lib/src/database/database.dart | 0 .../lib/src/database/database.g.dart | 0 .../lib/src/database/tables.drift | 0 .../lib/src/platform/platform.dart | 0 .../lib/src/platform/platform_app.dart | 0 .../lib/src/platform/platform_stub.dart | 0 .../lib/src/platform/platform_web.dart | 0 .../flutter_web_worker_example/pubspec.yaml | 0 .../flutter_web_worker_example/web/index.html | 0 .../flutter_web_worker_example/web/sql-wasm.js | 0 .../flutter_web_worker_example/web/sql-wasm.wasm | Bin .../flutter_web_worker_example/web/worker.dart | 0 {extras => examples}/migrations_example/README.md | 0 .../migrations_example/analysis_options.yaml | 0 {extras => examples}/migrations_example/build.yaml | 0 .../drift_migrations/drift_schema_v1.json | 0 .../drift_migrations/drift_schema_v2.json | 0 .../drift_migrations/drift_schema_v3.json | 0 .../drift_migrations/drift_schema_v4.json | 0 .../migrations_example/lib/database.dart | 0 .../migrations_example/lib/database.g.dart | 0 .../lib/src/generated/schema.dart | 0 .../lib/src/generated/schema_v1.dart | 0 .../lib/src/generated/schema_v2.dart | 0 .../lib/src/generated/schema_v3.dart | 0 .../lib/src/generated/schema_v4.dart | 0 .../migrations_example/lib/tables.dart | 0 .../migrations_example/lib/tables.drift | 0 .../migrations_example/pubspec.yaml | 0 .../migrations_example/test/generated/schema.dart | 0 .../test/generated/schema_v1.dart | 0 .../test/generated/schema_v2.dart | 0 .../test/generated/schema_v3.dart | 0 .../test/generated/schema_v4.dart | 0 .../migrations_example/test/migration_test.dart | 0 {extras => examples}/web_worker_example/README.md | 0 .../web_worker_example/analysis_options.yaml | 0 {extras => examples}/web_worker_example/build.yaml | 0 .../web_worker_example/lib/database.dart | 0 .../web_worker_example/lib/database.g.dart | 0 .../web_worker_example/lib/src/tables.drift | 0 .../web_worker_example/lib/worker_channel.dart | 0 .../web_worker_example/pubspec.yaml | 0 .../web_worker_example/web/index.html | 0 .../web_worker_example/web/main.dart | 0 .../web_worker_example/web/sql-wasm.js | 0 .../web_worker_example/web/sql-wasm.wasm | 0 .../web_worker_example/web/worker.dart | 0 {extras => examples}/with_built_value/build.yaml | 0 .../with_built_value/lib/database.dart | 0 .../with_built_value/lib/database.drift.dart | 0 .../with_built_value/lib/database.g.dart | 0 .../with_built_value/lib/tables.drift | 0 {extras => examples}/with_built_value/pubspec.yaml | 0 tool/misc_integration_test.sh | 6 +++--- 65 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 examples/README.md rename {extras => examples}/flutter_web_worker_example/.gitignore (100%) rename {extras => examples}/flutter_web_worker_example/README.md (100%) rename {extras => examples}/flutter_web_worker_example/analysis_options.yaml (100%) rename {extras => examples}/flutter_web_worker_example/build.yaml (100%) rename {extras => examples}/flutter_web_worker_example/generate_js.sh (100%) rename {extras => examples}/flutter_web_worker_example/lib/main.dart (100%) rename {extras => examples}/flutter_web_worker_example/lib/src/database/database.dart (100%) rename {extras => examples}/flutter_web_worker_example/lib/src/database/database.g.dart (100%) rename {extras => examples}/flutter_web_worker_example/lib/src/database/tables.drift (100%) rename {extras => examples}/flutter_web_worker_example/lib/src/platform/platform.dart (100%) rename {extras => examples}/flutter_web_worker_example/lib/src/platform/platform_app.dart (100%) rename {extras => examples}/flutter_web_worker_example/lib/src/platform/platform_stub.dart (100%) rename {extras => examples}/flutter_web_worker_example/lib/src/platform/platform_web.dart (100%) rename {extras => examples}/flutter_web_worker_example/pubspec.yaml (100%) rename {extras => examples}/flutter_web_worker_example/web/index.html (100%) rename {extras => examples}/flutter_web_worker_example/web/sql-wasm.js (100%) rename {extras => examples}/flutter_web_worker_example/web/sql-wasm.wasm (100%) rename {extras => examples}/flutter_web_worker_example/web/worker.dart (100%) rename {extras => examples}/migrations_example/README.md (100%) rename {extras => examples}/migrations_example/analysis_options.yaml (100%) rename {extras => examples}/migrations_example/build.yaml (100%) rename {extras => examples}/migrations_example/drift_migrations/drift_schema_v1.json (100%) rename {extras => examples}/migrations_example/drift_migrations/drift_schema_v2.json (100%) rename {extras => examples}/migrations_example/drift_migrations/drift_schema_v3.json (100%) rename {extras => examples}/migrations_example/drift_migrations/drift_schema_v4.json (100%) rename {extras => examples}/migrations_example/lib/database.dart (100%) rename {extras => examples}/migrations_example/lib/database.g.dart (100%) rename {extras => examples}/migrations_example/lib/src/generated/schema.dart (100%) rename {extras => examples}/migrations_example/lib/src/generated/schema_v1.dart (100%) rename {extras => examples}/migrations_example/lib/src/generated/schema_v2.dart (100%) rename {extras => examples}/migrations_example/lib/src/generated/schema_v3.dart (100%) rename {extras => examples}/migrations_example/lib/src/generated/schema_v4.dart (100%) rename {extras => examples}/migrations_example/lib/tables.dart (100%) rename {extras => examples}/migrations_example/lib/tables.drift (100%) rename {extras => examples}/migrations_example/pubspec.yaml (100%) rename {extras => examples}/migrations_example/test/generated/schema.dart (100%) rename {extras => examples}/migrations_example/test/generated/schema_v1.dart (100%) rename {extras => examples}/migrations_example/test/generated/schema_v2.dart (100%) rename {extras => examples}/migrations_example/test/generated/schema_v3.dart (100%) rename {extras => examples}/migrations_example/test/generated/schema_v4.dart (100%) rename {extras => examples}/migrations_example/test/migration_test.dart (100%) rename {extras => examples}/web_worker_example/README.md (100%) rename {extras => examples}/web_worker_example/analysis_options.yaml (100%) rename {extras => examples}/web_worker_example/build.yaml (100%) rename {extras => examples}/web_worker_example/lib/database.dart (100%) rename {extras => examples}/web_worker_example/lib/database.g.dart (100%) rename {extras => examples}/web_worker_example/lib/src/tables.drift (100%) rename {extras => examples}/web_worker_example/lib/worker_channel.dart (100%) rename {extras => examples}/web_worker_example/pubspec.yaml (100%) rename {extras => examples}/web_worker_example/web/index.html (100%) rename {extras => examples}/web_worker_example/web/main.dart (100%) rename {extras => examples}/web_worker_example/web/sql-wasm.js (100%) rename {extras => examples}/web_worker_example/web/sql-wasm.wasm (100%) rename {extras => examples}/web_worker_example/web/worker.dart (100%) rename {extras => examples}/with_built_value/build.yaml (100%) rename {extras => examples}/with_built_value/lib/database.dart (100%) rename {extras => examples}/with_built_value/lib/database.drift.dart (100%) rename {extras => examples}/with_built_value/lib/database.g.dart (100%) rename {extras => examples}/with_built_value/lib/tables.drift (100%) rename {extras => examples}/with_built_value/pubspec.yaml (100%) diff --git a/docs/pages/docs/Advanced Features/builder_options.md b/docs/pages/docs/Advanced Features/builder_options.md index d83a1fd8..d9cdcda8 100644 --- a/docs/pages/docs/Advanced Features/builder_options.md +++ b/docs/pages/docs/Advanced Features/builder_options.md @@ -200,7 +200,7 @@ targets: In all files that use generated drift code, you'll have to replace `part 'filename.g.dart'` with `part 'filename.drift.dart'`. If you use drift _and_ another builder in the same file, you'll need both `.g.dart` and `.drift.dart` as part-files. -A full example is available as part of [the drift repo](https://github.com/simolus3/drift/tree/develop/extras/with_built_value). +A full example is available as part of [the drift repo](https://github.com/simolus3/drift/tree/develop/examples/with_built_value). If you run into any problems with this approach, feel free to open an issue on drift. diff --git a/docs/pages/docs/Advanced Features/migrations.md b/docs/pages/docs/Advanced Features/migrations.md index 35846887..2987ee50 100644 --- a/docs/pages/docs/Advanced Features/migrations.md +++ b/docs/pages/docs/Advanced Features/migrations.md @@ -249,7 +249,7 @@ By using those test databases, drift can help you test migrations from and to an {% block "blocks/alert" title="Complex topic ahead" %} > Writing schema tests is an advanced topic that requires a fairly complex setup described here. If you get stuck along the way, don't hesitate to [open a discussion about it](https://github.com/simolus3/drift/discussions). - Also, there's a working example [in the drift repository](https://github.com/simolus3/drift/tree/latest-release/extras/migrations_example). + Also, there's a working example [in the drift repository](https://github.com/simolus3/drift/tree/latest-release/examples/migrations_example). {% endblock %} ### Setup diff --git a/docs/pages/docs/Other engines/web.md b/docs/pages/docs/Other engines/web.md index d85804c1..0cbd1bdd 100644 --- a/docs/pages/docs/Other engines/web.md +++ b/docs/pages/docs/Other engines/web.md @@ -194,21 +194,21 @@ DatabaseConnection connectToWorker() { } ``` -You can pass that `DatabaseConnection` to your database by enabling the +You can pass that `DatabaseConnection` to your database by enabling the `generate_connect_constructor` build option. For more information on the `DatabaseConnection` class, see the documentation on [isolates]({{ "../Advanced Features/isolates.md" | pageUrl }}). -A small, but working example is available under [extras/web_worker_example](https://github.com/simolus3/drift/tree/develop/extras/web_worker_example) +A small, but working example is available under [examples/web_worker_example](https://github.com/simolus3/drift/tree/develop/examples/web_worker_example) in the drift repository. ### Flutter -Flutter users will have to use a different approach to compile service workers. +Flutter users will have to use a different approach to compile service workers. Flutter web doesn't compile `.dart` files in web folder and won't use `.js` files generated by `build_web_compilers` either. Instead, we'll use Dart's build system to manually compile the worker to a JavaScript file before using Flutter-specific tooling. -Example is available under [extras/flutter_web_worker_example](https://github.com/simolus3/drift/tree/develop/extras/flutter_web_worker_example) +Example is available under [examples/flutter_web_worker_example](https://github.com/simolus3/drift/tree/develop/examples/flutter_web_worker_example) in the drift repository. First, add [build_web_compilers](https://pub.dev/packages/build_web_compilers) to the project: diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 00000000..cb092397 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,8 @@ +## Examples using drift + +This collection of examples demonstrates how to use some advanced drift features. + +- `flutter_web_worker_example`: Asynchronously run a drift database through a web worker with Fluter. +- `migrations_example`: Example showing to how to generate test utilities to verify schema migration. +- `web_worker_-_example`: Asynchronously run a drift database through a web worker, without Flutter. +- `with_built_value`: Configure `build_runner` so that drift-generated classes can be used by `build_runner`. diff --git a/extras/flutter_web_worker_example/.gitignore b/examples/flutter_web_worker_example/.gitignore similarity index 100% rename from extras/flutter_web_worker_example/.gitignore rename to examples/flutter_web_worker_example/.gitignore diff --git a/extras/flutter_web_worker_example/README.md b/examples/flutter_web_worker_example/README.md similarity index 100% rename from extras/flutter_web_worker_example/README.md rename to examples/flutter_web_worker_example/README.md diff --git a/extras/flutter_web_worker_example/analysis_options.yaml b/examples/flutter_web_worker_example/analysis_options.yaml similarity index 100% rename from extras/flutter_web_worker_example/analysis_options.yaml rename to examples/flutter_web_worker_example/analysis_options.yaml diff --git a/extras/flutter_web_worker_example/build.yaml b/examples/flutter_web_worker_example/build.yaml similarity index 100% rename from extras/flutter_web_worker_example/build.yaml rename to examples/flutter_web_worker_example/build.yaml diff --git a/extras/flutter_web_worker_example/generate_js.sh b/examples/flutter_web_worker_example/generate_js.sh similarity index 100% rename from extras/flutter_web_worker_example/generate_js.sh rename to examples/flutter_web_worker_example/generate_js.sh diff --git a/extras/flutter_web_worker_example/lib/main.dart b/examples/flutter_web_worker_example/lib/main.dart similarity index 100% rename from extras/flutter_web_worker_example/lib/main.dart rename to examples/flutter_web_worker_example/lib/main.dart diff --git a/extras/flutter_web_worker_example/lib/src/database/database.dart b/examples/flutter_web_worker_example/lib/src/database/database.dart similarity index 100% rename from extras/flutter_web_worker_example/lib/src/database/database.dart rename to examples/flutter_web_worker_example/lib/src/database/database.dart diff --git a/extras/flutter_web_worker_example/lib/src/database/database.g.dart b/examples/flutter_web_worker_example/lib/src/database/database.g.dart similarity index 100% rename from extras/flutter_web_worker_example/lib/src/database/database.g.dart rename to examples/flutter_web_worker_example/lib/src/database/database.g.dart diff --git a/extras/flutter_web_worker_example/lib/src/database/tables.drift b/examples/flutter_web_worker_example/lib/src/database/tables.drift similarity index 100% rename from extras/flutter_web_worker_example/lib/src/database/tables.drift rename to examples/flutter_web_worker_example/lib/src/database/tables.drift diff --git a/extras/flutter_web_worker_example/lib/src/platform/platform.dart b/examples/flutter_web_worker_example/lib/src/platform/platform.dart similarity index 100% rename from extras/flutter_web_worker_example/lib/src/platform/platform.dart rename to examples/flutter_web_worker_example/lib/src/platform/platform.dart diff --git a/extras/flutter_web_worker_example/lib/src/platform/platform_app.dart b/examples/flutter_web_worker_example/lib/src/platform/platform_app.dart similarity index 100% rename from extras/flutter_web_worker_example/lib/src/platform/platform_app.dart rename to examples/flutter_web_worker_example/lib/src/platform/platform_app.dart diff --git a/extras/flutter_web_worker_example/lib/src/platform/platform_stub.dart b/examples/flutter_web_worker_example/lib/src/platform/platform_stub.dart similarity index 100% rename from extras/flutter_web_worker_example/lib/src/platform/platform_stub.dart rename to examples/flutter_web_worker_example/lib/src/platform/platform_stub.dart diff --git a/extras/flutter_web_worker_example/lib/src/platform/platform_web.dart b/examples/flutter_web_worker_example/lib/src/platform/platform_web.dart similarity index 100% rename from extras/flutter_web_worker_example/lib/src/platform/platform_web.dart rename to examples/flutter_web_worker_example/lib/src/platform/platform_web.dart diff --git a/extras/flutter_web_worker_example/pubspec.yaml b/examples/flutter_web_worker_example/pubspec.yaml similarity index 100% rename from extras/flutter_web_worker_example/pubspec.yaml rename to examples/flutter_web_worker_example/pubspec.yaml diff --git a/extras/flutter_web_worker_example/web/index.html b/examples/flutter_web_worker_example/web/index.html similarity index 100% rename from extras/flutter_web_worker_example/web/index.html rename to examples/flutter_web_worker_example/web/index.html diff --git a/extras/flutter_web_worker_example/web/sql-wasm.js b/examples/flutter_web_worker_example/web/sql-wasm.js similarity index 100% rename from extras/flutter_web_worker_example/web/sql-wasm.js rename to examples/flutter_web_worker_example/web/sql-wasm.js diff --git a/extras/flutter_web_worker_example/web/sql-wasm.wasm b/examples/flutter_web_worker_example/web/sql-wasm.wasm similarity index 100% rename from extras/flutter_web_worker_example/web/sql-wasm.wasm rename to examples/flutter_web_worker_example/web/sql-wasm.wasm diff --git a/extras/flutter_web_worker_example/web/worker.dart b/examples/flutter_web_worker_example/web/worker.dart similarity index 100% rename from extras/flutter_web_worker_example/web/worker.dart rename to examples/flutter_web_worker_example/web/worker.dart diff --git a/extras/migrations_example/README.md b/examples/migrations_example/README.md similarity index 100% rename from extras/migrations_example/README.md rename to examples/migrations_example/README.md diff --git a/extras/migrations_example/analysis_options.yaml b/examples/migrations_example/analysis_options.yaml similarity index 100% rename from extras/migrations_example/analysis_options.yaml rename to examples/migrations_example/analysis_options.yaml diff --git a/extras/migrations_example/build.yaml b/examples/migrations_example/build.yaml similarity index 100% rename from extras/migrations_example/build.yaml rename to examples/migrations_example/build.yaml diff --git a/extras/migrations_example/drift_migrations/drift_schema_v1.json b/examples/migrations_example/drift_migrations/drift_schema_v1.json similarity index 100% rename from extras/migrations_example/drift_migrations/drift_schema_v1.json rename to examples/migrations_example/drift_migrations/drift_schema_v1.json diff --git a/extras/migrations_example/drift_migrations/drift_schema_v2.json b/examples/migrations_example/drift_migrations/drift_schema_v2.json similarity index 100% rename from extras/migrations_example/drift_migrations/drift_schema_v2.json rename to examples/migrations_example/drift_migrations/drift_schema_v2.json diff --git a/extras/migrations_example/drift_migrations/drift_schema_v3.json b/examples/migrations_example/drift_migrations/drift_schema_v3.json similarity index 100% rename from extras/migrations_example/drift_migrations/drift_schema_v3.json rename to examples/migrations_example/drift_migrations/drift_schema_v3.json diff --git a/extras/migrations_example/drift_migrations/drift_schema_v4.json b/examples/migrations_example/drift_migrations/drift_schema_v4.json similarity index 100% rename from extras/migrations_example/drift_migrations/drift_schema_v4.json rename to examples/migrations_example/drift_migrations/drift_schema_v4.json diff --git a/extras/migrations_example/lib/database.dart b/examples/migrations_example/lib/database.dart similarity index 100% rename from extras/migrations_example/lib/database.dart rename to examples/migrations_example/lib/database.dart diff --git a/extras/migrations_example/lib/database.g.dart b/examples/migrations_example/lib/database.g.dart similarity index 100% rename from extras/migrations_example/lib/database.g.dart rename to examples/migrations_example/lib/database.g.dart diff --git a/extras/migrations_example/lib/src/generated/schema.dart b/examples/migrations_example/lib/src/generated/schema.dart similarity index 100% rename from extras/migrations_example/lib/src/generated/schema.dart rename to examples/migrations_example/lib/src/generated/schema.dart diff --git a/extras/migrations_example/lib/src/generated/schema_v1.dart b/examples/migrations_example/lib/src/generated/schema_v1.dart similarity index 100% rename from extras/migrations_example/lib/src/generated/schema_v1.dart rename to examples/migrations_example/lib/src/generated/schema_v1.dart diff --git a/extras/migrations_example/lib/src/generated/schema_v2.dart b/examples/migrations_example/lib/src/generated/schema_v2.dart similarity index 100% rename from extras/migrations_example/lib/src/generated/schema_v2.dart rename to examples/migrations_example/lib/src/generated/schema_v2.dart diff --git a/extras/migrations_example/lib/src/generated/schema_v3.dart b/examples/migrations_example/lib/src/generated/schema_v3.dart similarity index 100% rename from extras/migrations_example/lib/src/generated/schema_v3.dart rename to examples/migrations_example/lib/src/generated/schema_v3.dart diff --git a/extras/migrations_example/lib/src/generated/schema_v4.dart b/examples/migrations_example/lib/src/generated/schema_v4.dart similarity index 100% rename from extras/migrations_example/lib/src/generated/schema_v4.dart rename to examples/migrations_example/lib/src/generated/schema_v4.dart diff --git a/extras/migrations_example/lib/tables.dart b/examples/migrations_example/lib/tables.dart similarity index 100% rename from extras/migrations_example/lib/tables.dart rename to examples/migrations_example/lib/tables.dart diff --git a/extras/migrations_example/lib/tables.drift b/examples/migrations_example/lib/tables.drift similarity index 100% rename from extras/migrations_example/lib/tables.drift rename to examples/migrations_example/lib/tables.drift diff --git a/extras/migrations_example/pubspec.yaml b/examples/migrations_example/pubspec.yaml similarity index 100% rename from extras/migrations_example/pubspec.yaml rename to examples/migrations_example/pubspec.yaml diff --git a/extras/migrations_example/test/generated/schema.dart b/examples/migrations_example/test/generated/schema.dart similarity index 100% rename from extras/migrations_example/test/generated/schema.dart rename to examples/migrations_example/test/generated/schema.dart diff --git a/extras/migrations_example/test/generated/schema_v1.dart b/examples/migrations_example/test/generated/schema_v1.dart similarity index 100% rename from extras/migrations_example/test/generated/schema_v1.dart rename to examples/migrations_example/test/generated/schema_v1.dart diff --git a/extras/migrations_example/test/generated/schema_v2.dart b/examples/migrations_example/test/generated/schema_v2.dart similarity index 100% rename from extras/migrations_example/test/generated/schema_v2.dart rename to examples/migrations_example/test/generated/schema_v2.dart diff --git a/extras/migrations_example/test/generated/schema_v3.dart b/examples/migrations_example/test/generated/schema_v3.dart similarity index 100% rename from extras/migrations_example/test/generated/schema_v3.dart rename to examples/migrations_example/test/generated/schema_v3.dart diff --git a/extras/migrations_example/test/generated/schema_v4.dart b/examples/migrations_example/test/generated/schema_v4.dart similarity index 100% rename from extras/migrations_example/test/generated/schema_v4.dart rename to examples/migrations_example/test/generated/schema_v4.dart diff --git a/extras/migrations_example/test/migration_test.dart b/examples/migrations_example/test/migration_test.dart similarity index 100% rename from extras/migrations_example/test/migration_test.dart rename to examples/migrations_example/test/migration_test.dart diff --git a/extras/web_worker_example/README.md b/examples/web_worker_example/README.md similarity index 100% rename from extras/web_worker_example/README.md rename to examples/web_worker_example/README.md diff --git a/extras/web_worker_example/analysis_options.yaml b/examples/web_worker_example/analysis_options.yaml similarity index 100% rename from extras/web_worker_example/analysis_options.yaml rename to examples/web_worker_example/analysis_options.yaml diff --git a/extras/web_worker_example/build.yaml b/examples/web_worker_example/build.yaml similarity index 100% rename from extras/web_worker_example/build.yaml rename to examples/web_worker_example/build.yaml diff --git a/extras/web_worker_example/lib/database.dart b/examples/web_worker_example/lib/database.dart similarity index 100% rename from extras/web_worker_example/lib/database.dart rename to examples/web_worker_example/lib/database.dart diff --git a/extras/web_worker_example/lib/database.g.dart b/examples/web_worker_example/lib/database.g.dart similarity index 100% rename from extras/web_worker_example/lib/database.g.dart rename to examples/web_worker_example/lib/database.g.dart diff --git a/extras/web_worker_example/lib/src/tables.drift b/examples/web_worker_example/lib/src/tables.drift similarity index 100% rename from extras/web_worker_example/lib/src/tables.drift rename to examples/web_worker_example/lib/src/tables.drift diff --git a/extras/web_worker_example/lib/worker_channel.dart b/examples/web_worker_example/lib/worker_channel.dart similarity index 100% rename from extras/web_worker_example/lib/worker_channel.dart rename to examples/web_worker_example/lib/worker_channel.dart diff --git a/extras/web_worker_example/pubspec.yaml b/examples/web_worker_example/pubspec.yaml similarity index 100% rename from extras/web_worker_example/pubspec.yaml rename to examples/web_worker_example/pubspec.yaml diff --git a/extras/web_worker_example/web/index.html b/examples/web_worker_example/web/index.html similarity index 100% rename from extras/web_worker_example/web/index.html rename to examples/web_worker_example/web/index.html diff --git a/extras/web_worker_example/web/main.dart b/examples/web_worker_example/web/main.dart similarity index 100% rename from extras/web_worker_example/web/main.dart rename to examples/web_worker_example/web/main.dart diff --git a/extras/web_worker_example/web/sql-wasm.js b/examples/web_worker_example/web/sql-wasm.js similarity index 100% rename from extras/web_worker_example/web/sql-wasm.js rename to examples/web_worker_example/web/sql-wasm.js diff --git a/extras/web_worker_example/web/sql-wasm.wasm b/examples/web_worker_example/web/sql-wasm.wasm similarity index 100% rename from extras/web_worker_example/web/sql-wasm.wasm rename to examples/web_worker_example/web/sql-wasm.wasm diff --git a/extras/web_worker_example/web/worker.dart b/examples/web_worker_example/web/worker.dart similarity index 100% rename from extras/web_worker_example/web/worker.dart rename to examples/web_worker_example/web/worker.dart diff --git a/extras/with_built_value/build.yaml b/examples/with_built_value/build.yaml similarity index 100% rename from extras/with_built_value/build.yaml rename to examples/with_built_value/build.yaml diff --git a/extras/with_built_value/lib/database.dart b/examples/with_built_value/lib/database.dart similarity index 100% rename from extras/with_built_value/lib/database.dart rename to examples/with_built_value/lib/database.dart diff --git a/extras/with_built_value/lib/database.drift.dart b/examples/with_built_value/lib/database.drift.dart similarity index 100% rename from extras/with_built_value/lib/database.drift.dart rename to examples/with_built_value/lib/database.drift.dart diff --git a/extras/with_built_value/lib/database.g.dart b/examples/with_built_value/lib/database.g.dart similarity index 100% rename from extras/with_built_value/lib/database.g.dart rename to examples/with_built_value/lib/database.g.dart diff --git a/extras/with_built_value/lib/tables.drift b/examples/with_built_value/lib/tables.drift similarity index 100% rename from extras/with_built_value/lib/tables.drift rename to examples/with_built_value/lib/tables.drift diff --git a/extras/with_built_value/pubspec.yaml b/examples/with_built_value/pubspec.yaml similarity index 100% rename from extras/with_built_value/pubspec.yaml rename to examples/with_built_value/pubspec.yaml diff --git a/tool/misc_integration_test.sh b/tool/misc_integration_test.sh index f393ae65..a29ea25b 100755 --- a/tool/misc_integration_test.sh +++ b/tool/misc_integration_test.sh @@ -12,19 +12,19 @@ dart pub upgrade dart test || EXIT_CODE=$? popd -pushd extras/integration_tests/postgres +pushd examples/integration_tests/postgres echo "Running integration tests with Postgres" dart pub upgrade dart test || EXIT_CODE=$? popd -pushd extras/with_built_value +pushd examples/with_built_value echo "Running build runner in with_built_value" dart pub upgrade dart run build_runner build --delete-conflicting-outputs || EXIT_CODE=$? popd -pushd extras/migrations_example +pushd examples/migrations_example echo "Testing migrations in migrations_example" dart pub upgrade dart test From fc0d30583ab1c48475a6d3e170c0b4db5f362418 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Fri, 1 Apr 2022 22:39:28 +0200 Subject: [PATCH 07/15] Some maintenance work on examples --- examples/web_worker_example/README.md | 5 ++++- examples/web_worker_example/analysis_options.yaml | 15 +-------------- examples/web_worker_example/lib/database.g.dart | 2 +- examples/web_worker_example/pubspec.yaml | 6 +++--- examples/web_worker_example/web/sql-wasm.js | 2 +- examples/web_worker_example/web/sql-wasm.wasm | 2 +- examples/with_built_value/lib/database.drift.dart | 2 +- 7 files changed, 12 insertions(+), 22 deletions(-) diff --git a/examples/web_worker_example/README.md b/examples/web_worker_example/README.md index 92c23ad3..1fd88904 100644 --- a/examples/web_worker_example/README.md +++ b/examples/web_worker_example/README.md @@ -1,7 +1,10 @@ -This example demonstrates how a shared web worker can be used with moor. +This example demonstrates how a shared web worker can be used with drift. To view this example, run ``` dart run build_runner serve --release ``` + +Then, open `localhost:8080` in different tabs and note how changes propagate across tabs +in real-time! diff --git a/examples/web_worker_example/analysis_options.yaml b/examples/web_worker_example/analysis_options.yaml index a686c1b4..572dd239 100644 --- a/examples/web_worker_example/analysis_options.yaml +++ b/examples/web_worker_example/analysis_options.yaml @@ -1,14 +1 @@ -# Defines a default set of lint rules enforced for -# projects at Google. For details and rationale, -# see https://github.com/dart-lang/pedantic#enabled-lints. -include: package:pedantic/analysis_options.yaml - -# For lint rules and documentation, see http://dart-lang.github.io/linter/lints. -# Uncomment to specify additional rules. -# linter: -# rules: -# - camel_case_types - -analyzer: -# exclude: -# - path/to/excluded/files/** +include: package:lints/recommended.yaml diff --git a/examples/web_worker_example/lib/database.g.dart b/examples/web_worker_example/lib/database.g.dart index 9c2d2e59..6b98a84a 100644 --- a/examples/web_worker_example/lib/database.g.dart +++ b/examples/web_worker_example/lib/database.g.dart @@ -6,7 +6,7 @@ part of 'database.dart'; // MoorGenerator // ************************************************************************** -// ignore_for_file: unnecessary_brace_in_string_interps, unnecessary_this +// ignore_for_file: type=lint class Entrie extends DataClass implements Insertable { final int id; final String value; diff --git a/examples/web_worker_example/pubspec.yaml b/examples/web_worker_example/pubspec.yaml index 69ddff90..7ee3ff05 100644 --- a/examples/web_worker_example/pubspec.yaml +++ b/examples/web_worker_example/pubspec.yaml @@ -14,13 +14,13 @@ dependencies: dev_dependencies: build_runner: ^2.0.0 build_web_compilers: ^3.0.0 - pedantic: ^1.9.0 + lints: ^1.0.1 drift_dev: dependency_overrides: - drift: + drift: path: ../../drift - drift_dev: + drift_dev: path: ../../drift_dev sqlparser: path: ../../sqlparser diff --git a/examples/web_worker_example/web/sql-wasm.js b/examples/web_worker_example/web/sql-wasm.js index 82e3b06d..c4123950 120000 --- a/examples/web_worker_example/web/sql-wasm.js +++ b/examples/web_worker_example/web/sql-wasm.js @@ -1 +1 @@ -../../integration_tests/web/test/sql-wasm.js \ No newline at end of file +../../../extras/integration_tests/web/test/sql-wasm.js \ No newline at end of file diff --git a/examples/web_worker_example/web/sql-wasm.wasm b/examples/web_worker_example/web/sql-wasm.wasm index c0f2b1d1..081e1764 120000 --- a/examples/web_worker_example/web/sql-wasm.wasm +++ b/examples/web_worker_example/web/sql-wasm.wasm @@ -1 +1 @@ -../../integration_tests/web/test/sql-wasm.wasm \ No newline at end of file +../../../extras/integration_tests/web/test/sql-wasm.wasm \ No newline at end of file diff --git a/examples/with_built_value/lib/database.drift.dart b/examples/with_built_value/lib/database.drift.dart index 780c1133..416a3df8 100644 --- a/examples/with_built_value/lib/database.drift.dart +++ b/examples/with_built_value/lib/database.drift.dart @@ -6,7 +6,7 @@ part of 'database.dart'; // MoorGenerator // ************************************************************************** -// ignore_for_file: unnecessary_brace_in_string_interps, unnecessary_this +// ignore_for_file: type=lint class User extends DataClass implements Insertable { final int id; final String name; From 6e79a5b58c4f08cf4ded7d11511f9a8730f1c463 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Fri, 1 Apr 2022 23:42:52 +0200 Subject: [PATCH 08/15] Use `package:js` to wrap sql.js library --- drift/CHANGELOG.md | 4 + drift/lib/src/web/sql_js.dart | 120 ++++++++++++++----------- drift/pubspec.yaml | 1 + examples/web_worker_example/README.md | 2 +- examples/web_worker_example/build.yaml | 18 ++++ 5 files changed, 94 insertions(+), 51 deletions(-) diff --git a/drift/CHANGELOG.md b/drift/CHANGELOG.md index 8f1a7280..98d6e60f 100644 --- a/drift/CHANGELOG.md +++ b/drift/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.6.0-dev + +- Internally use `package:js` to wrap sql.js. + ## 1.5.0 - Add `DataClassName.extending` to control the superclass of generated row diff --git a/drift/lib/src/web/sql_js.dart b/drift/lib/src/web/sql_js.dart index 2385e1d1..85ff1099 100644 --- a/drift/lib/src/web/sql_js.dart +++ b/drift/lib/src/web/sql_js.dart @@ -1,7 +1,17 @@ +@JS() import 'dart:async'; import 'dart:js'; import 'dart:typed_data'; +import 'package:js/js.dart'; +import 'package:js/js_util.dart'; + +@JS('initSqlJs') +external Object /*Promise<_SqlJs>*/ _initSqlJs(); + +@JS('undefined') +external Null get _undefined; + // We write our own mapping code to js instead of depending on package:js // This way, projects using drift can run on flutter as long as they don't // import this file. @@ -21,24 +31,53 @@ Future initSqlJs() { 'The drift documentation contains instructions on how to setup drift ' 'the web, which might help you fix this.')); } else { - (context.callMethod('initSqlJs') as JsObject) - .callMethod('then', [allowInterop(_handleModuleResolved)]); + completer + .complete(promiseToFuture<_SqlJs>(_initSqlJs()).then(SqlJsModule._)); } return _moduleCompleter!.future; } -// We're extracting this into its own method so that we don't have to call -// [allowInterop] on this method or a lambda. -// todo figure out why dart2js generates invalid js when wrapping this in -// allowInterop -void _handleModuleResolved(dynamic module) { - _moduleCompleter!.complete(SqlJsModule._(module as JsObject)); +@JS() +@anonymous +class _SqlJs { + // ignore: non_constant_identifier_names + external Object get Database; +} + +@JS() +@anonymous +class _SqlJsDatabase { + external int getRowsModified(); + + external void run(String sql, List? args); + external List<_QueryExecResult> exec(String sql, List? params); + external _SqlJsStatement prepare(String sql); + + external Uint8List export(); + external void close(); +} + +@JS() +@anonymous +class _QueryExecResult { + external List get columns; + external List> get values; +} + +@JS() +@anonymous +class _SqlJsStatement { + external void bind(List values); + external bool step(); + external List get(); + external List getColumnNames(); + external void free(); } /// `sql.js` module from the underlying library class SqlJsModule { - final JsObject _obj; + final _SqlJs _obj; SqlJsModule._(this._obj); /// Constructs a new [SqlJsDatabase], optionally from the [data] blob. @@ -53,20 +92,18 @@ class SqlJsModule { return SqlJsDatabase._(dbObj); } - JsObject _createInternally(Uint8List? data) { - final constructor = _obj['Database'] as JsFunction; - + _SqlJsDatabase _createInternally(Uint8List? data) { if (data != null) { - return JsObject(constructor, [data]); + return callConstructor<_SqlJsDatabase>(_obj.Database, [data]); } else { - return JsObject(constructor); + return callConstructor<_SqlJsDatabase>(_obj.Database, const []); } } } /// Dart wrapper around a sql database provided by the sql.js library. class SqlJsDatabase { - final JsObject _obj; + final _SqlJsDatabase _obj; SqlJsDatabase._(this._obj); /// Returns the `user_version` pragma from sqlite. @@ -81,13 +118,12 @@ class SqlJsDatabase { /// Calls `prepare` on the underlying js api PreparedStatement prepare(String sql) { - final obj = _obj.callMethod('prepare', [sql]) as JsObject; - return PreparedStatement._(obj); + return PreparedStatement._(_obj.prepare(sql)); } /// Calls `run(sql)` on the underlying js api void run(String sql) { - _obj.callMethod('run', [sql]); + _obj.run(sql, _undefined); } /// Calls `run(sql, args)` on the underlying js api @@ -96,18 +132,15 @@ class SqlJsDatabase { // Call run without providing arguments. sql.js will then use sqlite3_exec // internally, which supports running multiple statements at once. This // matches the behavior from a `NativeDatabase`. - _obj.callMethod('run', [sql]); + _obj.run(sql, _undefined); } else { - final ar = JsArray.from(args); - _obj.callMethod('run', [sql, ar]); + _obj.run(sql, args); } } /// Returns the amount of rows affected by the most recent INSERT, UPDATE or /// DELETE statement. - int lastModifiedRows() { - return _obj.callMethod('getRowsModified') as int; - } + int lastModifiedRows() => _obj.getRowsModified(); /// The row id of the last inserted row. This counter is reset when calling /// [export]. @@ -117,52 +150,39 @@ class SqlJsDatabase { } dynamic _selectSingleRowAndColumn(String sql) { - final results = _obj.callMethod('exec', [sql]) as JsArray; - final row = results.first as JsObject; - final data = (row['values'] as JsArray).first as JsArray; - return data.first; + final results = _obj.exec(sql, _undefined); + final result = results.first; + final row = result.values.first; + + return row.first; } /// Runs `export` on the underlying js api - Uint8List export() { - return _obj.callMethod('export') as Uint8List; - } + Uint8List export() => _obj.export(); /// Runs `close` on the underlying js api - void close() { - _obj.callMethod('close'); - } + void close() => _obj.close(); } /// Dart api wrapping an underlying prepared statement object from the sql.js /// library. class PreparedStatement { - final JsObject _obj; + final _SqlJsStatement _obj; PreparedStatement._(this._obj); /// Executes this statement with the bound [args]. - void executeWith(List args) { - _obj.callMethod('bind', [JsArray.from(args)]); - } + void executeWith(List args) => _obj.bind(args); /// Performs `step` on the underlying js api - bool step() { - return _obj.callMethod('step') as bool; - } + bool step() => _obj.step(); /// Reads the current from the underlying js api - List currentRow() { - return _obj.callMethod('get') as JsArray; - } + List currentRow() => _obj.get(); /// The columns returned by this statement. This will only be available after /// [step] has been called once. - List columnNames() { - return (_obj.callMethod('getColumnNames') as JsArray).cast(); - } + List columnNames() => _obj.getColumnNames(); /// Calls `free` on the underlying js api - void free() { - _obj.callMethod('free'); - } + void free() => _obj.free(); } diff --git a/drift/pubspec.yaml b/drift/pubspec.yaml index 636b5ae7..ca0abbc0 100644 --- a/drift/pubspec.yaml +++ b/drift/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: async: ^2.5.0 convert: ^3.0.0 collection: ^1.15.0 + js: ^0.6.4 meta: ^1.3.0 stream_channel: ^2.1.0 sqlite3: ^1.5.1 diff --git a/examples/web_worker_example/README.md b/examples/web_worker_example/README.md index 1fd88904..3351dcfb 100644 --- a/examples/web_worker_example/README.md +++ b/examples/web_worker_example/README.md @@ -3,7 +3,7 @@ This example demonstrates how a shared web worker can be used with drift. To view this example, run ``` -dart run build_runner serve --release +dart run build_runner serve ``` Then, open `localhost:8080` in different tabs and note how changes propagate across tabs diff --git a/examples/web_worker_example/build.yaml b/examples/web_worker_example/build.yaml index 310b8620..2516d20b 100644 --- a/examples/web_worker_example/build.yaml +++ b/examples/web_worker_example/build.yaml @@ -1,4 +1,17 @@ targets: + # We use dartdevc by default, but the worker should always be compiled with dart2js + worker: + auto_apply_builders: false + dependencies: [":$default"] + builders: + build_web_compilers|entrypoint: + enabled: true + generate_for: + - web/worker.dart + options: + compiler: dart2js + + $default: builders: drift_dev: @@ -9,3 +22,8 @@ targets: generate_values_in_copy_with: true named_parameters: true new_sql_code_generation: true + build_web_compilers|entrypoint: + generate_for: + # This one is compiled in the other target + exclude: + - "web/worker.dart" From e4671d40f77b198f4b7483df88d89e1ee4e8197c Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Fri, 1 Apr 2022 23:48:15 +0200 Subject: [PATCH 09/15] Update flutter web worker example too --- examples/flutter_web_worker_example/README.md | 2 +- .../lib/src/database/database.g.dart | 2 +- examples/flutter_web_worker_example/pubspec.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flutter_web_worker_example/README.md b/examples/flutter_web_worker_example/README.md index aa03ad2e..2cdbf284 100644 --- a/examples/flutter_web_worker_example/README.md +++ b/examples/flutter_web_worker_example/README.md @@ -1,7 +1,7 @@ This example demonstrates how a shared web worker can be used with Drift and Flutter. To run this example: -- Run `./generate_js.sh` +- Run `./generate_js.sh` - Then, run `flutter run` and select a browser to run the example For more information visit https://drift.simonbinder.eu/web/ diff --git a/examples/flutter_web_worker_example/lib/src/database/database.g.dart b/examples/flutter_web_worker_example/lib/src/database/database.g.dart index 0ffea14b..36129483 100644 --- a/examples/flutter_web_worker_example/lib/src/database/database.g.dart +++ b/examples/flutter_web_worker_example/lib/src/database/database.g.dart @@ -6,7 +6,7 @@ part of 'database.dart'; // MoorGenerator // ************************************************************************** -// ignore_for_file: unnecessary_brace_in_string_interps, unnecessary_this +// ignore_for_file: type=lint class Entrie extends DataClass implements Insertable { final int id; final String value; diff --git a/examples/flutter_web_worker_example/pubspec.yaml b/examples/flutter_web_worker_example/pubspec.yaml index a661890a..7ee74adc 100644 --- a/examples/flutter_web_worker_example/pubspec.yaml +++ b/examples/flutter_web_worker_example/pubspec.yaml @@ -18,9 +18,9 @@ dev_dependencies: drift_dev: dependency_overrides: - drift: + drift: path: ../../drift - drift_dev: + drift_dev: path: ../../drift_dev sqlparser: path: ../../sqlparser From 3f7eaa459a4081b217526d510236e7ce7683eb58 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Fri, 1 Apr 2022 23:57:38 +0200 Subject: [PATCH 10/15] Fix postgres test path in misc integration tests --- tool/misc_integration_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/misc_integration_test.sh b/tool/misc_integration_test.sh index a29ea25b..a5d22b42 100755 --- a/tool/misc_integration_test.sh +++ b/tool/misc_integration_test.sh @@ -12,7 +12,7 @@ dart pub upgrade dart test || EXIT_CODE=$? popd -pushd examples/integration_tests/postgres +pushd extras/integration_tests/postgres echo "Running integration tests with Postgres" dart pub upgrade dart test || EXIT_CODE=$? From 1a2406ddc16758b396077e1f9c400d3b671404a4 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Sat, 2 Apr 2022 18:01:10 +0200 Subject: [PATCH 11/15] Add new cross-platform Flutter example --- .../docs/Advanced Features/migrations.md | 4 +- drift/pubspec.yaml | 2 +- examples/README.md | 1 + examples/app/.gitignore | 47 ++ examples/app/.metadata | 10 + examples/app/README.md | 60 ++ examples/app/analysis_options.yaml | 7 + examples/app/android/.gitignore | 13 + examples/app/android/app/build.gradle | 68 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 34 + .../kotlin/com/example/app/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + examples/app/android/build.gradle | 31 + examples/app/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + examples/app/android/settings.gradle | 11 + examples/app/build.yaml | 56 ++ .../app/drift_schemas/drift_schema_v1.json | 1 + .../app/drift_schemas/drift_schema_v2.json | 1 + examples/app/ios/.gitignore | 34 + .../app/ios/Flutter/AppFrameworkInfo.plist | 26 + examples/app/ios/Flutter/Debug.xcconfig | 1 + examples/app/ios/Flutter/Release.xcconfig | 1 + .../app/ios/Runner.xcodeproj/project.pbxproj | 481 ++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + examples/app/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../app/ios/Runner/Base.lproj/Main.storyboard | 26 + examples/app/ios/Runner/Info.plist | 47 ++ .../app/ios/Runner/Runner-Bridging-Header.h | 1 + .../lib/database/connection/connection.dart | 5 + .../app/lib/database/connection/native.dart | 60 ++ .../lib/database/connection/unsupported.dart | 6 + examples/app/lib/database/connection/web.dart | 13 + examples/app/lib/database/database.dart | 117 +++ examples/app/lib/database/database.g.dart | 712 ++++++++++++++++++ examples/app/lib/database/sql.drift | 43 ++ examples/app/lib/database/tables.dart | 46 ++ examples/app/lib/main.dart | 44 ++ examples/app/lib/screens/home.dart | 109 +++ examples/app/lib/screens/home/card.dart | 72 ++ examples/app/lib/screens/home/drawer.dart | 207 +++++ examples/app/lib/screens/home/state.dart | 12 + .../lib/screens/home/todo_edit_dialog.dart | 111 +++ examples/app/lib/screens/search.dart | 74 ++ examples/app/linux/.gitignore | 1 + examples/app/linux/CMakeLists.txt | 116 +++ examples/app/linux/flutter/CMakeLists.txt | 87 +++ .../flutter/generated_plugin_registrant.cc | 15 + .../flutter/generated_plugin_registrant.h | 15 + .../app/linux/flutter/generated_plugins.cmake | 16 + examples/app/linux/main.cc | 6 + examples/app/linux/my_application.cc | 104 +++ examples/app/linux/my_application.h | 18 + examples/app/pubspec.yaml | 49 ++ examples/app/test/database_test.dart | 24 + .../app/test/generated_migrations/schema.dart | 20 + .../test/generated_migrations/schema_v1.dart | 127 ++++ .../test/generated_migrations/schema_v2.dart | 130 ++++ examples/app/test/migration_test.dart | 29 + examples/app/tool/builder.dart | 17 + examples/app/web/favicon.png | Bin 0 -> 917 bytes examples/app/web/icons/Icon-192.png | Bin 0 -> 5292 bytes examples/app/web/icons/Icon-512.png | Bin 0 -> 8252 bytes examples/app/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes examples/app/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes examples/app/web/index.html | 106 +++ examples/app/web/manifest.json | 35 + examples/app/web/sql-wasm.js | 1 + examples/app/web/sql-wasm.wasm | 1 + examples/app/web/worker.dart | 18 + examples/app/windows/.gitignore | 17 + examples/app/windows/CMakeLists.txt | 95 +++ examples/app/windows/flutter/CMakeLists.txt | 103 +++ .../flutter/generated_plugin_registrant.cc | 14 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 16 + examples/app/windows/runner/CMakeLists.txt | 17 + examples/app/windows/runner/Runner.rc | 121 +++ .../app/windows/runner/flutter_window.cpp | 61 ++ examples/app/windows/runner/flutter_window.h | 33 + examples/app/windows/runner/main.cpp | 43 ++ examples/app/windows/runner/resource.h | 16 + .../app/windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../app/windows/runner/runner.exe.manifest | 20 + examples/app/windows/runner/utils.cpp | 64 ++ examples/app/windows/runner/utils.h | 19 + examples/app/windows/runner/win32_window.cpp | 245 ++++++ examples/app/windows/runner/win32_window.h | 98 +++ 126 files changed, 4945 insertions(+), 3 deletions(-) create mode 100644 examples/app/.gitignore create mode 100644 examples/app/.metadata create mode 100644 examples/app/README.md create mode 100644 examples/app/analysis_options.yaml create mode 100644 examples/app/android/.gitignore create mode 100644 examples/app/android/app/build.gradle create mode 100644 examples/app/android/app/src/debug/AndroidManifest.xml create mode 100644 examples/app/android/app/src/main/AndroidManifest.xml create mode 100644 examples/app/android/app/src/main/kotlin/com/example/app/MainActivity.kt create mode 100644 examples/app/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 examples/app/android/app/src/main/res/drawable/launch_background.xml create mode 100644 examples/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/app/android/app/src/main/res/values-night/styles.xml create mode 100644 examples/app/android/app/src/main/res/values/styles.xml create mode 100644 examples/app/android/app/src/profile/AndroidManifest.xml create mode 100644 examples/app/android/build.gradle create mode 100644 examples/app/android/gradle.properties create mode 100644 examples/app/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/app/android/settings.gradle create mode 100644 examples/app/build.yaml create mode 100644 examples/app/drift_schemas/drift_schema_v1.json create mode 100644 examples/app/drift_schemas/drift_schema_v2.json create mode 100644 examples/app/ios/.gitignore create mode 100644 examples/app/ios/Flutter/AppFrameworkInfo.plist create mode 100644 examples/app/ios/Flutter/Debug.xcconfig create mode 100644 examples/app/ios/Flutter/Release.xcconfig create mode 100644 examples/app/ios/Runner.xcodeproj/project.pbxproj create mode 100644 examples/app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 examples/app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 examples/app/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 examples/app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 examples/app/ios/Runner/AppDelegate.swift create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 examples/app/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 examples/app/ios/Runner/Base.lproj/Main.storyboard create mode 100644 examples/app/ios/Runner/Info.plist create mode 100644 examples/app/ios/Runner/Runner-Bridging-Header.h create mode 100644 examples/app/lib/database/connection/connection.dart create mode 100644 examples/app/lib/database/connection/native.dart create mode 100644 examples/app/lib/database/connection/unsupported.dart create mode 100644 examples/app/lib/database/connection/web.dart create mode 100644 examples/app/lib/database/database.dart create mode 100644 examples/app/lib/database/database.g.dart create mode 100644 examples/app/lib/database/sql.drift create mode 100644 examples/app/lib/database/tables.dart create mode 100644 examples/app/lib/main.dart create mode 100644 examples/app/lib/screens/home.dart create mode 100644 examples/app/lib/screens/home/card.dart create mode 100644 examples/app/lib/screens/home/drawer.dart create mode 100644 examples/app/lib/screens/home/state.dart create mode 100644 examples/app/lib/screens/home/todo_edit_dialog.dart create mode 100644 examples/app/lib/screens/search.dart create mode 100644 examples/app/linux/.gitignore create mode 100644 examples/app/linux/CMakeLists.txt create mode 100644 examples/app/linux/flutter/CMakeLists.txt create mode 100644 examples/app/linux/flutter/generated_plugin_registrant.cc create mode 100644 examples/app/linux/flutter/generated_plugin_registrant.h create mode 100644 examples/app/linux/flutter/generated_plugins.cmake create mode 100644 examples/app/linux/main.cc create mode 100644 examples/app/linux/my_application.cc create mode 100644 examples/app/linux/my_application.h create mode 100644 examples/app/pubspec.yaml create mode 100644 examples/app/test/database_test.dart create mode 100644 examples/app/test/generated_migrations/schema.dart create mode 100644 examples/app/test/generated_migrations/schema_v1.dart create mode 100644 examples/app/test/generated_migrations/schema_v2.dart create mode 100644 examples/app/test/migration_test.dart create mode 100644 examples/app/tool/builder.dart create mode 100644 examples/app/web/favicon.png create mode 100644 examples/app/web/icons/Icon-192.png create mode 100644 examples/app/web/icons/Icon-512.png create mode 100644 examples/app/web/icons/Icon-maskable-192.png create mode 100644 examples/app/web/icons/Icon-maskable-512.png create mode 100644 examples/app/web/index.html create mode 100644 examples/app/web/manifest.json create mode 120000 examples/app/web/sql-wasm.js create mode 120000 examples/app/web/sql-wasm.wasm create mode 100644 examples/app/web/worker.dart create mode 100644 examples/app/windows/.gitignore create mode 100644 examples/app/windows/CMakeLists.txt create mode 100644 examples/app/windows/flutter/CMakeLists.txt create mode 100644 examples/app/windows/flutter/generated_plugin_registrant.cc create mode 100644 examples/app/windows/flutter/generated_plugin_registrant.h create mode 100644 examples/app/windows/flutter/generated_plugins.cmake create mode 100644 examples/app/windows/runner/CMakeLists.txt create mode 100644 examples/app/windows/runner/Runner.rc create mode 100644 examples/app/windows/runner/flutter_window.cpp create mode 100644 examples/app/windows/runner/flutter_window.h create mode 100644 examples/app/windows/runner/main.cpp create mode 100644 examples/app/windows/runner/resource.h create mode 100644 examples/app/windows/runner/resources/app_icon.ico create mode 100644 examples/app/windows/runner/runner.exe.manifest create mode 100644 examples/app/windows/runner/utils.cpp create mode 100644 examples/app/windows/runner/utils.h create mode 100644 examples/app/windows/runner/win32_window.cpp create mode 100644 examples/app/windows/runner/win32_window.h diff --git a/docs/pages/docs/Advanced Features/migrations.md b/docs/pages/docs/Advanced Features/migrations.md index 2987ee50..8ee0232c 100644 --- a/docs/pages/docs/Advanced Features/migrations.md +++ b/docs/pages/docs/Advanced Features/migrations.md @@ -340,11 +340,11 @@ import 'package:drift_dev/api/migrations.dart'; import 'generated_migrations/schema.dart'; void main() { - SchemaVerifier verifier; + late SchemaVerifier verifier; setUpAll(() { // GeneratedHelper() was generated by drift, the verifier is an api - // provided by drift_generator. + // provided by drift_dev. verifier = SchemaVerifier(GeneratedHelper()); }); diff --git a/drift/pubspec.yaml b/drift/pubspec.yaml index ca0abbc0..1cdce17b 100644 --- a/drift/pubspec.yaml +++ b/drift/pubspec.yaml @@ -12,7 +12,7 @@ dependencies: async: ^2.5.0 convert: ^3.0.0 collection: ^1.15.0 - js: ^0.6.4 + js: ^0.6.3 meta: ^1.3.0 stream_channel: ^2.1.0 sqlite3: ^1.5.1 diff --git a/examples/README.md b/examples/README.md index cb092397..21a6d2bc 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,6 +2,7 @@ This collection of examples demonstrates how to use some advanced drift features. +- `app`: A cross-platform Flutter app built with recommended drift options. - `flutter_web_worker_example`: Asynchronously run a drift database through a web worker with Fluter. - `migrations_example`: Example showing to how to generate test utilities to verify schema migration. - `web_worker_-_example`: Asynchronously run a drift database through a web worker, without Flutter. diff --git a/examples/app/.gitignore b/examples/app/.gitignore new file mode 100644 index 00000000..5b2d9d09 --- /dev/null +++ b/examples/app/.gitignore @@ -0,0 +1,47 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ +web/shared_worker.dart.js + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/examples/app/.metadata b/examples/app/.metadata new file mode 100644 index 00000000..5a023280 --- /dev/null +++ b/examples/app/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 7e9793dee1b85a243edd0e06cb1658e98b077561 + channel: stable + +project_type: app diff --git a/examples/app/README.md b/examples/app/README.md new file mode 100644 index 00000000..e2aa2f9a --- /dev/null +++ b/examples/app/README.md @@ -0,0 +1,60 @@ +# app + +A cross-platform todo app using drift for local persistence. + +## Supported platforms + +This app runs on + +- Android +- iOS +- macOS +- Linux +- Windows +- Web + +When running the app, either with `flutter run` or by running the outputs of +`flutter build`, native sqlite3 dependencies should be set up automatically. +When running the app in a regular Dart VM, for instance through `flutter test`, +you need to ensure that sqlite3 is available yourself. See the [documentation](https://drift.simonbinder.eu/docs/platforms/#desktop) +for more details on this. + +## Development + +As this app uses drift, it depends on code-generation. +Use `flutter pub run build_runner build` to automatically build the generated +code. + +### Testing + +Drift databases don't depend on platform-channels or Flutter-specific features +by default. This means that they can easily be used in unit tests. +One such test is in `test/database_test.dart` + +#### Testing migrations + +After changing the structure of your database schema, for instance by adding +new tables or altering columns, you need to write a migration to ensure that +existing users of your app can convert their database to the latest version. + +Drift contains [builtin APIs](https://drift.simonbinder.eu/docs/advanced-features/migrations/) +for common migrations. +Also, it includes builtin tools to verify that migrations are doing what they're +supposed to do. + +To write such tests, run the following command after making schema changes and +incrementing your schema version. It will export the current schema of the +database as a JSON file. You should check those generated files into source control. + +``` +flutter pub run drift_dev schema dump lib/database/database.dart drift_schemas/ +``` + +Then, run the following command to automatically generate test utilities which +you can use to write unit tests for schema migrations: + +``` +flutter pub run drift_dev schema generate drift_schemas/ test/generated_migrations/ +``` + +An example for a schema test is in `test/migration_test.dart`. diff --git a/examples/app/analysis_options.yaml b/examples/app/analysis_options.yaml new file mode 100644 index 00000000..f68ee5c6 --- /dev/null +++ b/examples/app/analysis_options.yaml @@ -0,0 +1,7 @@ +include: package:flutter_lints/flutter.yaml + +# Don't warn about generated code +analyzer: + exclude: + - "**/*.g.dart" + - "**/*.freezed.dart" diff --git a/examples/app/android/.gitignore b/examples/app/android/.gitignore new file mode 100644 index 00000000..6f568019 --- /dev/null +++ b/examples/app/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/examples/app/android/app/build.gradle b/examples/app/android/app/build.gradle new file mode 100644 index 00000000..2a6af6eb --- /dev/null +++ b/examples/app/android/app/build.gradle @@ -0,0 +1,68 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.app" + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/examples/app/android/app/src/debug/AndroidManifest.xml b/examples/app/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..99f406bd --- /dev/null +++ b/examples/app/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/app/android/app/src/main/AndroidManifest.xml b/examples/app/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..3f2d4034 --- /dev/null +++ b/examples/app/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/examples/app/android/app/src/main/kotlin/com/example/app/MainActivity.kt b/examples/app/android/app/src/main/kotlin/com/example/app/MainActivity.kt new file mode 100644 index 00000000..461fcfba --- /dev/null +++ b/examples/app/android/app/src/main/kotlin/com/example/app/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.app + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/examples/app/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/app/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/examples/app/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/examples/app/android/app/src/main/res/drawable/launch_background.xml b/examples/app/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/examples/app/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/examples/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/examples/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/examples/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/examples/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/examples/app/android/app/src/main/res/values-night/styles.xml b/examples/app/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..3db14bb5 --- /dev/null +++ b/examples/app/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/examples/app/android/app/src/main/res/values/styles.xml b/examples/app/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..d460d1e9 --- /dev/null +++ b/examples/app/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/examples/app/android/app/src/profile/AndroidManifest.xml b/examples/app/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..99f406bd --- /dev/null +++ b/examples/app/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/app/android/build.gradle b/examples/app/android/build.gradle new file mode 100644 index 00000000..4256f917 --- /dev/null +++ b/examples/app/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:4.1.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/examples/app/android/gradle.properties b/examples/app/android/gradle.properties new file mode 100644 index 00000000..94adc3a3 --- /dev/null +++ b/examples/app/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/examples/app/android/gradle/wrapper/gradle-wrapper.properties b/examples/app/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..bc6a58af --- /dev/null +++ b/examples/app/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/examples/app/android/settings.gradle b/examples/app/android/settings.gradle new file mode 100644 index 00000000..44e62bcf --- /dev/null +++ b/examples/app/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/app/build.yaml b/examples/app/build.yaml new file mode 100644 index 00000000..ed76b15f --- /dev/null +++ b/examples/app/build.yaml @@ -0,0 +1,56 @@ +# This configures how `build_runner` and associated builders should behave. +# For more information, see https://pub.dev/packages/build_config + +targets: + $default: + # Reducing sources makes the build slightly faster (some of these are required + # to exist in the default target). + sources: + - lib/** + - web/** + - "tool/**" + - pubspec.yaml + - lib/$lib$ + - $package$ + builders: + drift_dev: + # These options change how drift generates code + options: + # Drift analyzes SQL queries at compile-time. For this purpose, it needs to know which sqlite3 + # features will be available. We depend on `sqlite3_flutter_libs`, which lets us use the latest + # version with fts5 enabled. + sql: + dialect: sqlite + options: + version: "3.38" + modules: [fts5] + + # This allows us to share a drift database across isolates (or different tabs on the web) + generate_connect_constructor: true + # These options are generally recommended: https://drift.simonbinder.eu/docs/advanced-features/builder_options/#recommended-options + apply_converters_on_variables: true + generate_values_in_copy_with: true + new_sql_code_generation: true + scoped_dart_components: true + + # Configuring this builder isn't required for most apps. In our case, we + # want to compile the web worker in `web/worker.dart` to JS and we use the + # build system for that. + build_web_compilers|entrypoint: + generate_for: + - web/worker.dart + options: + compiler: dart2js + "|copy_compiled_worker_js": + enabled: true + + +# build_web_compilers writes a hidden asset, but we want an asset in `web/` for +# flutter to see. So, copy that output. Again, this is not needed for most apps. +builders: + copy_compiled_worker_js: + import: 'tool/builder.dart' + builder_factories: ["CopyCompiledJs.new"] + build_to: source + build_extensions: {'web/worker.dart.js': ['web/shared_worker.dart.js']} + required_inputs: [".dart.js"] \ No newline at end of file diff --git a/examples/app/drift_schemas/drift_schema_v1.json b/examples/app/drift_schemas/drift_schema_v1.json new file mode 100644 index 00000000..d03dd6e9 --- /dev/null +++ b/examples/app/drift_schemas/drift_schema_v1.json @@ -0,0 +1 @@ +{"_meta":{"description":"This file contains a serialized version of schema entities for moor.","version":"0.1.0-dev-preview"},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"categories","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"ColumnType.integer","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment","primary-key"]},{"name":"name","getter_name":"name","moor_type":"ColumnType.text","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"color","getter_name":"color","moor_type":"ColumnType.integer","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ColorConverter()","dart_type_name":"Color"}}],"is_virtual":false}},{"id":1,"references":[0],"type":"table","data":{"name":"todo_entries","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"ColumnType.integer","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment","primary-key"]},{"name":"description","getter_name":"description","moor_type":"ColumnType.text","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"category","getter_name":"category","moor_type":"ColumnType.integer","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":["unknown"]}],"is_virtual":false}},{"id":2,"references":[],"type":"table","data":{"name":"text_entries","was_declared_in_moor":true,"columns":[{"name":"description","getter_name":"description","moor_type":"ColumnType.text","nullable":false,"customConstraints":"","default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":true,"create_virtual_stmt":"CREATE VIRTUAL TABLE text_entries USING fts5 (\n description,\n content=todo_entries,\n content_rowid=id\n);"}},{"id":3,"references":[1,2],"type":"trigger","data":{"on":1,"refences_in_body":[2,1],"name":"todos_insert","sql":"CREATE TRIGGER todos_insert AFTER INSERT ON todo_entries BEGIN\n INSERT INTO text_entries(rowid, description) VALUES (new.id, new.description);\nEND;"}}]} \ No newline at end of file diff --git a/examples/app/drift_schemas/drift_schema_v2.json b/examples/app/drift_schemas/drift_schema_v2.json new file mode 100644 index 00000000..d66b2284 --- /dev/null +++ b/examples/app/drift_schemas/drift_schema_v2.json @@ -0,0 +1 @@ +{"_meta":{"description":"This file contains a serialized version of schema entities for moor.","version":"0.1.0-dev-preview"},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"categories","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"ColumnType.integer","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment","primary-key"]},{"name":"name","getter_name":"name","moor_type":"ColumnType.text","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"color","getter_name":"color","moor_type":"ColumnType.integer","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ColorConverter()","dart_type_name":"Color"}}],"is_virtual":false}},{"id":1,"references":[0],"type":"table","data":{"name":"todo_entries","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"ColumnType.integer","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment","primary-key"]},{"name":"description","getter_name":"description","moor_type":"ColumnType.text","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"category","getter_name":"category","moor_type":"ColumnType.integer","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":["unknown"]},{"name":"due_date","getter_name":"dueDate","moor_type":"ColumnType.datetime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false}},{"id":2,"references":[],"type":"table","data":{"name":"text_entries","was_declared_in_moor":true,"columns":[{"name":"description","getter_name":"description","moor_type":"ColumnType.text","nullable":false,"customConstraints":"","default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":true,"create_virtual_stmt":"CREATE VIRTUAL TABLE text_entries USING fts5 (\n description,\n content=todo_entries,\n content_rowid=id\n);"}},{"id":3,"references":[1,2],"type":"trigger","data":{"on":1,"refences_in_body":[2,1],"name":"todos_insert","sql":"CREATE TRIGGER todos_insert AFTER INSERT ON todo_entries BEGIN\n INSERT INTO text_entries(rowid, description) VALUES (new.id, new.description);\nEND;"}}]} \ No newline at end of file diff --git a/examples/app/ios/.gitignore b/examples/app/ios/.gitignore new file mode 100644 index 00000000..7a7f9873 --- /dev/null +++ b/examples/app/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/examples/app/ios/Flutter/AppFrameworkInfo.plist b/examples/app/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..8d4492f9 --- /dev/null +++ b/examples/app/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/examples/app/ios/Flutter/Debug.xcconfig b/examples/app/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/examples/app/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/examples/app/ios/Flutter/Release.xcconfig b/examples/app/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/examples/app/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/examples/app/ios/Runner.xcodeproj/project.pbxproj b/examples/app/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..fb16edd3 --- /dev/null +++ b/examples/app/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,481 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.app; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.app; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.app; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/examples/app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/examples/app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/examples/app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/examples/app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..c87d15a3 --- /dev/null +++ b/examples/app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/app/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/app/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/examples/app/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/examples/app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/examples/app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/examples/app/ios/Runner/AppDelegate.swift b/examples/app/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..70693e4a --- /dev/null +++ b/examples/app/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/examples/app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/examples/app/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/app/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/examples/app/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/app/ios/Runner/Base.lproj/Main.storyboard b/examples/app/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/examples/app/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/app/ios/Runner/Info.plist b/examples/app/ios/Runner/Info.plist new file mode 100644 index 00000000..00943528 --- /dev/null +++ b/examples/app/ios/Runner/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + App + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + app + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/examples/app/ios/Runner/Runner-Bridging-Header.h b/examples/app/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..308a2a56 --- /dev/null +++ b/examples/app/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/examples/app/lib/database/connection/connection.dart b/examples/app/lib/database/connection/connection.dart new file mode 100644 index 00000000..827bd5cb --- /dev/null +++ b/examples/app/lib/database/connection/connection.dart @@ -0,0 +1,5 @@ +// We use a conditional export to expose the right connection factory depending +// on the platform. +export 'unsupported.dart' + if (dart.library.js) 'web.dart' + if (dart.library.ffi) 'native.dart'; diff --git a/examples/app/lib/database/connection/native.dart b/examples/app/lib/database/connection/native.dart new file mode 100644 index 00000000..1edd55ad --- /dev/null +++ b/examples/app/lib/database/connection/native.dart @@ -0,0 +1,60 @@ +import 'dart:io'; +import 'dart:isolate'; + +import 'package:drift/drift.dart'; +import 'package:drift/isolate.dart'; +import 'package:drift/native.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:path/path.dart' as p; + +/// Obtains a database connection for running drift in a Dart VM. +/// +/// The [NativeDatabase] from drift will synchronously use sqlite3's C APIs. +/// To move synchronous database work off the main thread, we use a +/// [DriftIsolate], which can run queries in a background isolate under the +/// hood. +DatabaseConnection connect() { + return DatabaseConnection.delayed(Future.sync(() async { + // Background isolates can't use platform channels, so let's use + // `path_provider` in the main isolate and just send the result containing + // the path over to the background isolate. + final appDir = await getApplicationDocumentsDirectory(); + final dbPath = p.join(appDir.path, 'todos.db'); + + final receiveDriftIsolate = ReceivePort(); + await Isolate.spawn(_entrypointForDriftIsolate, + _IsolateStartRequest(receiveDriftIsolate.sendPort, dbPath)); + + final driftIsolate = await receiveDriftIsolate.first as DriftIsolate; + return driftIsolate.connect(); + })); +} + +/// The entrypoint of isolates can only take a single message, but we need two +/// (a send port to reach the originating isolate and the database's path that +/// should be opened on the background isolate). So, we bundle this information +/// in a single class. +class _IsolateStartRequest { + final SendPort talkToMain; + final String databasePath; + + _IsolateStartRequest(this.talkToMain, this.databasePath); +} + +/// The entrypoint for a background isolate launching a drift server. +/// +/// The main isolate can then connect to that isolate server to transparently +/// run queries in the background. +void _entrypointForDriftIsolate(_IsolateStartRequest request) { + // The native database synchronously uses sqlite3's C API with `dart:ffi` for + // a fast database implementation that doesn't require platform channels. + final databaseImpl = NativeDatabase(File(request.databasePath)); + + // We can use DriftIsolate.inCurrent because this function is the entrypoint + // of a background isolate itself. + final driftServer = DriftIsolate.inCurrent( + () => DatabaseConnection.fromExecutor(databaseImpl)); + + // Inform the main isolate about the server we just created. + request.talkToMain.send(driftServer); +} diff --git a/examples/app/lib/database/connection/unsupported.dart b/examples/app/lib/database/connection/unsupported.dart new file mode 100644 index 00000000..653c9007 --- /dev/null +++ b/examples/app/lib/database/connection/unsupported.dart @@ -0,0 +1,6 @@ +import 'package:drift/drift.dart'; + +DatabaseConnection connect() { + throw UnsupportedError( + 'No suitable database implementation was found on this platform.'); +} diff --git a/examples/app/lib/database/connection/web.dart b/examples/app/lib/database/connection/web.dart new file mode 100644 index 00000000..f59eec1c --- /dev/null +++ b/examples/app/lib/database/connection/web.dart @@ -0,0 +1,13 @@ +import 'package:drift/drift.dart'; +import 'package:drift/web.dart'; + +/// Obtains a database connection for running drift on the web. +DatabaseConnection connect({bool isInWebWorker = false}) { + return DatabaseConnection.delayed(Future.sync(() async { + final storage = await DriftWebStorage.indexedDbIfSupported('app_database', + inWebWorker: isInWebWorker); + final databaseImpl = WebDatabase.withStorage(storage); + + return DatabaseConnection.fromExecutor(databaseImpl); + })); +} diff --git a/examples/app/lib/database/database.dart b/examples/app/lib/database/database.dart new file mode 100644 index 00000000..cd46e5f5 --- /dev/null +++ b/examples/app/lib/database/database.dart @@ -0,0 +1,117 @@ +import 'package:drift/drift.dart'; +import 'package:flutter/material.dart' show Colors; +import 'package:riverpod/riverpod.dart'; + +import 'connection/connection.dart' as impl; +import 'tables.dart'; + +// Generated by drift_dev when running `build_runner build` +part 'database.g.dart'; + +@DriftDatabase(tables: [TodoEntries, Categories], include: {'sql.drift'}) +class AppDatabase extends _$AppDatabase { + AppDatabase() : super.connect(impl.connect()); + + AppDatabase.forTesting(DatabaseConnection connection) + : super.connect(connection); + + @override + int get schemaVersion => 2; + + @override + MigrationStrategy get migration { + return MigrationStrategy( + onUpgrade: ((m, from, to) async { + if (from == 1) { + // The todoEntries.dueDate column was added in version 2. + await m.addColumn(todoEntries, todoEntries.dueDate); + } + }), + beforeOpen: (details) async { + // Make sure that foreign keys are enabled + await customStatement('PRAGMA foreign_keys = ON'); + + if (details.wasCreated) { + // Create a bunch of default values so the app doesn't look too empty + // on the first start. + await batch((b) { + b.insert( + categories, + CategoriesCompanion.insert(name: 'Important', color: Colors.red), + ); + + b.insertAll(todoEntries, [ + TodoEntriesCompanion.insert(description: 'Check out drift'), + TodoEntriesCompanion.insert( + description: 'Fix session invalidation bug', + category: const Value(1)), + TodoEntriesCompanion.insert( + description: 'Add favorite movies to home page'), + ]); + }); + } + }, + ); + } + + Future> search(String query) { + return _search(query).map((row) { + return TodoEntryWithCategory(entry: row.todos, category: row.cat); + }).get(); + } + + Stream> categoriesWithCount() { + // the _categoriesWithCount method has been generated automatically based + // on the query declared in the @DriftDatabase annotation + return _categoriesWithCount().map((row) { + final hasId = row.id != null; + final category = hasId + ? Category(id: row.id!, name: row.name!, color: row.color!) + : null; + + return CategoryWithCount(category, row.amount); + }).watch(); + } + + /// Returns an auto-updating stream of all todo entries in a given category + /// id. + Stream> entriesInCategory(int? categoryId) { + final query = select(todoEntries).join( + [leftOuterJoin(categories, categories.id.equalsExp(todoEntries.id))]); + + if (categoryId != null) { + query.where(categories.id.equals(categoryId)); + } else { + query.where(categories.id.isNull()); + } + + return query.map((row) { + return TodoEntryWithCategory( + entry: row.readTable(todoEntries), + category: row.readTableOrNull(categories), + ); + }).watch(); + } + + static Provider provider = Provider((ref) { + final database = AppDatabase(); + ref.onDispose(database.close); + + return database; + }); +} + +class TodoEntryWithCategory { + final TodoEntry entry; + final Category? category; + + TodoEntryWithCategory({required this.entry, this.category}); +} + +class CategoryWithCount { + // can be null, in which case we count how many entries don't have a category + final Category? category; + final int count; // amount of entries in this category + + CategoryWithCount(this.category, this.count); +} diff --git a/examples/app/lib/database/database.g.dart b/examples/app/lib/database/database.g.dart new file mode 100644 index 00000000..4a4c9fa4 --- /dev/null +++ b/examples/app/lib/database/database.g.dart @@ -0,0 +1,712 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'database.dart'; + +// ************************************************************************** +// MoorGenerator +// ************************************************************************** + +// ignore_for_file: type=lint +class Category extends DataClass implements Insertable { + final int id; + final String name; + final Color color; + Category({required this.id, required this.name, required this.color}); + factory Category.fromData(Map data, {String? prefix}) { + final effectivePrefix = prefix ?? ''; + return Category( + id: const IntType() + .mapFromDatabaseResponse(data['${effectivePrefix}id'])!, + name: const StringType() + .mapFromDatabaseResponse(data['${effectivePrefix}name'])!, + color: $CategoriesTable.$converter0.mapToDart(const IntType() + .mapFromDatabaseResponse(data['${effectivePrefix}color']))!, + ); + } + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['name'] = Variable(name); + { + final converter = $CategoriesTable.$converter0; + map['color'] = Variable(converter.mapToSql(color)!); + } + return map; + } + + CategoriesCompanion toCompanion(bool nullToAbsent) { + return CategoriesCompanion( + id: Value(id), + name: Value(name), + color: Value(color), + ); + } + + factory Category.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return Category( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + color: serializer.fromJson(json['color']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + 'color': serializer.toJson(color), + }; + } + + Category copyWith({int? id, String? name, Color? color}) => Category( + id: id ?? this.id, + name: name ?? this.name, + color: color ?? this.color, + ); + @override + String toString() { + return (StringBuffer('Category(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('color: $color') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, name, color); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Category && + other.id == this.id && + other.name == this.name && + other.color == this.color); +} + +class CategoriesCompanion extends UpdateCompanion { + final Value id; + final Value name; + final Value color; + const CategoriesCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + this.color = const Value.absent(), + }); + CategoriesCompanion.insert({ + this.id = const Value.absent(), + required String name, + required Color color, + }) : name = Value(name), + color = Value(color); + static Insertable custom({ + Expression? id, + Expression? name, + Expression? color, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + if (color != null) 'color': color, + }); + } + + CategoriesCompanion copyWith( + {Value? id, Value? name, Value? color}) { + return CategoriesCompanion( + id: id ?? this.id, + name: name ?? this.name, + color: color ?? this.color, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (color.present) { + final converter = $CategoriesTable.$converter0; + map['color'] = Variable(converter.mapToSql(color.value)!); + } + return map; + } + + @override + String toString() { + return (StringBuffer('CategoriesCompanion(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('color: $color') + ..write(')')) + .toString(); + } +} + +class $CategoriesTable extends Categories + with TableInfo<$CategoriesTable, Category> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $CategoriesTable(this.attachedDatabase, [this._alias]); + final VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: const IntType(), + requiredDuringInsert: false, + defaultConstraints: 'PRIMARY KEY AUTOINCREMENT'); + final VerificationMeta _nameMeta = const VerificationMeta('name'); + @override + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: const StringType(), requiredDuringInsert: true); + final VerificationMeta _colorMeta = const VerificationMeta('color'); + @override + late final GeneratedColumnWithTypeConverter color = + GeneratedColumn('color', aliasedName, false, + type: const IntType(), requiredDuringInsert: true) + .withConverter($CategoriesTable.$converter0); + @override + List get $columns => [id, name, color]; + @override + String get aliasedName => _alias ?? 'categories'; + @override + String get actualTableName => 'categories'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('name')) { + context.handle( + _nameMeta, name.isAcceptableOrUnknown(data['name']!, _nameMeta)); + } else if (isInserting) { + context.missing(_nameMeta); + } + context.handle(_colorMeta, const VerificationResult.success()); + return context; + } + + @override + Set get $primaryKey => {id}; + @override + Category map(Map data, {String? tablePrefix}) { + return Category.fromData(data, + prefix: tablePrefix != null ? '$tablePrefix.' : null); + } + + @override + $CategoriesTable createAlias(String alias) { + return $CategoriesTable(attachedDatabase, alias); + } + + static TypeConverter $converter0 = const ColorConverter(); +} + +class TodoEntry extends DataClass implements Insertable { + final int id; + final String description; + final int? category; + final DateTime? dueDate; + TodoEntry( + {required this.id, + required this.description, + this.category, + this.dueDate}); + factory TodoEntry.fromData(Map data, {String? prefix}) { + final effectivePrefix = prefix ?? ''; + return TodoEntry( + id: const IntType() + .mapFromDatabaseResponse(data['${effectivePrefix}id'])!, + description: const StringType() + .mapFromDatabaseResponse(data['${effectivePrefix}description'])!, + category: const IntType() + .mapFromDatabaseResponse(data['${effectivePrefix}category']), + dueDate: const DateTimeType() + .mapFromDatabaseResponse(data['${effectivePrefix}due_date']), + ); + } + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['description'] = Variable(description); + if (!nullToAbsent || category != null) { + map['category'] = Variable(category); + } + if (!nullToAbsent || dueDate != null) { + map['due_date'] = Variable(dueDate); + } + return map; + } + + TodoEntriesCompanion toCompanion(bool nullToAbsent) { + return TodoEntriesCompanion( + id: Value(id), + description: Value(description), + category: category == null && nullToAbsent + ? const Value.absent() + : Value(category), + dueDate: dueDate == null && nullToAbsent + ? const Value.absent() + : Value(dueDate), + ); + } + + factory TodoEntry.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return TodoEntry( + id: serializer.fromJson(json['id']), + description: serializer.fromJson(json['description']), + category: serializer.fromJson(json['category']), + dueDate: serializer.fromJson(json['dueDate']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'description': serializer.toJson(description), + 'category': serializer.toJson(category), + 'dueDate': serializer.toJson(dueDate), + }; + } + + TodoEntry copyWith( + {int? id, + String? description, + Value category = const Value.absent(), + Value dueDate = const Value.absent()}) => + TodoEntry( + id: id ?? this.id, + description: description ?? this.description, + category: category.present ? category.value : this.category, + dueDate: dueDate.present ? dueDate.value : this.dueDate, + ); + @override + String toString() { + return (StringBuffer('TodoEntry(') + ..write('id: $id, ') + ..write('description: $description, ') + ..write('category: $category, ') + ..write('dueDate: $dueDate') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, description, category, dueDate); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is TodoEntry && + other.id == this.id && + other.description == this.description && + other.category == this.category && + other.dueDate == this.dueDate); +} + +class TodoEntriesCompanion extends UpdateCompanion { + final Value id; + final Value description; + final Value category; + final Value dueDate; + const TodoEntriesCompanion({ + this.id = const Value.absent(), + this.description = const Value.absent(), + this.category = const Value.absent(), + this.dueDate = const Value.absent(), + }); + TodoEntriesCompanion.insert({ + this.id = const Value.absent(), + required String description, + this.category = const Value.absent(), + this.dueDate = const Value.absent(), + }) : description = Value(description); + static Insertable custom({ + Expression? id, + Expression? description, + Expression? category, + Expression? dueDate, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (description != null) 'description': description, + if (category != null) 'category': category, + if (dueDate != null) 'due_date': dueDate, + }); + } + + TodoEntriesCompanion copyWith( + {Value? id, + Value? description, + Value? category, + Value? dueDate}) { + return TodoEntriesCompanion( + id: id ?? this.id, + description: description ?? this.description, + category: category ?? this.category, + dueDate: dueDate ?? this.dueDate, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (category.present) { + map['category'] = Variable(category.value); + } + if (dueDate.present) { + map['due_date'] = Variable(dueDate.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('TodoEntriesCompanion(') + ..write('id: $id, ') + ..write('description: $description, ') + ..write('category: $category, ') + ..write('dueDate: $dueDate') + ..write(')')) + .toString(); + } +} + +class $TodoEntriesTable extends TodoEntries + with TableInfo<$TodoEntriesTable, TodoEntry> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $TodoEntriesTable(this.attachedDatabase, [this._alias]); + final VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: const IntType(), + requiredDuringInsert: false, + defaultConstraints: 'PRIMARY KEY AUTOINCREMENT'); + final VerificationMeta _descriptionMeta = + const VerificationMeta('description'); + @override + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, false, + type: const StringType(), requiredDuringInsert: true); + final VerificationMeta _categoryMeta = const VerificationMeta('category'); + @override + late final GeneratedColumn category = GeneratedColumn( + 'category', aliasedName, true, + type: const IntType(), + requiredDuringInsert: false, + defaultConstraints: 'REFERENCES categories (id)'); + final VerificationMeta _dueDateMeta = const VerificationMeta('dueDate'); + @override + late final GeneratedColumn dueDate = GeneratedColumn( + 'due_date', aliasedName, true, + type: const IntType(), requiredDuringInsert: false); + @override + List get $columns => [id, description, category, dueDate]; + @override + String get aliasedName => _alias ?? 'todo_entries'; + @override + String get actualTableName => 'todo_entries'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + if (data.containsKey('description')) { + context.handle( + _descriptionMeta, + description.isAcceptableOrUnknown( + data['description']!, _descriptionMeta)); + } else if (isInserting) { + context.missing(_descriptionMeta); + } + if (data.containsKey('category')) { + context.handle(_categoryMeta, + category.isAcceptableOrUnknown(data['category']!, _categoryMeta)); + } + if (data.containsKey('due_date')) { + context.handle(_dueDateMeta, + dueDate.isAcceptableOrUnknown(data['due_date']!, _dueDateMeta)); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + TodoEntry map(Map data, {String? tablePrefix}) { + return TodoEntry.fromData(data, + prefix: tablePrefix != null ? '$tablePrefix.' : null); + } + + @override + $TodoEntriesTable createAlias(String alias) { + return $TodoEntriesTable(attachedDatabase, alias); + } +} + +class TextEntrie extends DataClass implements Insertable { + final String description; + TextEntrie({required this.description}); + factory TextEntrie.fromData(Map data, {String? prefix}) { + final effectivePrefix = prefix ?? ''; + return TextEntrie( + description: const StringType() + .mapFromDatabaseResponse(data['${effectivePrefix}description'])!, + ); + } + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['description'] = Variable(description); + return map; + } + + TextEntriesCompanion toCompanion(bool nullToAbsent) { + return TextEntriesCompanion( + description: Value(description), + ); + } + + factory TextEntrie.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return TextEntrie( + description: serializer.fromJson(json['description']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'description': serializer.toJson(description), + }; + } + + TextEntrie copyWith({String? description}) => TextEntrie( + description: description ?? this.description, + ); + @override + String toString() { + return (StringBuffer('TextEntrie(') + ..write('description: $description') + ..write(')')) + .toString(); + } + + @override + int get hashCode => description.hashCode; + @override + bool operator ==(Object other) => + identical(this, other) || + (other is TextEntrie && other.description == this.description); +} + +class TextEntriesCompanion extends UpdateCompanion { + final Value description; + const TextEntriesCompanion({ + this.description = const Value.absent(), + }); + TextEntriesCompanion.insert({ + required String description, + }) : description = Value(description); + static Insertable custom({ + Expression? description, + }) { + return RawValuesInsertable({ + if (description != null) 'description': description, + }); + } + + TextEntriesCompanion copyWith({Value? description}) { + return TextEntriesCompanion( + description: description ?? this.description, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (description.present) { + map['description'] = Variable(description.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('TextEntriesCompanion(') + ..write('description: $description') + ..write(')')) + .toString(); + } +} + +class TextEntries extends Table + with + TableInfo, + VirtualTableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + TextEntries(this.attachedDatabase, [this._alias]); + final VerificationMeta _descriptionMeta = + const VerificationMeta('description'); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, false, + type: const StringType(), + requiredDuringInsert: true, + $customConstraints: ''); + @override + List get $columns => [description]; + @override + String get aliasedName => _alias ?? 'text_entries'; + @override + String get actualTableName => 'text_entries'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('description')) { + context.handle( + _descriptionMeta, + description.isAcceptableOrUnknown( + data['description']!, _descriptionMeta)); + } else if (isInserting) { + context.missing(_descriptionMeta); + } + return context; + } + + @override + Set get $primaryKey => {}; + @override + TextEntrie map(Map data, {String? tablePrefix}) { + return TextEntrie.fromData(data, + prefix: tablePrefix != null ? '$tablePrefix.' : null); + } + + @override + TextEntries createAlias(String alias) { + return TextEntries(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => true; + @override + String get moduleAndArgs => + 'fts5(description, content=todo_entries, content_rowid=id)'; +} + +abstract class _$AppDatabase extends GeneratedDatabase { + _$AppDatabase(QueryExecutor e) : super(SqlTypeSystem.defaultInstance, e); + _$AppDatabase.connect(DatabaseConnection c) : super.connect(c); + late final $CategoriesTable categories = $CategoriesTable(this); + late final $TodoEntriesTable todoEntries = $TodoEntriesTable(this); + late final TextEntries textEntries = TextEntries(this); + late final Trigger todosInsert = Trigger( + 'CREATE TRIGGER todos_insert AFTER INSERT ON todo_entries BEGIN INSERT INTO text_entries ("rowid", description) VALUES (new.id, new.description);END', + 'todos_insert'); + Selectable _categoriesWithCount() { + return customSelect( + 'SELECT c.*, (SELECT COUNT(*) FROM todo_entries WHERE category = c.id) AS amount FROM categories AS c UNION ALL SELECT NULL, NULL, NULL, (SELECT COUNT(*) FROM todo_entries WHERE category IS NULL)', + variables: [], + readsFrom: { + todoEntries, + categories, + }).map((QueryRow row) { + return CategoriesWithCountResult( + id: row.read('id'), + name: row.read('name'), + color: $CategoriesTable.$converter0.mapToDart(row.read('color')), + amount: row.read('amount'), + ); + }); + } + + Selectable _search(String query) { + return customSelect( + 'SELECT"todos"."id" AS "nested_0.id", "todos"."description" AS "nested_0.description", "todos"."category" AS "nested_0.category", "todos"."due_date" AS "nested_0.due_date","cat"."id" AS "nested_1.id", "cat"."name" AS "nested_1.name", "cat"."color" AS "nested_1.color" FROM text_entries INNER JOIN todo_entries AS todos ON todos.id = text_entries."rowid" LEFT OUTER JOIN categories AS cat ON cat.id = todos.category WHERE text_entries MATCH ?1 ORDER BY rank', + variables: [ + Variable(query) + ], + readsFrom: { + textEntries, + todoEntries, + categories, + }).map((QueryRow row) { + return SearchResult( + todos: todoEntries.mapFromRow(row, tablePrefix: 'nested_0'), + cat: categories.mapFromRowOrNull(row, tablePrefix: 'nested_1'), + ); + }); + } + + @override + Iterable get allTables => allSchemaEntities.whereType(); + @override + List get allSchemaEntities => + [categories, todoEntries, textEntries, todosInsert]; + @override + StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules( + [ + WritePropagation( + on: TableUpdateQuery.onTableName('todo_entries', + limitUpdateKind: UpdateKind.insert), + result: [ + TableUpdate('text_entries', kind: UpdateKind.insert), + ], + ), + ], + ); +} + +class CategoriesWithCountResult { + final int? id; + final String? name; + final Color? color; + final int amount; + CategoriesWithCountResult({ + this.id, + this.name, + this.color, + required this.amount, + }); +} + +class SearchResult { + final TodoEntry todos; + final Category? cat; + SearchResult({ + required this.todos, + this.cat, + }); +} diff --git a/examples/app/lib/database/sql.drift b/examples/app/lib/database/sql.drift new file mode 100644 index 00000000..4fb0774e --- /dev/null +++ b/examples/app/lib/database/sql.drift @@ -0,0 +1,43 @@ +-- .drift files can contain SQL that is analyzed at compile time. +-- First, let's import the Dart tables so that we can reference them here. +import 'tables.dart'; + +-- Create a text index of todo entries, see https://www.sqlite.org/fts5.html#external_content_tables + +CREATE VIRTUAL TABLE text_entries USING fts5 ( + description, + content=todo_entries, + content_rowid=id +); + +-- Triggers to keep todo entries and fts5 index in sync. +CREATE TRIGGER todos_insert AFTER INSERT ON todo_entries BEGIN + INSERT INTO text_entries(rowid, description) VALUES (new.id, new.description); +END; + +-- todo: Investigate why these two triggers are causing problems +/* +CREATE TRIGGER todos_delete AFTER INSERT ON todo_entries BEGIN + INSERT INTO text_entries(text_entries, rowid, description) VALUES ('delete', new.id, new.description); +END; + +CREATE TRIGGER todos_update AFTER INSERT ON todo_entries BEGIN + INSERT INTO text_entries(text_entries, rowid, description) VALUES ('delete', new.id, new.description); + INSERT INTO text_entries(rowid, description) VALUES (new.id, new.description); +END; +*/ + +-- Queries can also be defined here, they're then added as methods to the database. +_categoriesWithCount: SELECT c.*, + (SELECT COUNT(*) FROM todo_entries WHERE category = c.id) AS amount + FROM categories c +UNION ALL + SELECT null, null, null, (SELECT COUNT(*) FROM todo_entries WHERE category IS NULL); + +-- The `.**` syntax instructs drift to generate nested result set classes. +_search: SELECT todos.**, cat.** FROM text_entries + INNER JOIN todo_entries todos ON todos.id = text_entries.rowid + LEFT OUTER JOIN categories cat ON cat.id = todos.category + WHERE text_entries MATCH :query + ORDER BY rank; + diff --git a/examples/app/lib/database/tables.dart b/examples/app/lib/database/tables.dart new file mode 100644 index 00000000..cdeea59e --- /dev/null +++ b/examples/app/lib/database/tables.dart @@ -0,0 +1,46 @@ +import 'dart:ui'; + +export 'dart:ui' show Color; + +import 'package:drift/drift.dart'; + +@DataClassName('TodoEntry') +class TodoEntries extends Table with AutoIncrementingPrimaryKey { + TextColumn get description => text()(); + + // Todo entries can optionally be in a category. + IntColumn get category => integer().nullable().references(Categories, #id)(); + + // Assume that this column didn't exist in the first version of the app, it + // was added later. + // After adding it, the `schemaVersion` in the database class was incremented + // to 2 and a migration was written. + // + // With drift, database migrations can be unit-tested. See the readme of this + // example for details. + DateTimeColumn get dueDate => dateTime().nullable()(); +} + +@DataClassName('Category') +class Categories extends Table with AutoIncrementingPrimaryKey { + TextColumn get name => text()(); + + // We can use type converters to store custom classes in tables. + // Here, we're storing colors as integers. + IntColumn get color => integer().map(const ColorConverter())(); +} + +// Tables can mix-in common definitions if needed +mixin AutoIncrementingPrimaryKey on Table { + IntColumn get id => integer().autoIncrement()(); +} + +class ColorConverter extends NullAwareTypeConverter { + const ColorConverter(); + + @override + Color requireMapToDart(int fromDb) => Color(fromDb); + + @override + int requireMapToSql(Color value) => value.value; +} diff --git a/examples/app/lib/main.dart b/examples/app/lib/main.dart new file mode 100644 index 00000000..aca8176b --- /dev/null +++ b/examples/app/lib/main.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; + +import 'screens/home.dart'; +import 'screens/search.dart'; + +void main() { + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + MyApp({Key? key}) : super(key: key); + + final _router = GoRouter( + routes: [ + GoRoute( + path: '/', + builder: (_, __) => const HomePage(), + routes: [ + GoRoute( + path: 'search', + builder: (_, __) => const SearchPage(), + ), + ], + ), + ], + ); + + @override + Widget build(BuildContext context) { + return ProviderScope( + child: MaterialApp.router( + title: 'Drift Todos', + theme: ThemeData( + primarySwatch: Colors.amber, + typography: Typography.material2018(), + ), + routeInformationParser: _router.routeInformationParser, + routerDelegate: _router.routerDelegate, + ), + ); + } +} diff --git a/examples/app/lib/screens/home.dart b/examples/app/lib/screens/home.dart new file mode 100644 index 00000000..9d0c2f36 --- /dev/null +++ b/examples/app/lib/screens/home.dart @@ -0,0 +1,109 @@ +import 'package:drift/drift.dart' hide Column; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; + +import '../database/database.dart'; +import 'home/card.dart'; +import 'home/drawer.dart'; +import 'home/state.dart'; + +class HomePage extends ConsumerStatefulWidget { + const HomePage({Key? key}) : super(key: key); + + @override + ConsumerState createState() => _HomePageState(); +} + +class _HomePageState extends ConsumerState { + final _controller = TextEditingController(); + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + void _addTodoEntry() { + if (_controller.text.isNotEmpty) { + // We write the entry here. Notice how we don't have to call setState() + // or anything - drift will take care of updating the list automatically. + final database = ref.read(AppDatabase.provider); + final currentCategory = ref.read(activeCategory); + + database.todoEntries.insertOne(TodoEntriesCompanion.insert( + description: _controller.text, + category: Value(currentCategory?.id), + )); + + _controller.clear(); + } + } + + @override + Widget build(BuildContext context) { + final currentEntries = ref.watch(entriesInCategory); + + return Scaffold( + appBar: AppBar( + title: const Text('Drift Todo list'), + actions: [ + IconButton( + onPressed: () => context.go('/search'), + icon: const Icon(Icons.search), + tooltip: 'Search', + ), + ], + ), + drawer: const CategoriesDrawer(), + body: currentEntries.when( + data: (entries) { + return ListView.builder( + itemCount: entries.length, + itemBuilder: (context, index) { + return TodoCard(entries[index].entry); + }, + ); + }, + error: (e, s) { + debugPrintStack(label: e.toString(), stackTrace: s); + return const Text('An error has occured'); + }, + loading: () => const Align( + alignment: Alignment.center, + child: CircularProgressIndicator(), + ), + ), + bottomSheet: Material( + elevation: 12, + child: SafeArea( + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('What needs to be done?'), + Row( + children: [ + Expanded( + child: TextField( + controller: _controller, + onSubmitted: (_) => _addTodoEntry(), + ), + ), + IconButton( + icon: const Icon(Icons.send), + color: Theme.of(context).colorScheme.secondary, + onPressed: _addTodoEntry, + ), + ], + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/examples/app/lib/screens/home/card.dart b/examples/app/lib/screens/home/card.dart new file mode 100644 index 00000000..84edb5a6 --- /dev/null +++ b/examples/app/lib/screens/home/card.dart @@ -0,0 +1,72 @@ +import 'package:drift/drift.dart' hide Column; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:intl/intl.dart'; + +import '../../database/database.dart'; +import 'todo_edit_dialog.dart'; + +final DateFormat _format = DateFormat.yMMMd(); + +/// Card that displays an entry and an icon button to delete that entry +class TodoCard extends ConsumerWidget { + final TodoEntry entry; + + TodoCard(this.entry) : super(key: ObjectKey(entry.id)); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final dueDate = entry.dueDate; + + return Card( + child: Padding( + padding: const EdgeInsets.all(8), + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text(entry.description), + if (dueDate != null) + Text( + _format.format(dueDate), + style: const TextStyle(fontSize: 12), + ) + else + const Text( + 'No due date set', + style: TextStyle(color: Colors.grey, fontSize: 12), + ), + ], + ), + ), + IconButton( + icon: const Icon(Icons.edit), + color: Colors.blue, + onPressed: () { + showDialog( + context: context, + barrierDismissible: false, + builder: (ctx) => TodoEditDialog(entry: entry), + ); + }, + ), + IconButton( + icon: const Icon(Icons.delete), + color: Colors.red, + onPressed: () { + // We delete the entry here. Again, notice how we don't have to + // call setState() or inform the parent widget. Drift will take + // care of updating the underlying data automatically + ref.read(AppDatabase.provider).todoEntries.deleteOne(entry); + }, + ) + ], + ), + ), + ); + } +} diff --git a/examples/app/lib/screens/home/drawer.dart b/examples/app/lib/screens/home/drawer.dart new file mode 100644 index 00000000..bf9cd5ba --- /dev/null +++ b/examples/app/lib/screens/home/drawer.dart @@ -0,0 +1,207 @@ +import 'package:drift/drift.dart' hide Column; +import 'package:flutter/material.dart'; +import 'package:flutter_colorpicker/flutter_colorpicker.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../../database/database.dart'; +import 'state.dart'; + +class CategoriesDrawer extends ConsumerWidget { + const CategoriesDrawer({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return Drawer( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + DrawerHeader( + child: Text( + 'Todo-List Demo with drift', + style: Theme.of(context) + .textTheme + .subtitle1 + ?.copyWith(color: Colors.white), + ), + decoration: const BoxDecoration(color: Colors.orange), + ), + Flexible( + child: StreamBuilder>( + stream: ref.watch(AppDatabase.provider).categoriesWithCount(), + builder: (context, snapshot) { + final categories = snapshot.data ?? []; + + return ListView.builder( + itemBuilder: (context, index) { + return _CategoryDrawerEntry(entry: categories[index]); + }, + itemCount: categories.length, + ); + }, + ), + ), + ], + ), + ); + } +} + +class _CategoryDrawerEntry extends ConsumerWidget { + final CategoryWithCount entry; + + const _CategoryDrawerEntry({Key? key, required this.entry}) : super(key: key); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final category = entry.category; + final isActive = ref.watch(activeCategory)?.id == category?.id; + + String title; + if (category == null) { + title = 'No category'; + } else { + title = category.name; + } + + final rowContent = [ + if (category != null) + Padding( + padding: const EdgeInsets.only(right: 10), + child: GestureDetector( + onTap: () async { + final newColor = await _selectColor(context, category.color); + if (newColor != null) { + final update = ref + .read(AppDatabase.provider) + .categories + .update() + ..whereSamePrimaryKey(category); + await update.write(CategoriesCompanion(color: Value(newColor))); + } + }, + child: DecoratedBox( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: category.color, + ), + child: const SizedBox.square(dimension: 20), + ), + ), + ), + Text( + title, + style: TextStyle( + fontWeight: FontWeight.bold, + color: + isActive ? Theme.of(context).colorScheme.secondary : Colors.black, + ), + ), + Padding( + padding: const EdgeInsets.all(8), + child: Text('${entry.count} entries'), + ), + ]; + + // also show a delete button if the category can be deleted + if (category != null) { + rowContent.addAll([ + const Spacer(), + IconButton( + icon: const Icon(Icons.delete_outline), + color: Colors.red, + onPressed: () async { + final confirmed = await showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: const Text('Delete'), + content: Text('Really delete category $title?'), + actions: [ + TextButton( + child: const Text('Cancel'), + onPressed: () { + Navigator.pop(context, false); + }, + ), + TextButton( + child: const Text('Delete'), + style: ButtonStyle( + foregroundColor: MaterialStateProperty.all(Colors.red), + ), + onPressed: () { + Navigator.pop(context, true); + }, + ), + ], + ); + }, + ); + + // can be null when the dialog is dismissed + if (confirmed == true) { + ref.read(AppDatabase.provider).categories.deleteOne(category); + } + }, + ), + ]); + } + + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Material( + color: isActive + ? Colors.orangeAccent.withOpacity(0.3) + : Colors.transparent, + borderRadius: BorderRadius.circular(8), + child: InkWell( + onTap: () { + ref.read(activeCategory.notifier).state = category; + Navigator.pop(context); // close the navigation drawer + }, + child: Padding( + padding: const EdgeInsets.all(8), + child: Row( + children: rowContent, + ), + ), + ), + ), + ); + } +} + +Future _selectColor(BuildContext context, Color initial) { + return showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: const Text('Pick a color!'), + content: SingleChildScrollView( + child: BlockPicker( + pickerColor: initial, + onColorChanged: (color) => Navigator.pop(context, color), + ), + // Use Material color picker: + // + // child: MaterialPicker( + // pickerColor: pickerColor, + // onColorChanged: changeColor, + // showLabel: true, // only on portrait mode + // ), + // + // Use Block color picker: + // + // child: BlockPicker( + // pickerColor: currentColor, + // onColorChanged: changeColor, + // ), + // + // child: MultipleChoiceBlockPicker( + // pickerColors: currentColors, + // onColorsChanged: changeColors, + // ), + ), + ); + }, + ); +} diff --git a/examples/app/lib/screens/home/state.dart b/examples/app/lib/screens/home/state.dart new file mode 100644 index 00000000..76f8420c --- /dev/null +++ b/examples/app/lib/screens/home/state.dart @@ -0,0 +1,12 @@ +import 'package:riverpod/riverpod.dart'; + +import '../../database/database.dart'; + +final activeCategory = StateProvider((_) => null); + +final entriesInCategory = StreamProvider((ref) { + final database = ref.watch(AppDatabase.provider); + final current = ref.watch(activeCategory)?.id; + + return database.entriesInCategory(current); +}); diff --git a/examples/app/lib/screens/home/todo_edit_dialog.dart b/examples/app/lib/screens/home/todo_edit_dialog.dart new file mode 100644 index 00000000..efc81720 --- /dev/null +++ b/examples/app/lib/screens/home/todo_edit_dialog.dart @@ -0,0 +1,111 @@ +import 'package:drift/drift.dart' hide Column; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:intl/intl.dart'; + +import '../../database/database.dart'; + +final _dateFormat = DateFormat.yMMMd(); + +class TodoEditDialog extends ConsumerStatefulWidget { + final TodoEntry entry; + + const TodoEditDialog({Key? key, required this.entry}) : super(key: key); + + @override + _TodoEditDialogState createState() => _TodoEditDialogState(); +} + +class _TodoEditDialogState extends ConsumerState { + final TextEditingController textController = TextEditingController(); + DateTime? _dueDate; + + @override + void initState() { + textController.text = widget.entry.description; + _dueDate = widget.entry.dueDate; + super.initState(); + } + + @override + void dispose() { + textController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + var formattedDate = 'No date set'; + if (_dueDate != null) { + formattedDate = _dateFormat.format(_dueDate!); + } + + return AlertDialog( + title: const Text('Edit entry'), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + controller: textController, + decoration: const InputDecoration( + hintText: 'What needs to be done?', + helperText: 'Content of entry', + ), + ), + Row( + children: [ + Text(formattedDate), + const Spacer(), + IconButton( + icon: const Icon(Icons.calendar_today), + onPressed: () async { + final now = DateTime.now(); + final initialDate = _dueDate ?? now; + final firstDate = + initialDate.isBefore(now) ? initialDate : now; + + final selectedDate = await showDatePicker( + context: context, + initialDate: initialDate, + firstDate: firstDate, + lastDate: DateTime(3000), + ); + + setState(() { + if (selectedDate != null) _dueDate = selectedDate; + }); + }, + ), + ], + ), + ], + ), + actions: [ + TextButton( + child: const Text('Cancel'), + style: ButtonStyle( + textStyle: MaterialStateProperty.all( + const TextStyle(color: Colors.black), + ), + ), + onPressed: () { + Navigator.pop(context); + }, + ), + TextButton( + child: const Text('Save'), + onPressed: () { + final updatedContent = textController.text; + final entry = widget.entry.copyWith( + description: updatedContent.isNotEmpty ? updatedContent : null, + dueDate: Value(_dueDate), + ); + + ref.read(AppDatabase.provider).todoEntries.replaceOne(entry); + Navigator.pop(context); + }, + ), + ], + ); + } +} diff --git a/examples/app/lib/screens/search.dart b/examples/app/lib/screens/search.dart new file mode 100644 index 00000000..4f204c88 --- /dev/null +++ b/examples/app/lib/screens/search.dart @@ -0,0 +1,74 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../database/database.dart'; +import 'home/card.dart'; + +class SearchPage extends ConsumerStatefulWidget { + const SearchPage({Key? key}) : super(key: key); + + @override + ConsumerState createState() => _SearchPageState(); +} + +class _SearchPageState extends ConsumerState { + final TextEditingController _controller = TextEditingController(); + String _text = ''; + Future>? _search; + + @override + void initState() { + _controller.addListener(() { + setState(() { + if (_text != _controller.text && _controller.text.isNotEmpty) { + _text = _controller.text; + _search = ref.read(AppDatabase.provider).search(_text); + } + }); + }); + super.initState(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: TextField( + decoration: const InputDecoration( + hintText: 'Search for todos across all categories', + ), + textInputAction: TextInputAction.search, + controller: _controller, + ), + ), + body: _search == null + ? const Align( + alignment: Alignment.center, + child: Text('Enter text to start searching'), + ) + : FutureBuilder>( + future: _search, + builder: (context, snapshot) { + if (snapshot.hasData) { + final results = snapshot.data!; + + return ListView.builder( + itemCount: results.length, + itemBuilder: (context, index) { + return TodoCard(results[index].entry); + }, + ); + } else { + return const CircularProgressIndicator(); + } + }, + ), + ); + } +} diff --git a/examples/app/linux/.gitignore b/examples/app/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/examples/app/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/examples/app/linux/CMakeLists.txt b/examples/app/linux/CMakeLists.txt new file mode 100644 index 00000000..5c553c66 --- /dev/null +++ b/examples/app/linux/CMakeLists.txt @@ -0,0 +1,116 @@ +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +set(BINARY_NAME "app") +set(APPLICATION_ID "com.example.app") + +cmake_policy(SET CMP0063 NEW) + +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Configure build options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") + +# Flutter library and tool build rules. +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Application build +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) +apply_standard_settings(${BINARY_NAME}) +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +add_dependencies(${BINARY_NAME} flutter_assemble) +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/examples/app/linux/flutter/CMakeLists.txt b/examples/app/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..33fd5801 --- /dev/null +++ b/examples/app/linux/flutter/CMakeLists.txt @@ -0,0 +1,87 @@ +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/examples/app/linux/flutter/generated_plugin_registrant.cc b/examples/app/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..2c1ec4fe --- /dev/null +++ b/examples/app/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin"); + sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar); +} diff --git a/examples/app/linux/flutter/generated_plugin_registrant.h b/examples/app/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/examples/app/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/examples/app/linux/flutter/generated_plugins.cmake b/examples/app/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..3a31c679 --- /dev/null +++ b/examples/app/linux/flutter/generated_plugins.cmake @@ -0,0 +1,16 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + sqlite3_flutter_libs +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) diff --git a/examples/app/linux/main.cc b/examples/app/linux/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/examples/app/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/examples/app/linux/my_application.cc b/examples/app/linux/my_application.cc new file mode 100644 index 00000000..42d9b08a --- /dev/null +++ b/examples/app/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/examples/app/linux/my_application.h b/examples/app/linux/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/examples/app/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/examples/app/pubspec.yaml b/examples/app/pubspec.yaml new file mode 100644 index 00000000..1cf1d2da --- /dev/null +++ b/examples/app/pubspec.yaml @@ -0,0 +1,49 @@ +name: app +description: A cross-platform todo tracker built with drift. +publish_to: 'none' + +version: 1.0.0+1 + +environment: + sdk: ">=2.16.1 <3.0.0" + +dependencies: + flutter: + sdk: flutter + drift: + flutter_colorpicker: ^1.0.3 + flutter_riverpod: ^1.0.3 + go_router: ^3.0.6 + intl: ^0.17.0 + sqlite3_flutter_libs: ^0.5.5 + path_provider: ^2.0.9 + path: ^1.8.0 + riverpod: ^1.0.3 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^1.0.0 + build_runner: ^2.1.8 + # We use this to compile the shared web worker for the web database. This dependency + # isn't required for most apps. You only need it if you want to target the web, use + # web workers for drift AND want to compile those web workers through `build_runner`. + # Either way, using this package with Flutter requires a delicate setup described in + # `build.yaml`. + build_web_compilers: ^3.2.2 + build: ^2.2.1 + drift_dev: + +flutter: + uses-material-design: true + +# We override dependencies to ensure that we always use the packages from +# this repository. In your app, just depend on the latest drift version. +dependency_overrides: + js: ^0.6.4 # temporarily added because sqlite3 depends on this, and flutter hasn't caught up yet. + drift: + path: ../../drift + drift_dev: + path: ../../drift_dev + sqlparser: + path: ../../sqlparser \ No newline at end of file diff --git a/examples/app/test/database_test.dart b/examples/app/test/database_test.dart new file mode 100644 index 00000000..dbbaa4e1 --- /dev/null +++ b/examples/app/test/database_test.dart @@ -0,0 +1,24 @@ +// Example on how to test your application's database code. +import 'package:app/database/database.dart'; +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + late AppDatabase database; + + setUp(() { + final inMemory = DatabaseConnection.fromExecutor(NativeDatabase.memory()); + database = AppDatabase.forTesting(inMemory); + }); + + tearDown(() => database.close()); + + test('can search for todo entries', () async { + final entry = await database.todoEntries.insertReturning( + TodoEntriesCompanion.insert(description: 'test todo entry')); + + final result = await database.search('test'); + expect(result.map((e) => e.entry), contains(entry)); + }); +} diff --git a/examples/app/test/generated_migrations/schema.dart b/examples/app/test/generated_migrations/schema.dart new file mode 100644 index 00000000..cfa20213 --- /dev/null +++ b/examples/app/test/generated_migrations/schema.dart @@ -0,0 +1,20 @@ +// GENERATED CODE, DO NOT EDIT BY HAND. +//@dart=2.12 +import 'package:drift/drift.dart'; +import 'package:drift_dev/api/migrations.dart'; +import 'schema_v2.dart' as v2; +import 'schema_v1.dart' as v1; + +class GeneratedHelper implements SchemaInstantiationHelper { + @override + GeneratedDatabase databaseForVersion(QueryExecutor db, int version) { + switch (version) { + case 2: + return v2.DatabaseAtV2(db); + case 1: + return v1.DatabaseAtV1(db); + default: + throw MissingSchemaException(version, const {2, 1}); + } + } +} diff --git a/examples/app/test/generated_migrations/schema_v1.dart b/examples/app/test/generated_migrations/schema_v1.dart new file mode 100644 index 00000000..1df9e323 --- /dev/null +++ b/examples/app/test/generated_migrations/schema_v1.dart @@ -0,0 +1,127 @@ +// GENERATED CODE, DO NOT EDIT BY HAND. +//@dart=2.12 +import 'package:drift/drift.dart'; + +class Categories extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Categories(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: const IntType(), + requiredDuringInsert: false, + defaultConstraints: 'PRIMARY KEY AUTOINCREMENT'); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: const StringType(), requiredDuringInsert: true); + late final GeneratedColumn color = GeneratedColumn( + 'color', aliasedName, false, + type: const IntType(), requiredDuringInsert: true); + @override + List get $columns => [id, name, color]; + @override + String get aliasedName => _alias ?? 'categories'; + @override + String get actualTableName => 'categories'; + @override + Set get $primaryKey => {id}; + @override + Never map(Map data, {String? tablePrefix}) { + throw UnsupportedError('TableInfo.map in schema verification code'); + } + + @override + Categories createAlias(String alias) { + return Categories(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => false; +} + +class TodoEntries extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + TodoEntries(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: const IntType(), + requiredDuringInsert: false, + defaultConstraints: 'PRIMARY KEY AUTOINCREMENT'); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, false, + type: const StringType(), requiredDuringInsert: true); + late final GeneratedColumn category = GeneratedColumn( + 'category', aliasedName, true, + type: const IntType(), requiredDuringInsert: false); + @override + List get $columns => [id, description, category]; + @override + String get aliasedName => _alias ?? 'todo_entries'; + @override + String get actualTableName => 'todo_entries'; + @override + Set get $primaryKey => {id}; + @override + Never map(Map data, {String? tablePrefix}) { + throw UnsupportedError('TableInfo.map in schema verification code'); + } + + @override + TodoEntries createAlias(String alias) { + return TodoEntries(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => false; +} + +class text_entriesTable extends Table with TableInfo, VirtualTableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + text_entriesTable(this.attachedDatabase, [this._alias]); + @override + List get $columns => []; + @override + String get aliasedName => _alias ?? 'text_entries'; + @override + String get actualTableName => 'text_entries'; + @override + Set get $primaryKey => {}; + @override + Never map(Map data, {String? tablePrefix}) { + throw UnsupportedError('TableInfo.map in schema verification code'); + } + + @override + text_entriesTable createAlias(String alias) { + return text_entriesTable(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => true; + @override + String get moduleAndArgs => + 'fts5(description, content=todo_entries, content_rowid=id)'; +} + +class DatabaseAtV1 extends GeneratedDatabase { + DatabaseAtV1(QueryExecutor e) : super(SqlTypeSystem.defaultInstance, e); + DatabaseAtV1.connect(DatabaseConnection c) : super.connect(c); + late final Categories categories = Categories(this); + late final TodoEntries todoEntries = TodoEntries(this); + late final text_entriesTable textEntries = text_entriesTable(this); + late final Trigger todosInsert = Trigger( + 'CREATE TRIGGER todos_insert AFTER INSERT ON todo_entries BEGIN\n INSERT INTO text_entries(rowid, description) VALUES (new.id, new.description);\nEND;', + 'todos_insert'); + @override + Iterable get allTables => allSchemaEntities.whereType(); + @override + List get allSchemaEntities => + [categories, todoEntries, textEntries, todosInsert]; + @override + int get schemaVersion => 1; +} diff --git a/examples/app/test/generated_migrations/schema_v2.dart b/examples/app/test/generated_migrations/schema_v2.dart new file mode 100644 index 00000000..7ecd59cb --- /dev/null +++ b/examples/app/test/generated_migrations/schema_v2.dart @@ -0,0 +1,130 @@ +// GENERATED CODE, DO NOT EDIT BY HAND. +//@dart=2.12 +import 'package:drift/drift.dart'; + +class Categories extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Categories(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: const IntType(), + requiredDuringInsert: false, + defaultConstraints: 'PRIMARY KEY AUTOINCREMENT'); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: const StringType(), requiredDuringInsert: true); + late final GeneratedColumn color = GeneratedColumn( + 'color', aliasedName, false, + type: const IntType(), requiredDuringInsert: true); + @override + List get $columns => [id, name, color]; + @override + String get aliasedName => _alias ?? 'categories'; + @override + String get actualTableName => 'categories'; + @override + Set get $primaryKey => {id}; + @override + Never map(Map data, {String? tablePrefix}) { + throw UnsupportedError('TableInfo.map in schema verification code'); + } + + @override + Categories createAlias(String alias) { + return Categories(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => false; +} + +class TodoEntries extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + TodoEntries(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: const IntType(), + requiredDuringInsert: false, + defaultConstraints: 'PRIMARY KEY AUTOINCREMENT'); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, false, + type: const StringType(), requiredDuringInsert: true); + late final GeneratedColumn category = GeneratedColumn( + 'category', aliasedName, true, + type: const IntType(), requiredDuringInsert: false); + late final GeneratedColumn dueDate = GeneratedColumn( + 'due_date', aliasedName, true, + type: const IntType(), requiredDuringInsert: false); + @override + List get $columns => [id, description, category, dueDate]; + @override + String get aliasedName => _alias ?? 'todo_entries'; + @override + String get actualTableName => 'todo_entries'; + @override + Set get $primaryKey => {id}; + @override + Never map(Map data, {String? tablePrefix}) { + throw UnsupportedError('TableInfo.map in schema verification code'); + } + + @override + TodoEntries createAlias(String alias) { + return TodoEntries(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => false; +} + +class text_entriesTable extends Table with TableInfo, VirtualTableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + text_entriesTable(this.attachedDatabase, [this._alias]); + @override + List get $columns => []; + @override + String get aliasedName => _alias ?? 'text_entries'; + @override + String get actualTableName => 'text_entries'; + @override + Set get $primaryKey => {}; + @override + Never map(Map data, {String? tablePrefix}) { + throw UnsupportedError('TableInfo.map in schema verification code'); + } + + @override + text_entriesTable createAlias(String alias) { + return text_entriesTable(attachedDatabase, alias); + } + + @override + bool get dontWriteConstraints => true; + @override + String get moduleAndArgs => + 'fts5(description, content=todo_entries, content_rowid=id)'; +} + +class DatabaseAtV2 extends GeneratedDatabase { + DatabaseAtV2(QueryExecutor e) : super(SqlTypeSystem.defaultInstance, e); + DatabaseAtV2.connect(DatabaseConnection c) : super.connect(c); + late final Categories categories = Categories(this); + late final TodoEntries todoEntries = TodoEntries(this); + late final text_entriesTable textEntries = text_entriesTable(this); + late final Trigger todosInsert = Trigger( + 'CREATE TRIGGER todos_insert AFTER INSERT ON todo_entries BEGIN\n INSERT INTO text_entries(rowid, description) VALUES (new.id, new.description);\nEND;', + 'todos_insert'); + @override + Iterable get allTables => allSchemaEntities.whereType(); + @override + List get allSchemaEntities => + [categories, todoEntries, textEntries, todosInsert]; + @override + int get schemaVersion => 2; +} diff --git a/examples/app/test/migration_test.dart b/examples/app/test/migration_test.dart new file mode 100644 index 00000000..4b228286 --- /dev/null +++ b/examples/app/test/migration_test.dart @@ -0,0 +1,29 @@ +import 'package:app/database/database.dart'; +import 'package:drift_dev/api/migrations.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'generated_migrations/schema.dart'; + +void main() { + late SchemaVerifier verifier; + + setUpAll(() { + // GeneratedHelper() was generated by drift, the verifier is an api + // provided by drift_dev. + verifier = SchemaVerifier(GeneratedHelper()); + }); + + test('upgrade from v1 to v2', () async { + // Use startAt(1) to obtain a database connection with all tables + // from the v1 schema. + final connection = await verifier.startAt(1); + final db = AppDatabase.forTesting(connection); + + // Use this to run a migration to v2 and then validate that the + // database has the expected schema. + await verifier.migrateAndValidate(db, 2); + }); + + // For more details on schema migration tests, see + // https://drift.simonbinder.eu/docs/advanced-features/migrations/#verifying-migrations +} diff --git a/examples/app/tool/builder.dart b/examples/app/tool/builder.dart new file mode 100644 index 00000000..c559c98d --- /dev/null +++ b/examples/app/tool/builder.dart @@ -0,0 +1,17 @@ +import 'package:build/build.dart'; + +class CopyCompiledJs extends Builder { + CopyCompiledJs([BuilderOptions? options]); + + @override + Future build(BuildStep buildStep) async { + final inputId = AssetId(buildStep.inputId.package, 'web/worker.dart.js'); + final input = await buildStep.readAsBytes(inputId); + await buildStep.writeAsBytes(buildStep.allowedOutputs.single, input); + } + + @override + Map> get buildExtensions => { + r'$package$': ['web/shared_worker.dart.js'] + }; +} diff --git a/examples/app/web/favicon.png b/examples/app/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/examples/app/web/icons/Icon-192.png b/examples/app/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/examples/app/web/icons/Icon-512.png b/examples/app/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/examples/app/web/icons/Icon-maskable-192.png b/examples/app/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/examples/app/web/icons/Icon-maskable-512.png b/examples/app/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/examples/app/web/index.html b/examples/app/web/index.html new file mode 100644 index 00000000..55ed4806 --- /dev/null +++ b/examples/app/web/index.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + diff --git a/examples/app/web/manifest.json b/examples/app/web/manifest.json new file mode 100644 index 00000000..5620a335 --- /dev/null +++ b/examples/app/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "app", + "short_name": "app", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/examples/app/web/sql-wasm.js b/examples/app/web/sql-wasm.js new file mode 120000 index 00000000..c4123950 --- /dev/null +++ b/examples/app/web/sql-wasm.js @@ -0,0 +1 @@ +../../../extras/integration_tests/web/test/sql-wasm.js \ No newline at end of file diff --git a/examples/app/web/sql-wasm.wasm b/examples/app/web/sql-wasm.wasm new file mode 120000 index 00000000..081e1764 --- /dev/null +++ b/examples/app/web/sql-wasm.wasm @@ -0,0 +1 @@ +../../../extras/integration_tests/web/test/sql-wasm.wasm \ No newline at end of file diff --git a/examples/app/web/worker.dart b/examples/app/web/worker.dart new file mode 100644 index 00000000..09df774e --- /dev/null +++ b/examples/app/web/worker.dart @@ -0,0 +1,18 @@ +// ignore: avoid_web_libraries_in_flutter +import 'dart:html'; + +import 'package:app/database/connection/web.dart'; +import 'package:drift/web.dart'; +import 'package:drift/remote.dart'; + +void main() { + final self = SharedWorkerGlobalScope.instance; + self.importScripts('sql-wasm.js'); + + final server = DriftServer(connect(isInWebWorker: true)); + + self.onConnect.listen((event) { + final msg = event as MessageEvent; + server.serve(msg.ports.first.channel()); + }); +} diff --git a/examples/app/windows/.gitignore b/examples/app/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/examples/app/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/examples/app/windows/CMakeLists.txt b/examples/app/windows/CMakeLists.txt new file mode 100644 index 00000000..9ba329fa --- /dev/null +++ b/examples/app/windows/CMakeLists.txt @@ -0,0 +1,95 @@ +cmake_minimum_required(VERSION 3.14) +project(app LANGUAGES CXX) + +set(BINARY_NAME "app") + +cmake_policy(SET CMP0063 NEW) + +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Configure build options. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() + +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") + +# Flutter library and tool build rules. +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build +add_subdirectory("runner") + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/examples/app/windows/flutter/CMakeLists.txt b/examples/app/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..b2e4bd8d --- /dev/null +++ b/examples/app/windows/flutter/CMakeLists.txt @@ -0,0 +1,103 @@ +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/examples/app/windows/flutter/generated_plugin_registrant.cc b/examples/app/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..988f3c8f --- /dev/null +++ b/examples/app/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + Sqlite3FlutterLibsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin")); +} diff --git a/examples/app/windows/flutter/generated_plugin_registrant.h b/examples/app/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/examples/app/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/examples/app/windows/flutter/generated_plugins.cmake b/examples/app/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..f170ff1c --- /dev/null +++ b/examples/app/windows/flutter/generated_plugins.cmake @@ -0,0 +1,16 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + sqlite3_flutter_libs +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) diff --git a/examples/app/windows/runner/CMakeLists.txt b/examples/app/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..de2d8916 --- /dev/null +++ b/examples/app/windows/runner/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) +apply_standard_settings(${BINARY_NAME}) +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/examples/app/windows/runner/Runner.rc b/examples/app/windows/runner/Runner.rc new file mode 100644 index 00000000..645c9828 --- /dev/null +++ b/examples/app/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#ifdef FLUTTER_BUILD_NUMBER +#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#else +#define VERSION_AS_NUMBER 1,0,0 +#endif + +#ifdef FLUTTER_BUILD_NAME +#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "app" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "app" "\0" + VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "app.exe" "\0" + VALUE "ProductName", "app" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/examples/app/windows/runner/flutter_window.cpp b/examples/app/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..b43b9095 --- /dev/null +++ b/examples/app/windows/runner/flutter_window.cpp @@ -0,0 +1,61 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/examples/app/windows/runner/flutter_window.h b/examples/app/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/examples/app/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/examples/app/windows/runner/main.cpp b/examples/app/windows/runner/main.cpp new file mode 100644 index 00000000..4d470b48 --- /dev/null +++ b/examples/app/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.CreateAndShow(L"app", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/examples/app/windows/runner/resource.h b/examples/app/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/examples/app/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/examples/app/windows/runner/resources/app_icon.ico b/examples/app/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/examples/app/windows/runner/runner.exe.manifest b/examples/app/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..c977c4a4 --- /dev/null +++ b/examples/app/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/examples/app/windows/runner/utils.cpp b/examples/app/windows/runner/utils.cpp new file mode 100644 index 00000000..d19bdbbc --- /dev/null +++ b/examples/app/windows/runner/utils.cpp @@ -0,0 +1,64 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr); + if (target_length == 0) { + return std::string(); + } + std::string utf8_string; + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, utf8_string.data(), + target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/examples/app/windows/runner/utils.h b/examples/app/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/examples/app/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/examples/app/windows/runner/win32_window.cpp b/examples/app/windows/runner/win32_window.cpp new file mode 100644 index 00000000..c10f08dc --- /dev/null +++ b/examples/app/windows/runner/win32_window.cpp @@ -0,0 +1,245 @@ +#include "win32_window.h" + +#include + +#include "resource.h" + +namespace { + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + FreeLibrary(user32_module); + } +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::CreateAndShow(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + return OnCreate(); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} diff --git a/examples/app/windows/runner/win32_window.h b/examples/app/windows/runner/win32_window.h new file mode 100644 index 00000000..17ba4311 --- /dev/null +++ b/examples/app/windows/runner/win32_window.h @@ -0,0 +1,98 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates and shows a win32 window with |title| and position and size using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size to will treat the width height passed in to this function + // as logical pixels and scale to appropriate for the default monitor. Returns + // true if the window was created successfully. + bool CreateAndShow(const std::wstring& title, + const Point& origin, + const Size& size); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responsponds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 49b215facd888f8f17e1b48b8dc9c3877cfa550f Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Sat, 2 Apr 2022 18:04:52 +0200 Subject: [PATCH 12/15] Add experimental wasm backend --- drift/lib/native.dart | 157 ++++++++++- drift/lib/src/ffi/database.dart | 261 ------------------ drift/lib/src/sqlite3/database.dart | 152 ++++++++++ .../{ffi => sqlite3}/database_tracker.dart | 0 .../{ffi => sqlite3}/native_functions.dart | 4 +- drift/lib/wasm.dart | 60 ++++ drift/pubspec.yaml | 2 + drift/test/ffi/moor_functions_test.dart | 2 +- 8 files changed, 372 insertions(+), 266 deletions(-) delete mode 100644 drift/lib/src/ffi/database.dart create mode 100644 drift/lib/src/sqlite3/database.dart rename drift/lib/src/{ffi => sqlite3}/database_tracker.dart (100%) rename drift/lib/src/{ffi => sqlite3}/native_functions.dart (98%) create mode 100644 drift/lib/wasm.dart diff --git a/drift/lib/native.dart b/drift/lib/native.dart index 01c25aef..27b8a512 100644 --- a/drift/lib/native.dart +++ b/drift/lib/native.dart @@ -9,7 +9,160 @@ /// For more information other platforms, see [other engines](https://drift.simonbinder.eu/docs/other-engines/vm/). library drift.ffi; -import 'src/ffi/database.dart'; +import 'dart:io'; + +import 'package:meta/meta.dart'; +import 'package:sqlite3/common.dart'; +import 'package:sqlite3/sqlite3.dart'; + +import 'backends.dart'; +import 'src/sqlite3/database.dart'; +import 'src/sqlite3/database_tracker.dart'; export 'package:sqlite3/sqlite3.dart' show SqliteException; -export 'src/ffi/database.dart'; + +/// Signature of a function that can perform setup work on a [database] before +/// drift is fully ready. +/// +/// This could be used to, for instance, set encryption keys for SQLCipher +/// implementations. +typedef DatabaseSetup = void Function(Database database); + +/// A drift database implementation based on `dart:ffi`, running directly in a +/// Dart VM or an AOT compiled Dart/Flutter application. +class NativeDatabase extends DelegatedDatabase { + NativeDatabase._(DatabaseDelegate delegate, bool logStatements) + : super(delegate, isSequential: true, logStatements: logStatements); + + /// Creates a database that will store its result in the [file], creating it + /// if it doesn't exist. + /// + /// {@template drift_vm_database_factory} + /// If [logStatements] is true (defaults to `false`), generated sql statements + /// will be printed before executing. This can be useful for debugging. + /// The optional [setup] function can be used to perform a setup just after + /// the database is opened, before drift is fully ready. This can be used to + /// add custom user-defined sql functions or to provide encryption keys in + /// SQLCipher implementations. + /// {@endtemplate} + factory NativeDatabase(File file, + {bool logStatements = false, DatabaseSetup? setup}) { + return NativeDatabase._(_NativeDelegate(file, setup), logStatements); + } + + /// Creates an in-memory database won't persist its changes on disk. + /// + /// {@macro drift_vm_database_factory} + factory NativeDatabase.memory( + {bool logStatements = false, DatabaseSetup? setup}) { + return NativeDatabase._(_NativeDelegate(null, setup), logStatements); + } + + /// Creates a drift executor for an opened [database] from the `sqlite3` + /// package. + /// + /// When the [closeUnderlyingOnClose] argument is set (which is the default), + /// calling [QueryExecutor.close] on the returned [NativeDatabase] will also + /// [CommonDatabase.dispose] the [database] passed to this constructor. + /// + /// Using [NativeDatabase.opened] may be useful when you want to use the same + /// underlying [Database] in multiple drift connections. Drift uses this + /// internally when running [integration tests for migrations](https://drift.simonbinder.eu/docs/advanced-features/migrations/#verifying-migrations). + /// + /// {@macro drift_vm_database_factory} + factory NativeDatabase.opened(Database database, + {bool logStatements = false, + DatabaseSetup? setup, + bool closeUnderlyingOnClose = true}) { + return NativeDatabase._( + _NativeDelegate.opened(database, setup, closeUnderlyingOnClose), + logStatements); + } + + /// Disposes resources allocated by all `VmDatabase` instances of this + /// process. + /// + /// This method will call `sqlite3_close_v2` for every `VmDatabase` that this + /// process has opened without closing later. + /// + /// __Warning__: This functionality appears to cause crashes on iOS, and it + /// does nothing on Android. It's mainly intended for Desktop operating + /// systems, so try to avoid calling it where it's not necessary. + /// For safety measures, avoid calling [closeExistingInstances] in release + /// builds. + /// + /// Ideally, all databases should be closed properly in Dart. In that case, + /// it's not necessary to call [closeExistingInstances]. However, features + /// like hot (stateless) restart can make it impossible to reliably close + /// every database. In that case, we leak native sqlite3 database connections + /// that aren't referenced by any Dart object. Drift can track those + /// connections across Dart VM restarts by storing them in an in-memory sqlite + /// database. + /// Calling this method can cleanup resources and database locks after a + /// restart. + /// + /// Note that calling [closeExistingInstances] when you're still actively + /// using a [NativeDatabase] can lead to crashes, since the database would + /// then attempt to use an invalid connection. + /// This, this method should only be called when you're certain that there + /// aren't any active [NativeDatabase]s, not even on another isolate. + /// + /// A suitable place to call [closeExistingInstances] is at an early stage + /// of your `main` method, before you're using drift. + /// + /// ```dart + /// void main() { + /// // Guard against zombie database connections caused by hot restarts + /// assert(() { + /// VmDatabase.closeExistingInstances(); + /// return true; + /// }()); + /// + /// runApp(MyApp()); + /// } + /// ``` + /// + /// For more information, see [issue 835](https://github.com/simolus3/drift/issues/835). + @experimental + static void closeExistingInstances() { + tracker.closeExisting(); + } +} + +class _NativeDelegate extends Sqlite3Delegate { + final File? file; + + _NativeDelegate(this.file, DatabaseSetup? setup) : super(setup); + + _NativeDelegate.opened( + Database db, DatabaseSetup? setup, bool closeUnderlyingWhenClosed) + : file = null, + super.opened(db, setup, closeUnderlyingWhenClosed); + + @override + Database openDatabase() { + final file = this.file; + Database db; + + if (file != null) { + // Create the parent directory if it doesn't exist. sqlite will emit + // confusing misuse warnings otherwise + final dir = file.parent; + if (!dir.existsSync()) { + dir.createSync(recursive: true); + } + + db = sqlite3.open(file.path); + tracker.markOpened(file.path, db); + } else { + db = sqlite3.openInMemory(); + } + + return db; + } + + @override + void beforeClose(Database database) { + tracker.markClosed(database); + } +} diff --git a/drift/lib/src/ffi/database.dart b/drift/lib/src/ffi/database.dart deleted file mode 100644 index 2503e750..00000000 --- a/drift/lib/src/ffi/database.dart +++ /dev/null @@ -1,261 +0,0 @@ -import 'dart:io'; - -import 'package:meta/meta.dart'; -import 'package:sqlite3/common.dart'; -import 'package:sqlite3/sqlite3.dart'; - -import '../../backends.dart'; -import 'database_tracker.dart'; -import 'native_functions.dart'; - -/// Signature of a function that can perform setup work on a [database] before -/// drift is fully ready. -/// -/// This could be used to, for instance, set encryption keys for SQLCipher -/// implementations. -typedef DatabaseSetup = void Function(Database database); - -/// A drift database implementation based on `dart:ffi`, running directly in a -/// Dart VM or an AOT compiled Dart/Flutter application. -class NativeDatabase extends DelegatedDatabase { - NativeDatabase._(DatabaseDelegate delegate, bool logStatements) - : super(delegate, isSequential: true, logStatements: logStatements); - - /// Creates a database that will store its result in the [file], creating it - /// if it doesn't exist. - /// - /// {@template drift_vm_database_factory} - /// If [logStatements] is true (defaults to `false`), generated sql statements - /// will be printed before executing. This can be useful for debugging. - /// The optional [setup] function can be used to perform a setup just after - /// the database is opened, before drift is fully ready. This can be used to - /// add custom user-defined sql functions or to provide encryption keys in - /// SQLCipher implementations. - /// {@endtemplate} - factory NativeDatabase(File file, - {bool logStatements = false, DatabaseSetup? setup}) { - return NativeDatabase._(_VmDelegate(file, setup), logStatements); - } - - /// Creates an in-memory database won't persist its changes on disk. - /// - /// {@macro drift_vm_database_factory} - factory NativeDatabase.memory( - {bool logStatements = false, DatabaseSetup? setup}) { - return NativeDatabase._(_VmDelegate(null, setup), logStatements); - } - - /// Creates a drift executor for an opened [database] from the `sqlite3` - /// package. - /// - /// When the [closeUnderlyingOnClose] argument is set (which is the default), - /// calling [QueryExecutor.close] on the returned [NativeDatabase] will also - /// [CommonDatabase.dispose] the [database] passed to this constructor. - /// - /// Using [NativeDatabase.opened] may be useful when you want to use the same - /// underlying [Database] in multiple drift connections. Drift uses this - /// internally when running [integration tests for migrations](https://drift.simonbinder.eu/docs/advanced-features/migrations/#verifying-migrations). - /// - /// {@macro drift_vm_database_factory} - factory NativeDatabase.opened(Database database, - {bool logStatements = false, - DatabaseSetup? setup, - bool closeUnderlyingOnClose = true}) { - return NativeDatabase._( - _VmDelegate._opened(database, setup, closeUnderlyingOnClose), - logStatements); - } - - /// Disposes resources allocated by all `VmDatabase` instances of this - /// process. - /// - /// This method will call `sqlite3_close_v2` for every `VmDatabase` that this - /// process has opened without closing later. - /// - /// __Warning__: This functionality appears to cause crashes on iOS, and it - /// does nothing on Android. It's mainly intended for Desktop operating - /// systems, so try to avoid calling it where it's not necessary. - /// For safety measures, avoid calling [closeExistingInstances] in release - /// builds. - /// - /// Ideally, all databases should be closed properly in Dart. In that case, - /// it's not necessary to call [closeExistingInstances]. However, features - /// like hot (stateless) restart can make it impossible to reliably close - /// every database. In that case, we leak native sqlite3 database connections - /// that aren't referenced by any Dart object. Drift can track those - /// connections across Dart VM restarts by storing them in an in-memory sqlite - /// database. - /// Calling this method can cleanup resources and database locks after a - /// restart. - /// - /// Note that calling [closeExistingInstances] when you're still actively - /// using a [NativeDatabase] can lead to crashes, since the database would - /// then attempt to use an invalid connection. - /// This, this method should only be called when you're certain that there - /// aren't any active [NativeDatabase]s, not even on another isolate. - /// - /// A suitable place to call [closeExistingInstances] is at an early stage - /// of your `main` method, before you're using drift. - /// - /// ```dart - /// void main() { - /// // Guard against zombie database connections caused by hot restarts - /// assert(() { - /// VmDatabase.closeExistingInstances(); - /// return true; - /// }()); - /// - /// runApp(MyApp()); - /// } - /// ``` - /// - /// For more information, see [issue 835](https://github.com/simolus3/drift/issues/835). - @experimental - static void closeExistingInstances() { - tracker.closeExisting(); - } -} - -class _VmDelegate extends DatabaseDelegate { - late Database _db; - - bool _hasCreatedDatabase = false; - bool _isOpen = false; - - final File? file; - final DatabaseSetup? setup; - final bool closeUnderlyingWhenClosed; - - _VmDelegate(this.file, this.setup) : closeUnderlyingWhenClosed = true; - - _VmDelegate._opened(this._db, this.setup, this.closeUnderlyingWhenClosed) - : file = null, - _hasCreatedDatabase = true { - _initializeDatabase(); - } - - @override - TransactionDelegate get transactionDelegate => const NoTransactionDelegate(); - - @override - late DbVersionDelegate versionDelegate; - - @override - Future get isOpen => Future.value(_isOpen); - - @override - Future open(QueryExecutorUser user) async { - if (!_hasCreatedDatabase) { - _createDatabase(); - _initializeDatabase(); - } - - _isOpen = true; - return Future.value(); - } - - void _createDatabase() { - assert(!_hasCreatedDatabase); - _hasCreatedDatabase = true; - - final file = this.file; - if (file != null) { - // Create the parent directory if it doesn't exist. sqlite will emit - // confusing misuse warnings otherwise - final dir = file.parent; - if (!dir.existsSync()) { - dir.createSync(recursive: true); - } - - _db = sqlite3.open(file.path); - tracker.markOpened(file.path, _db); - } else { - _db = sqlite3.openInMemory(); - } - } - - void _initializeDatabase() { - _db.useNativeFunctions(); - setup?.call(_db); - versionDelegate = _VmVersionDelegate(_db); - } - - @override - Future runBatched(BatchedStatements statements) async { - final prepared = [ - for (final stmt in statements.statements) - _db.prepare(stmt, checkNoTail: true), - ]; - - for (final application in statements.arguments) { - final stmt = prepared[application.statementIndex]; - - stmt.execute(application.arguments); - } - - for (final stmt in prepared) { - stmt.dispose(); - } - - return Future.value(); - } - - Future _runWithArgs(String statement, List args) async { - if (args.isEmpty) { - _db.execute(statement); - } else { - final stmt = _db.prepare(statement, checkNoTail: true); - stmt.execute(args); - stmt.dispose(); - } - } - - @override - Future runCustom(String statement, List args) async { - await _runWithArgs(statement, args); - } - - @override - Future runInsert(String statement, List args) async { - await _runWithArgs(statement, args); - return _db.lastInsertRowId; - } - - @override - Future runUpdate(String statement, List args) async { - await _runWithArgs(statement, args); - return _db.getUpdatedRows(); - } - - @override - Future runSelect(String statement, List args) async { - final stmt = _db.prepare(statement, checkNoTail: true); - final result = stmt.select(args); - stmt.dispose(); - - return Future.value(QueryResult.fromRows(result.toList())); - } - - @override - Future close() async { - if (closeUnderlyingWhenClosed) { - _db.dispose(); - tracker.markClosed(_db); - } - } -} - -class _VmVersionDelegate extends DynamicVersionDelegate { - final Database database; - - _VmVersionDelegate(this.database); - - @override - Future get schemaVersion => Future.value(database.userVersion); - - @override - Future setSchemaVersion(int version) { - database.userVersion = version; - return Future.value(); - } -} diff --git a/drift/lib/src/sqlite3/database.dart b/drift/lib/src/sqlite3/database.dart new file mode 100644 index 00000000..522b7133 --- /dev/null +++ b/drift/lib/src/sqlite3/database.dart @@ -0,0 +1,152 @@ +@internal +import 'package:meta/meta.dart'; +import 'package:sqlite3/common.dart'; + +import '../../backends.dart'; +import 'native_functions.dart'; + +/// Common database implementation based on the `sqlite3` database. +/// +/// Depending on the actual platform (reflected by [DB]), the database is either +/// a native database accessed through `dart:ffi` or a WASM database accessed +/// through `package:js`. +abstract class Sqlite3Delegate + extends DatabaseDelegate { + late DB _db; + + bool _hasCreatedDatabase = false; + bool _isOpen = false; + + final void Function(DB)? _setup; + final bool _closeUnderlyingWhenClosed; + + /// A delegate that will call [openDatabase] to open the database. + Sqlite3Delegate(this._setup) : _closeUnderlyingWhenClosed = true; + + /// A delegate using an underlying sqlite3 database object that has alreaddy + /// been opened. + Sqlite3Delegate.opened(this._db, this._setup, this._closeUnderlyingWhenClosed) + : _hasCreatedDatabase = true { + _initializeDatabase(); + } + + /// This method is overridden by the platform-specific implementation to open + /// the right sqlite3 database instance. + DB openDatabase(); + + /// This method may optionally be overridden by the platform-specific + /// implementation to get notified before a database would be closed. + void beforeClose(DB database) {} + + @override + TransactionDelegate get transactionDelegate => const NoTransactionDelegate(); + + @override + late DbVersionDelegate versionDelegate; + + @override + Future get isOpen => Future.value(_isOpen); + + @override + Future open(QueryExecutorUser db) async { + if (!_hasCreatedDatabase) { + _createDatabase(); + _initializeDatabase(); + } + + _isOpen = true; + return Future.value(); + } + + void _createDatabase() { + assert(!_hasCreatedDatabase); + _hasCreatedDatabase = true; + + _db = openDatabase(); + } + + void _initializeDatabase() { + _db.useNativeFunctions(); + _setup?.call(_db); + versionDelegate = _VmVersionDelegate(_db); + } + + @override + Future runBatched(BatchedStatements statements) async { + final prepared = [ + for (final stmt in statements.statements) + _db.prepare(stmt, checkNoTail: true), + ]; + + for (final application in statements.arguments) { + final stmt = prepared[application.statementIndex]; + + stmt.execute(application.arguments); + } + + for (final stmt in prepared) { + stmt.dispose(); + } + + return Future.value(); + } + + Future _runWithArgs(String statement, List args) async { + if (args.isEmpty) { + _db.execute(statement); + } else { + final stmt = _db.prepare(statement, checkNoTail: true); + stmt.execute(args); + stmt.dispose(); + } + } + + @override + Future runCustom(String statement, List args) async { + await _runWithArgs(statement, args); + } + + @override + Future runInsert(String statement, List args) async { + await _runWithArgs(statement, args); + return _db.lastInsertRowId; + } + + @override + Future runUpdate(String statement, List args) async { + await _runWithArgs(statement, args); + return _db.getUpdatedRows(); + } + + @override + Future runSelect(String statement, List args) async { + final stmt = _db.prepare(statement, checkNoTail: true); + final result = stmt.select(args); + stmt.dispose(); + + return Future.value(QueryResult.fromRows(result.toList())); + } + + @override + Future close() async { + if (_closeUnderlyingWhenClosed) { + beforeClose(_db); + _db.dispose(); + } + } +} + +class _VmVersionDelegate extends DynamicVersionDelegate { + final CommonDatabase database; + + _VmVersionDelegate(this.database); + + @override + Future get schemaVersion => Future.value(database.userVersion); + + @override + Future setSchemaVersion(int version) { + database.userVersion = version; + return Future.value(); + } +} diff --git a/drift/lib/src/ffi/database_tracker.dart b/drift/lib/src/sqlite3/database_tracker.dart similarity index 100% rename from drift/lib/src/ffi/database_tracker.dart rename to drift/lib/src/sqlite3/database_tracker.dart diff --git a/drift/lib/src/ffi/native_functions.dart b/drift/lib/src/sqlite3/native_functions.dart similarity index 98% rename from drift/lib/src/ffi/native_functions.dart rename to drift/lib/src/sqlite3/native_functions.dart index f799d3fc..4022cb5a 100644 --- a/drift/lib/src/ffi/native_functions.dart +++ b/drift/lib/src/sqlite3/native_functions.dart @@ -1,11 +1,11 @@ import 'dart:math'; -import 'package:sqlite3/sqlite3.dart'; +import 'package:sqlite3/common.dart'; // ignore_for_file: avoid_returning_null, only_throw_errors /// Extension to register moor-specific sql functions. -extension EnableNativeFunctions on Database { +extension EnableNativeFunctions on CommonDatabase { /// Enables moor-specific sql functions on this database. void useNativeFunctions() { createFunction( diff --git a/drift/lib/wasm.dart b/drift/lib/wasm.dart new file mode 100644 index 00000000..134d0c4b --- /dev/null +++ b/drift/lib/wasm.dart @@ -0,0 +1,60 @@ +/// A (very!) experimental web-compatible version of drift that doesn't depend +/// on external JavaScript sources. +/// +/// This library is highly experimental and not production readdy at the moment. +/// It exists for development and testing purposes for interested users. +/// +/// To use drift on the web, use the `package:drift/web.dart` library as +/// described in the [documentation](https://drift.simonbinder.eu/web/). +@experimental +library drift.wasm; + +import 'package:meta/meta.dart'; +import 'package:sqlite3/common.dart'; + +import 'backends.dart'; +import 'src/sqlite3/database.dart'; + +/// Signature of a function that can perform setup work on a [database] before +/// drift is fully ready. +/// +/// This could be used to, for instance, set encryption keys for SQLCipher +/// implementations. +typedef WasmDatabaseSetup = void Function(CommonDatabase database); + +/// An experimental, WebAssembly based implementation of a drift sqlite3 +/// database. +/// +/// Using this database requires adding a WebAssembly file for sqlite3 to your +/// app. Details for that are available [here](https://github.com/simolus3/sqlite3.dart/). +class WasmDatabase extends DelegatedDatabase { + WasmDatabase._(DatabaseDelegate delegate, bool logStatements) + : super(delegate, isSequential: true, logStatements: logStatements); + + /// Creates an in-memory database in the loaded [sqlite3] database. + factory WasmDatabase.inMemory( + CommmonSqlite3 sqlite3, { + WasmDatabaseSetup? setup, + bool logStatements = false, + }) { + return WasmDatabase._(_WasmDelegate(sqlite3, null, setup), logStatements); + } +} + +class _WasmDelegate extends Sqlite3Delegate { + final CommmonSqlite3 _sqlite3; + final String? _path; + + _WasmDelegate(this._sqlite3, this._path, WasmDatabaseSetup? setup) + : super(setup); + + @override + CommonDatabase openDatabase() { + final path = _path; + if (path == null) { + return _sqlite3.openInMemory(); + } else { + return _sqlite3.open(path); + } + } +} diff --git a/drift/pubspec.yaml b/drift/pubspec.yaml index 1cdce17b..b1ec6e93 100644 --- a/drift/pubspec.yaml +++ b/drift/pubspec.yaml @@ -34,3 +34,5 @@ dependency_overrides: path: ../drift_dev sqlparser: path: ../sqlparser + sqlite3: + path: /home/simon/programming/sqlite3.dart/sqlite3 diff --git a/drift/test/ffi/moor_functions_test.dart b/drift/test/ffi/moor_functions_test.dart index 4800127b..65c956db 100644 --- a/drift/test/ffi/moor_functions_test.dart +++ b/drift/test/ffi/moor_functions_test.dart @@ -1,7 +1,7 @@ @TestOn('vm') import 'dart:math'; -import 'package:drift/src/ffi/native_functions.dart'; +import 'package:drift/src/sqlite3/native_functions.dart'; import 'package:sqlite3/sqlite3.dart'; import 'package:test/test.dart'; From 7c2d95fb3033badab14caa4ef0688ca637b79103 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Sat, 2 Apr 2022 19:08:33 +0200 Subject: [PATCH 13/15] Use experimental wasm backend in new example --- drift/lib/wasm.dart | 11 ++++++ examples/app/lib/database/connection/web.dart | 37 +++++++++++++++--- examples/app/lib/database/database.dart | 12 ++++++ examples/app/lib/screens/home/drawer.dart | 2 +- examples/app/pubspec.yaml | 4 +- examples/app/web/sql-wasm.js | 1 - examples/app/web/sql-wasm.wasm | 1 - examples/app/web/sqlite3.wasm | Bin 0 -> 1347368 bytes examples/app/web/worker.dart | 2 - .../lib/worker_channel.dart | 11 +----- 10 files changed, 59 insertions(+), 22 deletions(-) delete mode 120000 examples/app/web/sql-wasm.js delete mode 120000 examples/app/web/sql-wasm.wasm create mode 100644 examples/app/web/sqlite3.wasm diff --git a/drift/lib/wasm.dart b/drift/lib/wasm.dart index 134d0c4b..276f8021 100644 --- a/drift/lib/wasm.dart +++ b/drift/lib/wasm.dart @@ -31,6 +31,17 @@ class WasmDatabase extends DelegatedDatabase { WasmDatabase._(DatabaseDelegate delegate, bool logStatements) : super(delegate, isSequential: true, logStatements: logStatements); + /// Creates a wasm database at [path] in the virtual file system of the + /// [sqlite3] module. + factory WasmDatabase({ + required CommmonSqlite3 sqlite3, + required String path, + WasmDatabaseSetup? setup, + bool logStatements = false, + }) { + return WasmDatabase._(_WasmDelegate(sqlite3, path, setup), logStatements); + } + /// Creates an in-memory database in the loaded [sqlite3] database. factory WasmDatabase.inMemory( CommmonSqlite3 sqlite3, { diff --git a/examples/app/lib/database/connection/web.dart b/examples/app/lib/database/connection/web.dart index f59eec1c..f6451079 100644 --- a/examples/app/lib/database/connection/web.dart +++ b/examples/app/lib/database/connection/web.dart @@ -1,13 +1,38 @@ +import 'dart:async'; +// ignore: avoid_web_libraries_in_flutter +import 'dart:html'; + import 'package:drift/drift.dart'; +import 'package:drift/remote.dart'; import 'package:drift/web.dart'; +import 'package:drift/wasm.dart'; +import 'package:http/http.dart' as http; +import 'package:sqlite3/wasm.dart'; + +const _useWorker = true; /// Obtains a database connection for running drift on the web. DatabaseConnection connect({bool isInWebWorker = false}) { - return DatabaseConnection.delayed(Future.sync(() async { - final storage = await DriftWebStorage.indexedDbIfSupported('app_database', - inWebWorker: isInWebWorker); - final databaseImpl = WebDatabase.withStorage(storage); + if (_useWorker && !isInWebWorker) { + final worker = SharedWorker('shared_worker.dart.js'); + return remote(worker.port!.channel()); + } else { + return DatabaseConnection.delayed(Future.sync(() async { + // We're using the experimental wasm support in Drift because this gives us + // a recent sqlite3 version with fts5 support. + // This is still experimental, so consider using the approach described in + // https://drift.simonbinder.eu/web/ instead. - return DatabaseConnection.fromExecutor(databaseImpl); - })); + final response = await http.get(Uri.parse('sqlite3.wasm')); + final fs = await IndexedDbFileSystem.load('/drift/my_app/'); + final sqlite3 = await WasmSqlite3.load( + response.bodyBytes, + SqliteEnvironment(fileSystem: fs), + ); + + final databaseImpl = + WasmDatabase(sqlite3: sqlite3, path: '/drift/my_app/app.db'); + return DatabaseConnection.fromExecutor(databaseImpl); + })); + } } diff --git a/examples/app/lib/database/database.dart b/examples/app/lib/database/database.dart index cd46e5f5..41760518 100644 --- a/examples/app/lib/database/database.dart +++ b/examples/app/lib/database/database.dart @@ -93,6 +93,18 @@ class AppDatabase extends _$AppDatabase { }).watch(); } + Future deleteCategory(Category category) { + return transaction(() async { + // First, move todo entries that might remain into the default category + await (todoEntries.update() + ..where((todo) => todo.category.equals(category.id))) + .write(const TodoEntriesCompanion(category: Value(null))); + + // Then, delete the category + await categories.deleteOne(category); + }); + } + static Provider provider = Provider((ref) { final database = AppDatabase(); ref.onDispose(database.close); diff --git a/examples/app/lib/screens/home/drawer.dart b/examples/app/lib/screens/home/drawer.dart index bf9cd5ba..336e01c4 100644 --- a/examples/app/lib/screens/home/drawer.dart +++ b/examples/app/lib/screens/home/drawer.dart @@ -139,7 +139,7 @@ class _CategoryDrawerEntry extends ConsumerWidget { // can be null when the dialog is dismissed if (confirmed == true) { - ref.read(AppDatabase.provider).categories.deleteOne(category); + ref.read(AppDatabase.provider).deleteCategory(category); } }, ), diff --git a/examples/app/pubspec.yaml b/examples/app/pubspec.yaml index 1cf1d2da..85adebd7 100644 --- a/examples/app/pubspec.yaml +++ b/examples/app/pubspec.yaml @@ -15,7 +15,9 @@ dependencies: flutter_riverpod: ^1.0.3 go_router: ^3.0.6 intl: ^0.17.0 + http: ^0.13.4 # used to load sqlite3 wasm files on the web sqlite3_flutter_libs: ^0.5.5 + sqlite3: ^1.6.1 path_provider: ^2.0.9 path: ^1.8.0 riverpod: ^1.0.3 @@ -46,4 +48,4 @@ dependency_overrides: drift_dev: path: ../../drift_dev sqlparser: - path: ../../sqlparser \ No newline at end of file + path: ../../sqlparser diff --git a/examples/app/web/sql-wasm.js b/examples/app/web/sql-wasm.js deleted file mode 120000 index c4123950..00000000 --- a/examples/app/web/sql-wasm.js +++ /dev/null @@ -1 +0,0 @@ -../../../extras/integration_tests/web/test/sql-wasm.js \ No newline at end of file diff --git a/examples/app/web/sql-wasm.wasm b/examples/app/web/sql-wasm.wasm deleted file mode 120000 index 081e1764..00000000 --- a/examples/app/web/sql-wasm.wasm +++ /dev/null @@ -1 +0,0 @@ -../../../extras/integration_tests/web/test/sql-wasm.wasm \ No newline at end of file diff --git a/examples/app/web/sqlite3.wasm b/examples/app/web/sqlite3.wasm new file mode 100644 index 0000000000000000000000000000000000000000..a44651043e5eadaa3829afe0463d890efd925d6a GIT binary patch literal 1347368 zcmeFa3A|oab@zYfXS~Uip9Yfn-d0TC@VvS>|qN1XpqQn*i1T`vJTT%Ys-`e{;=iDI>r?!6n zZyLj740l1$(9#DR1cfXBlzbi4TH7iCn5{F#}8vTAZRBKU?yE4|Zd+ZD$ zvfAzHmA2}c*4zOA0hjjgKJ^yw;|G`pE3eUkeJZzK-GZ_G4(0x5-$f%;>pTU(N=f~p zYAV44IISb{^;+cCCQde zQ`4Ufv8P?dd^?!~B z(XhqMv_QT~SfncB+jnjBsf&iiHf`QKzGqL6TEe1To2D<@xMSzk_D$Q=noG^5HtpE5 zb9<0knRv&}X9uAxehENKZ{4|L<8#jDDM&1J@i6t0ol}>NPtPy>OVi`K<`sU<*;{vP z+U5(74BNPD=g!ICG4c40%d_p{+jmYqHwxnT>+P?#lg$4KlWb8GM8T=2E?X9MI!W@Q zKNfaQkD_F05XD)Pwz4z{2FtP_jM7G|m8qvFih>{u!!!+|Fbv`-ieuj5APG~FgNzpW zlkztTdO^?%SDg^H9-mP^Swi)o5ynvxwW8>;QS^kRv2*-*ofk^3-m#=*&)3V zr2+pA(i6jwzLTVTTAEQg?grq3(PTCt>IWI)Vo*REC9R}MJN(Z-Hqa9$&}#obnvCd<>l#@`OWT9O1t1oYfW)O@U0LDOasq@<&INm9TKf|ENZXRRzr z!Y-p*&d6Fz9vh{L+pX*|4e%R_Mw_J)YaRRq=!s8Em!8;$2s?DrZ^cgxSzsY_zO;QJ z)TVM&0anN?h+DymH2}vnG{UC-WNjf-l)5ww+bdRx(0~;D^9MR&o*>t>VdU70(>A2g z0Fg<%6Fwzrt;rZs*7`~49Rf>3e&P@cO_?!3Za|x9^29UT0HD^ek+0Pc>2cH%bQFu$ z#_8hp4&xWV=mW5GA6Pskh4j{lKz#w#J@Al6I7>vD! ztySxwU{DID$vWagRtI`h)u<4&iK52X&!tPFM&k)-3XijzYBKmCn*=yTgOz#~93>Rf z5nkXMf{8y2w|7F%bqKwTo^%?xOjD@8;UEHAjdmKG1e0onEQ6;S1aSk5G#V`Da98;H z`1NtNGC2?yN50hT90-aT`}gSmiC!Myr*Y*I?+F+0*}V;^^;{;IXKEVOmU*6FQI2p+0>*t~PcC0j2I zuCG!Ml-qW04qo3H4tD3Bjj9~{b!)V2OdU*(U%GYA^!QY8Lu)u#rSIJ_%=tf6&J^mv zraj{uoyZIFlgp;|?7U=p<7MNUc5U3Yb^F$7@bNdTWo4!-y>aiJ@h!pMwoWRO=hO+_ z&>A*(*`}#2vzvQkYk67EH+R|AOD}sis>D?AcNNauxat1yTivq!B~#<$!J8^fpnw>1 z-ds(HPomyGROs0=J+<-jO}loD@7Qul@Rq8u(x=Avph4VNjZukZ*|%2nRV4@iSfQ~> z-ONaXx3x|vVXbn2F*rQCA&6n?p38!_&+c`6YHIV&E#tvEW*6QzzT?vA%Yt{#hWqkO z+xCtJ@2ZfY4tI<{J9u}6!^^ktn%cT!`jX&1Rk1SZpQ`3A-?PJ)yQ!)>O#9~w8mFf1 zkUIC?szo~9x_SGq;C;2q(^ESv?dI0X5+PcV7mMUB*}83f1(>o>76?-MnpZ>I;C8>v$A*W zgsTT%t(dkg&97C{jqsS-C}t4+Th%>sPh;GOJcV+$K*(ROkZ?JS1Dny))W6Tk*t!Fb zGPP$q_>T%ZR)dTkT3X+zy4iH;r3gbr4MVgJgNLdqz>?g!Y439kv~O0)h=*bFx2i5S z@7%U``wrR>qjP&kmIDKiGk}KLnxm_mPTEDVAl-u=m7W-B0p;+-bo}!=M z9_kZ5LzMf1c^x>)ec?QKjND!{uehVC7tb%Q)&9TcCGXg@eLQ$cd#Ds?fx9*OTUFU% zB6RoCImv!Bzug{cOjcTBd092WGK~g)XHI9f0+ubk7J z!^Ep9{9DVz)%CmWp$;@F0}y|&J(PS7noU!n2`1`E=J(q}$u}q8(0R=G*TTHwTBRE_O|g??Rc`c=?Y8*H;s;Y47yT zjbL?rhfJ2>_3g)$e01}s9h=9u!E9y~`0I)iV6?`JX64^d!Q?v({?7t1{8;ce6`sWE zV5+d$zpaW&*!t8rRD|UGc^kLy+_IPAZ)^{h_gNVl;(LYpZ^vT<{ZIXX5cuR!^&-{ZM=MOb-Ld$?3uIh2zIifud&SE(@7%u2 ze6R1QaJ_Bo#olHO-q{`+OI7N|9ecN5jKcM<|bBJ4ezE*THrT{XVvvc1z=c0PMY z@SbY5U?5`Y)Jwr4w(o_-1@8@qosl-j2>hpNFl3qre#y4I*eN$vl%ou1qyBRZ?oE59 zQ8W?k@SL5`-nu1tZ$;H2*=_R*ysv7~$#q%YH&>JB6NC3x9Cmu=^rmeatI{8+z@3#9 ze6VVJ`Z+tyKpzioX%Fpl$2LAxA<+^DkPW@-f{uPn!4*?yP`PuJwMT8imrT(n7*#s#QBXGx(Qk5}YQw z^O8$syZ>uNHKd#FdRGOnaau{CGVkuHnLW=%Io+O@IP1e>}MFo%=4)GE0I4pPgNhNRW0kF!Hxrb@c9ZWPE7^LHlM*4s+DFO zo#knYDZ0icQ)RzcjbhKXam?hSRgEEXyb3Sm?FqhAVaRNC>B`VU@Z~BU+jLrtz|!vt zhgwic)tLCkIKNU+l!+I$XBiJx8GEO;LP}mc3cgz5R2i__;A=H%CF$awJF&BO1piho zK9zJj?$;~YD*G~HL!O7=-zy9cGbeWLozk|@e^i4T=0SkLH>%FzePveg(5z%}W>d7j z*?w%fgr}w@PcI$E9-5wdF6`7TsNh>Qd2U5^?;Wq_KU}StJ;1hk9CkX>S*CqFX;S9z z^iIJmI!k6Ho4I^t=W(+V{gmth0Gty;R&rJ62@4ggETmz{=XXYDm2@0qPw;|H>q9vB zi?DNj{L@!QzY}e`_^R;nZ;bvidRcf!^mpN#!^7d<#&3u}7=ARoExaTAba-cYbNGeu zi{Wp4GP@)DRQBoY&g@9`ne1P(f6ea7?#@1&-5)*>em;D8^or<}(PyK(quZm8N1uou zjJ_IuEqY&kb9`(3(fGFb_W0xRyTg0JyW`KspNsF0KOcV~{$jl18}T>eZ^g^6NnV{i z5Z#e{D*1Hs{^Zu=qscwtzb1DjcPC#+zLI=3`H$p<$xGAUPVbA}n7%%FQ~H_Yp5!&@ zb?INEhteCK$mx5XcBe57$}ATbS zr2mxOl>T%2-t>Lx&FTBo52PPVZ%IFtemMO|dTaX8^keC5>Fw#q(@&(IOz%iPm3}(C zGd+@iCjFQ6U(>tNyVK96_oVlx_obgp?@zzdd?0;s>+|W$T3<+itM#qsOzW!Fm8}=H zUfKG+){9!NYW;re;pP>s=eNGx{9<}E{Zjhn^egE%)0ymw?8@x<*$c84W-rQKoc*ut zCE0IfFXi9g=HHiPzmr{^y*ztG_R8#4+3#k*mt7V9es)dv>g*4)*JQ8FUYGr0c5U`Y z*&k;Iv%kt-pWTrCZT5!j@3J>#Z_fT9drNj>_SWoe+2QQ%**mg#W$(@2m))GbKl?zI zUlo2ZyCwTj_L1zP*~hZmvfHzdXCKZ!k=>Ksmwhg~Kl@_#rR*!&SF>+q-^{+1UD>#* z@h6QxZRCI6xUTV+jlbf*LyhYjcQ-!UxTkS%UjD z>~u#KEpGqLE1veX_Kj?i9e5o39?|3=UKJD%y(w881<8gy&ZG5FH;;>l!igd{GYs;0 zEcl7&!H}d6hwG!GdI;7>_wvhAZ(@D)fRgSFC-N|ldaHd?{iv9Ev)asq=s-lft0^}K zpE?pyjF+#g`7;8VUrpmmj@Jg?42xv99@Sj$$GTz1)$8Q!j|RK|@5HL0b0zye1UAsD zYjADQrWP%)j#lfFqm)uGa0o*3*2go934bJH^$1@6j0*H`?QpAn3=%(R&m9Rk!gZO%|`Z zFVSBTickp*w0MK75VA*U14(}H2cr4t4kC~L6T!YxdcBk8PfyqzU0j=;P_q-xnjO7q zc9>F|9rD4PRq~S)YI0OelQXwiH8){xZi4#U1jm@0ur@cH&#%ZtgXMp&w|?e;>o+vO z<{(Kn#2a#EaCJ1=Pc&NLK(sglZHH@vCl=w^qNLT)@?!afeuE;ZCQR- zgAhky_G}tGNjsKeV3z!(#C24|^^lDit|P}oDqLH39oKd4aa_2rbB{b32|7@T$GC`1 zQAVP>Vx3r@_(~L$KbtCA?%+jo-&cA5O|)7R+UqxQoC8B z;O-#N94AJq>!Y5h+LbopV(u#kv@@!Ol2c4{&inG=J9KUxl?g@IyAAG5MOq%#(GX^H z`TrF1H)dWk^yIk7A0D3@{w0vUuP6}KlYY`Y?lm;K!m*Z8S?X9T>f6SPZ}10ZVGSad zmh=IrevK$R6!98uvKB;*BF!P2FHWBrNXGXg3YpB3YJy;3dX}45;2{{KPo-8UUE_2} zgmTNZup-g_LnJQGQ{_EGw+Ixi?cqY!8mkt%U`mVN0I-SF{9I)S4zI9y0 zFpF;qsYU$sWJ3}4)1ujTJc`tHxhY?ccU0_GYrQs*@0YMUu7T8r9g~<$Fz0CzP7G3` zm2)e)S;rhk-INJtpbP4Y$JJpCbJjzj7Skd=cZ5)@e&VpFj3Msoy?r-gaM)WpN-Y5B z{Cr25^eFj)(t(hfD=dfn2w@4qizuC9GEZ0zWjexACFclBw*;-HW68~L7mGEC3G+1F zI}e`}4vOG>P#5%5lbE(({|hy*;~Lc*V(iw5kr9a)HH%3<|AkCJ*dW5tF6rwY+%rA3SwRiZmTsy>$(bt5Ym z*5~4y+F94vVlwAH|iS4q1EP@UrC6YiDD*{(}?jGtC0qn zIDiv$JOY+$e6^uEQ4W0OocTVDb>U%V^+m{eLb@CB*3lb=y& zvhIhN&r2y-f(nH?+9j>xro5D(Qov}pn$PcspRxoza+%4|;?F+%l{d;21G0JF<`?#p z!ruQ~*U;ksf7Z2|{}(%UK7Zx?r;+ow?JO4A-tvP7w!`->uV=50rU$X(m$CR|G>>1# zCBKa8{8EPXBk;@rzO&|rzwbL!;J$av^E;xpo5Mk9j)iYad#eGBf_6(J$9-LYt1*1? zZz8|q_urKU*SXZ~L^){7?H{R^=q$MH-TqHbLU;xpRD+?@r=BF; zAkZ&*E4yJq=aU>!vweXa^dRcd5^&v9mY>o3E(q_-hwrjmNNAP`-qVRUUYlAc=?8t% z#DCO#u_U^ZdcFH2uXXUYN(CUPITIrCAF2z-A%lnNg12aDQ{rTBU0wL@Wbj;d;Zgjy zKvJp;LsgfwO4Y4_N`X1*LS4&^>gr!~JnCO4b)oYHj!OEiN0hr_X66d*Sh{8G>@b;_ zLGd@XuOs~jmo}^!J;Kl3iAF`{TPS9FvIV4ohyy@Pm=E%B`y!+0mj^V_ShXsZ-~sH= z=Smsx)GN7bKvd=$ebOoU+meG+#xzFuqGY`rF@Uict^y6324? z8JU`!GsNht4+(>);^cKBkpWsq@`q5#Z*GUBIQJ4QEEF0rryQVY*;PbZ z7j0o(URbQgqXcg-Qf=WNr}f+G9Ek%bsOSC*lUp*es1pW+sPvZbOY8Gkm4nRCX;+g#=5pSt6E2UU|HgAW1W2mkeH(@(4W{AoZRa z9RbJYKE4d(5VJW;7twadBeiGU)!WND27(|*0DzP2QWyEX*6WSXonC*l;=eBKD1D@i2el-F?MpiN5m~Ki))f(#|59 z#$Z)EgWrxw`k@nnd7n~lA5%5Z4+oi6Nib-fO{*E2AM7+OUh^@NpIsn?E3jXaiv00Z z-Wf^_%5lxQr*p(vQ5ChL!z!NW%QP`PbJf7~)Zz^^m1v~2>D{wwarMV6DPZuoA8Syv z2ULKHYDi&zJVQE1LnV==}M&`DrD4 zII<(v$gcYV7}={B1B6hgaz=Kj92wcek-hk~A;I4A12D217aZBG<;ch$j_ihVWLdmH z+=vyk8n1IPb9-V20NOIaRdsHIf_>yR0t#B5?W7gkaYU+^J|9G_|R{G@|JpHGH*n%Cn7(Tafq{Ho6|_AOq{#XPxYaIf)&$i?Y&q zMsgs=(r|UzSHMg(z;cuyl*jK)IzZsO;OK>bAj*yYl1W0uIt-8*2NE`Jc|y~+DeahU zYQuMmtN`XoI-q=)`X%s6+OH?F4l$;yf;{NFvT24l`ujS}@|yk*aYe(_~hNB~Ar6TI%(LVjKJ#iJwRM4}~C-by~V9| z*61wmE>1@l#b$?Le6AT#4uAO?nF{7U9|WgG((#L%lt5sFe?4rkz4G-<_S*EXUG@hm zTZ2Or3s`O#r#iw^ug-yuyNL%1r>Bw>q9FiCsmGUG-pB zkvH}hf_o4MLd~zu!MX{-2TReI0|G|`-!M0y5PZW|CJgw7uS^*54PTis;B&9?ddx;z z@u$^<71z0EW6(l$(-1BH#Vn%Hfu`X^ai*!9D2kPJP?YA>`90r{rd~0gvs?WAT5i%Q z-sFwj;;?`4<#B!&a7>-CTB8k|Ij!7L!DS&ov->zyjg+-pgncyt0l*aE&R<3;20r)8 z>JHp!LvN+L&E6S({aE>BnUZ19^OC5IyhLD2)l{q!cEcil!H$gu(!ymnY90;dV+h@;noZ z{n9oOC##SK>H5YJ5WNEuELt>ujX{)$=g|w##;H5AymY?cjlQ6c!r&Jwcz0~wog#AV zMB{|#g`I0czn#}xX;M`dym{k_!`99qIy*U_X9fX`5*~{7W;005=aKYfb6W9$GT5Eq z#aTa6ek0!s?3N}h7#suM!m|(&xB!rbl-BH#s-t-x+3W-*Oj+mRNOL%LK(15Gqn`pf z2F8M4a_=&ih3ha6X$9ZHGgsunh5XIKvEZ322F7)n7;x*R>{+V(%-xz)`Z=%cBJ^Fj z=K3_|y5K!m8`Lie;Ma0!;1}5%Q;KB@m)CItsJ2Fp>ZrXir5zlEHDW{R%po?-c8%Bo zLd3>&l>`?vvgpttSdicn5gZ^rFOTOEoZ4WK3<kANOb1OJXm$= zsP0f5Q*M3!Uu+>A7RJ^y*ptYmkk;7MkV`na@Y9wb%Xc5tqS!hQCNA0&Iu*S}8(8wJ z=CC#eVbxc75P9}(a7Py1Ebd5Tz@b67AhCMx7<%rAuwa=k%pGkTZ9(qn^lHcSqLMo* zaV~eXf}T6tLBWzcDnqO?4{L;~*9(t@^W)motKqz`*2f<9a;H8He5GI*Mp?4`K`iHm zU>i<%G>1jl=$JN+GENQ}CfQir29zWc`$WbO^Tzdq>|2$FpcOy`q-LL-TmUzqKu68@)eIx+|DE_RFwZRERw0m%hscNRu zGp7DxcwREm(V@R+L(E?bVF2Tg7oO1^tfaP$!s7A0e{T+Wn3TMcAS0ApUT+S*qO;ma zb9iX)G+zg@$uqqFrZr(fS?1T8sOBMuWjXT=Hj!;SgvM>bH16!MIM8o{`WAmj`P=7j zkH07JcZ9!>;qNlcHX>=G4FwPi@`e6mWXq?E<$D=SKDp@U!??>qM*V39X@}dt8|5FD z`tAIibvwlq`y znnikE8$=LVSVYW2SVG-*2ZXTP*kAYc*G(1=hr5f`(})aF3!Fy*XKiBTls@6h(vCGJ zTsnszx}U4rK2Jucs&@KKs%kr3bI#c=MZZK(jDy|}57U;q zL%}W?G>=ja* zi{M=R68&XGm_G*BLxoKnt0rakScM%B7xy0npbXS-pB6tX&%WiwKyQTAr)^56C3ags zU-}-H6Ppd1p|yb=RZM?<5;O}Q`)vk7KmW~93ujsgwJZ8Ew@*9xG%rUm(}v5&}i>PdehYONt-rpTO^O{&J3(^M64<=I^3N%lm+?k~seV zfa39!i+*Lv=p+9b8C^6ikc^HlfDS+HPSLfh zsq#lifwe5+2iCG!8G7&W4s%(;4VvQdYCV|ydXZ!_Q)NncW3bsR#$>I5BfP?R?^2Fay4dglX@}?rD|7B3D|`@ zYwK$+#9myp;Hp(%-s!l8+2Sl;9`9{5pP@vb>Vb)5I&yn*w4Obur%-HOZUB? z-znDSBP0dCv_fcS#2{p3p%Jqxj(fx~JS_`hY4(_BWmKc4?RlfNv;~-|ZyH{-{}D#6 z!Ia}ho9Zx7{u#+TSbW-yM@~yXNa*#!-LibdL{@MP4#>O>KW?87%jo3o;_>H#llQRH z^G0zs>>FmP#@pAAwf8ZHU5dmzuHVPQsG3+oTCg@49nr-hJpOppM3L5$+1uCa1yA`I z!KhBv=0R_b+1jSEEmxtLNZK2Z#ZsBllx9QPWY((ga#1QelE_1~qrBT&D`>hkt^dSI zz`wu zo^(v})SQW41x-q=Ux{;aW37YQ!k{Mx zJ(&AoiF66Dwxr-jAviaZ0tr3Vo*671Ywv#^`g_j9m1E&AAdrjrX)B6wn$`5)2Lp+A z++@@YC&_x>Fr|~{#a)ic6h}XeKu$>b3<*CH1pO1CvMAOp;qjv)!6p26BHiUD(p}jo z3JIF3a(*3kb7`MlcXPQ@tDiwc?Yx&a)$M^j1TX3&R??R&Cb>OnIg@#&4%n|;mpAkF zMBbw~DH8;ToWk@v%9NUtL9G;IblV5D__xj4gU-WxtZB) z$>kjf(6bav`*Yw0{S))XY4On*!lE&mKZ4q(`LSoc<*m1U{LX!!{OLcYVUk4}%iPpy z^=IN{DK#3!5&9I7c85)0IQHPpU;p|GZv5EYKij*uMUh(!tj7whMsb)I?(jJ+KB7r7 zu=I9ITmspeYre3U><+WY*)dlpyNfFmc5SszSn~D+ z3?fSIdf08G8}^>ualsf3vvLP%2@z!uhv#8hna!)0-Ng)zaQ8t@p_eBpl$IG`GtJ3- zMFK~#%y@q0D?tD&lr@FJqwLMC6hv!^Y!kX5!iNKl6ncwXAr&EUu}>_1R`5&-5|t^k z%YlMd@M-22MIVmmmVJdQ+r7Lv;>wm)tHug*BdEnP?Uln0%9N^^GQ|V2^m6ufi=!Tn zqyrML{-tHgEl|yHyNFOJY@)lG=w+~R@zZ6bGhvSrZ?xkY(jBBg^m2?sHe#>e_p8*y zDbrgwfWuy(0J~WHPrT957#Npz+rv8q$+4ZEi&s*J>bCuA7R)l~HLf20i#ECY0|yDc z4ILy#kEN3&$Wau$e$pFjf%E76PxKoSloRNkhgl4jS zONpSQD}em#vg#2Q&J8d=gXWf*;^$KsUm&j%UVK}aGy`2bSAma<&iuKqs65w20_VD- zGB7%Onn~vBTvt|YE3pgDY~@)Qe$`+jgb8x)vxKE^g7fG&h5jUTkNO;_n+p5$d?84- zQ;q}kv?{C<2w)sVkPF*NhBD3N!L!3QBL6?G35)CB66Q-*}aD{Uj8qqfj8B8tqQ ztO?zWLB?|9=0U9T@ww2flj$H6QrM``+P%Ib3$E z65j~xQYX3)p?#O6Hj7kE-1^UdecSaf{P(xM?ZDW_UpDiu8*jSvOYf|js9IGM!`^7) zCcL_38-MtLzx?QLeeA0r_%cSTd~xsw9GI?l9WqRsCwT(`X#6QufMGE}LAB8e9JWg+cCu=l~tyTXhT>CGE(SBHL*emDsMe5cd%?WI+nQ^uO_6$MTz+` zKjTi0Rp<~jmVFuz5}-Kq)uYbOn4e6Y=L1w@9fHsc)M!Bx$YYV!S)N`!HOa39L2v@W zlatOOh{GG~!t!iA1OvXLgh~g2MwM>*hkz1mf>KsTXBGRU>hc8lb<%b<_W-*`JN1B~ z!{&mK3ti=QGYROzXAGz;2YKl6TH-9y#?CUJ<|oRRFb%;uy9c8nIm=Ig45hhCKS7A; z8aw36ZhVyier6u!gl`u6clVnJG)X5czLAN+5;@otsbr#gh%`aGQIst}qA*>$eAMW5 zO2OS=lF)Ku)nH}18rG&yrv`+I;g5fN&{n8sCtoCl3_Di0&T3X8glps{2tuji%vqwo ze70*#qqNEzsDo8YfpT^sviOGVSJsyC97<<>?X^jeYrqhvZYO~_K`54lnltd}PWe0! zRH!DSO(i|wOJhu{U-?OYs@^RUR_fYT5jO_$3++lZ|@uUSl>@i8ltgElki+#`m2 z3?SJ~xK_|OtYRh~R8pjqwJ|f{MK(8~F*l((D}fH1L@o~a=X|=-k`e&w1@NW$pv<7Y zWcf;*OeYUc91A4$uDwZ3$4a(?1qrE6UsT;W=e9F6);W@3OSJ2|n|39YM1fISMuW(L&B`O4lO zU?kzGhz4@GIM^z8!?g#--ud#Ee(7aj`Q0!7teN77caYmCj+AY9aGw9ycfPa)rzy`G zZ5}y}Hf8^V1mKcRV2ERAnEA7M)3we9@vuZ~@V>WOX7^Tas_G;H$-;RUp@~TI z=8Q%O4bGV={`rnq$Lq!H3wYxSaR597p*T;f+Qnf2N^|c9xuJwkgFdV+Qs+s*4MM^V z3&Ujt@PN_awbr0;Q0hyd{?&i`*_-+MO>_15Y4(kK$4Z1_CGWWndiGzUNj`%c*8T)| z-KoeT+jlPOdi4CMLAnCVjlFYT(-o8bQSTQt{#zN$(FQAVY7w2iVgTC_>p6eL_4(+b zeA%IW`yleC5FO!Eb;1Mk6UP?sgYZhvJ5Q2HS>5xV!H{No-Yqo1DeSr)d%ovA1L39T zUA1x4I$iz5v7;^?q^77ZJ%}r|($!l~^XyPW?81NskFBe>j-{*5al6mb)mz7_tE>Am z6frAxb%SY+u5JZ=u#FXzu5JZ$>FS7qrL%nRQr4v~6g6cXBMN1m08=LVe3(lwKWU0> zKjX!NCG0@=dq@vhtIWH>Nrqebi9s5&iY}V@B3GdYZ(@F#ewp1^aJz{wXs3|u)sSpc z%eMF0)?lRfhjO;ekaoh5-)ZZ^ErmZ)=1~ODaxIA&3{00XZ#@g7brXUF9xFcBD;A48 zE_dY}*&hx2Cb=fHxzv_7fv6DiT*kHi~_bqF(whu{LDX4VPXBXn+VMnQXmgZ35! z$TQ9(A$`@LJ!}<#_Li{heIB%uKf-PuxWfYO1P0O3C;)-$LFxYnnroNX>bd@}C2feU z8$z&K>;Gy4j{dI=kBO}w-7wNw$hlhmJHVW$DsMY&@nVhxUiR?Nw0qObG?NzX+K0Ec)urFIhKBGpzQLi{W-(&3nnCo2)26vKF^ z$2#nbittBkXBR0ZQKO3NNYyv@Xr3a_UWB4x4X-^T2oXpTa$kycTs)BkIWX>`zyaQ) z30k)I9fAyQg4PLecLm#|E5t<%k*WZ^uV|NL;5b&Qy=}5shc8dzIfA@|n{27Yc^`h0 zJ9WUhjjLC5Tro+XN#N9^LIND;TxMFSbW(b;8+o+mA}t7D%bVx2N<3M#O&>~WDKi5I zMDnx@b79i<7V~9JA<>+ulL2THlR@OlEH_^^K$2_D?Bx3VxV+eymgdFAGCqbE+gXd4 z{n}-skPqu)Ytp$ju>CA1a_Duy=2xb3YXA>=)NDi3Rn_c4QaS8$fvSkMp-+DPK%6%2 zcGhSC6rl4jFc4uH<<1zN$i|gicqkP-mAzgKh1d^=+{(G^FC&qEW7NkkiQuF1ij0=7 z;>38a-AST1skPYdcDjYS+N;6`Lx7p9>@U1%$s?`ex}sv?;so*xBVKEMLX0@V_Pw_d zLXieC|I0G1T7YxezYK+03PorNMTs{-$;RZ61d1A+O z)@hO>wo;;^Bv~W3-Z1`?d`%4#Lo1!muLjZnp-MbM6vkPB{Wfnt72{sNtwa-`k$ofF z&4z}^0QzJ;!B3QQj)r#2k2%1Eq(jlfkA=anIPPz5D`UL0=A4)&uZ9ZudE#|{qR|iGdRM(*#boE13q)B-Q=_0HNVAo`K-fp z;G&m2>|Gc3VIp>Zpm-A{0BZ<2(JV$N`yP!@{#b~f7_)fe;0$SceZM5t7l*;KNGY*+F zROFJsHhw-GV`K}oYYFI}rg8luF9IN@sv0*IhRhTogt|*b4HUu0*1R;6$L9@&?PUnD z24Q;{5tLCZy$5y`Nwj5(V`^C(lj#gXt_k#Pto19%e(W_l4B&sn`q8+rS)js{Mdb;E z=}d6fQ*i=3+Jq%2h>KO=a`>IKl_c0Y#C^Fw8s#n5O`x{pgce^#2e#=fVl15&3Vbu3 z$gJVHFy0rJN`b$uFRm#C$=DU)uUpJB_^jP`rPb6euHDTMZgz`t5P?6T_xl z4-ki~C-w^Y?X58+)kKlsJr|ILZIEl@ISxPk5rV z%{nlL1$Sr=FBm%O56s2>z#Q8Z)qZeH#{i#o$a^h7BCA@l%ccQZk3~l#TM=&)Q zry{0-LC+k$mt4`~s1n&`dW_>hs^vb|sVbd5d4MHJ5p*^?D7ii^kz%dAVo>1dGAUMi zYSisr2t0Bm&jDURIE+#-=>mE{jNua;-5tUq9l>t72s`&Dl@8|5$$^*|jOK=vFn55K zE(=Dsg0)}Vt7DXm1(Zkjwl)Yz{@i^D5BM>hwxOD&-lxK6TH)dI@btIlm4G`slU7E> z;#KzHQ@b#3n4wXtGw?E_NI%f@lqG4vU3hjs6Um>yPh02sBFf#w2V6pEZqlf@-(HD$94PuRpBG#AURahF z`oV%+2sR5?pUJAAnCJ)HfDfl&nY={Hyxx}%-ujLJB7&?FhY=U7X#FW4RB0Q5mFPOb zSQAX;t3pm^b(qH*J^#pS3@y;l>>87us}g@1f@eEg(IyBt07+Q9WVu|dp^VBxo8{!e z>zH?<2L>6Un1d^zD}(ZRLQ}Xv^46J?TI#gHP-vldhBzp7udx^rSeZ*G4iHHoOj{O% z#9&>G_&0e@z4cUZycdruhk1V@5IAfQXa2cNT0T)e_52eWujDy9BhtowTTGm=FtNqh=;o+E`F_0u!bifLJlB5bScrE86a>CspzMCnN!@bDxH1^ zR>)mhGz_5#eBt%G7WC0m#lVXN1ihiQlSw$F8jW9YhjfHsn4RVA^*hw*@ZR?+AFa)uoMSbWc zL><92bZ8@)wv8=UICfQ4cN9x^ka+P+VH5B3B`p<#ZyPvPm!^<%Gs|x zttmeEPS_`!aPKEANAyC-tO7AWHh17!tQCr?3vw^HNbPDq7LE8WMv8)!*~}IX0ZW+$ zcewDPw7CDHcIsvTW8;%V!$BwFPi#G+>@n4jXCT`A6YRpGfXh~KWB0Txmcf7M&%!z2 zxR^DWc@=#iZmCAs%%2c8E1xK1vL$D0&3TVz>G>)*`@UZAEFoG~BZt~s|Jzli{Y;F( zBf*en!a|vNb{fynGAKVEGRLATO$gqv7C1Cr%8x0`8IqN&52`CtswtNMK!7($%wgmIoBPgs zo!4vW#KnFKJyUDqcgNt2@J(?>5W5g(WQCw&ijRE9oH0`6A!m#oXXHmF5K>Gg5S^DM z5Gl?CiYpVy7GPxpQF@*UWND=dWI=E`B^H|?GP+qC{6+#_ag2!4W=?`>R;iRoiq5{O zyEM5S*~GRIU>vp*jBVITs9WOjMOx8Hm{aapWb^GigM~af2-pm8Ryk{P6&!>+;Y1+N z%^lJD$3X(rg^&TEkmn#umW zd3yAmbZq8T_umnB`i%mYE!Qie_(tZ4H0o2l z@TM)5cV#Rb6E%ltuNafEHIwY-Kf98&eez(hMyZSU6FR3YrS`}h#H0!^8sQGaI*xK#NK zm1W}AUuBr+-HC%2@$m-pJ|HpOexq-$FA%@2Q29Si$TV7(bGU=<$+? z6f0#SDNZJG#aihWghSNbg1opjt$w_V5K0|#2L&1 zgein_StFM3zsK-ZLl08 zb-kSHL7(L<*%NueAhyC9JtNR96t;#rY{o95c^%9P|0ZU4ChELk(K5$OYX4T3e3e_x zup7s0GI?US%~sq-2QBoAugfSiaX9Aw%0lNJ3y5vH_)Orogk4$pFQu{Qbe5yfytrCs z3}G3MYA-gByOK4(RKzEx0{xrQF&bcEtmiE80em~>=l~v=VQSeAoT2~{Tl$uROmI=d z@huOw2V|8%AF?s+G0}v1WOYxF>(#bCe0epB$K)*gq_jVE!4P4aa$l+K!6LQjJ7&L? zHyumz^<8@E)4S(zAprG+19uW=u((LiMn}=DQ3<=BWb_-1&2&0o>oF|s=5uwslzrM4 z*{qM%^F<_uh=C<(L-M&Nxd34?p-b;Tx#n)rLM@_vE4a~sk2@CRmncg{&Ab_JraDp1= zhRT`0Ajy|WPUNY10F46T;%+X-LL@RALgJ;m@MHA{q0Uyz^}$EEMOQXdK1pXqXU(cm z4jZ|Mn`}V_lOs<))PIq)85(p@&JeB^n;~$zK3YdHM#mFs8vFHO@7zHRA}yt|wEHy< ztm1-D@jTS-s_UnqD)Do!p51q*gnA_7N_H@$o>Oq8N-Vb{Osk{Iq!ov~^P~lnw}vUP z1^ya?=(-S1i0t!~9rm8qA)6;woG^;ZahfTAsIeQ;SUx?)zs<{wnQz7Re)-hY`e3yH z1S!_a1svFh%6KlRGV1-jwa6B8EAO65PU{fC+>JvPKe%C%y5yYa0E9{2XvT4~(lES;fCI32HCcX1rfu#2|g=4yYG&9zN z5xTmSGZ{i(EL*-VTsZ;w-rwMI!uk)qM5_6!p-?~^~|L( z`$2R3R8w43z2$H^acIDOPQ&LVlx*iqxIlLa<`S9!eir#W2vE;^2M*Flr_%4hilwyBb+dEh8}5+YXG)xmk6MJgOO*-uP^Nj!Zy%+ z&&zeKrO3OTXGFm%goP+|pV?c|Q6_lNp71k7?@iI<_PnueJ@YNZ1-++h0Sp&02^X>m z?hdpwLd~Tbwy|OjmE2!A#adT69SJRn#6f#x`+#d(XjJB=h2ce=yC3nJRA|{<2|j3i zU`rlQ%_*hzLF5z2L>f171V=D2bQ#=~X9JW4K*h!5nOCnXo?BpOHugmoIkQ@xnR&3vGa14WtUwt zSr^(lBS^+R+JX_MFeje7ls3b=cwt0OP;_9OX%sq#>5>7FCeC3v7-_-o70et77nsEw zYs{*b8{6gyj-;IfL^xqw=ZxUyAhA10jTrFH6<>4%RU7LxQA+C(5~QIc7VYF^L+$z@ zQ%<)w06kAZ?-w;fdlZsbA2McSqc}-MCJ=SirD86rG2jTPx4LdM<|`Eo#zw{?=1q(wAO(umd~r+_sZWNpxJ zWzvYM%x8JJ5fWKvSvq@b@Hz2~WJy2(Kx~>Nt@nP(CI|4(2w+zQ+pH2%QSX;Q?M;Er z2DL_|SoF@(q}`F)N&ueTSjf*}AuFBb z&ShM5kQOIQ6mR$x!yjU53AYOgW1OU!o*HzDD4Gy9SVr72?Pxrzq~&gL(friBrL!zWDmYY8|*<;&pnCUnEcPe?r1 zyC>@3E6$3q(+Ypd&ogwn+SUBC%hlq5UAg(8;Bh?^JQ1z@vRhNg$&uc#4jNDwTTIX_ zBT!7c&XCcwwl;~I9J>N#HoS_v+{o${2alN4>lUwk9cwosIon*|Bekboqb? zIzYQP!s%Vju)}bUPfYk`HJ%QO9jKk!VR&Re0|U>Mq? ztfudjA~iQ%9TNciU2fFWeG3F9V1a0Mq&CY8F{xyHMZ(9EK1$mfF?j?VZl4o#f;2eu zeh!?49FFa~(+#BB$C6rWgC|n9RXhN>M4HSFCf-b1{ zBrc0lb#X&i9flJYXlTQVbZe79oiz;NbnY;~ElPH=4(20;XMqNgD#Hd~UK~-TwxfF+ ze4|LU#u3cZ#p9fgAPgMH8~D53(9y4~2|sjj3)VUcF6o0cm^uGS@sKcY7KD*Nkfs}i zG1I4Vbrefb3dtJig1A*(YK;z)A01$SsE{Fnv%Nia!(&sM4$;3;4D6 zu4M_XDfJXoy46gsB5%mNK=n{>9-qeupeQ0u zK^2ThHP=TMsvBu#Z)4$s!ti{Sr%4FfXLU=xK#)DuBT5w&aSaN9IWz{mL;!Q)}2u$Jjco2xTF0+d~)&@YwJ28#FE~4r>HNVmM z-Iy)69FovPvO~4=PtXJ*B3gR~!8NYBUra$ieY9CxW zY&t=PI)T2Ui6L2w%yci7XXo9-bNF~l&bE|JNB86%j|5nn{pA&O2+>_RBh!IrXO=B@ zxjrdFhhuh)t9M~&@Mf;@ljluG3{v30k`}!vf{*pdG_Pca;mtf zgvv7n;wrZWFXkD-pCK;FtE8;Co$zMxI`n2J8(&6;Y-ii)kW11{# zjMUZxzQZu*?j*f}l9{^iFqB_G;{nI}2HYn1YdmN9B5s#6B7h6ANb#$f%xSpQop#V*k!8hl1Z(3O0Lw!i#qxOC&&>(hI7>lPy_ff z7!OMlzbn23%zn%T@oR*roJECH__)^rSq+y>Qx2_S2-2aSlwUC)r z>W%0i!J`5&4-;UTVK|CBpg!IDHXlTe`$Ym1K1Bs172|4t6cm(r>_b6HMqJRi?(^oy zQkoqi1Lg(5ff_(rCqN8qGM|n1aEpq1@$?(@V&Ig1P4L61BJY&r#i%!S)XVFd(t3w_ zd3DqqJHKWu>LnD;G4)6;>U)odSO5yEjAR9u&xRnR!5IM|T&f-Uxx3KvVBUwd)?5JQxptmSMl;y(7 zm@`<76j#@)1}gVc%6M{^pBeUeO3w_Jst;Mf6k}PO$-zVGw3{>cLmutAW-_FBEjc6j z2`~y|>-BSHaJoxhdPeYbE`7|ULqzhctm6&99}8pXT-jPYWb`G&FMo~QyIm&x06euv zjkV)Px(saV=%NVRd;D?Ca5xSPi#zk-+Z5U|SVXKO*W|?;K!|Q*Ter=EnMQMcjf6Ct z+@2kK*4>YBKZL2{b!QpdDuyxT$&Nw7$$l2CJQ&jx&QHOr)M-=m(FesJJ=TR)g~d06 zU4wctjDS$sny{vs6e)pf3DTHX*7@MbX1Xs|M{5Hu*v4*szku}s#0@IqOV9M-6V44z z7Lh>XNoUt6DbF|RO=CBxfTu@{2LnSZy~QRH(em_eED)a%6Oc#ROX*|8&QV1ZSSN2|wc>BbkhrFxu+bqIhxib?nNc==pX zWD5IJnlNV2*h`?PGWHS{iQF(0JJFaNB?4AXTs&n$<^&VS7|W;C!>4@sWZ~CV&cd(t zq~cBPDhZ2+uwD2dxZTGIPQMq8vmiYkjjjXOd#Nyx??^JC1KxnqL&$R%y&8lqS80^6BOxYEeG>>obtE|Z>FjqDTQ93$e zWv~>^)hdFZSp?z(p6qSiG;%HjHd_I7@ih~Lneh(ZR&^{!tV#^27`x6MY0(rD2H;--+zc#!PdOPE0g85qoUHu_ zoJ@C&2<&5WGNu{fYgZ;Pkq(D6ZEgmLujO=QhURqT2!ca#?y^M(T47Rp8DKM*_ni-P z=wdtDs)GbarIWB#r$tlhm8>B`6h*@`3;}JAJ!vt$-Z_A2z|a>y=rs~Bw1u0~X?STc zu&azM+udv|lUI}uCo)Y{b0Z%g*fITbLfR!tzg%eGfUO03Zuedg>3g9R6YH`;e3$Uk zw)A4if#xQ#QW_EprY%B+MmNj=NwR%KIwF zO`X}$j3FBeRACG9v$2QeAz(AsnN zMnE8bpYG72%2ITT*IS9Q8yShMTa>pYC=7NQ3e{%~;wB`IN9}&dmq8e+))FbQgZNpg zP1vXkO~j6`1tylC1}*GLdc`P`54UDA%Fsk?r&?$tx9@Ove9&C*@Mu?;HFxvo^YZrG zPlK}Hsz5V7wv5-2AYOQ_Hd2ykVV!D@~M4Wgne>WGRL%clbq=~`e8*zuuOt>MW973t2d}l+oqhu&742e#}@L6m_JOUd^1(=YN3E^fo!BhAF-@4vObHp3l z_NGH%Bq)!jSo5Yqup*difr`shx;zm*!WKTx;`YF!Jn4NSRKT2yB6WJ3J$2-qJ>(H5 z+L9u+U~OkWhs6^63KqC<%p$Z+U+s7h^WtsShOrzsBY>Q|uiBeT{L?L3%ZF5~@7P_xaez!Z_J6PP@?OP5h= zq}p(MmtE=w=4z@xxH8pW^}OoODlm1vQ7gu!$V!HhMezo;CV?red)0qdSuZeEp;G-h z17E8CLU^9HFf$xEr=?C3v+DpHh*O4?ND!VDUua74b)hoQr*D#KqQjb*9{cR60}X)4 zyl|Qm$yUzdub2wCKRgeI+RuWd!M#+Q<4_)(%$7E*(Ph|@k@JU|rW1_69ntVw(pWRX z?bY~YazBd$FeWWn%DWrzKuHI+5kcof8_^y%4Q}ZGI`hE<;!Rd$i&l%SPcaAKWrEIq zzO{E=hlXvcOq#8fUYTgM5Zn@Wu4>M6?XdoO&W}y4(E)0K9f5!`yPlE6Y$}OQpqWc9 z%K}TV#OcSb!xnMFl@%Ih_mxx9baSmx`aDK5teplF>V=MPTDcS%d{+XuJQn8ET9z|Q zop!9jz##Kb%NW98%a;qocmwqXB~ze2O(O>3_66mr_ZvdWsQ(aQ&Id@IZuI?hO$Ot4 z%W}YOnal^_S2!$o;5)G|xIKjO#<&CVs)yWC8#Iy)484&zo*cdo$)=rI1!267w!}tE zZ4qunEv&cRZ{{?j)-_N7GY^EIDq`*xD%h(lRzXgYzL??1BIe|dEopC#DQCA>gOhiH zn*IurL|2FivH(Mhn&c4bo%pFQL%pGbGSnL!E7ZHJ?7W0OBZ2z>I2O1EE~#(+duX9{JQwFO7!d+T0g<#^xxhFlPK$7b2Bd4y z?nTjAFjLIP*;6JIYS!{VaSx*+sq@`lV<49r`+1b;!E}g#i0Q&ac^;NM;Q6D$<-;B! z2kT&%uM67%%e_1Fdc+S8pUu7+Mm@RHI`RtX?Z3sbQ&=cd)9HLEOiFuKm{A0qZE@b| zw>ZxxK0#ZY8Y=2uK#a3?01!ahksDwFFBM&C=Mi7GlrNdZToq}NP2hY^m2(H0A=9T# zBd>hKENYAd)`vV#yqJ$Tc;wjE!1;)STI?&rpRY3K{45nTs3O&XJS(fAF5F+WPym0All&GbRCMG*nAg50azaI3KjdzM`MDWf3Pb zmWb#$L}cf3`yK;*Ut|{#Q2{@q?U)F7m8U5O=)GcBh%M=T25j$tSbt2Zc%3DhZGDPK zXnd9w?EAMdBc2}kqs&M%^Nea(bg6+=q!%gkcQ7nLmvqR zzIJVJ=jefNOu#m^dtxn0V>A34E-cjF(y<<>E90FRm*S{4WYAF!UC~Z;Ms8Onay$_( zW127i5hIM1#nF;iuLN1p{;49rwO*G5m1+~huXcGX+5xC53`6ja3}iqE<#W(#OU7_V zTRvua?gk&ys@mY=rM|((tH{v=uiQ-K775|XQbBBkFGfXhT}ab({gCD4FMjAp4J(lL z@u-Ce&LDEpTIK0C?Wvf#1gXq4gzBtFhwZZlA|FduzoROI7Hj)zzyK9HGmsW>cI!>4P@2LF z?916YZE7Ek!m+ACIA^Q@TWnmK3mjO~J+ZF|2iXBGfXlP} zok51ah||S8v8XCX;BldJJ({YV8|Go<(q4w-6<-FfJKs8JpfXw*X8RJF`-W z6N`)>!N;!gZt?zdA$yWFF+j8wgXyErdor zuYfKHe7lOvSy>L6DxFA*!v&7 zi`=_08~lVUTT|2^Lv00mUc-ViUISg=ZlA?#?1QM54sCc|<71Q52Cd5+fqaeEU>Ir# z7dle{1Z}S zav&DIN-)63oE;=qU|Zz@D)cjy0o$Xb_uX+?3a^9wJmmO||G0CRzbXm#U|=Fy#3P`j zh-)x$j(EpTxM(B@t3QGHf`NQ(fcCDRwzDIw5h|-S{vRcjNv2xZxhM1|PSq1!!xwiJ zAc~dBo2R0X^Rbj?SSOCXt4SWW!8O)L+h_wR#HWneq|lRv#_&rVf~AP#EkW|BobpEz z($9i{Yg*frixP&y2pD3f2s>0~MaFTiseqVq3*AAU;Q+P@2H}44@-R#WWIl0RKFn$9 z)!6`&ds`f0F!RegMk@6kFa8_vO_Nto^KPEsI3=;LkrO$S4)@gO6S3j2}Q{nykPr0lCz&@FFJ}hFo{q# z|@@eI<%r&+n`4MkT#RmOM@wJcQPc&1bR@#4>~*^OdY zLk6idz%>>M#6w*n#2#`5u!#CB>x^-F>O>?3dHrRTX@??Q@H-Ut#|$~O1!r3Wj#==H zSq+kiv1bZP^dbzgMD+nx9*7V!KNFl9oIPF8H1PA_sf;>r>@`Y$Vb+(T_}1agkhm)U z6DJ}<+}+CtuP9^6qYW`-#9x;V!bMpS@h31gNRmY@Q*i^n$TGCJK)f|iup0U{Q&8<-|S$exS;0Q|eC zbP%=DTx%5qLw7-?HHQ$CAGG%}Ee1f4SdNP;6eh?rmY1F$Zv<@Sf@C*j+H`vwixvlA z{Z9nWm;^%j~t@iqgsxkd%FjC&rfC~SA+`SLHU1wS6yZ-ER&d%BUoUD_kB~1#fy^WXDCT+o5 zYFjny*t7)-6hQ&UQP83>DbSP(s7;$ffeNTq7%Yfd1aGReTK{}TxWkOO>ecGSYjv0z z{P!W_r#KzOYrTxfDAN1={hoKNz4l4krdIikByINk^RD;L^FGh>KL6h5g?WSg@rn_t zL_*F$iG-X0lhsHxZQMj!h?1_cd4u2yG8=_hS8}h!9_Q}lyeXTbv1T$UzlFR3e{BBa zUkEPEDz?m3Z^J381aB&`>Tig(U@QWR-5`Khz{qqJ;O`Jhl9!0exUUH$&so-zk?=eK z!!QJe@xJP|LXg*-uZd^z5GCFS1pqZSv}IFPNKgw487NQ8iNqy-ElHUscC#HO`X$dH z^^nqsU(XkV292t9qUJnpMk5(u$Uw-6?Epn2i6P3Asrt!im_G785%uWPA$*1yue`c@ zJ%nh4L94A#iNR>6x*BTdkb(dfC1-{Wr_MNJh^Y(p3kM8UqYc2v6UTsZ6UQjf2>Kj@ zzT63K)ustU2aW+N)ecp4lirG~W#1C2`c>Ec0p!gyoXz}bi0l{9HdIfN_GAik^n4}Y z?A?fhvyq2?nnI^k(o1$Dc8K7Yg1BDH(I=pNVTZbb3ACjhi4v6^MnLUecT}ATfoRe_ z*>0-i$NPT-VCa%nqam_`##lqOaY$8w?fdnkJwX0BkEd{KmDhm*b9F%3v56~fLZY|* zx(L_2B;REqK1c*h1CJ|N&jVMO`sy<|z$qlO!C**-C8@~kMnyWUEYPUK8?B*CkC?aq zY6>0&GbG}u$lkdn#ZpKht{R$OQpyfN=9Uz&z>Gvo3Vo8@`A*fXi?d|9Gv(3QZ!k@2 zDOOq%sW(CjO~UyS8}iW)E^c&KC8I5QM>HVFStw}905k$5!BAtkedz$I5t%SPGu0TZ zx0KOjk_Bgjx1L0`mM$b%z$a_ii+C`Nd3ROxn4MJ&5nh88426Yy-7Bf15YN4NsJ)-c zkswq(_9lM3wh3__WHLdm=Cj#>d#bNtwTEIzSR%0S1~wY#0#0ymorDDlRgt@)7x{)b z=UnM3a@8@#-7h*0oiMwi$#1wgI|p(6%|~j*9%;c`(hZM@Z=h)}l$N*_83SBhG^Ck0 zSKLn6iEP0n8hGck?y)=`8Ad5E{(KR@k=nb|K=+HYrwbg25D#*fz)C&X=*~gPS74{E zpJBpXQcCkko7u(F`wA6Ds`PiY>YFa0=232 z87)Ym*#%Q4wM*kGA*yL954gK4CB&!ncqQeTH~^jW^f8fv3_Kl9HKE?J>*X|<4<#)e zbPls#%noDiZKlZ{q4#r%1G~HgcNLKg-?})ErR_mjHnft@w&F9>I^HFAuS+LTNSC!r z%@}H>a7;!3XVBFI!}|AR%$?n1O{E_jhrk7%a?01)WxamU8*e>|XvAg;V+JVGO&(Yy zv>gz$FvV$i`9x?~JO|hU*~>?$pl~d0u7@=!dL8@3#ThPe<&Uq?_O~~($SP!GdsC3P zUV-l7am5WN{FpI!fVBK0m~}1%*jpkM^aLg+{-bcV{}R zfwYVAEYR!S+kMzV(G(E^&LjIuz|Q98>Mey9T2U|uPE;fOK7dzT5h7c| z99J)9n3UcO*<*RoF5`{DgJg-_PS%!L8rdLmA_tS&Tq=35Q9QUZC<=TIkwxN>Pg=6NI0nCh`gZii`-}yExM;?OdFVE zfwv5t78I|UBHqkMvya@TSns^At{hs8kPjX{M4kk>jK>^!Z* zAcfXpezXqzhjmz*6O)hbl+V|}u;$ibsE1*7b;UaDnU} zW#=(jYZOyK0puL5P%60QJ^@XUuY_aOfY=#tapCk4-C-mROO3@~K)aj%L6fRP(&E+e z752j}JZ$tIt5K)ppTy6)%#!Vv*KB%XP#y_%m}^8;aDCpHjAOpu(`CyQ9i>?JPeDy8@@)|dxp*Z#0ICd(99(^n8Rk~aY6kO zE-2P1v1<1W@bifDBw+&8D0&ADKaozFTW!D)-KU@CS3QM3V5T=|_*2!z$rHm9=Ffu5A>T@?`X|Wrf+0dI2*NMKlPs zAgHiTqDFRwcgOXc4}ob3EE(*>v6g+E8Evmq!cdN3#=pctkR)5-idG(+Qu6Do4m|Gg z?atSRFd$!>S-rWHy~wo|sZtS(bAElE$gj`JVP6}a*sVGNZQrjSy_V1iFdra5Ju$&< zK&^j5^?#bU0ma<8>xe7}P@K}n@+cRgF0k`?y3b;xm1|C}M@4PbHYstjt@eSPTM5avolS+BP#QXIM`v4)^S*gkHV_r}hOMMcXC>QYIC z1!&wtt+}PXOiMk$qGY!`pSaX(+8`DisDl@X-b^ApwY870_omo6&yoCWCwfGMN#+Ku z5+|?%{Gg-c5hZsT9?_-NBgz(@o=4QwLVMy8>ejekxsi<342_4!fmc0B9#Jo4d(n18 zDogdsVHp=G)N(b^mSjsIfGh}Bpj`dv@Cy?zu})!P?iv5Ak2V$ zj)5(~;2d#>0b-)<%r;Em*y$kd23Y#fu~@i=ge|db^rWG*5woW+^SSh8tHF<=FpJaK z3u)z_<+-dE*cPW*uw|wk{pI4OPN;}u|4@CxNQTQ%JtuUk$0O-25In2nOX#^25dv%8 zyo_Dy69-Sf zaB%Pkzx&#vS485#Xm8Nm8BOGHHoWZ$V+E*)af#@TBO(Bh;xY3|4f=VdV04d}c0&70 z9y70$b4s;&r9yx2H038E`G{Z;T8~3(_2NBKY$SK-l4ZO#U=DBoYHUynR%$b9*`JXz zYAs-}YBOs2!ZBswrR1o8bi$2=p5-FzC)^0#zZ>~{xl^zaEX*t%=sNW#!ezcX!cr1; z_nrcVLXrU@_<8xe@&%l7m+%XR0DDs8#9;I-Nohu&lZGhH(Yh%iwV9ien{ZP~v#p-R zzdXS~N%e)zEboPrw?S+8C|&G1qtPe2L-c^8nOSYM^bY5nuNT|>UwXK4|CgS@y5{$P=^^Z0qrA6` z>yD6|LPzBxaR@dzIZOw#P$H;d<>5iQA8fv0xQ$uW^d)o3y5r+Y@dxwWuiLyAmG0C7 zw&^oF@jy(nxxe=S7Ze=uI^K%BLkSFiEj86|AEArjV zrySfnYvdk~6*_?kJ5&SvXR-CC)I!giQsbtuVCsfAei4i>WF8XfAY)c*ZY~vC=nt&V zeNO2pmpSf}u^6%@(w@jqBkC!$y|WYuR_noR;SpfgJ6x#F74{%oWz3I^l5r)3Dn;(l zH!Tj6vs?q*hH$4Nnh9JL2O)F}D~NiP>cS#AgEz#`;{4>4tXGSDw%b$Rdk2m7NEATy zM*K*Jr1xwHijs*rL=F*t3T4e1@p$$--ba*wMD~4Edr{PW*(priDYbC2iF5z2jD|2< zviAm)oIMR@4I*ef$D-|``HWSp=Z*fX>}^sI72=yXjO#vPI7yA|(HeW#aZQ zmO}eyR8EH`!LrQI=#|PLGq!69!<-@9oQ9ATkiOBrX{1H%5Y&MvFmatR8^nRAG(VGSv*fpa4z05QYaL;jU zDVt<46+ft_v|rT-^m4Yb`W(^OcuYO4j4}&T0YzpiAvf8*ga$m9Y(VaoFjCkC1&2@5 zS2nlFo$7L89X5PW4dG=9He){3B3wv_go|6IEr`^~*+uJLva~){5OG3|S_)g;MMi zcnKb2h?tLIw5_OD0w=ZLEbMV|Rs}p!hyFSlGIh!jGaaN*yd1{4(CpQ* zmsknVzoO+S+2^%^m!ql(b^(IbbWH%`Br6=%<6W6L_D=yMba>LdT>!-9%0n;$&lp$Nk|Nq4h?Rf#lh`0x;7}XJ@t&3>3-7BhCp~ z>>lks$dihSyC)Z^3~9aA+9!48tF$klm%HeDdZ`I(>}02dgXwBI_~TNod9a4~Qrrj; zyZuJVl~EkqPNDwHx&wX8dV&R{?ZmPm`!Z}a{2a;ScRxSm@w_&Eu8SXM-988Y;{F5< zZE{pWXUtQd#e7nU5`&_hGzrV_43Xp1Q87^UB7`ezjDq%v!X+3+Rv1r~&W3|j8K?9* z@-!|BgOjE)C5RkD&o6)e-M8O%=iB~zn?fhp>w9UoLqF@o+b$&su&yeu&h*tbu2=!o zFJ<(43`8Za1)l|+2Src#U0q1OWpCNZ{r@Rc6lItQusESyi?u9B?a>`9A4CB+bVEf6 zpIp<~5b)-sJdy2%PlQN|BxR~^BX{E2~E`I%)+ZwU`PhaXPDK2LW}H}_?}sz{P| zwy(BvwM&Kk_FP}-?H*t0?QYtEl+V-PNre^wuh+pGa};mpmt~&0J722@Ddu0>l!xSF zql@~6NmhtDljw*&&&di!CZ_}B`pq(8=}&p1_Ln@V-g3`P>-CK~T!W7%N~pQQ>^T}H z?9KY>EtAt&L+Q5K1eSvx)DZ7FZNGI`}Q%2QN(A0l4zVJd;x@t$m1>3dmkY90+dYe zEGG-bPar{|?T30ro9g07dA}Mm2&hNUKUL5W`=7lWD@`37U{HNFXGr6EGqBqKjWF+V zOhZy1u{Oe0aL`DE;c!g|XBd6AqqA zzhJCn^jxjChLyb@(!9*)s~AW6m9`yB&_0$q5yIyBNy4DTi(&_03)bPl2~BHo znw?_1qv|PB`PUn4xiSde6!Q)uC{$#0_vEy7pPV?ldwLq^Q3yTGzi|}!AuL#FNMD^$ zKp~$UNv~*ed(6c0rf0e|;hdCRnNoK!PqJ$yBA@Y`lP9L~m6=iwPzotUr)zfMB|-w^L7u>|o*obV;HLE> zbpn&Sw%ZASw!@rIu*g_#sBlA6*mi7VJY%`Ma>qR&L0d1w+N{Xf>DGF93mj^5y|q4# zJ2`~J>gv<@=kVmr`bqpwcGSyvi>%J7Pt%E`!=qC&{hxVYB1rvaLHo$_t5@5=CUe4Gn0So2~TTxpgDKpQY zqHqa;Q>-B%^Z~DA)6KL3V!V(|SaLm7%2%AeZOPA@SmpDUp29m$HIiud{!452m`UnE zWH`?&&SjHM!&gi+LXXUO2>t^Z=Z|HI#$?ctJ=~XGZL9ugK4A!4;!Dz`t}qftyRvUO z@Bw*_sa^>si3Rm4Du_EHTB?clTQyO`WQ%762tJ!u`8f!7(iJ<0w?ykoLA%iWD$>bv zoH&LD@3k;yug45t3IeP(6oi?WE+N=)t_#hjXjULLy8JRasBA(RpGgEqTb00G9%z2v zvO4e0!&+H=s!t?+V}H~(G+ddM@g<|nD8$#2(d9zB|-YOqtAIQo;< z7TU`s9~U#Beb7BhLVI`LitNknlTKvk&`{Ti$lglapjlsJcQ^rSdWh^rC$bk3+1qal ziR`m3LEE#=u&7IeXq!fLsM~&kBB;pHizSYMKz2XBEb<%59>(M^Gnv+dL+h;mj?$qO z3ytX5%O=Zhl5K}*4+u|OOscySbcJWL8+5Q!)IxdhS&K{M+M|g~!PwoaUAGz-bKk(qszgT-D472m;RHqP}eA6dZ znA8IyBm5UxAv{khr9fm8fbz8uYe`83NGX6*j$W~BdmoaR3NyQH)&qEzMt&LXe}o_? z$SQpx8E^tvymyK53R-Gk@mt(79Opvgezv2Th%`owL`sd8(gVbP&nbex^BPo`~BcX?oC*_voTZaI3 zr99CO@LkDE)XCl$ZGFU zS^?xQRU1HB#U%sgS`sRPsH45LS4=mhe$6aZ#bcqe)|JOB#QAxxrHZQ! zma6EBGM~{+fb0nZ*_V#8NCw6S0;8e`=gA10ZBrRE4# z_<#Ow+MnAZzSzvRh+EiXu%PaMEp$vXXgO#m2lixac0SaLm{MjNG!XE^rCARqP1?J+ zz?aVA(7Zi@Ie-ZGu@z^xwKA?zLrfG(Vq?&0`iDd#Luw$G0_e2xTd}ZSizScU|B#Wt zU}s@hN}96OTy!pBVJxBAnmS#aZMt<=m01GwDekT=jz!516S1a~@nkfloO-p$;1|de zn* zoPtFPTyK;3XEaxHo5Z`hVy$G8xYk5j&dDc3t3p!sT#d>elgmON{e9G|#6;Z*HYwI$ zZlzp>YVW02?!cUEf7`XX!abt!eoV67jZ!V+_Cz$CQtl0vu zuqBS6vOJGaOS@q?Z=&7Mk%)9mHeJ`d=vfwTI#9}mFnduJy zu{XD1t02z-&eb}Wlb&e^SJ%MH=TC8nua9NWfty-l>3tz_+6;8ut$=zWC!ULG!h8Zk zS)!Y%RdZWy9Vp}naaLAVX(lAhix#|O073Mbsp5Tirh$yK>$~wHYa#}bS$Ar03Z(qOdV1M zBsIQpa|xzn3Zz~1jC|_^pl}9d59flt3S5r^nfb(d$N7v6x9y}8_L80>t~i1iTb!< z?f43@Zl1`%MYD_R|L;FM{P5B@(3QpYHPXx#{TK*BQhN!mkvx>u8sx+msVm3x(CIe4 zH9`5k@TO&0{KDPS#gm3NjTGL51eDTS4@S*#@?{5oF7(5VSeRt!q3O;&u6sHW*6%jF zY0!o@X|dQC-sA;@7#(*W(MwleRRp}nqx0=wvlC}%D&4DkXRRT>i7$~cR zC%^(pJYz*b#)sq1=%m;0$tiildodrLGtK^A=ZBO7X8;jryR*v>AG~=%;{zEhaCCl{?$IybD@dNX{p-DFIldTf^Efzp#(nJHi?Y_dOE+P@(>w>@t~7O4*y> z(<~c`NsfGJUUR@6V01&zvmLjK@23afiGKi z!&K5dRRa081JxY`vSpFFiPZYkDZ%{*SBor{9N8Q_4uQ)V_NPAyMatLJoz6N)a`FO# zm#_}*AVUw9iv>k(7ENBgTa|-GGGL+g!1@#FRp0Nu(XecPQN7E(Xke~v5S^gxVBuoZ z^F-WVlw5+ilw_~7>&C?wb&DTTJIkJ=Jo{oHrl|!YQxT}URna0)k(e7}0I_|5Y{e}v z<`7#)zFRbBl63qZJQ(5Qq%GUrG@fcPXa_a5(l$FPfwpOuMitXQvslVSyz}(r=9n0* zgKg^~Vj4Bn6i{mQlau$}f?(5X+Hv>Ql2LSR^@)? z3-qdlmZ2Wcl5ds9$Wo|AqUuPw<<*YwF&f66V}v~=Y-J9q6V+dR5I1nYL+WlB4TO`p z8c4fURsaBl`Y2f)z)*z%lWT>an~%&83E6Kj`njSPOD2p?r?x4bc{tsyk!oEPap+WP zek3fqW!m~x_2??y=%6DQZ z`Ap#`@YrR6DNn7i%iN6tB>HG=80PPoOXN6Bibweh)2q->LpTum64;m|A%^k@?R>2Z zU@wi>XCg94=b{xUiYN=zeisq!oN%1VbWA%`uIP@uiDTNSLUYE;m`5MdF6_KWpX*Fk zYHD*@p4?8?My#t#aj-iU7xF2z7-$JmL%Bjz(P|}~gb3x%DJ6L*B|Mf=5+KnD<++p+ z=t6s4Xi7=;N{K*wfmC%3aL{g-(WlSsn;%lLLXtJMlKEbBVHeaa!Qnt#y@rLXX8V3|;qYcqINFo}PMY9ewlx^Pj zq{o|WK7FJ$%6Rff+2*^-XXw(8xj!Xm@L=W)mNcR%5I4oZFS?O-qipj!qypOOvdv5A zon@QXGA87hQIT9o!UN4(Z3RGy_rLJj=KtAA@|1#-=Sk8_vE&I@Lvvdk0-bD=Af_x| zU|Atz+-duTa2VtgYl5c(Oz2N2tbYastO?MG7Zuf3CNGebgAGz_Ht&NMc}`kh1WW4k zq7;!$*_IbkU;{7en>S8r;B)2;1~hJ0@-IB^Jf;55O_VrQ;~3(B{Z5!woo+$KKy z_Lw|4&5Qt_5R50enVNcItGgwkxfNG&u-)d4 z7!4~UY>}lGiA7vq+?@;1&B2jef|l`&O*8GYi`r+LS*mA&gJ1Y*e*8Z%?!PUQCLyOlfu>VH?mXwb7%r8cAD=8{L0rnqBZp z%!V^cX-Be8Z-$YPwBn1KoP}1Cb4dJI?d-|I<2U_XLNWy*A+SxzA_Av|Ag6;MmYq;# z`Iz?gs6(D{LX;V&njHx8&(5NsAWD3y=!pJPBF={bhyZPd5>JTesS|X2AQApU$Raa> z@9mT76Z|QmM4#YUP7+Gc)LvSAkaIOf_sTPq6eqe-T^x6k05Ypjm|m(^a{ZqW$X_04 z(FtHO2>c6~QM&or+#(}aq=U}Qx3cE{X@}L^Tgc;>hV*gZHK!}~f&aMiX@)0HNaY-T zaNM5F5^nkAoY$w?O4m_sql<*wdBh#kICgdZifyxd zS8-C9)w@u@q?C4+^-`!KgOn`mG$YHpL|-=3B+I%q1q8mZth2XVmUXP?gxqzO^`R{5 zFpC*PAtUG`AV;>wj(#GLOw5-eJYs-31j_xe$ z^4PVO^@Y~5u7?{f>w1PPJ#SgpL($c+Z&_E&nUpG|I$72SVOd`k-}UriS!a8+EbB7+ zg=Jl`cswJv3v-J`(*=X}`ptTB3cD%isO# zy+Ig^cZ^!GDZoQG#{MiBzEMkL_+Ai-*|HCuwD(Nd3aYmjh$mnJ)3`5_A6YsMD7_@D zQ)lz}BoynOG{%TK%l;E+OcQR)J{K}^OZc#TR{({MW&rKa<|*w4-Y}as`pf}T82ET# zy4cwjvE*)@66t6=FDY$oS6tN24bJk^7KS5z2gV|1pvMi5xxa3*ZPq2MnDHS>5Sek0G1VY+)xP(Oq4Ww*t zI^-Wuq0Cf(SNdnM~Fb=lhGai`eBQ-i+lm9YJ00fXol7PMy@~Mlf=%hOtoLq{-h9?t^6?^?#E4GEV0VDeV}@dfari9+K@T`*NyFi6qBU(W zR#z24Q_7wsUedKj+2gXEITVsl-%8-}WLj87NjTwbM>>(rY*=ouLZFoW@whaf2g?Jx&T9T5FswiP z@FyPrmN&953m{V|TQeQN7a8jIr2HeYDTmxP`jLK~Pb`-DNO(lm5@PpT)B%-zq>uF% z(gC2JDDs+L&W3A#=`Xc%OmiH490JJVGufCd!*T3?~g;E605QKTAdr{s)eA32d`}vT+K@Uept6 z`s&pw2{k=!7`(G934G0Ui2;9`pRw-pjJZPJ?X~rUWSCFpDR@eV90`M)osk2VmM!aL z)tSjSQU~53QkfOdyMHOE2>!5~^S*ou2je;qfkut!3d4*598s7};%Aq)vzJaAwLkhgodWx=PM1tPwB>@*PcZbltX2*s50 zb5HhSgSl2LDZpX@t`3bR8S#tXsg_QkWXv2doiv zjq&Bepu_9OZvCnV3g44`GvSz^ntA`n^O|9(IdI`)c^o$Y!ab9Z(#S?XGYc?`Q6+C} zHpxM@*KCjR?X;#LrYif@9ZvU7owq8qLP&YTc8!fMaBzoDQp+CBQzdriF|GBEH&$7d z3^P6p5{{_S36SkRzm@eyxT!w=?yrHUO5HuEzS1A@5))JOL;}VPS!Lu`EJKT||0`!; zG4U_BM2sxwW9#8=t#Y6=N=wAToKNjXHh)+NRxTwRjdqWLz^PhRFvvsRK%u}*P%nh?Qrf}qcJWmJ1XG$;tYk-Y&aVfLU z&)(3#me}kAMrb=ANQiC=Ci6BEf@DI!gksvW$}TN^XrFUbBs_CA(Y>RO`1LKktmYcvh7YK|K>zhqQUm_m%&3r=(;_oDEnE&afwH_^^eK)`THauKN z=q6-CQI-3ijEJ&E=?FiM{{)l^3v!ZK|Ct7R@^PLL%FT^)9_55K{1@o8tL2I~rCZl! z>*8Dza*@{uTx#(LUEe}FHOA`81LiiV>fE%!K3vA!QnH;}p3Q=NxQV%S0nhDhxPATV zal09W{0vJAwCFuM|-OcAbQ+i5?9gD5OVM*Lk<>r%~ zxm;h`?H@*SO3GXBFdDC5;uA8PXoZt$fbMx7MXOAdj|I>L`}V@Clcw*%+=Dm5&Uj>+ zKOW5HkDGS>xNKL0ZvJ>Sn?G*a)qnzzGJlU>zfa@SSeZ2Lb}FJh({=L`HilsugAK&X z53rz%2?-WrW74J^%EdMLI4Oi2WMPvBC`>AwQm1$;tF)u0U|E)B#Am$d>JUm7LaH{t zl%&V<>*Ap8fpFj4TtS=yBU7$JWK=7A{Ix6VQ7aR+ zLR!b*0Qa^AoztC6iJ`}Zn?lo$5W=X4qVUuM8VDjF=A-MTWwRn9iL81ETLe7*PUa!_ z?IaguEzp;6M!lda0caEb;iE+*KM_IY&CJ7Y%6=;taAtrG7S*U?(2G|Rk3B5cs8~0(*OdxdyQ%2vFA4AVHI&#iC6r zq%88y1r%G51TQjXg7{qLLoVo|+IPU4IJJw7!#aT}{S~)g$r(BYIL@{^v`%{|^ej&N zVUgyYDGNx%F`(^vw#rr=c@Sj#cOC@(?d3s`Cz#4c31N;0OKsjUh%uuZ6#$V80nGy( z`;-@k4Ic;|z#)dskf(HKvr{Cf8TLkny&$jten?6-lCqh}uw4k#^N5KBlomBhO)4{P z?kyLmS-9T<_mZ(2^5Nsi<9&5CAX?VQ?91p?A;H(2N3+#_bF=EKUVxG@Vo>QLBf%Iy z5!I6<%sU=2n#CwZjA;~1TPCqvk9vaveQRbpV>(qX zkxi0@7?aXL!qDkSAax7PVy|#6bo+vM|8)K|uD)ia`S+Jnopv6}!^n;R_G{y9Ty8RK z>}>wmaEmzfokOYFHp?f!aV+DTnr}wn#ZdP9>OwloPA`o5Y}=8dO22i)G0R1>f*kz2 zKR~yuuh^dI9y;F~Eyl^AB4ApPj7%jcwg@9WT6NO}#el;I)6R5n6Qgs~_pT#AOeS5as=SYhiN7l(qP@|OPwxhx2g*m8IE_P~8uPYQTP4HhFO zydB)u1}5^josKtpTY4o7)C@ANWq!DvV!f6<(pm#T{R=%EBgp${^U|^ zxryVQKbhK35GGsFN=j-U<794~CoSYkt9OG|y-Ryj*zkv_5A}#@B+08BYgiX>^u$zF zLkE8{Kyy@9SM3u*WVRYppB5eMOK>(AaA&A2RXa1Vf@OYnagg%|;hjV55lp~^PKaC4 z0q`=-klBN^^I(#0L#XfFOB+_a7^cxA^-3}csj|=p&l2=UBaqr`(fPRO{=xDe?5Z#*9!oB(d5IkYseQy$=TV2QU(zfRa}b&1c|)AU-#FbpmKJJ zwAr%~MX+M4na#T0tiu4MnIackkGjZmNnL&g$%8o2<*s~vaN|wY!#Ta~ig=->cMJyd ztd|vF5{FPCM6iL4qlBs}`M{~F$Fu!#_x<37H*E)lco-)uh| z>tT(U#g;|E*bAf*xJ<{jS4I>E8kN|@+dnRConw{@mPhdQq%XC4Xx`{N-$={R)R*v8 z@uvh#-W)GNEf5a6V8Fe{U|=<%SmxYujkj@mnNA62_>7^vBxw)yz4lx(JFp_8M35LJ z6p|eCtA5B%m^x)e!8_OJm-@G{Z>d0Ng-@u9FM3>ERAv+Jsl-w2d|D8pFJJOZG(DzE zm<7qmP#|X$LSb`SI=9w5fWGqjR?GC6X!Ktsqcv*D5%<5OS>lvLm0mo%MXZfx2{G#v zOcD^4b#sw?@IN$HGvoaVxtzV!&DrJolNI4~3#97(4&RztIC>w5sn;vdEcc6ZpIu(Z z*>%q>ucH>b{`hU}cfr{|1f^n||4^PROk~g@&J9^d*&x8GWAXl2dd~qvDcz7>lJ!O( zf5be(Arq1b1}P2z5y2RY+Pg!}N;x)VKcRF!`h4Cy2HV9Zc0TjE!)(P%AQJ7#UIMGS zIC}{%;JV~3u>U(>-&O5Nm!gO}yo0qs!<(f57(_FJqs{Q zdC^LUO1uXa7Cq%FZ*Iw-ud&u_X9w9tEF|TOSVQ)sGJEo-e>oGm@FMQIaPj=9e#L-*4z39paOD z-^9jGEGPE%)b+!yPsvp=7jBJ!BtQkKFklX46P0RCmj)Puz(6rI$u??kXuD3yJG!+?+PC;uivY>XXNqL%xOFvvMo^T9Z|5!L#0lk}~H_P2_5`nYbO`<%Fx;BhA?j~`; z*h^BEGLFG5WnEXgCcX1L@Xlu$n>wUmbDpelLW6$z#73rR5=>{URS^u+rhlzvbEAzu zs<3qNAS^XCxI?=ByyXoJn#fb6jfkPA$&FBL=t?VcIb)59V`~iufqPb;8N&L_q)VBN z7_3M~|LnxK=QlAno@~`-01&Ww_&1gD4TI$924~|4q<6(*SaHkCVP;Zgf}P7Q$;X9R zy7-7Y@EB~}Ox>M;truz&sE@w3YZO4KZLKlIqp@^aow0Py+~}LSI%0u}wSR6c7_(H! zm|L}L7je(+%Ebf#5QcMLGkOk>Rlfp!^6Gm=qpg4f^X+-Pb!Qwc-V~k9Bd7-XCp+pD zCm?@LnN?rL1IDB!(}FU#SQ-kP$eLx@^J&H>$I`?((h`cJqnBzpCsw|(?#EyC=vba0 z)dD*8%zd0&#sSFu?6)iV+|-}SYCbpZHyxUWph5jQua+NU%~mo2g1XgB(wqZPbr0ko z{zO905Xioj;I`BSb+KWKE@A}{YD*4x?NCsgpj5yuP$upE>OImHPL~RlJTj1Y0TqlM z$ic%_FrW){aW_~|R$sk(T9I%3g9(Hg+@ht5x`{FQL}oE8Lk#l-=_xW(Pv**zxm-9- ziUQqC3Kl#eWi2?ME_?GtaWB!2yo7}3$pzEc2F4Qw?x|@a^qNc(p~tJ}J#ro0<%v0h z9U{2T0}QOML%x5688iow(8LL&W)TfuSE?K=tJy!M|JtT#( z<=*qD_IyGS;ahMr(3PP`W((;c9U&{onLAP}Nl9(ILd$=XHE&Kcsn%7Be$(k1e z(FxW(Tgdv$W|viP^7u6~V8IE(-rWIsNl;uGdKu7Dg8y`*NTcpX(;^)zz)XbZ0xa<) z{9o82R0EVY<&EB02$F>zt;27WTp&70d3PKQVu2{2%?tu4x+glwvyFc&3>d4YWgpqg z4%s6K=sdDxi26bxyVbgr)9C0+K=*!!wYUpX13`*GD~P&;%1_1>6mj~+#TDN6_)$Xo z3BKIRcYM*I#+!46G7~Qxczsedf%qgy3=cqm)6#US_=g#tiU+a;h|9r4k0RPU{5nps zf@6#Jl3>uT50N|{a2~0x>}J*B?W571EILlo_4t+&>iWh?A;a%OU+v$UkZ@RY?en^4V3 zgV(VUXrY?9%!R^|Y~o}1ekThb--d;c3E4@VQo&|_kRU!YBApqeM2g0?d0yb6k)dm^LiYs70msS+YR>bS3Iidm zG+sjmq?u`kn+Q%rt!{(UDBA|7@r>ZKl(vkU2u^c>`|Kp>>>quT%PGkkb0(KkQSt=e z$vYxv1cNI|UU}>}rqAb)f~u=Px6wrNy2}5Y6@@odgxh@9mdMFwp6d30q;RLk z8LuflD_OjDy2`FAIpih^&fHY5VoYyrNm*sLmZGy@kDKkXDnpgUQ3hn4S~D)4{M47= zjeeI7@CT|ZSsdY8I2;w=q&QJL%@*M|^QgFimnF2;edSNs6oZC9FWN*+a79QFt`6$e zOJaX(5IRSR5t){AO*|~84AKI?@@ASfD$N%`>#h*n;p1hlcJ5gu7S#*p)buhIH zZ%fw)MHH$QTCYbc8HJwbUUQvIW#!#^t;mMi`DFt45XA{@y&U$CJ^K)M08iaq#k#zt z(bj7yf#`AOVqlTD*sp_i)%OYAx~JeYFCWOL{(yrEdEz)qZ;|u=`R*)l)()&ztL3J_;&5q{6{F?Vl?4YEX)UX!<#{;) z33bQ@%@4g%9Uz+U>9t`L@bz@n&#Db#^;AAN7m zzYjf>SARF$ffbZ0-+wPA)IVXq5M+3yRG~lJJ<9b+q9Wo+^Y1ub7B)ikgVQ0#=_=o%tvFQT|91LSO;(h z$I1cl^Hm&-ZI1l49b?NnQexDje za;5@>0=fb$nqOHS(F={^7e1jHj^ru=l?D)GIAYi`vMRC>HU$(cK>!$c;Li5@=)s-s z_beFtiehett;hXlZcoLUzvGOoKSf3?5zz<}Q3KIA0>LgU?rp#Nz;CN__xh^^v4H5F z&`l1Izyv5oNZ3vpd>2(BYjz7mE(e2-wYA-+AlGB6ti>V1XwBT7FCGrcY``DR?BTJ& z^z&~I1ae0=Akd%404d*~dKW8mbwEdl%Z%05z+zL(B225ZH5&5ZKfo>ui}0372v7}M z;S-Qa!gO|`OoHKDO$zJPuZ#|P#Mm8WKjr$5ZDyoXpG1t7ZQet#zT9j`--)W(Jjjx- z+y&lMFh118`9A~!`xNHIzP!0quT*casKch4OY-vxqaj#e7m&K37^dQXkj>;%_FHk{ z;oLVbiEpmzR*@x(^+^|WllDMzH~4ydB=vH88ZukPFU)&1$K z`}Eb9=SBMJeIZCDc-_HX@Hq(IiJqWoxx-rJV)I*b#g7#SQg8vgOE1aq1HOv@dZ1Z5a~!BRPMvmB-CMGzl|y zbO||kB8WAL;8tLvrb5XZ1659o#9<_J`%>KACizVZ980>ADzKKRHxrn65_=U?$(l1% z;A@N>HNIY2DYi2P$xB72(aS|u-JpT9$V=V-WHyq6ob?|Cg_tpbCB890L8)^a6lk?N z)JVz{90k3yS!yfXAwMA9xw7Us^|D#hK9nal&k*?5FdT&NvvaZ<4Is^``i~MFQlAE5 z(^<}xXAQ`zw~-4mLL#Cm@Lrw^MZ@SPG$cUTYDhc@4GDj8>$%7U>zU_*8#JVOZscd- zxzPO8tbqjBFdZllT61O&Ln=!#Ag;EW3^f`vB!q65)kkw=b3_T8r8UEf%L!LZr5|f< zSz;{?;+ID)_XB0eLc#Dl!~O?V#FYBUM;X&crF`)8IM>H>&Ml@J@5OJU>BpTR!H)St z*AR|Vn1fFn=+H=(ahNei!@Fc`<``jAhFtbU-ECzR<-vz~4@lI3v$}g=4DAdcb$)J6 zEJJK;K+T<`EbZ4int|S5TgznGS-kOTLO5xkGU!#1UxONmt*6DX$mqI)fOqc4c|m& z8)pK_tLqfrBwR;aC$SBek=TZdfwsgGT3|rO3y}=NVFDmKUb6eq*KSD&I+xfcknRiW zJ(`&`dSMQeQ!?gk4C%|jV*EgDvLJ4hWMe>*4XjCK8~k*3N{8`j(@~pbW3b*O+3>q7 z7H7J%TBH zW=Nl1wWjnFpR{l0e=)iH@5#%zZy&jgj$OWe@!*uBZ0SAf!*nMg$F#&8U&k5pUW5Cq_;3W2k!lY3f@T+*yNGfyUIRHP{mmxU zB7H;K3$_AY!7usACs*>(tx)FE_vUpfyuM@{m_C|2y$6!Y2f(AhJo_4&JPOovnla$exC!lwYXfyk3?&A0PsI(_L&Ui_l3JA3z2{O74xKmW>0zv6;t zKJ&}Vg~g@eXuPtzxmw$D+Sb#zZ9nVDAI$47Ip>4Knh|>tFbS=RP;P>Z&U)-*?&9t~YzX=BqCG%8M?% z;Dhi#%s+61@pDJ@W?c`Y7zi)rgGVB+pM0>{`pUbJhsHle>3$g%N9R4Lm%>kd!K2~I z2lDY<8_G6H4>W`XBtD1)D92CzXAx{q7tiW*ek1^jTwu^G+Z z{Hi{~u*Sw^Z%C_N!>0F@FQb3BiFXMb7>D43Fly&S!m_#0tPk3D>SR*PK6)7gLSq-| zz5gFw0YeMHc>I$L=_Fkk#yYm4CrGZ%P~vg`)poIL{Jwu&HTHD4qn!QuIn$u7M`fT zcszPwZtVh&LrRcVd^oiU(xR9RLlEXK?^}6~bij=RnJhb7VUKjc886;}3vFwrNXhZh z=XX=3@PG#$G8n2tn+_u=-+?{)M5nPCp4jX09aK1z8Te{4?suadQ!oaSHDGwwCu+FZ+d>p}N*k-pY9`Wm~>=HN(*TG7PEK=3M$A=I?$y*W40lvu6m)yt<_*{Sv} z@i)|-VZB8^TlmsY!WJ6rU#{oEVR{-d;RIXFR$$?6i@H>(jBSm}US9xD`}9ED7d@am zQ4G(gd4(RzK*~alz^9L9QS9w~`yP6qt+VxNy{fT0pgkME)8fM19Ga8o&2GXFty6nC zz~_ODWz{`}VNLIZx6{h=4rXfWAKz@6`(~5ADfJCr#5C7l%~#|5F-wL~D<-erbjWzB zC})wOGaj$idC^n&tnxH}o*i5rWO-3qLtk6ZUJA;Lb!JWOR8UF`^f1nW!}Z!rK_Q%! zynHErTSFhUB`fkEQ{sgy_$SBp+KqCxt%Vz0FK>Q9RQb}CMLu?MKYkPCz*E{(HrSK3 zxlS{O)vPLZv-2&k6Lxa=>y;OSW)Da39@Qx!*0|sMwIdW#4ZYUuwIi;Yk2PvW#Cv_o zUBB44D;7PN9~rSG{UNL=dk8B#MQ+wq z^9y{Z+t>4#3~s8oA60g$!8+S;*G9LDv{DmgWQ6HciMLjmHwZIL&f*}rIEx#7NBEAt zzw-U670x^re-U<5Jo?HenJ(pjIO zuV-2cRkXJh$~2XYf7oqFz?vet%$5!^T(}~$n6z{ZV|AH&=_ns@>FC<=(m?}|U>SHY zG_w$#U@bz7AyZj>*<{S4b+M5$(1LLUi2}}%7h|iLXjaGt>8Ss0^|r**Tc8T zn%WtVc+8%$4lQX;Z)k3<*IXKHYR)#`A~h$|nJ}`Xxizm{W`VZn6wRN(-U`^8De8@k zB(84tm_&$K^MblK2BbJ|@R%4QuZSxr_rinO6<|>I z!bA5Qj+)xXc=n*(?Qf2!T;0Yv#5lxQ{BZqd)xG`jo9i`t!JJ#@0i>Sbxm7Rd`G;B@ z7(iixJuHJI)0SLvAy9R52gEHjY?!+?27WU@S1pNxW9~LmV9cGwqzM2^U6csxKrr1I+rEi7M4R!&W0^~uNwK4v| zuG)6&S|1B3Ybzu}vp^t7^u|0nSBRw|fLyZchubG!e>=7iPg`hg#HOSmRp(C5wX_&u zI9HsZ1B2K>Hb(KH1F`U@u?KNSvQ6Z**V$S_$`ehLF!ixBK&UQA}YiMtbZOJ{`q%hg&6xD5NelsIN9DGm&*j56W5Kjq`KNm?)6f{8S`~Y%c!oR{V z2x+8ydZ7uX=NUeCDqH4ruxlBi$xaR&Vn0Jjf`v1o5^sLxjpd>1VVTACjAW&*IBp5F zF5<%?eORUs)v9rj0{&2C*+8zzsH%I5DZ^I$p*Rc?0UG7^(V@7l&)c{17RJmxjQOq4 zTX|b9Nb82*Wfc>Q^gXBJz_?`VCw9y{9#Q=&pro52f-XPAu(;i+?|KVGxp1S6jaet?C|KXcxJTEzNZSYZ#Cb zKG4S!Q{3%;n>X+NTQeHs>@MGN;OSX59j_NJ@Jtr&W^Udb%r>lR!eS67y_G5subSy# zu^Qb*AIE&yOIlrGc4176?&c<2 zU|>mj$~Vq#lAe@?;1m#RwC^5^Pd!PoHvoxMVKnItU``q>WGB$DT-3teo96}z|3!|l zlY@Xf80j3aEX?|AeJbFDd9n;(th`CQJ}kMCr`K7Onsnox;Fx0o7n5<@Hj;ms|<#0gJiolrIO-i1{5{zH-DB z>Xm%@iTtB?N#*Xe8fJ&$F4x1q^k{~INgtXKVh;zS;!~Njm7B+Je5?*#oeHTpu(}hv z093?<7-9?XQ)v0+sZw!)m7B(I=sF=>PV;qme9PS9urt6DZ#46u-LE;+-2SItOfFx! zag3=Ll$cRLM+5O}&I{L8EX##B;2a(%ok!TH9?Y;&#^@Qz@o5j!ITlGek&4Vn)n_GT zIv#|zfGbMV$FpZd_6mANsp+lDgBbMQt+&p1+YQUFjrxz z;^#_!pgVkqguY7++RXZ|*_r`<<@Et=!GcA1Bv7lj(_CjKukv!Y)jh~kwXvbeoAzRJ z8n?Ur77r0(8tei$2@lVg`X{xfF6A~+Z`1?iDLKNPvvQqBH~|9Gm{PA0pHH`ZobHe+ zoB}y(@`)rrB4aqmP3aTZ3Xrkgm@SYkuK!-#$ZOvM?&EfyImR-i`r ziml#IV`F_dinbs5lQMn6Fop-JchEHTB2Wyc5#ml^TX0vW zq0F)(_kIf$*ntSUlpdjEN3Lb!9kDzdNV<_}4aqBvp7o9C;#l^L1WNzW!{ub9sr4by zPnEHpe;6&Z`LtgW#f@2Bc|z-zLsmCkSX&O^TWJ~%ShCb9xSVNV6VDbztBojrazJpp>PJlrt>=P>mz$c&8)S zc&pvdC46)uIFfX4z_&#y%-wcSe0)uO9DB$?yEFy!LI1fNih9VrPyq;6u-tlwW5KLQ z^=pIV6rf`1N>S&GRrO&fT>>@an_^47dVGvta(65r!*?`7>w}z?Vph&a?4(=I!kPsc zg(fs50&WNiLQOJB>b>ZXHd-R;j4$;VgKKbuo>i*%)H)Y-3gOlTMP~DCax!Il9M8HT zlbBH07fGyn-wFEc!FU7mvb{dz_42l(qS_i}y>!Uofvs z8wj-Q3aK#F2@p3(xQ44TRpy`LWJR{6fh~pLwXhEn|4hR9#lq`VIj~FR3&Q%#bIgTa zl>C|)tb-UHK%3YrG;FZtDy*U&hLejpU2}A@K8R%xu}KJJnq629R7Q9&X~2wG&xGw1 zRXBug2v87yFt&13O{u_C8yCb4E#iSPu9pm_QSY66W@3s;g^%D1>xr5WhH=Msq_`XC zZkKP0#$Qr|Bh`pHr58~8KtU;DP|G1FS@-KH%yfgynV7#yGAqj#17oPx25Je#Y5WIU8Pu?O>Q%Pd zN{k%RX$p}L+J{#$QB*82!fzdDF7~Nxja18{+4(@+wC4kH8Rr90)+rdYU!;FN5I2#6 z!3FM90@strm7mgCa=obifV>VOVTm?uv}Wn_IE~|klhrP1M;C+Xjn7gy-8{AN(b}Vr zkBRLPEj+PZ2{GeBSC$i-Nwrruf~#4}Ux!&Pq?;{=h#AymBHbfi^{-nz2a9b>YJ-jt zHbFmvju;Q`YKI%W!Zo}`^Sx8=`=New>R(Ys43-3}6o&Ps{s5F~gSSQ1JY#_bN5^Ci z!OQ|to$oaWalRftXNMx_G%_17wS0lvd?7T}c(}VW4;o{cW$ROjc=yOCas5eqIa7NC zj?_z0Zt7)TZ|rCEl5TxPVdoqotCOzXk1C@8k?XbbPD5b#1;)UAE3dI+rbOVc(I&79 zM3Yu`u9<)ud$Ml|8?UzVnk}$#41pl==2%-TS(LEDW=W><5eqYHvTR;|XtDzO7UF4~ ze_kXu<~>UfX*m7h`&Hkh{bPnHb$ACP{_5YuO^l3INQEC&yUx;nfkC zzXFRSv?e8zP?lbW4I;an`@$XC_RZ2mR$&Z^gMgt56w>#|bd5%KarRA8t*F8JNbKP& zdAX`L8DT0PV8EJVF))4>l#}g#LPgo8n$-&J#g)rBwt#Ac8e!H(x=m+Dho5OabaoR` z83iK1mSyI0sa$ac6T?%uu9p9PeWH&fx{hB%ZyCA{-a^;`BQ4U`x5`GECLHL@loB1a z#L|Zb&?uaiyJe+IrW#;Khs0r!zOGWrdYt}J3pj#HgHtP5t7Tav@Ir?!An(ybL4n?R zPp=MdzJydI9uO|1S4((1!CJw}U#z@JEur1foC86HJnF&DwM;Fuq8hv_hg_G+>g_Jx z?pwKb{L0QOVM{Ew-n}QbgIFLd#Ej}?*|7DIT~RbF{xH=p5M<;_(Lq6{OTnJ@%6Yf_ zY+DKvbs#fDC6)nHWz!3(l!jQDXbWBcK5{0~C?*`KT@s6#&RZO(X?9N;`w?Z@27>BG zLNMlQC`ZX|j=?bqMgjqP=mUeaI#ccI+2lT3VegF<)@8J#6C<#~9h{)MwNf)e#cI;E z6Js@b7i{z8;?MME-^#0`@tP^x^0WccQ{e~JBXDHD@m|CwIKolrLi_dC3Ibj*I z6epdnZ0)*oM`yY4m^AJ57jSq^ufu#2j=GF+- zgIAgrMCX!8MijU$I71@*l42kqG~t;r&jDGRqWVRA$j|{1`+DsrRiRXL1|>kbZGTI( zXF=H81tXuSaUYw;T=2de!iF6S=-S8xY6aGLcU4yX9OgAm>tIiIPNaR;o-kn{BcP9g zM9`I5_EP2~9_U)Eh-27*M&vX?^oRgGf#QOYzP6dE2;K1uEJ*$EATI!P6v9hjV<&Ki zf&7rbS6n@6}!#SkSJKTdaA!JOo6!tM&E zt9(-uUE`eP_RE8cETt1Nw~%VP+R{M|vf^OXjs+hOuWSb`sDGzs9OK+Htk&H0%yZff zCL)@avdM{{SWSz##{MAmY$c22iE2GzkpR)YIiaSfO2xe}t%2U-qcA3=J~SFG)@!o) z0d+}ADXNR_0;L^(tc@lPJO20}7-V%AuDEz!{&6;hXf;((f#SNR-(AQJ-AjiUh?Vp@hN2_=uu}%fdNtzPWSY-8?_>HO$YQtVG_;(;!y}D&*|}$dst= zg_8E{1xEK!mC9RgS*#@H?MES1fyBkOPvm; zH^jwNduR<1@bo0w&v^Zo9FwN3p%iG3d}VLdm*+oQykte15WO5%&tMmfrj*UOsqFDW zp~K?;tQSss3^pq^Nrb7Z;en78s6dB-N@)W+paxq6G{Icg>_37Ln5QuwL7e0Oywh8D zt#L|sA;_G~Z`nz3MjjieSyY{CZ)2s~7OwFoJv60l~gn}uWK2c1^4og>Y(X-zst zH`m`WKEPaa?rXyRW)cp7Lo44gIzcB?CJO6nePvR0=(#_BfYG3fRNX0&wf0r8lMe)A9RgicOV-me{h7;*zwIQ*uZ2{M4N)Y} zT&wn4OAg-x>jcdp^<5c5njKXK>%KwScY9PF_Z(Fx)f9=oS$Ne%F;%Vo2gO+)#-J0F zt0PBDNIPGp=rZwI!uqf*Kwc^`9bPA=OW73tqRI=%O9G)rNC?ZCzk2x~My*=P&8rR| z=0Qq)y;?6nOYH2qhp;~bEP&S(&vIZ7)u(p4CR}N~$<>;YWwa)Ro@ti-En1X_oK%g= z&y5wPIeHwFzfGdne|kTdb*rv^@ppK3WYCNzWix92>}?XHj({YU{A1lx@-5I_@ChPd zEhL};WYsICBZv#g#Zx*B;}r7zy^%+h9-=q1p^os$xATcnnz^}Bs^->M)`WCt;kQf@ z$XS}zZ8E!4$NqL!SR|yr+Q45=PX21=5 z+t)J&uAU~8wbTW9oM7GEkS2v}iO$+8>zjnxlcz~p*pMb=q4{S$kaWR^o#iHrniPTe zXJ=g%2kbsRy90Fh&+hI^mnQ+-rLeEPwa$H4=1j{P>$e`c{m8K+ zM+nMQ+|>Y2{5`j^r$;>Div+-1IsgNA2m`l&`17m-@!z!9bC8pQ5I!+) z$&5qhRysErdQyd07cMk$T^v)}i5Br;b6Vss9bpk~775+Cl$zM3IoS=ZVtV=JkSn)M z&-7bTnkwHzO-RP)|LF4%zv_+aw+t}i)(vI`)x!osIVGe!X}5(}H*t$0;vjRS)VA1~ zu23)pMY74z*(2EEL8bdAoZBs4I#s-eax5&=Piubpty)^hvhd$n?s)>0UCJvoHMhsY zGj)p?v(UGBvqCd6-BUgP@uk|qo`zIXl17fZX+;rP*vOf#Oi!{E5nROCvfeW5y_U9r zSft+83<1lwlgOlPGgEdzQmv#NY9sTX<3f0v2QEjApMI?w6mtUN1VZ3^HakfTZly0w{Dgt;@O`6&B4YWV}Sy2!PNB&zt&aY~} z`uuO`Ro%TZ$&;McMKEPTf4_E*ijbE$(I2DV)_kvyuZ9LwNx(_TfBzr2O^q}+A?yoh zCQm`2%A5b=f98U}=ulJ#-GiJuW;)?0BQ2ZF(y{zztL;b4ryR(J^}%wgjY^V+DT*4a zdBVcQhHYXMk9=-P9(RewJV+-vbB|ce*H8v6;EFTImkwK~STlJ8t%~XQ!^JXGy5zb~h+l=mMdRe?zFNs%PtU zRXs=Xd|ct+x}iQt17QlgQ7n5DJV>M9UZcp6RRP~H(pOIFW#*o7(F}5iOma)lmAI^B z6S3`lC}HP}7Z|8!P%RzXiKQnRo!zX#DSc!@9KDQC9KKq9cPh5%CYf4?4f3m|XBY0D zY1xb=ta~_;ou;MOY(}3j&JNq_T?g8$y1N>tD{F+RR^n5gjJ=Sz7z`-H49WfgG4W@q z`dWhjtM3R4bW2svq_C~|2RrpRY|9dZb^f3ys_^SOURsS-I_gh^ z$9-14AezzT)pAf)1Yl4;R?ewh3h?Jp%+lOO3LoDay`^1>S@_r+n0`i<<&leg8A(vcCHtsoj}Ds!Ch?Z zUxL`KoJ_yAqk4NQY13`l=ZR6Qw<|dnW>#boe$EtoTBvthei2iQ`~>YJ0LqKAGeECy zg^alntJh))tf5J+cIuy9&e$WAc=nEIQN2XzSpAMYtKb}Nj9q#n1Cq=END7>Ntiz;N zsZL@^b#3jy<#GIAu3f0ElEWW|p73zr%FAUp*eOIMlnk4nu9l^cLD%?j$wxt#Hn`Eu zOCBjA1Sw3FsGeageHN;PVNGFkfYd)MSPbiCcJpy0z^>vlifhSZ8}rppU;wFj-?4av z{t81k3rJYJm5G;cK9o;aY`1P6_^TX3@*8MuWtIxuRqn|sM!qW=A_2WfaaXZd-4n$% z#C)29E}*Q~OIYn_#Pwn46W*eK(lnS$5?Os9EAzko?X3Ad61>x_GNC_IVkElrcV#4c zs8mqb`0G&mft?&qWNBxy$ z+$>3sK>A*iaDWn9Ms}qvh!euc#F(Q2MyKyS1->!cik_1*w$z6_0RAGyVf8|D7XiNQ zlSrQVRV`Fcvp@n?^L*Pt)F(|s>JcV3K-l%jEk2mbYA|dD>WeC?MJjyALoG-8_jq3Y zj~ts3mbME41$GkkfXSim=>FaadvFv~+h_>{unyM@pL{Po-J%$fZrt!Go{cZgPD5nu z#$eECvgfK2Fi){62_WX!pbuWeUn=5YC#9AH4!Ci7f`LN}eM_TyjStmx=>d;~#5INw z`YYUGKRV?n@_IWL7`8I}tf~p?Railg)WbHGo=|{*?>mtkGztsyz2syg>PiKLAxdIp zv-udvvux~Jd6|rVi#oDgK0?Q^U-wM;vh&FhP=nH29iDF+D994FADLwc`QS&1-+9;& zT+DA#KLWhIsb@$>GX&ARU%e(R!5!!&069;A0dhnt7~W&jKVG{=H;)2ljvtf>fbSQ)? zm>8;cl3ANpJ_lAM)SP)I8Vj)?VIXc0*% z`Q2#}@7*ljTQ}q0*-@bwyEE?X;v;IsRVWxcmoeiW{l09K5Hs%QaGs2KmbPSM;$KK11>)ia&zf-TMZ$S2(3mx3iYY?m zOn}TCWQ1!(rkq=PJTW2DCrqaPq%<>_VxMgqXX%V0c42;!o8aRlr4&!;@3mN`DmONB~V2H*Q{;|OPgX*Ev@%&7fY(Mtz@DG zW$J9LP;e((RlTTHa0g>A=yC#x?P53qp>>rBX<;XInVQ>$mAu@lRp@KIKGjL9J*2&; zbq)beH$z#19$YST&bfdSnFXX=2_mMHRee(4SvmNIA-kdY{@_hvVh*Ge5x?h$VF&F61baZA=zbo zMfVf8>$#}of9Af!SS`}daGi3o}3ieoFwDDULj+^UA1a~ieTZg$ZS|{kfD^C z5EhA8hcaJ0V~rBrC;#&eQn^fD%iPt2pJnn=Ya|rfO{#l;Cm}3^f4LOY5y}8_57!5R zu#-l617sNE;HbwYl5;3i4m;KCa@8YgRoVcZz-!fK*q&hip`cmcBw<84<(GQFVP~8$ zk%Oly+Qi2rlVe}mS&pZwv)ilgi)EPEYVRsOZ9B<5UY$>Yx@ps z%0WlBNv+35abNB0WEF4khl1y&NK`$-h0YaV<{g#_i`=EnIb#v0%3b@bi-&=w#wg8^ zGG^yYTZKj=VfV2rmIe;yx|FKZYD7&Kid0({)CS6RqUleiBR(NBfU@MZ=^#Ehptz5g zGC<*pOk6e$5kFn8xA2B}E4sOU>pnMhkj9;iN?842%1c6@|3cJ5H zlB(BR7bK@gFC50H4CS`;;=pFLV4lsMs)J zUS9g1Fn@}2`GpKkm>p^V0ZH@fsFR~b%UYtKbTr<@8MDbhQ{6kWTzpi9xy?4r+K+T0 zbh{)n^=X7jwS?(CTyRccCr-zED1}LD+si%F)}l42mFT>*1~Cz;wuan1(;kk5lnYb7 z=EFHz67dFK!?Po$4=*%)ABI(KoX>Dx*>tH&N3z)F10fG&EAxz9Ee%3W)?D!sP{;Sd zJbece!F_dgW8?`p2ZOo3qyWpf$pmS_BOPpO_J)$Y`Qof%YGC%k3_8!NU&8-z`W@bb zr!SEId4*RZkQ$Qe2ta!*8&E$puO3}{>(O}Y>x+V;(=#*C9k_W>W*rur?as=v#WgnUp$+~-;R?9I4g2yV+`g%@CU=*T)>^J#k z{u+^!>xZvn3df8lc4@O3#!Vm(YYqYVpyZxh1cQo$2+TA9lb;Ao!7zAtx|SM$$V(wM zi-?s31t9^#!It3jJi?R}w8!dVI;A?WyeAlZ#nT}`!65Q-V}BMw>fb@1*k}|mL3ybU zbF>Kvl@3Jp@4Jb6n7R;pd*}&e=J)_uKym;zI1kSahC+Y{?|O=rGX{QTnHf^5_C!{z zH98H5rJ+aI+bs&(i~hz28oZ6ad2zDah(bL8?fBpw><^V$HI+CW6}n zBWzSxM+)L@OqqCc^>a7{O_bodttutVi`eLx#mY`oyW%n?v|RJP$KoO-pUojdG=c9` zSx1LoPfU0v9k3&$Lkx)YNd#!!xY=vKDcEbr&Ga^A4?8@yaZEg+Rw1cW2(&!$8A5PP zG*guOa^zqrrd;uFZBa0Ed2m_rVT0?!1R6zu=JOVcAqdH7D zqrk{Nw!&sIV;)oZ459g@_^a?*wZhVqzlj%~=6C5yWo?EHk)Mj!Pw^|o={Ovm^r+6Q z(GF)%cHtf8=izi$Ijhl$+gvSvJINjWsqfP3{l$Mvb&DS8m6-LZ8{aXuDtxp{g0OTV zeM@Ny3RK-OIR9V*jJXyIBcMzKy_xEBpQXJ|siOo2d4k3?ZO{72q~z^prkl9gI%%wM z{bsUVi~k@E4(LAReRCIN#A6|CcMu`3;vV2J6pxZV7>5XKEA0tGEC|s4iS(Cl1s;QrcQh47>rzq2?LyyFaUz6 ztO5o_W{+w|8sVQ`Bjs<|ta+w7Net!}Lp7g(q65j1XGf6w9$NWDX5SK8fSc_rmFUz` z;fA|dc3X;O9_wO|2^*+E3^KX$42tOzv{@CjzvTUR&S(?<)H*|EDkG4p$(5D}G|RGl z_slZ?u3&evuV!zdmuLP@OH_N+dv-fFCd@iu>6k<+epEn&5>f1lw4B#X4@q zUW#9$sA>d>v~uTWZ3-H|5v`kfh(iJGH~sI3dQF4q*p@0EW z?#BrMASa>dY?>c2OUn`zUwhrKm?Nirlb$~5JgVU0R@v9P(ttT!dFMz6vd4+3Rzfth z?vh*9_WQqsByXicFiFKQglJixo=RA$;rZ@=phMM);fZD8uZ8{9$*9Koq1kmm=yY`$ z?KB@$Aibt6fAHz(z*L`J5k)-B2Ed|W!vdh?%WR9yFY1HaqG9nYLX+b!bsd<@j#MA~ zyaYrkL!!Dr9%G7B5BhkN=|C*UBewRczj>;ozq|xPbG>@#^Bw*51-p?+^@!f7-sg+g z^NhUUX%pm2w8CF~I&&*$$W$?~Wf`9#+b4kQiLPk&VDg2ot9gZsPu4ILKu>iYRh9tp zRM0;y0}qw!!Fj2`7bJ0{k*u?^1D>=_)?5#?Bpv&BR|sX)k9XzBs(c^}ruCsVgVzBR zRzGqu0_wlRoY{mLp3{68jJ`3TB3vL1jTj3HAU%!oz^o85ffNc0sTx2$aYNX(om)?K z`-&o}l&)fXbydbrJ4l(!o(AG5$uKJgTOA$VqMV1m-Ih_K-r{$mXos>w9p^ znq@l!LRB^y(S5&{Dp&3nzDu-ZaV(YY-I}hWi&FUTDZRprBI?3%)N{D+c$XMUm>ZtU z%_VFyoyqW^E2_S+xuv*o%N|LA65Q&;1gT^Ndbrj$PwI-N1+R9!xpT&8d} zeWv#Y|38)9w}7128#D(X=ZXj9x*zIh`LG5uVX7xo7ApcdSH6HBsDaD_kI5jO$UTC2 z_0mdmWmr%d7g3f$iLcEQ$Xj^=)Aai4b?KGaj0wF?2uQ9JR*0#ckhl^Wi7ko`(x!?+ z%?LM#X-pTO=oG)~Z4qvgO?&5bkrJL5vm)Kn{ev+j( z^-c3znY0!*YT2U%jTPQ0Wv-y#oXIlv2}N^a)@5*&Nj1~MxWZ0%c?td-@=jtBTg%<# z3B`Xp;Isz3f)R6%tLYwZC%R*$B*S)+8i0 zJQ{iM%ZM2%lg}d9NLa#HLpbZglS)XO2}=v%y_xDq{*VrSN=IH=_(V3fw2;^mn|G@D ze-fMyd{Co54YE|YgE999HvzQbW(?}t>xQo$kc*03J(zqeTIdS?jOLJRNkxCka--%81Fwcfz#1@WQfo_<8P5YKQs+KqLPhYx z>ZYV|mFT00t3+|83_==kyRsuNOt6A{MU^L{QXNzb04qLDo~1q^zy$>aEh{x?Jn)Q| zN_)|Ut1L8gR`S%Dchsk&pStDATvqVVG1=9$2#5lkd@;U?qTJR5&LhE27Pd+A2{415`d9>lllhZuO zEJ=aR59X8uzT*F&?gPFA{~BMcFrLPj-UMgBVuG`|h%@qog^<|i)1i%+MT0h%8d!@q ze}rZ6=Bba1#KE@54?<1-71-7+WSt{yX8}w`Dpm!uj%M@dt4fF?$28YUZ3E{}fn{5q zn&0hIPr@{OE4_B_70FzrL84>zI0#t@_5t#IG%Pcx#NH&Zw0?Y!7yGsdsY0hu7rz1l z0_% zf`$gmiHwji8X6ZTL+b}Js)wc$mONIYoNamn%KHs!Xc{-jsL^C3gbB)Vb;H~wH>Ob2 z2Q{ULgG_o3s{9x>Rx4;UhJIQ85JaSwIk7lW^#AOUAZWA>IED3c@^(aK4I@Y4qai~W zb`35cSu|fSO+Yq?1juB`7xcDIPkKQ=CtmWE6*nlAm2el5M`>(c`$Z2Y=PUu^YFGl6 z6*o>jo)tIgJoV$imIv48DfC06eOQ&rOaqvX3uOS9PYA%Ca-ITkDge(*ktHlXadM8d zJKwYl6wHC@v-14mU3b{@aeiGhv>VANnk|;?FjE z>5*x@^oaCQ=oODWZR7MxN`vtt4cHb=i6?06pzxGwj;~E^3_)sV&M^4f+7JRHmi@4K zfHQzGY6)($d%$NLQIPmipD?M|Kmb*9y=1{DRuBXWcm%a6Y7zqZN%5=MD23iPRnUp1 z(_?g!wWhNNlZ46Oy>xAOWN^*;1{&1%D&!RiWCst?`>TYw)n!|xDE8AF2=BA42VLeN z1d9?bq$?sO>^p11y5v9+1mmSsZZGH!l=>HWKjd12+TcHU{oQ3m~p9l z+NtPiukI<1MBURseUqNny`0+hL-~+=K?{e_l*g)`I_chGT}XRA@`* zRc4t*zJsH(qMrRzQ8+v(_WM762(DLk)Zj?oKP?>Yw{W;l&F-foTXLg9x~Tj0syOxC z3;AemOI^EA)z8R?w8`!ZOZLRBpcG*cm;+0t)l4}NkZ#=GI=;CDB(9MKq(&#t&7!1u zRGfQ_0HrxQ@h%H>Cc zMxe-t#3cyZ$R*gG2a~IixmP4t0Z%{DSKWCYvHut!$l?Pq6YdN3JyHg>4TnHbn3usr zx=HGq*sRUU^(9m)RE0Q6-U$5I z(kL*A*r|qPK{sN@qidA*95z47)mcsAS{*H!x88#qCQO7sb~2vxoe7{ce99zr~BkO>H%qtz~|Uos3c@|Dll3p)#YB`{{Q% zc%>~lWXA#bX9Vd>g!QX!%amH-G3Cy>Cb+s2tU#JX#$l0ySXEOivxit=u=JHLv-JIq zVya14GHX|wgT<&X2axcYbtI8>Mk>uIl%iU6Fd)EbSD7OSa;+kvTx{Z_F)|9^dAy3{ z<*5F3M8}~|Q|qe2gLHnnyqw;aq{v$3<@lUf-KYaT>I-pGEejQC%rn~|n>g%DZ^GCw z=yF9pk?Db{Dx*9fG{TY;3RnRkuOsu~swdaVP8>xECDI{~Dfy9Ge!R*;O{#aMm4g&Q zkz5FyVdgBLxGZ;s6mrHNLVSjR=as3z2oVI4z_{PzEn$^_r|bJPZ(jU5ek7x2Kq|bk zWO;Y>T6w2{>wd?A^iSa`$O7i-LHfBdI{$Jg*S0AAp<|0tEX(xaZjx?`fF(J=0`p3OY4hRWJ?7l@G6$gYE08i;ZSx#ekD_9@I>(u!7ku zfi!qU{kDDy0cFO_w+4$Ugl*p=lW2?f1qER#laet8JL z9W9X2(&&{uM=~X8@JAUG>TkPbS&p1sDnJAK%tt| zGp7?=ghLv^CgxiXj5J8TX_*Cb36k7Jm>}6`Lc^vKBx~ zDf&x=(gk(nzFFvmq#3DKRUnN}?U%2F@!AH~Z%Po@xZ*>wrRiZu@msolez`+SI&x&) zE2Q=VG5#}yx0=Bc5I{_`$&x*y$VV(k=;83QN0og{3@Ic78&yQ`n}B{m(P7zP6~Tsjzx=O-v`Ps5T;`O_o>%u%}UcDhg%# zDb`VZSR@VoY^AQMRiNw{WhrZr6VfT<%IyVKdnI$?ip(5Hb576-G+hoWW54b@efG|# zL}Y8fAKSzD+ptUxd2rb1d8!b!=0Q&w%ng@cVd1sa-a54UuUkp*iQ}W62@|g232xUwg%NZk!JxL@UhJm^bs1y1OoKX)gY#O0ny(HiQAyYEPnXC0SUtz>@xeB0 zA8g61m$rxX($fsbw%h_8hw!qWk+)^KD;!d|9kE|Nui?`af7q_}L8R6lrHgmYu zOu0MscXucuuQpn@YGlr`5H|2+!SWGv~IN3DttN5T%wh ztYVKNoNGon*Njksr~s3>W`wy$nA>b$HNw4H?b_Z}*BlqT=;%;W5=wZ9Mf`=5q(@5m z^6!i#t;c9TiE;HY* z_(z$k(yyMny1ZJcMCn7yB`WDyN~f5nr(-E)Amq@N7ob{RUClBph1T|Z;SBA0S zz8zvkiv&FCile5dW3d07r&jdnu| z(=muTR=Oqzv60)DZ8HAAiq1*Av>m`CPR>db0)4G~Qk?_g5C(nD@zUvt1K%T68%s$G z_KDm)49Ap5 z&}Xy2L-@Vos9|6w0*_`TFcMh_1eEizlHy4A*o`xfJ%WnSGZuoTw*8m47&GrLeF4(v7h4Q(|Xn^gR*B` zhYL1#Lbo0+*w_i(dV8&K!D&5fg$tr*9l{0Ae<#%a6sAt=Su0!+J?juI*w_i(ddy;D zCv@xW#ju73bz09_;ezN{hj0P$xDBFJTkizzZQxmNy}cOL(4bE1Su0#1ueu2rV4rO; zsC|;jQ7)JJPUBa%>n6(H+h9;zZ?6?Dz*VJK`zLxZ>!v$P(xZvCvE_i7>T=3GC zO?G*ESeKt>STAkaWaYUrTyQ3vWCUZ{D_^=gT<{#bikiYuJ6GX?bL(R(H(#}Z=p!pP zAJw+)xs7c*9WD^CSDCo`THxGNxL{ukoQ)+i6&cx7GgCpFbHeb>X^i-D8YBLk#)vP~Y)=l}1{hh717yGF}oz^uVzUwgJKRwr= zcpxhq^IfKVWB8rh7=GtAhTpl3;Wx42gRc3%AWy4_jzv0p8-Sn zd2Y&|0YmqBZpxnlL-%=Z%AWy4_jzv0&j*)UGbi;?9UYl(B&(|Y)OYLXh!)C+YtfYd z+RbgYQV%!h5frWHO3eB!UxiK>ze-#C^jP1obsQ>kmN8SHyyO08hZ3VnTxHF|fyq=t ziod}5BuTHgVT5q&rZDYo5Fy-pdo9yCW>I#=V+J^G4N6gW&K33yrZuk824PRi9!>m( zh0XX2w70>aw%%SVNiSwmcE%Sls0&(yQq-Mu4Jt(4*@|w1L2cc>r@ajZwe|K|QTK}& z%SCcmcXEKU)y!lm>dv_a6{7AN=ZJ2-6C3AN}RW5P<7OuYmT~~6{GH?T~6Y=?Eu`1 z+rxVCX@=F#NGi{YQTH?1BqOLZL#LDUo?};oW*~Fz*toIuYQ3`A+_mYbyMVpQRNuYT zsQd1gUYKCzIRy>N#W2*xMu9FiuE}DfKo=VYy4biTi;V(}rn-1!)d+WOb%eXt9pQ7z zqB;}lPtjDDXj?VHom(B@&UHt4(N>$esMSmvcZpkQaL9gA%e8S+PZ2FNI9zCOxX|D* zn(ER>t44UiR=ajVt7{V~ZRd$?YHp~VCw3+hyrQWtLt@nk$6FoYc-;}U^Taka!gijR zw?tt2uGip@72FYry@n6jBD=X(8?tPm9j`@GUH0Fq5%yan+*C}u-x?w7&sgts$Tfbb z$Fk$-@G9++-KdTfeaQL5#-sxq=)+!Har923IHtn4w6}pi+vKu5k2dDl&H_7YtE6yNixkd;1r}{g84|0gbaAU)TWoc0LZ#2iWn}%jlgavxjY)Z# z<@#FfC-fT|Q_J7$yQ^$W*?(b#2_elo6`kGOC##M(#fv*8qx7NzM>JhoAuGP0>OKqG zldxk*^KZ(EYre@A)Q_v40;%C7QunofUZpm?jGohcct!b&vaat?ro&4HuE(JIGplPl z$hu7HuU#?y-z8U&*v*%y*Fe)F3eAUYm#6|kiUunzPN*mc)k?_Vz9ijE0UoM#T|=!B zEz(!d(Bs;IF?Tfz_EQ9IJa-olQes7uc$o^3jj6k%La|g*c-`=Ds0T7A{$qCI@Z!N? zSAKE_3Ds>R&X`+Vk$VWd!#`~{gUEE^o2WsM$Z+4OV=q;tE&F0 zyoO=jDm~nxNUcKHl%KjXrFzYpvGOezg9~Wfr(u%{7gd;m1?V&>3ZeuHeX255=y10H zQ6h4Q^$fU{FvsjdD<$15sP-jdamfaK-!IM4h8hTk?XFOpnYMosxY;viPBjL#u!vPH z0-S0E#of|0;?PCi7+ey@&rSnzvtY_NsiKp2kW)35tPO)K!hjOo>%t&VYOB7Xi=n^$ zrs00o?sUUcTY{$<4woo;a(v7 ztJ&~^!68*2*IusLTAQs^r7;e1X`qc>Z)2I+ZG)GsWoN!+8ljmHJ@bBFRHsae+hKJv)y|g!%RtCW8yZ z7+GznaY@{(x2nO$IqUGkxzDr(w(z3 zhXxzWH}y@QNyM`t4xw9xYIP4&GYzfM+^Hx@c}0@)(DnzaS#}*uZ`Z??wp=UzFElDT zXjwGFhQd$-U!bmB@@85_CtX#y>{@g2;sdIn8QRs-r&Z1JmYOa5G#Zw*v1KBlnUAuG z^@$zr6>>uR^zLYt4*!zs9zFax{O~tAaykE})2VX)Pp2x;if*E_C&ui4x!`)%v~~dr znWi4N>gyqgA-!iOQ&^X3bfsX33;AZDUD)CU*=cOXYfw{UCodPqs(+>}HH-1$!(-Me zKFl8M+H~bon3=8R9=_)eiguQZ=o9qDjeAE7QlD|-@@Z9!S%RZnxM94=@=Se>>U;VF z0v6P|HdrWk+%!~qG%9=MlM3Fsw}#_F+!~H^wuaMY%9J5zL14MKcXT!l%BonP^xSA6 zJ0dow@R&v_VuKQH+B@zrX3)uQblN1B)t5ppi_(snAUnrYqD9|?OriILiM zi;)%7>{bJ;9d+Ge_ETH0X1D7W*I=AsMXI(u({6%UNuVJV?FOfibBB6e{$MCtjRXe- zh%D-nuKeTdaY$*sO$HI10bRlY9Ty1M-G=heKtsYU7&F=z!uzD1EotEXtgw|481f!; z{7W$-)>S6O`&GrPQ=T1)7)c%19blOtyBu;M;(&8-a5zbXLcTPNo8D;#UJa`VQsr7~ zDs`&*y&p7ZaX*Dd>yq0RA+E9xn=g)`T_DSAQZYal+z7I+*|vfS1)+v2>zOJ-^AUEt z%Rw{mT|R~c=npfh0KudusA#bu%`Duo*T{|bohr8)BFIOeMgQIJrdz8JPT%O3$hSr~ zHo$2MRU41m!+^&F;VAvUnrd?msRUp3fJ!spEBowG@%=k>WWHa?rucrv6+|zVJ?_Hu zkoVEy!Loy9M+LP@`5{uJizwb#E9*x7X3)zpQV=Em|v_p%sqU zMS>lix!Pck-hh{rmf8@ujbU`(W%+^7r%+9hI4f&DPpO0;hl9h}Uv%h*%hd7`l><@F z1kEKZrz@Vua)gpoNP$`>c%Q?ku{lu{TvRpJ+*Jr;-9bj_4QPU?pATP#h&U2e*ICt$ zP#&*yd@uA1w&0ZW1T0kB(}zU0!X-8F4JWfMivgxT{_>bLdoI0(0MUA@2SLuyqWj}rQm%8J*U;LCdE%;R6q#q zzIYU$&La-qj61-i*olUgS@ZF=0#2^Q{xTrqaj*s=q&-C;l6P=8;FlD(%Wh*(#%HeE`H0wO3P3;Uo`p4vVE zoSf7)w*16_ib;E$VOca`_a0Fke3KU6Jv>l9%eNsto|a^k&83E@|F{Q;Sy<{^r9_QK zY+9s3Qa$qz*>St<>YY3~LP9TbSL=4wUUZ#$IApGHj!wb<%u2>^MM5zrdqH70!57L4 z3R}Cwjr5lij@~(N;=Jj*3LPC~JSzSgT{vxt;)mfm7>o`nI#5^pwylg)^WUlZ>!v23 zrzU@M!7<2^K&z-HDK~y37bH%S>xe~JLZj3P4^-zk`V%TygX^O~7+3oQ(?FkBrZYj! zy(s)}d9|%@bT}HE>!;Zcam`(Ax{gUE5=ErbTzu9w9&Z_r>#O6sVZ;K26a7GG5uMWA z;RuClFCL!ut{1iu!j2YH91ahL?J=OGS;URnfqlIF1-zmdjC_n-n+3Vqv3=mYaS}!L zHAjC&eEch_bN{J^qo0`O=qJq4F9GV>_zgRQo~_yh1O8PvTAN_x(@`c2QXm_nOgRB( zsFf_h`8vw9-X<8ixQ&lV-FOp>mk95tHrfQkwtw}XJ5lt@tl*WWZ0*LD&NhbOR`$FA zRY!;Cz;6`ifaz`?o?C+qpWxrvqim>J#;XcFFus2Tb6t0YqNw4T^E?{ zigGW!CW-%j8|c2Pyzu?;!l_sN&wTa5N05U{+KtEm-HocCOFe<)!e1^2AN^$v2XtM$ zeaGv3X8Y-xXYw~#`&t239Th2#CJXqe?UZP@6dz8p4s4la<%O?cuQx=PcjE}E>&wsN z$7QnsMo{i(DX|E4bf2d;(Rh;53ziaD*fxGA#*>Yj`APg^k#w0o98J z)ZD~?n&+$KkgxNt`Jk%x1;GIEdK{gKjwW1+4#let_NVIG+WtJ>b$qKwTnB1U{D^iU zJjn^bQ1?D4t)V?bq?aE_$J?P3D{_j@bLC_@z8G>3S8geO7-bWM1G_ljvr3O|FZYxe zm$ww}=jQcghPR6$B=U@%33^){vfjqX)kYWcB&Am^AO27(Pzo|?MFxSWzT_OS*21$YD)NqlFxmX2zD>54I>3iM=;(&Y74?#6)BkcnGhmn_D>=(14I$H&& zvrt1n8_ICmbDhfZsQreERH;bCxjTac*3H(uSb`~!pXD8%+?}+#7!@lEmm7-y{gpOK zNWmUw2?T(Yy_Wh=IwIN=XIfG|pB}q1y;cZIi~of4pfXc|Z4c<88m9p?gTRhNxOb*6 z3ZI1n7co3$8EJno3bKD+EdKo#!L{}jix1gJm|PRfCxdhJtRB-pgDNk6CX)kPGOREm zq95PvK`3eUkHGQ}^I7SX>j6B~#s-_q)dPhCcWD&NI%svHI84HGm!Pbn_6yWzQB*u9W$e>AwMb9^;k#tb8TEGGTg6>Oo@A+t{Hb0Xwfj5+KNmNa1t7 zs9nqG<9%s0xM}!8q4I+`T_PhnoxSUZ0EUb26VjnRJyPY`Fat0^Y4qCxe1I>gV|Sai zn%xnrPyGR(P~B=C9YAmTGtt-(eTcq>?H2h+7nuM_(HN1z3)4$kRUvpAw#eUz)N|Bz zJ*;@CcQS^c1Z|j{!MetL_x9>Xdd26^9MFI)L%1+0u7MyKog)TVvfzsT1dJd={8cn! ztWtk_*glhQ`393y70jx${l%v+-=W|tn5+zvT_|{pj~J`eblh;$gdRxRoU*qeN9e^oQAfDP8SraBh9^;jYzzVg ztH2ggZyj-l`*0|3r(xN3K-UE3&T&}ye?5MCcoUc@*a8VwJr97W9~IX@k{^!O>V5+< z#z0dMB>lmjb$HE!goY0p_0p-Fcsgdy%w^dhS;r+WW9Qr|Kkl0U)jJh!LSBe*0xk9x zCQ>-BgAx=;!1ki65eSOr{L>f{dhOcO2P<@S=s|6Y&Q@v9tkIq!`qY_(9}>7VgdgPNXcVpR18P6`z$npdD*W&OaYV)g z(J0!gKOuhh#q`+1EVeiQrMw+P6I~rS1gg^!m!l-h0-1n>Jv48+AgryK2}eH<)u`HpCbG^D82r~06}04 z7wOQ!PGWChuvx-(J8BWAUZW`&GE}NJ4W^r6Gj>25fidt9O}a|3lRz#EtpKY*q#YDN zF0@0uXp)1;`Ft!zhzYu4E8k>r6r+gRdY|@{TpZ6qpj~Fn*@m6--OV}MuZ!_^{rn1Zrt-RFd9QKU;59!UK4Pn_q5=*&W^f>?x!i-b?;6a zJ;7FlvQG6-Ffc|ak#7$v0J+PizKnWW5eo-8>V`lg8wjqfoLnj2aVu^Z{)Sz;lgT@7 zRoHZQuUsGIGBmws(bAaP0j1FIu9m5o9)(QF6iU>WwY@& zh)cC~bd_B{luXw|RM^$syqH(AJlV%RFU_r=$#HIU;d1k^Y)~Xo@e>)cFo8jW{Ixu^ z{B?UkfL;qtZy{nK*(UCkL`UMxSgw$X@r{}$;Unker}E44Tf^Z~9KM-om#uu%u)2-i zk7L9j2Ey+ufPhxtE7(CuvhgK+x!7C2r0iBdxsn#|rR#hnNI#P%csC?@F$qnxwJn{K znePq7bYHN*I)~bzD|x`TV7*+K-ogjCv%C7v2SCc&u9dcI<5^$=Ih&;0F(z2DF!N7q$`UbTNjCW0m~c42c(o^hsc$ER&@A-%8Z| zd(x^KcoF=9*z@wIpbH`HjwO>+680YF`5%~ZAFAK_auQxl@tM)z85Y7DXeBL^;%$&B zpH3?Ljsx@n@?m@XH%#{&#_tv%1`ar&BGUtVX^7z@)&Kq{N%c2>%xL#kPyaSVxYr*N zn={4&CF-FLWx4}b4MiS&QayOiWGH8e9^KK0P_^O+p%9_AAuTwi&d z+1cIP0)3AI*P118YIG=;CQC}gx6yZVNAXY#l zdKIxxS#=g9Tw(*ducckLsl4PVyRP9q3}o1QG9r;NqXd^?5V1{HtmWb95Ph;BiqSyD zyMA9qpSgEl-n$Gr7!HfeBp4S)Fgo;|(pq+{E3@|pJM@KouxRY_v@j~ka&#!(oWLFY(JSI!S632cN3c0#th)0NYZuAEP$E5lA(;kSag<{({@M2- z_Q{_E7^hp`B}S)ky`Z zZDrQ3l32xsm{`R*iBVT?uty3juzx&63@DNz{70Eot6&WB+N#HSgi(tsWH5>HGG6Ff|Yxqkjwdzj!A zYsqd6fy@Ey-}37&Joktexf?(yQ+DN=6%8^n= zeY9P(T}mcOmDxI1DNxUytaay^JlukTbt`Y*dS*7V8I9+V6Vo%L|bn)VkGM(mee_FtlljxNKFJw?bfMRz18|9G9RT4b>Uu z1|GU&v`4)`dN_Atr#@Eri%OVK>rR*;OIi{fN2w)`Z$yi_KQ7MrCp}`CHLF=Zuk6xjPUGw zuT?n0Y#+NjsE=^L($rArvsKHs{^EvDVIWgHourC591)Al2 zcs;z2xU3Vz=f!-hGQ_zyNjx`K^8z1?Y|hK+v1-P-?bRb+w2OgSNRJ`II-WhI2R%Z* zLDBc@WXK3Rh5+LXL_v1TPF@E^J#CGyCP6g_taqo$tNaEm)q5=~_4E@F zKANve^%ahgFslCAmzd$t>9AbY`8c`1M#PhQ-5(4joS(p+8$&-kq;OLGpg6^M2(>W+ z_QW__etCvr$Oy7>ygXhk(fSD{4D_YhvV_ZuiY=4mFki=3%%&aF!bM5qJ{k#mJBV^AI$F9g&o5Vh+EaoBZ5F4_Kh^^6YvNJEYaZ$(t3< zBCwtW%ERo0H@HMqglkZQGtZVRQ@&7iTWbMk%gYxovra!wnWM$)jBP~{|I^3OZ12=j z$k?9FBU*7D5%PVZ#JoDp57dCYd%=Uq=zIcsW>H5JiseHg@Zh zB(L8fB{X$QUYZEI_Xi|vuYC%<^@|m87hi=0K*`N=^`wT8ISz>mxk8mA(fCEsNncWs z177|?@IvdYK4j$;qz=L`k)9M(Qr=HqWy@p4f7BkxJ_&t=VNfE&LESq6(84KbqcQpv zk<;UIxx|#dRzIpNX;vtp;U%Vt6>+)@#fEbcG@<15MD-!0HKK>lwV>c$T5ULcp4mm) zcwT*_A>JeqW@1c>PB9UKj$;}zBH72a9w3c`J;DE&PfkDrzyX^w9R<*3=pUH$LmJt9 zJp>IPyaOesbh3Kpk8JG#sfkp4G2Ncv8}Cf4;PsGOfS>qmjAH_0`AG_oXD zh?)V9ZuL+G@P$?f7#>8iVPrk%h|!AEQs`avq%eM!T3E?sXd|z{c*{$BbR|&Xso}!(`IZHdKA0I(1Jj z{EmRZjPhy<2K32am1x5gd=KnJABYdrrPvjINra8b&7DOh9qy=-*M(u9U<2^f9O+ugnp8k2W&Ylw< zC0*9wQThp_y&(*Wg%MUv&QHLC@>f^7#KUU%3=7^%uaOT?8NjF zt*Hs+QG*$#CiqT<7Kams5yfia+(cf_O(3c;L9aJpn)oBYg&v8xGY0onH2D#n#Y7-a z%4;5gkcH6uX5D~H6Ea~Z_4kj5rcBTQpUL3EQE6$5WNseyy*~}6l*K{!< zx9U?qmx$5X6NpOsL)=94fdG}x=K5#iTbel5bC0ck4hn9HAG9}q@OF5rUZdf3(RoR= zcF)~>Qv3k%CQ|Nr7_xDz6@<(_e(9A0AfMn@!i(N1GlB@m+Ye`$9^5MJS}89aL}a)I z%22TN=~y|)K?y`L&EcY^YB~p#7h)Rfi1&(1L`-^xY;?V>5SH@^z^J4VKaxgypkh8= zOCzoXX_QZ-5%Q8GhejH4vPK&DS}lzxU5MWUtSxXin zT}IB|zfXC(VB#mfn2csEbCT+F$uiO!bMx~EpZU}&D*VF=3e2qkz+?u`zxT^LuLw0_ zv8Z-cAOAJE9}Xu04#JG`As-0wwE60(A3`}|09U{Nr|Lzu3zKM<<7xB6pVBA-7stq3 z&4A&o9LMQ^EQ^sG1I>6V1`cyd+;eu<@zD_GnXL*lWRH8;ZBFv%16YC$-#MFq8Qp3?LD&m#QHF*AxfEUingb=h9cc{LC}6 zZydIE6Yo?fy|MWABpHbtANq6nFkwlwj_g`MS=AGNF0Xf-FNqx`S8$-l$f`1VXq?~q z4Lq%VOyR|(`b>Cq=2nn8Q|5P;T_Os^ds{o5CeDE^*sjA^sc2mqG`m|kFAyPLt5(e#wSrnz7nTk@cA9ByCNyr@+4YT8N>0J`wWS=mU zYmpaFSFG&l zX5kjbnF<*o&uML(@Sc99cP+fLdfiF@KKH7tg8DuN%r!VwE=l5=l39p+_WDq{L=-2T zd0%;Dx?4QQ!0j3#)4ia?y0BEVolkcliMy*XrG)zxCU%lrv(7N~!s{s{ zV2Om7V9EuGB=;IbP$%SI@_IRVcneZ!P7jsY&LejU3p@tgzz}2VRA>8{{q^$N1LifQ ze->m#bgCoA;HbR+pYxeox9S&WD{NBnkvbhe($&8_KAs8r_`!lcZ9bqF)UQ z2}ytC{aHeIYz%lEuFuyWli7JRV`mVAJ#hNTyxIX{GEb;2f}#8iGtx`(PcWQvO}vIb zp;uW5sR>`e4kk~*MOqgs0K#$lk~v5c4?KMd$;zj42?#vF)0BWv=dY1l2Gc3XitBm} z4HMOi$)k`%WU~l)@ivo;5q$BxfUEsoc-jRLPV-#~B!uqgqN;OWtL8lM|S5deWP%^iHEvK6|4X-Xl*NzSTK)2)Hpt^Vx~8K~U}Pzhq$ z8R*&>(14Qh4DWaGrr{oP5n~w?gq_{rePbnuj=AAwlu33(ewREN-ttxc>0HMI779)) zXoyD~&Mwti2o;iB$qC@o;;$!xC)|}@%j&OCn+Trm7k`zq3Ar^mKBF?zVJ=i|#AdWP zAQ@@IFgo(ds(+`^EppI+u^FAgXhVi(Y>w3o3{D~g3z5980Yvcu7tiIX~@ASVVld$8lixqPe>`WY~>p<{P z=_EeLWt5dfu6raZ6-i@;2?YET%`O^ZNk6x5-QGcT{C(=?gMx%4AT0D*kLGx3`C*=3 zwCs`*gh7rN-ml-g-Z)JxfAHrU6ASHSQlob3UC%6hM*y)b1aP)F_yEycVN^GWpFqs& zim!hJR0{yQL+_d}t)~BSPX<=Z8o8Y&S{|R@Z95^Ck)VuM2HNR=VcJL#%VDDhbTF+H zGG5F4VM6Owx{Z!dG6hK*uPZwzeMi~hCwa%x?7N6cB~`{_E_VnL#K9UchEp_~(8-!S zvF*b6crsdDxBDBpz9FMaVXVnZ8hi5+wj3{o=R4u~4o;mvqV&$mlWIgya&O0XKfF|i z4tB#kT|6s)V?^99G)d){Gj0o?y)}rst!6BpNh3WP!Q8b-{mMOGAtM0jF(FWGJ8?T*o~?+f zZqtgZ4q&JOFxUU#PPcYz)4Q@GYyXt#!XVA^PIqQ@w%1Ei1^A@N2K?NksbzhG^TdPD zx!`dqk@tXx4Rg|Drs_UDN=K!*Xs&QA_G@RJb}Xu3+Bwx!}-J3l@2fc@9MT>fx-;Q74z#mBC)kIfG!{vJBwuBd*&G>BG6&K;Q z&|q54pc*P{RX!V6anHVEDS0hhMVC2V#mQ$l_0Mal2-WEaL^K`e#be^D&^t+HwdpBI zipeo}w1;|qAAEz_uYsfM? z!Ugjn*er1h3O^95D63XZVv;CdnpWg0zbZ9TQL z=VS@}A#0`sI=U!}aj_lH;d}Bu@$M68KysKB zruA`eIbID`3Oofk)v$2_Q#%FxDU2jNU}!Hg$V4;ciy{f2J_u$8M+7#uYeEgJArf`K z+;f*U9uU;J+y8VR((19l!}@^aWTfavR)^;bWD2}5EuCU4XHSW7o+{>%1b_DI!#vJU zaRrH%9J+D?6Hm^gz*HceNKq$9&*h&`t;$x@=@_*YbF4yy2a3}wBFGhmPO#nU9*h5_ z&&cgelT$7M4?X$Yh{HFT#_g0j2AL6qWG)L)&cHMWLdbFbp_#y2Lxa9I99kS$8gl7e zk-=PuVDNatn$mbFRAb0Mu3;ozisc~q4eLl#sxZj!1r`iuYFwSw;{tW{xbg@3zxV&o zf%QLd1}QO6q4FAx9B}*0CzY9?giE5@4b&m5wbZ1Pa#K@ULp|&Nt9&|8z$OG)^m!6o z4$~uR5vm{C)vbPKSAV4Wj!v};-b|SC%xX_4t3Li=q=L+;dRoL@5T&3Y{J?jM)rUXu z*k3wTnP&GRgXNLX99*$W%*Ib~MG*9lBL_;RRi632lqNN`Tz_jf2fv|j$xrmRG-dN= zelAYgm~X?HoeNW3ja&4cv;7@2buOlsSfLwl1%x;nT_ywJqvW$^A!7}a? zXB#4#EysqY!x%V6Fv&1)65Tl!MT^*fW##P^5{>ln>YN+*T59l2vq~|p!;*$O6fEr@ zH~r(r&?FM0_&_?Iu^5o~8KN`lFxedL@~pZHw6I7Cp}*4W__!Z!duBjMp2ECysv#Di z1y@$3BLIr<3Ydi>U+;BqNC}OEA26U+I5>`q#iyrur_yaOuq}0G`nRO=v_c16-$1>h zPx=x;++%zpsm?iupAgrn!{y(DNTj)h6#!o4Skeou4s>|`i&op3Lb*deTy|vgrtU{NBo~Q)Lvv#CIM{GK@JECH8woC2+p^eZJedr4x?aSP& zzmZRWqdX?Lz22Ce-;-4i)1%*%Ll;aI<=zH8Axn5w!%DyuIo8009J?9R&=^)CM@AXQ zF$s=ZOyrbu@!uOMH!FO_Mo_(INe4UT-G}T_Dp13z=-_q_pd?ezr4ApgiOpyyC65q8J=C&kM137-h7fz?mpH+IWire$A{8=>pm9{Nijg?L|IaOd)6OHMkcnuJIo zWv51fDGyhcUHg+REu;YpKrja={S5~i=zH~&>r{@v`e8w#9(w57nBXn_4;jN?B#uD^ zU$k&0uU>+2Ut#8Bkp;aNL7pRk_>@bDiP{s|e+g6JmW3fzg)0fcs?M@Rn!53en1XNx zv5e|tK1{1$P?stRz1XgKuSV-m`50>f*>n?73lIU*9(MgH5IHY-oL2wZ1VXBJT75u= z>UMzUp*S6yvJit+D)Ed3Zw(L_R+X(!EdgY$XX%JmpGjO1;1V5)GlgXge76BV3#r1q zDJ~*4cGdZ+o$5j*JwT6;*?M#kKU=@Upx&=R8AyzZ7#HK~Xh0%K6=w5*72&FJT=y*# z5sRF8Bd^XswvZ=4N0dpP1TxpetcOXR6$6qEzAkA#dza|Y8U~SVByMDo5!)WaYWOq& z4yYa&kN-^plYwdG&wNNGxIK|%K>Dmn?H|2rA+7!&-{)#t{iP3g#0UPF;9S!gS$=7C zsT$o5H1sF5^3UpGAZhgq-R0%9`g6DAjvUs-`S?ox(p5k*L;332%bK@h>s))v@8h(y z4To+M5=yI=b5ubY@w?aV_2~XzKRPQ6c~md0Y1EU=x|VyUKdW9UHVwQiP`^ym8afBO zmQJd0WdMsv0_(&0or)IahWQ;1aaS#xP}uzehbaj`>f?+K|H6k}7x-U%h;@M;R?j7A zC{?CMp`f&SfsQ5_17iMz#};-Zbz)Kdo8lgu!2-;KXkX~3N&TNZSill|&VJ~})B1RY zk0}6T)hi>g{;MuqfI_X31E#OYdm9K5xtf}{Z_w_*aNs}jGO$sAL%l$mn=Q&5ff_ni zUs6=W01FBUCyk3hYM7M;pletp7-_9h8xx%}s|>c3wzH3bdeUI9PTj z>13Tw>iI5lQ|07!(@KzOogAg$oJ8qStTe|uk4_L;@DIp<2>8~6O#5FFYnpFx<%k%Dq{&mjJ*^{UwKw=@` zC|-U|EtkKIXyILDK3!8aUsF>x)w?p(^ItC0P*XJ}%MPD-gJWgbeYy1&((RKX+vm&i_5T}>9Ej8Mj!_sQ)?uxlal7RT$U972dl)U<&+`+4KbQCJX;?jHvF92N#3UWc(%6q^uymo4b`8u*s#$WTHw7}3S9oK zrOV$f0Xpt3{nq<`=FcAI@8ET^^=Y{2xCDp=Do{fe5qz&ZF2$JZBI>l9V{MiPBGq%D z3>wxUYHeTrJpR{opMsG7&HBSy4H{cp(?O|$3PTmEp>FOb>*df>!Qx<&$UMe01|-P{ z17^e`U@u_PVeF0W#Qqz2WKIZJbpx`Nr$B%AhS!fi2%P82qd&7H#K}{m_~TD2uIaAEdXoYjWYYfXll5ZO)m4buZ&B8QwHcI$Tivr#d6-5C0jUsEq zzMP?J{$QDbin2TE@nUaj{%+_8UE6yt80?L@P8zDx){8vpm)Wa9(y&_=dq>-7seS4x ziYPa8RlK9{8Olsyj}~ZK|)#JgnXvah3Heqk#~E=wTL2Usv-V z;OlBzsWSW)ADX-7{>T37_x|(#`Nj2fD)CUO^+D8>-tdJ*IAikGG%TcBlY~jbkg-2LxM-d^O z@1rPK^ z4!p(woH$}iAx(48-#c!`7jZOx;tV- zVevsYlk^{Tc#xMT!rewbm&nnuc9WXK5kO_# zOvVH&CT2OT8LRB842mH!Zg1JyOYchM;5^F<{h!M;19nF+p@PNPg-&gxQ6L(iud*gp zg`sO3(rPmc^T2t-Ip4N93lh4C$dC=$2{vS>MxSlSPCeGzhV;HSpmaS8QkS(Pg4)7i z8r!C%uR&uyCJD0N816PRQqyNGP)JKr+aoZtzupqTkJ%3xGAv3K1 z^ZRz$=8O^aspDXO28-0kfb|r*WdK~MZBKPbRh?Jxz>1oc`=w_tm&#Q+6lE)iVm2;` zsm`f$C`yGzvL=UO=Tr{G?s8{2`_Oo&b12f$jx`Ho&Q>19+2zhV%iYSOV5P5?&Ztw6 zHsY#TtD<#L*&eTrnO!H9f-+7`Duov8du@y^u1=-!gCUW^EBlpHp(0S2bhFe{VNS7} ze6&9vijA0!uFx3#9S6_=67VsUByg~I|0-!J8mz-+R!&wG11+NT;D#VfA>Z-7-+x=Jlu=NN$D9%@rK5&~P|rN}txk zm%`FiFj7(*^Rt=YWt!ObK;01p&+=2GQ`Gd`cEaI1Dv=xn9@o<@RTIR-(nv zhMK*8;4zVTlWzmYnlzWurfT-iwwGN-vJAbOUc5JNb{owBTrJo0;ytzx(4KoMYb7Voj|PO{G8J&>&i7U(vbNoy>Teb%(HvrfNwuZFc`bz1y*I$r3YIjetvb-8db zIiFNwvYC=S)%Sgz9T1g>%WR|aP525k6xE-Y*X5i(N8fB>6(2oqvA&Vi&SD*5(2;@TJSSN$URMnDjPTM+Nn0++(Wt;5UR-1w9ro@x`LLtGhhfYUJW()C*s#^>c!8+t8KK^N5fI8YwXr5#Gj~MNG zxRufkDnId;spizc(}UU?1xbcX=(&0eG>L}5A~l`QR;)b-o35VDYFZ9s?Q&jvG~QB# zvcC5y+IzP8$m-?@@y}K#S6_wd;UHH3^1JkOT0EF)qaCioMOu)8Fp2fN5YLEUQx5%x z=DbcB38@qy*7$01I$iKt^<%&L*FOie7P(=Oqoh4bfE~_mrQwqa?V{+4pCDC^P>C{7 z`6xv&EnU!o5-wiwJ5=*psbUc%Ni&b60l$nTa5Lb5P_=X$yi#Q@NL5id5hH%M3m$>m z2}qEix8pL?2lNZod$!SqAjMS1PGCQwXKv$!tzsmU)HhmH|9d3~oM1?bij~@`7Ka)a zK0=P$)SD%_j=WiYne`@uroK;evLpQgRSa3Kb{umWk)Ta!?mte8f0yE{Q46S?jorOp z6;|(08A1^A{+@!KwZaH#A`$~Gx%Q*f7~+i|<(ujjWKs85z1JWBvd7WxxckIfOx*-I z#s8Uxw}E?C$c7fKNER(E76oQRO)0S*D3x&b7_86$rg<~*KC5Pf+X{=qQ^ZPzmO zj58=?Ei51=3E!?LXV*e%fBcl1Q+Tsz1O_@9qzA8i_gAVcz77#g`fRJADuWFN2 zNcg=}JbQ(#Jzd`cdx1~3jiy?-5XYL6MO@Rr{+*}an_q|7?UcFe!eWTxHlawKNk4?Dhw8C`v1`3^z1H>PDG0=edc(^fBC~KC;s9-5+>FiFCA(>Dy!k*;G^O zE|`(k1v6qD-mFzHBc*dHn88bKj+bcF{&-z5Ly?|RR>s^{94TYI+!yz-}*KnVpi zveT@lYggr^^I`o_>^ydH=zOp;hq5w3e{E&@u(mS6RoEFKSeZlh*ALWICJ(H#GKVcI zb5kq-hErDNgf0k9L9`Q^Kxh@O5H0jU#o9sj+k@(BP!@y1boOCAC}^%dsJ;f}2kJrb zz^Xy@w>qf))S%>M6iagAg7AaNx5FY%HQlb_39>OyWs3gv`@eqHU|nC4jD2~DLE6nqf#>}u(q1rw} zjh|F2yO~CDRqUCA$v+p5xwE^gBGk(Ex}xHzQpyv+pnU9XvYnctX=jR=>gh(~Lls)0 z=7*6UmSIF6uwHaVw-qr_WGGs?%hgZ+^&kAzzkF)|1;sJcQ`tIQ+cu7(AIP4}Zj;4G z3T#J7>U{Aj3?eNw`iqPTb*vuvd}lPrx4lYV)XA5ym5+f|GGoc!0`xr3dKejwJP6#A z@lZvHlCig37$7fcLxI{s-8tOXbqsPX&L+++gS;O)DVuaw(8;Rb`#vgF6_*d$dVm4X zRj)Lz*i?oT)o&+01pZdO$I$ZbxcDe_hswcn=o6}bxtjG!Uw%S=$gJHxOfBBCa?eF& z=iz%F0DHm#pS%AaMHXYD(9XvdBw*yR+mivX#igvI09^MS&@vF7O)&EI;+b%IjMy~C zU2QVP4N8je3Pr0!AVOORggu$hmrIX33 zhza)8q>f0l?Bwb?WO7onng;51C-YM=6H1wB-O2pA>rS>QUV?RXXStww$y_U5!tf^1 z66SPg9W43Utvg|m&G!fl;_E?*afu1V73w2bq)5d02bybTbL4syzFUV;Gmmm;eoL zNlmVLj;Pdqu9+eNXh~^9xK@+1r%{ugiIf)WL4#K$=j%tMq}&lz(xyhkm1(JN2Pt|u zyNVN-n&81ohMd|5FuFiOlbqVbDpm0{WhMuyoZ%KoQesf#%bIB?VC}))iX8rtOR)Hu ztsuTob|1!Axm!06Ve9Z9#)+vHz;0w|bgO$*N>f9~rc4WDPW6*^pkA$wC$T_i@Z$bh zr5MN;CK;?TXjB2r8HCM;VhymiNu%sB;Yuc!ke)g(Vd}d~4=7ZcRl?P(=hzyp!Bx8k z*rv>cyoD>gGi2xaiYw1pDI6WnIN7O0bq~r!aNm!7(f%xq+sL{Aqml3h#Cie!&Q#LE zz2_vKb64<~8X?TdpuP&KJyeet7rrLiuX40C;jS5Nn{cN_E8>!K zF-^E~{(;YQ@w!bAZu`3%5iY5UXNGW5f^Af7k{Cf%h*#iGSD!^zJYwk}MTjW?fjbiN z%_`hcf*ed{o>RyYsMu#haM^F62m)-L3R;awj-E?fB(ogDY%Z!7o5Sc5$+8Nk#EYI2 zo3DEAbe@aLan&L@IgLnedoDrM71RI1kA-q3*DS3~NFpwNn`y2!+B4 z*)r%D!ea0yyGUR*O{Fyn`tAMd6NBo}&r2>Vc>rN%*-WHjHxPx57Wtu3&65AjMSv6s zq_+{8qeA>Zx4Cu1EDCcEk|=3Ie=^;%wqiiNp)rdk}K zVj)6Co~dPxD;APx1QI3BSaj2_SV-N1LG*=H!=SEM$e}A1=1s*yy%#DL>XkmTZaBbA z#X?65fNQ8&Xpp=~u&gT=G#R#{D_sly1Ki8vFmQ)Jgrck0eW{zd2ea)E=BiZ=Ciwco0t26 z#9nO`VRuETKb|FbL3UWnwCpY2lTv;hTyr@p(;3+(WOYcHUXp4E+~mEU>>{rwR6=_g zx)e>_zMK(EUOs{q(0rwwAwz4=s@B~$L2HSMnTbi-A2T?VXUQHFxA8+Ya>V)qpRNfd>f_^n_osu36BE8GAuuSt0>HmZZvbMG7#|5uso0NMJ5(E6iAB>;U5%5+(Vs=)kwW`lbA`Mv(ywi?xNk< zZ;?0+4_zPV_JkrViZS7$Y5pNSn560x+FZ#pd3C3koW-zud`etXDCcEUJ<)D(8C5@% zQ6eWNuTE$KP!Ps~-95B|t^lgqNf@+-ZukRw@;YwuHjG4nU|c;O@_rlwZf%JO4QR;t z4Q#W+&WEnmt53qou(=D&Q|-`oiZr~xgV)m%$S{x!)1cXrL;sqlI+7FB* zkaj>f#lI)wf0Q`tfGOfCx$!vc%lc|CLo}&+JE_vg_?KMYnX<3#4V_5E1ja*w?hhu5 zqWXi$F48WlnG;>&Kg!Hui`9?at)0%bXKi*wPkfT49wKX@m|ZuHi~LVi18ukQBPm~; zzfrl`DqRsePQr7ue8#U=USUrgwzck%{UUcNt5o0u6Pa3)3dTRps{Z_lzS%4;hVatj zY~h9Sd`v3?tH5BcZskO`iDRPJhfQrRk@Zcnb zr2W8SPFhm+iiy3{5;LRivQldEdi!b2>sG`=^Jrpj4Teob!e%!NpIFe?DX7pXqZh3C zfdULEsAnBWAv^y^1{IJ}O&rt8ZiRYURH5h_C~g8RUlX!epCXu*o>0WxW+&pd(v_qw*Ps7t)MlLjVn;x{NI)cVgd3#CV4caJp40pn zRuM%8-iP$iFzSSYk7Y_I!0dQ1m0O;k+eWeRH^aGG3+rpdVi0SItv$$WMPHUVkuN zzYi>_l~eKh6Y=^-;`Mv=%SXSY`#kqZJpcdLI~O?1s_M+&bI!f>yj69(yP%uyHlDin zIBo0>ts=G!ar$%+QAmc2OhOW8hM6%LrwR=iOw5c(`$ok`6r)CsBtB3Bim!-96Ht65 zK2Y(M_`s+M@fB1w8bRm(eQTd{&#kI%8q`Th50%y^vlm=%r0DFLnsd?V=b~UjLVAH3C_!Cka6g4FloQ_G ziWs)Wt$1_Ml3J9S2uotY)!wv1ig9kf|J-RnIpL)~Vbb{H#gdboT=X>&@k_crw z_Ly>k-#LB<{7!Fs%&_NE`B)m`XW6Y}`|uk_VrA3?DrYIhIshj4zTBi>Z446xE)RQ` z0X=h31|LPw#`~e7EaJ;~?POC?AfTdFxHbGJ`cUoc*0fP#p)Sg>RTTc~72QLl=)+n? z2X#@6vnlv6$xHRwXi2jtWUT4&rWKKZT_=BOk>3yd=1eTwh_hN*BD{_WL!CSd{z&r_ zGIqE^ZF6F!tO+TS_Qud$Z3Ya)ESlR*+;`>>UU(swRnHSbsksP6%J4z0)RzYdUQA!O zn9KBu?~DrUY>IxO(-ggt%T$yNZK?kLriW9_vn@@zOB0=NFd+FBy;2WK){USFK1<|ydZ1<2+F!0APD6+ zBUMN<@WAxrp<59nqF_SsOu*d9k3*egmNwd8Qm7vPeHKQ)pYcH9 zVdrq7QM@}PD(z)yrrof!?@i`c7KSVY*-kT|g&?bM9p?k_Xz%S#0K121cq{=yl(-^! zyQAvKP(<*94z}tIo*KD`wQ|2O)25RzbQC85Cz_%iDm+X|QJ3@Rqy+K}a>xtyW#+)= zCSRut^y0L(cwgP{NvMoD@6AsY9siH4!qv;)!&6!BWGm?YRCb(J!J{^0OqV(3AV;9l z)yT=o2KM^+Gkk#zQf{stGTgFKB|Ja|D>c}`T0oEqD`~L}5xGAkkVKXzdd-)M!6P7l z&j7@!!O)=G4rt08(oki7`_*s3z2qLa3?Hzn$pP_t7)eQ0xnm~4&UlF{>5@7g)rOK?aCrWIG&GJ|ta2^so36o;#C)JUXAJ{KvAy-d$XQ%qT zcZv;>OM6HJ=U(3NbDV~;h0$osVI>a?Sk)Q)89So^JFgh>pI`7uMg5rdV{h9&>_M2k z8w|A?CFWf*GeqnO(zEH5txSoi30GpB|8vZj_j(e2vP_U*!H<#3!gQ#x+JwUU<5%{| zsiF3DFl=U<{+t8~`nCxCIU zP9xcg&48b~VJ+e3C*juo+@0;jsc5mYv&$mH73=YBq5;@br@D(`ZE#D;l;jXv z)Co)tKl=!a=I6fb_~B=-5@;d`|+NoaX6Zs+(wR+=~@BfxSk_3`Z)3q}9;%RaIFg=wtau5!$mEl49Wsu^1T{FOh!R7i!Lbxk(#A1( zo^edE2mxGiyD=O~j`_f`Rpr_^){ZE#9jvy6bq|4Kt%wqabl_Sd#nQyQ?#2#L*m3-D z@Lxvm?K14t-q-nAh00qaO(c%R{TxN>!xcDH$-zEDe2P5d98ip<;Nh)sdKjJl*|Plb z>cXouk_{7`audc=E|=IO!I7N%I;Szsb0%+dKMSnW1oWcnp}z3;{|8`iX<&_vxN7U& zI!=mgeeTN9-7C^%Ed|po00U7Nr%`LaD}U^XKXCpNberRN45G(?< zwlg586jWjRt0?s9ZzCU(!YHEJzC*7%gSV0TPcaD08e8=R`Ef3qufgzK@okWFi;L<` zT$G77hT}U}jp5!Gta37gtt!{X@Rmm!p3vf=#UU`fb*PFL;tV0;XtCeDP4ZYymNpkdNVT!NmW69^?y6kz~bzrd48{OqL`PXU>0b(HqEZD0VZ9Cbs`h(KA`c*^`|eBi!gIG4h1g9 zu0o_-E}MkaFuJ52f=E9kj3mW0vyFUp=C08$!I?2pQAkuEef6VgYtf&?$8h37C^tB8 zy}<|=6zMB)Q_Cf-2EP2!j<0+A8VZWi3eZ#?Jxp%)&suPSZ+6V4Q6S{3nfuep5W@I| z+D)Sw$ypQVWfuv3G53srU8jUg#iiZ zvLauhp>#NqI2>Id$ybAfCqGhd-fSn0TbOrcGAvbOGSseuSOstDN zLYs2Z2EE&dI`WF5CQJpKv~UsXuy_?6DRV#@btDUp9CaWbq0XGhiFo@ObsFf5;_(jw zr!mwi%09q=lq07u11^vVT_E;>w96n%c+1uW(=lpd_2j3At{F+p6HOBWmynmuOCy># z_#lvW{ck?4U7tZrYn?gxqVw6-l|kc%2GIEv_pwQIMoZEt-hSNhy#7$Bbe5*9jK>5| zt~NoJabHF7_>0CK6?N`I|`~?hdr=SLUY_OXk}Z0JsgTZ zABsJo)QCNF2oH^@7fml>KndT>C>?{qLD8rO~2c%N(d;hGvn)cDYNjrY2SAFipwuW`L=_~Duwy{Pe#@fz=R z4L@8{VT6eV|?WYtQysr%rYCJijAa_6oqW#ZBs4eG*;3+rllittfP zkBqpo?@gl*reGY$a-7Imz2;f!L(J9zZ;mV@2wGG~G;t+-HT5G&pC8GdtCH z_rgmE?APx7PBj5{0dFUlumrjo+XZZMQR|I$r`p~M+3nRyXmrr55AxYgODOpDhALb; zt&rUfY?$g@jxTAwlbJUvWOrk^aDKUAO~@`*-X>%hO(H^eThW$j@$U^EO~~#YKgef$ z`*Rpc1Y9ki(5-)r@zY>zGT2Qy-a=ok4R%vnYD!AAcqK9!Pc`^0xzJ~4v<%<7$#N>PB zja(4ZfGS?rwPD81eE*OUHVvLmtie+vq&4SlJk_1>RKYgF0aVr1cD%Zx- z7R8e{vxTRJI%jrb98YDjt5=2Mb!8!EN2k(c+Zt6Psr*N**a%!qop$sN);VH32~#I4 z5I8HC`*j%;@^*pUo*$$7;2{-pz50sctd6Tgo;a|_08r57a7YplE!kC&Rm_85~~Ev;zSeBA93vKKaJ+5wLCtQYCyg@29y70b>g|z(7zI+Bm#P>0&N944+=5!r-+z!4P1eiGNq{H#CvItf#i3L~BHJz5=*7azq&JCjE* zP|Ijd&oDfELGN9W$N-5;*S)q?1Y@+-i8U|C)=J$z>!i9G$`~#8t6uZu11MawO!-@1 zqdaQ@?N4Yl2y0pB`R)UfU9U<%bf?H}t+rV5ksY@5DRya9TBuE%6*ah&geueIY%jG# zeY++T0a>x}U>jDj$z}L3vKGTis7DdC?M9T*4PW$xITe7EBF{ja0}MSK_c(=7rrkQn zvT9$cQ&@C|Ot&p;Gdw;an~@`IxHMNCoLb^60sH{VWNRVW*?HCAQCLJ#G{veszwo;; z2~yqx`O$Xx98P|KcMU)JVdRIFGhyqRoV_Yb0p;S{5fv_sS0FaaM#0&E*x7hgIFmy0 zb70;?ji1e`3vd@v1gI-2j{;O@lE~hI?&Wn-hcf4D@!V-*#$8?VN-^V5jAUwx_8z@b zcZ8DW2r1focJ^)E$#EUdtN~=AXIK|@=KJN~NfA6hxJ74_$+f8{9=fi7&Qss39YjAA zCOjCp5;y>b>gvv^as`b4m0gZc$T~$=HdG&-!{N}U;Jf=kT*?M(kR?=~d5X6B|$89cqG5mdR-xnaw?gqi1S>Flwva zxIWqb!kn-br@G)bGC<<4*OtSbr4NS34{7Gf5H2GR1Wl)myZ%6a-)Sk9WZtFQkgDSpG{X?4gZaZ539QY?)|mMRG4l&dS32*fMG#UEJ(L{eD_@b6J=l^ zfJ^xbJx@Fnf;$%qW|=iOcGmmR0q=fdwbHoQy~c3zPKL0T6Wkm2+JDYtS$7m!_(;=)w7-hkUC3L*9 zBcUN7fRQ!{S}_RN&e0lp5pE4*qVO>B+L2?(q5n1V)uI1jR2}+HOLgc!&j|gmQLYaC zcY*heCvt3~8>`EaH@$ZRejxgc&TO0g3X_y6>Pj=>QNn3rlx)(ephia7j8Tso{@!-z zA5j;^HXfud@JR)JxeG?4aT+GZ9Igvk*gcWr%ejf&6ImOCX!h4>TV+5n6Vdv8ozI8& z@A0L|m(_Kq37B9-`Pz!N<7jJ3A%-d*6Fe%n6;v-XqNoO7vGU2oP7HcwYW-rNgh$??t z(4_O?GYL!_c2^-XVM^>L>cNyEGC`%tqO0VZ!O5^dpzzq<(24LPx)1fsTe}zBlF57U z7Pf=2`9{yRFKjfJHh$gifDstBxE&opO!Q;JnPOL*4~TE!YZ8~I$FLyS0(zGyKyT=d zuFBC+rA;HI98WT;R49`_uZE1-xIV^QhW<52)}G zPnfS+EJ%iu51>hz2KZMIK`ahO6p)sNZ3@uBs6_#M%S*#HA*7`t+1b`E4cqka!z>L! z0i%!((vtU0BgSq<_@j?SP4_7M3N8>FMz40}&jV_e_R8XYP33h?^GSL}Tk^E4fHS8O z-l?iSxkL#DFz9t=zdJoM!m`m-GWrp^Nng<2PS%98aroG5i>yBrfqi?qc-kL>?Z#LI8|B&K6L`5 z*xUW>sjYfU_P@B%5{Y}-}u@`9)GYLccJt1DIf~q?zOQEo!7)NV+ki zb+wC$M!P74R)^6pZol>#qCq1c(=DV@ATt4tdYfXWBt%h>%FZ_8V^qQe!DMD5v{etu z7^L@TNyiK&5no5`?srDRg0YqebdP8Ynu->y+IQ;5K!SxdP_g}rOPAn_q3r0(nXGGx z@~tlnes$|?HO1HcGO`79pn0iz8ET%x)I%zDXFs3Y6w@evd`kq$n90jA_+TDuLUAC* ziIM*@8Y%|Y z%NGUvRZD)wn~I6l`t@O=P3g1M724I3-?dUi^H{X$s&cG6n*~ri+VqH)53OiZb6x?N zL46o@B~V!OXS28F;|eAV|8B^8v6F5Mv2OLHP%yiVf{DF0PI>RPqYW4je6epu4 zb!qN_@p}$UU&$e+nKR=V4ji%}MoRK}kpdF_0g59pdm0G|>A_A$;!&%2wx-TRyrkG1 z=!-!zlfKv7Hsb+XTHQ0dc9lCcC=E>iVI^chF%a_9dvN+msyaehq6zm^Yvw27z&&K*Wm(xK{V5|2mZDB8Afy%X=kxH<845vUq^u<0A zf^kG3V$-4&@Ip%{eG5Ysm6X>~XFv>*9+GHSmS*Ur462^`rbi>3KzE~hJ;Ahw`iE16 z4q8j29s*k>Knh&;AVoAK+)(>UOp*|)#*PM%9cqjK$#wR?Z9HlLQX_Q7ArpPb_$bB! zNe|vi{(C23WT+ZrLIX4i;#ffp`lxHAW@!eXJ_JB;R0txhiMrL}Ku@djeV>fs7A8`w z2+%F(Ra+jFZ2ajX6Cr3i4ebct6MP7$#&CsgDg}b_LtlDr5H%fZ%4>d2JVy*3vs2nG zJC^9vVMDjc6Q!~RA~h{~Gaw+ZX%QOPjmmlY$TCrT(un*75cL6&n7}`qJrZfH)VOu5 z6(gY(&j=;j*YUX(h8NrkL4h$w{Dt&0(Y+s_>xw@`BOtI!o4209X0;b*Cg1qgIgf`%@`e8|lqgg~%7U0L0oXzt z!EeIYV{Fw1@r3{5l)`Zl=4aDQ{{bqUF}age?Ir}Bkmpk=grGf> zJVFv&6eQN+X_&o&7Dkksd1mMwn-A51<&EhDzSc8e>zU=Q;>hC^tL>j7hNiutFtlEa zp~0j%Q^6~J{pgmybgR$UtE|q;szm3jY>8#1$i~ubOicgtbzgAqR-aZpVi^#t;l+}f zGedZFvdkwRd)bH2; zVD8Y1dz;8)MHH!;DQJ}R-i2zdBhmD~fbn5>AR+`lJ`L7kI+4kXF?;1FF)>y4$ykiU zqmWK5oaTHT_I-7E)f%5iC+WR}62lxFUPb&d&sl7+=r#OAs6WOmG>76vASOTb#>}NA z*pZYyv=VY#G>d{jN(<0~PtVJmVX;;VMJN`>Uw!w0cx`8isUJ%}l#CTf${(JFa)#hs zR@)AK)EhWfEWV~^zk8HUiaz9DNLlRtbO8GB?q%VkMA1KyZA_}L9Iav02VawGcA~Ot zHjAB2x%V4S;F?tcN_Ek#l-JfjFdOFp!7|~ab+%cZiE~-)Qn>L(Oo{8c6a@N?dIV)@ zwI}RAxGJwo@&!Yq}PVB1p4?T7{*#7$DH>lv{s}F!wFP9^VU_H?m}j(zrGdUi_!Sh(L)RsRAnU1Rz&o<2C~!-4lsr_6&ZRj4L%GiSvDWP?){5=FHia*=eA@kL zX4yRv%5mm~ER;b8oE@fJzete5v0B{E$>NWK$ZMTrb8W^;qP&zQQ@=`|I;R(}$mI{^ z^dv42OT6Rot8$^sSq?pJBKtQ7{a9B-MCp*Voy(4b#1uEl!VR&BIz)%inFK$FII+5r zZFgzF>3If%clF_qUs>YoOv7MFJBK0N>OJ3OF)IMX*nz{rERHzCMp%Q1+2EWyA)Np= zoUD$CTmr`o_W6kNa#psUehXByjr*UY?&SUlpMVZP+Nw?y0YLACL^QZ_iFOspt+p2$ zUkR~kIxdCN?eLXgz3{<+fPl_U0?t4~_1Zp!L-u>!UTfIuGolWtyAO0{Z69Rxb{{6A z4+mcL(e!sg*-r;!5ThZGBA;@rx8kUS2KR0{`V$6~(^ z?w8)`GXn_~igZFp)P5OIVj9cpJA8-vB06>ItHf0&zS#E z_9g{f+KI0A#}8fV$%Bq5sby%=-MIfyt^`>mo0AcGa-^%=xc|`Q+J>gy?e(YkM*ei! zbio4UOxfQs)2a(chG%Uw6*6C7eSjFKz;grIfp;T#t1y!r$6Of!f%z=08|WbF8lcBf zR;z%HR^0-+qJ0hpbO$8j2r$sqzJWejn^hCgC&z%!=2WT8(5&zXW|4qCSw}AIh)T+^9YACGkQt}u&rYaMRl%liB% zJkss+qv}xQQN#`f-ZLJt^TYX~ea2veAnlA0uJf4E+BlS^mE? z?bfd>NQff0`hX?RdaKZsNdI%gw`V6&7bc;UL)xGNp+kdn2ny?ZXpNNTT&R6wgOr8^ zQ=CH5^KAI;&2FSR0+@P(-3n3~+-3IKP2;YJEAvPwG)Wx{CEZ6>&2h++N_xR&p(mz0k)(ZL=Q(m@;$Ycgqs4*;+%P@J&}-_PK8>uETsrNaFX0C z$hm!;y)rZu6*2AdXx%pyM~#zH#DcIFho~9N=65NhQ`U5`sl@J(uFmdMfPOfaeR>p7 z;dgf@-pHYLy4R?6E*F?4&rWkX9k<3EO`zE7Ini`d2D{`M(v=LG_7Pei6R^?GIG;+| z8RNPokH{oV#VwA3;+R=SkF$z&=40jcbG{>jg5haXaSAO=jb^vV!asOONuZ?~G_vFo zJ!Ffs_X5Z)?D?ko>J}&7;`|}NDlQ!jUt}XZ8=bDl zH;j>F^%u*yin^PT=cc=TD#4eAf-%I1D*lxB@xs)AB58vl>0k~nf?`;2dc+R zNNIv_-lwXb>V|%pr+d&>hOWp10=S=;Cx=V|- zy33PLce4>~)5A7xbHh<0q43q}uAil&MA8tM7@iVo8F8t@86YSy8L0$$^}TQJib#e? zkG(rPJ2BxkVLIz4gR&JvuIZnvBH4$#S10?()2>oXw@rzFnX-M*p+!O;o$UjcIoUqo zG@39i35S@PX;YyWIjKHW)*i=lg7_U+0I&zRc!F5a7+^Wa6Urx; zHiBi8rp{V)f3@k>PSef!2!N^rB9Qc zn!Rx>^CuzODWodkJf$sC0yvRO_lKi*9&oNsqT#{f@&mD_(Q`2vO@tjD?f= zw17n9V8pmsJ;5X7G zKCPU%d^ox8mi`%S>Bn(>emT8n zOaDY`k3HxSTl!m87;!itj{qaa*GPtk+8|6lwg>ISIxUF-YxT*d0xPN$p42X*BtMdX%==9Y)@XxHTPS z51rUEQ(K3|1m4<$BeZN&_!05R)}|eQG87_+!kaZ)2MTHwVqTIxS|R(rj}>GlNLd>` zhMZ#s#n~WR*9Aef@smAIan%oR&4cZ*!p)P)qq>s)0Uyz4YgElJvCt* zYAX1nff{r&`^4$sEXgy5A56A@VnP?dVHMT4 zzm3A7)NfD=8W8LfU` z?MNpuhDoOr=<)3BmuS!q2ju184aTR8P1{4VYY!>O&kla5xm~ru!``{t@NF?;{8B5V zh#%5EAEQ7-=K>|aDH*1y4*q~L-J+VhfSO{Sq zdc()zgM^5S!^pz`Kw&M2q$FaHSyq9?jbMW*6g1lgup9~+Z`U9;(n$z^1eh&>D1KmX zfEjXQ2N+`qtID;F#cghId-Y$fA6Yx!#B6J%X$8;64rNfy?dec&(3x_K?p%hagNv@W zXTj0U2>e2FIv6)#2NArJi7Ciqy@dOr*(qgzo2bW(Rju3PULQSJCTmLjXhW^k$4&0C zOoUiV>>*iGaH+7`VB!t!EUYeVD7LLBN2CR}tSOr85p`(hh4M8IHG?z{rE_Gt2p*b= zhZc|*dMfIklUs_cq?|x4Fc4O?A{#bEi6%pn&1T-H06Pr7(! zWq356eEQlMZcnzcrKNKF&ipDLt_vw951l6U#tfY1L0<(9=1X@ew~GZG%*&(ods2C{ z-k!qU(bZR`QPaLN?Q6D|3`3`g0Er%5T{xo-V>W|9)5{BIhJ`*4 zf1z4YeT%~%as{dsYN5V7L3%pe^}OoRi+l`ur6<)1OLyYw37n9p;DE!oK5AQnA+@bb zTGG#W+c_nw6L`FZ$eKIJ)|XeCBj{H;^=*F5KsfYhbe6`dZ#szMWdb8BbNw=&qB{EI z-vEzAj{d&b^bx_5s<#W0FV_e4IY>)jodxUeggKe0mQHzR7Q7k1;P15{$Ig5|+xcSp zPEtm7K|_bzpUYIft?T2k04FzBKg*MaI(#S47LWRV`kdmj$Duy7;qPNlN+|&UpH%JNFL0r)^+v@O@8m zpge78JQytb`OdTukBgI(!w~qF^4=Xy^*$S!z)mG6R)@RG0{~H`s)T$nu2C^HuzpFJ z$7EkrPa|@0a3WPu2~T3a;UhPYh3y#l$kAkz8t#CZ)Om7(p#JsWe}#Z~ig0*kIGn#e zhqo5pUavPXF*!9oGuxk=?=K8CY}~YX)X|%_9J6)X_B;K=oy(=+U3UDNyZ+mqcl*iy z-FNN&sblxt}lE4vx~C5KXcAAvfs&`nO&UyE`QI;o}FF7-*d9x%brUB)$=)q<^|ac zvlo#{=Ed2iV}E~`{ZaOk?4{YuvX^I&VFis_8D)?{v>b&)*_mg) zGkaI|?(99;d$Ygb?=LyG^!?cfvJYn0Wgp5uoP8v_KKp3)vFzj7C$dk{*k5IToqa0% zv`c*^`)qbY_POkDvd?E<$iA5UZT5HBjoII4U&_AhzprFp$-bI>E&GS;rtIt4H?pVZ z-^^~#zLkAD`$rD8dusmO?4PplWw&I#r{=eEdu#Un?AGiD*}?pA{5?K@0zS~E=1 zoIfSMkSp10SZI7O>tE<=@(ytQlw1;YVs}Rw(q&U4Brs_sJ3>cXdyKa`rL4{4M|dz6JoS$9FFz4W6C>PcF@ewzN#6+s68 zsw1`Q#V~Du?IWF11vTQ^{+h5#r;e~y45R}Q_jUC#|;cBOr(<%A!;@2g#6bcF&yYNf;tkIuSHa6&3--MC(F-o-Q@ zIWoQL(8y%`H))(fEF$VKczlx041xffh&no)TGds6PS5BV&a*lfKmB%ufd_Lb-Uyc5 zmuB)44p_p4$Ab3#8a-04UkVxUz0;|P?SQr@*&kA)3xxQ=#mhI^vjAv;(3CJ-SV?Q^ zOv7|c10k@Q1}vspH%=eONj*r70KA53peMQ$s0TE5D?G%jYye}AuE2nb%-1CCFsdx>>0 z#ydRf$Kyj99Qnw_5RZ7=Rl$&}T?GB+;ts6DU|s0A8tEC%GLev>ECK=yiB%SR;g_qa z6|Prfh0E1gQ9Ax)$skr0%Io|NHd1O;+_5@pP&rz!1{LVSWC%gLZAKYJW!XGsf+1s?+Kfr7xJ3!tL!a&=AwU2)|gd?hbp2O~NQQB+cFic%rs zv>vB0?95L=&ly}x2rSz!?fRS8H_2fn4e zuSku6jhJr&4nmUttOp)O+yN$%@BQkAujPYRWy+4NshV-4kzNF-^R@k?)rqU)NIBvw z1?B@|&DB(ONk*38C_toEDpB1uy8MJLJ?Cofe#_N>tpHqIN5yEby12dszB?@{r3>yP ziiA;V*M_Y@ygVtAy#n@qoy`I{kP~BI)-jWaRK+U|3?Y?XQOnDAEXIMT92PS(cxM4A zu%$*hu%=-VA7maQn`%{(;E(hY*L7yWFx8goc^-&v<;-}^xRDxspw^DGgDtR{vgdFk zB&>yHOc-AkY%Md1)svB2Ih?12iQGvx(nByYC?qgSS+!#9tAB zCluNUO_yk?QXYl1kmxz+Cd|A;okzCZvCfb5jd}n{`*H8AFzi^GMqxnOB?v3q(;e(5 z2!6-qs-2_Hss*eey0 zQP3hq)~x=_`PWMYoR&o6&_}$D(SR!N1YSSJ}<>Xj&jIT+- zt~UG*OLKvwmfs@1$JKh}Z2$3mRx(COiv~|G`j7KHJ2lh&LEqz-OZPv3iRgU8sTDus zpIs|vl5S&B*Mp0S{`XxBbs8rJLCGXL5|-qnAV<6Sw6AMf0nGhdDX&y2>S(8bi|-au z({=Yf-MN9ZsK3A9^-umnmkhY6H=?f2;2A}qJxdyr{v15TGyjU6eaHN!qX`^*Jnw(U zAF4n5kG@;PYwhx8^59da|82dH_9||{*p2cm3Lju`|CE31RK0=X9R(H~mQ5AiYCz>N z5@20^gtBz*`Nx*W3{LESYyEbW2%D+>=rPqqYWCnkxldi*O)W-KY*}(s01oRb!&jl3 zJ&ItQ1Wlk%0eX0+W>8o2>ZY#-h_lU@YRQnWu%p8kGS*z%b?gK_DF(`veI*-il1}5< z+lZ@G^~z0TW5>EcNzQ8Jo9f0N+^bx0H_#SUcX#JH5cE{)PKD2-C%&tlCZu0*k{7WN zUdkte4ZD!W$+X@mWQTsLCGLDxt&R;??{i>+E`r1~-_~K^<0Cia(!b81L z*{`|mKe%i}>DFaGzNX!OaM_z&wis)7Z69uO*{{1S*(O_k_~e>)zwWZ%aM|8i*^fBT zx!vDyY}F2_X-`HvdWz)j5c!~5SYhley^8(7gyUW(tKTAH7F>E>Dg&!e6<9)9Q~^`0$!9P*N5C+7%*qetYiL&NC%d;Zv?K zxn>MLk!ftulvIUJyMkw8tV?UhKuJ~jj4Mp9`NFkpP=u1RODF(qa3qie&UAtBLNgnx z!AcbQC2^Ls=%XUoKg!m*Ov2j`8GR%2?*QPGJ%Zkn860b1WGNW;9~=bpAWPs zzaZEP^vkO&-|VOlmaUmy`*ViV2$pbp@q(I`ha2P#Ez~l72*QWQaV!+j8>=W}McPrZ+@Ov7WT(=-jKzbhd$M;ORBwoJIcZs#(MH3I z?TMrDq&W#HA1-Qmh`nZb-n%dvhK1&owBZJAix>eV)na%CN*+5Nj<8lC`~WD0m$uBk zwyP)B$%g`E>h7IP`Ue5J_4Ot6`lSu%cT_BBYD2jwpa`MtT)wKFWacTK%Nq=<3bxlP z-BdmCYar7GeL$vI3mH#*yTfZBV-Z%stLn*5`=&-?9RCo#*BILm>oH0gdVIDA4A@2j z$-K25pp270?!kcjYo__OK|n30*~p=39#PC;0Y@#O4qQu{&5pcQFV*VZu3AJGm^vo{ z5hcai-D}UsP$+h&Nm9i$Ng!N{rC}7hI#DJJh~o>vQEUS(-V=L<8tktbX2O2+9up@U z)Wv&z!u50zCkGm*V#S!?4vv*;)?6#{OqNGjYeby4(KUGe8p0H}lHI)KRLGZWP#LOg z$Jmo{c~!j{7%ddOjW0Hw>R%!-?7A4^QUMH!wi+N(s4CP{WR~_RVvx`(v&$(o%S)TN zy7{I^YAF5|Ssx@Pr>-am{GY7`S3Kr1Y=Z3%UdQ~H-cxC-fCByK^+YGPCw%^31YuQuBrRQ~Ax|i?OCA7wW z^c4=QcwsHh#^ciUP|+|)T{imOtUd@pVxgfG1k2J%)*xG!2Y(3KAvm}tJC1e>^25qf zb}+3%h8!7OuR~4&KDa&Qxclo4^Hh{Q5)&bCFmUW=I<+QI6`#L|&aMaQr=Lm)VW(4; zd@W?;gVam=Z?&nl`Qnmu8zR%`rB*NA1~=Kx&Qoq6?@WoSP6|NXmexBA1hY4N(V}a} ztrlJ^y9fssKEzd!q4EP#5UVUlVc9~B1rae49vAt&Jt~S!mVJ+EG(P9cm}92B`eVUY zU4FlEfkoxUxm=kU=V~4VW+iS!y4^7Or}1t~QJNc_7=hiZ8|zqC5+mqK8(Vw5bf+jy z8I?Wdkr=_XQj{i%5u%o&G*^{F2@rsph_q{X_VNS$#~$bh%>V^cj`w)fq{FbA4yCZs zc888S@VM-k!EeU2u@1h^PX%~KaZiGodu8n41P3<)-=hZioE@UpXP%TL7Nx|zYJHE* z$e{1bKhN1*v00~IZrImBB2d0xF7E5}_?h0xr5Ir%ClRqCh3pQI#nreJzHzZ)@U56bN;jv_)7!o(Us+ra;(KOv_RsV#40RUa#35 z9aEKiGfB%@qVnB$z>q0L!rFYlsA=^d1fI~JMaa~7j~vcdpZn6=UNRx7oUi`oGp~L2 zgw{s$)i>V$hcDm~{Z~(QnTd|(t1rL(InSO<#Z~jGdc!+dkWDBX z%6#<|m5ugpzUetHK_{G;t==w~k$%Oktm(R*;!}GaXb6bZoNgyfZA!vf8gXjfSgsFQ zPQ5c^5T9dv*5tX>&7XQ1>NV~n`1!SZN4Lc`#l+0KfUy=~IJ?LoD@lL@(5tbxlUxiZ zD|VOO(!69pkE00)N4!mY+cH^t%=-4MR5Rk+LC1b=0u)b$j+O_PW?LyJJFE_B?>?L< zLN?40K|$}MwI z%3`-7q4#wcIc{x{y-ksuT%=2pXuz$h6mlXvoljVTj9D4p$ zo@3d)Ti(4-eoFrpHp6(% zM7h89^bdZw=zlTZw+#Am$-mj)Sw;T~dQS!8dtK4344z%|Ki{;T90m0!2A355zwyfi z6$JX{GL8A}{^g7pib~AusoTSk(f=G(gm$*egoWH*|IkBi@Rq?Z9K>Gd^nn5TzfI`G ze`t<+DZ7YEI?w{iDLu8VrGitdv{XfEk7=oS!ZXxTBk5$wNa?*f=t8y67lNn=9}6^X6c0xk_rVmV%#I*=`GJK&rgI=eNZI@2q5{d|wa zmd)nj;)_w)zT1WR%wVcZ4Hq*9%+bZ$l>$J%WapjdE41bwu+AM^Hm2WjU-A%I*uU_ zaAbiOHJO5DHKp8?34%;2Vhjc9ASc{9ECn*)s2-}slr!U!&KOu&ZLE5#6la`V*{U*+-#;=NALWRN!LDkV@4bR z@$sCZ|Jn4Y79uz|dHNX>FVe2t|Fkb_&)=tfXQn51Y3dbA5ewkVP3=JJ^#3{)3hDh< zzFS<0yH7@QE9fgBRmE*+N%cNazdQJShp~jul9woudjIj%ZiOGK)Bjj~M~G6V|54u& z*U{}??@PJ9`yZ*xXzkShucW=tAFS_O_ygRHRH6R+b<4P|fVhF0 zp8{1_@%vmH2?ymj0$Ky{qnaWAWoo5{eQGTjw0QDgqypD=q)YgFqvlevO9(`)Sr(|$P_A?TS+I92>tjnj78f_M?`00PQw-G^v?qRwkorntf{f_q ztw8cb@k^qGU<23-fMpMtxhmjp^-Pr$Y)_&w#NCQKpmJ~I?Q9*~<;0B(^sz9T=ctkwe;B!1e z*}}ea_jp0rX+#Io;k&VQYI4DU}hM_mnCLIAf$MFTBj%J4G;p(oO@EuwIlZ z6_i}pZ+K2QJxph0d4f)1f&@5rM~bG1T!53)YIO1AG7vPw@TNkzHq*%|n9RWDA_CYD9_o8@I(7;;zA<+E18g8+>CHb6 zLZ&;gmqoc-5+Dn8j3ebdVLeVi)&L7-`(-ZKBOa;_sO3on9AFcdl5TVd)R020iFQaV zvPqMI5i1bQ!ih=ohH-3B9j&I`VJb51Dqf|b-M91nn2Mml>ZLd88^XI|G@$B*H|BTC z4V+^P;!9fh7o}^kBskwO1SSriTWs~6`hU%M?8r5I#;iP*uY2%3G5P-0ep{~8t&P9^ zbG?O{oe=>}FnB%_jo1-O`m@xoV(D3Qd&Z+|(kqVxX2%F-Cy9wr)kp*4=#Mx1R|Hb9 z=l6?v7XJ=j;Ftrqj-*pSFiRmE`#KO29ZLG4EFnJYtXuuyx6Y+E%!y{DzI7OJ^%R|* z%tu*-94&QE<7Gsk0j;T%B44pKLTogXF7P&exQTXpYw8AVsrH}x_EQ~$3zI>T3+Ac- z*&#;!){>-_EVarXjMxxmlxpxTZt%v`VEz8KTdrHAD;k5~Zn)8=5_toSB=^|UoIc{t z2tVE&_~GQLz-)(%$;{7}fUS|b|7Lfpj6wQKt@%0FWyYfOSGn9SxP|73xJW*_rnsVc zUr^{9bjzXo^(4VEEG5FEs>Ud!NiKl4W|FJYs<%=Fo%`jhLxwU?ZHW?))gS6$%FlYAM8<{06#^>1`^OEb`~t zGowPVw-#SEhr=lnxd*3I$CLSOuo+hCB@?JEv?vIyR<}36@ngw+3sFUx*2}Z~*9(3O z=D$J zAJGfg0^fvxzt9u?y1Em4=!CI2KBqJ0>#O>UIpVv1R)0|uKlQWtwrvG`o55Aj5Gy#L z#teQ3A{{I-;Qlj(CV@SxJM~)Q+0;t1ICc70`az9&uW4S3O-dKmDJrkdm`R6h=aqtG znN>nSq?lwYNE<^qhqa%L(YWHAbURw69BeN8qmW;B(&tnKY(&Zs)?{raouY^eA$M`p z%v<@w6atHrZ}MgS{REgN%!$SbEVocsC){@2>Ltr?{qVRceW}{wn_a$H^&aHUPNUBl zqx!E-V+MROq+CHbiY{{rS#F|7#d4KQhBV&4f-0ge4R%YHe{_4Vgy|UR?AQ_MbYG=3HFPt?*CH%Evk- zZuBY{3Q|S1P=?L)CS>xJYv_uB@YAmwOO<_V#$ih!@O27^zWUH~VC^uH#}Uf3pz8>c zz#lXZ8Aip2P_cc4fl!d0C@kVbi;4T~y5BDTr~6*D+lr6Y-W1jus$>}<)rII$1?Y;) zacDqiclA9|44lx}P08I9VT(OF6D9%KV_2js7*mH$5e;u1;@%9toF`CWeG>)92nX^B zk3|7uRr+v40eQjD+!N`ZMo8{z)CbYA3BfYk6yV?tp=oMH6cEjb0!SC%qJUgmD~5`o zP$%L`zHLzekDE`60z@cKz|7uUnM}8;RVAZ#>^^&oU$GF?o|LE}5|Hz%QX7Go;v}Gg_(%>cTVPV=xsDUe@BFYb!j*--UL&{Y!jlC_dYl43KQ0 zo&K|Ymtw>Fzgyo~6TUdzfiah~{2{9LOuu5#@v3%^h_64>Q}R3G1$g0Z)BRN7859r< zgmy8gDY1W^#jTopdC|Wpis|mM7-6i?p1$h2;cxX<-FsSUd@nc~jqg(9P>MgO)y&YV zKz~a>P4VRNKpa#3^+1WsCaO2yiyKlPoru~>8L&Rh$&kf~$PQ$a@tD=c)3KyW)Aa;R ziZjv$vOmFfCsA3V7(5KqI#~dyLy}s|!Am*I*F;KcO+7Oz@}*dMfXJ^X`cF**YII)# zq^-*=-@hgLSQGby z^>QeoY>g0MjEc3(tBU>;Q|Yu%W7MtDU@7$kf3qgR$NMf}s8A+wq5n8PKbX-q1Ffpp zNvSOwU$r(<#Xt7g54x_`cu}`r-FXl;kT#%?9N07Xvkc>S7`QaU+VIMZO*LBb zRHL)%ET;Nxt-Vgw+N&lApxVm%Slvj)(I*;_68$nbL4oM@`6ih({>P}=$dM$p|KIUw zq;;DmU+y9QFW#j|gt_ZkxBuH~n|QPyNkCEdghYz5rb3I>H-2mMjauDK^xNp#p@NUx zp$vt}iSB=sF<3^@JcVTzCi+e

hp6Ip5(`3BHVL6aX?hC{f)<{Z`t4_Sc5qOwVb(IF(oI~ zW;!R`a>?$uavDwppL`e4%lIUgNIEBV&D-s9sSPLR2vb=-9kRl9AC4klEH6=-Hu+a*LEl)n(cEzAG)1#q zUQV&(fAV97M;*wYytEDYr}VA(1JTd9ABA0QBVz0fVug!Y9*;5$;^^Z(BF2c(^lM-- zw|u!9)e5|ZBC(W!51rYD7obdEls}6(+RVqc4eqIc8H^nQHHi`sTs%JNevFe(9$GOq39VvAVkGheDh3BaWW$<5OJp&JT*&F8nLWnV%H#7reCWm3N(#F z;W7dM(}{|ArG|9XSj&ns%!A>R4l&c3qiDoJ(TD{p_jRe-l+l<^930yfAt<~^K}Y>Z z*8Enhdb%L;3l_~F$-@X>cv^j3Uo#gbecelo`b$QS>WPmh530U6+doI2kOep9qG~f*B`6Em`ysO2yv^f{0ca)(~>jJM~l(E!!xNFdezgf7YwWZGH zdrY!QbwNOXt=nHw-9}A{u7-xyOuR<#MX(mvwQ!fyOLN_8=DOF+bvmyZfcC)pn04aK z!c>;v0#Wc<%GRPL3)Zp{T);K}CJpYcIc$Kco~mxF-kEK(Oj8d5_J*uat{-c-jor-< zy3%m|pXr^xVn<=U!B=Hs8Oa-?I7tFXbYsd`dX>HiNEWBqT+g20$41$Rv1Z-5H)C(s&*FB9%* z?adPq!_6CeMvGw#B?NKPg^7wNTwXpCB&8*I8JS!rlI{a@3kw;%4)>EnU_ z=;xHzBE0@SZACw1TLX)auphs=svo}^kO~rY3PwKQz6(GP)!SqmxR(*LdG+6+m}+-= z-GIqv)>u47Ikv7XAOG@_#IqNyL8m3incl{~A3rT^d*2T=V_2>etn)GY9Nd zE>wMq;Q8^A|7A3YdP?JNj-%h*3&2Plbw*A;V#=T7@t1o*z63e zQwpLsx}2ABa~WJJ>~-MZ|Vu3Wn7DNhM}p#(k$Ez`d%7@R^Hzstvrl{k)Q=P_Ozn5 z2?d5BQAMfGJS-Zc2{(qehV+ysPNW*owDwDX2fK{RE;ZcR77gkI|5?%<2T9p|Mgx-R zDS5;|I{(1^I3;PL4*OS5Dv!8dUH6WTPZ&m5c+fT>0$SCD>;;gCqtOK!KjU@c@|tCt z1t;{F1x73v9MBA319Ctd&#%Mi>{pUBMw$tVu)B*B!=s}{uN*~#dK#l|%l#KMJjL@ma)D?H zL~0>uMM36u451flnF$e`vaA_lkRF3UeSgGFtmYeOI^n8wzmPC;aCH9{fJ1aku;j{h z^{K{KZR4cpg2$S{{}_WrD-AWF5fL$rHRaDx`4Fb&neDb7%)8W##LLV0K)3%Nq5`#y zf%@jpM?Xg{vA`e6ARu_Dz*XzZH+KX<9>_>06asa+$xKGsXVE{W#=!S*x;}kVCYW#; zohxuZ^iNk0Am?uX-|MP2%Ke;f_~uB@Io2z38b#>bl1jS1 z1>ALbf{0y%uL`!q83#Ls5rdUngafnum{Ay!(>=nie|BHz3~&mcDY?CL`Xby?2fKyg zVTR$uO$V>m(dZx!B^D(%X1K{JWCbYQ6Y*)9Um=t`>poqNt zLtcg-74~XdhkLiBdMxVX7Cy+ams&EVrwUxxQ*RE@L}{am#+nblklV`0;B8c%J08f&vMM1g&SPp(?T*Jv`f4ni0>*RT@T+;?bXS#$c2XNxS-DDg~m(0CaYn}VJV5D z)Ot7w`axb8(GE;v=+yF&Hb>c{WWh81Q#L6LZ%t-S1?Oy#@c|il9~^^-F-M|Zis-1G zdP|49OEVVR6rs-$Fo)G^#c=T8VshqR z&Q-U011}EI=0j4OMCOT6D>9EZVF0O3ycelWFl&FSO`_2b(If$s?&jWT^0;VnPtznu zmFOjou(H)6UY2_^m!@?wTo3&MYBTihsZC%N>tuIx(6mX$p#*4VR6DH%JpVy}{C^4lD zo)8G-AZ94qymfr8&0E|v@w;&Pyd34*C;)cSIbkP1k!Y`auC{4+;4XDuTIeqkD23|u zUPbDg^qp3xo-3!F1Nc+kNL68^GS1{$nO@)z!l(=;631D4R*VEZ2$vOLzAlrA>{R*- zqYzgfyt(KvWz`*bwym@&m-inBn4uH<)^L$^ZKQ@ zznC$7l%GHgDiHyD(q%U+bn|rqn5iTQnRR*rE>o5M5&e579MRM!nZ}$04G;G5RdKvFWNM=tiP{uOWPL87xv(3qPA!XQP#O^;2`32xfh`99 zN`gH7T@s!lK{)XcpS(m+k|9ZC(5(*@QByOdF!h_+?lCvGjKK{)%;sXzYdyXZ+pwY# zga_E5Q?X(l2dLGm6{stw`3z%cHuA0akbOyG?j}L+hVBm%JRnwWT?D+Ohdi!Sek(qOSvEHK%Lb) zB>_~-pe(*JLo@jTP|r5w4b0KYzATX_^$>H)mU7X_^fusaBO?i=*exE*fu=&e??gsr zcKsLZJQ;4$-V=^UM-!9Oh|MPh#nqq4^jSTf*O)QW@Qs3OtbB;?^2*`l8-n_JXZNB<( z?p|XMaQ(jEih&BQ18_A(NziRTWNnDq+#nuH+N{z#H#tAHuL$1+gjrG-Xu_pIEG9w{ zFCTCW5;ifOZCU1axB&RLRr^EBI>AhS)rE3_C4jg$y5E+vr)PZ zvaBhoXFOX>0gt)2052-eP@N@nyT-CrT)f<>CkT>|A~dvt`5rDfC~(-9DQ*F3TGWpG za;tPa_Uf!tLXg- zs#B67$=ESE_gw*{V#+9$DDiBID#4~f#C4KDVT;mUv+K#{ey#E_AgFnnx`0`F2n$9n zM?Bbvm5V@fpyf&{|N7j&h2G&rxDoBI(T;x3%^m)Pk}E+khpLT^AqjPh*cW~CD{7SZS4P4JkGRJ#eH;2QK>kta=v7cz6%TM942$}@Uq20V9@r=TFc@5f3{kfs0sivnbc|`+zRooH$>#QTruYFcCyJKI zM$(=P#%FflRvPNq9jK6^+RQ~Q>8lQy5tupxHBV4PAT^;$QYCV*WJ(bt^QfZ|%^xWO zjo4$MSF`kl74(1~a8+xx4M{<9D|F3AJI;fb%7!KSWV+^CaTib~_oKKA-HCBaxz}WQ zxyX!Dx6QosQ-QI{ig~Y7HU!Kl!AJYBM<=pM$*anOkfP35nkqezUipSdewA^<*9sA4|IVcYc+a(5S}!^q9E)$7zA8;w#n=RO6>pb+-lbs^#Y83A#@n zS1q3P(vCy2HQcQXN@Z2*qbJ^N(v#Pd0)-Tu&%lc1HL zrm*bYTrRBM6{hqS;q+^5Wi3TQ%{U8cm0lh2l3QLU3yTVXnT?iv^ zt10vi>W~5~?F;i}NAk6mtO&F$!iWYT+9RVOE29Ifl-w0;2pcs6&F59=S%T4$OM&1K~1JS<7&lcD`bBCg4o~!HF%uQF3mh5Ae9H2PXsEx?P zVAISp;9TShc80<0S+?o>GaM7a5A;kXC05~T!k%Ag7gQEgqlPV4AsFs0BGzgphbFZ~ zS<+G^C>QEX3lwD{hrSsq1{pDxAZOF?=Ahv@7Ad6W+ElMm1_6g4<&CRJ8G{G1`0!~F z|G7yS{P=O_L>!}GMe_)A6Zvix`2sjp9-tTGyY)86m%zfMq9I=_Yl(cFer+1};TrPA zp)8E2Qf!;!M|vcl=42xviI-_&Yml$0PfPpFtI1bQc<)e)SRjia(t17ltWo;q z#u52uKMPf}9;y<mogXN1il4sda#3ang)vA6&ny6kK$%3d zz(@`mx|;(;K)@k05Xh$LInT_h7d(^qJcH2{CvVduTr*M&CaTBng{^3npBiAaVwH?W zf?&W3P?B|0U+!?bIJl6aTB1gmwZD54Uxs8cVMw_+PTYW?!Q5nCu8{AvruJk4#e5;7 z!wl`>j20VM$Qy~hc{Q0Y@U4Y^;bfjv;i+0;PyOGK*zDO83^h^Mp+aJB63GL^j{Zp` zzv&K=ye0PZaB@A8cQz?-q_iI^0z6m zu{EqE`N@#j$&?uca{Ebs(;-M6)w5r2J~YWEEzc`%A8CPdtfiCaX;!rEl%k74Y!r~( zC7?_scCS#gAu(Mf?|o>)*#AUZP8yLbd9dg!EIkU@0acm>Pqn9=FgT?Pu8!rfYh71+ z_!7#_51%j?Eq48c!N3|d5(T&T5t0jSk?k0ssRb)TY$>?1dO$Cj5yU$Q(i(+C#hSao zSTM}%>z&K>RoPrQ{us0_V0rc1r)}0@V;JT5W=I_+EMTp6#}gJzuaRw27OApgh#8}= ztw0o!##p>w$5~l5MR6NfP2sug$~IX{5f+h%^EOn|o@JYzXgic42W_&`zo*x>5xJ}& zHZZYVv3E?b1VzBn4hwsC=*3MuGb*rP=u(EJucn%3O~iJ&;`yYpE_BhqM+g{WcJ*#8 zZGm-c1=0*4822z6NdZ-bJ*vPexZ6KgSM0ZAMw^XrySLOBm7gi>d? zv5A7g%F@KZY?Mxgn+Ai(cnl1Wx5yPa3Sij?b57AK*vU|zWwFGnq!<{pP?inY`V<2* z&zz`T4#C*jj)7sx(Tag7bO^${Vqh?vNM7?YVqm~&$H2IEO$-bpa12a(nqpu!h4I|> zVRwm)B65OAp7Zgc7E=slW85xnHd1b3L6JZ3HN6V|7c%-0HFP?dlK= zEfhCtp{RqQaBJ;W%`Md%Zf?l4ralwn;7^PGE)_YZdd0VLMPxLO@2X^syS%!c%c-%ZYRl|^ zGX!*y))f3jp>jZ!XjC(2WJT$Q21}=@0#U*v)0anv5_n&Rb4)Mo&neZKw(~f^%CYJC zWZfj$))r}&rTH?;_;p*C#T6Y~aV&B_TERmhuSstPPj zZwRXcMakT3y5lZUn`5SP9Gg54+L#87X?&u!0Bj*#5eq=E13JhKd;r^sp;x9^w#W&$2u}usf}=~p_N=kcrnYKUUlP_s5*Ev z@^3Q%MqgH#JBmc{?NuVifYzUhI&CyNb(pSAgSt;*3CW7J!OR>u}r7ilhlV z_a+4=)Vh^S^k%&Ho(D@h-I=?uWJ5UZiG-mfW@%F2)K|aiLUWE zJt9n$xp6=u-U8^+Ko^Syj^t#P;uN`vrx149JM1t5guvbD*XE=jnAO_v(L065Y-&DF zM&3{wk$@nj@e}fiyu3c-W1@QA^_p<=5;~-;JQLMb%`=8tKw#F@^6mw~Dv`gpiGP=^ zRKfRhvCV~Q$@ZM9DeZol)#(yGrxi9CG|%J*3Ooa`{cVLwo-Ta;Fl$J8pCJlnjFwo) z>vW3U9UVF02I~5!ME#SfaMklrmDSm(PpAgf!7x7NwJEKO>~oCB*YNe~D}3NR8Jm<@ z@SY8aWuWd7b|rP`IEuXG=y1hHi-}6}!NY||SZHHhuJo{|^iV2&c7Fq<~ zn5G0`IqiSD;6G{k_` zzRo5XAKOxpGUNrQo)=jRJb?>DD6!7gG}7-BhPzPx4Y35ELle`hZJ~-XG04v0Mu#pl zDG??Q)LH9F=fwFU6AX)fnxMEK3R{-Ir149&@AFaxnktww;4iJK<_xV6dWXQg6jn|R zGB9bv*6-;@WdL|A)SaS_58KlN-)C#J_uYB7#pM7^P2(U94hD+D18Jjwk-eq9n+v%a18;qWakTp(=~|O(_%X zzZvQH@;#yBv)5sXGtaH(%Qv;9mN_iAMp}Ma+oI*O0FKZrMXXBJOu`?uxehgr%nD#0 zc9$e#7+mQ28(Vrl$IW&a+q|{L>Q4wkxr{z&6?}J~lCwJ&kes~DVTfC-;VT%3U?c6) z+){o0W6Yq~?i;Qr=EV_mq9?5$l47hY5+|?Wcn!b9qLoy9iIL%954q~Y1KLOI#Boqo z@e8ODHzf1dI${UR5;N4SN*&kFB>l7Asu%jAf~9??6>}<7HH#fT|#?{GF_XVDL&Y0&uW?VOT@RJLYGpV0xJ)UNA*Mm?7UUV(%rIiafg&Z|79N+^c|4IXqp8zMVh5G%r}i+ zMg@8bvS6UL5-1M&8^F%T^Cx4LfSZiu|LFy!C@X3W|#D zxf9g~IlH-I3R5-(D%2Reoh$TrtUyBCMSf^VlJ43!3UHQmX8d`mz67UN&;3XTP58~; zXeW(Na~iXvBOFR?3er*sLbE*CIn*jx(I%+S@UnSmd~mHMTiU{1QL8)j?be*gkB~nK z6I&i`MgoBf&>P2-gb}Q$o{YB)O-{u*09yD3M;`mYm`=BKF}lOBESdby7)z z=+boZnaw=Oj)Ne)5I8owC$q@$^PqU(ARXfnIrb{i-^pcvEeJ^U?m3*5^574PM&>zf zXlaw0br~>aS2Q*yT|v2cOal#ePnKIHxD2+*P~ZY=ur23|pld@CWUDWZyCkfAX@fRG zmmAP(MU$kN^vX_MRU$m{TaobE$igT&aCSa z)5J#^rB3Pwq1fL-5jXZAho|C$#pos7n+Yh(2m`79f=L8FJu}t=6+tEV4W7yxiI`(0 z>Zu`>V40wU8V=);`dljFVit?Rta2o4VyP!^7Gv#KVx*cB`j7y2PasuPPZfG#RueYC zMxiN*1}tl%Z9f*Nc#NxCS$M}Tb-dZGwpmTm5iia?WvzjgFrZIgTlwg_~ISXl|RGs3zfY3M_DB>dEyCCk1Ri+!TY zMvFz=jq8rEJ@20)QZ>~&HPsr|9bK-iJN9p{?${qK7Ue|VC?nt&twpc`?hxir?C!|+ z$bmYVHW@@NS6b!pq@Ws(;_Ypwmpyhvu&>FHAfFit^0WaBioos`f_x?k@&Y;#tTn?h zD4AVS0CkbXxVC`S<~p6_BWVQ4k!e__R_60g2G5_UUim#So)e|BPgLKfHvcK4PHFjiW`yX& zM2kTSrWW>Ad6A~JU>Ma0kHxlenWI*DAc1au(TnZEOSm%ULvS`6vcx;+T1o)(<`_SP zy6R9W$FpCQp%sMO0w)%krm%`i{JU9uEo7oiVH;r)FJbH0RVl^%hlR4lNCzK*ICVH< za5aBC_={LwKWqTZv?8dKBwt8{$d6r)I=O-s=q{m@K!;3}j*AVO-7`XYDUM+LU8J4H z0U_GDvAE(mDU?)j$Y`xiavPDdB88<*#v0k6wMB*}AT?TFAT^8ZBi2smT4-%s6LM^o zb}C!P8trtWEhxw5uOQ}GsKAnl6EQ!FetM}l+M=LtOnZkxO!df17aMIF3-=Z=btOth z(q6E%h4~P@6Uk|vIzWS<1z@2u`G5zYn`W^`@npHd7a_2(TIW+S4BKEs(t2$KMNvES zp;hD(xz=m7RkH;a%AkZb$@T>x!JZn1EJ+CFYF1HPrN6oCq>z=! zD&wq-!_)Y%kipH7)ZlKTZURO+y-MpQsG4UXg#~Etr6Slb1G|+?&aPN4QT~q4FVa*p z0VfZ!d0wa+f{UJ*eh+F^-~LI>s?6VLfs~X%-lfinA6b;7C30$OSd`#`8^f#$GepbX z=q){y;*R(`wPiYe`@Cr292)rgU#Wqc+(0~iX#AYjv>tXIZbvF8R551#hG<|g;(sGk z&?fVd;n=xq4T^v%2}R^M0N)RZA{ZcAD55O~v9K_TOlwnD=xly!-v=B|>z}n#l!x!b zedMcjdE@^f?tP#wyXrd6^XLA1@80+7R#HidR1wa-l={-Cf|7|z3_;&{UF1I+5lrmm zILtI_4Zas0s;Fk1HC3q>3^4-JW`@uMlI4m*cg1C@JJQS&x(y^4(CI;?8=OWP>B3Gl zN{|SliA*5#`F{64=bn4td&!FxyQ`AA=g&U-&u{`MTGXNE9ZyaRku- zUymRf;F}}pZWw_L>zGID5kv$0>o1Bw*P$$_=E! z_7MGq-Gd-h%?ld@aGF8q7yuvTt5V2`dgeA*0Dk$uf$hrx0Q(BN1{6j$ z9~_K`T@>$4&I{~S=$;APmDhfP?(Oo{^oK)q0*6KfiQAh}0FCm4qF<3zlz#GEI8mA^ zkYO-@#Z`s&>{SKS>xObQq@?|mhIBW*u0%y-w6ELEwXRfddR@6(6Du2`Sle4y97a-Y zf)OL~X4(A?9TAb+Z;)XB3v>;vur(M^W^FY?qEwzCEDg+1+}Gh5 zTFTg#py_E(rl&nKJ?$pcCezcNnjY9ib9%t7I6XlS4;{7!4fr&|#-QLi8%KzBh(WP& z3(@s?jaD38qx~;GRImlP8lzCeM6G7gcQCPrX{7K?m?DhLV4^8Em{@~2Qg}|q$XLx@ zc3wEb*d`{P359Q9;)Zz&nHM&lrw&eW7&3h_O>>IR-%>(ph>3Q>KxJPd2!Ntbqt1x` zaf!du%9s$B`C9ivA1jUUG3BiVAweh;!z#L5c`?}MfF>(-Xg~HVlP9Q6!2X&(DPOVZ z6LN9{l<}bpKG2OU(xkbXCfTB85wj*2b0QZ?nmi#F)j6gjJr&~5neWD|#l<=QKq{v; z-9wi~bB-*Gt>nW!g08)l&2_FO>UB<@(a9>XcZPKylp%PNg8rUP2b>*b-ChYD0UAU$ zz}0J*votQD5Nyd=M%1J>kobn^jWxvBWbk4^L3P9lK)!-`{i!#odTRCwGEVGs2egJ@ zbCH}oNEkiXD}IPYr#0B4D_^4w`B{@vxnQ}_l++&{^PjB6-+BVz5M)Nv@XmO z@{hAl&nYfAUhH|j^@v8eZDVtYv}4qY7b4tNA+|#Hj3ARb+!kU?j4CU5cQfWTb0Cb( z*jZ(k*kE|jG-BJok;#&u98~g#BNmv#D_FrXb0O^24m2CZ0D6z_!VWBYQ?Ex1o5Qcr~=mhtvjAnD~&@8tUl0?AwuNTeHtaGHidGS?7D zY==;6zGz<%NOJ9l#b9}PBD=OIqhjzt$z(uEGNpx#5pN%dv9t!~1!Tm;3Em3cLiM5E zB?Ij&^}X@cbaeP2xgsbLX~jO8(5*_Jqnexuh-eJ$msZ4q6Zl8GZUC=UF0Bci75q%w zq^MUA4Dbv4t^-?Fjf~N2l7MwL)##nO9##zk>O<~7=I^jeq&bX6LDq37NdAFp#rY%= zO>O2?O+5fls-|~9c%Dszm6KUtA=MhTSg6${!%+|sltXvwR@myMM~xyBs=Ba4FHy~y zp7M_q{`o`wlMFxMku2)%RC>W!x58l%7asFM+GMJ{9e%|1$Ez%3?^}Jpym7r)FiT~A%>()Jp8SbeLnx;o+ zd+a7YkU$Gt%E%DjM~uQ+p?mMEw)IDVjS~aqUNXUs3=$bVuh$z7skUG2qp#!go?pyX_Y=HmdnVQ~ zWe=1Nv$)F3^k{kiW7Z4CaveZn+UN*+{F(opt-g#W*vPp%{jo-&7nPVykW5k&n$OI^ zP>OSlbCPT84kV%>h!L<*kMG@-C ze%Sj3&IMSZ7*!tPz%okeyu4<~5Gj+F@34uSni=CE&47cbF(l{%{s6XS}ZzgVNy zJiI4|xdV;|TG#D)WjZhxmH*BpH;gGXuIJ~frrYNErJi;Da{sP)e+R$x&t9h#d=4-v z@0iCsRM3vj8aUTlo~p{qckEz2qfanAx#P3q#rAtqW_?~`>lbP9lGRbFTAwDwy&!}H z3zQeoPJLUQJU9&8V&djpqDoNGvIlYU70 zfe%+Qh@Wx12kQyfMcM-O%=v%meJIyxC%3im1eU+~aPWuVWvA%g>v(kAI?&AD>b)e^ zV#?FE=E8h$Jt-f0f{O^DVUZMj%Rl&S0TD$E+rE})-%w#$ovVw-n3h%mD41M+<`03x zkRW$ek`%mrELE}F*f~w_>$t?G0*ZJ3v6lYV!m=E`Nfw5N0vZ8=KyGG$Gw(AgsJ&M@ zj3hza+cC!t&F?N!3AuYwvCoPhKADc4qQoDTsYK$vMM~C&0O-^4wd{i=_UOLSy zPL_B0$@=`;)pxw-zTfZl=lW@nC#o&}X?MHbEbaE^=jT~a5_U8b^Fk27WdRT_Ts@zQ z&xhwW9`>q-A5MAd4^4z_eL9U|<%2`@2mlNy-wpOx6{Imm5b0-Lv(Z~%PDd@RiC*QM z!YsOppDJ{aZlL+NlXS2b)-&NXHy8M(cCASQWiFJTNqDDeyK(_3Gb`ItsI-l3!Df%a zSW70YA1{PSBuSCKr(Ry?tk<@M*uWs``!HVIa?L`iY{6RefetjPrg_Jb3p7fI!W2_; zOR_L5+Cc(fq&Np_$E(G<2SOrqT|zz>>F^!ou>%ob4f~+^fqF0M;B`l_A{}=;4-~X^ z%&0s4bsVNA(p&0Pa!b5EmfjNR!yJo=fJWA!){2%woFfioSX=BRU^jmf!P0YS_%n+c zN~cQu3uhuBGVoM-72WEV`}mQEaJ0CRjykM()vDPtj(R`bZ{xZWN+|{>?Ab5%2d>X6?6D+vJWzB#`oL@HV5cf^>_>g4q9;td$Zw#Yg)FVW+@!T2|i?xJhQ0Q9G1&(*OC!W@E~@HGpB z4#a|5b4!!vlyyqlJK)_8K+@*|2)5-0Kx89J?;CeE1;{`EAsyZEqJQIpC|m;|NFY^S ztY-%ZdPEHnZMic*^l%m+dIri>03p{L0MSEe?hHUM(=v~+sBs!BrfnptaTcywlhT!S zAX>r?E4I3-t*V8!44?S5ixP8Yr~AB4hU<?0UEv*pYXep!O8x5xf`wcrUR=Ykq=nqqT?Tj!d>vC@8b zq@I^^H?OjR3;tqfIJ?=pjTfz>M`VQtQ6vD0#iCR8LUsUE8f?+D0{f(u`BSBs(GMt< zrit8k*5Tg~LWnSJnJomu7S2~F2MR1aCl=0!RgW~Hc0$G3GFT9#X{jk9h8JhOTVTl3RH5h$-{#z; z>}`ZDfEMDv;)!$auk1LaT+mWV%7626asXiPL6DJ4AYD1ZMnK_@u?KAXHVFDY!p9`n zJcMKhm69L=KPN{C74*F4F)5WWSf;*o_`%S)g^S_egLMaCfPa(YE7|M#ib(&D{tx_y zo(XRQ^KRA5yTP%Ury%+453)g8ejBxJERrWF-kZSCxM-fPAp{lKRTAXb4I#Q9eY3y- z1RK%MP5P0e@J5O6Rhn>~gf!vFBy5>-&9G%|)-yp#OEIPi_p@NS!zBLGWmoOa1wFaj ze^=hErGIP7T8@025s%73W#y(a%~u*%ncu7qqPo>jvZF=%mbVa|{y&vZ{C`dY7W_I^ z^ps}jKeDH$t16MJr9+?}e&%r(EIeZfsj@HM^Ovc&!{+7sqkbD^^VV>qR#R1VrLvH; z$~(Ukn#!e4(#nE}D^e6wtRsPFja)Tn-dgCx+vo!bOlVIrXLY#)2<*#Kk5CL4B_#+W z(T^}aDso!CoAnhfPTH9=Qatgr2O>OA`(4lHp#O{6hFQ@>bCv>1B@+We9hQjeC|KP| zv0|^Hi7#gmSyM`J_e=V3@eYw6w+eT*n8GGDeGF2JP{$b!)H{U8GF=_xEDs$T8_i2p zfhbW`7`i3l8KRPlkx1ruxKj+)_UXwKFCXz!GLz`$gC9|!c0xQfx)D@}POA@sC*fDZ z!ajrwo1u+X^oD}_g_;MFbD|T6M9rzR(!H#5N%HhT!G*5#bK*#sWS>hbE+Z2$@JNT( zj58(Hs{T6_mp+{i-_XbQ&2u^vj3)DIi>)Nf61^{R zeSSd{r-M0*;;{Ywg{*eKN~S(~iXJ4(hf^EoqM((ktXGBY>hNIARKXFkCR21&o5xhg zSgIC~3F3sN>hfg74+Ts;-6S$O4ZS?wTRtJ{qRT zpu8*0g-rKZ|Ks!X4YD8uflLFpFs_F~q)EpXD6etoBQ=aWK@XKR*|#pB4bUvlNdbBR z-j<(^@hUFVRUx!xeb$S$V7vCM3$U!#wEpS>Wt%mglpl5>5mDk+ah0wjXI$U1J+r*u zVu}Vy%tEM4M<`Eh{;i3KH|jLa+MO-T+O39JTj*439sca$F$=3~U(KOYhGoxt*vO3*L`}Z< zOo+hPsD=@&vAG(yAgzOw#iANECG9kWHCX9E+Cg=yI&#M1ul0|BuVU^e8{#(Y@u<<* zee7xMj3Dssay?g~Dr5@%&)w>&6DP;{&G#K&Sx--#9L+=S_1x*K>QYF!8%yz)r&WTb z78uy(e<*W;fRjDU+7f~kido>25Xqt~amHLWUdo(GZ&+p8CYqOBakLz)EW6hzszDWY zz=s@saFS4P(x9dJ zH;%%j);mE*GFw~Mxbqku%9+%hC<$JivQ}%llwJlcCm#~lOxgw>RtA0BMte+V{J4)cX9K-&4Sw3U=!ib=-GuVCJp z&(iou9{jxgR|t1XHXWYQ&v{j9fy7<`f~L0~TPq z4uLzoQv{TE+E~c2nY+93v4jjop%APG-XLK0)vz-T;a8}H3^**fqY71zDrAX)b`;fa zh_DqZcwBR!AkHBA>jKyn(Si>o&hVr~c`>AZH7QX@b&$Ni zdzAoOfX`dawjEmRE+>A*@jroeilI`XHAaXb@JcMoOApr>4@~^QM2TI)G5k^&n0}CU zEIPyidLsh>4I3G<%B9;rg$4=Xh(*)dQzXnUr{&X?jQ7i_eL;w-EGh~JeTAdLpD3tA5B2#| znM0;r;Zv^gbQZ{dHp*FL_yZXk-=ZUECDp->#I}UYU~EAS6O@ z1DZJScMnrL0EiZ3c~YBk}KjV8;S9Jrd$&* z&g^szL+EtIYGn{9D@(8s7*T6tJQ{lB0o?dnSm;t>=)6p-B2Jd&L_5L^lu&z|#Ilzq z!=I8|*dEO@ws!gFFGUsMIE!A;&gc8zo2FRCAkaB=KGwaN|5tyAo##AC#+V~+dzCJ) z*qJ3HQ-eMC``>EiL2!rH5bf>b%0vG}Z^Xg7d${Pn8cvy9btRX*S3`W?!UcJ*r1YcH zB=W$dvLUXMM<&N;0sk3PTxL){{2_ChLCs}G{pgt=n9~HVR)CF|X_DdRQs*Od77^t) zu-3moKpI968e#+=0ct=&Gu$q}^I}0ksxxmm435?TF53+^AbVfv*$1isv0wo!E|)9% z?v_)v+(((i=HVhaCzPLtspZTk-|mZ+lAr-GLC*BDps`c2{%Jw1DJx#B&O|I$0FJRS z(zY0W)5PI4;xHc>hpBQFhhz9nz~Py4O&mV6@Eh-?@=g#ICSB03O(t(2KjhQd%MSq- zyZK?O*e-sMFr92)*a=L z=;?`oc_N@v5gMM%n#0eeBc(K084O?Q*KP6OdFhoywrb1^*J@9)`Aj|>0=fB)OG|8Tn#wO(txn)wD23oq#Y z#RwWgsU4;Z*+hdY2Tk>@@?P{SFPicj@JXeH>KpqAju%}StI04u zNp0O!-xOeCFIs~g*6N#7hsulAs+>l8IP1Nzj)8z+hZ|eP>@?Ct=7k|nd{oM8EfD>k zn=L1DOT#ULsi_f)wpE;7Bb`_o&<=D&Wl(ez7%vQ#iE@HoCHCHut;FFktkdWv7Nbe8 z1*m36wk2>hJ5txun5WUUYMBySBH)GI5xb>1xB9<81nYF*QwZ>o{U(KZn6TUNeON5R zR2Thvv>g6>eP5Q!nlPAu=bq*mpXNoYv=C#+GM_jP3CfbwY&PgGESL$}w@ zqGE;E&t7ynn1JAm$)0xd_%yN;R~=LTg>9j{yCIcO+s_k8Z>V1;t6 zVY}*&yVs28_F&bLgNzHHCp)1)ShUbi>cbvXJN;ntNr??-j)o;=7e)yeDlk*Pq#E~X zdET3~)9cAE+XRa=M`x*lZfYvAI0mR@%ei3?;7YO{gI92!7hH*6p#jCa)X`THDBDW9 z0k-ZD4eUdA7g3j<5+Mo}0nNY?0yMiDp~_ljSivgOH9@vHe zI1zk+psaylYFn~Szq}CR0Vu!LzUYl#V{Uc$BJllKdoqM!)I_{Hn5APmur2L{Lmb z#N_rL*fGtPYNjNaQSA@L2&+uKnT|r|H8e9F>^@-0RBD|@glZQ`g^DGeon;-=TZdzm;G zz9f9)UY42$Dy2n4TQRx*+MXaPU{oduweZoj0c}f`YM?nCVZ!9x8LJb8GV$_24pJm1 ziC3P_Esx2u>S46c-#$ID;e-`!l_(S(}?hglc@S0beUBE9cpf z6=;s41=6D!G_lC@B0b7K96Yk#yN<-9MSi8qfxP34&9j^P#V9c<|`OKpSZAT$5_^Yu@pHlQ6v$Jn;>}8oaH#R*oUIEh0Aj4uvilh zCI4b|HV1;+F@I|ap3F;4#m^pw<&WF}NLyGDY(WRrL^l<~&ICi05U4~4oqbEfA$<SVF+6y16|c;78CWk1S5Ul9k)y$0(UZn6~AGa(j^;GPR*H+ ziz9^;n8$q~K(W(!z%KsbvC}?3s;q~!@30+4*&3fFkCx?mBghs&ZIjC#>-6k?Zv8z3p+ zyOaS$yT)`(J}Iu1j0L{KPSK;Jz%?#vD|m3fv!B3Eti8+!UB+j zm&Qa?T&Y%By=nM-(j(*UF1co+alM)~bw&&vr!S52&)gm*Fhk1)Dy-n)HE~kyOYh;NQbcD(@$#-R*xY4Pi+-N=&pFX5rj86TLCn2|IAPlnWo0>* zptzX{;RO+5G~n8Xpx6}kP*evx$2&&uUPL@98fXvl0Ih2wrW4JF^mK;|yZ zIS6p&^sWELdhgP_;01dj6=y@w^mC`Y-Z+sPj~>yuo_GRo50uC=KKv8tL3omHctV#N zW#0Zv;j44%uRiqN@Z{X^L^!GKlv-KjktL0zp74y_ucZLlJ$$tMR5%f)6&C7ctej7N zjG`BF;V_beFzagbFGqB;sM)7$N{YHip-+=GQXwHqEU8UytHaajI9cqq68|yh$9IfX z&Up}^C~V?~kadv6Sl{Mwjc$hcXT$nN2{BdtvynjLH>&6r=< zBa#==>D?+T zH?2L}42K>K{}{+F$nLdFB!XhC%7eoTf|k-932}>@)t7VXVF?Anm>?n~jcBjb{Jeaz zpq*pjR4F|#>ML)=(KDF@M6B*TnU8{t9a1;dBZ^EGT18_ZK68XgYVm=C`wD#**c zy!%Bg;Fo|1C^mzgT?7Kka%8}69v2%P|9h%W%F*QcNKBtE+9cdA@BM{561_I7vb?8p zyTsu)joV_iyt8r3jNZ|>B|Xo2*%Idq9R$tKy-{sYJ`5sRtlGR~#sm%!~LMTr` zR^I+~#8^}9ebe6y=QeMdR)78rwCS(DYv!x1zxhovKxxZMQhxWgzxm6rp)fq!Qu!?* zcjvvS%TTk*1h_O2I8HIr^JNGWNUnh5WcgG*v^wglu}N1Cc0Zb`VjXb>Ut={ z@`SLnL$nHR9$~4SYNJC&iwApw!jfI}3`ph9qyBEx@|2DES`Hw~^fObCj`v_` z+T8ITEluHQ7uE@r!}>yd5cXGDIwqcXW$8eP4p}jaq# zp7-Z)f&^7vGaEeb!P`#Q7HgKBrW`&Z{!FiXeFp(3a>+^8c@%@h)N{1u3&6$i7bfzC zICnb)IN@VMj2Lcod@KeChijIZ3A>0flaGDGq(4?s$pik1qxdutNVCN2LCB*{iS{BHjFl^~ z&Hi2)w}l>j#}e{+k-fugOtw8{Qyw>UeS{iql@hN9x5*|QP+N4)g3g|Fqwv_ro ziX>YGB}B3Cb;~Xo!L6MTJgjd?8zR++FOcB%Bk3Gs!9Uk}<1zM{MtKMX>`?aa&RQFm z4<*IakV(!FiIPbq>mN^OIt}VWsLd3#EVNHR%!y`F6=B;ceG|Du=KM!Ra#+NU0bo<} z!0Zd96iJ5oD)UB9Dq*Jl4NX!skVv{+q-#aCr~fwatw9*;Yx{G9)GfO&EF>YMXqmrG zqeK{9^ym^-%J%XQfaHWD3+02>K+As;Ei?qzl=%3az_nAhukrB9_aF?n8G-R8*Eww+ z%+#kw!z?&$OFOs}+5)t&dJ>NhFhw`9L9UJoybeEMD`D`Qc+)(>S3VeBLd)Yi3MN?Scm}EfU~#9XPE|Z$8yVQWb&6DvC~I@Qj`d* zy?m+qWC$qd&39qYq)a%&Vn=K`+Xj+J>|k2ojivvYXZ}a*`KO-@ z>tP9)edUY)`>#V;@?vNC^V+0SK6MKv-Z|p?^>1VtT0~UsN)gwOK9NS;U$Mia8+h%Y z3&0;_P(jTD9zLx5t{{eOh1ygIx*TGMiIgtN4?UQGI~Z^R?vP@Zt^4IOw;aBj>2cAE z`O%q#<-d4HMKK+zXg;85O31>_!z>627EEn~EbELUU4di(GG^y0Dr1V%c81FgE?mA! z*w$n1+JHMRz9%u6rH00k5-%8*yYPTDqmhB1iU|xm+4)ZF#S2InfG|g808{EuFCv2L ziD$}t>(M-geh~U98)`-y{)AY(v>!qQl~b9VqP+@DeA)}I<0oTRrD4g z)M&p@e*DB?=0+Gi+$$=UjL2Q&=m0@Am4_f@d>|`A!|+?OF(Xn#QWE>Xq;+*nG;_0Y z(d6(N=@c%8+(yyzuFLUo8GV$!46esRcrq$OC&EO8fvGfssZ<6HH9q4fqAy&`A)WMe zFj4l-#EK_ZN>nI000)5ft^c!6|7#bXQ}ewhFAOnFVY77o9G^}S)8winB88%@3WQ}qa!GO=kFR~kRf`x%JaSaSi;z`<6LgM* ztrY~_{V#{h_0|zNnQ5wqMtQK|kC?0c5ihUY5eGF$ibrq6a4KMBmzd*y=48_}Pr<1w58<|5pPDWB%5uoXR=4O`JOAT}MgqKDuc zqn$V-`oK=X!6ITvtYe~al*_1(#2T-{#@s$4YM}gmELl~dL4AcV@S^Y(dZNau4_X*0 zJ;1L1N(tkj(zazAoi-|`g?L?p#^t2*5e%e$~zqDP>01JE!5LV zvB`dMIcBHBVzie2_S4yzO4RVlhJ)r*LI~jFTZA4xuQ`k}Sa`CTO>Iu`g2Srd!wWl; zxnwm!cX=*@J-mWL-k?45$1jSEX^Ij2M2G=3T*jc?#|~FS2NnhYi*wXbV`oAkCbcxM zc(g6^M1NvbB5f#Ze2$s@uw_fAy_*}KN`rFW&nDpyBD zb;=Gqui%Js;H~Ju$BJZi)*Y}#(46%AzyA2kvssuZBy4A<$CAO;#{5HIHZu2%j0#8= zK;aNWj9I<8yLvoF2|=!5CTfm`@QaCYZ+;8oUc+mn9R!oAO6;_g%j%ldKC>zT21QXtg`;otDF?@{7r}{SkJV@~(!gpj7|conyOsBJ zbat7J&V~4!;c0B#7BEHe0~Ra?7Rd~PRvJoj^c(vSgSIGZ<)oHI9s1tdi>WABGTup; z;WXt;wxXOOx6hMu&Oh74HYg{e3bA&K>3dchfN`O610yI%@h&~n&_i8q6qF1rYGPhp^ri9_URpkr z&Md)D20e&Um_^8Nk6o;q`12snJJ&?GXb2P_dTK`%F0!Ni>cg0JT0Hsemn|$VI$UH2 z?&n3q+b0yP0mJRl-h~G3Me&kcKz&Jn#G%~^3rC3%HOg;>7Ck7X@WJHTJ<_Gg_5xwz zV6pktLjKwDS&-uLWTrQ(<@w~-`$0CD1W`z~ycedAI(D)x+~?P)PAK=@J=yA*Gttq{ zxp_i#@ex#k;{3v0a$o75A|$#Ta($Ms4}~j?hqgd4u%4fPBo&kJj8GJG&>?zc0o25t z#rHdT?hL`pMt_5BEQA@v6(D&$-~^Qw7UY zfA#kN)KMqA)N5YcoXKrb@8(R>DO)LN%D=y*2Qm`ASAa34a(HPap*jBYZ1}0{I6=-{ z1lcHftiZ$~eye{aVn6epU+Ep@-P1%kfXln(_UvKU+p&}#Q^gGDBL*}Zz-iSck{{jM*6AurJBy}WpWDo`yF9^RtDm#OkIv~n_wr;1KMR*9kRrVU z$q?o*PdYd=@C2=#xHP|CtN8PTf88at7OzhxtP&7C1xWZGkYJbA_-i6EU9KSlZna66 zL}EdrVlb0x*pgbwS=-|(-AOey#hx9CP=5W6&oE)qMIzG7EPi4|S(y`r(qfnJ&Qm^N z(i%%%5A}@Tk*oKhh_b8^gg|TNh+U^8yF&I{o_MK|$cBtRn4O7_1zGol`Cm{jVy}j7 zkzJS{yfnW9i=fsV0aTLk&d;c(Mr;SxOWdQtBjidF%Jg>jq*uK|Iu()9OcP;Ac6t^q zov7r)lG`$)JgjiD7hRG)$ZuU`*i^8CHxH6|mf2jwoqxW+5`kbN<)ugtFA8QD9asdZ zW@v+A@bVN>3VH1~!)#FOIFO9W;Zgk-PW%pl_hCoc=Uttwb7&n0Sgk*uzlKZv7|G#1 z5DS+Y|~WNai;BdU2Hg=tDLWLT})zq0;x7YT|y>PPsu_g0c+ zkRE~iw;mxp<|^g?bMYItS)4=1a2{cc6S>Ri2uuHvdVy?)JBahGq9m?P22Bz6t}BBF zr%fYJUTUB%x-z2$bFQb4z<3#!^5vqfy<&UEZFH#OMWS15CxB+5J)m9#Kjns?2b@@g zjl>5=vk3VP8V04XD~=MOpvv#o&|^W#>D0wpeX6}G6{}NSdmDveRWa)$sEZ%NYG3Xa z=}FkNoH)Zn*lb4g7h9-QeIUQ6V#q29pznXPH4*Te`S~^zFVdzCul{tThR`wTG327q zhs(}hr8;CU7X`fl4U4^V^xwE>xl6BwcL{v&iH45IL_AL-!OU$!YtF=afaebAdk1eY zi!^B1nba$>SmHS0vAFYk{f~88*gRumj7lUCZUGnVHWZAELiC22XOcL?B9HV`3f9AKS{1!3Ln?MN76v{3{c+tC?0^Q*5=X zv7@zCqSbt*L?@LJ?LN&Y(Rv0dOe@iP2+O7W6(jmDG~gQ-WYyeyz|L*S4AqEw#sdy| zrUy*JOzT9^1i+AOBtssHe@FB)V zh0AL}dP|8IsICsyS4;I(QC~S$lZg^-@fY-^ZcIz&VvzyFV8Wl^UHqJ3+GX#;%Bsj? zNXmMMJTA3aJMI58zb%BV5nHS@5n1&Qr5+NFu;{!F)If3up*OShf-RTm|Jsn-zyoOH zixW)+H)F1?XUP{QCT_}XPfpMnV(N$NI$;vEOdoZpxNlLYiej^_YAQL}mKDDdWTZGZ*PMTuNcGCaILUYO24#Dd1H9UgwSNd!TWyq>$ppxPER{Qy2=Q1tuV;{IOZ_aT? z=FK5XUt0*Z8W*7&ixRf@hq^!j`wKRCjJ8Y#$mGhrIlu|PqLY=1*~aC16b{}RFY11} zI^N5hJI@vaZ7`sRyD{3G13(RfC*gV$X7d>M;u zeTa2O<>Z}X9F)MbNaJAER9z^U+1gZfXcuwgB+iaC)YvTe2(TA~{QmA7074oy)-dNB zc~qsJJCIydX7c^W!tm+4(ot&a756X8%~X@(g_ot{G22|&?@DRKm3f;Zd5l^kLPbUc zI(`;V(}}8t&}lPJKAMl@5TGREvmHt_-l;%~owDD79y_bBu;T3MidY$?)G<`#{PSVz zeNPgKy(dXu4vL{m66mnkp5PXpsM=HdS~WRGMPGcUUE|}v+La9-Tc#M_BqLHykOL%K z3Cn&`#go6ZNfkn?s?SVcjCR|qif?UJ1;*X2s}TJPU~r7XX4m2o=)oHKT)_kt@;_V+ zj%ilHTo}^=GI}~sC~4q46WKaE-U&c7RbyGSgDD%xg0Q$ZTHw+UUFCe*&E8sGak#wi zqn2oiN)Vvk}%iwQI7GHB6!q!DXQnNY1|(&*6^r>LMFjx?zn zg#rW_!QRrRpnA4gB_oh;MDMUf^ADT+w55j)t&la{^FM|%^&d+aCN+0cZ}b`6?E@n3 zwzmBUK0v?O4-37+Im$IIR9`D_zFRm`g`?ZB()&4D?p{H;SUdtap-WO4MV>?+Sh0~l z&&^~)oFmBtOthJpM|aBRi9TiO%pd~Q<$0vebJxYMM4e~KF~XWUH#}dAcN>PCxrVYu zG$;bVE(L{3L&UsUKJdLz7eeJvrV2RN3(yI0-4Xna2?!N-sm<*nNb36;yI|s=s*P}X z9vLA~j0^`T(<~gOGD6OjYr>%+%a80uiV}U1VI)AB`wI?Yw1W>U^=vjXsYrU#4i6DF znW@4~=Ye)Q%k~qG&-`}Uo&>n)6LA2Lh@m5(qv-Ly=o0iL2%_3twpnmA@&x6HdX4g4 zX0D@L4OAI(!eOS0IpGLF6PH$U9{4o{bi@N|D%W}opUC)0my0K2TE|Jope$v;*<&$`P+H$>iD*Eiy`3 zW@IY^ND`P3njvjGjZ#A$EX`5y;^c%w$}+3HmUKf`tzc=J zlMHVnr55$N88t#xB-ZtM)i9jfK|Qi@REM*ifL=R8L$E`&%R$I{57oFAIjG%l(Wm}z zq)NF8PKqvDqJ}lCj*=*eBuG%8m}qvH*H^9js;w*ghRxB$Q0NPV)3u4(g@3`NsFZh( zR%2w7_XT@O)n?(OB_7S}OV{89mh|7hC_9q>hD|k{eMv^mw1IQy;9BX!JtNK98#B^^W-*)8zSWGhO3z66eljBh8Z%P2{cJNr?Hgu9 z(wb+)Vy01TG9z*=v(V#=U}V+M1B0)a%9RUUH_3voR)Kak)DWm}TJ$175Wz-codCH3 z1`D{|fEWSeKMi828^TEiZm4}KulL)~zK}^!o9$SKj0cYIdu{ zE&rzK^dHT1nn6s+$D?k%6&epq?6Wl9p>cQo>uy}{XB$^m*Ep5apwzM35tP#}jG3Et zH#^hr(zoa8ZWdIajj&2hDdGe}K^)K0Kw(q-NH5H=q-Jddhf>v+$tH7=Y@_~)&1_k} zrBAX~%MH2vmdF*$gY^fE?MA^8*dky-UdeNv?{;mNj-aZKsg1_LSJL@q@p<)?LF zhKF1-%|POBZ`JpDBhLWC(OxfwX3!=_xKo`hi=cOogsAO>Oe-NY8mBaTw!oB2B+HOg zMZzlFCONaKdivFMl>$SX%*XQ2y99A$ipk+xd${NZ(bfxorIWnbD{dXxrYW<`D1 z%&^Xg)aaZRjSO_4xv@+nAc9t#w;_}ltiCLTvC$;@(_dq9>Hkt`vuhqI^v zg_YV$8yqu3vYIE<{K4F42tDSs7YL?pGWX_86Z?cQ=1D0``~SAnu-gRniWE3%LIR1AcU?uM4YRqw(0(`SFAEDZFMAK!~IckDv=O{HW+jZ)XIQJbn=YEI9P#< zACDA@oq$C^q(nokYJwHN%i)wRCuYw|9V0HH7W7{X2!mj4hQGX8c!>@4Dl6Txpy%SG zRPh)TQ#JeMUgmrFB&s7_x2ljJ>Q0}5p_ov%Y=P60h{Op(pUI*I z{hYV_sdn=y)LM*SaUEP6=UQBZRE<$ema@yngoJlN^-;$eK7CeUiF`ibbEt1u; zqif^2%M&y;LS(c^>dmgH5>sHYS!`v-q0;t6aRH^-5Hzo(po7mcuyC`b-A zdP#NzKkdsCnVdKj?1ERO>;!^u%k`6&Cr^VW@XGT4eRuTr{>$Iv$*`1r16BE*NWl!2 zoH4Pi(qKJ)7iHx|ciE&WN6r{6wQ|4PRInUlRh#FBHuoY6vc?So2*E%vIjh&yT4!Vv z(K*yJoeP1@aqX2_pNIxXzldQi#FazbBhhem1y_XYu0mE7>8=}s(tE3~OwZz``|>1* zEcA}Tn|p6PGUga@?YHZ#m7SmAk?d;N zAuFvMn|c)zOc+=%>8n{T>j2o%3h2Rp>}LvcMKz2eXhZ%Ouk0Kxfw4>-dFYY^$;BZRdk5><|~AB zg>}NNQ8ej{Lhf)4p~QSz^(t7z^H2I7F;k)7)Qqxwx9rRKp9OpeJO`zar2Si4ftl1X zU*(-Pj~95|DvDu;h~t$-pF}Vwp~>Tn`PC!Q2NEIrVn|aCUR6o-x5yoLLCF(nB+f z>E^_jniQ8oZwBIK)O3s+zsCSB9P!3=n2Q4KUh>4h&uU{W7zpy+45D3<-K@(uNNq!k z0C6RwG5`B51e+Z_LXuk^u>NGN9}_%D$wWM=7%^2Ujl{?BpaTddsV>NNj#h@=F0DkF z3$;EdtF8Uv5#$Il(F8~(_W5%X_k+Cdx86Wubs~0V)+k6J_OL^j(G={E2@e2kkn1kU!pgo2>%T6wVyIGNxU;V!lGRe&{f_6Ytl8J-*!cc=1M5+@owqUDWOtn1QNOTLM+lFk>n>dWs z$=wo}g|Y6n@^`A&@^N8CiIx$Ept!p(WhW>>CVat{%D;|!Xdo>EB*}AvOPCC>8pNek zQlKaNpO-cQnNc~*VJzn$_?}z(h5>niZcx5o`zhft718_B| zmmpn{`oI108;o+oT4)d7E21RWSU#=TKFLptWJ5qOXA|Ix&doqK!1kV(Ane<(CsEYE zOoXsVI?MtIfXR@B@JMCjgerc-i&oSCpU8Y=JI=B zow~i2tjF=p*2v(pWxG!KVOCyY6sMQz@NFF0tMu@RDl4duSLF%ZWx-2$QGHjwomgCb zF1W(~U`##@g8R#q_aI;FBq@L9M3o?{^@rh$#9y@Cv3IkFyICc9ULA zRafuKTeq{oo6Juv9+?%&bRPd6Sv7=t%Fv{IZpo zDBCRfsf8?isoSJedx8O&E{YfGAoj9Y0eN`EBW;SJiZE&d;MJPyD_$#y3?dI*9206h zz}9S@++|idDA2VNid>aBb<0X|jCe^MNUm5DWwE3M8RwOCTbEs_5Q^YDM*On6{CZ|r z&O>Qw>K%Mas)GX_V%H=v3H~r}4vSdDJe&=GPRzMjpfR#VNC4^6dpR#F?Gg+3^)=+&bTLy5n)lp#WJZhnLwzx7A>JIj2N zk2=rx5uRPTSG81i4lQ>>JE6w*@Bo)>cVq2 zT^FwewMgTY_CYzmi&p>9d`A_hwD~Ur0B5GO_9bDNRm*!$gLrwm6sXoKm_Rxp!3Hql)*>mI0;UdNuVM5sH94 z3`eKj;PyaU>8d#pfmBGhX553@yU0SReYxy5hVcUSd1>pM|G?=zuBuydB1Wtth+BiB z<#??>W;-`VL&9U`i{UDkJEexD6&!OPhcy&CMtygySM0o6xDZs17R62Uu~Qk<3nkSV&Pi)B#R;xGZ*`!r=|d6-C~G9hL$=1ODnYnxn`R4{sS0WG3o*y%m$naTcA|~ zH|DJOR&7Yv)sQP~&4mqfMJJgby%l3cbL9$Am@B@F00D(|w;fORSSg_t^Oyz7dRKEH*}MaeY}A_fx=&f^7<5?qNYrs52O7!BjLH>j zfUQ_z5yOZAJ;a)Ef@7 zu;FmIIGht<>{d)K049Mft4cfw<2@Kc1jqV%wkp+1QWMchM?oQ0@>o0iZJ?+KUhpi@ zcr`rRxJ{?x@aC%F$^5RhNTa4x3Lz#tbn8fqW7*nPWE$R1fYd3edRU2B_BCay`%9zOS z-F7?M{oKly_2f;=lef1)t4Up}M{mSS!kuJxDPqJDwYAGl^eK~43!$k zof}%WtU&eiQ)A#q2F9X)VkJFx3(0ja&2OR1Z$NHL7*q<~WOzv+S8S@E zkgLs^!X?Qdlr6SXHj=@+)9n=A6)L`WTZJJl-U`SZ?)91|AqH#gkxll5*q%w!6L37cugH(F=|iS+Yz4xIBEP{BEc$+t|A;A_dMCnGBp1Wr z*>eZFvDfO@xc8&rHEud7!;%Yp%BT>5Q7nl{gFCuLH@ojvVx>%kVUoPtooFd1t33;>nViSA23O=;&NNq~rNYI+hm9J~eG?T|5Zw<=!wg~H^x4O4c=ZoT8fWg{MDm_JQ6;z-%IXxRz~&aviJsX zH0HPws9n7wu+24dmVJ0MFV?RmS)ApVHrR4;wyyA?T$=X)I{Pz$(vFZQ3_OQP#w20D zt+l+Oo|Edm=$q!_yVe9O6rJNIHIeK(KgPE5J?iG9Zk3#SRjKJ6MoSmlCb`hbh(v z3KV40vFrJs<&d#pRuW8GUT0oa)Q}IK;WQda3oD6;y810-r(1$A z7T009nhNpFZW~Vx`PR6rW!8_2k}ow=L_|tg;*d5#!a{|CX@rUwK^iXF_Z<@((diX!iLw+~lkyrA;`yMP^!iU^om%x|QBhi7 zLorNcQn5r2#}oqZDSc$dKoIH6L}65Z5{Cc$taXww_^3`*L$V+RcSX8180W-ZS#=4b z0W=MnHr0aeuB5jct`gj1IXi9XeCPG7YB2ej7K3rlHb#m zH~Wk!+>PWU%0@cXl!3VV6-7$}{vwf*xJb(!88_)K^1?s{4Y~c5R+s?Mwm1Qxi$n4- zZ6HJ-xyfa5YWUrdccz0mq?xiSeL?6blZz}o;41W*%jl~>mZDjCISS!6lEX!1hV%{K zb4_kNb&|pxJ}$Dp*iO95`0W|6Ch;>IHk$|-bhZFMFLS_-1zZ09hjBTmD zv{lJp`0JqR!U*hd(2}kV1G3fi5E+>jW&?{UUa^;X-sG3C&4Aj%tOsRH%RcXa{Jit( zHChLU`H9(}5ohW-jPVJ!7Pj^!Of*rWRrr_C0EB@Ei1@fEFCkIMpb^p=AHR8PHfFhi zYjTwIKxr%&7x9DT;uXS4BRX8~phZnEdU%@_T12#0XpF%o45f_7r)Lr}Qa~#E=ESVd zB7(etpVLJUvguuAlPmAYaMfk8h5ch?)ogx~xmxt0`WvbhZ&9E33j&*t9lYi+ReH|I zS&oy@$6d=Fm?sfM1>%GWoK_Evkuurl&EoXgFzSfbrU#h8sCQsQp6Ur?UL-(ViOj~U zx>SQ0Z>me2E!8Df{OaKOrmJ>Ps<2XbbqS!Hgm2*AT_2Zf$H#h5W?Q%Fr&XW7z7eYucte;fn;;b&?VWM z0T(cG_zn+|XYP|ErN$_PP`!varzxWcT zzK|(3&*4h6dj)f>eMN;ZT&8H`bP+{6?g89b$N#ZZdvS?kNy4_H?LiFsit$;m1_xDk z4Er-3M;IiKl4k?3wH&RLC_FlV9)XIU_UHpg{^;tOJ)p<=N@03xynsG#*XSap=6Oq^ zVd4&?%CxW9bE;T4j;gNHr@*_oC1+HlR~Xfpx_%Oyoro4R~Huf4)L?=mFbF_xnTqykx>`_{9>{57H1|#u4zM|Aa5e6nt>YzJcf_Zc$U1f95^H%)?Tyh*aLL)n8TDnCoj&sN_K8l z4~QX=ja^gC9QbSin@COh7E)6)2R?LJeM?66%y=C`qoG_zM@#NP_>i8_i#{gI5arZp zE`#^-bH!?T{~cdN!#9UMw8|8*NWqX*j-~~%S?Dj*|0+ZjCTd}HL`VJrZ8&+yXdT~FocQS{->Ggaz~XRR{0g=hNP;!kQRo+{xr z>O|d3eetYS2DkA{l^K6hL=gA#s21fE;PO&mk=4l)E5Iq}PN>8K5iuZeh^1#i?Pgi+ ziSZ@v$TqHub?Xn-rX=rL1e5Z6#OB=;AVo1$N{@nw+8I3lRo8Ce!hZ!Y$F zVsi|wo~+zy|N5(DX^~MRO-4bOKiwjtlD?O(2$@%W&yu4~Kh*v@M%ak9qz^X8^0Z)0 zhiydoI%`b@t$m_oZj0{oji^UKG-qh2XY>bhIu^da^6DmJ;Qrs0E9* z1q&WT!Ge1Pi*Rg9BSr^?0n9WeSc2=F_VYm*QHP;`&snvdI@eR24TqI<1Ixxq$Aj1j z?&ar0Y-&UNntr}+E;h{zYuejsjBZtazULOdbY2|9T@su`%!!|GGQPV1l-#_3>Y6)A z(W-5_JX<#iU&SL~Z@JzaIvI|!9aUi2+=VAW4NKZmvTJ)~Q|G|~efUHHK+jRVcz3FF zxxM~}pi~i+(DY8D>9JD;ER-P<5E;W6D?BR1vE^E}(0{QbaSGqV9K^8ddpJi9`>5|> zE8<7-J~EvApvg^RUEo_X#fW@K+$a|_tG*LQ%EdP82W}W5S3hvime=ZgMvx;iRrg|b zqz%{TTVS|`segRrWRV?6t`Mn&@*afM^8;^g>sN7nND5lju=qSaMM&W3^32og{q*Yi z6mywtk{4Uwy1JV*y_p0MVG(t_4grDJJceqC%tO>NJZ%!x>c2a! zc7xLQmSk;NG%v*yr=A3D(*lg_(P4xlEGm<*uc`74A`J|<6K2R9n`;~GUigv>0s@zG z95pc3Vgm+ROc195LS+1s{Se%|GQ9x9#z!0e4k7d{pfh^_aViSA62=Z@UeuibKSfN<5ngQi2#ybCESK+$Q*2G)GtM9l!73XeahRS9-?;n*jF6_Kuw|C_sL2r zNUpSw-GZ?_#JJU!aHPOxfL?uhtV)e`$hf74!LTL2lQD+Ib*1T}3k;RMqH6CNb!!m< zLq)^Znbo$=E#vv;r!1X{5n}7s{HF2z11z2B!a1&*d3?FEIeY=(#Q3N)i&R$mPZZkU z*hf+uJ!NyPLi@977ncpOQ~nlo8m&GI@NplTue@T>F*V>uv!RD*>msK{FF_Y@!v;YT zb)*^gk6Ns{+vToR<)m~TS+M{tIcKvf`Rg2zo*g?ds1jl?jK{ze@`8G53O=PUX9MgH z`mckfh+0P)qhj3VAppCr0BqB_pjx%1jTnJO+FfXhh@>{g2iQ_xBD4r6f-`*yypwL#YyL$%KrV?kDqX_l}TZHJAWJ{XQ@0stMIVtR1AQD5F?fMm(pe^* z;oC9CYBgnS^C!N8HDb^c{;8MBL0jJRs<7#X z`Ypsu(w7Mbp-jdfed?%FyoJoa-jKsgd)`|1KFD^F4R2@j0Fy}z!0z+Ts}kDx=|a>& z*21OiPU3)R1{}SU0jNI31Mp%UT7tD;-3@2Mt5hjAId7z^pu&4L;WG-#?^m}F1Ex04 zEoEoT_Td?615s>Kt(yak{k=#8Y=@r0y4N1xTchn2PZE2$@!)Q#i~Z=Xj^_ zy?LVL6fi5n@U+YMH_CB|u;;j;RDwT3B0G7YoiWac8;xGa9v3P9Qw@zyeTAF0$U-e4 z)+i;`C}pe)N#VE~Vc+^XXxdSLP%0A50(F2;R=#bk7q@No;�Nxnfnc9K)7q$U#l; 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

k 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 z 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

F88Q*(CM~A z#a{W#o6E2MK~lb1%6RYacK&TCfgfFWxUu|~ZzJjbA|7g(gN>XFISo7Yrb07F_Ds_v zR3Z>1ci(7Eo5UHuwP9ux(<(4n{vFA{DKi|c;u!}*lmn=pY|NbW3T77%9^YpdiwxxH zaq@VLo}=zKQg$bi5|jiNTcGUlrt8EOIAjto$s z1>2Y%#>Re1pY6FCII7JwB(av|ARhJN?0|i}Pha=jR{~ZEFXb&NYPS0dMdh5jNvnrX z^(~!Jdn9x}W4q>h4-M#YG+!kQ+6L-;d0)bQB&!8K{@D(QqgI-VsQtpQNRYdJ!U(nD z`FxMV;oEbyTgEM2ec_1HURpL5%SVDG!8QQk;O9Ep0i-KlzzH`cn3gke0f_uM4N6<6 zU+}Nib+*0u^e018?NlW{_Nus2Zayr`99*SOfAR#lC3 zYUSGj-$b5Q*|myV=L5BJKTzx7tf@6E2Ft0H;t~~^l9Fu}g!5WCkK9A#wu|sy_F1!y zQ92iipe}Ev23EgL)CA-2Onuw1B1X8(t?6hPNg`kyBq`K1q3l$<8cBjlks`Hw-Y~Q@ zST-}nh~x<^GoA2}mrtVJC?9O0ZQ|pJ2StG5hR_z*HnVzco}I_X)`P>Xd=PB@I6f8+ z4k-gM+!C-lE4C5uEEl~%b?4obItH`-Avdidp3pb%?;)QtTLsUF^653H#ol*n1Wk#+v9~+dEyhg@J%sb2T&1%tobm1 z?K&yZ`L5r#G-ogArqJRoI>F^Vy>;+OR+%}6o+K~yBtvi1-5z38{Q zU-|2$Nl`(tM-UZHn4DQ-UMI|>Ffpy2VLtYWqRXdGYq-L+nC`M^sYYH1fr=1qy!ZW| zoq#7iiMnRjc`PLEV(CSZ7gMW`CE&s`-AKfJd_nR$B7Ws<2rQ zY>JjgnSpVg3ghnhltakk&MlZ7RKxwxYSyS#MTcEE|9HK}YVJbXzIzSh={ur6VNy5W zus^BsrlFfWLAZ7L$=&otUtRivc^=ckS9rH!1#D|@LC9#53+@09b|=L2&*$Y^jn*g^ z6RxD?tBf4Ch@*tyI|yVX-NZ8m+T~tFGf@#EDs1wV)-f09>Q?MFYc#4 z=pRtffVh>@Ung&6LHg~j>5zlpOXB0x@*fhySZs(Lst8y?QIP%*&^$I23+11GJ-cFl zQ2vz~nNBrhJ^luYR5ph_zu86LdH%80KOW~F+x){kbT0&|P^Ph0OyhFqDp`$)8}y|4 z&64B0ljA7>>Rph(5Ol#o%avDHsZDHR&}hiQaAV07uz$}GYpZyhbh7^lPvGN4oOh}= zyOW!6)o!C_ffQqQMlm36%<6Ckj9F^CFEeJTfzV!V%q}#I*@g8PvuoK6qd5)oW_f^Z z{MWf9%M`9@Sh6hE%bY6Al3lCQVh&5zI=;m_=KG@R+hQc&b+kXE1ctB-MF$Kqim&J@ zSh{jd0Kd7VSTH`J;-cjPLfwEx zRGtx%fS&h&MQVG~zko$^2gKN_tZ5S-V*?<(t({PoqH-sr&h;wV5gJ z^xJ81Z^#|Jiz-#IUim}o74R71=wzt)7#bW_pbNGJOAL#l6uN{Bj!{ZP5U4H<_fB^KL z>j#P}=B1HKeFHXrgX&cdIWLS{-F3;fr3va^FkyGj3J>^Qe;|PRZQ~F8&iGjUu0Ie! z{fpxdfDBD&_+5V>fcmcS2PRhE@A?A)-Y3T&fLxky@Vov%fcG!e4*VuzG31$$P`l_|UjOayG;m_c;?O%T}OsV=+;z+63PxFx(XGzv@A3hcyqYgb( zv%xg%MAvxO*+TO{%rx));_hW1crkJMS^ZGLwI$xz7Xz6!{bHsR@1XuYRzGa=zllAh z4Uz3d!od>LUf%Av;i5*qB;Ojn%GDs{<{f?;<`Q^=-~O1Gtj|a6y|N>SY8Tt};U0hA zNA7;{eB;-?tMQ5;$~RO#v{GAv8{UQ>FJ(%9BvG#Yvh_Gi-W(+RdO7Qyvei%X$%g^n@+rY|JQ!u?>_dN z?|<$ZLvNS2@3>ZDR!lm0b@es88kBs-wIc%66|df98gB+T`>z4g@4f>cCZmZSI=u3P zBWbL-$H;_#_nYNXxiu}@Wb>2U`q)9O_L-xW;*jB55w+;yOi>FxkHwJ!Jb_xE>H1Ks zZK&0D)M7>Ev`lAWZ)^-v`=vUW!hK}qRl{ctg!A!Wh;Y|@YTi_-h8VU;5d^EEBc_ahkv&J2=(UBuk4Q z{^pCpz5Fv16mn1G5b!!RfA+9fDR=bjNOYujB5Yn=BL-~0O+9zhouioi5lGE>x zUoH<4N$s!R-sHa)i?VDJ#~7Gwn-Zlu@Rzv#ht57fOOZ^uBkeBq#J76wlp8W8yaLy8 zrisqHOqjvx*sSQtof*D?5B|+qmI8OM!yZ*x_t;`c>y~xX7}8nGx)m4_!GjWS(iIB( z&=~+SnzbFg7+tc6BN>k~5c+@lq`S!Mh%{0}%u!uYH$)QjB@tPjR4&2%i*D!Ra? zY<{$0sbSY+Tpb+Kr&>Azl-N+D{`c!MQ1p&{KftfYjyV6{n&SUlnqu%Cn<$B%WcPRl zKKuIr@$Ig=9$V_(LkTR~dXTgNEr>`S~>q zc_uK@5T3h}-Dn09+e-vQIOi0U&l#SZbLejspA>w@o2$6;&1f@jplybk_%{-M_u?5w zg*q2&t#~B?`bS6SJ}rNtyN}IWpKq<{KqjDSh=S2@Aa_=FAQRBnbRcV4-GSVx9LUP( zWBOAa$eqWE1No%D^2j-mPaf?T=Nui)oxl#nrT$DT*SJ}Mp4KlmRVy3J?7U#1I3%uG z;7!#6Z>knJ*8=aBjzrLf?Ghav5wVYQDO{49T06WT)suu&@=ibW&u;&Jj|#Z=%G*;N z0kyIJ&J{xN@Gd7s8iMdFo|Df0cMRVD8ZmfF4|I<$-TkrG{>JM%N72v}P%@d?)>3H+ z?1&_$wke8GI=%(s{dHS`n=$B4Iq3UHsGvr2g*D(T(VG!*_R0yO0yVg82nifoNG1n~ znSZL>i&oE*AlN1H;L0@yVk>F7@?>p|F`gdbsgxuNp)_4uq-Hzs(-7mgRb&0sNWn>$ z@p|~JluQlCTwHWs`DJi%Wz+o-t#OsC)pT(|JIck4eu#9sA7Ygr$kdY`f_^6b5Z$I9 zVwE1q=aY*obw30E-678qeYTn|u2ni<^UqcxIJt;|!4pAxJyGx40~Yf!oM4k#sIhx* zq8b%^uz;}tS$tIG><_XYdlT{n7zkIo@e1ZCvVaEH9I_U(YC&pr{7noVQ-8us$TJfx ze~8)O;45dZEB9Q#Hvu^G_dvJ0px8QI@SkumgeHW#@+3d?0v=IS8C9(JAtvy*yrk|q zRnHC4`ITN@&e{ddMkk*1-)C7WLi7+*TA@0R8+&v_mnYUR`048Z!hDYmAF{q3(|0;z zS%XW|0Q|MuC>c+&9$@}nVSb2XMlCSHP&J~-IOa$~A&&V{H}=mS`B}otoC^7NiFpjp zD2^Ft+anamT;rj68(NbgqoWSws)b>oPv--qyVNM8)1cLHA8OsDd2h$*(;Qu3@=n7u zIl72|G)I>O=_q`;g%352j;>Mb(tMBJ&x?iTdkxL?;kekuZJ}N!Z0|*EPi&~G4an$a zCbk!KG^qh}LKxFspcbJ!npE|>Yv|k?$KF2v+cm@wTo znQ&`56RzXmZIRneCXA_|IQqzh>0z2Pc$FRqkcM5-#cHnLc9WgXjLU?X#&E^`RsEsdxXZ+t;ai9ZD4%C^FNzqvr ze8LJpLL8`G4&y+}GbzZivwakXd=+zs5j@k@v5BbT9H{PcIdZ0v1F1+b)y|y*wd87t z(BQ=ocsp{S7OwUY$q@U*fn35ydCM@^2NEMffQFPIu{4NQ&DTHwp;8Y+RL zD2RAQdO&lGoAplV1wg@72iFVuxr$z}Wl}HLTya){?NJQw-?0Iuz*AAGbQ9Bw{g-s& z2MI58rC4D_p247ML+19ju-}=+2_kq28)3hq2;$QS+Lf0;vHy5T6LD*T*1#69J}>W1 zBh!|T^?eF_CJ~dfvF-B|pW>@;m8__O#$R@E_D(hUtXvP`_MgSZH&!5BgulA>0EOi> z&LSinP<~~@5T`=m4ELl6wknbg@kc#s;{Wt{ZyK1xXDAkpD$h-Es0VnZ>}r|72S&4p zz$uR^(-n&BbxI6irt&}1EC(ORhJ zY^F(_PU}sT(OR7sU82jX7jT9%`xkvh&0oMfVZ{8TqBy#Tmkr^^18F5bPuE{RQGdOM zuVIVd5W=$5wbYt~!2P#w%vjg3htKOW81h*@aT4d83*eI@Ez3qm6~qYXv>qb|Kt(eu>@<{s zD=0>yQL`968^b&^$gDOQpv_6KeXm*6qS1;r8`gx7%hyEEaT#9sIt3}C48Mi8uBv|*a4tAh))B6I{zs&=770u|?wy?&e1$}Fh`5nu=AM#1SvGY5Ai zlx!}~KeX_?Sq|A)<4@Yp`~9{x>hf>apQ#_1>*Jy1QlAnZ{ORyN3FnLwqZzjPP2cyT zr{Dk3bN2o0rRJJpI^_eWnS`wDrvO6(%7V4$JQLKU!Y5t+;!R8uS8Cmg%{&M8^MZi;}8Q&?;S*; zHQb2k?VO3o+IR%1Mg38gMcjtOn5$x;i3fJ8Y_w2xeP`#`i6OkX{3A<%m4ZhL0-&`e zbb?6xgJt(xKlwtd>FY$IUA3B8Cqpzl3qu%O{=6+FX^K@N%Mi6?Y2*)Inm;$J{@d>t zj-Z*0O-t`!OUr-E2nWZ;e(7`uf_rgY!zxVj~W*gP30ek*bNMHZHC#49; z3nLFeW84FRQm2tU=I#mnYcLLHDfvF1uy_dMWV`_i5qE$$Abix0vMqkLuEN0#KKB5| zJK`|kZ0mDJbC`ryu4_DmY%Cjx_CstO#@rZ3dH%9-m?{IH2fL~v-OG>!^a`y8Pl4w- zi(qGEf^nLb%A~1kEygKdk7nIuoJcKaoIwd}GR_(N2;4Tt2}^h%^bfEBR#hl5*_{AT zGVrV_?TqtNCTk^kvjm?1M-L{$8CXd9?ho;WTRW~IO!b!Ix6Br4DCUogmAr$SawR0| zBv(pUH_9RM;$KtlxCDf)nDVnzCd!YuG9vMN(zfj!sFY2s!F&AwK-6PuQt`1qBrRDV-`e(T?b&>XfmEQ|;E&hcGvTs!dL_dJo7F9ke>_ zvrNi_-{Q&v5@3LE*D}>tg9He47Lc%~)&U6?^$~#t)P~t81G5j*ZMJVhM#k?y)A;_= zo&JB$dcg>FQ`9RS3=YA$Q9kCh&92gz5`pQiBoof)y6EkzS>j3;MQ)Z#$`x47QhV{UUdz zH;@sZv316iNDy_qW&jYq4wR$47!p- zORqp{%U$>;4_>ZR!J-|0?j!*;u|EgyzJoa#eBONrc6pH22`!|jFwGGtFCC12XP+s+ z(&#M~Jisg38bT)Hf0yxB1sX#u#9bAsfOnDAbJMpyiVubZ>iaGW43J?|)w>F~_>S4(h6LrRqHo2N;}m=cR({1c)W!9Ga@_>W+C2{1%0<=Zp(#;Wo3 zDSyUM8<>VADGDWm>0K&)enXm`5*&cUXNA4aEK-1~^z)fHc8!x!4{0*8IO zS}Glb5U<5G(qX&dnm#BhL5PJAL=igdKYi#Ue}D5=o_uuarhEUt-+%vQO0fVNK%P;y zH|glxE|rx4Mj|e-15V7xBA#QwQj?wLWc6X4O8Jw5l6S_;LD8KhB1xA7@jA z!=`+1YWi`q0v1J*F#VZBhQ3#MHxfzPGFjM`(M}AtqBE*_1iwvK3#5oGOJF77!|p`2 zti%%KOVvVIc1{Kkh~@TK_NLzk?=PyIqUCg`iq|_u2-#)67VQ6p<$Qslx7w%LowP`&^M%<8rp6a$PuYg{|4-iAN85Fk_5SN+zn;C% z$xd?8p7sQ~_WlJ-vDNr9mI_g_&ZupGs{JVnj=>-N;T@ynoT^Q%mElO6Q!J(O+N-Fg z_DTe_sEHOtfeT7dEbrGUIIIFv5VdH*f)uJ2`}=&qbFRJDJ~<~nZBiXxlQwJZ^)lC- z&wSpWXFju5L4&`3Zg*bX(T4R3v_je$E6E-LGO? z6JSMXGxIfA6EwleOqn3t>#bsIWv@?Ls~3Z(_s=a0YtSCJw_0TZJw3meJKD#TsH8NS z1{mB#Zbt@3zVqtccR!Sn?fKOQA9&>Tzw)J2#-<9Kxb~woRjFqxbyD8?QLAcHV5)Ay zSB?xZi4^_Zo9&{jq4R5+{6Wm2^Wc=+eb<-%I45gvY4wfGBZ5c4B5eJ*{<=E|N}cx; z$JEAK9_$<;S5hvvzJBOtR&pYtn33$U2PIo@oS<(5k7e`x}o~z0Qp!D(2 zUMF1Qso(AW2oK?^S>cpt=2W1CmgmY3vmnKfd?C{#Z|kj;Ur;N9;vAP3k_x<6}P?z7;%c$(kWl{(OeZ`WOReec`-|HsMs#Y+U)l@ZI2Z%tneSr9%nK7 z(&qqp=kU@a{MiCn5O#y_Dz<(X{Yfr6q@pGnuq}V~Iz9-Q^R2gLtYa&miF$?31g!GI z^1lF%_81sa{V=iVfOKj~E0q9r8U6=90aO&9+li-!hz#2X03x1ZLkl|9Umofig{*gbYx}&A4Bp%l5oXrT=SOYffV%@S zX^k61LHja-TGGN><%xgKw6sE|f$})Gx#H((0k4AG!?LCjCrrYMa6skQDM#Cl{bRQ>KG29tZ)O# zt%=MG;3zA#y|T zJ)2?^sz#9yv)o?>IX)TJ*N;?wD@t3Ah%I6%Av(TKRPs?jR*j1aWqig@~+moLSiDO+Gq^92RD}t#7iZCq_XOw zO(D0~Ig~1B0c@J z{-_^IPyI0%OrmvV)LQv_;HQy^)i>6DOl~3h!cILhI)AE>W%?L_3brYbA20ZqFegz& zW_i^@W{3z+ycSkqFsjT2XW}BGVB4o9Puw zVSta{WY(Lw(9DRNC6yQW`M2ySF0)C5mzmg6n94l|W;>Eu3|-r}tD#o(LZ!4q_pIZ_ z8DbC_Pxbh$otSZWY}s!4>E2a>kyZ3O7WvIo*Rt}PsDDFCTBEDu-};Cf5LYL|wRq5% zwP#_~-PqYyNmsBL5WdXXiXOs~W~>fj1j#7d_K|Faf`M#`76>VKnGllrt>^~g6WxGE z2v>gLWJn7Bj>*R_xi8!VYMQGHFDqIH=_y@PZ#}meqFCV+5k*#hT>-rEdJ#bRDb^|H z<#k(_%q_^sseP>#+m9ZE`9|v^RuA^7u!NztJOCyiY@2GyLnBNL5!g zC*|2OCq+FJPN6HoWmGX0HA|x7L?WH7f|Ip9dEE6J6Eg*+XXv$!;Xa#Htvohpe;wpY z!As3CJOPAcOcUf5i_RhF(%ZJcfWV1M7xk3JW@Pf?oF4gcunh^*dwHHZ9zblQf!`1G z#{|m23o#dbEJ!E)5-fHp2ZIjtKv29GAYXuxl&LoO;}%qm-q-j3y6)PA$qpWPMnbh5 zy_S@>e+Y^l?3Gd`TymWb`X4u!R54k7bD~h4X6%ffqXQ-&KuvM=-Y&XqEkr}G;+n77 z+hsg_^+-taM3u1zdIQwHBI_M%j5k8j2Sx4+giSRHD` z3>qt*)-KD|_cq8><2}#{ZVkFiXVOOr;i7%H*M*9`f>Qz!pC2Y*tMsN%sgHmv+y~F&I{@`K=$q6GC^cY=IYUyAX`MasvzF!>dR7YX)gQs#M3qs$G>Ystq8j3{f z1k1W0Kk-b4h zgMHzeKGYX;7l@d7LDHEL6ZTuLsgIp>A6C$PP#=J>Q|q;#Cp7SRU4Vq6aq_me>-Sb^ zn_LBM@OGnP648+l1$6A)8`&LpZpE^KuO*wVV?WnS(=1N}>uA%6>F5=3a8ez5+AC8< z?p+xgFi{yAiH(nAm}$%zC85pR#;zRZQE=%G%+a*21!uQsTS1j_Af}@GWc@YplZZ8@ z;6`{0h%EcX(*C6oT;-!b)$`Ry>uaSV%i$CH3h%4>x^8dPlWK_WDOSLwj|`P9w?ZG) zX?lrbEujt5tUmHnYXIU9i9D3_;XM?wAkUsc`SO>BXgVZ^_piDo;e-V0g|G1$vwhixVzI6PT&D7n@GnY{cKkyc zf=<@cM)F+-DbeEbO5EWn$-Xy8I%ah=z2zC2)$~4qUYXo`-E4Op`yIQKjFG~O5!(T1 zN5=^rA)n${p=1KALYq9G4gG+Qkf7CzFhILV^GHrp?^;V_hbs{hYH~nN+UzUUtU^z3 zYfMl|b}66(mrOkR(ogk>278@F&D5fp_I;FG7VQ!p%z>-G^Xkw14=JadBOT!Hq|qAs zRz-so7ms++75GIu1QdFATh?}n(CKuC!iC4!Aq;YLj}DcX$~tkYr|y}-#2h!u{~3BE z9HK%tV9LY$Tmau-9`Qo0S4>|76K8cWm0Fx(kL%7+0|12K1rYJ*PADfAh#G*1{{OEmE?LB@cJXjV1oyEr-j;Q3jfHgrDYPdEH9L$L?+OO$eao-o_+wZ=!(aGhr7< zu=nu_Xyq%yF;5cEax=hTIw+=cy1{MYfyl`yug)pk=6%+=&BK%>mXXG&y;N!$Ed~ON z@5gtl$72h&>Uh=BmDGq!V4m&i1BoculhSUWI0acm(DFEdoeVxfx2YMx;JiW9D2FR0 zS!}i;t%9@+Zfip)gWKBB6u5&nBwG6q0JUf)3r4AWG968DkW4Ake8Y8lmEtqfev#w!C$Z?+_@6pkT}cO|~f{G;%;*cPQvB6S<< zgmHooDiUW|ErGA@=fTRBcQbf7DoZLFOc2RQ29>IeDi^>m(bQRuY_|ke{LU-s8yXYr zlTZhh%Y0tGC0;gXE`RM#dH`QdvBfT3Jo#x`c+e0wMO3w5abl}U2q{{L<(3q8T|b55 zZl%3a+_l6SE&9}oJCrTOU7TWS*c!3AZ_j_#5BVgNiK7H>h78)Rnm0T%y_KVyP!hkD z|C>1hK(~n#-%($>*fesDa&j0<-ZJmFjTd^44?{hNCjHrRBYq&(rH8jUdDXgvnSp*i8TGn5?MtgmImY z2he)!x|kd~1^Q)jGO#SbMnZHm*vm$z>}0U7VL%2^c6`)4{DZ(z94Q1fa(NsuwGJ=M z9MCgyH2ia9mMKuaehY;jY<7=G`lsK4nI@mSVlB)ssVh4rYBJ=}tJ=yhO zWj(9wHkouAU5;^ysN1BK>j7+y;ubvoztZ*a*4e>W?2Iee#4D3pAo8m>67y6mjsFd7UNwNaO}f2iY-L@zN%(A*q_bRsyn&}Q39A9>yH{GI;q z{}4!C`}uwN&1{WMqJGFd(T7{Scx5h2kdSTbN+Kg zBQlWU@T(iEM>I4k3diZs40&W&A&h2Njes6Z`h@#;37zCREQK5kVZCn_ZGB3xs%m$! z##>ts8hAK{5FN+`T+9;N7_Ks1(TQ4zW*O|_%@Zk6xdh;Y)6yu| z0(14qptXi z%oHlb$?9N*>{OJ{h80LCO=OQSVDpA6Tx8hln=Kt0wp>>?P&?{?U?86t=daPDs&BB$MX|-48nyoW?8tYzFrl;m<)C+c{ zqU2iXg`4H$#V0x52cZHQ=p<(};D+>Ssb6yMp9;(JmsciEW%(%{U(Vo;g2Qh{Vq>-Vh5Bh!X{NWX8%quPo3 zy*$haEyjt{P>MYyK<%1y#e)amtTE%`8))B>+@W`mfX+e5$O>hTa!%(-b>i?87$fmj zb)J4JPCl4xNNqWsTf@yj^G~AJcMx?h|C>a?lxb9pD20Ir>eij=(P~@6JEJq6l zGNZXpUA~L5y@->X)oV^25Y0S0dKGw+^`5d_$(k$eQaG>~kAj7RNB+2|=7|*!p0FpJ zGR~kqey79wpBt}7mh;b!znUboD+y_<^dJGgd}QZ1swj?WL;%Ah6-U)zojeEUd4N|T z&td7t)mv6itghmf6COu#^sIx&Z@weS%KA6|`PGwLa-q=zd>?2xw4RUy_2QnrZzNq= ziKZRaFljDX!Gw;~S!y31c5()%;Yp9lWYutcKYh z%c5x1xIJ7la%x1>V|wOjcGC>5I4y^%-Kp_QsvOz>b^POfl*!Z@y}nh(siNPLBHOa_}1Pq77_( z0WmYUICE>r2vdP;Re+t3t~$6JQ<*2a#?%@zS^v8?wmdeK6PHXPskn4C69vFV6Q%@- zD#$X^BcL1FcB?`4lGib}_3YeVeN${(wHk|G6@^kg!YY>U3S z)vLt@swx#X=PIIQX?0KM6CK1{D}B#-nDec+bP^}|b%CzjXQP!7>>HBzh7`Sg-{z5?%hc#eb349}jHQH;9koH&!g;~Y4CGg80Abj7o zv?VA(u?wQ>Q2Ry>Y3=xFPtzoJ0bZUFhji!B9MYY29MVGWu|pa%0LFEPG)(0`#~~eo zvY~Q8jf2TT9k0t-C*N<%D5)H&(lI9CkXjt@w49v5e=a?&J+THJmn)q~kV42Ivvu$B|x9EYu@R_`{}`wXpmy>HVyS=7r9xIT>Ck9Pv&NAA_G)i4n=4 zK~H(r7UPmeHfc5`(@5&HTcW&xeo2NcWzSO>6(@_9UvdnRv66hfUKiK^i9cxdK9gzL zB7gaA>|?g3k4fyJfC{K!jLeb4VFr>nU^>Q`>uoD6M&Mc@2a`p3n1@N^Ru6~L-& zkx^5VOTQR_GUk-lbOHMP654O+imeITAg03v^}ZS3vzJ}dhMygtM4s}GLk@T{H9}N9 z9aGvw2_y}M#|pBdw8WVJLP>L6(RzMAKmk`?>X9{olARnMwaw+?mf&?liMYh~~?*07=xFh?QZrq}yGrlrFhLh8(r z&%bSkd^`i-4f?;-i)2F|XRri-D-1^n{U+H&5yS`JUcP;H%UB+B(8C4mMC1B#_K;LQW2e^E=*?!9;pNqHEP(=!L>Jcr#UD z2m9?45GCX)Cg9rK-S75(O;j+UkS8>a)rEulG7@s&Xv;&2WrXjgc)~|^7C@6;KS*{^ zY&}-55_f2z{F34 zM*N_UpP{KWH9V;mV7x!e`(3fKIlCKL`blqOK$=gt>9<`R65<+o!I&Hxulx>bxLwSO zx$%a+8yyloNU&4%6~tv(*|MOJQu_-2$R-&63S8__ma(?NGFF?gF4zEIW#aN?oJ9{2 zmycIc6g|2a1fUL85v{SGz$*e3)%5s+p8)@Ut*i_d$r?X_WUia+)|;&S1j8APpInvD zWN;KPYYNn6bw|MnPrO?$0#xKH8N9y*aAfDtqS>&F6$J2C#%>oNE8Sea2N>0ql|SPz z!iRKSiJ8EkdPC`OMkrXY7Rq=va}^UkDKZZ_l2A#&PTd)`g%F&G3|vYoltu?$^2Rh# zF+f3K(ElURVw7$vQ@d*~mOj9OOJUC}*|sFi@Nun9bKXy;l;!6nC=v~?UUJer#>v{ByF;GvmE zA3UI=3KycVvqCAV2@sf1^e(5Xi?o3QkWqCg;1^P-0~3MFO;CLkl*;jSBShq8}W5}N7pB)lyO0=Bn1irqLwDQ1UOBq^E%W5PLo(Rh0uTt7qLjDLS`(xh|Cdb zgUc#oPY=FB(NsBRSjQT@kCDD3k9Hur+k1UF)|f%JBM5g>PioTCFFq$PYKVn=Nik||RHM^Q>FZx~MKnai9M$XH5TWZY z0=!9rRXqoJQ*o184l-yU;POGaHVnU0tg?L^t*hDED%;cXlk~2S1OOWhSU+M719g(& zGkM|ltpUB5CC#N#FPrNmng66rb1E~BN=p(MrR|VZ?qxkWlqVmAYr+1hsH%=+8&11~6U`~Cxq|{NleYw0^YbK~rEoMQc%?K%@wNNjnwx0plWtp$qL)}LR3iYTRc_^N( zlppw#QrXyi<-6IU!z6^5KpqthR|sZvV&-G;Y*Zw%j4o{bP?;T~8~lQQD>R<-lOF)7 zaY*^FGEWfTdWPGBFLfkiBv{ZCSHGywA?3=id_iZds^JaFSfy***Q4PZDju%K)hRZl zQM@1s#QLUpwTW1 zw6Eor{F?HXFE*Ah#hR7j#?Up;`@Yc7{{r>(Me`@=Wg;z|yP|lH!Nwo&EJ#^bfJ?7u zQq}!|ynM*-KO09@5D9)+Z|U)Jo;VTBBVrPMQEH+3#VCa;B2f0oYohYjAEh3Ta%4aP z+zXOBTf{9mDlNO}2c7zPh85T6m2twf(%CS<)xFu$ORM7i_Nw_M{C5&Q zYa-W0p^WHbMF!zDXU$e*z-^I%=Et1HAxWs13vd`IhVpQ|_+WXsd@()D4=xI?=wOjQ zdr@U9cnYpkWJ9kYVtjBNGbS-BVdor4=WKOAJWRAWQw+Wn#Aug4dp^Ox$fnqWaEeXw z(ZI3L_+EUlcNv?&-`_yIeJ&Y1)H%1jkvWjaFF(mu!i7nBGgm(F4$TT2N*7+q1>W+d zBJn~SYJg3*)4Mxvsx#(;*?zU8x!rqJ`MzZN*x*^7ns}9Eh`GLZ1qbdn)vF$4Fw)LY zVr1y|&rC-gNOo@u^-y(0Qx~vZ9cQ8e`rYSX;pZS{;26ne&aV>imPz|kVR>+RFU)V0 zz#ZYAtJ!lG;ZoT($LSP)d*2^*ptoe03gLIN4>wkTD-bG(%Qc2F7@8gGlt}W`x<5i^ zmXt(UcK^_qtnwkDkUd2Q`$O?Z+8ZS_e?}6kHFRR6+CH3^_QfJ&2{D6{00%G{Fld-l zsOpiRNQznbC(;AE%q&A0<-7GD?Tr}HUdW~~_%m5_(rbIKYE7@mvZoiGz~|6o_5?EL zY*z?w?;WLt{`q`*wYQaV#27GK3lETaAV$K|tYr|~hB7d`u1LBh3O3Ny{PLH!d4YTo zKE&k($|3OxXY;{J#@SBAk;MpfABl)|sbA*D6u}V}K&Y_Ol^eQ15Tf81mJO1f%lkB8 zyme8wPejG@i7QNivbP&$i}bmy(mxu{QLD>0`e1VL=$azzX`X)|l<-z54-B=56*VnEg$uGqq3$DO7coN}vc)f#bj!!lR~C6Ii5F zy+3c&c1&gr$Yf?N{aDE?tCN|;zewz~$t2E}1=cjP=~t$xQPSrU^#U6aN86 z_P}5{Kr7Nv(!o=L{kE^yYX`R1yLn6H0FKcf8x+?|!4FL^Q)(hild&#XP?|oLU>c89 zBThm`8kWjy(K(hEqCV+tC)~jJpsR?pJYWaiF_wyRx-XG)I&+4+ufq7fXXvl9O_=+W zX)DA8aUo_%dl!tfGqrbcWWRub)Y>^f-h}eC=6(#kyv1jF0pU%@mk)3e7RhknPUXEW zxv3qEX`zW{Owi*w$|{>JBfi%Na#GYR$iqrmJvp<1Bu512`vt&(R4pVTr{H~%HcfAf8C$ z_M>tTJ!(OntP#}HLZc?AgSa1akm=_hYm$oOE(op>20?AQ-3Jb0TZ(n$Qp4l;ZFB(k zGJiHJVy_p3DRo@rd$Ed;)yJ=wf}vl-&Jt}NTbjA)x}JRNMSA>tp3uHpogY90CNjPB z?_Yo9k@gP?^b)8&cVL8Cp_A}0@lE$Uf0nBFDUa9f%6aJ1R5DO}@ZGfsIS&s?B9k?4NENL+>R(nexjv5)Joz?Ej(OMzEI4$$ zVVbXC{r<=ZP8jN-@RZ#vcA6ORcY?_vzV^1_(C1gM6ZkFDgz;&mK8hC8-lKJnm(Die zQf>mLhNuje3udri(2t!&y2Ir@KCW=aB4l4vbEEM2wO<3X; z=sItPteyl7s_Gtr6=o0#qL)+v-veowcQSf|N1x>RDGe&)YxqB90`p0RK4yVHY@$T{ z-^&7r?A;)eWRG+q{JbZg3=!03fzrw(O01@P0mKM+#BJUKTc8br3{=s3y`PLOXU!cu z4C}CW6oh@8AG9=>S2aID!(~lioS!tj2%`uJf|?fP`15kU`SV8iU0Qo;EZo)Wy<%$l zHO3uN#(1{oFXK5|Ba^clUp|%bJpEivCU0asXZ0l%z<^b1 zf=HCf{S1~UY*D6!RBSk-{H)9t{6wtDQwS3Qfu$aR3>TV@=&nshK@0q9h#?5>NF$lh zOh4zn-mBBf%0#L&t2}gM@G&Yc;Vx@}nJV0+`1kRpg~Ovxtngd5(ef$eRdnvarH2n~ z!I{SL5mDQWw%e|wXO{^^i6);=t-dIykl8NZDuyZjW?Bj^g4y##J$fG>_s4pv_f3J# z?iSyxa+Y?P32L!jz90OqloVj#0y5aB7ZOIqO`wC9l~771EI}_H__TxgNSt`)=rrI~ zK_x}_W8#Qf#StX=1QPQtanHv2Sx4b7ZK=o{)GBcBwB%+me?p8*4_PR{D1K=?Dz?|2 zfOO|6K)Q1bQoQ6fkZRfl((^MSamr#r4(n6EM|f_SOEB#U91Iu-)DJMmfo0hOKur(` z!QLNKnN~u8LVgg)9+ZKA&6xuA%WlcE55Yuft9yzbs|kw-P{JRTPG8+M`KlO%K3;tl zT0G-l4F!BA134{Cy7#5Cc8m&lo43M8%|70Xjo{a(c_;^ybOw>g4pHq-sG8 zU0souGYMN^mr9Cjkba|&v%EmrCpk6z22ZOlsql=*!<6BCF@DS}Lx&vu!qK8N_(rX$ zah{eJMTm4p9o|!fyrZneEw!vg@?1y+L61=|BQA>Ag7T}dE1Zc%5u?2P_@|JNgb8j< zL!VU;-7z6|y(%50M)GlUIn8+|X*DxRf>a_4V^fPQTD(2BNO-K)Vyo7{H7%YUU{h=H zY!XNA7;Xza!&MTNeK_BE0?o!r&|FfQQ^TcvCJ+sLXbnUghG?;^Or9g!5mGFG6r*z~ zeYhPqj$U2fpIBZLTeGBDwzZ(0$5q&o=+qtB%DTK4D`%(q6+iBo!h|d6`#H4Eba$7E zo0f`~4WFb50F7=B*^!vqlzM!)g9i6551-88 z;^pBY!#<1uXG5gD4egQ~A_?b%vby-iHp<7CKt!QNCAec>92w5g4+S9@1K-qlyTy)U zhllJgJVg28Zc2DCU7-=`m8tv~|6q#Ih6W>nr1vp+h0UBbM*U(3{;Xo5=pWPGHeBnE z&MM}XN9RFy!=gA(NjwSdo~2fH(i5c`o`p%wHs|c*Msa`gp6+WG#Ud3jhqKCLQWx1; zSzTEk2JwgT@#JDwB4!ahSS;p?!OAfO1ec4mR?6#tgnY4MqlIGr7$aIZ{QZlg?h=Dr zN`7FGh+(ksfRy?VOwo#qEy5>JsjC+cw-yZ|ztr0lgYZPW!0V+vCB;B6Bkyp9 zrJFiQo};}Rc=3fJ)@Zs=o2Cny0!k39RLDV^Qm`kJp=QXB5i?ejhHkE~wSm9YBk7L( zvTH`OVpDvHt1|_=Ud6 zW5S8~Dcap9Gk_t+c!h^?2$)w>K!nNf?o~$_P(Hz0!cCkg1 zFrGGpZjO0t$9dyrh>_+{>FLx}bdna&fu(ZE_D*O&#W!R@#lLR~gB5RJsyyvi9^xzE znfoRzfG}YO$fp15Ge_;iQL$N)^)Rt|r(yDXn(2d$` zj*TZ1FflK-3dRCVbLq&_RfwG@4hI0O0{_f-z_n}4#@6BiH?E$LKfUFGP;PhjVle@Z zARhl-qkn{xeqMyG5h4=&#IO_IypjGMFy%2mDug1+nTg%m&FQG~9QpH$&gJqoSZlx8 zC)_>k8NDcTU2YbBQDsVTJ??~&I_F74#FEz4qyG0z{97^+{4XRFZ`Xuy|FynRR z^#+Yz3Q+^@zd6O>l2|9-ozaY{nT38QOpH7x;~9wt#ynS`#f30C17-(vfjkHy^VFPz zUtz)TxP`>;_yzhOJ9CURzk1&a^)XLh*;eoEAqyIrlE$PxC`r5l!Kid|M&EdZwK_*s zfR&1_?|lGSNmJ!t_=JeVZLdo~#zuK#gZ=r+x4%!y5L=9rHIHLTw(O0oH_jA^a$V_t z0#_>Uy}^sUlxPbdaQU``?HvuwW55k*c7`0o+v`njui3qu+LL2@-JWG4UugIFnd%!Q zQe0!;k6XcNMU6%Z-62EX$%U#m1f@SZ89nTKpIo}|<|<9%AGjh8m5)KWys`bwpQ z?_a6TE?%zAs>(r4?62xtF+Qs*%xEiJIEXFq!>9Sr+Yy zAL~&l@)ac4a>b-?E_R8pPjiRB+)cKi&witiIL3h*L%3ukesFm(ff=i)9CjcfBX$k1 z#y-DX#4RcgjKLkbJkoR|SP3)})#Yatajm$o%Q=!tnpGSmNnsV@87=@Vo*_S)c?KSc z8qd(LP4Nsk5;D2YGo)~{QNzc(lTsbAOn-Wqze*x4*u4UU4J997#z{eRXr}ieT1I{O z5wr(VPIjCTmXC1LrUzO3?D9;p33QRt=Bzk;r~X}d=NrF0*D`@npfdD}7!(pt ztKrKpx%+!%gEX;0^oIVy;=Jyimn8mk@3W2;TWUYvICxbTJsyRaI4vd8FL~7$e)s6t z?z;0kISp?l$qz45pdMYBWZNDZF%p4d5Qt_3q*NxmIBe&p`|s%0%13-oRroV-5}bcL1R#8V1kELMQ^`#ICkuTXN9yy!V!pP%I(uL zyt;gMWHXx%%YyG~XF)4!V8Fx@uxcmY--AQ5$x!8h(t@HOD>Jcw!o zcoyD%$w&O>{%5_R=znA0c_aF{ayf?yE$|#!t+kgS@UWDb4BTO3&5dFPEjaOlAng$b zWG=bwb^4R;e*?YtmC@`QirGuP)qg$)w#*%UW6@mmBtO@Ctb6pRa0#&S8L>ntK#5wU z>{ii!X`h5yuYudm==<8rfZ)+|`|I?eOUpPKZlis&UKZ`Y-~{fki{Vwqo1h=6@$8qJ^>joF$K>8%QB8qC(DB~DZ!{n`{;184DR*VtMM zr5vvIy_$Cef!v@@`JR`tS-}lAX3~|>*LsK>okB7w0-Yfjfmiw2KS~Dw+R-CmPRy6F zr@BYtDJs~j?oFbE=-uDxukq_u{yy=|u`)uK+?{Y;+%yoEV%MTIt(uhH%d`%j7A}a! zWUdC+nYT_NJ=U%>Z3ixTO9$WBy906nIw;Pissrg0jloaY)ux0D{|=>ivkmupR)cPQ%N!7-wDwar=D9Taui3>qnm{7j};Hkc&XAc?*qkdw>Y~y+&V?H-PD7 z^l;fem+@iD=4cTp7cifzxZykP5=`(Z&h@P6#S6TIJobuLOeZnnU6Z*OsgQ zp8NN;hrC811+8VKN}1yx)7lkZkjrw!!~g}IceL;zFW>bkU^F=2 zU{)B#sV#WTm&*dbj}$fr#KrP84o zlld5ddGkYmcsXot!DZKB=iMEw4HQ@g-|E5he2=*rbG3RovrUC3rplQ?ZmPGSq6!IQ z$u{Y@gF`WsQ8MOoR@9JG`pZ)`0kZ_YCcVuJPS&01Xkyn<_tq-4Vyt7k4kF=;HD+d~ zDBSENamQ|l!RhZmj%E@!iU*K*Eu{bBwz=^*H49H zCxkB+NE$~VRTI8&>Zfr3sq851&p`-SW>UWXy%T$iD4DB6$|M=&q zCK|SNnj%zlD=}C?pO!7j?K=DP%>%3u624I;Cb2X6|?KpEYwa-XDwAH}0tu!ob2v#XI@KBSWB zdtzjWnxj>lKOFk>B03XV{qWDL)q7*BX08YlH?1|W*^gX=LyV`fe$hSSOMm)hb^BKl z|48t`&7g`j3DX>yxEi-nb|a#Nt6K*(h9x)fca{r~wZxCLAy4ClksbFIH{YkMLXe;zrMlUfQSHRb9(_;S=*xw|Ax zY=(Z_Uhh}IYppXBQ#fLU8G)`&(J9QvNv9aRn^I2%6ZdJ-p@=%WvsVhs1gKlW zNeTWlnOqD!A2@Vn2#0=qJzrM-&21ADXI_1egbF|PrW9U=6=+m9e#*Z&L_%2oGZBh> zqNEw?(;#E`3s{*r$eE9KV( z|0goGo&vBb|KQYWVi3dbyzOvpeG7daxS)RA*Xq6hlKPf{V-35ec}v^AMGI4RB`BQ* zO6Q!Z1|6UswzQsuF(nB>9DCM$=Gx6Z>xjK^))A+8IM4PIBqd@Ry%qNT_0iuTm;1DE z4a2Hm9=RwxP@sL{tbpvbpsYy=Q8_u3Rsq41MV_9k&(kbRr5=V2X|}00cCW}7Gefp z<%Os$5rC9mMTX9(TWe_>&2K|**27qr)~wXbRL6(ga8{_8!3A`38@@F9)rKs$L27(3 z&FLtY(qfye6mLTRwx14rAoS4Xq_Y~;yH%gn=NJ;(5QttWZJOgl z1UGd23bVcb->`$n_@0%n@vjZu8Q+gj^Nok|Wu~H2z7nTSr~C?I`mMHE6x~Y!mS)RZ zF@)bP3plqpcDwwJ%SN+;9OhkcbCC4#m0Y6HmjHQqPi>64;}>lmgs%!i9^&hra4)=Cd-fYe(ofURS5oV=m=!zY$3r=NGqhIaqEJFa%6oJ~r`^R- zTllm^0;Yv{2BF*T)Tmc}nn1>OgvDiqMYfdhr>ewk`2nJ_t@6w9ximag{+XYdEkEeH ze;e;+@$MhTyC3r1zl(SCc=xV&_rt#X`FOVx?|v}e{fO^A6z?|U-FxEQkLoUP_uhp= zk^rdu~92nrXAm_92^r=+JbeVkNQ%uZuE6K6`9y#KPVdAo~Ic%RpC zj;`}MWs$@^Cb&<&#zon^BA2_qlj*rPl8e%yrydKF`(3l=_n)SyK;TPtqV1VzHI%Qc z>54s+`bW9mSa7f~V6txKK%@9oMFTqpI?CPZ+q<4g-|mim!-|0E!9&!fd6|+W<2%{NlM-?dC$L+c$(hU=q6yOiQ6qcoe*M*%dE5ohjS405aVUIMIkAwRu z5$|_?hK!$C9n{f(iWE{&=AZbf+46sf+y5AESETvjc>7)9c15`rZHjUcN9DW2?Jvf+ zE8_e=@%HbB+ZF9r)G6B4+kX&l|Eu2)G#csmui_K$nf`n`-mX4>!nXl&s0U#;KcgkBTDgr=)Dl<~iFFg@!u97yp$4AtyylHe6IJi|JUlP-T4t`G-L2;Hc zVo}+t!FbbXz*F0WsnQX_g?1l2Pp)=M+3dUmgZN^v2j{+Tc0dFAGCmfry9x7(vxzp<5`87URhm{pi=hxCyx zP25Qkj4kSP(NhIBd_rJ=$~rOzZiIqFVKfAf{ABQO`L=Z-l7U1w>3YD_ z)E*{fZcDL4z;RtOIWNETnTiRhdrYzBM4W1N-g7vkxw1cNHfH`$zYa$PetXw z=(`n}RzzNr>8-wN7DAUR8V`JAwtSuMRve%r@rnd*n`*hD@T%ossj4Jr z?S!L%20*RymfevP3fPb^isEXcf6lt}E4EkwUi6f2IO#3a%O{690D%!H_$&&&AYBOE z_@eA>D2)y&es#L>wG;7c^~Tqoi95m*pAO8}^C4~<8S$IL-JstEb{l!I zR6H^BUk^`Ia;6(^S90bz!tJlQc^sGV_Fu%ee>2>!Bt-tW6vy!(;r?pMQIyf3EW@a~^icfS_ye!+Je@!gMBcOMFOzv#Qocvn>H@BT}; z`_J5sxDy)xSoOfah6g^c2LkGZ2Q+_f;orgo|EdQwuXGJNAakW1U$~l#AVV%YO%Od&G2Mzi?$Ul|P;6an$zdBX7RtQugwa{4r{6 zC&gIUytVw9zhpXkI*6hxqDyI46B3wTuY7s9U6E`SZwKbqD_;?AeR=!tMLx+s$}e)2+naSNnD~A>^C#oCYE-WL^m0T??Cl&Is1a5h!>i z1*fqcLjy1-$wdY@+FCOAz^;n|V8i8?|H0__`hU>ZgINzczfY_a*?&T+)+;_PrgMzTvEtQ!m4rEsy?#@Lx}7@#)Z!+S3xCv*oXhAFSjRlR~p& z(Mq#STWt0X@oD@$jJlG!Ji-&gqglb~QrsR#hFH7;W6B9;4YmLvCRV?=GTdHbqM~C2 z>IF$;p(?TbIO+62l0)o!iejdbLVR>-Y*~S~4{CZmfZy`d_@rpk!wm$%^zzEgxQm)o zy7$}Tw(|+uulL}c@xe7Cg<^0hF%U9wG}g;7a{2k=l-^943aAdXYr>SamgpBEz3t^A zPbIj=ziWmDPnsH9mq}DtyXERPjAt-FAq;5(g)V~*kKRx{il1U#fOP>_c=RRV(J-v| zG~8=VAHEQu{^_dWW_&bYQN0gejE~+}J<5(h?gLD1O{@PLAAM=;gE`!IhM+vDo>HI% zSaBMtkgVUJZ0r%_Aq-@L?bje9YYf5{I6+owwE!RyMUi$JTnn%J%8T>N&2PYOI#yI))`&umWo~ z1$*EKTwrp*(GHSTF~d*%xtQVVI?Rx#lMc2!io*#B4W8Fapfsbc{Jl=rHEU zLX`>n=y)Me27DR=9X?DXj+ZgHs*^%J_=WiphQIkU30>y)1)BV#e}2}$hO>hIkV;Sv zo}NDdMKUS)Zp-%&?!p(HjTQXpE46JZy)f9OE#d{z9e_599wHMGDPQq5LebXy(h@J< z?j*TrtOL?t5vu*sH!HTlT!l{DOD7JV%8$IDh16pEOf;M+gKlZU31cbZ&n6z4b zPzxExR;bs~s7ts75;>aypX?yjmkCG=iila6N$r-_%lY7ocwFsQ?NeS*G2#UdR9O`8 z4IIgtrF-P&^I}!j;E>g#x8WNxcTcdxlOCnM_=Ca za-H4jS#?z`hi(2z`hNU`Poe@CrxDqvX=y^!8kppLjVZw+d2s+|JqUoC$eu zVc9m<1m4^KUruh}D-Tdfnn^QEM*a*fvv`3w81>D1-mTrJHpp3C)$VhjdWM?eZAC$9 z?@o9@eT}&*mc%M0MZN(qm|A1rhCOdI&KOvO&1UF>|0O^FAqZmE9*ntPf6-Jk2`6E7xT2+K_F;^d#VwV z{qcki5Rxqa{?E`f%EsUg?MU|7;0uxL=PmNWEF)=-!~y-~T_V97+VZPQ&P2i!EfsC$ z0D0y#d_sSA*k}sn`@=U_#72JZU7`XqQf`Q`ZC*k$1u4A1t=}YBGlWvbUHq;j7m_qk zuXT1&-KRxHO4d}5q+G4}eutO&z9L>6s#)>(d8HR5rzKBdUUUSuG5A9%_u~x7I_*97 z>6?l;w| zxw@{478c-fOG8zO+dYy?60uAe^*FiYk z)3PV0UMJ#Fs7~2!tV2ELpe`gBV#sm{jeC`;JL*@W9&y;o}}lN9mT)VW<$ zl*YA7sfme*w+;3Mg{G`d%VkV43l-fM`ns)Gow`U8L|n< z?WRJG;6t_{10D$q8V1Yi%y$}`JD*W$T#O17sjlF_E1N^E4WW6}W&(`H5HyxX*%XEd z3Z(mZ?xmUJ>^o}UlE=8hRq%*MTi4K&hw(pU*B%mt=Q?SUCpn46%u)+~Ch3)>Yb`a= z(t+;0atbzQkStI;pNh7g`9UF$Pt{5EXz!uepC26Yq>iipL8S z#8;pq-UCm|LXrv>JDc8JMkh`rJptJMdcL-r9x52$g-K&^I8b~xRBXN^@t+^6*8A+j zq-1T@ZnahLml6Z6?k_(CFNI~n&}Wf`H}@Y2Z?4`rSB5u5o-8pq1m(nMu6|i~=0$(= z)Y>yu1FxwX_@;OhOe-jrrP@YA(TrB86lw3r*hsQSXjK*K7`&KbQo6dE_##QT=8I#V zcslA0=+%2oYpS+y`1J1V3ONM=WT>fSBM`8LoL8VlmCn*-KT`S~YV>NNTFlS5XRR8y z-c*)-Yr?HHBP;;WEQ3F!4GU>l5@n2;e4;LIyu4C&ThFAk!de1VunVE5(;GtsazYVSpwzwj!ucO}z`7f?KT%HD}vtf*%?7gmkM; z5}O)beUIMWUFnzt$t?1GgX5w^p-AZxW8u`^t8jY3&S81vr3lf8Ep?KP|;Wl zJ<;Q+IcqzF3ApMNQa3g2jT*n9QI2c@{-qjnXm~B&UTXa* zmm3!=T7)(#!I8+B*3DeNfnU4BuU+9+ftrKpD(`+1>W>W52U?>Hg@;z;>~Q;Xkh1WD zbyx#re^S2VSM@B)y`Mz^;wkyk*FG&xAt`_BjXXVm^wjFilz^;5ZBve)I^Uy%`&WQc z*1Iu-kps2|C<4;p3hOOguwby0nQn*Wr)V+HOm`wg5tMA&v2>T#pL+QzL-ti|zS96c z@c@45-q037Fjc|ML z3XJw$HBG3FvX50%tCQ+?DDOIitm0ZFS>>{S_#SI_$h5XG6vJnBE~sOWe{z0)3!5AM zfSzY|f6UIdQh?5=NO>8CjuYLf(Ct0lM8blq zBx0Q;Qb+=#Vs9a&1G9xBoREWd1%({aF*&3Ya`3$a;iWM-(ae7P3Ir|JbJbT(jmyPqu;i<_m36?ap3shB5NOWFO1q1$RDj;0!jd z_AU>|J|_FqguIF*3OSH=>hFxC{8sWmeqYSlTNoA)~6-+Rwfs*1~# zipmq`{d(8NchN#nu=_#5PDbQD^+!Y{t{mg+vu$(Q+7dS(8-^$$68+o(( zlj$T&tDmPjCTI~2DuBjSkUPS5)@>4sr5{(5dWvD4(*`!srC|v=)-2|FZ*xHeX{93KfdAhjpYY@ zW45Ox(zXhjRBtHvcdq=5uClsKUyn^Gt#?j&#JXW`e7vEY;<@slePi;ta;N9|Z1U|l z{DJUgJ>KgpcZOL}#k4+%R-7~VYHQS_$~|==lHplvr+TV{V124v9j9;P_}8i>Q{;8?i;S z-V|-z9e*0@35eFbKe=?&T%^YIv&yFwoIIHkkurydtY2p@g#ZX@?~QxR1&_Wv`vC1*bdth7-v%8L^vgYshCC zbfXrG2L-jvOJyQ?63f3P_yr-2n#Ty|Z2KWbvaRS`=Xyv2w?6(U(L#hTS#0TbBU0JE zPeeMf_nMYQO^sn&p;l;vea9G!m|-A8vD`hQ=3JJs{7XOj!?Tn{2_N$W8Q@f1riS%w zz<2R%P+lsTv&;6D1X!9AErYd()y_`fPR+j9$o)QBa}z>GJ*|12@XFzKNz2;r^YrD~ zZ)U$a+~Q<6>21VbyOI*t+c+YB&zRag8RY4R)js9oh_~$pIxtVfA_X635Q{TNIBCy1 zbFqXx#Py^2T{R@Avq>`_lW^ly-{o}h zwGN`zH}t-1RI}Z&QwEtC_-&a>r)idl4-U^RJ3+qale1-KMek8Rc$rg%rLj{_d~(&n zcVDd@oIC|ni0|4vp{HVDzq6q)!r`nzRM3XxGZWl3<1be)#CXqklh-d59)Y6*uakNPVl^@l-Hwpn@R_+Me#Hz)SG4KT5#h4XCTR< zIZK5X3XxNkJXpS1P6$8Nni5!SUpwNRoyGQ|D7G&m=eHN<=_F?!@%S%2QvHG5bIF@* z=YwBCb^_5Nm(J3tZAxL(nBGP~mn1Ck=uOw~bv4#}ooy88E~zxQNS5Rw^q(U{+f@}3 zw?|6)U-&*}`hFh1pJ`K!unTvn>zBE%pD+3Qxxdd#A=s;&5d8?%{W4;o-~g89H@f2P zf9k+@PY;}J=QQwSJaEoV9ys%#uNim*d>A+{O$M$X>kM3gM_NJCF4BWu&OWz@ha+t}B zXC}2B4_z`!2Mi~@JmPGLXCV%?p`a2{Bp87LmT#Hzi2Xy8FsM<;tHjzkZ?34E?3GPn(ABR|MMM1%RsCINnjMrk5#ExQz zAf#iMl$SIPQuRyZv16>(?SMf-2k_K9YVbRPT9;{rL3r*92evGeGL|g;#-GQ(M~WTa zns!2Qx%}LaG}PDT8Y;mu_!j_0#q%cpMjXG$JN5uuWerkv2d@BmgYvEdOJxuy=@8`qJOdbd>CCbP8#n8bWunubF$)$C%xfo%i$EOPJYN0nn)IzU}qZWWJB!dYRA&(>F4WKUHnWrTjqx&WN@uG_ezt{9!8DLEiqw4Pm(? z6u!l2Pu=MSlGXmjMoxOtm)uZpl05_9UyZ%gxDF2dVklYmUxeSVS_3NHC0@sNBanrr z`BQ&Q)~A9hx`LNO*HF~^JiJi0$|fRQmog-WOJ6{ca^eoT50Rn=qv<7JEkHVF@ULRE zV1Ho!P^rKQx-nP76hN^T0aTY3+Xug#o~v2Z4}o#;ztWJ&gSN@<-TKWO4E~MD7n|yf z4Gqe_dM2ETNao%luL+TvBQno;#+Jo+G3aI5do@u@EOFRxl;MI5r+N(RvcHTn&d)%TzM%`3pfNJc7qEur-Q9_S?MM;}T2%si7X9{E7sl}p z>OFCe?4t;m3})KjpQCJzST>dKX9m&>G2~liS9|W9{anb2xw@wOxz*K%U8GX(D8s#3s=wk_av;z$g+N}|?di{K(rPx^K8^q6^&cCYcQ&~0%ft@Z-lsR5 z!(W0GG1sSq9S&S8MkVRAfYk zI5vxIbD8ZKmkI5)w9>PKBnO4&JWu6Y{yKqS{$5)c*DBcDc2IU{7xdC1NlA3EGhAyN zW9=2rJ%xKh3ori|6$PLe8d0+$?R5bD(Xk@MhM_O=80Kn6#F|$PMY?m5iK9MDMu?SPw2q<@NlD; zyHtJ+oCXs#;-QZv7;(D7`RD5;W1v;O^^Pu%CY>};`rE}ewmSuxXPKwItf5*{n#*$Q z%3LQ&k~Gb-oO!0ke}gcKrbegonAh_8>Yn;dITUJP3u!!VQd2HzhGC5FgF%q?h*$9)w{&f+y@Bml>rzcL*KNN|MYY%1eumrc z!r#Me19q#jo$^M^K#-ORKyrA`4NuL?WF9tu=E@>Wwx5FcBebjJMX;y?A(^Y z)@|G8cbs+h!a3)uuz~u6KBuxS6q9h`JRKRfs*l+R0iNKBKqmC@e4`-30y|2L*vbT1 zVGsTWc(zr1-VgPiI^;)yTw9!(U375Tg$F=grfo(%6YNB<#oG52BNsyS(*6M)Wil67 zm_h6TvJ}@vd$r*s%S1BH&Omf(HbUcxuxXaQRGYGX&FY7OCNtmJVCMTZs~@NoI5+gQ zCkaIJD;1n{X{RpXx4>Un!jm)*mE_PGTDS?m6o5JP1W=kplja$+a?cEb^3m6p zPy=jo-`r-+{j=hIAt6|;cZaOthtWuQ^z;wQht(BY@-{DCx2~T{7eFGd+3nFA2d*kE z-Pb>`G`+Gzje{AnaqV_-!HU++phaAiy%5?6WVa{Ou%0P@|My^kl8<1%>UdGkzx*WY z-`f_~b1U?>3F`MYK>ZrGlCGwXsiV{!S&RDHW8b$3FkrX<8g-rPo|@wiCqC#sND;4?|)!J&uN|-e$i=_zey|S%^?~Y(>EFGw>CF zsp=9_O{oq9l&H;@cz@tV)G+x|9Tcb|KfWw<9*J>Kp#j&wy`j@z^Av3nA9lyLFoB>B zZv+Qz(x>2rN`FwS0;1E%?YM39xAM{HtMpQ{3Ib|yo0?UPYxA?(ug|Il_d4|rre+nE zs(}r{7-IkbH{7a00L}QwAXsb?hc*(!VLKb)!XTWMs^#V=5JT?`^ls8er7`vfd;oRZ zs`(0Jiwtd%u;!m^){@J-*b$`Aj5!2C@L&pt;PD#9CHx35l4~0a%a#agwI3|n$|j{T zLJX2M;#3vK^MJVOp$9~Jmw^p-S0CZ)QSO}d6j}zVw7-K z?l_E|%Q`Xdw9qR5l)5H0-Baw%AJ=vzG`x!gO%}Wr@C1X=suDPaE(+^AfT=Y{PF|C+ znKUa#k<;Ls4o@Nh^@!J|)VNy2%Swxsp(0c0L|?~Z=I}fztYl*@Y3p}aW9TXlbHH{H zwV{)wNM&k+dOVC1--8pI=l6bsdV$T$Vx8jjx*%`pG+U6$jWIC}ZqyarP38L672G%q z%o2vsC>K<#Lo-(!g*y#rhDt(@pXb!raDD)?T-wdBGu{uQmj3}Nv8z7=$#&aFC)KIw&9B4)ULfAur^7_xBbzEjHV1OvlFPJn3eMwUZRD5!Ua*8H1 zayk)5hr-F!)yMb*7$)uny%syl2X4$|!!U&eHT}xtyloSTE8UU?#&@=|@iU%f= zJ(li~8PvBZyz`LIfUfY&Sc(*S$ zL>{aG<}1TF_mopInUT|a$SHGr$0>7-GN#OBN|_`3u9h;VUrL#ivsnntOOd7;WlWjN zkTZTuDRXO{tMk6P!+cW-()HBNV$LaZ4#PqXpfKSd;US)9RSV$)_by{^tzuTxM36}$ zm(n+bKWW48v~4DfLIB!@$zTz{BHIkt#>eAjHld0;Rh>7fJRxnA$cN8c6xvk9G% zU-1_$$3Xg32+)W2z=NHTISJbipN07>*#(HH)k0HdxsmUO4ZGJ+HZeJ5i+e~`8QHjQ zplC=~Ik!3o@Hn}Ewq+Vv#H{Kx6D^CIgtvU@39cUw=@IcJr)}Hu#eu#S_|jUt7bnwyssAwhR<$ zRGzH%7&L~!jcf|y<)h;=1`Kk!P1FbS?{PRI6BwQx*n*VW{^QtoQGp~YGbJ^ptY3sq zU`5KG^Wy9PPrjRsn0!K-K$l%r72A~88&6_WhYpv8lVw2t&iAYiWtTC3g z*eYs3(7-!Tvr2*xpcc_{F*zn{SWhcK1uA0W>>#P>JANV{)hH?P_Ei-GXFInQFCGT> z#$#xx|45=sfmlE#n%Rxw$XGXejwjAn(NQpe1zQY!)WaIMnoVfY?LkBINtLtXVBL zf+i$RP@L?GAi+dTSj;(KGQg;4IZi}6*TXZM=OSiPGgdKsiYrx#pqMmxR;r^;m3RIu zs1DyE%G3}{{G8nfyOQjI^g@sUA237OyP5=bnc@^W~R)`1Kb^?TwWzEN&44q#S@P zEr6=schhTl+poRn9w!(l_blEduN^B1iJ2r8Y1 zHqn4OH8<#{eDW0U30Z-u=N(9jF^RKIgWe%SrqZlH5Q|8HC5sT+55%;U7w{D%ykP7G zghQD%r$u5k!3zvyyoW=R+A4k`RE078QbLt81`Y zxhMhAMKRi2Dn!7C{Ftnn;fL1DG*~ku6UjsZ1w)3*%?#jk+j-DkJW(Qx=8?9U|*07&j(PYrG2D)xFscX zXpxs5A%sfH1}Zv-e+0kuD97GHLgL|MgZB!QW{E`54V$w>W3 z2fvsOr79@vOIIq(bd`)8s9brGY_Q1ggOUa8KA82i*WlnMNO_=_z@Od4!$yQ0;zoqJ zt6RH)Y);0VpCa%-y$K=k37Zi1z*e$+ z(~FJLZVJW5P<5*$n_%^kA`_VmsrXEWiZy;_j)Fxj>BNEvyL-=&r!64zs#>si|JYsy zz5G{A03BKZ*?<#@VV1NquP`wI>>V}v0yH_Gel*a?d5&T1nIk~U8YHgZTrDvL*+rSx z$ts}mGyk`2t#{0>c^jX(K&`B zt}`R{!n=vzgl?V(PaW)JUKIO!s?zMJt$Bx1oM6wa)({PqkJufJ6hXZyQ+=Cj9C-hD>Ns{g58>w|V8*;7_4eni4snvf-OElffKQT8S*|%Q**s_CmTD3QE$G4IW^j z`oOsUc(8+>LXH+}W3`PtgUL$u(jK5jP0riW!A*3lCH{A%G*@n2VKRFB?&{doiqM*? zqp&Fp-tpmuQ5JS(HQpD_0u?)i!P^b-JRZxzw2_M-$Z(Su1w=I17XW6dyf_}oBGedP z=#(80PBjsfT_!F41)wjo`~TVAkyM(5Z6f;6nNu*TC{6Q+J?y*g`Wc`thG>u*e1h$M75J*8XHW`xYPEwdx>{KEX zOu#XQsK9YS*$9V}lL`qkv5Wyl%J28BwIBC(_sng2uq&CK?sLxGYp=c5x4!kgzi(k7 zg@}daz}4sCwC;)W4G3J~90W^$vixSKWQ}eb=qHlbi2(DF3Gg!|#vN?1K zo%4_-RO>&NzRYA4&^QP++#uDM=EF!cbOX2`3T#pjX6glC4f!_I&Sh`JTWgGUS92fz zmBnpWCbwNlucd#Zhd^61A+}Rh3cjMOqUMFV(7ghir>iKAVI#)7*Wp>Gy0=f<5o_UBrSy&$oROZ2X9S<%lv$z z{lrJv@M-_PHNltOR>xO7AV!MAPpB;Fti~wd+7j-EOr3wxY~duCIG}jB_Esv8c7!)c z21!uX5(L$yL8iK_O+2I1x8E-2yA<2*xnq>9^YwOt$ z*An}Y-(~jW*F)@wONsr^72q+lL&9N-pLheJXOIpxO zn-b9_%rOufo(85yc}&ysGsN&eY3NzR0l@2ZZG)CjnNv^3_z44h4=>PEv%aEoB*X?Q z$aG`{;b52{B4$^S^$xKU)4>W7Mxq7GMO%?VeY}+gP;JtHxvSR_DNb6Y_j?;k6B`0K z%LN3)-v>SAJK+-q4;ZqB+|BlefYIl+kdAW|xVyICgI&RuSa80H`<1kdEg$a`Jb_ja zf55xE^mK@gkS;of1#fo82~w*B@3y|W-GgZJ4&>cpi|72!3`%W_7xKBvpNp&5DPzFw zXm&0a!A=O9qmAD##`|Ktf#4e`3q!KPGquCB~j{*F;*Y!29<017fWy}tMYRIWNLk{#d zzbdg@K?2t%sjJiE`JpCXp~=q^PT-OoH2ErN@>Q?NSA!-W_b#W0)a2pgZ%2HWwZlci z8s#Lh21QkwS0=5QS%`kz8LTr)4M}=IDum`wm2|*BpTsXYQo1-mL8U7&H(8DmA+d>5mOvNL1zhdDk7MNG&14<$y1;>PJqBmIrCQv1zBvzBPaEMhf~ z%qDVB^e42pI#p)l!}x@HoaMCkruG$p26;ASPT_&QS&`#};2}U$eH_25SFoY|8gb=Xm44R1%#Nsx+ZNr^?T#$11PGv6_|YS2K&g**wMr8Xx1j8g&KvD+Op4Oi{I zb?w%6p7H_@qzmo>VJJaUU12P?pV)q8`;R^o`G;Y-;;{EVRdLd%D)RD_s<=TfwlTDZ zT}TNE(&?;02&FN42imF0gAb^e69XG2?H7JKov2NG08$?`JxTDG<7{~8S3di6k8+AAEdIH`rO|6qX-Xah@DocM$gBY01sZHWhakCMK3C+1CKpOBy`7oL5UI z3V~1s%bfF??aq|Uiw?;M)+DrZVHAaV9>P}12<$rfe5`i6umt>MgH$5~y z-F9cu1A$vNaD>bChq0%CFzm1siju%*{gJ$SF+xBfmi-Bg@U9Rr5$6yD@}-ph{+zQv zra+Rw3`QQaqDr1}Y)ERdDX(ZUb>WPrJDZ~EfSGW>yvKE}+RwBl7)>%`#jYMs!fpIJ z!_9#QE0M39WfK5xNarCq=l9+P?hLJ4psrzBx$?l<)#z_qHQt}eC?W~lqoZL#SvQpg zB+*nEkGS1aoj>4g$DlQgH&LC1U{ViNw(KnhXi=GFVSc14mG?vrh+|aq8LQiAM zOm3<%xj9@{;2^mPzdr_usfRTwNY>Gm%LlBw4K~P|qzqLCh>Yyge zrG&0(&Rp3%C}e$+ML{iJg(zg$z#NaPFXK60cOKYqJPrA=-$|T@FXCc~xxIA5)93pd zwCI#@zqY`}$bgC94fdIkkiI6EZJg2e;Xjk~P-Sy2kee=QX}ao0fD!bS={06ObgzLH z9_n8fjs-!BU}za`8{ULid814!0QlP3N7?G_xhIpoJGnWkWF+Nd{VF)3W0asSo?UX# zSP^B)vfuzq2SmJ6-&PJaq=BB)!k!r7KaX{% zs`}#iF8fWUK$G)HCaIxX0Qh4e>%WHBdQ&mvhU8Ofj&r$P?91Cdg1Q5qm(}&tH*kyI z%;c|0=0J&nG&a+hSFd?WROKxfL?|xVfnotdC>XNOqGnr5NO?+dE0P8J80vAP0jK#6 z)`7jdSO>TW6MLDcQzT|c?3T~g%Un`FTwcB zs2>k=u#4Ha#iqN9CDor!AFKEsrcZupgn6)n)A<2$fKMxLSLjsY;SC(r^Bbp|c4FL(-S3$1f}^p5X)E_gbw|4SkVe6Xoc zXHtbd1WNQ>$~;7j1I)vbV%)QTxsC zM}{&sgU9~Ukj>kXyY4!%h&pm$?3PTx^=UON2%+=ITnXMdnU58%a|ursV1|~G z8N!NdUc#_*#$LI54M3JkeVcj&gNPa7p*aWr#EAYdpjdRwj*|~FcZk?Dwm3t8*h}tl z(FHX)BZ3-OMAP^{LMm+v=H8JOl7`BNppX)3!(X*G3?*P7T!NOGVi0Lo25C_r zf?GNSpzyG)^?Ua!yvnGe(E&hI_AurC5)OPa8(gs`ecBKU{9A(UJmj*6AGR-cMtv zp9Z+@G_d#|nnrAbwB)t<{IxNSqj`+or-C-*f;y>!1Ujj}$KXS9oE%bAJMDZj*3Ktc zQJo}H3L{cceLg2LNfV){{=G~jjw;M%hCC53T`DNKapZ}Z==#it#8;N`@M;W5l~;q< zgB;|8TzQUVHl*i)=FvZ06_;N8k!F6W`N*Z_JD*yA&wP6lg9*^5z7%w;o!IcClTVZGQco+A>rRTHFM8^Llkfr7<_OVBCY1oAyLO*BaWO; zbun;tuDLdUv2k?`ve;8cY#Kve5KZ1TL|v|22=XpIp!8jpIwkqdUvi=!AKN) z8AJnYG045=Ivz5v3Kh;~YfDR`*eVZoFJ9gawF{QQ-`EXxcAawtEyf{EJKTOcdo9D= z>4w`!QrVuW9nroYGUY$UW8M>J$WHv(d&6m#FW8kZWN7OvcyhsmFDd=;R@xD{u3E+n zhBaNroVI&`0ZuK&_E@ZSpT8vUZyw<Iw#}$DTZcEC*0VcyYINI;r>}Jb?;Z+LhPT$=41&k!cYIm*csGMc zF~k`K27l!{zEWQEN$Vi)zvsGR*;z7F{lO6?$J$Z{=*nhKNg}XwX$ntlw z>%!jEJe1?Q+!n|1uR|00^33Lurq-5Uu`BkkpedT?FcFL0%KHEKnno)GMzibo@bWMO zP9K24=?($}DD)%;tbHyB#MDyisxUZ?&pXk-G=z?*th<->-8bv&?7}fo=?6q9r1v!a zfH-x%8&H%2dRC%>G!I=PF(fdD+N{Uf*$j;EKj0K~B`QP#%-MDmgFnuVM|g_S&y2p~ zzV}9}G`s66p`mxHL{uEBq|PE1@LnQnOuC`>B!Ti}X2peO|MF>77lrd04ZZ4#9Je|m zM*v92UFZ@SYzDJXNeiD52(~}`aR;+G(fZ_3_dO9|D*XXn@I~i8>{a|L-iq-)mqUZ$)Ar`g-tQ8TW$& z;~r@h_rw3wVk%|hjjx)AT}1@xD>tdN^>BRRN4Xih`T>k$S!fAiMYRZFJEEv3m-&$w z%>`oXzl9~|HYOdqfzHWki|c9(UAqAgW4-9!fhs;?{bB_3=ApN+9p)UP1ohE)$Le7W zU_>XL;r;{2)@ps2byw@ZNZ=1Q8h$6_LN!FU*h8bfgXJKs*Hkcc`*bnla*k5yzY+iEXrG<2>UdDT4KAS* z2cWr=n=zbO^7O=XM@yjm1Sc{QjadMI;6yIYAO`K+$^!oZ;@b-V@Ry+h!rqww({)c1 zZG}56D~i0LrmfU46K7bAecsk=(sj9gFgm+_i*^sZ_ZE`!hYs~PMOca+w+}ZDCdwLo z{uYcS`estYlVizn#@iosEZYY=PXF+M4tCmQ|H?7-pY!0u@!-SVgV95Ajh>thFP_}~ zBo(rI$pKJs#&Spww*XN6-gaLxWx~U0j)tRY=}1}~PHU76uHm@Ck2okJy z0%&T>;RSDHGeSWwe|;oIZl5h9GmA4K+E1jL)Joi+Uvagxo=DBejucA|grwwQAD1XF|%|G}Qbg}*j*8-7w z3?YbVkwgg$+WN``28ZmNKg;y##W}BiYW$aOso~`max$hI&wjwsDh#xf{yEwv7n{U6 z#kIMIPkcCG0)S%Lho+i09D{qV$vk&IZt1!$E*0y)5=FiYb6V;xO(xdUv@7`@5|i-pM!N&-}Ji2KA4 z_X)G5bdi{ymI7ZxEJ4N25}H*H(nCuzIj|HFy>3T|MfVR4>wwp)i(OCaa7PfSlz+mJ z<6UHC*BShY=0$Io6lA82AsYKM0tWp-8<=^itt4#LOi>ht3MAU7(LQM7^CmJT$`g_D z#Cns870iFTYee;k8=SgVN%GV{e$x&|fEtUY_d{$Gb!D*OK`BPVJTn^Rk;M=-#99)7<2G#mMMu=uZhg5tB1YA2oSX(CIhd}`72G%|v-;s{W7>&<& zM?PW(!RpQ+7|TmXLcIg>5`K74p)ITrfpI_b0@yD~E++s8f#f)}m893-KgXd3u_rJ# z{N$)d>mM+SEhuG3S_hCt&DdUG(g7)@zJti}yvkW8f=ef4*}F5O##{eLkQ$|qg^z_` zql7bOJyI*N#T2!jgNgDMtJj}INn@WO-5~Wmz72DF?6Je!iQU$3r^Rg$x+^XnX*-Q^ z$@e_>b{f}6I1+?LH4L0|noAzHkpye?Y0;0f*DzY*0Kal)c@$I>{W`_IiTN4#~AYx;n90~3t3KJy2 zYNUDk5iWW=9lyV=DLB}gfq!Q$BstoeEdfPt!X~0ro1*=_-!0ZZH1`OCE?yBRAkP`# zHFD`+i0v9NU@!^P7^|-!?V{8~W!lC1QwAIq1`(xT2fx}4ejilOKh(kpXQ4^;be%O8 z4%o$;4e$7EkFVynDTAHn1a29~z^h*FizhAO+WOOkkfnCHh_tYPoz9Sv7y zLpgwOlP(%e@!1iltZ7F)Nh9W?8*zl!Qo1nw`ei>_1mo~sb9k9zmp{=acL(3Kk~4b@ zSg;<Xn!PV zo}@4`_uCV)AP5-0f#UcX629WzXA^PDfzB=*uswHW{a53 z^T|@ctbwxRD4yBYJR5mgfZ|E$!YD5bLYMQhCaD+(7a}jK?!)UORfMuQ9zMpwbhS%c zv$UD%7_QU@)72>|xbAb$>LK?m?p;ot%G@)ed)`i&INzh!=9*M@-ac(<=()9C*US2WC2Y?U+4~P(R?nlEgc}`U_yL=h~a+_(;LacWX zI6|-pN4Ta546uDYKl^8r7mfv|=wFHkB3w0yY3krH2F2Z6&G@Td#Ym!=E2yg1F)SY& zs474%+^tK4x$+aoV61y57JE9u-2z?4(TaPFpvqx zbMt)$vNS70Vpo@nw^-(aSlR?U^cIA5cagD%Va?H!IMXQVA|zRi5mfx0wC9pljB+@L zbfA6!II~#MFi;Upxe=9hWTQQQBHPBPCiZY!Ii2n7aG)}wAaEKXipZLoX&0z$$Qc1& zxd0E!#qDgzWP)HjQVEC-!#68#619NFfSn!!EQM?C3|NFW5bzXiVT(BrDJKBSd2Bsk zAxQvt04xv{u;&7>38t>=%)G?)rGg4tn4rKZVl(}u|8%E(ACx`RaV3{59o=pJc|Z1` z1t>t5``d%lh)RIStuf^pF9$B1HvLbxEc=Y2+UEfnser(6HBg$!h1P@yor$gHra3C9 zu>#4XS}@}a4!zihArrdw%$^^p4nLqeF>AA45%$xp|Cm{?Y}~gKv#T%$0Mo3QWMj!N zmZNnO4)ZJk0lSP0?a@rZiYJ-+h^S&2IGpU7h-witWf#Pk29HFyyg}2+jT$D(k8Yx7 zt!lrDLi-E+(z02vLp2Qwn-Z_dUtY)(O;$%8xTEc_Kc8)5L!G*TW zxFKsHWdkA$-j)rRR=gf%mPNQieIT#R+e0{?v|s zpvf#IgbyIemzj4k#_p9tLQpye9OFlaW3q9ka9<>(a5Iex8cISCN&30FbW!qcvi#23 z?L{Lfa+u_wNhkjpa3y54%Tuq#8e>sJ(VZFMP!uEzxd1DhiekuqG&~XH%G&@h(sEWw zN5rpXe~GJxd=Q1w1BEM^k{W^5$Xgk8sxd?zyk5ma0?k|rV6L+~5UiUgl@_3w=$+$E zNKr{_F>$ygFC6G6gvlc8CeS3^9R%7o9R?aBizE zH9g3_LYInBDH{Y-=IT;JwhqQ1^vkF}* zHO{(}%nR`DM&uXF%DSIifg`0Q+kI^X-y~v#qz0fn&AJpApLD4RUE*rerQ8U)$ckUb zx>PjeV(3!rE~t=svAl@Bt$eSzEqmq;B^N@M!bK^gp1iy|6}l9S)uk93DOyRF0+D)M zO6g?$n;#0JKb(+Cbigq-n1k-C20Ta@q<6Ob^~uid%0N$oGwndk1sD8{9YvZAG#t@R3Sz zZSWlz)Ir1up&6qX#4yUZEZ@=NXjp;;D`7?vr*`z&Bno#eY{INLOmlfKuc3s z7csKZy2^-j3pGp9GDsz@MGozX^D=|SBzNxCJE=)+L3?Q|(&~ND*ie;br&%5NBl3!i zfcV%Hr-9n!w7)ZvEtbDF+lc~-sbE4bm5^|27ZO`TWU9+J(o3Za2#**9^x>d!CSoYW z=^$8<09>=61U1B&rjJrBBt3X4PTMJcn8)eq40eWNby1bl0)VtBo8slwB1LC%e_`zl zTu00Sy#OA*{;oy%mnojZI3lL%<_0wx%fU@TMcAYT?&4+%5A&Kvx3H1#+UWj)#5IelAY%$v6$&g!$E?OfWm{ zQYo**_S)EjMT+WmK*X83!VdjPv%~qE1`GRRt1iZBLN|$;KwZ5;Z(0fS;>E%#G7n3| zp{Y+bi&!l7dj5LpPd&9!?3twXibw)iCFXEAlAu)Ede&uH+_p^CRaYcR17`S+*p7x} ziigw(18M|ju}nMTWm?2Cfdj-DqF2)cONee)EQr!+sprbtGrnIIPQ|Z$J>hYt0!} z)H(*#^Zk5jF`HaAiCQ)w1?*a09SvdM2*TCH_CNmxX1k^uGtw8LLlm}RA4_F`7~K+e zbpuRip+e067;K5A&K?yk@hr_ZP(N6TC4Z%c#CsK^Dc+ZXlQ+kr7t5bHedcyPecP3B zX_~(L3>5c581+DV=Johqk!WyV$@{GPrv14>nn8otZ6nxq5kLSbWN5$mc{mJJgr*&d z%}6t4`aB#cCiTm?i$F2*7SFo5(bicQ02~!~D1?XBVoX(XqNBI7=ZiyteSgZ zrbsa=D=M8RVV+XOs3Sn8wxvbJdRX$Sd$as(Li^n{gwSU z0+BsFjaH!a%#-HiPA%b(&p$}QQZa<83-z-_}7C%8*3;2 zO|Ki&qX5`7996}(A?w%I#YV-*sT%2_IzQ9{&eFjn&_%0Z6-ga|E99k2qXB#@Q;88G zFH`@Dro2w=*DRODQuf8Vrw0Z_%0!nxf-sY07nGcYRfm=mXO){Jo%jqBpLssT$0{o& zte)J~F5t{PiDA8+>nzDomc}mhfgpiHfumHf86{xsF{Qi-AAnJhu;MtZ45@=Ju~yXT zl*62E7aLqx!BuAsk@F|o1)-bKs*~RPG(l2D(()x4TM+eGU)<}a+#J76dOz7g(q=5) z$qwa@cMlzu-UmR1LA=|2ynWf6XeU=U`!Parm4kQ@65NJ8mZbwm-KHUWI?R5RJX*NJ zvPq9+UBhbI57dU^f%aKl`Jud~a`d1Stm*#kSjH&H&bzWb*^jax$%#0Gg;55PVg@5% za<3od@#_|1axZiZtL>Q%oHk^XXKn{)dZ^A1^`k8DD~|VqT{r2NPraolMV{~+fNu&^ z;Wau1;|5Dk2bPLHIu^p*jX?Dvyvy&+^mLwQYS`1q`%brg}mad=4L}i~#{EYIqb$JU8o4qy%jTiTP`L5s`8B?tde3z)P)7YLb^LxWS&pRkQ?fj?kf=s+xtVcn zlD;^4X>cEX{xdgje2&nMH=(`xO}F&w(#LP4t8YyW&!g|JkoZt_z+#Srz0&^F-xb|c z&2yzaG3h+=2n$17;5^8B?uw9J^pKw)fHIcjjs*Jy2U}Lj)E*c-DtTU~$PhS{ZbLv9 zzN?Y}5{UXq%5);gB(xc#KT-%sGU`P{#kjr>yD=LG!Jb2ID{xP@)gn5Wj$U~Vbm%LU z@ASr#96Evim5e7ok;WH89SS@UtCEW9-ac5gxfD^G>ZBV^aIj9gQ`LNPq!A?hp|RN@ zEX=#&54(Dy%1JOv+5Xedr-D{HisifP!Tk1ADo}IWGtgF2Pbj*Z3v3Y&n!Y_2RbAK> zL3!LKQH@|4)d+m7GK>EK-;g6s zcIQ}yeEOwvh;jO5edzSd`oQUzlXZ_R2 zWh_&_qwW=<94dVe2b&3RMuaIPRm2Tz3c+c3f>MRtZfAx4%y^Z`Jj)~^Gtk7!knBWH z2*g=FfDxEvNn_~3@_(%l9@~ho%$$>~CX^hRqI0m^rvnALdUU53=<4gys7j4cYyd}} zY{`sz36buYUZ+RILv?zn=AnA@5Vn}%O*+#}aC9V-)P6z&YP>|vV`yn7kqTLL*_S@U zse_JwiUTX&p(QkR$>4f*%>!JrkeX9D4|Fn1oy_PYN>zx8!;3i&CKY|i!g$|9&gFC% zp70s%sQ-XL#rh9ch6hsa;-Rmo5n%y|el9t!(@qw2qD^v0>ZBu0hL(f41uRlhCk}y} z)agSz%YU*yo{d6-(Y-eWb>^b42@m`FY*7W}(&$m&1Ov!Qe(Dmk6t;Ep+v=c9>od|f z(t<8cKXU2ZQ#jg=DU~Ff4p*^I?t;!tLH={B*?p#+8b`>^GCF{s(YL#AamIFBqv%YX zuY#(W-7mf9BPq!_s1RO7_X9ZEKK*Xo0nj_n{;_*=lJV-H1Y%qS#m`0vC^|KiB8dla zW)4wPa!X`uw_1pNm0Bd?w#wtgA=ejiul(J7{I zbc-tHSQ5ZTxUe-^HxKYZC&&4~yb!_z1tIwb{Rkzc1e_O}2OUrLasXB=m^jax(u0BE zp;s}RYOS>f8=7%SJ?qNONc9;hL!4aEmM17fmKqUy-a;LqVu+%GVOuu z_Ctt5G+6QbbaFZwD9EU+W^!k-|D|)N9jPzIsBKC`4<2bXG6=H|=_jrb`LneOP`q#MK(o;c`GpIazD?gQ% zCtedMP-9E=0jvVCAQax|no{Q=VZn5?gyFKR+i5(cqU|aomB*^Pp1pN$#Y@MCFzzMC zD@83=M9V0F1Vihe<-n=LiB^ZY=&K4OTwsCoKvsG5@g!J3>TIX$te?&ybQsqqBCg6F znONdQ)UJvG1B3;PF@mx?Y;CdNcyru9h`CV^Xhh(FCJ}RoL+0GQRCz}AgN7cLLC5YU zTitsp3(0ZfGf`Yqfw5ykmbc8enxa|0oPpx!ym|{x)GYpVHIW=0LgGlBiQkAMUD zj{HVBne((I)#2z!4unP0_~bosifq>zGaYXf<2l|>EJx;XI=aVPj1&B{bTP6)OdZ>G zj&wlDfxNOckVB!FEPto0lOzE{gEz_x0p+%amnyDT>|LZhSJFaMfE+eUDTo@4hieKO z0^ooEJudlrB*kx3@>OB0TjcsqlExrs)aYccb9K{2F7L3&+rY>O3v@n@E|;JGrlymd z`p+E7(Em;n*4X(r{_d$7L^LXIS;e7f&tBPTPTVfdS%A@Bh9>~7aNH7=@K^*YOE_>y z;0duQ;r9I5dBbU{fMHPGMRwW6qst*f)M;s=ltqPr!HUo+(jnCy_!qCeWgE7;Dmj=V zO;!-g#bv!;PBw@$!`juevTFYY*UmR9gWXQ?v5M!hyxJqW#AQUml{;Z&Jj?|?kU-yy zg!Zc9mGPtWhv`%BObi||q>8hFeXpxeSz5f)P6-p-1r84I)B;}f`@Yw)L@52L{g?f3 z+A4ys+CS(n?WW&<*!`v_&S@cl$V|pn`$t~)HD^&C>Tl+i{dr{6+q$(m1MrS-A2h7& zI5yrh5mrX?GrGi+yi1`eL&}tN6SNe!Vn%29c<{B=S%2P})Z%RO9ND-OM9Bs&O{n;o7z!9)!v1EA1NXWhY!#X;@-g6GpC6@(Q) z8jKKQGX>Hhv&!7<|5LPI0mrxwcmZylCXv)wu5D*yvNO&oJW`(NIHOS2+Atc~85v2X>Bg2u<)@Za_R)4P3}4+|CyNi#jZfA2sa^~> z){8+NlEht`4Rd2U=oUQK;cud&#zw?^Lu6NoPXe14i}gRAvo!Vk7m0l&FdYmAHNTK> zT7KxDF+^FGP#j!sB{-smzoC0-DsEoz8MDoAhRz5MSk0FJPqbsMkuFiBhuPQbO|>ZzfUj<>_+@05Ck^I%HG8^wKovL{ zYmB>T=I?$tPb%&*`jBn;4Cxg(ru%Gd9(m8Z-`#)Vi5*{}lnG5B=Ln%GOky6k7<9vz z*=g5FJR(71=Rp@>1|bAMUzi5dgpxP=-`<6D$*)5%#U#x=1|~7qIvs2AB`oc%D7T>2 zIjq|?Va6|IIQZDwhpyZd-pD|6ixzNhqpJts;KN=4ho48AFnSlLWBS%P2Z#KI>XRk&arjK^Y39WHKFzK&nwYPjV5_yk z*=7b5&j=_+Ik`LKw|zbwSh{cW4s*ba{s})J_n+qT94}pNPBM>^7F(UiIe#(JPr_l? zNS_R)HKCnhYw$nT$q#s@fWcQ~dJgbuKg(IZ-#f?B^{#Xco865PURoK1oxxW@3ph5E z4CKEX8^v#Kyw%H!x8{a~D}O`v?NAmqTR+@5ney8a?11}j%N1;aulP1KgFtclqIiL| z;%gvdd=R_LBMxDM`LKP>l}*F1#kCEE)^Bb&V3+;7c`*nF_nvGwZ3wn?vw^Xti;IoW zszXwMY(>4O%(aZS*ocs+aC*?uCeTW15Q2{}T9BUhr*4+bTF*wH?2Bn+lajwL&XZ&C zU7S$^CFtv;C&-I$damvgf_0?gVFz4yj&lRp-M0}%9)t!;k0iM{E*j!ji7l)Qd=sWs1fHvr&&VLCO(BBM}B+ zkjx!q*v(78JyNf?57Tz1c?stcP|?bL|416*o^_z2+`p$+4_tlhVK~w{jyw#_!}iS~ z2@k`3kXJ;(z_2~}SE_(L2ZS$36o{&e4hWb{prw2)QZ7E+4O^)EKPj(Z8}J1gZmLcc z>WmiJwkMz6LcbLT?EnWQCxC;Uw@EAWkwflCa@c%u9duf>XrBh{7XLC+ddP!7nIj;M z0c*4%rk2TbS&|SJHkA~V6=aCWnOS=2!qiA(Iv}kKacb1KMiB{y|1wN)QNR$Y83Ag2 zdEh}lp>b`A{3pF=)j9MApa|3Nt8|ZI+u*XfeLv*g@qi%{fm0MR zl@mq%Fs%cGs)s?Bv8F!|%sFgiEAQS$l+uI~6lCQ?F=EEHgNZlWuc(PBuxU|kyUM?e z#uiv-`|7_#ZOmxh4|8Wc%q0bHVYydyM3+}s7C=a*DE02s7b30svaiRHxKWz!zwva) zR7@o}5v71tVdsdASH9e*=qBM+}@Ff(xWQQZipGp{_FSV&5I}n zX&DgSV&w}~5zL65i0=0DjV^cDJo?Rhm2{7h8SS&h2ZmG<%gST?8YN^5i%ivc7dgTs zX*0^kxLYoUX5!rb&d_rn$}$AcJWB1qZac4_Eljx!twCB*P)IABuuq6M%-)aHV^%Z2 z4vvt_eFgX`FC7@E{;#3rc0afDNZmcs4|YCYYP(f_a@m%`+9O<=7YS1Ba9jB5Kwrlp zE=LLsIKU?}K_s{$5f(~O@`k{TpzEys_+?|FcO+tdfapCO^c*z`{8HouE28%K5lA?E zh;)Dv33t;rMYD7BfWrB&frNut9SJ{7yrrxi;f92a33hCRfndi@=+(-`7 z>vn=o3n}jbf(?<*1RDi>jBTl9bvwZ(Ei#BRH~?3~EEpmTV2=yX?o71PxI3cVZ`A*mkVQLX7#_dnj_JtCWU74MVjjmw%&aPV5ZfITAt<4thFtWF8 z!`_yfqjbS|!q|qTfEk6%(!5Zes|dEfq@en4^FkHUDl{(m5pUAYqIe^fTKulj38T~7_LQXk2f!Tw&8X~YSj^~^1*OJlQ}mGR|%6D31+m! z{qczRJ9#H-h>T3G2I!Jx7O3a;=r=m-PU+^}+1;*-5Zk;*wP1HWs`X?+_LyawVOJlP zY4QMNB%*@h@rY`Px)atJKE4d=(>QvFY@V}&EYO|=`hmlYiT;r|%!ueCxr>a5a^Rgo z_JHQuXnrC&A+H4*K&znq$t5wnc~D%>`q2bAb}X+i{{-cA*ziGOuSl$}kgx#)DX=e1 zHpgAe#8PKWWK8;l{&cm&v#j1ry1gh!!UzOnkkx}%fW2{UL{Bk$VZ_GB>Ix2_zflO9 z1s{!NEU(XQC;x-I?%)$eO)~pwUBqtQpjtt|3Tg$ZhZAj0zQ;S z1H^m}^Ry>3aOLA@Oi(gxBKAp1f8Moh^!HZVZ?!;6F<8LWfcSeB0O=#@NgCkx=#`FUdRBL&+Z<~^vZJVr(p z?@2`BTZJTm<5vb20X}NbX18)jo{N+ho6_xzmN$!2sxq1kq-89;9!Z`Y39rGk8mt&h z0}_zzv(%6)u5Xv86tjK;OBfEK^IOjIXwxZ;+TIX(9G|&swpimNi)=*Vb3>>>Hf7XEEf{ zcDo$o*K%Z&I?{Gp4mPPoPErXSa9}GNN%Rs#m>cGyuT$F|DN!L^)(Iaq5n_szkfdCF zBQ?WAXo?;|8aJECh^8uw+BhhLl*b3RXy@W<>QV|f;eCmf!O_(F5>ax2Yf+P@=sH^z zA{>=AgBq27t%` z1E}jyCl#JRM0b!K9&rf$`@V6YT-era5QyXmCp0dZjwC+%5@~XIqk3TuSM_JNQ+Ejt zx2ps?NSDI|2Gm}RVptShdJwhpMZd$;9M%4DGm`|`0J#CuWR-^o$90n zod#F=Rv?NH)m>6=#&R%^BOK5Cc<{}8p7a`irI*A09()^7?;S-w0)#H;w7+!Df)%5j3RV?i1c`U8wH>hO zGR*f#!#lxAhx-Y}0bXLNUWZl%jQ54{iDvIA-$cv~#sS>pmMFaoj6-uab~a$V>|jiZ zf(+wuuwo9%uq8jJhb?ZjKw^xaD!CnWlgI;AhF??mi=-F6;KU19bJhyz4Zew&@J$q? zSGWuSE#V`o<>9ou=tcj3vDyiQd1r-3pcp|m#NPH%4G!PRz0gAG+*Pi=SK2mPlw6cP6BVZgA#3BKR}KIn#v0QC!?(A8B4!1EZaw@8ph&5+`|M#@N_ zaF(zfEP*RBQzQWf!I-DOQ7(-L6wYfyq*6H*F4De^-!9WtYemu<%tAaO=2q`Jk|#9m zM!Ei9!n~gP?cbs+vupDm(I!?0dGRbgq#g5zlX1-z_DqWDqf#zI3&DdpW@U@|($iYg z%1s0VSWG!w7LX_eID|}SK{Ec)Bw|mvI0^?Eg7R^&K}-5J6@)Qc4I>_Z(OC@#xq|j& z04X+`E7KK`LgDV>@D0~;WuuD6`=KjQ$vP!R2q;+}!W3kbQ zx${_7)P^{n^%e(}dd`|lVfCVP^VU=O1gT~xl5DA4mrQ;8`Zm|T%P{52?l68tD2I47P`T4WS&q8c}H zspC{9klO7AxebHyj2W{Vy}KCeJmdK2BUvX$@zKft4H;vU(ys8WUfo8l?95qiBOZKD zaB$Df#?hm_Sz&LaZq3JLh522~3VS1UE6zeI2;N24vgaWDTMF&e-DpTUjzP&@p#U<` ziuc#uBC(XNQLND0`H_JAKcJ8Tq%cGTaPw+xqYErUyqM=g%jc1u^)GM&JMyACgP+J) zaFtkEdQmnFK=2(ZrFO_Lnw3N|M1p6 zuuf@pN4oZM^k>(s;>5>}h|&z|^VOBh_6O<`f0w=MZe?2oW|B#6;-pgw#C+-sHun>WoN!YErZ52?!pCs>b(b>n= z2Ad=ck;q}_S|Gsf`@K1iKorP`G>e4B`vVDgki8rjxP#QmDSD9iLD% z>?}v^0y2?N9UeI9g5B%;0h}VL${6(W!j^g&D&;^X=EbAiV~U#>x9c|p4cbr`OFTH% ztlyG^=9fq5x-w-`5;S$==^*}+{I3=i9NDf_0w7uMhU!U_p>X}%wy^z}isk{73_PA_ zT-YN6Iyv z5vOg^Os=Z9vrO=M;e%*OpY7y&bjwEOx6HBTwdqyhr`*8#;)Ya!dM^m?5{{B_hhL%$@g z2g6}=JkI!I?{)fR=k4RM6jw5()e*kT5c zHW;3=p1B<9ne+$Nv3X2UPlv6sZ2U>wJFR<_*WJa04|V|9PS7Sf?*_|Q;^-kmp;$6U zruU9OY+aXh7CK^;7-zSQlnfL+mOnEai@b;#O+go71QlSs6+})$sXZw)yJf}<_5N&A zW^6&X%+tzN!aT?4Gis$~23Mpk<#^y@>-v!-fsr#oqgs}c=uy!}8T$(_z0ZikByd%}J zC`MCR{x_3jy?Lb**+&UsqQqLFPTp5rnCEZpj;xfkYF9OIq!~}MvkZk;G@3sK62V{% zu0!X&%C&}SutC&a|0Iz#R&g-p2ar{mg;GRTAF1k8C#_1~bQq;$#6qY7lQQW$uS zl)M-Kem}Mkhs>VBm;mO`HP%|FZ`74j`48w8iO7@2ikiXZD;x8Ufeqz6!ZJs}K@($A zv)DsqxN&cTiFZ@;x8f;f5l$d(Y7+QDp7PuNORJz$R;3I1i$;QJSOIjO$bJ@?8KmKO z8ex!NMefKkT0@X=)KLCp`AgMZD{@cJ2eDUKpfnZ+j9`Y9>@n;j>=>Y5Uu3wTQz-Ii zu_xe;aofXrg8b|<7i=ivPd*fpBQ~4GI1d$>Y;tdD^rZ6wM27Hlw zD;gn$vtP0H>Hm`3kZ&WkLlqOaNrMZv!{`N)N&{tkf6zFpG-Ndv)44_uh%)>}(5}`W zUdW?%Y=!C5^o7x5IkwRrgew+=K+>c=?=1iO<#;nv zvKG(iLrgx93?1^@Gpu)nb0GEVy0LD?}BI22vP1sUf?F<_Z$pV+~ zFg|aCUiE`s^@HYGH)wBzAg(4Q06@3$y3O)xuDU@d&7`Bg4mHuZiE_d|RKimhRxAR` zZgmcYA>Ga~ndf;KJgP3Cd^*d{eZ;l?;xMBFC)wEyD$~sf!hLud95^VZd7~Tp^S2Iv z@}tJ3@w{Wt^Fs>`Voz9@QVv@Z%&fz%E(|@(lG-KQig*(K2EH7){=neJ!r_se8)M;c z`Rfmz?8$aEc;?>&IqxJbP4l0{l~bQBz+p(b6~7v=-YUWTTv6E*8m?$iH>8hIohd4Q zx1_g$JT_5;K_6UGkyv}rZcByXMD*b*$f;j0tyyc66X=tPl<}lCzfPI}Au;s_ufoRQ zL2MNp&b>8Z&ml8$xENiRsN7^@Og1IE5HLcUh}dX0LA-9!ec%Y6WoCM!)jtM49dNGCEWywI^$kpf)@4_&U zh`V60O_>KW&h=QfPr$5wD5kX|r3rmAO&nGL(Q2Qj!l81TGv5J^!VF%%H-uk)S^P?i zv*N$i^=3@%Sq=gRs>&QQ-v!(|V>c4gSYNm=4GRx6CqN~bJ3Qt9_9u7mfav#^dLC%{ zIA)p2`<*s8gc6iQ>^E(IL|TfS^;hSCr%}2dM=L@q#_`{rMqwaHv|ZTLJfvglpCdA}=yr!rbH-8<4m* zCk)j`gByi2b;$ZIz~M{6-dew`5a(SBER|JMlhs`L>Vk?*7AaeB_b)gjCyR}Pw6STvw!+G3vP+P3OBLOVJ!^1nT;FE;DRsa4~|9-A@ z?_WLF`&S`_#C!myg6@o}W!1&zWVl;^!LcxpZ<5#t0I@*}n{*+K7n-EGzTs)X12IEp zz;vZCdrLHG5s>FWcYVz8&QD;MWS=1giwZF&Rv$D;=(GNSHKf`S$<(z04fpAio-}6D zGrvY*e}m7HKxKWNfgrRQh5j9^K{g8g)90DmvoN2mB8@Qctr8Ygf>8~ii$|K6;uS*308R?NHl5&sE;jbjwrcoMMxgAYZS9XL z{UE-(8`2WP=!tM0#9-?b#{ED;d4Fs)?dSBsW-z5w;m86Ryik)AIm`3FSt ze1W_t6rn>iXxUBloV0iAd_{fZbA*rh{I2 zMQ=^N#u_(|%l8$~qC58eJ}J+A96>_~@jzBcWD#nrI4vjMyisRyQ$SkM zKz)0w##g0dRG_)a5D6NrG>(@K;x(d`K0c$X&~ZN$Bx@B%pCyaAN^KGZaD<{g#Q3wq z>H5HadGHp>Oq72{5YDnk_)X6w0V5f%pm}UywOtJ3E>mEzzZk_CO~(NLO!~QwA0Cqs z4BlOx+`p0D71V%})jedCIZn~Io0^~+&RM5mbj5T6;%r@+QWU#wGvN+uGiAzBZ~kUS z6p&DPTs*bqfYJmdYCs4b>}B9du?friMc1Ww#hi?ka5U2Vs&-n6B2_m=aT$8cPFtg>Qly zxfSf1VKMO^z-l3h%05*@938MgMKgSo_}F-g8ZP5OQ3Gl_AmZ4BcqC))$b=a0d2Uf- z?CU&|Og%a~g-IhNYv=#P7oQr*(qnnL``&#jVaInQ>@Ol=YmSQjhdD|-e3GRN?9wdw zP%)9yqL?1WCE z8{?u;s$Znds-adsiD~K@lU(G@jKz^oxu{e>RjNPMEH+c97C0{!ZP!_nu%U2a74kV@a$(+G7A-S0Bb@=zNmv9}=Antr+C`MV9MRpNsKO65cbEC@);- z1A~#Hc|>RJ6LcR>g$pCL0L+NN>m)P^3lm{4+0UH4dyNAno7sCeYnt$joS`Jy3ozfn8h&Gu@oghk9Z3D(o!C-CyNfH>RqP0^i-4sNXV{8 zR1}&X=BH%z-Ahz-ucx96(!K6mgO(&?rMOnch_WaIDkWr+ysnc`7(EOWIhly+$rNp| zVjFB(Q*T)yHtmfq=uTdg!tUC%C76u9T46wg>dNakr@&q;G7TunAK-HwkpE6`W&QEF z_zYri;Y9_jTDQex9BG5;^GRR~3?JiI6xm_1fmMYdO|XGsGO?^i{^0InpvQFBxoR_d zTp)#$_sP#~b{m7>NSBE4xXTX&2k_Iyh8Ln@mZ-9aIjjqh(g8!4@@FF~7d;$e z!T)a(qG$c*R2F!|1cX{df|nI7uizGx?CZ-@pagmc|0IcNAPV$XGxQrUj4Ni~nWZ@bgaY^R?Y*SeYQJlD*24$ch1k&sYPuy}RJ zqBZ-ks9y;_raw(ivF;GjFbDyT1?Nud8lq8oU|sLDN9^LnX1uOQB(5t$%E5JodV=Ec zE|oZZN4y#$>7rn!I2P{zS!4ii9`3hGoNyI`yfgAW?}G&SIMiMyAo4v-LX%dp`loiQ!llO&#i&<80b%~J8SXkV$U z8*&f|A>cnA453ioLOKt6ziZ9+@Zb4`;m*2GF3t7P|Afh<(p%N$Pm$0A6Qo}iy!H@ za;8GfEbQJ&z32G&YoGds-^DEpE7PoXfh%3jta7NC756Tuhpd^kYt5`v z7Sa|>j~%0?;yK(%fQ!I^u4?OF_H?4vo_kj})jgN>fa8MEcQenR`yx%BHdw(TG%2#^O%gs*^ZLveNq) zF=M^Lj%-6m)}bJVjn3k%^W5jH&CUVlcWKf~N4YO42@fkFv2}nvKIArl*$GBy=0MPj z9Z`xQi5Up)?GDMiT1B6G{NXyi;|odONoG?-mh7{e^@N&h{l$(@n=jYw#IK-6D#qUgf{31O5Ny?Y;hlx&>!;BxdNIX@8cWOeA}l?W_aHOH=QACQPe zNy<%_5xHJ$Mnjny@4B1rjo>-EGd_eY*25E9S}Y#M)O3NyqJ zE=E+e?YKxJFuOJ_-}5#^#O9|}O#s@}c4}r;LOERfJsxV}4dmovhlhSWgoj+ZBOb=s z)x3%=n6MHXWBKEZFW!v};@+WsCrmsBQa7tRAfxHv3Dgp3a?>xBA40zVs0OorxWWQQ z>WE|B54Dr0Kq}DG466hALU4d$L0p*mKvKuWCyr!Q8Wo?g8q9HZ=p>+!p=tKvdTbXP zpFVb^?nkGOVYG6Q!Z8u=cpbb7Ziz)AOj(~P%gD_7VgbHjoT_Ajz!kfF!PX?+mMgC= z&!iitn(ETe8=L*PAOEFSb68-y3ajBugIuY}fsG5}qk=M)LhtZ1adJI=y!hUch=RD7+SY%AG^U&t8L zj*H>aqU`A2N*eJ?bLd3V)sN5=ci;MpGfmh&be<*V1IBG9NrH1O?LYoeuB3(x5kYUV z{_%M{Rd{|LEhg(9nagwpgC@S^PgIl6MCb!6X&0YZk)$zi9l(El4(Vw zc=v7HedCce&}EA44NT5dj1^lhh&A=48x7%zWGbTPD2ny6;y8SO)gENUi5Sp+;(wp` zmm!5L14@j-2NHN!EQsPuz>C+!p|gdsJRABPhlG}QTm$kcpEMQYDg z?+ihNI;+H*0UOQkw0}i?%GO%0V=>PHwXal%1E`tt4HmUQhiZAAy#&7ns9z{T0>`6d`W$)RsVn@b4KQ zn68~^B3~Y;k*qf|=L06Cy$OG7q!g^<9splEmVzglK?v5LD-|+mBdP;Q5^`t_F!J4N za1LcvTfo+^%1D5y45@s}lqdXbb|X<@H-2o1Wp(M?PE0S)%ZwH35|G_@3#w`UT*9H(0pqE;^dk1C&2!A9f!1+3K!9&q#jd4TJvnPM3JTUA9W1QhE( zBxk6ukd!&FTvdNrjO)Ree)IX$GB0%3bQ87o2KKq<~NV>qd%uK> z#*L$pz{r<%64!VLZRrvip#unDL#Yi+;`&*4oG(AidX4GKIAh^R z-046y4eioQyIy{z8qs;z-!P-hI~WEo&_t)0O8Au=8t4^@yPZV%3fu#W?09rzhtHA1 z(nk)Tn7(V5onY?1Ekrn+n**U8E9FO0s17LQ0opQymM!?xy8|3@iGfI&j!hvv>a;(w zD@Zgng|^?Fj&q%971y2;w4*zu6-L`05wZA+Ue^9{&D6yWbvu?!J5Y znS1M@V#6e;jzIYn9}G&pO^`?cYal`Rw9~1)ADCQgKLFK5;%wk8ktC{A#je zpGe;j1io!`Jh&J1VYN;@RqMaX3qXYG{b|ILWX&<@H<9l+qPL18db!XV!Nh551eq9~ zolfT^(aImGIw&%Ld5(@;4eV)aKNU67N9#>_!RD9HB4j&ky#;!4Z}*Lc(FLw)-A4F1d4% zd-7Voy<@ey+feQSV8y)wtZe^wF&+#_*OR6c3&?!yfb=-2+y4rI#DUfdqQq~(P9i5Y zL#h+d-f4O1f3=I&Ty1~rtMwRCY^PYZHyIT+8cbeRMN^vOod3!4FVAixoYZE4`oXg% z;2dXt@`I4PkXWW6u^=*;B%LJ|sVfat#E^{2OVk<)Q3HnJMHb#2H0NkPQue{dwnS3k zC!&~qr{s_cNGv;C5gE1$>wi_;QU-W5_9vGWT!_eF5BzYFPxz4}rkav4-TTY-PlZgF zOtFeSi?KBpduc;H(K!Iqi8=9wEJm1giYQ4#*3;C9IohKCd=}{ubCf4T%$W>g&LoLB zlU~f33}Q~)yPO_U%wfWBZ|V?pkaZDrEJG8(#3Ly=0G<-BDBu{j%#bL66w4qy*$4sF z-VAXrXCy-8|*HGXT_ z@|OodD{Ls4@sLzTGgNl~bos{olm|c`Y6s2jb+r2v9VQ%oJ{94BF(Ont!rT%r5J@n9 zy4(f)>))GkO7!wSK+U(^ihZy^mwcB$Fr}O~JFvbey7D_{ax6-t(!o@@`kJ;Oa{4vk zbu4A53PpQD@T`AyzA2+y7vx=tFaK>X#u4@s1EbkX>vIuy$txECuvmX49?OfEXTY(p zXoxD{=NuDj9k|I$*Ev&;uP3(uA6~C12X@1hlFl2`LzZ^!Ts}(3;TBn*X2}w4(WC;& zxjR`uLqy{86NisQPk@ScJS(8;|6d?>9e`ruD}{N(flyT7RH5QTK-@iqG#*LnABp5$ zNTY96_=lnmQh$V*wQRO7q%nZ+@lLK)tmfmPnubs)rAxtZd>RJ|DKLvIl$J`R1qKra z0~YUD6qh5JZ^nv??>P_*R|jD|l-WGi+>TT;_kiXWGk<)!{Hd}(+Y%~*aZAErq;LcU z!tH{(08KPY8A7!w6TMM;!T;&UT+M~BBej>AvPUmH!{4(+9afKmd2FCdew0yPAy!11 z4*@QgbzlqfE2bP_&2A)zLF6GzcTs5b0M5TyCnSw=Oqm5WFMUzde``bVDUb>}^>tzhJ+ zmgw`}Vz)vI`xSEvf`0iM*;I7{z&y5Qo<(qK0;q;64KmF@US(tF| z)D=o?>gp%3D1&(N=_l#PpYKZDJn`JUkiXx4*Kab%+{2sbA%0&@T`-qCkgC0Sm9cCJ z=En-27u)YNt_xS%kN(!s;dwfY-{(??&8Wjh`}9T&pP3Vd1-~d)@RX^ zD#-+Bn?8(%1T|B*qA*K;uy_-8@(gaj?M%KfZMRpC&B}`ZN;bi?{f&a(Mah2!ax~5W zwi+$VU@h%Gg1$y0i^|lhS+EHsX$yl0A0rBJ>MsMp=-uU=Lb~Dc3pNxY1qVA3HD@)Z z2oKXlz9DKlHJ8LdjlG?s$Lg>y1i59iMI5X~xqX-rqw?#vCQk*V&IPH8_H)U)6j&33 z6QGC~QVL&_I?kQd)M)6*_&7)INMw9;@GOh-vy;vp6~%!%cz2&o;XteQ?*ratIqCk> zQCPMAmlun=`>#aN!Qq9Ig*)hwRr~K<4`UQX`y~coMakcBAT+63oBX}pg#0n7zJW=T0l zZ^qIvpQ3iEv@2K(cUq!*X|CzrtP#Tq(#5b?wLwx!5B6dgsL313<$qC)H#m5N*YkxO zN=|HV+6h&7#1Ip#sjko!qo8WXd$znHWFkVN0}vLpl8>RtcY`J3gYjZ`DcXOMDcg?I zoA05=dxw&d0OP`A*e2cbeCSKP@cMY!hON({V-Cj>8MX3y!I4ziel9(LLUtVOuluT| zQWEmJ+%RQj?lgV)>wi}#XQm=%{6!wp%|3Y5fCVz2=BeJ>K1tqoK6G494tm?;D$Yy* zp1kc5OP)P%3$ZJ+escArY#b|0Z0#z2gf_@)qUwk&9*phoW? zcWfQ@hH@$AxJA4mjZC>#bxGc%s{I`A?g|_4vKb)bsjxBU`bDU6Y8)|CP&os@poQ#= zs1?XM=fcL+EoQ?>h$-d~K_E2Z-MCSKmV->Z1GJ3mp=C`5YB~1$9En85f-AgJbSInm}98ZE%c;Q#$&KuPzpN{v#I7xSxwV_JJo-S_zLgZh;4PL zY=8A1F*QA&pqjgc+%{%@cEd&$5NEl1AxY047&vOLJhEMwyrmEd60vk6tKCJ_YZP4; zKSu@s-roY%QQ?$ce8Bxjz37ZewBv0#8W_Vu9M^j`(RKu;vtbUmg!zE)W9oIJTBxHs z*lEb9QM@-)Q(m48;!K?yCu0{r7Tauwrmm%@^KwBKJ`?eI8jrp9KA*hy^-Xl7aNCEd zV^buD!EaAXNJseX?MIt-*QJ%VpsW!xp+c@KIheHh(RuDGOxkLYtP`5lVA8IVNxSMz z+SOpvj(aF_KBP&T+@H5oo83X;Sk0b$N%YxR%g%?NOI&}Zlq2@^J&2@a3b~cA!&G{G zn_^fUcub*|NY)TZ1j$<=rQ+|CNTS|1i-AbiK_p=&5J~IDA< z{~Edwua-WBJfLX3{I10TmfZxs!cN$2Uzz5F!jY6*3igcMbwH}Iar$13Xd*g~D8Mo4z)|UC&P7p$$VxlGaj4xG9AhKl zk?fEMjD)iQhXE->pSaA(iz5^p)2$<=o{#7jP-bH@xe7up9*qJr$Eb@2Kg7OOcZq!) z8NHg?$Ud~P9Q+A^UMF@#4y3CZn+FPy3RFrJu+)v`G>*GF(z{1-ckJghCmi5uP9q{e z=A-w_$d`Y!90EOS>_0(%Q!JhAhYc|y_Ntdd*_lRt#s)nFhy3|*)Ms3^7Eqn#Pb)ja;)R@!Z|B zMG#$9VZr+tmtne5s0BT#Mj%o{>BZZKsAn&PObLA^G%ghV{5T(R^gwipUssLzfc*g* z8S)%28irWM&m-u`I~x+!1jd@MBjA?R6Xa z6(;vofS}Wo4(UskgNe{F6oO=Ow^lDo@&YwD@_zV@b*-WLLK`%faDJ%{8}c=rUh-4; zu6Pm(4gn}Iu~a$f7*@s*K^;psq-aeoLW_>u*KV;LenAUq8nKu=39xjuEqp6D(=0r^ zN}Dvp#ERn3B9R;D&SXSfGmO()PrsXLbXn@GwkUoqd^14j};F(85WHiYtk zybQuj#A3AN$HkY9q{ocQ+X_)Z8R4CGX6r}lb3_}>s>#udKfZUDJ-IxvCtJ{>-FZDS zRb-y|9k^Bet%*{oT%LT5u*9ay*YZ`ChCO*o=?4x)*1@_(yDz!xj?M9?=>{qZs6>^f z=}p3+XKr~!XSM|ph_alaFp64%?ARU9bE(#f!7&Pcw4s4c+wbJ(ssVTDHnhqWyUl$A zYKug^nBh!S=?Fj&F^IH{G_SIbc6-I8vkW252uUw>XG+%#VbMs}<69^q@hudQ__nwb z?c$9Nfwb7UekQ)JQ(5x#Eri2_KJ@7R*%3;GM^ERHZ5ZP^{8AQjtZ^?kh{5M+U&Vyj z9K4Jy7x&dl{eK5sgm%t&HwDT`1^gEts2B97SHFcOZ$X#QR-u)Z%?e=sTdx1+eEl<$ zfuT7Ue-gdklT8DUNZMJrbr!019&O`Tuv8f)7T;;8IpX)V62-EqBr#H6Y`&)P$6=%&6~+pAP$JEW;dWKaFJ=kMU{2dRC`qV>r)1s@4dS zbR&pS_%=v+XI5(b@Jm3f6%zXhmoauipcGly1Qa`%-2wx{tP}a|84aPp>4QGpHQR!J5ErA1G>rF_g!8;`HE?O!C0=vZt?`Kh=n&^dQkEJ|x%-WwxZyz)5j{SL^po3Uv;5uLzUJwBQ8+GCZbh<{9D3aTf;P2E^3n8%FH#i}w3|k|Snh zo6n2&U&c$0#`d)SXqav$(=PkvY=sv4i^yjM)@`J=Ajc7yK(M8}6?l z8-GIki_r}8zpp(;HI^I?^+WX#BG^e#(wuDH6k$Lv98LxQ>2Tu88S%0N>mc|O;1F|$ zQvtaDnoS`z$X*v3>|B~lZGzy#xYVmK27sDj906xIyjXbhx8|??DQYwm$XP`z79V+l zKE0?C*ZG+Ob2MS$m1O^lvYdOML~+e2TQ8LU(_C)pK@ zHc)2fNl9x+;B@DXidx}Q#@DH?j*>xcOUX>_sEj#a@JesKgy$gk|57J(3FnBwK!YMD zOKcNh6rBQGKP3b4^RG=R-G{uz6|v8Bh+T3H@`B05OBdpGys1uFQa11btD5EMt_5F> zYkdM0yFBjdd0~+jh|IxOIeL>z=D9Ul7`<><7-cf<6)Yq1WE-3(EUtyCSjTwBoW~`= zxaDgS=i%G4aGoQX7)BP+k#soLa*xD$4oGqp+)^h^$Qmp=@sf!ID@iHT#woHIDKdHW z0d+o_!fvcPr>4egWkE?o1H!K*p23OZ9-uY^YIWO_w9E*;Ku8XZ;209X4Mr#jt6w^l zE0EyuD3K)cUrrC@hb1*|dN#&^^43s(O<~sU-NOwXfY~ECPg$<=%7!TBKlEY=v;B!m(OOY_)P0 z*kVWa8`Py$iOE#quxy>E$wJa~Zz6UR$L;Rfh;L4hD zgLD9*VFB+)YVCRqYAu0kN7U?gN>;HJDGBUIlU$A*WUT&;^e(u+Z2@KZ5##;W;$Wudz_hgcxn zMibeseF(JRgb3D6p@QwmvAXN+&YOApE_dW>b+hxfl%vJBZ7ZGpeyWGiFv%DBBROq-KF1Pla2Ni zHEzI$R-w^EJ%i4iE=m^@jOmJ|G2Q%X(-Ng*9i)tNOf#Ro4Yxi1d!{YB;M-f+|9k+E zKzEdDJ~!OUv-Oo*dPhmmud?Q?&Z{rvGcc6l&*#MK4qFsuEb-&+}nvLxoI}i2~-gO@_LI93X~im&q(*GT|iQM>iQeOf%utywWrb zr@%H~3cQQ8dQ`TKGwd;9AVj9Au`KLnsKn1fP5xq^pv%dxbivf}9AX(*<)8thIrM9i z=Wvt-nGFkqvhE)37sL(M&B0fuWzZh!9DF_P;~fk+4G?-21#)e=()O%a5Q?&f5g?2I znt$Dm%$J1=Lpug7@GGBRJeME%@iNn6 zQHa2-FcR~hZ#A_Ljg2owsB5)yO z`gVoTkJK?s$V)Py)FjbEq5PMu#=2wM&Pc5}$viBM$5Vxc5UAxa@E2qaNoypM=9JwW zyWKsbc7(vq=|Y%bTp;YxSqLS9+YP){3?W^OEO4<&5gKiZA*O9NkC#j$u*=TFBB+Ub z@}Bmum#G@EN?CY6daqJgA6bABhi}rC^v!kO7U`Rmlo28GB#`(spk*y&Ux339N|~M# z-_p1GfT#_~lJ~_um1ouq*F^+OA*8477)(g`E>38Pj1rOwK(w>Ir-w|FK-&2hF z7hn*pv$3oY@#>-|bIN+31g!KFzGA=<8g2v4M3LP*5_arSLD(Us(xJCy!j8Q}ibiuf z$|N%Tw0&xtRfCKXyw9kqE-og%w8)sO_%Z0)UUMwaEIf$GcxF@XA~rOMRZwOqfZLCn zyX4%-A7o7P@%Wcg$D&y}5)Q+N@lRs>``!4dym(;z&h5?YQzADuJ|^TL(~Q>4j=PT1<9GjcjWV`sj1mC_j@B(%zzeyj2dLnb9*QBsi|K{IIAm=*Ogy80qeI|3`L0XI|2Od zN>%};NeoU_m=|+$Pm5U(iy46_2N#n?vsA<+7L#Q}wH8765CB>eks9*xXWEdJVlAx1 z@yZt9MC0Jxm$(>8CLj?1003AcgF3**_S{|zw-+5Wi{$Rnq|%vFDF)n0FEKpiO&?pbH1MhSi{Y}abQ)D}+6ROTfJmK3L|$ z(BeLXep5J}xU=Q5zKb2{k=_a;BbbCV0+)>WJn^wcPPHb$xiH7A`jN!YaBo;-k-&C}eZQQu&uC=E zGXj2lXGq3$gokE=g{+$S&62ILWQYu*h_(2GuF|zw=a|$ZscKd$p|K6dHV|Aeu?+^0vP$$~D3jD}|i-QZx24vq4&hgT1zg)CyQ~5WKp>AR{*uF^8KldOBYYlXL6L62mI%qP+I@I)Li@2s z)rqeVNWEHoEQJG7t?1h>U@>t)+D0C$ljcyy$T1H}jdx7JNYgLo4p?tYkq%uAAE9;` zoqXk)^)AQ&_6)Ui0`J7*(r0BK$N*Zs_{EjV4s%AwYc6MB?s`X@swnZfyZVJOo*~Fx z7(k;jO&SBqtYJg?T8QLZX6*c+{8fVWk`Pi0IRY1@v7Na4Z!{SPVVwEzS_?HnUrJ6N=_Jp<*zbpLr}8kMpDf5oygNNQez92~e5R z7#mUbdl;G0@Y1OIt?7}FgH|WyNtx1wO(o!QHtB;*X`d=K(UukFu4;*y_2#M9q{`$% z)$#219V!JxvBsp+%dU(&;#zP^91vomsO8XuLvN&3=yGj7CuuyXFT7%tiQB0txZbNW z^WVh2Cu$z>FbtjaWtMISnbx9a?@OEjhBqCIg^7aC$^S&@dBrZ~gzwD@MNF*f!DiZU zjB`3PN%SRNGuTAFL~x%qfK>4$ae{b!+`M&`69g*pZ>o&QRV_Y2E=C5FPr%tE zr`lY+OHA%PtkjfGU<1P{E3^x;b7jn`3s-0kBETHv> zLMRgAhY_Jw(XLqQ%cbRrWQH)r1`9=S2LDz+T7MQ;u*HrmOa)YBfmJ~or0kF#go;c> z&AK2{h{A1*!!|+fO@u}L@KqO5LGG-}<{ls`L~_bPXTJ{8OgnRK;)8fu!LdDil~cUNGi3GuECE>$jy36 zbSX)br3II$=OWJpMpdIu7qC$0GGu;EuS6t@H1to93gd%ig7aI^uM%ne3`uYH9{ zLMfU)l9`1Nt?-X1z#@kO9&Us-GRAsHBcEx@MSP6kIq}5I?1Q6o`^^1WmH8BYneAm_ z@}w)U&VhDg4FJB*&_fYaZ3ZEt&`&fx2;)a1uZH+qZL^qIQ-caafqrU5Hl(_eDvOin ze)(BYqw4p0KQ6(oVwyL(=kAT;mgZ!zeTvd<;o6<;rakB&I8hu zikE{R@+8p~+LR|H4@aqUkH_ME9zz?>`-EJ2Fz1tDWaCo%>UweLPp`a<)L2yZt-Y)^g25(bo zq;Xh_SEc9dyJ5< z%vCmhqr+e~3R~f3z$g<#Dpf#vfjdufU$f?~sqYr)Flb zOTwm)f|T4jKy>)!0cFEZgZCV3z}ZKv(Sj|fc#OpHc|a|Y5$I>7(hLcUQv8}NINuH% zZ^kX*$T-EKswIbIJtB!D0qTSxdZWVpqS`^^*U&H|qseTLYTz6AI>Wn*=OP>{U2rj$DsdX*#9x={}}gwOyY-9HyGHX53E4}iwVUQHFpl;(>LY3Fn1vl zYcAO;qR@$VmC&GE{Yyj{3K!S7q_w+o7W=U_ZEa<-k64n>!ba(%)y`C#9#^ zzL=trXlnvI%hY^zMLMYb$7dDp0>j0lB1C$Y)E*B@ssl_=&oM1S{cjYRrlr|19`5Kh z{c~1%eSDsy4eEH>o$2z)0)-&ZGVf-*!zVCJ%h!0&G309Sm>m05(9p4@0*^*h z6;C|Oy!vA_X9P>XsJH;s^3}Uh7XPT|C2MWvd7PE~f!?c0;+hnsfsYPe@VQWk!rQa2 z30ZU>B*{}3HneJpXuXKBRRb8;KrWne?UZ#`GvLKReQTC=SCMBlMF+5O5s@AIEUWEf zniPMe3u$_8#Zve_gcq-9?pr{AECC`|8l+&CV2Qq1jR=g)bW1zD1W0+|`>P^V4OJU@3EQmB?R&;q zfhZDeiUv0P%3+|XU_#N%v>M#ME`W`NH_sHCdG`#knK!T@uPdOb=gagwT1dbKJGloN zWVo2O*dxcA!n(f<_ld^D$rPaLAkg*RO4bYrdoMF0Rzt4Mrcg=|-|k2%i@qrUg9H_I zO1>5kDk&T41Xzk`+{Oo#Nfk98Z6G>$5y&A;P<0}-3J4;UB^?TfU>Z3KdJAgw??Hl6 z3=*(G`O@^k%R&NMBra}meB{H=5VF!VnH$%i&D_AN>*gkk{!7mdWW<*tR;6Im#R_1o zes0WKnUVk4Ry7gryvA}Lf`KCS2*c?sXP#*0;($~cbf#D36a{fi=yY8I!d#46bT|^w z0JsR3*xWvngpiYUR%ClEmf~M1%x1Zpd*J4^d%9giPb6n>J!y05}zQ!dvh%!%@*_;yV^&?DJ za)moQpivo?g!ItzV7xv|F3|~|9eGDi`9M~JParJX@Y8U}z=WK`b$Ds|f) zaAL5oK2MK@b%qa%?`5x1dVBx3!d@B@{E0n5Odb$>l0qBluY#G!O0g&TLG`r%fg&B} zzg&F_+jQetG{W+nl_n5!rM>jnhP1xShha;N?H#BQbje$sl_qkGhJ}#KDZt6}z*U?L zSkI4KE*@_CV!-XWY;A8`?48Rdy}j3)#wEb%=xs3{j3qks^y$PMj^~$BTAIU4x<{I` z!V;OhPo@{=1x?EbQ3zA zMYVm{s1z&Yv19P~Cv)|({Z<1R6h6b`-Jkp1PG)YI@*<7qZ~r^j;B3^Cm^7SCTVhZ% z;Xut_P{Po^`AeDi%}=cNEckU9W2};i3OVVaHP%{E2Fzj^M=M}KNvFFZd z9r9@K`a&jheB;P&JOD-;$nK;P8rd{RiHE@T-EW1}QCsE-m?O?i0yE~jo@*cX+v$RMY9TfMp; zxv7rUV7UTjemCS-arL*%IDYwsU zyk#h7^68>{+L~8hf2_IWFhO4bS^7=GG^o76-?fJ%uRpFkykWl+SU&ojs99slxiNB% zm3w0SS>VN-*e8?LTub~!vDXfqaL8jArkj%Yg;1Vv8^GSGqyyde1v7K9-fi(*LtG)uyE<~gd!XnR>G zeWbORZmk7612RTl4zcjQO7pC;$k4ayZv1pK`qZ9JjvqVYRV_ zj^DM3G|VrZJ1ng=&K%YZ`JuIC++JI#Kx+$&mZDEWP<1os5DTYxf;(CSR(OM>M2Ge8 zxT_Pv&rN*KHH9;74n)R1cZ#!@XBa>$CHca42=!Nsd(Lon_lmzK;R5?QLz!{pIvZ7- zk0~Yk5n1cRX5}qChZ~qf`X%j6xzJDnCXTj4L+u=~s|pSrxX5j~*YS-!>G~Fl>z%G5 zDdZjyv3kyWha{2ev=B&K8thdx1?kU;j-S0Z&8ib72N<&YYnupt-%V)hO19CIMeZl6 z&(TrS1AXYgM^ph#mk)%71xhsp5dfqpMD_ymcKL|?h7IxfmWfB+#D$5+?VEUXnlj@76OmcO7_=p1B>3{|MlS2tm(|}AcdB3F;*>4)B^sWaj;!{sij0ajlRM^~4Lx zccqKme;;3Av~~W%T)v?~o3!1>#ZVf4Dz6Kwrqd%F6@Ql2+%U0~>tBqRH*U{#a)*+n z^hz}I6l41p2N`9Cgj{y}f6?A3>QDH)sL4>%o{pYY&`***R<^^|-Y@~*n_)V9dsYoH zK`8-*KW`EugJYdO#Z_@5vYw<*-E^Hk1v+%2=qo$N+Bw%#cHGaJjll`m7YWx7=~FlL zl2VSPPu;JXTX%=K{*p-6DPt2ytF@VieR77aVtDl-uXLUy6&ZRwEyQ z*xb0&YP_#8$PCCsviBK5A-$bz}Btn(2vaArHdvK)XA?rh<+Y+HNLL@?aYyevq zC062dT+LBsf@rPg#A6JW&Ts*167SBXf>6bDkK{I)2x=y3|Z;yKg|i&*-{IKFo}zZ2tXeL-9c&l4AQDpT@2Nn9QB1xfzk3-b8o{?QhQ@VtI! z+V!R#Z=Nf&1RM&l@C}l|)JfCcuTQJ$r{_Ir=WRD)t6dXQeZtx7lg(J>4rM)3)lbiR zz`U8Yk9{T$MebtPLeS-|z zI$)gK;wS6|n{6h-HXLWw(#ADSB8W_7*s_vB;pMU5fy5C!j*?W1$MC?a9+bBl?x2)` zB2F{g!Imp12$gFv2s>;q2DI5F%)(PxEuj(@%1KTh(y8=j_K)x!S(L0N9`xcC_M#KN zrG;Dx1(MmW|4M$2ltJm*YYA8FQBMycv3i$nKu`_DHKZBFu4KM}W9iTON^u7KWF>$I ziWO`6`iBHqxqnM?7rOmam0iG$-xZR&F(R4KK4ovPfBn|1iNPU7%QVJYJ^mEJ=*Kz$ zTD&TX;N2AIV4O(u6i`44OU+I}NnTKB1}fDCx1&QLZk5FmDQEoUK}Czyhn&eB^3WEJ z`woc%=rRTzNBZ%i*$Ubqu=juVsRf+^Didld(^0LnP*5?@F_GxwT(66cItA*0KXlF; zI_hqV6xd!{z)A6S0!c@yP)h>qST*Y;M)U_2g~2Hxvz`xZC8ME035Fmbv{8}J1erAj zc)}_P9Y<1_Eln8*)QR!;VOZ&wKt$?{pCt%jKF~qJg1bKSJU!^%`SidiTu#pavhJl zG1I)XnZKOJdFG-6L~xV&S0Mg$!Kr5q%e9P<#!hP0KaV;WUs(MV&W1Ca`3uA=>ihv5 z8JY*ivpI*l-FQm$t9+>98#ZPzn8dk0{^q6%T#gA2>t=8-UlzPHsc!npSlFSa z9u8NGwdx=< z&6A~sf1U=sCV32AaW5wG5L|6nBQBLLfet|8)PwTk-QUKwXj28<)vQ9`gZdLdq@>&E z3g$v@`bGK`xfzt1^fGxd2@!((orYfu00R8}X4za8KD#qUG{h-^OZQzi2{wCp3iv&0 zexJa_dcrwrwkF{^cglBiC+WcdAI07TDjpz`ESN(b5$q$ve=lgjF7JCmgJn@aS{nuz z4Pc@T&<&!2#mTe>6f3VP1>33E5q{EJv#(KB1+ZZ)PgmroX_0Due%Rv#H3d`f0RB4{ z@N9H~`v@hWcYu5|2J-^}1_=SQs-#*rkdU{aU8G8nLklK}_7Mc>p#BFgx6f$62W=4| zHR|t<=GOE2gz4`=n22!}g<2ixpBk&ul~Dw1D>{hUfx=EBMl;&5Hzmpy5C2O#=)z7z zWbHgGKJ#iM-0-nECL;_)2~*xhJ%Aa~?4xTuj{+ZE!4s35;2T+eb14vMD7DwoT1@j0 zdmwnoe%b8HLLiVvnA7C+vV?O+Y96`Hd>@pTglJ$5fcAdbDfd93*ort)G9t(*lzpU) zxT2%BT6P<8<>F%-1Xw78+6-|>+mt@9h^y1O&;!#Pt0C-0N`hu7yEP`t*LBRb8a|A_ zQBMI24@gyOaF2BZ!ZCLJfVlYBW~Uj@q}n+=ARdST0d^+*@`@uXp(6xKrBZr83rPX0 zYN^QzB**glA;L3&bTxW-&KQjtQ|48n@Cw+~0wywI z$P4mU%~S8-GK5axtKTamw&Xd z%rB8ea1FfE8-)k(7Y})r99tf;hZAUOlh9geh4R#UPdU=x=zzQ2h5Gnli)$#N8(11K z6y77}oTZ7>ZG{}XxgZSCD=A#Cj#NpD~YFY*5k;fz@`jS(}qiY?J*6vcI{Rl8SjTz9yxfwg`+MhUr@~ ztZsUQro))U%4$)aYwg8eZiT$9hiH$tY~do?cM}w8SMkS0{n!^|tub93kmL?eq9}@# zd?{`9#L5N>E60!zIjvYyUSb~%8X#*YkFgqoypaUBD`Bzc*t3qN#1{Q0*bI3^m-~wA#%3(4tmfD%%Zko9U(P9z z3CiAag_GTY)n=GE8KF?Gk&9Blpra9pZ>-Nr_y!A4Cdyn{72~x_*PWEJ@1zrT=3oE| zHrmXB=g(sC35zW-u)urj`@;0SHBIQN#!=m8kF8IF@IphF8&L9UYjQM{p=QIJQ3b^F z;Cfc5+RUAM2Snh9Ow4&Wv&+@%$k*l1`O@oOj7H!)tCUWsH=srn-J?QNaCh~wWaluJa zOF{a){y7NTm5Czku;l`TtCJk4! zP-}<6Chdpys_gO9%t*Hx31j0SE{?X=gcw`@w-n{sdKIgeHjbj|z*^YEx4&Kj&XMw^ zSd&caghJZFQtQ-Q?7?z*JuG?4u*4oBw1!$6NCf+Ff>hHu$aa0>!oY5!K-0qu#RG1f zMrr)eLhX5>rrzwQea)b7i@7ck(-L-n$!1TxWV0g~HJchG-RM9cS}!Wmc!jDFGE&rJ z(HQ(pA&^;JhLiA1%@wVoQja+<6Rd7tFGPs{VrBVCCnfD?#vMKRD*qHI9L) zr13(E0fVkI-U)@*NfbzWD&hkDKy|;`9fJg|N5KX8Z`jUxzFKtL` z(9VvN`*m8saqQfC-ccZauiC@nRVe$7WAZvPuAbZ%l%&8cBc@iT{plE(-A zGNq}H?`N+}$~EShVpDd{;L9nSRBULjNyQ%5W!Q?yq53V&h(PzZfCl^-UsakDK44J+ z={gT-63zr-$1OkS8*S;)1R)homyezOmu|{4x?Ea`>?=`yS*QtPPD;~ge zW(B0DL}{mfD{omZDN!O(5J3{iUKJ}(te*zyb=O*XIrI;e82*Iq&wM+D&Zi6D&F;Q% z#m|*cp|nAMc-014wUuP0$0QV)fWruWX^h?Sg}&FU92%aNZJrY7Cu!NRWwdNfc0B7u zbIn4KCU2DPFB&VOC;AIV(o0%6Kiw^vwTO1fWb2SH;nLq}$*^mipL1=}mYS4_gtTPj zcBCcSo~<^7o1x0z&|f(r{xe@Wo9bRU%R^R9Y*iK7C@qJnA`cydJ{vZf(#Jcyq90v8 zRzcNXbeZ-dr=mT&!&Qaae2r&Q%0KYTp#m(7o5M=lwUtzzFm_Jsw~b}we{b%@-Z1Go zco&f7D!@|)o8r6nq{z7{&WLMRnfJM#xq}OMXxNMu`QA>(=eqWEz*zZ@?KP@d$~CsU z?87TTV(p%2_vpzns?CksmUpjk2lH+9E-1TzaWS|*n@xLe!iYL0x8NA_Dms(OuCFSu z1!42eS|!W@mr1u&{S)4fl?c!~;VmYtL!D7s$UR>5qwZ* zP?G|gsrD&5*bgevmAA8M^msMc-st6b>Bakuq6zjKMWUa#X?4@-?@W89d7@yRM(m8+ z7_@9@xE3}`M6Zro9ln%2Elp4GJwh0LgF7U|p(CMT?oG zpSqI}mWXtj0Yq{KE}rC94?unJgo(%f9%P2%ut&fpJ==ifbRQmQJ<<&fiy@R(yRc+$ zqTbJfLqgDJM7SaIZaKRU&G3E#o;q2BW#yUPs2qH0N7c?j&zFs%+AJ1(efuFC1rmm4 z0){b=!@l{~V-*%*!3;Wl$*dAM2pzFmMMEsHgEl%}5;vU;`E2z*?e6sp2nY_qg(6|z zfLB{^(PZZGcnVcdv27iyHaXqN9H%cTUZ(M0QE3pgTO2wr9IY+Nx(xb}bmrKe zCIv2aG~V}G9V;bk%WIWr9IWs5P2nt)qdAh(*ieZus|vf6gZKU%yf=BfesXU+l-tDo zBS6z};h>1-U(JbqgLZ-dSg%u%14r1UQP(uKV|Gl=uawOz%`l6dtdV`D9ERiuTD&+) zN{Y)NDJ3A&vcGsag#fIihko? zZ?qD*KC0P}+QPZt7l6XSMqjXCF(G-vayIq#g=Nwgn#YRGZbOH93{u~1K(jogFT^V? zBm}7*DFHJrBB4dWK|o{V_-&b34dHuXhlvw4nhZDGs2S3<8AnUP)%1Qg^CVemrqoVp zq>;9ZIBiGD^GQ}BA(LXWEh}+H7}d1G0bv##;mM#8$Obn$XaV5oGZEABKhGlBl=xWqpM~@xrUgo6nj)s*S0bc4`5?Kp5z`ts z2c!aL+vR3zjhF^y8e!Ur(zW6{DJ+{kv6+b^g0)gmQCQae7*-4QNy627#!kGomKis> z_sg1b%*gb}#5qbMnzw?xx&B2G(Zx*)JwkH?Hs=B)39;yl$Xm09mstXd+qtw z(-*NJpAdioSOQcv7oY?)@FkTe;G4=5v`Wiw5@2sKNED3g{!a=E+a>|LHXOyGz^;`# zpd7e4z=wi6wjG|4nU{jObV|q!#R5P(nE!N&$gG?1fceJr_)cQJ9%?#)yvj@Mc*Jo_H9qowD_`702WuF;kF%QBfYKV+6uA<%V8K?-OHYPP~!y+va59 zJCin{u#NUtlZEz#m4j)J4gFR-op!6Dg0yS0fgVLRaFi{wS%Y)l@I9)Ql<*kzNk?Yc z712RMIxyuI5jf++q@qcq!k>*rInQ1UuMH{zxeAipJv0pxZFZImdz`my;f99NP=FV zjMJ#{gR)ih91?b?#43cgg?h=eo8o9~t1nTGWv%pP0pvoY$VT^Q6DFS*R&C+HWolx^ z;H7UdAPC_QD!592Pv1I>3&KU)wZ;VS`RNcL^eymR(m1Vd8Ur$-K@V`YPtMKLth9A5 zy`XhcxLyPc>c`N@?PKc6Bolwr*zCZ_8huudZF|G6jg~EQYnWX784f(}3Kt|-#ih&F za-V*M3>drUJJZZyW~3lM@YWG_YsDfEm;5?O$P{;;7$RFz%1huz4hpd`TASJ`m<>Ew zQAwbnoq~*$fGh?!58^PD_f3x@zo{X|ENV&=>#Hu&L)x1wc*W5pyykX&tVq5K<-=eU%Yxg* zb?JTb2l-qC_lDnu5pxM7zhBCg$eqa$uF-qM_C#PV$*$Nc({-E;w#;onVYvB{qQn~< zuy^SfZE7c%AmAed4PY3C!6BiWH;F@%-ZQ9#!aV(}V?F`C_r_1&}w!Be?M>ypK zT%qb4lg-IW%n0er0+dUuQggyzeqaNlo^kYp>K~l0QDXR>ehlhi{N(o;q8uCS{9_=my8NYlv=!OXfe*em*^j$GmP$IcLz%3)uwPtRB$Zr0y&jG3M0{|aHQr;M>A6*0<*Ie7 zv|K)_T&2=Ra>i;LA-kI3ArxyJhB`GV5=9EVB2oG|*HlhQA_=9Knuq&RLWclN#czpB z{LrYuM04Pd`<8}D0oB1jYUNGwy_+dht5Z23&$q2yg>ID8cq&(EzD7OIw=qQ-9NKhS z)vMJhK$b|Wf7u? z&VWom4azU^g2XS((_t7TBoEGKFdWoi2kFZABEa*KM`ravLI42HHIHsOH1hz{=NVUq@=7#b52#aXRJf#5tQV=u|chkWU6D4Wxa9Q?Kqfme!6 z>q8i8HK#{tpX0jqr8lcdC{*awg}!B?ik%eX4M_qs+Z(JcMK_PRw%RhT+-HC#`h=7iW66()9hENk7O2r^Y$96f}_Hi_P9@EBi44wuy4<5&qR)`rsT}uNHV`YQ% z8S=ou9Z$h3M)DKxYQZz5K5pr}pdq>d%gkM2j>2&^v{-;@$OMG}*SQ+|%I~qNU-pz= z^(XCTiMK~xQq@hRQ<>Y{Dtj#)j;$V1T|^2F#ccJC0VBVQ3K*&IRS3C`EKJ3c5&< zl^Fu%T=BIm^c-VQvJ>RzzxiKJ2TAe!q=f70^%OHjHO%D4R1IL{a{aB`@Q=&cSDl&9 zf1rqMrxrs1D4IKo3&yVx>7fXbEj*$ZuQFt-XpCW)^FhHZ+fo$%1hd3g@>Dk~Q^72Z z6*Fvf8)XBP4{u7T2vT(>+7YvLWp&+^Q(IRuWq0E2LCCPiBdLxoy7qUX>(?cl=rWe` zP*>_mK-QY(yrEdlb2ZQ^SGh3WCFI0yUS~WEPSS_Wj^X@P9+A}L;MxY(8{lvohz|nj zOC_ifiVQuW$fy<=%H(nQ#t`sk0)(a6-?C;VvW;0J49^#dD=)Y*4gh$5#?-na#z`W zPy%eFCHjQ;={hej(EvK`0b-oaxos~)eX~mD%lWHwT_8Ev=a#Lg#}7SQ8m|vOtAWam zp{%f+R91K-T7=P@Hk3mzHt%C&XmHuzvRVj|>6f-S3OBW3V4~cg?f@BZC+ut7~J<;K{X6XuS2iK9;Yw#=H>Q57h9v;u^bag*ITp^Ygb* zUPGfML;MvWn5bE?0~r2uzlg{ASlv!Bb-w1$&s99<)q|`25B>>%XApqC!8LfZrXi=X zpyAc|>iOuBJ_(8j&#l1)gMENY&RH227&T;aEZ&@J_YH8A zCuRPzqiV8B=@6VG#GP(uGhj}$4Kar$?97$ z?{u5D&xZO|q7TrzZ4M2F$b>!s3YSST+z(3D+tPRJjiE8|9BmM_Zt`I*je`;d$vykF zm)pem0D=P+-;U&O1&HP?xu#?ftts#n$4aB4p@v&E13u{!K?V$1<~zfpC(nv;)sG6Y znnTN72-TKwh7KuLgDXb$qwM|B8KRuKp|a&Trf{cF(TUUD^psc@`}{pW zrHY}-D6RTD7ukQs_uh`&7nJAt-EG!=L0Qp={Q_uoIQ-GBHw(oqCKVqmjq&0}#fVxc ztW^MRSRh>be=na>2`YxKYStM8gncyM>`}=w{IvrfN~L$?fG~tvKRvJ7QztK<+j=0* z5|3uYZklf{q|Zw_DXzJeI*EoRmru40K>$LLa630oyGFiSXx|f|=(%bRz5r>d;nLZJ z7+lekpv?KOCvS0pomZJvje)+gARv%!$UoGI%Q@oL$gsb|9cWZ3G9=y+-RMyO4~BLfN@;~Gb+hS`|JFLWeE&>pP{1Lu-am_b0+1C}hP zQ_1(uH4n^p4SJCjT5))uXiqdm4Bah5wdCT*i#jSfzU4Z17Ifrab~R_A=X>ZhCDLAf z4nj@jObh_qzEU=v%$|(+mvlj$#302$^qbvfqiZjOS=4G9gaPMr5a~M~K+LAu3LqhK zGzS06?q`{8hSRjRyKq!<%54=PtJ}8W(_%nBT;Ey@@c~)~m}|p$+QL>3GQbwL-FdYj zh^!{fQJYh>96)mlG@BucX>UPOYpZ_f1HBr993Bjy7B*sNg67ycw@+u)9{;c*o^9eh zOH5t0cG>=|1H{6yWsDnFH$AT~0zpD2eOQ^rkci2!K*iOxU>cB^HX{L3Zt5yVwG{(3 z8G67xRu)X2$7z;i!VEz2*GjLbQIqR$mOw|421>9Mm;7%TUr>qGjK~L5n9F2^9Yya-J3nPH`tA8|Ru&Gk=MJ=VI? z{T-F8L;RZzX;^j46i7r@Dp7;paH8#)ma;XfP*p^ZP8g*uK`N?SpLvGTx0DP-cm;@+z1 z41cx9f5uSKErpk@jjiyU+J(T4ldwK}FXzmyS7kvAe4|ry`4ngzNJg>eAVL<8Pwiqu zBZ#OuiZ4LW8X_rJi=L{D>LA?@?-1l5?&M(&<=Daj&h@AQKa@9%*L)-*FqG*R09N2* z`?m+xyB}s<_dH!<`%12m?ipSz`!Q5axWJ1w1ZA)5f>&VBY(^CF7Vrz89#B%@>+%wp z*unOg{VMzeB4CD?*#Lcj2-z)gZ16E*e;8F9E?2L;oU?sKIw`#QBp*^2)QuZv6qCc?f`yyR>TPnSAaYdP2pEuqQSUMyc! z`Y8pQ5^t81jh}Ba(MAf8A zpjH7_wnie#fh_pX?pz7t6?z+71^wIRQfQQT=My@&&V!3mX*z2nNuN&KXjvPwaBR}@ zT@DJm(*z1*GyT#sOdatKTN%uMWN@_aKdJ8<7!RFjPbj5qc(s0%#+V?sxjYLIldVa; zGLRIgZFd26@qqre5nk*aN91@w8@TKxTD99oWD`X^U^^Aop`vWfTyhqGmJViwIaH{9CNCiq6oBA#!@2s2|Hns8hTRgrZ0T!BSg1_W&YJ3fxd%GdGf+ka!h|Z!%wg?+*29yO zF*)*{z+e5+63)R}3XEPu}sbu;D^f7D6Tq@x<^4E=A>_;HbO-xc!6*W`+D*TJVG)I}C zU;%6vPfa&WqfC^@vXPV{T`V9EQuId9@jh8MggWROfcNrC4=qg#eDXDvUuuQJOVs9T zIIXZ{d+l=R`7%A<4js(uU@lFuHv=WmO2EVlh-L%!F~nZd43B74`}or068CyT)?AtbwHxg;o?zas+`ZzpS$$Sb z_%|D{)G5@ZILYcSFu3RcRkD+Wr|Rm6v!1l39v#bQoaargqe5qgx_8ancId%%zUz=H zIYmsj?H+Z$SPPTD7sU#f?Db=r2{vE#i8ac0iu1a;Q;k9u#30~s*gE5}hp!&2r+Q2G z7^jXo*eq%v{fLfLvQhVe2e_+zRG&^1pFZ@ly^k2vqYpgLe&LO=I#JaP*$`$u*Bw(8P~5OI9|)vZU`b!oq_K%eC$ zf=vJc)?HQV;16Oi>YYxGxkhu24Z&J_r6%wEVX;YS+VcS_&a0b~yN`b0EcE3Xq@A6! z=y_Mh{lhzac<&L1cP#qe6;3&kX^3TsLjxc`V>-Y_J(3OPAQ(uWHEoa5PExX+JpC5WLEEC}( z8iB5m@?@CFYSuGj3~!dIDdmoIqiU7dR$IuOOT9z= z;Lt30zv3qfrqa-78iQ&(pn3^dI@4@;=7k)<%_AO~;>C!;>_~Keq6>xcDa0#%AGe$+urv+Bt0~J*; z8H~@TI0|HSK3}s7+I+Bx3=@Mn>{nhT2jaO3Rso|g$WJ?YZHd@Z28-PWm;z16M-o99 zx80;KAt9U0wSrrkL-B+KXUZE_)Ohj*hT{D7x5)2NDAbU7_xces*}0Z0Pr zJ09;Te~ZUZG=*7qaCj9Q62Ij@886#ot8t?R0B9P&e^^+WYCz2Oy?gRC^tJ!DBv^PtC+D~w{ykIq+Qop{XRt{(b@3o zV$Rg4hXwde+h^ra_qks9+smDxY;flbXK}XV)07CSFR!=X*p}7lOi|B=djahvW1vJ2RQRb$D2ifxq&LPk0 zfBe%V60I(_aMc3^|2Hd<$rK~P1hJQp^tS@9v%;^=fm? zv+z(xy&@+VkjTfv^Ud-OzLZzmIwc5@8yu;jX-lHS;=*lN+_ZTV#(P$Dhl@29m+hG> zE=kvSuZ72se`^FpWmO_iW8t#x2h!;i6T&i59NFO6s+E^G5cdxgI+udbbv_+ft90kw z%_~7rDFf;hUm83hvC;h2?DlXW>z){?wjbje=hr#AP!x4=%tDvWwwuVLlVB=I7ai0n6*ourY)UVy~zVgXqCv#|i@HIj2Z!is~9 zP2cCdkL}!{0VYxY!u&S9dPV=x9Mu=Q^iLofh$#-77!tD7W7(DWZeQ)^vaD3*D)#Rb+Jva3#(c2u+gPuQaA-& zw1yApl|2KF!iq_yM4uSTMTrua*~Jc9;!)%^ucVYQFx#hrozS)0HuH9b&as?}qs+}w zP8@fHl+o4*@gh)Zpf^IgB{VHIsubQ)E1*X$N8ws%;!5~x1vF8wZB3lJ!BI5v8%;5- zg6HP>5>svGb_BOP9`wyE5p_q-jom;ox2CA`@Tj8BTzm|?c)ICDQD@I?Yx#tm>~*L3 z3h0dE$e9O1bkKAlKBasREiEfAy+G+=x}4P+?1U2(xTozI_-Mh|M}!xgL? zFv98}7$Hg*zP9Ka$%f65Y3yUxyFE4HM&gDJdH685L$WIyz{uf3O=Mzd8tjE!ReN6s zKEyn<$6qnClyxeNP*XUGVw9G5kmw5!Y`eUx2&5iE7+yEJZh5yyhcT?tNf`%qrwMg| zdyBeUYm7+UPKT|L_P33?ywalXN!F-0GgRBTYQt-0+Y7*sl+boV;KZm8EdXcM1qQpq zJy{o3%RjmWP?38jtpMG$0J9fiof)KQ0n!x5t=50Y+4O# zl4h+P7ph6=6s8v1cwGvKadHq@A%z50@_ytjzQ-L$?&fbEhVddFdioy$<*XMzSISMq zsHZd-|2%a63o{JGgc_lfYkR>Ls~C{vhb5Tsx=b3DUs&SLZLwmUj&ji3Wo>IR4VKi21vMt;YCKjMw%>Zr?Nj8!a{7Glvl(-d{>27`=;dxMk(i}XuYGlNW;t}Hnz^FXAp6e&!$ z(l|SJL-);k$tBO_lI@g>EN3J5HGK3+=779MznAWGOYkJV!J1OsshwO|JK@74b`&_d zBA&3x)PeuTtOh0$0g8#go?X0r@suGvr)Jb8&06djGPu8^eLuf+qJ!^Stf4^Co0 z9_dp!R`H!}p9211dh7DYL@}R^UN~gr(=Zq6My(CYmwjr1CXbpTMD=Qo1YH;CXRPIw z3imx^kNV$Vv1hZ_8o3@TrY%Jl*sPuRqZVLWl%BfNL0k`Dll439*JC|a7IMEH>-^)x z?PAup2?C|jfce6V@z(KAExhFd-%qk}O=&IO#HmP|jH5ibgB`w#w&?_OF?kpXkwLws z{5^T*F%hrAt(*Wk_JJ++KW9ndJoVqX>I}sqfKaeovH6C!BTc3%;Ev6=CRe&(mtb@4 zRQv60`|W+vItq(I407z_9AhBfV~7hIP-}79UdaYk+6=MGk)K6HBE%*X;D5O&@Qi!s zH{cMyV=8E`gMhSn#b)R{RN$dZ=>!xxin2E`yip^%PS9jR4;de~pvetGa?C93z! zgR398kbq8_kNhPn8$fz>%W3*a>_tC@=X{PMVtBnIb_EGEFXAUSTjaP#F$NaEXDVnU z(>e_xTwBJ3z~x3)HEYC;&$}?hblOvbtI-d@oD4@Z09AqkP?nV@3s7dcuEBX)2&YXo z48Sr@_tgZnguHG1D?s6wZ;br7+j%Q?XbzKfRx&C$S_SzVd$2wTmV2t~BIfgePC%7M z}RGqmJ=g9ZGXp* z!-jC;td9QTbqE?^MkQ-C%h1Vo8E^)h{Fc@9%4X=~7rqbANW+tgL3s}Lr*MaN)JRfp z1YL0i?dXNWk?Eq?wO(Y(xrhRB3)q7jFwOqExo>TpmR;6nDSibToW_8>x>6292~cL9 zbfn<%UQAxYpWltH1(u!VLu;^xVD&+0EW8Y0qS{#)&C(I@c1nZw5~$2hFYt^DB}r)j z-eywi3n)_)Jf+_YeM9$Rnd*Jb4z!CbNf`|epJ4L&Yrlz^GuBsd<2N#S!XwO6$ls64 zDMCE}^M(0+bUWfK0Mu?gA*nU|4A>3IVjPRju=zjAO1axGT>t=Nsk^D7M# z)&<{U{r2yD*S}}XC#ym!1sAyT>Q8V+==T7<%dcV&>MIql_q{9JfrZLBnx{Nx)5hMMy`6k6n6b8sGv^C|Zy^ z9Du4|lG!A$5NKx*vRgJImtN92kTsBLGBZ{3j30#)Gf&sNeLe%({TRNa^BGO~2h8ex z2DA1Li0XU>^YV{L&5nWd8JzaZ&fvy^?Q5rV0cinDOh~xB*jeKcCZ=`BK7ZOE#B~mm zt(cb~p&*3(Jep_UG`r4U4f!cRhXpF(BB+4ufb^^+j2!OF93_k|1~5{g9sOT2gwl@^ z-6(`&2MUHIg1SF?8L-<5ev@G?#z}_|gaMyIxZ)YG zkzNQFGe6Na;#nbFE+~Y{TUHNRo|9hv!j3K2BUtp`me&>6$~h2*zQq-y5pRKJEXGWY z3aQ=a34?|w4B!b$urW^`W8Qc?A)jwpLXTCj*Gq z>vXiV_X|tyFU?J)WVsp!x&_3Ev0^R5l;h-I)M#X=%K-5RrwUn+q4A*s%kuCt!>CB? zN7ZFPDyNjtwbPx%mj?_)8}W5&x`xzHC1M=BP$Uql;ua!e{v)OHW#PP1hh00NxMVT{ zg{^zhg+kj3#K_wV@6v>al9-+n?F(JyOcvMvtb53n=b;Dd@49wvpd(+n83}J=1jR8Fs|g=-D8EC#ZK(7g0TfVm{N!*CWGuCTHQLXezq z8YiYRh6O4w|4^Ebt2A(SZ=AVU1kJ*GY%M5{PCsmZxC9wv^3%7_ooOfTueG||p5>5H*`Cy&Cjt`8DuZ2#3>0rBCW-bLvf15UsfET)|bv@yP=O{6* zNrIc|jPR#=xfp$3Xga&l&5?nvHDX^`M69w@NI$%xz9DTl2IT-%^2>)_}|4c;MWer%s=D(xM zCL(@3s2{v~j!1eu-4c zlqUo|3&XNsB5?j$tr;OFt=Y){H^~HnAXMSn!b|sT5C>A8#PUq&*~3FGCsVn8IpIGd zB`q$!F-vztAMlDhjQbh;RbV3ZwOqTziuoS@$WY3>&j$`Mf9r`Rd9K~BUdw1L8c|sP zR8F}Km05tFKu;0b=T+TM)sV|iVmGZ`P<#_$zx-r|geHsZT3&zr7g7YinhL9mfbP`o z3`?y(2@wx&kUDauv9TSprw8B3P-||@sPxL5{$LAvB~OA>cRbb2ki(;jFiOR zZj#>9x4R;10)CV&GUfF<^@2&si(rv|%ghkl&8nKa)J z*iyQ&2}BVvR=U%+0t^odwMulhwN@-hN176woxs}qt*~_ITI6pH>c7vAF-n{=YFd^- z1xz-RWIMC6Q3Y~|MV0-gJKDy0y{`zor%s*MaBHFfEl>^*E>`Ng;y`Wx%`~046P~Y1P z>VNJA^?lu-{-Fj1JU{=gCElp|Rj>Z0iDGAN=N}5m+%gCM_JGrjSfE+3*o*Y101y4* z_jm38fZO-gx8*wQ*j+hI|Mu){5KFCK94~m|SPTEAi{Et@^Y{Z+wO#yR*X|FwU3c+z zwG&-<@4)TZ+nX+U0VT6Hi)N|aRsHz~J9m$F{*r$(aA{{};J1hTJK9MJ>sgBuKion8 zM>^;{*3IG{bhG$T&%zV>Urbx$c3o!8H)wu)G7ZGED9daXfAU!|D`k~y8Go$n;qk7A zC)|S{`0+fVzu*E!W9o^w;0!&uH68r{9Zf_{`DD^A%m3Q7_71n^hJQkB#Ik4)GGqCP zW?6W_Y=b`G->J{<)?J?Z$$TEHK!gs{*qIIT^hcS`Z~-c^$kH_Vi^ti$j&Dbnnn+8E z_&Z)-I)Q-4*@Vkm!-wQAks~^*Klkc>{U$R`RI{NNZw2-f8;78{O~Yb=pRmuAqiQy( zQe<=qJG_>Qo6?~mrt(W>@o>rkY>+kbNCZB{0-w(kpGO#ohm*=3JRA))n11M#xPUZa zGJ)&w{sMoUiSe@;!a!|#F9CwYj{!v6gr?9n@LPZ7Py;~h$Ohzh%M!f%4SeVNnKsb& z-;-REB)MwSL?^D=q1?6PaP}lWEUrkL#B1{%li(VxL=t1Vp6j|CkRfmU{1}ko8iti3 zGV0hk+Fv|X z;<~l8x|Xy1f9t|4Y4RPan3}Fyt2p&wed@nUCM)g+aWioVZGEarE|}8Az@B>QOYT84 zVJ-A)_aV9*U&Y>h^$!OV5+AshzRzObG4I0ckoB2!!7X`TVFZ`d#ccvn37(luO; zX|qc~A0$|w!D}`1EcJaRKehYBm2Lf*m+3XJKDZCgo~AL}*ksE-w685dLl_`EeGY)C zNuq>OMhED;oMfUIl1UT1u_`#vh51~=BVX2ENQPzo+yC?pPiFN;e?~=y-!@Y0kAdmy z0pY!eWNjM?NOY00BY%$6Vb#zQFk}dB{@s;`a?>)^~Od6A*(H}ELN(*D}UKDhRzPNCtmq2CdBKxwX^Uv1JgjVJ1*7l?Oc z;vH3J8`>SP4B}m`q2SRW;!T;o9q~37f_NJm*HzC+DaQ?6g5oV*jvKm!BWXwc7G>(C zM43}lCZSzZCb~(FGTE68*-#T<3PExU-2sB+5)Gc&Ope5*)2b7K7E>q&X3mP5;9@&v{r zFByLvU6Kt14z#oe2QQV2v|44>~holRx>AWFDwWwViGl|rBuugZho~&moF1v|i%}v&?`4U78VDs!xL6Bsn~sx!Nn&QOQ)X!Gu#R(R25|^8EO=V~ zQ0^TafIF>r0kG<8?=<_q0${aUY@pRmK(532jHSFJE9OAFRjsuXpOdU};%iEwS*E z>IdzJg`fY@@4vJ^;#oUNe>>m}jhNA}>Ax;y;7{v!{G8(`!dA2%p=;9?(-~i-iSi+) zASn|MGbQChW9y^m4y3J-U`@m%Ix7x;c`Xhf*OyZd*^ru5ydiJzjT2&AlE-lY2>7giq;vnYIJBdp} ziwE$*ox3+X;?n#Sm*#uNrDvjHox@B2thf^>zVIGw!%kg8CZn!R&WPz)U7J{46Un9* zVKU-V;x+^gOw__6IZ?5pK<{z2dq7bUG%S?8y%}1AJX`v398ag&rK(i56z$B0xgWrc zqB4Jz8ItS?ddNUWdLl#vTfoygA}uFdi`)6aM-h?lE_KUkriB#Byc7;k#AdUe_q58Z ztg)&GYD141-80xD(?W61>SPp8Wt7TuDTdSeHm65e)m8uXWD>{gONu(miCzOSY!L9j+&Qm*pb|JM|GrC zP)wZsKV%jL@FAPGmlx5`89i22-CoXUos<4MU(0xA2Hr}QRT-IUN1ry65P`7fB~-t& zD4DfpD6;|e1hil863InvrKUx!r?8j1%%8@6l3O7_vldwdqWLB#4aSaBff-DeX<9LCRnH4_p22ji|6;N71xwsO7cdfF;3$FqVmyFZgvy_=@neKy4E3GN@IXSxXc(Q zqwXUSW;&bZ1T#dv+27p6#~#(Bgi||Gq;{$uYhgV_>LxXzsF5C8=%EEarK8f}^0gungFF;w8!sP-E3V;UCg3?>lpYFovWg~htB z7?IS1$zBPkU}DPZfSoE?Qk?I=9~l|E*%@Arz&k2>dYt9tVkE-gH(JQ-tl&GuSST&s zBid){_Hk-=s^gr^|7#ycBLe99IpaffZlqYyGn?F(Cz*A-JPjb=0W?ugnD4<#%#zOzo%)Zmm#0DC&m@HB>5o~1v^2~l>Gtpl3X2`TTsCeMoIDiWts zoDWR)rF8)s!4zWyXn6^EdS*o3-cJ^}j*N#x$oR+~qGl&?w^=>=Qt&sgW)IfiJ-vEn zsiPal^~Wdz50`;7X-uwb*+ju@?ZttdWOzZ#s@$d0R9GKCt(hmoP<9ni zLg6{)FvOBw-D#?!z?9Wh>M6KT)7hf_;Jfn|W*OZfL`G6mRImd8S+tIyFPOf|nM46d zZWZY2G&t%3Xzr0s1)%8`fTj(ArU^jI<;5?CmwYUH$yGEe86grv28(*Y3}WU;2ak}T z*Ejz*@<9XAB73#kd%pTC#)1Uw#u5h3)>xYTwMKQy>kD1LwGu=NlyFr@6@_$FNDM#p z1ZZ>jdM48HsRtQ8=qJS9!WmI^(7*3gx;h zFoV&wq{HB2X&Zl6VH}YP4(Q-dS(OL7!`*A1JL4FzpeY3f=$d*2CxAj zA)~Ab-)qMz=*C!saV<2~#nxCC4PX~7zLk)q*cR-;T#1pPqG5sfsD}DOwh%;-{lC>j zezU`WH7Zb-K}a-!hdU?ptjNl2knv}jWg|Yu6NJQwBm_@wA`$WAZ)hfC7>;P3Q=>ve z=#m{_z^fGz%@jWgB0^b;?LtJIV68l(OKbG9<@9tT9;k{<;nO4@>^6frJyY?p=%cUp z*SFn|6qrXA^tso(<6eMgaG)FxU?K%x@Zt9IUcaD*=qEk_&!`XHHG!@A-+u_IiAiB9;vEJ)x`zyH$*#{&mBg!^H8r zDnD?TgcYwM?HiV>utELNn-SRfz2L=va&xGmX2A6aXd^5kOcq8+q@uedyGsll-O8;2 z$wn#gZlY2BUS3Zf<8aZlP0##v&p&#m?fJ1YZO@Gv$NVjKKmIEMMI(1n7kYA6njKL7 zR4{*89IfCxTJFMOTY^LGHfGtU0(-#Pr(sjV6i1M179SJxr~hw(>}gk@_3|2YW(bbU z#tdQo?FnaF2@N@{)WgQo*!X+@MDjv$#vVHI^Tx&vd;uL@d_ki;UH|^CrBNn@N;n#P z0ZICq73<8SU0H%cpGu7i7dm1(C|De^ff2zKVDy@G;Jy?}1ri$&0rN6Z9%C&;$G`T0 zh8Gw0uYRE6#YPQG{f}2X^>nZQ(XV%}fB4rAz0M&1xM@I}^|j_r|NM0SEj1T)OU>@x zoWhIF*3+ME7*lezY%Tg{Rv0jm{-S>>$r(C8FYhfnMEm1rw=Fz?aKl>}n2Enz;YDwS ztw4#Y#xQ;q*$xia0q8wl^ zVK8ClBVW;_3Pcy8z5Uflu+TAo_M1O23M(=_oHR|0M{!TvEsV0~jW~vyhitM#tC~|C zOO6Iv#yS$D=R+FX?&dniNjR6nmi92b=<=V#c4E=l#^f=no-* zWKnp>G z$iyT0bjga*mJTWP;4o;EhSJIld67_XKB*RXLWg<6BDyQt%8s6DQeK%W*mrL$JE3p%xoJM52aep@;tadAC6XeH0&>1@dXcgy9nTrLO8;fQbJ z$#llYoV5Q^j{imFa16@CU3`b)SKl*P&b6zF@Y)rglBR}Sq1nQUyF5bjp7kH~9s8E< z@*8esrcGMzV-|gU@OSA$S$n=cl{3({@fth!@Uz^;-i+H5IRZTdC5dhi;h+D+))4%t zhwvfYxofF6+{aiZts+0masBvn+zxz65OT~%)81=lJ38|0}tr6^){y zHhQSM1=CBf12j~*!15YG*o z02x)}G2*)C(BU-d9-Q=O{WHjlxI^wuYQrX<`zq1jyC$M5RLSVdr&9YdTN#I+WBT!& zv;F;CUgJ+Y{G5WknxgU)D(E#pnL-E%P2vlz0`Nr()`~eL22MnP85lUKfc%yF2z}2Y zAhgC~Dbm8Mj%*q z;UW;X4;_t8+OWkEqtwX<0jJPxu?SThwjU>2_Tog#Hclk9_9gP)To)(mhKdmoaU#d$ z@wdgAwrge5&~X32$pXFc#|42Es$;cdA4SCSKzTBa+F0KF|J~`Tw)ZyH^f%j(7E#4n z+0NP*%jd*LPV=hE``0(|!I7<;x?Jb?uVE5vl?GmL{1}?8;I&t+7$k%fdufU`7k|Ja zW41+>r?Y?bOq1nV^f%IYzxbk>D>jJ`STE+<71R9Bd!#bcXnN1Pf|N#`cI1gP*SnY zbWZPe`N}uRzf#n$N>+5K@zR`n9U2qWVe?|!ZgU~J-O7AEp-eU{J&eToanyb+a>c<5 z@5h=7&y-Ev;E?jW0aa|qa&n!XO*q5}Th9cCu%KL$krvYS6JwB(N2hcMc?LorA>%uV zH){_;D$KQoJmV&}U$_xFId;H<1`Doms5z%AR=a1g3(2w-tK1dx@J)ICe4iP4@HT31 zRf9aTIor&BN-oG1*dPx{Y}L3y9=bgOc{IJ0DGzoDd5{GA!XGX>U0z7nEtY78zfrZM%pp@`p8`S=OhO(eOd1K3 zPBN(YkT;6#^Bp$B(h8OM9;jqKRJ5q{tT%~x8fl9~1VTV1P4t*MFVeF@CD1~c-K=lB zVdCjFUfAO+ToM4g%{tpH{iXL}%*mjf9B_7kl~WLs?Dxn&-|R{Il6dr)^Lz8(X->Zd zCqO?~1j58lIn)ZfGKSV`bS^R|)K?n@jb20Ps+96pkg_q9-avXWdQ_88;sRbIur|IF zAcis{d@L!wS4x$7=Dk7wU2oEX@_lFhYD zXj{`AHq#xp(^b)$Hcd$rE>R|gn#_zMJ7VKZTH=}O){S(l%9XCmtj zlC>z{rUmzUYiB>A5aeTW%9=L>w6Vbuz?rD~RjK)-IiSU0H@S*w1+~WyDl|H6%=?y| ztHbVP79-zUjJ#P4_FM_~0uV}e0td)Dt0ElO9JdSk-9Lacx)E^xVmM)m$sIb6itsYU;FJZKlYCnzUSUqv2v2 z1>=}V5@hw}U}u!87EBHrX7z94TNq_Ie=!?MI)`yQ8g-DGlCP&!J(sj+54g=r>*ifXe|;;5hVv(Xe8h0bJys^p5e?b7AUn=WjwbKo-C)Cyy*aNIfevAsspJLI z^^+O9ewyzvXC^c~dJhCW{+`R8%TBscJ@Q`SK2ruwWIM3gLJHg)e}PZ~H8B5Kz8P_K zMlxjmdDMz~TveE$A$N`C2xv&KZvrTYZe3DlK3*Z6^f^=R`6Z&8){ z%5dN8v7*0!;Sb8ip>jMSORHWLf^ zD!+V9f8O|mZ+<6*jeUTc%TTHKB(-3X7LTgdIB!wzK#&v`$rk0qDlON2Oe6Yz^^!B7 z?*Q&0RZdKUG!9=|iKB33$d!WcNC4`C@53<)P+#5wNeEV195cg**Np4hlaD{CafxU( z?iKe-YCUSpgP7@|;p62Punl)`>CTKl*S_gKs4nutAB)AwrFl*B=j6| zMf*N@n93DA>~V-ffx0M^3K(5oIa)3`sjvS1pO?Zwb-7oKqsj}S?Yz|#H9>t$ngiaC z;-siGxN}ehHGwy@c)nvy&*m%!p@G0d^A^gWhE)`eP$e9FQpAu_z4hoqyvCVOkBSd5#gE4yV7P(d`}EpHV~=y;s!ejSga@2C&v zG3-S;x%%O;S+KS!@n4M&jpW<-1d)tgsK|MGgxQ{FyW<)?rda*$(;}2mrKI2hJF(g{{c1-aX8-^wAJx< z1u~&M8l!)(?=wGyC!GP%oh2lQXi{za&t`WN1opncuyYAgaZ&}_V`)}Vb`&Z-1$pPI zHvz4tQYf4V3<)xi;yR+{lTo#vr#@T?wRq`ds35;pm^^Zn$SUXMU-fSp=lb<4Xz@Zl zF$!K1x6<0x?@4dnliqsQ_0ORqw~%;twk;VMiCc(mW@S4vq7l`@q7I7v>2l`~u+3y8Fp*nbSjrj+~)x}jbXxU}4QC-Fe za6qHRXP({~_${b1JyK{1hXc5aKA)d+3VQwO!Bzg3#6c%PmG(EJV`E_r+`DeGzvTId zW4*Vwy00-vhHt${L1=on;|AqPHC#0Ql}4gnmvNV&UenHO7$g@#8@K~ltrs;59_FiK zKkD^=;H#~@oMG!AW^T&<^E5`9#;`YyQ9BJPZTF@@OWO5;g6wJNJ(LFlB28oK#Z=c? z2kwI6P2xxFmQ(-mAuup|0EtaA2Sa z-56-azUF)}f}i z@xhU@9_t-Cffz*={{_-OM zKPaTGhV!4_JzR$>P69EP30K63`rLyCY_2^GfLKi(f&!@Ta-DLq7bsW)e*@#C$h*e) zyz+v}_aY4AuLhQFW-9MJ+$nQbSP-S5wLag)=R%LHm=LXK@G3tC6vpBo+7Ik4*_gMh z@8puH-dyB}cc{8GT#YVUGCubr2iaI4e^HDv4yvOT z#>S>GGz8NhbUU#hAD>FjLqe^%Uu3($icuVRaRLu)KY~j#L=J6tm<`X^5|c5rlO~;{ zLxK`a9ti|Q-~~4X>;3*~?Q`zARVBGRK)S!LEvS2jefF@{+H2ZtuMLX9JuJHW7MXI8 z*g9&lgJo3vfNE?C*!l%mTd_Ebjac^}QG#Q@)9c%|mn4m9d0=Q3%dbnF643Bv>mEJo zL122e4w5pCYnh@@8|suE42t1i$Hf9#huVf{Jz>~@b4m%L3D?xMSzdV=37z z!ofI^+B_doA}%Fx7+lveXqmx%*$}WYAkC9-BWlaZtIuwBDL2+@WL};@R;fWH@HJ4< zl%7pshrR)k;yQ>Rn1m+=5XZ?I6GEbM4HI% zwZOn)a+0MnH7=-4zKfI^@j)0DROm4@_pjN4tuX>=%pjtqIq*61q~)>Vl7v2s>O1^k|f zvp%8IeIA{&y1X$(LSxnZCeBS0MX>7XIK5IBu=0dr5cCBcIof4Rne!!7@zKanlq}%8 zDse9UMmCyKHOmLeu7W23zh2o0DMNQ!gi+v0vDTmkVaL1^jtC=qi7?1h@hr`SRQw0I zUnR3aVf-yRuO~P!m{TFSM%;OSn#N`zm`+9k>zBG;T-V(j+d(zlX$DDxZ>&)H)C{*74Wad20Gp*@pr)dEuo!UIM70Li`8&wnLo9S!q8_c+Ex+r) zK$uRUb{f-*E)dXIr6fePQ<(@%~)vLcOOJneTgt zOa8oMgg)t@0UDVYA|))vQX~0^VBbP4_gn}7D#EY^ZahENYyEM|?j2;|G_o!HS!{$-wR+U z_(PE5bYS7PDVJpStn{@)Xz^d(A;S%Lci)8_Ekn&fYX&}iAsm~i)3_S#<|>zdh~+gOMZrqz`K@&&K^RI+Q&#zS#i4BQnGlC+kET ze!Axs5B&F-us5uN|A5BE>-FeV%0}%aITVor6=-*8u;igYTkP)W07HmdpXw_D=d=`M z!K)=z_heeNH3P`A>g!2W=j_O_79Htz^VZ<(Hf}h(jX$qNcVRh8{=L@V+_sjv26BLl=qrA%EnHA?jD9*i#Pu$mAWug!m zF)<2gpHZ<^X|UXyL&0! zJ;+gBauU#8DIw@X@>iiCjTn_+*;>wHGOqKc#6XeGEUkm1RM}c$Ss#ppoq>?j-3F4~ z$4CYvxX?$i)kiR00-RH~9Nyg?XODz&C}*igVs7btS$@(Us0znYVZQMQrnL+fdJsJ2 ztD!rR)h+A(KAB9!l_I!Ac-zG_XFgIYlNgy)rIYz`oIeJm9*4l#TEDo!`E+c#3^yZ> zjnwm>jTvxK7Z84O=C#yP7f2tkog^xea|G3d!vhC^mnZwj3NaSD3Gzy}ZW{SUw zv_QqF;e{fe8!uQ>yw?$G;4QxVNu+WatYqWH=;C+)Y-WhNRos+r>)y|fWVEYH0ZBj` z14dT_2mc6TZA1rc%6TLIgwVpwc|IHvKA4Yak#eMXIF$p3^NVFpjTCo$!;UB5Ua>(; z6K2FZ%|a8X`Pg~UYF?>99365znF37uOWh>XTc&7mR1Mzz(X2OW^N`+9(-P)nsxuO+`$;Y!P zUw`PgRc4klEDuAglw+s%uHsWbw8xBRM?vPfR~5T^a&H2XG83gEeeCJ7!bXr+@wW4# zldER&M;j2T*3U_fXzdoLJft1QA9)6EjwH0Hp-#ZSIfH6Lw92Z{MkPi_@A;rs!_iQ~ z52zuZgpzr8RCNeHWb6j?Y7~;V5L{U>hGIk6_;CRIbHMf*j4RfbG_c}XWEZ(o zDaye%H(a>1oa>|NlNm0fZnda9sb~l6Y_#~;-I`U)klag(XBw@YA#CYk!Ax<>GFcCd zcZ?jPw=9EQK_;JwF#}8kaNk>(Q<2U|9z>=(g==-zsQftGbxGZ+X-(!@5S=(K`apB{ zdC^L|8)n&vxzR@!15nNQr4_i6KD42o`)1p%IU##Wc0U$mi02?2J_uCw$%LA zlZu~5v6E}o7GExe<0>VtolZr9Ui<{-Bp(zZ(V_Py#f^7~`rli2NH$TDLgFE*4R;H$5lp{ntNLJ97bh<|T8V2A~U!3=6?x&f6kd`2{1e4+|S0 z|EBP{atx!ORcq~az4>uafHA2yFc+`FeStOvmodzP$iS&&&={vOnH4SMR4g5fQ}H8C z)pky0ckGJ{oC;qjtVpQ9-#aT3+WQ4j$1DRo+jx!Bej3QfdV8b2eK5Qgw$4c&PyssjsZj8+3LZM7 zY7VQQ@WB&fA?Ccu@qA@{HWWzWab2m#s`wzCkGCr|3)7~@#4K}h824Dzga z>)&PiKRgEGL~07nf6#eOOq*uCpwdM8*S%NVq@smpjX81L)}ZG0acU;>Mpd&}#n3IA z-O&C%W;9%UQ`aBy>xXpxLBB?%GoSqWs|5bE&q?m|JB0y_o|D|+cVFQSCiX7BL;30> zkLFUNFJ!B{e{cE&rqkeG_aXRzgbWdWilN&myzA&mWckSDI+Bmm z7yI+FH8vXAC`NMc3M4ld7k_-OMl)B9#zsLoAHZ(_AcVA7cveb>IE9n33@>)h5^lW9!oFwhF;9Z#pkUTsQm%6i@*XM=mfo3(wrKm zd`MBcjyeG^Aj7LT%4>_8KOYruye~$N2QG43Ijt?yBY52jdh|HvBC!pq9q5L}4(ZgD z-l@ys1`h^n22MBJC#Fb^Vj!rLoip3SNlw(e$BebnqG_8LrG%lCF2Va;&KxRjh8J=!oX?gNf;{8c}mEec@k!;H#*JBgMY3@v6#7fee7WwEzY2> z7Az^wpe|&zNDn0?Fi+z>9Fu{CJ)ef2U_2#lK(44c?j7|gaOqLb>5(Xknl{@`9!Bj& zfxNnR;l6>AQuo=?IEa1z5a1l-~dH< zj%AU|Oq|wiC9PH~<^TFG^PlQ(!xWvv#7mQ5>3+UvvrF-5{h}CuLceIepVTk1`BVIg z47%)Ql?9k;^-0#CkNcU}Batw|MkD~Gs2MGaWHb0%68Th@n{2R zu~qg$U?pM%VOqDr*Tj;Ax{;ZOuqiHKqb#9i@By@-qy!1)DJFPj>i?c76dN_@mC!7~ z=<4D;C<uXt9K& zxG3@l?&xI&Je}DVW)`l_w|#XP_?bJdfanEf2@|jTI}M$3hLf zK_S!hfEU_JBj*iYqu=!T0sb&%Jqe}RWRiq)a-9yM?)z-_NF zr~=At?0m$4U22D2D-ljh`%1f3=9R14`A=xhu|@<@z-s@fKKBdka_&jvYfvOu!CPvOnC^a<1raV$<23B*meB3`t#g&?EyiQ{md@r+ zBHI;u*7cyAY9dAActoJd4G?u68Y>M7txtLM3(^$E+O=gW!!kx9A)826CY-`G81NVb ztodck)HxrntZX`Ak&dDCW9`yNJjO+_qizT#MOzzK;-{xk_ssIqa@+jE-WH=1GYrWg zAf+4nXUQKDNV-qQ8dt?2kJgAS@;1Bs(K*8MWU^8d5!Dz%<`l>4As&_YsJ^E!Hc zxXI9;?lZ83Kl&@?*wVOV1p$l82>b|(s?hRw?rMvwF$*4V2y1P&sLBH^s@jJ*{-vo= z1z1Unhio@JCKimA#nMr{VJ#HF?g!X^5E|lyJWUwZWO5*R6Pxv3CKAV&M<7kiLMN}) zHHAvv{(nF4U3e23oD4hp7t27Jco0Zq?=JL@6i9V_j)egS$?v7K;UoWo*3yVLS zmThk`ORN@qY6K?LF6=9U#o^Lqla&~4RN)SYeNf(gqe0DiOd*{YJ4(>A79t45gbj!o zS>iEr!l;7+iQ3V|!H5_YP|z$+(mT`FBlL0{{AWWKF>AB@DlCQ^7j~(zn3yDndaSS* z>`J>}|Sd6Gsv>E!pLdG{qa$0H5?kEAtjm zUf{Xr4jNpm6|QU>k9!mFY_dLRzH4`h<{FcWDit-tBJtQvpM^-Bszq>{JOkYsf!y*@ zZxn}4WdGc+eL)4Be=rq`LvKuX6tCY)*fbc~5aE(zq+HTM@#lXTb$`_MyRLGn5g4TB zFhs3eR|6oLl>zWrs(|lM8Ml(Q03GuZFOJkYF3(6Vm)C=<^~r0_NiL*gT)k8~C+T*3 zM!Rq$F@>?>GfW$eg@+Wmj2j_kLe_~bhpQIC09Kia>;MxFT&J&v+QK$@==&k&gNazO zIhAY-*x)epX*@dfd3I`DRTJjS(O?S8WztZFx=)B`7|7;oNQX5fQBmTi9Tb+af{i?s z!iDOR%JNsQ%tuwtCXI6~_*9|>=G6f7auUc61hxgKvX?!uBsFP?9`tf3{ zaR_v6Fj`GXC*lp#y#)QeT#7|=fIZ%$L>mM<3enB+*y+1v$IfLO)60Pc9XinneoIaRoD}lG z;jpmGrN#k(80NWXj}8hZ@Lo=_rE;zJ32Z8^z!)W*X`#t$z6RsTtAgpUZBKB|B%aph znaHRstcaSFsx9AEZkVJ|HZ3u?&KDIJD&aip3e$e9dv|Oc4?=v2DZF%KiU?N^#$?}Y zWNaOm^;$=1vsnK^+;wz;D0b}!08>^Oelp;3(p4JD6tPe)7@++`H4t}~6Q~G_W;;e8 z1C7E!z>4jFB>U86gW{DY9MEWJRz+%tk$|c57su$50zhjR6`ZAAS~EBT!<71B;%<*U zK5I0phUwOjvdtSUPZHuzHw~_I3^%a37}doobB-LRs0p9rywk_Ib~iED6g`fxy7)@B z+8VzCDWvS~$deapqepN+0n+YgNR=dE#OZ%v*HmQ;_pJDuITQ)oyox^Oh$Yl!wJ;4# z4V-k}?!{Grt_aD#KOxL0P{fnb1k>9MnGO6C{{diniO7Y#mwau(t!jg&KuW7 zj{b<2p?w(4-L|v^?Sj(>J^5?Z$Z}MANL-tIeFmTdCN_sA$WO_%rvE2x$8FH28duNtX`MF-Xw!OF+*Fiw9ZWGcH|0CCJ7C$WRhS2ck@a9yvVFFTDMMHxx8)GnU#b| zswBETB~gzwy9sY&p(G4W~p7 zB^LS<4zP(jz@!U1B(>r!IZ_9hnXLveRZs(1OE$X!Z17@G*a4PI0}}uy&=|ak5?KPg zG;on+1uYq1xJ6h!0OG@-l7|#9bU7YR{@9ZZuh-hl!vth$i3(Ral!~R-(V#qu$ zXS~n*Ymw=)jeV};cqC1t&^l$#BvC#te#3Lv1SrwhejF z-a@e;sI&m(>?(Y}Y-HvP4}v+vJ?2agI>-NDvg^Kk$S<@=Z@RMv!nXHhM1E#ef|kbs_pYne4js@K?R2CwWJVuCiAMp_*kazkE<2?5A$yPz=!kk53|F2JfFPhiZ%Vob15voQgx;3 zoci=L>rj^tb?>=yO~0!SP3GNy&v-*fX^7PwkrK#0RKjnbcwqXSs4p;Co z4~7-cJfxxq)DUH{CBoetU|52TJ-QI~e0Yv3(n3z0_QC!#Xhx0Ifb&ym37n`gQnt{W ze3>+v?co0DOTgoGMYhaqoR37uhzJca4Z8lQ0qF_X(e&Tpzkl|b_?Lr}O;2uj2D+MCw|U(z51 zrQsnc(lXQ_N?!-dYLhRkwt8ZXHd9cX!nV*%2MXB6 zrexrSdP125AsoaItqSK_ocEBC3=PxlgVtB@Uje6`n>E3K&)K_D6rlNf+=4B$-%tJ&4g0?%k*kMT04}1Q z)RH?zB4i`LX_OTIIobBiIO?FD8o(4ah09p6-~=W}2t~#B&&FG+(*>NVLb*D$FAPE1 z8o9=7mU`ZAYbYbNyxHXooCaY?SP@;$r2#<*at#SLDnrsaHPw*tF3^Qg(2sQD7?wfV7Soi$}T?^f(V_iSbVyOEH$*Q_<2CsGBm=hS` zR~U&k&m1GTW<&R5>ps3dVI*E0Bj9fejGz|CrElSEQSlAZ@W|XSFdZ(H1(2M72fo@I2FV$vp_k*%Khx&RtE2GQc22 z@xDli@?c1a+M4`jwia4OdD>Ja%2N%Z^~l)pQqnURnD9j4+<@zIBd)JxHY{W~*UtuA zKXU=gF`q%eW&;6h?=JL@Bw%IxS&S!_9^(l)TDT6=R-}2n)|o;qK0lc~h`a~j4me}Q zNx{sNLPPin9sz(oFD^l0 zGLPIqhhQ{yBx6*&_bQ(0e%4lQgaEDRK<)xPch+lP99j!#+>lT3qJcA|nZtdy^EnZ8 zX}jOF_QV%kWs<;v)CL5ngNYN^J{7j8p|3F2K2&6yIRI02WS*l-P^E3;^h|d+k%%Ql zfmQl_5wM6g8TcGwALcg{u_iU2Bbo2*xrmjz?OHxZaUl_?g+;ipD?~eZ~6-k1fSo#qc&$}mSXse&%0ev9ze4O6ZdufrN6ea}JYLI@L|{%RSbry<#9MA2Ki zrt|j6zPZ9ZVoZMrv15`!S_UhhEPU%FaOa@+DYtE<_?;g_R3@k)G3?Nw^LyjTbl!p% zwL_w(jZl$m>1>a4a>VMPC*Q|-I67(ZT+W+e6>gdVIp)`TTTdF zgJ__6s%{YQC3-#$dfpQCmYa4d_s|OXW8>Nr(3_C%V)TPaI@CM>DA zc5={MaA%BaI*jHkWQhQ2maMcfpDX5LgDb2f8DA~*dOpbq_oUPn(+clbb5pG*sfGT@ z)cQo2x#vLjqb>Cw6)Vq5PqT(P)}Jo^JyvI-z4yFN?vo#M+2}o3H+Oq%dh!p3I0t9;NO&7 zR(}HcHzk*bCtO}4?e4;U`%db?yU1via$&WO4uRa-Gq{m75yTQmJfb)l@o`9-l%n;`Ix&^!;yEQj-&F)07u@f zP3l&_k-B9#+LT-ff~;HZR7hT3L%a zQ?}HZNtYK2@T660-;`{ukr%aZO4iqjiP|?MdHo5sZ%U@ZlR@p9RQsl+%Zm<*)&?_J;K#7)yXvFfCf?d;N{qE>#*YDk{+kJZZ@T6W%>H42r*X#Lut{+LQl6`yk z?tNB-B8I9!!}LvAN1PXk*EkP(biI=*Bxp@`^24SuQ3grRs5dzB91@_}^bl0}MopEM z`vI51N-WIsA5iG9KNa#oC%RCZggq$iCE6d-f@77i<>(cIZC1i|t(urDHf`4q7tR34 z$j3ZcY$PX*(g-63I<~EDEmf|RelhCm*K(_|H^sOiah1=fKoFEq+@FkrENDB~z!(sT zOSzXZkkyOK4AkROPv}B{iXudY6@oq#1h*K0uihlbNG3Xx# zPsbpzTPxTBEp#PZQ>7Xt_b2z2nxyqv?khD(ZX)h0O-cRZzKUqVo_CE2ZPzK`#URi+ z;Cq>tam%iUYGUDSW$&T8Scq7J?EvDO`6)M*I}Sx!7$7|3=&_**Y@^cz=L?b13MyYg z<>Ap2s5yX%e#$h5QrRb@d_HdEGU{D)vu5NLAGD-il7XLbGR?{;cp0mWVgrr_HI$s^`@sCjCkVhPOQ1#!{BR z2djtU$-)qK0gM0;D@ac)G z2q+et@i)*V@mJx7#Za*{e?wBAM!uW}XqGx!Qo4inMDbcxcT}ijx?I2u6J5_#58Wqv z3roX3j`As%oJW{b?e6DT5Y8txDT8Hg!1L^*P=@7`TPRbmVjiYfVczwr{+g?(pua(p zXvX-SV*I&(3WI@j^Ro-Nq$3pic+e)9B{G=%^i4y8IZXi;emJ85Be8#yxhmG=>x7Hm z&*gn%UZ)3r44d-I!DT+U?1Dg233}Z!qZr-KG0`;FO1=?HBT+IfS1co-t6~`eNfpZw zFQa_LGSHx`COK3zs6k`U2%Y{ZHrZ7RvV~&hueJeV&v={WV+NZN^(XQFr_g6cZZ__C zKGn+vA?fm@B*h;D{!uZ5x=(uKyyNP;&E2TaJBs0H;f31)g1~^YpMoqFZ#TCNI8)SE zy~U1NWZsNdt>zrj9X2)+q+^P)wt+z6c^-_)NRE=vSKb0<*1A?B&muuDrd)M~Nv7d_} z-n~Dcm?OdsXw4Wt*bayysJKizeEbT4@;wIddyZd$T=7G_=;f2g?L}{{*L&1n%&(x{ zi{n+GUYs)InOG%M3_6CdVwHF@{}p|kyN0_qRH|1R{0%luRfm3 zK-tE^X4NyXi}{1qeV}@BmY$f|U6xs=CuVk+PuA**ncZFB^;9#mX^`4CCFjzrmy^}a z1FY_{_Du=32eZ2@L+!!rE}u|)FuT3>4!nRXSb`9UH1A)4Bwm&0GPC)SnLUx8X=e7S zUY<|%&df)9r+4zFF4y7z{=8%VU*nPUty-F)J_iIhahbaGUY1XZz6?7L{4U$>6g2QFj z=V!d2zj{rdK$t1%M#H8fYcXgFKtpEv6lPz)ah1e0;dR?{*bi)q&1?V)!+fPi(8rwq zSy<-APSBn6<)~^wvT-ZC@v1Zqv8gZ)c@T_4?qwWC(q~P@3`Y6_>s-)q8K>H)VPJp| z^IxvA$(bvp=Bw8rYfu7L^&|nfP_U`nuVC5;$+Q{yD}$O6+>xvCORg@(c{bBu%?Qx< z^|(|8tjJ=T4DrTd=&iuePtc&)bb~)ZS)rZaE>;^nccn(uQ5nGX$|dm6(7r}H=;I8{ zp)*R|Z3IzL+a$K8wpz8MBxq}Dt5w)+wn^C^PA2#fvA{U#AOhbC+ z%WS2fo39YmGC)5tgrlIYvzkYD8(NfOg+A6s@hrPeQPfi1M*-S#JW?`Lw4Q?@Qm)st z!_dqW0{3xL@U~j9*8x-VUC8gj;*VXgx9h=*J*tj9m*0b<=IvUGpe#b!wfr73;c-Em zzN1J;LpjIA-xl@m=)Y%%uueoFX+x{ zBM6R@*~~`ANZw+rk(%G-RX1EU^?;K4foF(5`il*vzg+xvS@8(I7slD#CD+X)`hC&z zCbb!w^eMOoOjnr7`2gGhbneY}!2W`hq1BV+BbXGwftDyE<2E>1@x=CQ&4~3*`v>D+ zenEeY)}jr z$|gg^{oQI()9&#O03G2TAAnsgHh{8-tykY;V?5pfSpItS0eF2HK-pv`U!y&&s8ieU zmgsl@=96RulTqumldyW?I*zh7QAA9$REJ;56<>|Km9Mzl3~)rM;jc0z^HsO^@_VFB_2)Xmqv5gdqfxCcg-W;h?CA80>-!5@xvYl zN%u;ukL9N!)-_S3ew>C-N5_@EuJZ}d3c3$UN3g|5%pH&wfk){dCV0`{m=J_jv%Q0C zCA=iatxFUhFQobFiA7Y#YwUg5yL|aYy|^Uz7;3LsGLtn+W=ZKTCI^;`R2eN0d5Vqs z8WPhAvTeAsDGeEoOaW}BW6GqCl^BITmS>7zw=1|vEOd;E)Z)gt@H|soc%CUPJkQiX zuTm_nEFi__FCtu8a_FNNq%GH-(w1up#&iK&9hIid?zHd~L}*_r zZTY-%K(9LV?TO_~DbtpJJ@te!fWddwr0X=?TmvVJnD*DfwNq(6wvLIy_Or3XdmDB5p{kisg41G{B4)OV<7l!K=AC1huZ~$*ESC$_+%czCqo3E z7{QA}h%Weu9}#>qkKmI+1V69b@d$oN(aJ+ff-*n6K}QB@>c61`iRg||xs8-F^R`Ju zD@f)o-;eA%RcK7Ye!ZA&_%!@A&#cPnT7HFR88#Mjnxoz53UXeg#;>pR3Z>mIT2X8j zVQ?x5fkK+f>eTik6~6I@p^L|<@%dycq@KlU0|s;9$O2131RTWEgkTe&I2}1GC2Y#D zO={Vtyi1(`7Hmk&=4XD$e8&$lZ}1OlhU|hBn%MSE)fK2|yX-7jL;)PT&$R^PCQxv| zD5I(NgRv!7A{zM0GW9KHB@=*jK}>(S^5_t;0zv~n@*^rXE7c2J zGx`}X7cPQL&ZY+xV|9p72}>cQFUIYgP*iNMic%09)FZO0m^)XsBcYnLrgD&?b^&9% zXuS~NnTf)Vp`pw{?1S>$vdRo(4z5(RW1LLy5MIP@kTprR5tJoiClKnhzP@px$j&`% zF+302e5f38VuXOJ2Zb2U^e`X6`4(vdM+>=&JWe||X3dHan65b+`!$Nzflut_ zEA8g(kZs(3fKuep=$H!Z#TYS(PDQmnS-5KllaZTpPnJ+>6Y+8G$wI+>Ig4;&Cu{*> zPgZ8eJU@1tL}aJm;j@H)ixaV+6tQcm&&GOQ<%xT;F`OY!K<++A>P&D-X&cXVuY+W^ zcYjC-mVG{7>1GO`D&d0EdQLL5o&yKh?BcV?<{Ui$xLx_Z)cREf40)aNcZtc$6W>VL zxTTNGOwsP>taD?tq=g#eX7x-BT<5c1(K|HB{PMx1VK99;3yi(%IJBV+g9@GbscjZ) zicYk-3gQMs%!@K+ODx|v3ko?lr5G%63jmVD9%0X5L&gGnh%r-=42z}8#$yr)o-bvf zfz}^GRw8{k*gHraq909FDZB$Zj^dn1#0bO50NS5(dPVV(_9F^R%m4 z)IsPM2a!J?RX_4EJtbYMTnZ9wntn9jvROKzIf2*-?IFAe z;9r}9NQ3yLXeu9-fQgthJ@dxKgEu6ErIg+vZ0MjWrbqn91NWqk1}9v4XLL-BRqUT)TJZk{;DW+f zRR)w?p@Frv%7bcGhEFV>lU|gn>{U!o53gU+7sy>`8yy1sk)vJZcLGNvFhPDaXX%Gl zRMfM)L&;I+MjoKR)UZH>S4l*PBoqGpJ8nX?(nmpky>_&=Me5SzR9*a%^~NNLSuLdR zJW*Zd`amwvtI^VRu)o0Sfpf7O;jtWQ!cI8Q3I&f-Z_~| ztGH_0l_<%ekyMmK;CGU*Hn#Za1VK}b!3n~gld8~tk*;%J3k3FLn+SEJu>U zcCjrUMUepTB&`31ND4+*g;6Ywqp%OeN2(wSycnh|Sw3i(K#X06lLM2BEU?#!QE*)P z7ut$o)72N-9SqS<=hmb(EDw=hiRH%S0_6zFfRg)Vt@WX6puuQI977>pQ27SBJqM#Pm|{}D%LLWzSSJmsy?np)6}(5~{Pe~OahpV|p(bO=9M z-n3*9R1CS=Ta6S>%(5jmGna#QNZ8;{Uk$}D?pif!lq~>*o=DHkqy^Esw4hGsbM5XB zY!=ZT@VFd_*e9?q(uko(%V(jwOC>-SV{Z)kWj2>qsPdMQd+^7Sd+_VYJ-G1X9$a{G z4=y~p2N#~)g9}gYA#apKqSWD#+l6f^Bs|b;kkB26;>4(-5kxE@0i}q=2*iBlK?tPa zJ_J(0cY=IfQt`y)YY>FmY>J@GE(UVamDp^vv){#|0o<)$WBkxxCPJAagCZZG>%r z-d&TqT8~B3(PP0|Bw$4rleu*uxspvH!FoFjWiCN?_VBnew_c}0u@$4-A1&kdfapZ9 z`k5e-JIZSW0Cc3I>_Ib_75dqPmY^A?l5ei$*P{fLfCjx$TBCvuNlN2tC+}_dq^Da+ z>{=?Pd={m`DS|51O*<4p`=?+iQgTUAg2rUN(V4tGFNn8oZHfBXHOqh6UfUktUd!!1 zz0~$v3hLUn*HRVN+FnZ~`}WS;Udu4?q_Kq8%RsYKQdp3X_NXVSD2Nvf8_&{@+*9*3 z33g+<*K~r_W4UEU;0|)tWo$NKq8|Q#;_fG6OWB`jx7k?tDLQx^EJ&c~^kyA2s(a>E z@Ol&pzL5Ln$?kN1Z$7hz{cz}PbIWzlO4`t_F(4M;NnK(rNV~ivW5yDc;sP+X0t;K# zM0=MeBglp*#2q2`ojp&A$MB?~D07qMn-p&ulVJ&uVp!RnF^5qJudVrQNG~S-OFq5V z?JyC|ZES1t_#kz-Eh?}U;vJ`;ZZnFG2xgZV@qHKwq;Xz^b48F;SNU*^hyJ0ewrCbF z1jkXKv;)xTQ0LV^I0B@m9tfJ!Zh)o^Jt(g>R#)q*tGv3h$UXbQBKPd79p1)vmNaPi zCC=VP+4>XQ1z@dOd3{0$MpNx<8kU{qi^QWksJXtT%L370z3+Gld4`s_Ks~1-J&E<9 zvaZ*Jc@nD>c5?7!ZZsk+eku(RqO1m3!qU%1r;ai1Rx;N(;jVMnNPX42Jk1$I!zoy% zQW8w2vc@h$-j1J0=BH&$hLQkk7Ftq9b2W9J*|9Hk|JG_sRRLC{o#>4A9Wn@FDOh@4 z0`+z9dV`efsiTDuWW!9syXt$gs} zt72_W-Vlm!z8xL9yQv4i5su-5ETqw9%z;TLcaS4UcgQPaM5JOl{8^#G@IzK96|f14 zsO3-XUMeUh2i0?Jz~{;iY5p`Mr5!b6YJf&H zet_FO9Vuht;2obMbTHbP?(b#)9Z9?U}2SDTCyubVaoTBMDl%x;?F1^6gvZZgjMu!npIy6a&c8P)Y1P9QZ&JTAprWo5UnpZOh zF2xR@^^ko`&toJN6IoDHn;wY{0LQfS$1@tC1))sPM-ZMDZL*DLE`N z{V7BU{g|VW@mq~(lGOMjtV`nir3T2NR0Y1ib}`;E^@}msvZctyIB2~|#>yAN4XC$| zQa3SF7-*j#I3_gK8amV)WA*9*nAeYR7l7X+8QTsy`5l|Wy7yJN@=)_sT+98A%09Y| zA+yh7_evf&J+F2wBUM1>tr3d(B>32%W8|%>yKnx0zN^$r7 z&9PAtxw+>IiS>0nl&kRr=EzmUl8GL?7u6b@FJ-w=ly<&8sf;f>Q# z(gdz+>KXRccW;}{!7t~%5(YTw{m5)8U4#VDQFm|5`PK^x_USNM^u=tCf|fNFZTPxN z8@A#t&3#+q>vb&3al1)j243r?vP@~r?H78&j#ZYpqk_Ssj9PnChN^=VLZJ%cfD=C_ zJ~vO%wQwG!TOQ(fJulPZJP2!DGCi0;DMFqV^S>x1P0%1Is(?R6`Qvu?eNAyDJt@|8 z?`$HGyoLdB`!tf#P&~y89()r5q5D;fx|QJ|nguc#De5F+w%M{$A7XJDi}erR{|tVK zw*4x&N;gE$hH;_*F(v{LwUV+C1mX4B5S_aQ3H2LxjI{_!>}F}h2YEKSA!-8x-W+1$ zgw1J|32AF#6-WPw%QYp%03&;IR(K$g&BfS+%((kw)A*TPxlJwrXvZ(b22o@D`q;(Oa`lVk#Wsde z!4oPRLIv1g7j?d6yh7eF=M{{GWSopf&INpi{2(mv+;bW1vauy5MP(k{)o<QuqY2UpMjNJ zbM)onZyTb^^rI?Yt~Z}T)v}lhnVWNBk;=1OL^_Fwf1ZaMINV{noc;u_oP!`pCj-^Fa8%`1%VR)mLod>GiDEv%^Lt+tl9G3GkZlg zg10mG44Wq-2--=h2_yNB#NYjhg`M5=K-Ho^N?@&c^ux4c3FiWv`P(%pG2Ks zG}j001;q(V6c8{4vhGp%5f6K2m*BgqUPOH&&$KGa&<0-%oEm%#w~Po(Ea>ZuDI}b& zgvp7k=*Y}$eB^=u*F;#TURdoqfohCi)Mx9Y%MB{1s zC1yjntxKBevaX>Xjdt29Jjy`EqvEZ&aN_Q1^6BmS`T4P&L8V73;DHzwA1!9T1C2y{ z7?Thhk!Ue+xMMJCz?bl5G~&I z9oAyw;%0vO0*+*Eag**;mg{$@K)Als3(r-rZBD7w2mQ?*dK0P%-@I3E>`}}t5b;@7 z`QqE(ldECc^mt{`F80!`2Mr{;18&7PeGEVN2k@=Va1g}zfW*06o6aJl82*P4_;yUl zXYtK{FxcXQ;n4~~kKfKkYdESX-QACN(~nf74kzW!&LVytXwg1NgM`o$0dxh2*z~{( z$pTc6)2bcg>e@W{wH@?Dtl9u!(MZzKnFm%Ie;69PMB*CA7^x$|G~O{(`J>)TvV_Zc zks~7FAG2pyKbgrBj&A32M?ad$qaDEl-HlhN2gGy6fV+P;GZyNGTzB_bq1#<#JLII# z6PEw9zcC?(nK974@PLz-(aZCgFvy*Gx|4(#d26?{2nL@H25)=o*O_?& z5Pnqn${xA-sO`Ayi|rOy?+8$l@t#ae3*yju^W_(|t2g*jBvQPvNbn-VEwfxHL?8iO zfJ<}zLv#oumW++aaJ*{=fml1F4i|u=FT%@MN0_$z%Y*8gnKe#%bwkb#WKl2az$20# zE*y|k6_jFbZ>3pNT)shbPDNO51gv6B6^E|7*tE435IvI*H$?!rPQC!#B8f0{wcoD^ zSAZp+Qk=%+v17-Sri9=L)(gcj9@)ID=o+OP;WIgk*(0afGsxYjU&K2*J893LdAt~! z1iOmK-N3_$eTI&#+Gfs!hzP))Nc@huODe>e{|i}x%nL^vpg}Mnm2o`YJ;UGAE?Bb* z;^cjav=TX(L?Hk?Zz+8OWk3__<2Xv`V8AI+I3mvCRLxWRYQFO1f;ALrtzjVQ7zj<| zA>moN(^q0rV+xI3#t6vO4o7elf$F7@Ev|&X7%;wfD|X5lgW?Gq;TEPfGxE0 zk=9mUp1LEtn>y)jj5oi|`MN9#W zfvttk7EFc&9uy^vm~KLKT`h?l`+~TfeHl|RsVg>Pa*mFMeRLvhX0@IqHZrN4YGY0vuac$p#xzcs0cog?1ea(7zlnQd{C%?V2*tl!6ilIz^1B+ zuPDKkqA_~n{k}j9xm3~VtLW;1h)iDiQUmUoHO%H2brPPyki2ICA=Wj{FVjD-Gohf4 zF)!>nB#fiTQ| zoeOYXR|r;Irwc!%+ViXvrbh70risSK`CPOjl}4oFv!_&%3zX(COZ5JO^j5qg1*$`u zvlsw`5;W(a?V9EsuIrk!Ju;1jz7J{6p_=fGY0ma29@3nz28PAt4q=)Z&D9zalvn{s zohi=MN`KM-Nq zjzrf1>mHgCh9ZeoaRg{dlRFhhFzz5@MFR~y0p@6{9Y9m~gjyjf9|!$f2zI6QD4A=* z`y>D<2|!Zq<~V3*I}t6(b`WDWVgnW>_*i$b78^8Un3LL&1|?V@Nw(NW5)MIdF8Iix zWL>wf$Ok>U3SjX1d5YuBq4>7Yffn#ZGrFqGC&Jgez&ck50iA;7atMNC%rB^-*OSmG|3T zX~x*#Yz*YjE=R<`Y}qwIFFu(HrJTpEoCA7jsTaW*nCMIa8BdAH1hnoR$digK_9W#& zD!A`p!b2k?UUQ6gV8Ed{K~8X#AX&%&obMuchxsm04NO%KDxRfuSxmVl(Qb z07wULN+iWo7xGFm3QO)MrfKXN1$0~S-tT2+BytVW3i8UX+j=To!g6tgFA!&?+@i=j zrVzj(DnUa9t)_^=>yhLzC=?Czq7BHDr>H_Itg*Pso|Zi12@xtai!`ZNgldzN6?`+{ zQAUhV%^S;{tmu`H)y3&G8KzgH0wK?JdKCj^stxEhIUc>r8SDUGgjT~0G;f4=-Dy=J zcm^aT(J*Fiz6Om;qm*`)J_@RK(34hL6%kBmG!{q!aDFp+pW8#|#Y^r*-5ANA^{aUQ7a%;i%Nj z%sc}8vPw!lq@-XIex}h>mJtK9rcL9l>G%oeLB-gI*}7JY0FtE$go9Ho3sZ`%$j9OR zd_AA{JA178!EE+uN&)1WA53VJaVOqSLxK0B%Pl^a@W#}6KgP?vxrA(nbee;?)I8o? zf)K>}lZCwB27`7Kn7*h&@<0lcO(etZl(>-(g&zy6%Z@vXn#nYrt=UHc7~6-N(TL`e z7S)XHi|p$2s42b&SJ2F@Hz?XyyJokW7Ngq%V0{wV7b?manM4*&uN@K4N4ZyR5z396 za*d@DNNt1e3~3`Hrj2lb0nTe_BVN?B5dxq!ecgG%41iI%HbNP+5$Pb(rA#4_q80d< zNi_8<&@B^OB#9F|(CtEpgbiJVEKE2QE9q8RyO=|iFXFw8gW`H(@2#g-0k)O*7QMt# z&5#6DhSYZNt%*U@UTadL6wBzaE@I(Sap%Wl^LD~8Qna^7C1=pUOxjy~e~doR=kUk| zC7=mEaywOACWX)!03FhM4{z6MRtEn?|-8nmp9`cTEH z_+rX7zgsWH`j#(}K3Nk3s5o(%1}!cqHJGlU#FTev&;l&;KyF(C1)+iJC0&(MS7uGn zpxteYCJg|9h&8?zbtL%xY8o^+0TlB!=&%67h{&jh22IF!(4f7%a$-sph-MiJS=OLg z8+_NNO{qa!;G;S#z-TV={gg;h;c24N9Yw0}Ml>x~pv~`Qaux^#i7Palg2I9%;!b|W z@VO#yBSSgSx^w}}z}Dr2BI#M0VG?JhL54MLbyqbG2wSEnlb3(WK79ef8YpR9mf!GK zz^gGtK1w}W5!2(RGz}81TCDLgQyPP-QCdUXv7|JJB~ThwFG^`VU)hJ!Amn+JCNpmV z71eM~sxG*Xa4uArG`QGD;!ch~v#g=q$7jVE`;)*C7Zd{%Pc)|y*+UTIymy&Ob3vZN z?6f9WTP^{k!EPJKb5strU={&twwyE_F=q&a)%d{pF}WU@Tu;oHOWc?j$~6Az{b3IcI78eND>R2a9OrCabJXK~YU>T2P~uU3GyfyhD|;i}mR+2lU7x zxdiz?TvxtfoSUq3FuYFZLt}$&r33%~N+bsIC7G6(&cKL?8H{=pGqO)5HIQH`fzyb} z;21pCq%3^^6yy9gZczudjA{#`xMz6I+FnkqcOnPCz&$fy#S~#J#VYsGs@LjE29w=M z$)&8|ui`_KUEY@ZWY?0Ii4{3!7D^xyWF=N=j+vzF2U*8Uim_^8U*0? zDN>}JQY>sN)UvotF$qzVDGFJJURt`^9YKvh7@rb9XSN~Va+{L{r{$|7WDGDYOBoE1oz(gnjEG9{21ac_Cz zWL6cmWj&^;A$$@4Uyvz}namhmjm%7@Kqio7(74V2#~>FaGoA;TGM~&OQvx;?#ktFr zfUJrD7yC&1fy)%rH7j-iYAerRS{UawQZ&yXbZ;!Tre_CxB{uV24T-A~L0l7YGss z-U+`TvH--GL@9lPk+{2}I~a%mIB3^6bRKaO+u=+xaac3yHm-N;8ZcNw>t#5<ZT3R9VvWbc7m z=f`tnsv$jL7q9g`rB7JI*)*Vm-DvfPA1OFpqbf)#cvS7G&4%3Ecn!BQm;j+NC{p~Q z@ff()%43L9hVua2Bdf3Mo9bSa0tHm}9CE2z`GMsYL|ZqCNjYDUNU~@{0Op_tRZdag zsjv5$mZW(PQHtno50Ksq2zsA{_s@)?=YS%Zp?@#H>pi-NFm9m83Aqu3xZ%ajL>k43 z307yhLb1Ty-7UoEs?8O`(oqCh*)AwE0GPyzj|Jvh6~x72P6%=ZDSI9}{f(RQ6y4np z8|YKjE|_lh3NY%39nG})Uy(aV*}C;=_$xDJ)f-UBA9G==8$vzZQ13D`tqoZHMBpG2 zMl_QODktuGS6%Ne+I3zbFUnU#T_65xsO$BwhP%FOLDz*diCD+8wl1mbv3H%xcH*v2 zsq5{se?w5`74R)z4Rw9^tD&yfzZ&lP@&#R|cc^XPBhX=B6>tp9A%XwxhO6Om9W&o)Gp=S4aj#U`9jKh@I?^_&q!I%|90d?2M~IUk}(yZq$=m2A?u zOy>#n7`~)EMp~AYJS!i`@BTdBg;Zy)lowAG|AL!3_qK%uLL5r=$#>EnJY0qD(ILwf zA(F8&YMlTeW?g9CGNNk!A87iEzM^#bJ+Ao&;s5~8kUTMmfU&lOD09?1S6{13*k!!i=XON0EF=`~?t z+WyR+hFFalmQ^C_L9jIz&2}AC#uV@m`6)l7hfEoLO*6*GoaY7k5ULcLHWDrGD?Sdd zk#^*6mp(J%%L0IBiXKox2OSovBJ5L|^S zgbM~-V$euV0I1$;OH~m4LO7ijVKM0h7kT;SQCZrr04&&ZUm-xa z;l4sp1&```q6lJ71Y+WvTrk`#DYKy|<*aV*TZ4O-kJ2hMK6WE0l0r=HCy6VN*CtE_ zDSHsQs$?RFM&cR2g+_&Id&z{?L!mScuNgp9P^0w{cwC^3vI6DvD|j=bnaBjEdir=Q z-ch{%4SU<$-AaZuXNo;~&-B++bU$BK=xY&`bbb5L6lsUoY?7-A>U3`}f$v%6wIhxn z9Mt+@g@HMzD^2y4)zwsWwYIEEz28wxaZsq{sI;a$zRMD^b+45+!7S><&@IXcJ9`)l zL>8_f$8ZJVhAX2j>QQBS}am77Kg&`e!PmHNfD|hSpu+`Sd2#_Rh*9KOc1l=NqN$FRigd% zW~ubd1r6e~sscB-U` z^2_R>>h*_!zbrX;2*ejY6gdgQ@atGz6Id(?YB9J8EC7SCb7iH0iyE-*GLD(f4RLu| zgon7hiAfR9BNadaKpnFB*pg4@X%M24)8U$R6}c13H}*|{q5%NT7wRizCOtFg&U7|A z)NqkPJ%T@@E5HHp!Lcb{m4p?&aJES|imxeQxv5s$I-UC)S-eLZRpUK*bZU$(bxeLYr`(~cKes=cj@V)qyt*uwC{P~~z{oi2&X&xQu$9eT{>&Op(GXB@Um~1|< zb>I8r|8V5H7j2$9u=P2={hAN0f5W>Darv^X`zBuY@z3h%HUIm!(&hj4EB5qd`tQ>` zEvwr4hTnb0`#$}V4^Yu7;y16^-uzpYd*H@byyF{ZM$=qgyy3>RPdhI?%%zX)=;pcG z>CJuyQFVGwQ*%r7Z|dWS2Ia#Qrksu}1^_+)1ZprKk?L9f`*E@l6yS zj9203kd*|b>i*o^ZFAi>jTq0rx$Ra*G*<%Tkcw1*xPi69!NXQPwR(q@@n~zkgxUL8pvv>%}mqr1-$!e$1F$g%J^ao*i(~ z8cdx1!627sfC>qDUa+AT)nRKT4XmUX`Q{FAE62Y{n@3LyR-N zx8Km*Kpr&?5&%OdC0tCLFsrWDfO;=Imuknue$K&*^J7Iq*nCdTG5A*58Ay1$#x1|^u}chM?*?Kj=cv@x)~}qq@4mnL(H-}KqxXIA-gkbd_gqTf^^$kY zzUbQDy>IRS<>5RB_Rr0AJ{y~o>?s7|b)w(s-a1D~iXVUST}Hx#t|i4gKYpu8S@h`e zIEuQzG2&7nqT9|b2#Gqy=W{ZxCc8I{V7!!$|5!Pg`P0^yS}iE=i@5u{Be%-cQ$3={ ztw#StWuRmzz@qY^&TW8LGyGbOpp*{BqU-yq1O%$Kh6M?I{Hr(58;{NWay;GN9O;*X zVgf;nAlCpqcY6f_@ffRVucjhAdSCq`=2$t`p#-t1?u{dz&YvI+N`**D(RIllf#u$Q zTBE_wwq}aW^5GIt$AGIA0qJKUODvb9_{}yxfeP*n3|^%FuI3CUy+1Z-c6#-#aYR?n zoiRl4?eZ;)dd1wAQo%JkP~2fx{cNs}P)ZLL1nC@|)COmy{(gY>5qp22c&~pELrHU# zg_=M`Qrz@qn~aDx%(BCwO!0t!1mPJhiwDaWe^$Nd#e97;Uvroi1KM!I9y}c_Niq<3 zu!xjryityG-{xx$G3BiB5)9WJ5P4KZj&9y_h)w_T0X#ZQw3TwSo3F^A@aj%orvTHM zu2oO-n5i*W-X5B3pninAZgij{+~*B?puu-KUu`rEtu9$Wsr?J69g;9f@uLUd{Dy&q zLF=hw<>(=iO3qJLM@yW0L*(2sS-fDOJ6_xBhms*qO3-ZhhnpPygSZzv_pT^f&@*`+Wd( zOWB3u3Xl-Lhw>7BvsZWe$=&_5YV&}qHTB4wJ>W_l!0f{j;{7<%T>+at{E#$sgr3BE z1$P-(O=Dv4Tkqoi_;0_SM)sd(u7py_P}^F~&kpSGXQk3THBH+*xn0uB{ap3{u4|eFbP?~z zN){XL#g0`F5O0HhC8n70t^~~hXoob}N>Y08kb$haKeBnQ{3JSTjDb2#cnrF2Xg=23 zcGs3oHyr9|8T8q%l2olRw)!`ahTsm1LbttOO<9vVf}w~1$ZKMd#fnR^J>~n&OlZD? z)EoNAv#M*^H;4{frHE)L9@9=RsI|KDb-z_ z@K_tCuulUpTrC@GDTsIs_!_I}OZr-cs&4#}i4iUB)*+&~%YWHR;jjjuOszS9N>I$s zUUxlD(}LtxY{e`ex39@lQPW;6Nf<2m(cis?I{z(g*R*SKLJ7Az4@7qSXz$-YlD^2; zRalCXN%8AYcS)1SDo`9f^vmO!ymXcSB{K3r)mD=K+0V5kBN1bW;ZOhMbC3KwyS*!F zG0g!*`4D~%ftOMxh&6YTQt|(r`%afXbmea5$qZ?^q+B1m)g^kKlrxo2=tola@sR9S z6`aj3UXv%c+xoMCeDZpGv3ZBoqhl#En1uI-2H*AAzHm1rrcsrBMg2!i!S=}2aX^^r0;dwdLRY1m*rJ{ruamyx=n`_lmdl-@5LiKi1`2OriV+mvbhpr6G3i$)vUf zN2q>XWf2YW-w!umlljVr8UBZ#40uH;bV~w)0Bxz zd>p?=@k#5?^MlbJ?Jv1q39XI)>VUgWfaqL$jbdl2>b}4E8kpt=8Tq7TBJM3K?l@v< zR&kRL8J7CSgLebUxxOamoWBL3u^ya92x1Y;9!X-om_=~v!JO_4hv)?8n z!vCMScL9*&I_rE-b3EQ2Bw3Pe`E98rjpT9k^2|tffZR!Irbimh z)6+AyWMo^$vZGyKH#`Z{WTjX+rEw?Ryu2Nl;&Ver*$`iNxbj>m+yr%%redhVA!pSdsZlgWzD zYd1xf{(rHMm!Y?vJ=o})I)l3U{Ewe~NWp_y~Y`nlCUG z!Q6D(u%05^=NwEGzLz{_eN2^0+7oX@2F zwyey#;nhM%JGLJ{17|jtipPibr*m-C)vXs;nrI%u(lnt^+An|2BP3$eFja)nVP2Js z`sxHbJ^7^$j6z-*xkHz6gmMarMGwdBanm-bl(4S2@c6;irP5<>xyE?1_;Yxj>4FQwDOMd7_Xo(PLPyXZg z|CI+od-CCb{DbuJYajUS)0`_VG|z3*qo@9GrOoX>|HuzN^MlL2xL|HsspeM9gT-3f z+(MlNbIVHA5=Jhtw6jYuYZg)SEVMaSs8ml?TAzw>NO$u|2cD%PHV?K%srD;&eY7v`dC%kDb4#Ne=exaFH|Bn#ce({Y zX3QqCq}rvSMuJUPAlIP+UwmL$D^u;YVe>xsQFjLZ(!5@mTki)&aO5z_MI@4Q_P?2g zMZQKOr9mxhatjh0&JcQW?g*B4q1*h%%E3)K_^y-+iux2B7CfpA;vWvLoGV#QS<9*! ztd_WY8Jy=ia-}-1@q3#5D0yZ?fX0(6Covn;*xkLl@`mKt1le8P7}Ck#p0k{DeF%^A z6~42}$8LG)gf?VpyxbDd?(aqs(94V-jo%PoJ}z_o5ngG;%~JJF_DCm1oLoNp6bUrE zMj&~f%+dlgNAkp-$17bDJBT0hYREDAU~4w@l8}!D9p~$Jk6M*QpWE4KWw6uv5@b6G zJ^JK|1T5+1(eY9@VuU0dKQa~g-W4m~?KsLeshMws3 z@9xzsW~tWK#ZPp9_cDI?)D|z_dX7c4Yf%<#T$<>MVcAM7KuSk#xsq5PI%%ix%Pav4 zr9}#ymdh{dfKsZh#BRIwh{RT4=2Nk|02nLfyBUu3r)657i}~QIR;OkLWe;?WNhdZg+LH!8@Sm9D$55`z#wN!ywWf6Di;1|z5D9qI$p-wy*k;XpDXAe>j|!~ z9Jujvjq&a`QuHB!@Fu$FR^KOJzHg?KpBP|XHQwDFFHcYTFa@G%w#05%kR!_Nt#q;q zPzLY{Sh^Hi6$4H!17k?ilP=EK{@b1+H~kBMow*Y|q?z7Yn}{^4nBe2QL`~8U={D>} z>?Ea(pxtYX04$a3t|`UsA8fRG?ct1q8Ht?^+4Nz^2@$>Y03BCv2xOmwIpVH3T ze~-do*#C-5I8mY~>W{%M<38>274t%TERI5a#T>b@Hmi8qar$YASI>*JFR_4o))FdC zu9z>0x$Ir4Pw>GlyRxaiv~AQ*HHH(mo#w~%M>~XlZvp!{`G;fNzGux3B!5l7J7Zn+ z&&zYM>)JWet0*}(AHwBy2MEC1OMIYP-%V}fqZ=-9CCW*cJznX_wM2x{QoPAGCBmX< zX*oSC%r}inG6lun3h_0(TLYr^-=d7)(!c?V=XfQE`nF_+c6(_>HYW}Ts$+k8g*oBu z)~q5siWOIQ#!66tOdsuDR)`#t5QlH927LbV+y4V{GCAi=HlQNNcY~C26j2q$+oy_B#lQ>uA_)sanO31f}#6d1yLfq(;`O*jC zc5~Oa+qq)PQ%a*6Q@7s$*JDF}y6Eox9fiN$nV&-Z&7mdV|GbCBhOPfO29$prc0TN#@#0s<60 zuQzGTg76U?NBD{)H)SS# zUskF#bi)peP|!~+!~)VNmvfN3cn_#w6h&*i7k|YZLNM);*J)T-OT2tPh!gl3zPY~c z%UA`_Z;3C%W)W=9arlD#hg3x=X|6J_&~xFa37-^O;Y@hvcT*-s9?x}JG$KbO&$qY;iO7#@*Pa( zxt8Nt8Ou12!w6+20wnPp$g|6;-lG*pD(~R3BcWr!A-TuH#xoxA{bfGZL|28<`yvMz z$U*6_kEw^Pd+AZp3yz)T;DUa^N}Z(52r8}cKd<2F|GeU^)ydbFtBM9o9y5DnfBhHl{j)cHg0!XIuYQzZ{k0z< z%JlEPs%ZUV+s>UM0*Q^71>hC1Z+&`KpGBd5ld7>YW*Mv)M=4l{i$T~=`^bDtT6f#i z=bkEkI$Ds+1kzq4mkAWcVh)MI8L{vx=^ui(3553CThy%eDJzr~q5qiB#WI;JbBW3b z#(e4$CG1>QVzu7m2g(YS;Upa*%V#G*-%a*t$-CnE#ATae$>LMl45Y6;FZ@|%2C zQba0KH&I$No{#t>#A3Q?!Xj}LN9XhhH)!aeNas&KWqBqlZz?|Liwm?MmkD%YTS~t| z)IZFSS=u29^QE6Yt-t{O#>dbc&!73iUvC?%D3>QBRQfdF_gLhk(z^Pokka|s?HZHx zz12^h16?h}mDFJu{^!w=%`ns>uV>eANEl=R!VvHRlp|KirTw?7KJbn|`tA9@A%W!I z{m@P4&OWkAG0v#=*MI%FT|0HTws`oHmB~q6-t>R9o%!35AJyeUUl)3Ql&G&dP5b)n zLm!!&x%MBy>U~oV_nS^Q1p)18Y0|;$upoN+)xgyphIw zjncB)w2q)ne)hk}#5!U3rvm*Y|KS%uN?L;Lh}Ef3H*2WuT+dSB7y67+O3zmZ-e`{q#ij7+${*?k?I}cxF_Nj4HDFd z9`5cm_S3cF(R+x9iN-|Pue!rcclWFodMyEV*0z|ojcM24RCBQD?w-}=TRj+e7%s`9 zNLaJ!&Uc*#KjJe8>R+cf1_dhYC@R?^;fq&u1{A}N?Ac^0x(%DY+e$X-S{(YZOKa< zQ(vO~_}8J?pCmfiHuvnQXY@9X@$yeEK|6WHDf5v&+twA|fpe}*R*}60gat4@^J@&; z5|^~YZOM!Dj5E;wwH#!gCs8AP&+Wcv`ay5N9!x&x2f+GXS3IatQp=9wlinP+?DAR`ka(Dx zU?MyW{ELU5C7sGp$8{Gq8HwJEs)~ofgf>oB+Y~g7W-xJlx6-Z+AlFpqtlN^cjrql1 zN0O*4o~lHLpQU-nsZ(Tcfr$EF$KwZuJbbs65w|_5tFvd$bOR173q2@A&Jm{J<|^#0%|X8r%TUpJHJ2dCw*)x^s6v`Y-hO*+>4AJ8DXLoFR@(c-Hr}XtC z2G$n^gl{ZaawfFmsaT}m!GoQHwx(0b@HTyWl26Se@W9$ zb9V)e!(@qhAnOj!1V2!Vru-Yy3mbI~qcAk?tOae(u(NGvgdg@DW3d2>FB0-ITWAmv z76c2Yp3uz`!bZ|3L#@LqI}~bZX}Mb3;Fi+wXUn5WVY@!4`2XkfG{s9VO*LM7 zS^rP@Y7<|n=*kH(6K9S4rYi*8i`d$&IROX1#5I(mmS>)M#{M|&la`Ekc9#p=0b_%+ z61`F4kAE#$S=V2GH6n=^lvW;29*;^nJQ$4gcNd7S&LFxnhGB@9Crc#><UaaGXwhW zdgK(oxXa?DhVXQWLPC`afjwq)CM{h-HGSciId|;PH>Rk0dA#(I%A4ZlX`PiZwJIF3 ziQB2YoZrhIso-aiS8}^5ULLQCzim)yzws(YK69!<8B<(E#TAb*-^S(5 z#7w0oRdW4pYVPkHY)95#hx&`8CZj_+zNn~Q)1?;Ua#0D@wax2MU0OuD5QKPHy1s3X z$8DzL(4&qWXpU{kzkZY$cgjUurPkVt6ErE)v|91pRo(!fyn@Q8H>Nf*@Yf7NkYDK&uVV4V89Td*^p<0v}DLK%9EcA^NyrA z6z*AlKiVL@4iK{YjMV!j6`+VP&UJ-+oFv zSxE0m$kuU^7GJZaQPU)@Rh98+hQ2_FFnQ*vtcC(4@yyZCQF&0G^WALQU6j01_}*_} zfT(*S`Tnn>gmdBsy;-&l!q6{UXzpwA_tD4C2ntGG0SIUF-WV-kxqVTl3RM*Nl;`1U zeu>K}q__G~~&X0XYHa)F}U_N^+)u*OtT&JXJq<)EpCtun=!ta$399OtdN zGu^&e{w7xKkx4Y{yNU4UbVI%H*n&{jKlj}&(v?@FaRCXZ{N&P!gxe+Q7Dx)Vo4W;O z3eu57wYVdvJ@{F)Wr!Ou4Lu(CP4tc(f*L3fY47OF@~3PcXH^&!{Oi0}?|g+5M6DEr zJM_N2V#=@(Xh#mq3La6G;~4;rODHNGHkN5Lo4c|Ge_h(nWq1h1J-A$j zejzM|GRkQg67LaI88jYT3~AvN@nux)M4JOFg~O)%h->09Sc1oEnbiyFh8<@rSE`T8 z<0~G4i!5c_7Ib>+VJSVofu5Ejz)Y_(XAOc!-FG0%n8}KG<#Cep#13)R6y)RVLYraR zr8*VkW!%uMDLczj)rsCvojT((4?E*7={;}I_}awFHFXBQlHV?=Qde*ZS1H+4me@R) zP+9tv+AoXCY3ImT4HU(l{Pq2wq8&XkktH4ubl?>#G@^j392$}Z=^aE8JRL}Wn3vQ} z_E6dhVAPGN1h7cysAwm+`MAJIgnp5#Jd2TrsXVxj&|ngIhV1+d&h3<(+NHa!0It$2 z(4Z=<(q7u7y{rUyH1YSS9IaMsxx@yhJCFP&8VZcXc&of5&k7G?{VC)7>WEkRNA&Ki zux~tbtb{kg3VF5ahLjT1maN1}gDKc?kY&2J@yEl9zmIxe1V0p9OshE6-DaR`ss;-X zWU)r|%&M!w<7tbW3eqM~(=JsM>6`F!B(Hh2!np~LFpz-Vn7|X|ck5f#=t<6tDy}-b z7Gv`JFN#uPOm13NF`;9m`1Wj-kd)p+kmA7U+c`y<-n{xT_wXR|j&`&>iPz|M5CAc5 zR1-+iSrkpv>5vjr%x<4|N{tpT%qF{?lx05Wq1U{Q z0)@3EkNur9x3RhAlE+Y`ylYdL9zb6pYT>uy;e<*hZ)eb4Juc=UcZPZjKY#%8dj5v6~4kXXphniuY$@b&VKIuh{u#Ok` zsa^5e3Nz&p3);x|v+Ssdrv=qNhl2$WXkmx6REKAA5dpqNhoK|7w5~mmh+EETvS@q_ z{i*a=5)bj!65AYUDT=B^t zeL-)&O)l@|U-IYQ$8hDcmL0{8OrQ#3vR5p(rxHD@MS|MNyT3?EN8v`^e_nKn>juIe z=6bKDwl2I2q!WFSZVKgc>HEwzn<=%L6uD5z5_@llAI3W6%L>ZP%?4H9%o{jZ*UX7u z=Af7VC&tAtwWM@8$>k+F%I5WnLx>I;eTFRD8Ewx1GhE~C2t_;`t=Puu5C=$E8hzE}M|T!wl{D0MUmVTi7I zuQrfTx)zADszUmfvX}tM{Rlyd%J6aS_AujOvg$Y>ZCA4GQq3JZSF4c-Tuz{mj-*b4DDqt~OnDrErgIfuI1#nSG=zYT5$sa$BH}x&5!+0!0qfya{~i?)eP55pV@&bYU-%=GS(EU&{Pb?Uy54RMXN zyVww7&c2b&$L~B8@F=`7!yPzqRb1_MEba-{{Wlnrj0(8AV8C)iBBIU&!Y z@RjWa$1VNWK!s{4zU2{DgeWxbGAY8TI(ufQtZ!yZhw&Ie3>}C0;?=-Ef@rS z0)z4@X?+y@F%r>UaG{&e7JLp1moF-JS2eeC8R~wHx_ViV_4Goc!V7kY;9Z7bM*fZ6 zAQkWxUS9BuXf=*3v;IfE*pl#%0wBsDKr#7ckDQTi1a{-efS{v$Nw$1r(NI8_z9(ug zy6Z$8G9WNtW1n|xaquGe4_MDj#K&R4-BG$RFnoalW~c48868hv5TDSs7>KyDDj1;E zYj?Y*2TxH9hnlb!ZBI5S&ssbQ<_b~oUn%Zz_kx>TzQpAr?6s1uR$+K_!&2!AAc=C6 zV|?$&A6qKjhW1m~UVbBJ_PoK#W1(1c5#}m%DwqF(nHpX~=1d4MNa-oHxbhoI9onL( z{H9VH7v*o`i#_H4){&OJxip-eg0R1Fpiqv_KR%)Ng>JhyzRp`aJwBeC?YAfKjQ`tEeUB{?I#$65+^@qP#j*R2Ns z7FO^R-t(+pggt22zsfOR^kd&|OUgkt#_`17@Xw_k(Q+Hy<-Da{t;*L6R9Zm^e@5puI7w7mPS>oNfmXF9?WOFVxoGjFjoBXB+yw@s0Zk+(Q$C$;i-cC8bco%G zjc9gUS-u8cNm%x)Xos4-0e5ZT1m9`>kuUvmk#z`*Z;Mvx$97+;CCpoQ?6p2yCITw` zSmdo8<@4dBmg`=$ub1%AoDWf}0a9njZ^@K={sW)B?IuiCD^*OTfMTb93-JG#tuL=F zY?tZ{q1vK!t&gD#FSuN#Lf%3DCJ%YF^1xRU*%`oDP7Nj&*vJi~@Aeb)P6;hQd{&>F z*95_BEoBwnAX{dOUmx((tn7dV%6oY&SP#z+Gs!IEsMN(!q6q5Tm=3u$y|}4CaW|Ll zp{C9|xZ?H#|8Zj3Q&qvr*>+ubGkvvaZ(ko;3+x<3q+k_1h=;3>x`;g6>MU{T7 z#lLCSEMJ*a8Y3?3X0d3K$+K6nF}KiCgJ(FJY-(s$-7U%cyH z!1sJFgL*DjkrmzY{z}`!di5UsEs+J9a>fp2AQGf}IBq`#3*f!3ssV^WnwI3bRGX_{ zp%`1tD?x$p;eS(yFha?<);`Y^V-=Ppf-^DfE23L|*sAVZTF{kMMD(-7+;Cz-Kz^&= zfby+K4olq<7C4ZB^tZ~A^g2GCUR}u;=`}u_&h)w?)DRmM4&27%xD+Da)(y(&3{k)> zIu}yur8NQrYLVb&sDP*r!rjZT4bH?Po1J{*FWB4iEv0P7@_@o?kke1xMf8)FhJKQ+ z7P^C5c;3r?r1-ki3yPzqc9yV~!#(~t2%Rbabhh+fd@Pyy9=nYZ0>o1ljV6M^0!<)N zk|o08;@js41HM9i8`mfjevaC9aGibbh^Lv8#xSk#8B9CYoy=W^0x)n4UH6O1%t1kLHg?}kEd5qk!a3p@Flx~ zzZSgB(^&~o;|QRs613xCBGLid^n(NA8Fup3zboD^l=0AvM10Asp8yJ{V~_$_Reo5? zrYlcM&orUc#=N-AG4Drhg)uk?6+af0)>4BVKwV5RSUXrgZS14Nx{V{wGnKB^5}{-S zrO<;8-VfP6TE6q@(pHo@6rxl~S=bqB)c2aJ9$xP|#3hPYzs_kdFB}}6vY@^+%Tnpv zFH)b$3j3HHy_ZTy7O5r!kCCo4l62*((%P&P@)Wy5?SmFS`+3%-k1umqOmLoZeGNUI zM=q<)W8YuU7;oaa&08NHqTHj*>C*-6Lmt3qymBLGDb!GYB0|^JfaNEn(pz8WMBjB< z3-hW-mzH^}>r@{`oap0Bw^V~N7{$*Dj&?)g#C=jDpYfZLZSG=#xJds6`sbhZkN%yk zER}vxI*<)b*Np3NLEp;hfLdC%7s7wc?PX^#q=$uk^gPHYUh)Ta0q=Uxk4N2_{~4*E z$p=5qbD=U{CBoP7R*KG?K7&_I6bL!WJD0rlSW%2ZSgo+fqoAG>>XlXl&SYge6<(8< zdnm46erIIdy?iz@B?Xlcdo^4FuDG;{T68VW&|m{4+a<>M0aOrw9qD?VI1nI^^;-x~ zjnkLOmH&+)qC`%qG-fpg5!LQmTX-e%b}ci%%glc2LGAj2l3K{T14{Bw#Gnh$Orv3D zYG0-rOAqx*5V%mDdk|hMOHCl?AB{?7?!+^%i{2d>(|ofg!X!)#tSy}O%u)Gx$Nx;9*HmHR-hoHgmzN z7TW#2(!@b3sE{NDF3R^~Yp<0-9H`>QqS7CDOGO=d+-2UHzGfc2Dx|qq@b4PA@vO` z@w1UP@J{{HERAn=Xkp>It~!+~jEKAlR*uU>L~tR9;PeFpg-itFB+ORD0zI1JO~^J5 z%+baH^mOA|(v5p}wuL_)l|J~-w1wZxx6-~>FUFB&gj#7=ki^0*iptl0b6XU!@I6uK z3D4kW)592_lFbTpI)t;0m^RxN3PY+}2X*KXEWLXrP)# zV{8qW%G*<>hv>PdhDwVNqZLr4;7T7bWB?oOQAvd{IK0GVv1-cK$u-Z|_d;?BzG@N0 z$0LDTddN8$vB<%D;RQT+UqRjr%HOB*_mc(=+mWB9ko^0?@#`XogA8t6EKLXg6Gvnq z{6vK5E-nBh#0LbG3FZK6N!E^whrJ(aYboC;UTII^FETE+$NZFUHAstb_~1XYKA!Ml z5vCZotk8H-Y3dsr?^_-2fN9)PQ$Vtkly7Yz8*I4t z-U!!TT11J0bUJmky37+VahWTY&Z*Qbwh+Sj@qz;l}8;#Dkd#)lj9m#pM$T3`kQ^iZ%!vIX(dX?e&6E4%Pa*e?a-MJL$X zOj0^ON%Pw&OSNr5Twx2a9psf}Dj_6Lhq<+-b0&!CJMojGTl7GYDYeB8DlJC2;?TG+ z;Ut+K4a3zmfog-9*g}Fva5g9=5OoW_kwUjCYU><&SEW_ncJ@XFt7gVHyrb}Hjo{t$ zF^NU~bruOK`VZvnCC@rd+mJU?9I!E>;@D7?K@IhzeI&mFs5v1WNQ@Su89)WN@S!>)OJn zyvF*;QfDgl^1nb+&ezDm>35|<@aa!!a%#=7ST|URBZkW+AGb7nVJfp|rR>LwafiBoqxR|{nk$A4M z9tz!sqP7o(oiEcLuXKo$DCM@ra}vF`(N+_87;cJWIAIaEh$zJ;B>(_MleN-%7g-I6 zhU49qqX|m*fhSZrZmd~GWQB>#pkTtn2SKeFILSY}o5T#jBO-0WhvYLq|BHXxvelU; zUkqA;xzlc9gFG^QjdOAl3B={i+Eq>^*jTY#aJLjUg-Rd#6II%DJgsD(s%ItZ3SBo9 z<51}@KN)cqXO(35Xx=7FB=7xzU;Ln|m3=ikPLyxDi2PgR2pOk!!Ezh84D2z^)7b%>s21Z*?_+0kFTr*kobQ;KI%Y z_ohMoxQ|S+?C&-n?!jW*92Qr;-Uk=7-^yDi(qX}=7Vmm_Dk@!OA_zdUnQTN``DcS$ z=9j|n|C#rcC0*qYHr+4P{hNZW8su>~{5mg#gYEVoy$6ITyz-|}@<*=x;k2XV%YQ08 zBD?pKDgSz89w1P#kemh%#v;BiD*gMsDiedI1;ya8hCo@|TYsrwjaWc|n2_Cg=R~2~ zfzQ&%VtbFWI6${LmCUHLVzL@L=3d{!N!q(3MG-X@7!`F1Z5!OvQN(_nMo32~(2q!j zHWIH2S%ceA=@EVOF#9iGySo^s3&mO+y+bhaOkcWb(PGxxX5}Tqo6JqOaKMa1dkz5W7r+qtH_>ymztmqe5c<0dW32Tn;3zlfMh`S@Ua^gGBfYNlgs3r+1V4SQ)fR7;#P$Q^w;q+1HfKru8o7*u=d4;$VG@0o=)`()@~v+yIJdIk}}APkBA2@xbn zFLPla`tl4SPrt7#JfEZAk}_CQPVLGcMZb4AFJzh%aR8$Al0fd5? z3RK&xDSAt-#DJWD5G`*A%*XB{?<>Ut^JUY;e47Gjs4PSOzDeW2%nO{vBxpetw#hV- zuhSB^0k33iUPGeb5NtOJ4l4?Y`;@Dgf!+e~sjIPfmZq^uxrNYpc~IKOB{A z$b3;cUR_9TGY=Fk6$C1O5^M#@ySnwr`(%>a_LTl+Rr*EqGy-8xLu@BAe1ynomQI?a z{G$2)=;zA0@cv{;G*Q( zJxkl*A$VUxhJ6v0Ni%gk0{_4+AMB$nxemoPi3lK&v`jskbUEU#Oj;pmq^M60Nq)OeA3!j;UaC?JfQwZXpX-lmQ{P6a^yjv+Ti9#DQVR=7x;0H_z6+kC>tvBE{#1VH`n zVr{H&kv0KPzt`NxW3m-4(k1}vzl1hPTL!4#15llbJ!k?HnCKVnJ2nb!>KK%3VAMN} zfHN%ov@O~S7im-UyLL9TNm{eXyvSshB=(?bG8wA+$%xjQ`ej!eb9s+ALAK9+Dk@u~ zMcA^RXlmifL1l}y2pjg^rWU_r%T?JTEy8yFWK#=|eJWd|MVqIDpK5C1iAQCNv}pG& z{%unWKZeQ{Y0=^L;GA!f+k!u23wV9HTIGca+L=cO->b=!rf!?i;RzEr89Mk~v%*E% zgiUy|xs6}16)w^yY{NU7+jvo9g^RRl4QLnIBrO@*{U&Q}PtNK=)1q5T#!(1`n#}i- zb@$RXzCtG#9{O7T!JefpdLV3G_@Jl*VT(P`x8aN!7q-x`5}RT3141*VZGi8J&f*{{ za!wUR#WWNJYAP;qJT$GwP60_d!3=3dUP+;mCIhVyBGTd6V)A*V&LX~bj4TOy)drlD zR~NmiU>z+hMK1lH@)fdPpfuuO*sjrTtvxDfEK}vBVc|s4HwJLXo&QU(m5^I0i72m= zZ^UvKy%hzv1Fv!NfnWJm9h0K$XA0)IOJ1^5s4aM5B~kuY_!u>$cL65n!{EtjyQs*w z`Bn2@#ZD%tDuk+EPOH9P&#mgG@>Mw?pm3xeA@CO*JMb4Tq!)Bz-6iM06fV9TE=tKO z=>S}WF`aj`|8`XRSN3`C%nvM&FglRahjmt=+q%7#R;-~GVpN=fr%;LM+(}6;CU$ta zMJH!F3`6|kWiyjyF3J)nv7cR+C9_B|(ImE-H%lr!r1UIdgg4A_HD2uKvR4=rcekZR zv;tXY***NQ|K|7vlT2OJgu&>hu9ST0qw*NzOiXjbq*~t{N%`C0ma|^&UyjOeXL6Bj zL8hejY4w1l8%(_}`ZlnN$b>6@DzbpWQWS__en)Dztj!hqUnJ|a8>B6Wet6XhaJ{S2 zCf(mU63SyK$B_Q&xNUXmOPtl$Zg5%!-!pGLy(&H=b2oldnwZy z{J;tLcAa=$7e8>grToBNc&~u$b3UbZsmbZ2ER*AH9gjZoIBySB;1ie5J=%Y|N^Mv?>el;sPT(u@@10as|aW zMrDXECkl(^LtsX<@LgyCs6ZHE&)&Z-ypGvCE0I9rwerT{+Z0!C12RPkh5g7alsaB$ z=;atu?{KxpJThX~@-c{Sn`KP@MT>hm>)9n=`h6$k7xZU5yRs30Js4NypWd0keA5B4 zp=^L$&)A>57*_iQ^XYZ4>X_%}3Z)zAQkS#Or2M| zVfoL|y>OZSbx{Aax@7^JySUZ;A58R(HqO?puVHir8&(^}%1k|_KTr^kUU(u0=v!aa4 zZ1!6VXIMryr89<3XHCh{e5sj+o;{$;pG)rpu(^LQIBdOah^}$af1$wiAY~E0E|dS) zQ(H0lOFT!Ng(&>bT$stPDN9E(=jZ-T*u(2}KKh%?*S}teRc;qk;CGjBUx^&@02==( z|KCyR>8LRQ4vuO9?cdS_%6L)>=_HgkqCApkUSeue3!eDZPMr)SFdyCrWG~N2CkxW~ zxo-D!^)F}2(iqnk_KHMHlOhR&jX|gRq=~7^I%y(Tw4F4GtXAW!Nd!dY=ySQVChh@P zi^j&$o1Hb0J{y$=y!QEM@DG>Xs%or2Z!IFT1)s2G0-&9Hhr8Iub6<(PgPcNeFD}fk zrcL24CCP|G`CM%E3?8& z3!gi~bd*ACC;KJL7z*JD6fF0sQ9}NrvXxxvUqyxrVpht@V5xy06ptf(J+@|7CWckU zBOgj(^|sVpQ2$#A>Xy3AP2n7vY1`9WLK@aS};-d z$6BLt?S_B(K`>F%#8DzSz~A=TKPUN6`$n@|8!MrE>39H~eM5ZnGv3WE+LnO#$eV6y z1A)hvIiBS#01473Zcq7(tZI)=Gq^pa(yi=-XVE0{GReqSXDXltNAv${)J=za$t@a} z^&7HV3#I+kw|>8sEi^ne=J(@K+TXVbY^J^#s9Uyw0{{-NjE>vXe&K)1sa=R0HrdY? zn)0QLvMetFUQ+gNo#bj289CVtoWK@6Bp%qXQyOjIqUtxSNNDK4rDDpl@C9O# z;|Ttd>c?d6cvbwHSHS&gL9c+T^M>-B4RaCYJ8|7MtGm%4;c+;U^y(y^G)zHIaYH=Q zk`-S5N<dG@)iLFbg_91q+f0I84do8k3@_M+mkYf&~<1BrOjGm zNy%i^D;!X>;9e*kg1i39l7^D5+`BMb`Yw!8`YsH6HxSh?`YsIj&AbZ(r6^7JvMhV$ zDX~{s4p_)rf|W~&4e!Emqz>uYk{}np3quuQVa@NtP@xg$qeRWgtK^DX4HE zDd3?IDabMq4tr7nyF?1ewv-eoF-HMdo{<98^Q6EHq~K3?rKDhGc~bai!8V`UgSKU) zP)JE3lBy;+IGh;^NueN8K(6IUL0$kO1#<#q+z~`+&?&OBkn>kv4 z$n`wbQ}21m_1CHs$>`|V)Y#lfcVxbP(#_Q-XNKx?)3ddqk+Ip@Fjptt)bw0jjUSvH zo2wp~sKt#3^<%SRQ{zLEwMkW*o}Y`SN8@leS{<9Hjl^@)adl#1dbm1Qi+kqdBPZu- z^;|8DH$7XWb>Gz7&gq$xZovK?-c_s5%}$?m`{pO+#%3l?y8GvAvnPk9r?{M-niw0e zapC7v>8V%ZW7T@hENb!GvFcPjJynZmX2&M!I3BN^bfY{OJ33|8$LrHmLq}()=Vykh zv$NHc&I-ci{KQywYJ|f2{S#wzwV~PCRCTg8bpQPHTy1phgqxYQpS^u=?Tx2r<2`#1 z?1*Qob91%XDV91N4^L0dOw>-eWBfZXQ=3ZW=cdP|M!2hTHCde-8y;%hZ}6AXvoo5s zzu7fAJ=13`#zs!CL(}xq$JJ!@gxgn}+{aJPrY$GjrW0;we{V9_8xJNs_V&gn-0XvH zcKSg#!@nv1jZMwfj@D-5=?7}FqZ1U2&ed+xqwc7xzp| z%)6f9o_SZFKjN{0>z<9*K6ER;yJxFMCu>u4KzN${AB}rP0jhyXvp&wYk^^I$WKYukF>4&BO!6&pA+Npf)$C%K-stYPe=M z$^3~iXbw7^otv%IvPDhK*XO{fc%n*+QT^GgKRflOe*bI=Sb^6Q@Yob+J?9{mK7ZvQ zA8uwDxXR;Qz2IViGUST(<5NT#KefOcX)bsc7A5g?HHTeKTWTr`g;(( z8J?b>VnR$+Yaa5q(B_cvCEP+jHJF(yK3JU?66Fscs|}COzzTd(?sjM6$w2i1a8-4x z@y@$?cfOTrOu+`LD(a~p*dOmauz&a7zMX^d@Pv`t$TWy+R9KyZE~`@~^JF6qb!dMd z=$r3o=lpDadiE~$X-KNRnLV8D8wL;fE)04At~)KpVqNqN4EF73iq)e>XKP2{`!Hs0 z<}p?Wu2zTVCQcfIuFf8v7s)b>N&8I>_QjyT#KwbTbH`!?Q*~nOA#P#2>V8CQ3z4Bl z3oGwGw0G}f^j}Fsdq&8ZGtHlopO>OTzH~Oxg`rEbT0;9pZO67gbct@>|tHl_Y z&2DOXYC~E-4xPKZsuSQRlZ4BUfj9ai8L*Qja#>|TCm~ZPN4NFq(Yc{xwdzc`KUSR` z$=@HJo}Z<~P#qwIDhEbKL9V^le4thvzl&}_jDQbFry9F349tyM`I&|v*W=l-qsQjl zG5${2)xfc_(YbzKs3&&6w>C;=Hh_a*YJswJA=x%5^ztm+7#>vwPd)CLjSuwi>g|tr zye)>^O~#8LW?=pqr_37Hr^aSx=)}NwR2M9JxCSwd(h}!iU9u8lhp9%6}6a_|70jcf0 zzQA^)$T)`6&)zw=$Iz-aJCx(PbyuBuuzIrYz*uw#z=1GCF%f=A6?zaf1_+XlbzAd1 zKPRV#kIha`O>=GhTJp3yF#?F7*m=0Z}lk1&^rQ1Hm=d2RKJ1|1W$3FYA@e zV63B4QuT}-!MsvtQ+Es5Puz5O%UpEs*Karb7H@_c_u)i0WZ=n-Um7jh)^4v2jC;n=*Uo= zsSIlm#_IMz$8Re2rS!%1R2;+`;(>ei=4K@PVGrQ1jV7?-8q)h4Y$eus)wOU0 zk`a0_DZgtJoKLLV@iJBc7-_6wtTsq*wLr z-_?6x?=G>I!07_RP6>*6A3C^8+AuP2SMT0lt{OXN;zW$clZ5Yc|AE1*-+z)$@1I9n zjgCPS9{*%HTuA!Nv~R!E-SuI{>y2n$d(JzLjiH;ES~^mjK|G>&!|hqj^f)XZ*^$T8 z;fZOGA)xg9R6~^JpaQ7u$yogulRkn$Fh2wL8lJAB@Eqjtu2hx>Xy#z!XQOjq94`p-OdjB*!O$01G0`Juo&q#}=lNGuS55^rf-Sd#zpuOx+y? zl|fz>l{WTU&X_Vpdq%vL;f)IJ(pt0C5$sDzh>7@cviDH$Ku$MWWQGC;taox|?j)wD zB<7G5ByCmQ?VYZUBtfBYqZ3CVwTUW!9~iB>NvdKtYwFk`Q*(E0+_*6q?hse*xgihg z#YHQG4u&u-$3_;`YAg-ws*W@PBH7~I-2>80ya9M@8syy}bJ_GS=IZ?e-dli3kd7nM z3l7X*^Akvd&W*7ne)sRatG6Fb)-+%E$1zlYWR^B$$Vg3`W}>;I!T61%R#8rZzadV| z9WPL2{K@Sxh9GIw@j6t>l!p<=SZyg2ktNxTGU(`WfA8R-{{4OX_oOOi^#K-YX5)qR z18k0?^FtyU+pkBsyCJ=n-XPJ-E{g9T!T1X(>XJi)2hg?qd-wJ3A8b-E80+4?!MhF| z8jSl7+}pP+Z9&I5yndiMJEp0LhXnmjf~HX{x6M(YLXBW_>oV8FLLQ(QW;{HWm2Pd# znR5LQ%H5E`6sew9^yePLrk(Zv8*d+@@yXScc3@@}YD#tLs7-bbr8vDCsUZg`Z9ra} zM^F>#R?IuH@!AUfW@2O*1zX%-id7w9Gl_EqM^|+i-`3bLba|vM-`K`$>u#g{U2lJb zqXppQZn-nDu*TKNX*udtk9vR9WkH|zE7)(G1_MPIMd-xL{?&}{slY_I_^3lwmwF4Wh1-IhlU# z>p->g6nX|OEd${-J3Xo97p|cp#d(~fcg9gEV~*Gz0V^`AH1>v=S&#YJp&r7&iWejQ zq#EB1hf7ro)DU^tupLlWYO=XBz0le?d}iDme)6zsS)($@!n*E-9L$!YQhrlYBxege zzVSTUWbbNi>~dBE+0A5_UuuM<{@hri38Bbtnh@w2Fbx5e4rI}IenA&u0$Ghrb&IP< z5Pl3chqS#lHV+0P>^yL|x8EZx>axc4N|LVfhHcn<5#4~E9U8!i+`I2!yko;)e{XNR z`#`^nH*AOp`}_6?>$$sgTb%6QrK_HYL_#@c(b!*5sfvr(yJxLdu*JM>Ij?v^%K0-f zF(FM%AvlV!+uTK59fgC_SJQ-2oov=h=ck0jN2kmY z7LX>B6J|WYU$Sm7ULw${p1zEJ~E#qNFps*q^G4@vL@sR&kD&4uhF6sDecBlDC+ z*s~OInhF;oNbfcGWM~5umNCl^*S!oJ2-W%tnPaEx|dgX|B zk+yyo*^ucHyw~08r$IcJ&J)3ky0VtJ@sDaCks-bIWCn)!5fN;eo37U~3 zwU||g2rL>k$KR%tP?>kprG5~C-ev zYFH-70N>8~GA`|zw3vq2w3WkH8L8(XbbNjTkG93HkBxqfc+f<8?rFGH5!IER2MGb8 zmZ;f-vyPC*+^iIH{b>7!sxxClGu&kCAY&!kYN{CrHkV3eV2Btv0h`Y2Yqe~4FhJnp;hK)5C1I6bRaWNnt9mi`8vRo2ze zBw?IJQMfa=>#XaS=h+8u-0pD;qfj+<_j`iv!L|?KDlKdZN19Ys3!YH<@a{2b#;zBg z`Cu>Dkh(6twT(jpDFs%@KE`i?LGMz+ zoy9zeF@~6iNN;NH*pSypQqOgj8P?INaW9JP;hl9^12n{`Ir(-kQQ7nt`L!^M!Rcvp z)#n;W&zn-rB|n01RGTs~czsQXd)VX%+JW5`6AQt8b6&DVlfmS6+=wQkpe)crZoD@TCZ+)+C*JTX5~ z8`A-=U@dVR;;t&l5xB)-Ri?NrW^|S4P_AaGF$95Z`5+Lg>;qg< zO8Uszvkp7-#16treKsJ(o+?JJ=PiRcCQ@A{bz9=kBl(5t<%~ABrl-Cp^YCQ)mfIat z0#fE-ghBJXe_hfpu#wE^p4Rt14cL23;MnA@H^LTe)9_Qt>{d=gU|G!EcZ7x|6K>Jg zp>FWxU%cKxb+k5j694K0HD(m_yxa%~At~ZbYjlH+c!C>y$aDjD5MSmzjsxvux?^4d z`I4M-*)tV+OGc%L>3M&$e^0Mx{(*-b?C;&#y9;yYy4?r%?#0Q4l^(1^8PK(c=xp%+ zhDmMfG2`+gK6t2<0L2RYBAr}JSEc|TLGHs!8>$8WHyb&CdX+Q8DIA&Vt z)&E?MhX}(`Y&=_t5&`*3Ov^u=gTt04MitH9d@z|8BB5%_s=8rc&CY(%B zUhiTFo?S#E3VCqW%Qfm)`Xnha@+=$YG5ZdCw&9GfeBp@Jjp8`8!Y};opc8k z2jo|1tlxu*I?EM~+BG~bHG!HWpiECVGLQH(JvW7)+>MRePsU}jh)jh;;gug9u{o#I zFF-ZwFZ$|sFX44y)-ILo&}Ru^j-DsjUZ`NGJ~PHOs>4olYn*q7Z9t`R!?iKp&*2Yu z1l^Szlg3=2OT=p)xF)`PXVAe>Q770KXpvuJ^=@T_ungkz6KRA1na@qX{>+TK>2XIT zqFUNX#4q*`9wWP%nif=?&w)8KWj9B1MSJyhP}1G5EGNmLSe})y zfn#cTJUmrikx$!L(0YTvN3m7jj~m2|>aR@aQvW;0-Pi*tiS7uAQT%{U{2d#%zc^s) z+}PilF^5(%F-B%Uoxda`xg-4JS$#}(REb;N(Mx@pzqTHW9=b^aL&tnz-f|y@CTdeh zDM`}>EvE~XV}%cn@C0EtH#9R}KV~69{zB6Hg=9iMBti}!Gr4WvH#}*iPEb-ka)j{r zn8nM?_l=iKQH8l=4v-ZHv*bkmU=Hr=vy(~(=MwVSWsddm&Nx7@sS^vLK9!<$F8j&8bnl+@I% z8?WbQ~r;uerYZpnjkssLPFv5+ydf zvpILIzjrtB)BQV%Ir}MlZAz+ygT!oCmb!KO0NF7fPu)GN?Ucm)$$B zWO2)@QTF97e+9Na0PVOeQs8{})E(YwVN`W7KZEqCxxz=I z1BdXIr^zVpVA4O>H`u3Ww?(I2HQt{P2gZqNvE5W{HpK@I3KdzxAqy;p7MUDo*20XC z%Z12CpF?Uk(%`b1R11&UtiCB}s5NY3@;(TzV+y;OW3vzi99otFNj}rY=cKDE{%Pt( z+8M-ZMpoulQ7egaQt;sL$_ox@oKi0{^-L+wSi{5QfTL(&DM|UtTA)LuDYa=-#q5l< zM`!UDmSG@nG&2{Gg%V+{Y3zr1|2!!KP!kIXUUO^c13}XChzkYHZYK#F?49_z_@zf; zyYgDhf!RS7qr6Ptg*b2!0e5J7JEu7qfGDWB-l>ts4H^Qv4!Of(+@p5EB5HP#qOINd znR%|PUN;zov`+D9cevmGRwv>1^T_R#6zyrlphG%X?p_n(H1dnAc3>|i%`^b?zo?Jg zqFiolQpOj0jY||eva1PPMZ+hDEQ;*o@~Hp~R*J8dxsb`_vA8fuVb0>-F<0s*@eEFeT21K{fYX~szK21idQ(QK z}o@MuG8b|8RgRKDY5ouPVFgiOkAmzjjz#9nMTFeVo8 zFEAWbQ|HCq4ymbL{gyuszBXjPX@<8#EUCdZWH-|@a8(oP_ItNa1>dK#UDyZw3{O`< zgkgA+_co-#7vPB=KoU4M3p%?l4(Ja~8U6;v3GJ}m@tPL zh_0yLw9q`Lp)62?d)ruz8ah=%hCT>2=iRLU(F9afg6%f#G6IvX#M#uRx%s&{c1tu|thqz6*-LmCXU?Cu% zJg-~yLAf|;ccYH828lR0l157&@#IGn?cPfwPzBsdTh<8UD!l#uW4d-1G#q>%>d zi@iQ8{F{SU*@z(#%Il~jc7jN5Ea^N-2$ymWOAvApkMI}54VDMQz>};wU93h^~t=VCC z^OYSW#GFuPIX%zl(oFa?>^DD^>3NI77+z~h=Hgg(=tbfy7ZD2ja@}VeDji+?(59I$ z%V5vKQ)44l`5WL0L2%_XhlqmXFow53i7dH;I;{p8W6fip=~SiRc0;)d=l<|?;*wKL zR#$L3M80IbnUr?Xv+0Hrya(6o&z2E)!=}*Ve@oNjF0j^XQIk{HA%WsaBSP{77x?!5TiHZJUi7sp@W@oeUQc+lq;)Yl%dX z?%-jAohlJVoK$Py=p)}?z(`HC4*2LS5XtK$KxpGeo{q2OPdKtbFd@v`N5W$T@lp+h zu3|4p-olkqu(BrFu>qmo79>=L(R!FZNKb((FvC$&9r)xi(sYd2e0t1y#Bt87#!@iz)eZ8;%RSu#0;4o_Iuv{X;Imtbwpv9=p(a9&q--EcN6plp& z9d-lvPxPLs4da)*VVDdWT&u%G_yLeRiu=_)L`*||*btbp%N@E;1_zU!cg0XeG5{}E z@PBCJh$&hR;1W2(t_=xQ#nN`^*XOO+Wguzq%rI*q-$G!9@^<%K{D0Hi-8J9k_V(@`+_3LJZnMcT-FNW7A-Iqoig(HWw>7k&47VEE z0>ju#A;ctes>Onn3&R)9wiz_TK9?c&}nZ z^c(@HO`zK-o(owI_TD$hd8z(^LAN*IPw#y@dk+q}{Ralg_b2aPt87l#II%V>$9~v5 zXl9jukQE`^>-P5T>l^d{kSlhNuf&fwGCR!$wGNQjyK@k#N97*i7*&JvMDb>Up{LKt zl0z8jpcO*TA7X%;=5vY7zbQcjaSrl-sB6$|;NRlxI?c79X4YfM>s6L_rxT1-?m3yzJSbrq#F~#g&@HdyfGk*BmE&EWLo?qx2_KoUn9huHO0&f2*yrNa#Q+4b z0TEfxK-SFk4B8B&UVQK7rt`d4OA4`7N=?(?@mi!ILk#vNyM((rx0tQaYJ;#Oc_(}O zzOy&(=^lU}H{gxt$i2Tk6izGn1aM2`?%TiNz`@@Bgb+Qc-b$13M}h`=lYW>Rx}#5P zXUfX_&R5?@5<%Yv&!1_X>}G7k8j`}D8NhBoz4-UZ+>^$*v-HJ!P$qinC>F%)CQ*!F zrEm|gYb7TT^L^ULceRg z;$#46%t%(e371y8$(08~u25kDUxD zvd7|L{zAM-4gBbF!jy$A;{cRGo;_VR<#THetxGewgADPG1{GX_}v^Ext#{LW0TC@={DS{fA02X zp`K-7N*$Y;tE?69kP(aMIO}~CRakeMTX$R2%b&7-^!Sp!XsWc&<(sJ` zwl(W98~Hz`AU`y{l+l`6m&R+o)ybu(P6)9-_7-VidxI+REP21@(DqubHJ*XrXYb9i zDfINLi9;&)n)}wo_CH~|@6FFLw%$V9M$@4+7qDq@+Vwpn-?91Tb#d=rW@fAx>P?w* z!$L+M+`CsV6_`TVC+?|1*EX#IdD%3J>^{iuH2`ce)Dyzow#WmK0xfi)&JH@|eZAiJjjM+CVr6NuDcN1Ia#)h#kO= z)R1YM(SOX91h5cJ;Th%&bcMV>h^&8;E1iZM`91dcB+B|643oYYS1Pqg#9=YG~~GEh!r} z#*2Fh^?!Z5c82%D+Z^cH?M1Auop0Ftj$c=Y+fH{z2@Joll9=~o3{*B=QgLw z_nXssG`L(=Ur3j3K~Udmz)i8;i4}wpNmx{ZX~DF)(l$01`pe8pbId-i#(wZ zLa%`gDu|`N;2gp>jk7+3nrz}|LEnomJZ-opFS#<0%*HjRPFar9S~2r=r%tVjJ(wC1 zyXG2(DUIeSO8TI#hk2gQi}9!7R*qcwqaN!wue)ddiv8$Z@)8@SgFmk z#)Qm8#=2$8mg}#-Y0IYTx88i?4L99%D+EboK&c5m9a z$=uzWH*Rvs7Po(+yJjPAm0gc*TOS{rQR?Eg80q1CMc2CeLw9`FrVY2e{n}<7=7dQ^ zILC>(^(IQ~D$@k)E(IC!w>cS4R(oBppNZbsY@W5A0inUIk9ld^C8}V9tS8^{HS75* zs_f4VtjlF3VMfRsK$CWYBv-^jZH zZoh-0d$~35#bU>Lt?NYtxwDI=&ji=Dp5S7$8hONDpbLa|$yl}i-h+FSoxM^a4=mIf z^7R^)qG(VFUg78>D`M1rz5SfGu*)V*laW*84p|09a_hn0b)X^Idn!c4HP+{yert1& z*O{afWU|<8b+(3{h3`9i0oz)idD(r3e7pZ2dv5|?U-!Q5GiRQeXXZ0ApZU!8nVHYb33D)>&JFCbsk$9Ewh?JRV}bHf_8lTn zSdRI(%EPsEo_{;)D_fwb&hV^|myeB~9WQux)E!zfi>~6GVd1AT2Zid5-IT>8TDwndAk7@_gm#i(iM`rqjEFgvSaSy8`?p_MfYi`7b9tL%5})zWEK5}a~RwjPh3&hF_f z{Ts@9R;80u)=3;gslDrEGeoDJ(rKaR>5C}FN0WklyOI(xsGb~JyV+T&8e#^PFmWhR3%udWzQMHjGfYn zW}@cW5l$gQC0Xopa4ZV-nnE^K+a)rT%PPY2Vcu%D4e$R-#oMYA2muG-5&va0B5WkIlIlFG#G4OCe=akTj%tmQr) zZVKC3a4d+xiv7zejv&lS*|2LfVf8IARc2ljT%Fu=adYrp@0=LbEKBKxO z`z-FwLB6VP$LR>B`riy@5KbPCpa(YQaZknuhX3!Bj^pnt99?QyRc~Q@7EzUU!iIw? zK>L=qT{IOOw4=iO7votaN@f-ay*QHiA4f}V9{mS3AocBaqjLSnQCFOcl@*LqZVr|T z|4-Sab?3g=S+8<&mPi24qnv1kKokSO9;ABJ5);8>4rJK)Y#gzPR5Ht?Ym`HtcEN*q z6@>K_)oD6n$-PE_>dV2D=QW!;%zB`%1GP(;>(ne0cfea`HBLr-N`=3UK09W?Ee zR%J3|kEGgtVvdW%?0yY~vK3~6n}+bVOYwl=!cTE|^db}_H^w$)01I<5yC6UVtxQ_t};%=&HjfXY&l^R`$HBc(*~A~E#OoW zuvTNJ&J;cYz>bl<9Sl|{xJqxvGS7~ADN|l`n_fWx3#Q674hj$}dC=3rH?lbx8=Dk# zlv^?F0QO{*s{@chwe0MEjtHwcLOh4vQh|$eyZ3~Qp>mekP8f9`HW+JpDk4?kdNNEP zMDMs#PB|LOQh^7=V8`I!Z;S|*6{(&lwJ$+{+G>XF>~=lIKeN>d`+*I+XZ7P=c1O&r zj7*9Vhv)3#V2)cgtBX|`9sP=<^{GQ)Fk?_1?Kj$~#o9+hJL~p8+{ZckL8pHKVt-`f z=u)e5scfKEmmtDgDiRWpp!nMp6))8yTgBLnl*|Rb6 z#oC{woS88tv0~$m!>L1(5+mCNTs<4BO}sJkp9Nd)A8Ga4zgzO|?aph};nVG_ZXO%m zDt@u$?2_p*t(G4RxulDtt$;c&h?4B0(dzWBZteyT&sw$XczOHy`uPXc4Gc1xg6q|9 z5MmAu3vU<^8P%u?zxad}En6ifsc2@795s5(*l{?pF>%u5DcMtBm^OVzzy1RT4$7$6 z|HYSHo;fRL_MEx%=D(7=VBw-y7r(Y->9W_~c=N60Z@;r*<*L>1zPIN6ybso{TmRvP z{DO^zn?CyZlTSB)_W2iIZu#o#t>0|>cKeQ<-|Z^;{)Zob+P!D*&-;Ga|LcL@4jwxE z`;p?K$BzGT;?KWMp8EUrnX~_#JAdKgrOQ{YUi-J?dg+auw{G9Ld++{(vhs?DRvQYD z6(nVfz1YwB5ky|3P#hF9AN}Uw&-@&U`8({)EI?$#p-n`j0}y);#NQs@;fek5Z#qt? zQT8~etlBBbAxQ);`=hUX><(Jx;hylYFiAOR0C<9*@F)=^{U3g)z;kGdl@E^WsDI(0 z%5gxb8h>w;+*cLF!f74|WThnc!OjJ^2PXcAzjA2Z24W*j^t3hp-mERjZ^s_2=k3wDcXArekl6)WJ0|x4AIm)Ok8O&KEiRJkp~}Rm zC-ecx?%ZL~F)=zt)DT_XSqGDV22J-e`p&1CGm59)dYg!>?* z&~p&`Ym1JlskrY77IsFC{ey%ug#*o0o>jd)qf$6jB^Cmxf5)V9Q|j`DT|D;r)_r?m z6zZakM0P1cWp1R1c`7m=n2bSQ1ftZ+?FQAZn+K{rfoiYRE)WUF)~@5PsoHk$+M|a9 z?VcS|A#2<^weqg6_N_ZId1rNfL|vg)q@XLW@M8QpI}XTpi#tM24}U6TmsSSJAgs); zICfmIuN)wBhzvrewMVZmZJ2C&ayv!Z5#`w>MZMpQ31p)Jc7480-;P}nF(eWD+Qrcw zRTTfVi-AEy+%P26Cf>vssxI1heG*2Zh=s(ESp2tpEBrfSTZ{}{FsAe-=}-ePqTr-0 z8ISShMMcddv&lTNkSrl@kT=N+@-E3E1>_U5g=~fTmh2!uklo|}`JEgmf09$=EV)Lm zliN`DNd@7lhPu-_Q2sQ48mXB!q>X8F+K#5uuCy0Tr~T2wC2O>^mM^bNX# zzDwVy1@vS38U31mL$}kP=pOnrJxq_%zvx+dg0AfW$skpzwCBJd0fF>@LoL$cFD3C2Hko|KJ)%(Qo; zlm}Mqo4pW`B&v_3T4V}j*>i5DCfTPWlqgZ@k{9x#@|0Eo4g9W3^W;AU1 zs|jh-u?xE7s*uyV60!koQlnHt210)buIwdnPUAxfnT|Yu1YT`E%vEqNiX$YWAt5Ef zguL6BkZ3SmwUP;`A47;Hfe;JAF(%9gI4xMH)(Ddbt$}}Y#PfR!A;Cx^9{N7)BI5Fb z-(TR-M#d8|2Ks%(;|gx@2b5h{Jwgt{JPth(egOz~6XAY^ZVLO+`h?`d{k0@QW&`E~ z;#-LHEuMt5jUc2kbP)V60}lVpOM+qV39|vr^KhF4*q5ODBiuY0bp`o)0eQID4!o)v zZXt*R`1L|OBjFx}FxNn<p|;qLRJ9Y4={ zBK+H+`vdq-1pH{kF%ID`1J9AjUk3C#_{SqZF9DCsfV%~q3Al2=zXrcjn4d9RkoG3f zaR%bFwIk$vggsIVbVXhYfln`#>3P7eMSiCv4_AQ0*MQ#*zn_82Dc}~+fRL47;G+@$ zUcjCO9>IWjhmM3k2YM}n-)5xehww4bkcc6= zmQ;Jjbq4OxZ$bavUiG3FayT&RU=Yzi8Q4eF!}=}B1-WMr063mU$0xGR*2P7m(Q0)% zz24Q;&CT82VDRwp^sH5@cI`TKyu7@0|M&S4GatlG8#>$;NW`o>ep}3 zASA?W4h;M3WBcZ! zg)Anavx(OjRz@$TkuLaC>dZIEg30L4NV*U4ApY&W{lpeavSyHu{Zd|UIjs|kCb}?8 zq|sQleOl2xV!7ZflX?)ncirD6fk+}+7wOg7v4#3Hz&34 zpwKrPiBn&Gk@xF1)y-&G(f^HlLDSxw=rPP?>8vOru>D|papde*(=yg9@8Dl|XvF;I zXSzq%Z=r24b=a_8eZqTg=-8w8lBsWbzTRoThi^~ScYZGYm1SMJu5THflsn_G>LL&{ z=+Tqlj)u1shARVk4V?%&f`xhlW^WOhk8wvG5(wBo)K15ftXSUQNj#y?!5*Z1&mtp9 zQkz7@9z_gJ)wUb%w?t1V#=ejMED>46G=dzk+Fj z_QYF*M|r_;JRu?VbPR;oDUSk-ps0y1#DE7c^yREIgXKYQ9%y8VC=MZ&58UC#Jn$%f ziUpk;8X}^o^fVC3K!obe*Ac%GSbgmT(LP7t{66|u4%*fO{Wd==s@`r#wA$_j4!n!HZv_w_l zmsiC&M?}`)PjXbZ)##fx}4U~IA{Q4jEXk4BZ;Upnfp8oyfQcGR+e+cEBr z^xY>mL}9AW739Y-m~pP^li>)Tq<(ir_rTI~Jm-Nci{BB!Sv&rY2v}F|VerSutv(w- zZ%;?&;N%TnOTo{c!;YYLtxD_(Ne>~U_TV~|F6F?l&fpM~g8H;k{Ut{Mv_XEnSf6Bn zR-mqVzwY=VHl zA84uq81hK?PvIZrR3Ew`ywN#42&v*@P$C)jNPgzFu>0EyUH~u!-l(QI8x=wMR)doa zRzFZa4g~vR3^m#PSct>+@=H>Klir9oxU#l^F9W^mIl;e=`cU7weuMrE2D?<2Z#(2C z#N=N2-9`169qE7Eln^u0bUdL*k7>u_>J7fzDZTaRPFa3(>;RGW{5TSr2Ks`1sC-_< zH|E8a_2n&lc%%=^)c)m<`p5&?;X>54<_$0}0!_L?zYv8v2HO7t@FfDY7H#)xG)w*$WlKUq{^rvo__S2^5|ApQ$zf6L(iCHxcd?T_$h z;Kp!bai2qaClTg2U>J_M_Wp1?Ob1K_;OYsO2O)f2^popB(-kNe*7xM0eN=lGzx9;$ zUWFfX@^^eQ(@|*>Fu*az20CYxxv)ny9bXP8752$*N4Tmms!P@T$>IL5xK_pe|0bL5 zq3t2D*=$y;^NqQV9{u@L}1d}y^I$U`eW zh|T(-y!q zX1i~zxKCJ?*sn~%zq|~2Lo9#=t$;c-Ohy5?Gva_S$P>O9vUmUjM~+rs_D)#E$yuk+DD@_(TE0%n)6gWtgqRWNx{%Kx3)jii{V*n95;^pllJ82Lb;3X;@h+b&*H99{^B-%8=u1+q+fF-WIN}_)#a`s z%;Rdt6I~hHI|5T`h<0|U#==y^#qt=gb@|5PIc|)gsz~7+caHl;$R}&~@uHg$EPhLJ z#9%Q;TrKtz+@RR|Te4dGhqMts=I;tj<%pMrOG1>GCsJ;UxLjH;r9y3kN|icGU8FC80=I!oMNx z6#Ixji)+OYF;l!M?h|ieB}0qF;igi8bV`gD1EpfIRJ$Wsn!3renQ!CKizA$#2OnvKL&u<#c%(OhL|+N6Ta7 zEZHbq*O)=8}bBsh&*4eC%2MU$?wZ+d(z93(f%jAd3NMA($CPm~7G*h0m7OhQ-$YtywIKB>G zN1+zJ{=}}raq@?vi-?&rdl326{>{FMiJ6=O`iDmb;co?Od;81Dq_#UE>01-LA-!jET-y=A~>>J1MbrR%V^7{@=wm)MJy(~ zYLA`eycXac@zxZ^f_yqk=jpjAQmC1rl-Wum)799e@~IIQhG_!IpP5gOwX?$B8;Bu6 z`TiT_kH1h=%BCZkhV{b~#Nq{g5vk=Uv~{K3o{<|C^KPtO4Z<2j0$GjFtR${t|BdCP zh&&*ZNVz?giNr#ulUc}D5q9>bk?HpQy^L>Gk}R&dimm3{ti(FTYOG(pr_^f|`_4*A zwd|>QBVP~U@;uV%i&j)b`V&2ss4x8m_FqX|rTxDBjC?WN89ud?bP}+8`Doj^Xiujp z+D;L99r=x;uRkN!^);5#3rMfXPLCquPt}|;I?hAPH;4;b7VAB{@%F`=;ikecTTNyE z^qN?UFx=l!c4p&fE~r)qvERUYrW&*Q)>8}hB9S!e8GTU^7W`Nqmez<(XY>LI=p$HP z#IR<%BSNI1oP3eD{;*r9H|pR;*qHWuN^H-{+lvU#%1zA$quwl~2Wm{4P_;i~@vHr0 zz%%mp0YWou^)>d4YHfG4UIweCYoV7eSjffXZ_!nIhCw z4}@iPL8ab&*u9|GI}mT9;xijx^_5sc;Z~LFDT-b7ak$4ohDaS9Y9VF@+fsRZqhx%+ z2PGh%Dr^_Uy_@n*fDfym>KL33Q zO1>juR7dX+cgjOGpzXzlK z6@C6CZgh`Ao4d&6a=;s?8{G>`uRt-3*P=ECgS+126si?50cH?J2*o`ksveQ6T; zhn#?G0^TRUn}3LUJdre~C&+0MO;012esme2|ANUNP9Tg(1^N%%n7NnqBQ0r5+Fkj2 z3vVx?0Y}MlxrWrCZ=#3tRdTrxJ(fVfCuItEecw)-GI9^O)X=-+d&mszg8EI-#prK~ zArr^6fU-FX8xK6!5pVh%dIE2Z;ohLj9MH0gHcOC}4{FUa_)^s8mhhiL8i8AkfuK+$ z8bczW=iqA!_NgiACTqKFMEQU`2l>8saG9*c&<+%yi*+n-lA%z?3-c(}dfD3tJ3?&{ zpEs!Qg|Ms+Gv$TQ%p8o^84u`-+3IshCj#%@FoVee_%btCiG{s=ox*#gUuSKTrK85m zY`MrSRlX@nq_06&SC6|e|JQ&^b-4fk>;HZV5E9Gzi?NU<{F(d=`xLBaoKoDTQ^(h9 zkkMR8uL(2g9U%;Lj;VR#zhVm7+8+Lj;&zp?F9Y4nheK*JoU-}!B(hD|Ce#+Z1wGVs zw3-=q6~wKihXn`-ke1lkKPuF>ryE00(zo^opE>>Qg7>o^};f8h;{*O-vHsPa1{ z=cXCf+1{fzz8v&fis+1(7-5|v_mDZG-JNzB&Lfq&5F=ExR(<%pLWI!pYdFfA^aP_%sLLD6X z$PuoIEoqKWmxgfXX&k5&$DO53uxk3-GxD_wEuGcAl}Za*D?Ff&wylqmj>P>%c+Mb= zqrs?$5~=-+_WF8__2&*~b;4fWu^iUjm0A!e28y?kujOPT-ltK+J?S{Ql^@AB$LgjE z!>CphwVqyfD`{Qe-h&M0hhRj{<2|@EK8SmVyl<~pYW%?{wQtE_>D6cSZL!=oK9>85 ze#6&M$@+-{;yin~v7D*Y zbCDPix{?Me^}3WlARZKd1i#Bltx1h-_E~xRnIzit6(L&a192Ypg8H5|<=&vH_*E!} zCaCL$^eV=cCeNso2bA%QVO&$W#d0RZ7AC1W;E)?)-94_x*q)v@z0$7HZwM=C3+^L&RA8e9jMb^D2b3apfv~POMN$$3e%hh3SA}awor_*0K8Dgv&sidK&)~%gsYe z_C>$Y0<*s?vVbnYX&fz`Py6$)3aKciGbrOPab_n+=tEm#R?-S;5C0EwlM?8sG=P&( z|MmhdM~J79%6cF~eQL~29{re9h>fsYr}hSHBu}OSIZxcBJjAjE{8lXYKEEDst+n}%QZkz~ zM3{ZZ$reL^yhGbzK9vj=%Q5#D%({m0 zcX>9FyK;Bna$0;J>y2Z`5B8D#7}mJ&@OfBA=?oRi>7~Q;9Vm(XEX0ynateE$f5QC* zek#UmHe&b0%JEmi1A7H`C0rq!h9I@8Vg?BVXW~n>U9vG!;F&2Q`mU?bG)5; z%;yf@3G0jDP_f(?^1R(=6}Q4y;*U75+wTJtdqLERrj2E{>-Y!9h-@ zI_$nIq-V%PF@R1L_tGGmf>oIgv_A4UT0Blt>5JleauPBn3&{*|8NG{8l4#?H)1SmW zq>1#qLb>()kK)h5ITFErih8$~s2n6m=Yl@B#hc>aWVf&ud}j}=Vs|CoA-BS)x=-9l zJ|n-&Vi=^({TeMt=qQhvJkR%NvZN)5V5J%H?;si_zDXlHllD?vC z#7T4}X)S6=KQWkl8Mz!mJ`)EMPcB%=Wjyz;FokMpwD=-&`HP)47I8LclP=D|%9x%e zaDNFOkYmDHa$dY3o)ednf5e6~i7&?bOc%0~{z_tTMsXe1j#>zdNxaaCen>Vu)bdI*6+cY&t?SXFGymGS-faai$Q$-hEZ2p?fB>K);CL8QOq?X0B7T$pd1 z#7?N;?6}0#Ht~><1kKbok*Pz%KyjdWUA(EdsXkTjZ|ty#1W(CRs&ZFtneff3gg7L8 zD{i-cl|Z)U7cpC$B2E@3i6_Nw;#hIGI7-|iekFb>ZUx-8fE+2lBYr5p?G(eKDg4iU zzb~#AH;L;Y@w8H0A+CaS6pQ<^lIsgXfD;ZJ#N`eN@51G#@VdB6ED+xl^TiF~T`^XQ zfpm~FPLI>X+4pg~O2wNBHA{pNp$}qvC^oaJB$$tfadx={i6!Un|J>f9hH#CL*W+Ti z*ut(_i4DatF;=`K92W*i)5LLNOR)#uJ;Zcrj5rO7y<6go7u!o#rS=SjZy%_y;U0^0 z21o;>WHDLnFZGAHUrd!|i$P)oyGj=S5yrqR74b3mF^Xoce~Hfn{vY9cg#AZQZFNPa zJQeJ}hmBXhm|J~dz8jK}-;2+S-K*(jF+d8C28)Bm5x{B(Vml;^5Qm9FkX9YBvD8?K zQq&M>i1biQly0J=nMzd73=y@D`DgtEs%ju$70 zogQ(WY5$)7i2EU-Z?(Ap6i+A+DUZQbrB9#YR|QpN8~Rjulhjx7PpgJURcO`LNs1H~ z04`U2RlEpVoK)xm(fMaSJ0S739ewV1cC{0BRsDc{?LAPtp?-w=1?pF*0~kA*I)oMb zqgZFFNu9awy2!FD>XLhZyJ$-j1d_G6cJ zKlWO0DykHFtrbwW6vcKBnPR&=cc3sRvgJ}mv3;2mD2Na$3P&&%C17`h?E~@bS`hjG zGpCDCY`^DE>{l>#4>P*^P-S+tQ`vpdVWebgC-&J@#puQ6>keh0u261JE>M49pG{Rv zUXSg%Ijcv%nV+Xqm@3#>7}@?HwZS7-x&49N5^t=D`6x4ai9Te~GMMk|1W)WsPht<} z5|khHg9}ssxNAVQu{V==*$K&`AVnD|Q^8PyQ1xj8sCstAQoN=pHME(Uo#J6`q4w`^ z>@7z^MPYuVrO}GAfbY3M8iR9a0uHrG#b9Sw)%b98p)eIcO zHbp}5TSzIgU8G&uPx>C|{(^P*pOxLdBBf3qCWo;~_nW;|?!(;Y9O~C))Frk%&t%gL zpr0p|aOZ+U{Z35Oq~w_G*@Zzhgo>bz6s1)pza0&!6D%Rvu^a%iDb7~D0ux*a_#2!# zf!0BZ*x^ipeL8d-%%j*WNrD|GvB%@zN3zEa89oVrYl(lT9)!QJA4BkG!$WbymijR? zd))9rxV?J{!T)!U#ec=)=5G9rd8QH`XXCymm^$T$4^+hJLl zBKvo5dzfGB@v*p={~`M~von3v>6^hE$-)szWG)g&?1i}mW?Nk2lH3NKc(huL#>GX( zg%8S23j!YX#4XMwvL|cG$U(}5+W1ox+%#mjt6|xjo!Lo(>6^@GhjTDEGt(O8wfaa0 zrk{_uFG?WT&)e50Jk%T}3L(L8u6%aa!}$m3!O(pWW-+w$gX3UWWx_s=-DGy>Cu{JO zZ2WoP@DWpRH99VU$8}chmhVwnxZiH*r16s{I|DPjjO#H%wW85YwA2!sdy6zcVdqslht!dU{Tr0oyw;d;1V$J$i{AI z51t|nQS3T=v$%#TaS|3MRzFw=2ssAIbCnUmvaSaqvq4wyc%1bbg!7OL#tC4plbu-$ zQ6`RuYsG9FnTYdMI0?mG)t;pd)VR)x3<}p%@BXHwzo{c>$EoZn771yd)J9~VOrn{jEM6s>cS9h3eJIU4IZ(t2~zAe$#+SbvQ zZ0n3euJcK>E#7v=+RavG+W-lZi*zx)OnY;g+{fIfTvy`C_vNq9kz6V1LfhE__>TN@ z{8j#6{yJZQV=4bLY7Kh7T$;ok;f``s`G>qtFbi=)g3wWTP8cBM2y-#}c~y8#SSq|O zyd}IVyf1trY!tg4no){@w#5nMyiDEx-fH+bdEzT7m z$MhH5A`(T1*oM=;Nw94--AC8kBDnXsWNsRCg>@Qtm(%hqD)adP_TE2${Ph*ABe-#1 z{0~^C=x*y_8%;;kwl)K?V2?+npK-x_Fa8xEBS11%d6*dX2Y?ExBWF)SL_!(oMEBf&vSfw#=>$w8% zG+!F=aK z%(XU)pNgMhCQ~GSB7OmW`AcyRW809|S!y8}qz7V|=nd|CskPKr>L7KJ zo|F1XIg+d7CUpdNo+*uz+DMC~(NdN)R+=PDmEM%rNSmZjrOndk(imyHG(}n~y)WfS zA4uz@_0mddwe+F1K`M~GKx1cZ?At809fi~<14I z4z3y$^jMwrft*_caW^}{NRx4)W!5lK-}w9U=ur}-aig-(QIkKKoau?%NZJS^$7fFh z@aDMEZWslUdE9cz!lqZO>qK@Hq=@6jV+caXkr5q8)4)!`bll0x0L~3>ziVabbIhtd z=sT-*C=O@4`Tuoe$doKHLLp4`oU-yejx(*-n_v`nDq9o!dn@|R1|VAqv>7@SIt)4- zx*;@s>;~j?P#>V9pc_G3prfH1LpOnL3LOI-3+??m z8)tBNFb6)+Y_=JbebkxW0>G*uyWB_0YYJ8Lken=%`CUhv6*&q6X2Z7$) z1$YibV7MKFy#ef&j%s?g3Y^iz!A%@l#Ys_if|H%cWJfP;3P6PNG)Zl!ck9vJ&D%RD zD5X=EZoT_SF)=NY+QmHIKZbGARgZFirI(kF54*=w_R=V(2Bs@>@Uwfk+dcfe>i9@9 zZpqQ>CAp5q$5-zu)^_s}eRwcU%86%=*Wstpih6G!tri#RxVz)!@2`9GA{9FdY05Jw zEp1d*=0z)UtO4EhIsk;81y>o>gr?g)|rA`2fO$ihsb_7)6IT8pc6&Dm7eSEstMF; zW8-lz+zPgm$P=x)&6p?g60gl0TtZ|LWt`#|@FPKWLX-5+`Y^g!rA&>7IqPXs0s zgW)y=dMGqSdm09FIP?hU^=OBgFh@dC!JO(>f zz0fXtfmiNDI`Xk_X$-jq3v@ER;_wwmOb8bP*}!zWt8Oe-e9J%CV@pQ(QE&;Q^IgnjINzRIL0+N9u~L2? zGt1^ob9%QmihUs7!-07p#1(^3_)`m(78gc`3k(N_V<0~tn8ew!8YPL+KG z#MlXtjEXAGDRxM+$Y{LSDLvJn(P|H1QaG8%Dvv_z(F%pMv=hooMhT^$M4ACA1Z5P1 z^n1aD#czhnMTktrmI6D2-H-ImpiBsCsWcb%87O(yZfC&f1l+pfD+1}Nn)L%rvmE6L z`)N2R&uVKvYUN_V4^j>%P}{a(=cpIS6gwdg;fOh0$t6oEl@=>G=#2Eo;(Ii3xB{FO zV+V>+xHBXsR0^fi(Xgds_nFCPW{RwK<%Y2wuzZ+BXuGjP0y6FLlsv6Qt3*6*2t z0i!@M+U9bEYl*K+w7Xo%EHW(jxa9M!#5*G&tcL6ZOuW(-_VD>6R}AMa!abEXBI&|K zq&6CU`BFF_S!(Rf($mv@;5JxFsq_v~E>@^^5h*b0GMGXI?jj)Wpzn{sN?d2S@8Q*Y z%y@%foOzKe9zCS`4UQ=pAE}&VRm@i(C zKSV!}ENl?235&@oPmvDPi&%603G+8*R@qtEgrSE!k5$>9;Oj$-iv$r>sP? zDI1S07$I8%;(LrGA!xtT6~7RSr>boOeV+e_zKWcUA&Y4`uw4b6uJq5zN?#wZe8-WE zsJme(KZjljdjn;}$%UB?ygT9~_CVkq4-8lg@x-0WLSMfGX|pxZzKEOosJaYh8Q)j= zj#um}O@25-v5M=9HEWiGcx@ax!N>7_;vXcPD}z+>Qu&1DH?GVJr<{?y6Ou12bB!Z@ zo@IIlUz7fgUnPE{_&!kT`lE2ZoS$*J;ZfJ8eLs*LzP^zDXiWMV{iJWWbgVR|)61A4 ztD~`1p&uLT2IA~Od-Y4-0CZe~x;GG|)d(f}lh6PVvK)faia<|!5pCF6=>@gaS@~uw z0_{Ys;SWTs>;u}aAu};w|N7J?({(7>iyZhOj;?oUs0e_1CNqSVXoUB{p`L#r<&U ztZ0^!jD9K{KFfhW8|`NxzHnvSF{8xUD3uRw1|%DEP&VKm!j*J&mKjw8jvZl z)Knd#_<<(@+(phT)yK+wJ5nD~QHf+vWQyx~)G!ur3fe_J%~#^bDCX+JWk#~vAiM05 zaw*HVo`d8qTw>6##X!D0?Xfa<)Ey^Nal3BjGr;vNn9dQd7?Oi`#B zgPpKF+;7NB3Ls^fxsFBYEJh8=1gFV(EqCnt`GV`-dWG*!!QeJ0R0pB zPi+H9sstMHjH0OdG*>a1ovBQ;1&5uP>?;@bKNpHYo4HKXEHlQ1RpKgr86;!NpvKcO zew91}cj?SP$)`i22PeQ>R&m>eZKwlfay&WVwThgOR}nw{gv$&HKQ}YtbErLSg9)eC z2eKCAc)k<=kWSa2{*lhJ&46l;k+8eh8(`!PLzy|w5nDj}7KpVq>4*KR0qE%mkqn%? zVsfl6W3DrcP)knnQcZ1Nr1gzkWqe@uEA~VAJDZlpKhWb zL6-A#`X$|hQzP5xx43(KCnR!z1Xr>f?Po7;Vc$o8fwcIq^dvn6`Q01zCeB^lruXOr z(7GuX&$ZxMa*14Pt{s=cb>Px)d(v`lGxt5Wn>&nE>hrk4=wGgcyN)Y%C-77FY{)^* z;9ult^7Hst_*{MgznEXbFT>4I>-dlO-}poPVZN9@&X@AHA$NI?FXJn)3t$m4ggIFI zUmz^P$%@~EgF>{}S4@Xg#zJwCxKw;y+$pjZ<|6S2@khvU?15}~DembZ*s;^#rXD@k zfDKq#4#fRDNmw6#4r|A39e4t6={X`5OGl-XxPRzxl;lO}vUCME2$kXnp@)(UR|31s z2H8XQ#7#V@xMAlr+>x^nciY^S@5=XZ!wtdxO@1!^F7;g+xP-cdxmaA1T>82UbjfpB z>v9g43G+B&6R%0ow9vHFw9>TJbkwA3x@gig-86kPLo~xQBQz5<6E%}G(>1d-b2Rfc zOEqt53N@c=zS3;h?9lAg6lwNoe$o7@IiNYF`AhS+=B(y|rc`rNb6ZoUDc4XfuNAfK z+FIIhZDVbWwz;;2ww1QEHbwiKwwt!EcA$2Ic7k@2Hd{MeJ6AhjyHxw8wov=Ic8hkq zc87MSwn)22`?K~J?XTK{+SA&z+6&rJ?F}uCTj@ldyRMclT-R6^qidmSscWT6)FtU! z>r!;j=~8vQbjvqD=tk%!=qBnW>E`I>>gMZ~=-$w+)V-@)qg$sd(0!uYsoSM1 z((Tsm)BUPDs5_>+pexng(ml|XK`>9$yXigk;rbYTOMNSSYkhltCw(t{AAN>?h<=2A zntqmkj()y=iT(|Jp?-^gyMBj$r~W(rF8yx(9{oQ3etoh2l>W5-tp0-jhMsd3UEN$g zU0b@ga&7I}-nEl!s%sb5=Up>ghq#V#o!~m%b%yI4*ZHoiT)%ML;kwIppX+a~hh2}l z9(TRzdK+R5(Qb|1nz|*rCAqbCOL6P!mgbi3Hrs8UTdvz8x7Xa>a$D*4f!l{}`EG@7 zAG>|#_PN`aZr{4?aNFg!+ikDgLASr$(EYm$?zP-&yVr5|arbjKx`(?rb&qk6b#Lb0 z+&#`c-aWy+g?mf)R_;me9o;9o&vMUkpYQ&P`vUjZ+*i8qbl>g1$Nhl&LHA@oamIA|z0R2Uu_I(epf_VG;j%~xyvs9HI-metCGI3le*&TG6^j@N9j)n4y<<#}E8D!~;7Zr+~WM(@Vn zG2Thu-Mursv%DvH=XihV{gwCE-aEZ_d++i7+53q1G4JEve|rDrebW21cPWGtB_G*G z=i}yM@G<(d^=apm^PS+ERf5Bh$Z|Wc8AM2ms-@?D8e;fa{{>lDn{^|aM{m1xE@z3#}<3HE`1OK)D8~h9W z3;j3wf8_s(|7QPf{ulf&`d{+D;{UIIiT`!~oBkF4B%ppkL_pJk*not9q=3|bw1D)0 zX#q0>b_E;^_&wlAz?p!v0ha^*4JZk?8E`w`P5`MJQFlz;X?3U9U0ruq-HN&-@a@1g zfh5Q!$PnZcWDE)ovII2`N($-_lor%Cs9(^4pg}={gGL5T2+9ds5VS04MNnQ)LD1%) zuY$G)Z4cTJv@__tpznir2ki~oAM|U`!Jwl-$AeA=oesJb^l#A3pu0i$gDQd^1`(sq zXfS#ieT=?FKcl~~t})PvOVf>^#xP^Jv60bYj5Ed?6O4(**2Z?mWMg|{im|(~hq0%z zmvN9W!#LVF!8p-4#W=(GvT>$ymNCb;$oQIZiE)`R&v?*y(s;&r)_5Mn8E4{6vdP7y zHR()lCWEP#skW(($;;$p@-+pT>YEyvLQG~;s42`8Zi+HBGFePbO);i8Q@p8#sg)_o zlx#{dbuv9?>TK#_>S{_eWtirg=9?CpmYJ5DR+-*4<(WP(tuw7RZ7}7VJ~4f2I$%0z zI&Avgbi`C_x@{u$Tb+cVb-gd^{Z;R5JyJiZen$Ow>tDfu z`*nk@4T>6k-{5`&5;8tyLI^dFG>An%Mw8H*8+m{IFNTa>EvcEeu-}_G;MT zu-C$tge?tQ7WR7B8)0vTy%n}R?Cr33!d8T>3_Bk7N7#w5Kg0eCs|b4-W(^|^Ee(?! zrZh|g6JUwRh!`3%JR&n9D`H~Aq=+dI*%2>9yc97rVs^xwh;tF=Bd$hVkGL7}AmU+! z6_;z6BO@a%k>evLM9zxLiOh>Eh};~xHF8(v-pGTI$0JYU3KlMkkHXb^5JA*LX`^&e z`Y6{Zw12q#wb%%a8$jh`cVy{LZZx3p;2K`;ZcpEEK%`MIZ>-| zMOP`VP@@*XB3dMiY;mz@ELw}sqPMtO+$`=EgT=$*X{l|gWAUCBRbG z5@<16OqOs+i3(t|uSrH@I#vY%p#J-;lH+Ys2^r6E;lVFlEEc4YM}nYdx z%n#1DzbwBzpDW-Cqyo7>SD-JbSJ0rqTo77d zDTpm-UJzH1R4}C=r(jOOmjyo-94I(gaJt}T!To}AFl5?|AseGMS~jL^?7nf(#*B?Q z8|QAExABXOUvB(rlRkns4%*)NnuQ3QeoS|c7>e_Qw!4y z`xj;uPAHsM_(I`~!WRp33O5&iR`_}0mcp+KzbV{VxT~&B9xScM9(o(oLF89-EAtLO1Q&^v|aAn=Wj+wCVDutDCNE`gc<)7{ztRHXr*1 z%;2m)ZGYPSCZ}!p$%6@Hq`X#n-SWWlpz^Tt@bc#6t;&UNMAErHg z<6-GT+|G)tN)1+TtB=*!YP4Fc(bgu`7;CJxnYFn!&Khq`u(q(aw6?M)T9d4;t!=Dr zt?jJI))Z?8Ye#FUHO<=7+Q-`0nr`i9?Qb1m9cUe79bz479cCSA9c3MDonW1cn@y=r zu!%Moo5rTK>1=wNtIf@3u=&{nY(X}YEy32p*3#Ar5-CZLN$F?nZyR76Xd7h9uno2i zu?@8ivyHG#uuZhBvE|vmx9zhXww@R%Z@Xl>Z2Q;tz*d1RI#)DX#%HII z9Pq?4B<+%L#$q}+;brt7PTA&gdEiEkyoGPgx52HYIsE&49>14A2=0>zp+cIFClD7G z7p+S(mliIGF3-F40Vn6B3DOufiJBa6WmxhA-=)_Yv~{$;;JOmEN!m1RhW2IcEL{8% z2TrMvE<-mBSKegcFPSL*kAlZ&o?_^37-7g!M(oXoFAQHBzA=1j*kRa-ak|t%Ja`YY zM}$YDN32JZM~=rFkGURSczosYokx+!PaX$7a=bQqedP7A*C$?^y}t7L+H02=F_QWd z>SHNyBpIJJzT5bvc;MAA0f7+(YvZEk0Cu=#xX_aGS%) zxRNUaVv>GGnjYzLr1z1LN9G)P_sE(fYma<*WaE)fj(m0G+ao)U{B-2tkt;`pV!7D0 z*sD0OxOs6xaZ+*n;!efgi^mqfQk+-3t@ucBNwLe(;G->$_C7k{=%S+qM~jYrfAr6z ze;qx0wESqr(K^Sxjs+ZxITm}Y>#?+By^oDQHsRR9V~dV0JGSvy;jtf%{djEOu>;3Q ziCAJPsb69)2`gz@5?7K?(xxP(q+`i*C8;IdN_v(&U(&avU&(-yK_!DrhLvQNj4hc` zGQDJGNlwYDB_EW0ShA_4w1kveO7luTD=jKLR7!3bZdh(ixN+fz;bzj!w43CX zIk)m|?Y?#T7P*~tyUpzfx5=HPJ85^y?DNhL*WF6)QxF!r%Ir>E z<-wUUzb)7a-$mTKj}tc;`^}cdluB`w8ah!LHH}U|?V{2woa3GiiO@Ne3a?(2=gPDpTPVS=4UjX`vPfv4Vlud_}&ivBjkU7g1HCgUYPq}{z9qeDd-!p-vsUL0|eWFFL zkUT@1kUfSr^jBzXF}}Sza2{O~m_hRbX@*PC+b%vqZ%d&tn?rYiy>HMvE+b)I0KEdb z0D5cC+uXLGncViEx9HBGVRUcMOTvEGkHh^$&@}E6%qu}txobfy=>4DxTv^a0t^)oc zrXe)k)Sosq4Wx}tdYWN!G0Zg)`c-|cABpg4lo3Jbkcd8XXv7FQECOqr5mXu%(UWFH z^rqt@(&&VU?sO7hvY}^2bm4L$=&-91RJe)nqzyDGX9M*K&ZlmT^J%N;`BZp0zcZbg zPqnY+6Z%?yC%O!7dH62O??6p9H)TJZ-8STcGuQ^=hg)5YSZ4@9k7q%TmxR^!6zmhH z;Wn3jifsD$B_5mjB~-UW`rw(i9NQdQu5Fp^UEBM%LfcoiUA7->yKQ^X2OmWLd(n2q zcEffL7hFHEw-@}|gxp+iD-Xp@uy4t~$d}~%vfibY%QTlYF2`L;TtYQnH3gcjnj@O} z+OgV?w5POwx-Pm!m@#hE9nrbC=D1F9%W+%gmgn}B+kLm@?j79wxR1n)sla`&`*C-z zAsn-z(S}8aLc?Ceal?H>bB_)l=^oQO7I>`i5PV{Nrui)JIqp-}ca-mJUzgH=(hj8q zOIMT@mhLOPRC>SEoaR+-`Tcoql`T?Zvk@-`;wA*X_NxwRfWKWZfyev;U6uPV>8+?vB2@m z%}JAQP07A9^#%5KrX#1kFn#cuGiQdMKR;^x_3PKO@7$>j?}+EwW|j1e9k$BhQJV_z zsB6`?;?Lnd7X9Zq=q%{*&^XmcCPGhwo(w$&IvaW_^b64c&GStk$TC5nfnEy$3)e-@ic1gCJ`KGX{D!+{eRo?Et(0e**Bm zAvZJ&_B`0V;2snRrM~L+>e*IF)+e%E&vMh{M7#OjVN;V?Fa5zK+09*#;FhDpX_D;b zuCCt>7BfFO=?I^=`tIz*y2;n=-wzVc4sR4ZtKp0ma{t;*LN?59vE!H084KhI_V3qQ zSm!hxo>C_>Nlm9YkSepbiJJOde8QUTtM2J{?0^)L&GvUWe_H#)n?9eLI4{1->eI)1 z+2I|zDoxD#Zh>Fdgw-u#nv`#BdG~tafWMBvTPtJY_Q5$Xv|4rTdg7rGxrP}7mu;Uv zE9+97f37Fix||xtGym z@9J!y6BekkES*>{zjb9W^@GyV$TR zARr>WiJgcQ8({C~Ywy@wbP#(7dlxHKg4k>BS~D4#1bFrR&pH47zI)Gpo|#!~uf6u# zYu6+bro@Nq2P>UTR%X@Sw0&v3irL{g=;f2E3VDw?>&`45qhdPDTldPov_d(y$9VaH zNEOq(-UH9v@`=hZPIe0+AIvh3|26}xv;F|&`aZ__ethWy5?q0^hSQ!(RZ zPgC{BDC7(8jZf~#sF?X1H$M3}XQA9}XiVrBH{^GS&T||xP0p;}<#DO5ipk3^zqn?5 zh5Y`w$Np_=s+b{05zN>F3zZXnKR$X`S;f@dVjS}5bG-b~gYq9<cfsVWpN;Xs%4U zeJ3N%QN`>rF^i0EJX3BeeY$>%jfzP;e<@+EU8uZ|ON&iA%v8+2Eva2&x=xbY@2_j} z%Rt3+iQf8H(rT)_?yW9A!X+xE)0eA*o7_*7t4sLpGWwCj$Og`7rdTso`7ULy*U3*g z%<%4=FTCwES9yL@)5aU#9YPo4l^UL+8A$}dCD@1t+KXva+rY$ z4jmFV^i$TT^SOe_jU1-*(vAVkYK>Da+SvW}$IKkYdTYA(Ti@35+6g}1MwfCJm7hT~ z<6#TseWC2zmgjPq(bCm-9$g5PXULE3{p(Z?<7#8c%u&yiKe&1`x5n`tCUwV{!BtW_je)gHg(Oj}?7t?#W?34I2BVoy}CG<=nyN*6zgoH-9?nH=HNG6hk13XWcMkj8_4&!>p!FF zrW~eWnqST5_2$bvRM=)8wjqZ}8M(x#)6-c><9j0yK3bQQ`veN1Jg$C``O??wR@iOVzanmD_7+(@dq1B+h#LD$=)%Iu|Yg%Q^)~TfUnY}l)rpeN)FRwdRFh| z_Y}&>^Lu<9kND*l119*DAEk`;dh;R%@zn7%(>mo$RYp%-*I_B*GoE{vt5 zKCcnKdd+yq`Q=G+X7B@#K-6D$UDt#6>Wx)Sle~_yLwkbK0($>^Ghbfsn5*P1;-0}b zwmf?6FCW_Na-;WXf2+&8T~4l^uCyuDqPH{Fw?X4(@Ad`GQ`%nYvLpfhQBGa5>Es~_ z<+jt6+Lc0oh4ziS)&1Ih<=eS!mfhZ%!@vxSfdSi+YYwB%KDpd`pTBZeo4qCKVSBaldf$K2r?K)zvGz;0V|z|&UT#Bq<9W(c>SWV_ z*xuF41V$Odd775+biu=}Af7GdYZJ z#i12tC#Na>pA8;6>_QH6z3$^DQ_IYh*RS2_&9V&aPluIPGY=;#2UlsaOL`sqTiu-H zbuT2z`|WnMU3oi)**zdCbaLQiIs0?8XAt(UJuBucy7(|&Ip+OUHVFIQwEE}g#+I5T z-*$Dtl9U%Y%(vT_of5|;DTnQwUEMGzhdH$UUZ2~?J(b_>Jr4Z!K8JDtw7$8;+9YMu z{?BGdentP!+vfJ+#&Bi(A>Z>xsxe+?^b2~NldSAyu-Y|MU&UO!?`3jR9WB3dtaDO1 z9B;NRp8M_lkz}QDxtjyiaXi{>w!?LMXq0?;&nfqpmBjJzXUd>@Pv*$SWT?HiIH7!h z9L2h5RAsdrcUJW$1S4w7u`-*mFvdynLO z1)SH*x7cG?;d;E%YuVWPi^i##v*zua9juX{tiJlAUAw6&=IZpO-m-ns@=wgn>^ey* zCL(f0k2fbL$tQI={k_Lh6_cBMHPPmCqVi7C+P`+J#qmG7(&NS3XDirKb!*PJY0bSS8C&66r7XG&(>O@1@v?rlQ{j>P%)?UQCt z4>g{nv^%r7JH*SOxe%vwv{Ro=biER%A^;8~34NtRzRWU;Zd3_-c` z+`8m4Yj%IZk|ij&p=|)tPqMBL+N`PEF`e;m-fFE{&9dii)TlN&LdmFyr?!5*5*gmnn$&R08TYh~e;-jj$4Lopz&D?X+wBt^~6-l0hZ?K2VT0P|p1-JFQPUn?4G}741}yUtVFa24!DbmDb`2;#PMZ*DcLpXH>~L9`_gG2Yh=zZ=b<7n0&3W z{&d81r?##5`Z8-;yJYE0A&93s#B^$ZneFY^W#GLn7enOw>P8ZmhT})Tq zzE1eW*$xxWvo()drFkDgJmczxvyacQ2kykwth^5KB%3}YSN$=y@J8~Z3 z9fOvXKF)qz-M8)WTOjWAxo_O1GAnxwI z(5UfI*0e*{jvwBx&^A8#SP>Q=XauZP)j6Z%?LI*GWqi__?PhuD`@ z&qt5jiMXO#_VKiX?7mX9%p@xjPmA2$Zv6rFNcg_7sWT9Vt-B?&_p|$yswy*L33qGz zE_xq(r*4;qv;8Rlv=ECSd)fP5&PfM*AfC1Q!JrO%*e+MR}fFLaZgyii7mDG@wg3XgzMGsH+=(}+33_H zmmP>JZUhX8SjRT8UA6e`3c~$6&KR_YeVE;I$Cg=$yW9Ic>A0HxUagx;%2?vRj!%nR z$(BrPIBV|+!h807=ed-v_4UoVoc@GQygan|LN=*Z=EaU35r@sQzE_*eZrYZ6>XaMd zU!BI*oyBgdH`>;}8pj{pu;gU6L)0th%8rD;NtfD;Vi)YRGmse(UU{^!%$qIst?K9U zSvW33(&YE5FedtyPkNcvgg0;4^4>J2&XS3#R=5uVMf!;~m*z1Sx8=w`RUv+Y-LaHq zOtx*Z^vp|K=YaL4TdAv=Ej!PTQfx;&O_DKi#yV!1*^0kPMI)}b$QSfgyy}$_Ab+{^_GK--slZ~g&ZZ^ z{P5{fhnWzg#vxT_BJPx3&$jguM%Hiek@@|I{~)5S3Cqk%Ib45lRm9zsYuX2-F--QG zoJk*F=`^oh;rN^0CEmS8T`y*~u zUw-`Iac1W9vjH6%Bd!<|)acL&rju*g3Z0D+&&{mXWZp?;f+}yyi@UE7cdUGI#3|;l z=H7M7?m#?g*qblzrP%67!llotZ3UtnA= zEy}Ai1##~V*BgGiz{GT3n{#Lo@!K^xa_l1G)**YvsRoE=T|OY0b%}Z2Gr+~e9PuQF zG-J=p%!-@pIX$1h!12AjO|V4Z5(C7C``+~G ze}$>OCd;?V<7}J{?TlRyUSYQFy%)RtDB|9&ts)(-GU-(o1#Di1xZ|6UsH#Zrf!IvBi|O*%@D$$GhM3m4tn*&N50+i;V*UKbLOW-|1QoG z#wnF2eGMV?IU~7qufy4Jrp2&l&4^9aofLCdpfT(toX1J!g8=eq2hXn4nZF znu?$DWHUWS8%GRNkCofJ4EUjT$!01~J5u#A%#x3=p7>Dhk!???QEl3E@gO%e+-z&SuKY z9BUM*P$);1s`^r`%4W8IT@g|(ZMOWyn&mREdcoB1@~p>|xCD7(t$7aM`huDG-gV#0 zUo(`;qv{(#_ZN(^p??s|Cdf}Ev~q&*7fj4p>-YZbOr>n}$Jgq_7fj#t&HoC81m#1S zvLd9uU`#q^xjlsO${D52o~bXtVDwYe?IK{hvh|$gA8OSL#w~nI#@LCI@7n zjC9Y#k;yF* z7jBLZSDMdg`$3)fl2L8+OD?ULrfgAX@qP78oPg4&2-Vy6h@w@Dp(IrOS zWBEHL$bHF}44m$~nVF$9NNsBkRocls^qfcu7TpAH*>>np}Fq~?q*M`y`LmtAB9 z-Cr@TqetC8_iMVmL!FOhA^a6{cgwBjBU>gad)Dt?29jPeHY3v~>#=i`om+U+fYeuv z7o(QTeg-Nt%Wc1@zWj>W6P{#~-6CE&O4cJst$M|*d0>&%!eE4apt=8DwdHH(ph
`AUQu6u%~W{REN8zuSozS{ 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

Kf~ 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 Q{Fwi~d8O@nt?l4{0c+H^djJ3c literal 0 HcmV?d00001 diff --git a/examples/app/web/worker.dart b/examples/app/web/worker.dart index 09df774e..f0934aa5 100644 --- a/examples/app/web/worker.dart +++ b/examples/app/web/worker.dart @@ -7,8 +7,6 @@ import 'package:drift/remote.dart'; void main() { final self = SharedWorkerGlobalScope.instance; - self.importScripts('sql-wasm.js'); - final server = DriftServer(connect(isInWebWorker: true)); self.onConnect.listen((event) { diff --git a/examples/web_worker_example/lib/worker_channel.dart b/examples/web_worker_example/lib/worker_channel.dart index 50497463..ee96a24b 100644 --- a/examples/web_worker_example/lib/worker_channel.dart +++ b/examples/web_worker_example/lib/worker_channel.dart @@ -1,5 +1,6 @@ import 'dart:html'; +import 'package:drift/web.dart'; import 'package:stream_channel/stream_channel.dart'; StreamChannel startWorker(String script) { @@ -8,13 +9,3 @@ StreamChannel startWorker(String script) { return worker.port!.channel(); } - -extension PortToChannel on MessagePort { - StreamChannel channel() { - final controller = StreamChannelController(); - onMessage.map((event) => event.data).pipe(controller.local.sink); - controller.local.stream.listen(postMessage, onDone: close); - - return controller.foreign; - } -} From 1f8e850f7c17d6064df03188edae1cce14ad03d6 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Sat, 2 Apr 2022 19:10:41 +0200 Subject: [PATCH 14/15] Add wasm library to changelog --- drift/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drift/CHANGELOG.md b/drift/CHANGELOG.md index 98d6e60f..5ad5b3fe 100644 --- a/drift/CHANGELOG.md +++ b/drift/CHANGELOG.md @@ -1,5 +1,9 @@ ## 1.6.0-dev +- Add the very experimental `package:drift/wasm.dart` library. It uses WebAssembly + to access sqlite3 without any external JavaScript libraries, but requires you to + add a [WebAssembly module](https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3#wasm-web-support) + to the `web/` folder. - Internally use `package:js` to wrap sql.js. ## 1.5.0 From 7a243fe0bf057f2dc65b4e9debe7b4c5a005d866 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Sat, 2 Apr 2022 19:35:55 +0200 Subject: [PATCH 15/15] Remove unintended dependency override --- drift/pubspec.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/drift/pubspec.yaml b/drift/pubspec.yaml index b1ec6e93..1cdce17b 100644 --- a/drift/pubspec.yaml +++ b/drift/pubspec.yaml @@ -34,5 +34,3 @@ dependency_overrides: path: ../drift_dev sqlparser: path: ../sqlparser - sqlite3: - path: /home/simon/programming/sqlite3.dart/sqlite3

bL__P{zyRzzWE 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ÄCcn0+5dg52O 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