From 9bbbba75b212a6efcaaef4ff6c18b483bc3e1939 Mon Sep 17 00:00:00 2001 From: ci-bot Date: Fri, 27 Jun 2025 09:29:19 +0000 Subject: [PATCH] Deployed cdf452a0 to 13.0 with MkDocs 1.6.1 and mike 2.1.3 --- 13.0/404.html | 2 +- 13.0/administration/account/index.html | 2 +- 13.0/administration/auditing/index.html | 2 +- .../administration/backup_recovery/index.html | 2 +- 13.0/administration/clean_database/index.html | 2 +- 13.0/administration/export_report/index.html | 2 +- 13.0/administration/index.html | 2 +- 13.0/administration/logs/index.html | 2 +- 13.0/administration/seafile_fsck/index.html | 2 +- 13.0/administration/seafile_gc/index.html | 2 +- .../security_features/index.html | 2 +- .../two_factor_authentication/index.html | 2 +- .../index.html | 2 +- .../index.html | 2 +- 13.0/changelog/client-changelog/index.html | 2 +- .../drive-client-changelog/index.html | 2 +- 13.0/changelog/index.html | 2 +- .../changelog/server-changelog-old/index.html | 2 +- 13.0/changelog/server-changelog/index.html | 2 +- .../config/admin_roles_permissions/index.html | 2 +- 13.0/config/auth_switch/index.html | 2 +- 13.0/config/auto_login_seadrive/index.html | 2 +- 13.0/config/ccnet-conf/index.html | 2 +- .../config_seafile_with_ADFS/index.html | 2 +- .../customize_email_notifications/index.html | 2 +- .../details_about_file_search/index.html | 2 +- 13.0/config/env/index.html | 2 +- 13.0/config/index.html | 2 +- 13.0/config/ldap_in_ce/index.html | 2 +- 13.0/config/ldap_in_pro/index.html | 2 +- 13.0/config/multi_institutions/index.html | 2 +- 13.0/config/multi_tenancy/index.html | 2 +- 13.0/config/oauth/index.html | 2 +- 13.0/config/ocm/index.html | 2 +- 13.0/config/remote_user/index.html | 2 +- 13.0/config/roles_permissions/index.html | 2 +- 13.0/config/saml2/index.html | 2 +- 13.0/config/seafevents-conf/index.html | 2 +- 13.0/config/seafile-conf/index.html | 2 +- 13.0/config/seahub_customization/index.html | 2 +- 13.0/config/seahub_settings_py/index.html | 2 +- 13.0/config/sending_email/index.html | 2 +- .../shibboleth_authentication/index.html | 2 +- 13.0/config/single_sign_on/index.html | 2 +- 13.0/develop/build_seafile/index.html | 2 +- 13.0/develop/data_model/index.html | 2 +- 13.0/develop/index.html | 2 +- 13.0/develop/linux/index.html | 2 +- 13.0/develop/osx/index.html | 2 +- 13.0/develop/rpi/index.html | 2 +- 13.0/develop/server/index.html | 2 +- 13.0/develop/translation/index.html | 2 +- 13.0/develop/web_api_v2.1/index.html | 2 +- 13.0/develop/windows/index.html | 2 +- .../extension/distributed_indexing/index.html | 2 +- 13.0/extension/fuse/index.html | 6 +- 13.0/extension/libreoffice_online/index.html | 6 +- 13.0/extension/metadata-server/index.html | 2 +- 13.0/extension/notification-server/index.html | 2 +- 13.0/extension/office_web_app/index.html | 2 +- 13.0/extension/only_office/index.html | 2 +- .../{seafile_ai => seafile-ai}/index.html | 211 +++++++++++++++++- 13.0/extension/setup_seadoc/index.html | 2 +- 13.0/extension/thumbnail-server/index.html | 2 +- 13.0/extension/virus_scan/index.html | 2 +- .../virus_scan_with_clamav/index.html | 2 +- .../virus_scan_with_kav4fs/index.html | 2 +- 13.0/extension/webdav/index.html | 2 +- 13.0/images/face-embedding.png | Bin 0 -> 88085 bytes 13.0/images/seafile-ai-file-tags.png | Bin 99276 -> 0 bytes 13.0/index.html | 2 +- 13.0/introduction/components/index.html | 2 +- 13.0/introduction/contribution/index.html | 2 +- .../file_permission_management/index.html | 2 +- 13.0/introduction/roadmap/index.html | 2 +- 13.0/repo/docker/face-embedding/cpu.yml | 16 ++ 13.0/repo/docker/face-embedding/cuda.yml | 26 +++ 13.0/repo/docker/face-embedding/rocm.yml | 19 ++ .../repo/docker/seadoc/0.8/docker-compose.yml | 22 -- 13.0/repo/docker/seafile-ai.yml | 22 +- 13.0/search/search_index.json | 2 +- 13.0/setup/caddy/index.html | 2 +- .../cluster_deploy_with_docker/index.html | 2 +- 13.0/setup/cluster_deploy_with_k8s/index.html | 2 +- 13.0/setup/helm_chart_cluster/index.html | 2 +- 13.0/setup/helm_chart_single_node/index.html | 2 +- 13.0/setup/k8s_advanced_management/index.html | 2 +- 13.0/setup/k8s_single_node/index.html | 2 +- 13.0/setup/migrate_backends_data/index.html | 2 +- .../migrate_ce_to_pro_with_docker/index.html | 2 +- .../migrate_non_docker_to_docker/index.html | 2 +- 13.0/setup/overview/index.html | 2 +- .../index.html | 2 +- .../setup/seafile_docker_autostart/index.html | 2 +- 13.0/setup/setup_ce_by_docker/index.html | 2 +- 13.0/setup/setup_pro_by_docker/index.html | 2 +- .../index.html | 2 +- 13.0/setup/setup_with_ceph/index.html | 2 +- .../index.html | 2 +- 13.0/setup/setup_with_s3/index.html | 2 +- 13.0/setup/setup_with_swift/index.html | 2 +- 13.0/setup/system_requirements/index.html | 2 +- 13.0/setup/use_other_reverse_proxy/index.html | 2 +- 13.0/setup/use_seasearch/index.html | 2 +- .../cluster_deployment/index.html | 2 +- 13.0/setup_binary/https_with_nginx/index.html | 2 +- 13.0/setup_binary/installation_pro/index.html | 2 +- .../migrate_from_sqlite_to_mysql/index.html | 2 +- 13.0/setup_binary/outline_ce/index.html | 2 +- 13.0/setup_binary/outline_pro/index.html | 2 +- .../index.html | 2 +- .../start_seafile_at_system_bootup/index.html | 2 +- 13.0/setup_binary/using_logrotate/index.html | 2 +- 13.0/sitemap.xml | 2 +- 13.0/sitemap.xml.gz | Bin 1265 -> 1264 bytes 13.0/upgrade/upgrade/index.html | 2 +- 13.0/upgrade/upgrade_a_cluster/index.html | 2 +- .../upgrade_a_cluster_binary/index.html | 2 +- 13.0/upgrade/upgrade_docker/index.html | 2 +- .../upgrade_notes_for_10.0.x/index.html | 2 +- .../upgrade_notes_for_11.0.x/index.html | 2 +- .../upgrade_notes_for_12.0.x/index.html | 2 +- .../upgrade_notes_for_13.0.x/index.html | 2 +- .../upgrade_notes_for_8.0.x/index.html | 2 +- .../upgrade_notes_for_9.0.x/index.html | 2 +- 125 files changed, 394 insertions(+), 162 deletions(-) rename 13.0/extension/{seafile_ai => seafile-ai}/index.html (88%) create mode 100644 13.0/images/face-embedding.png delete mode 100644 13.0/images/seafile-ai-file-tags.png create mode 100644 13.0/repo/docker/face-embedding/cpu.yml create mode 100644 13.0/repo/docker/face-embedding/cuda.yml create mode 100644 13.0/repo/docker/face-embedding/rocm.yml delete mode 100644 13.0/repo/docker/seadoc/0.8/docker-compose.yml diff --git a/13.0/404.html b/13.0/404.html index 8de9b329..aa875d54 100644 --- a/13.0/404.html +++ b/13.0/404.html @@ -2230,7 +2230,7 @@
  • - + diff --git a/13.0/administration/account/index.html b/13.0/administration/account/index.html index 27399649..9b5139fa 100644 --- a/13.0/administration/account/index.html +++ b/13.0/administration/account/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/auditing/index.html b/13.0/administration/auditing/index.html index 33f87006..f870cd26 100644 --- a/13.0/administration/auditing/index.html +++ b/13.0/administration/auditing/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/backup_recovery/index.html b/13.0/administration/backup_recovery/index.html index 2aa80a65..7dfc53d3 100644 --- a/13.0/administration/backup_recovery/index.html +++ b/13.0/administration/backup_recovery/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/clean_database/index.html b/13.0/administration/clean_database/index.html index d867be0b..49c0ad9a 100644 --- a/13.0/administration/clean_database/index.html +++ b/13.0/administration/clean_database/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/export_report/index.html b/13.0/administration/export_report/index.html index a0fa66e0..7cd958f6 100644 --- a/13.0/administration/export_report/index.html +++ b/13.0/administration/export_report/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/index.html b/13.0/administration/index.html index e09aeaff..48881052 100644 --- a/13.0/administration/index.html +++ b/13.0/administration/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/logs/index.html b/13.0/administration/logs/index.html index 73c8cf20..f5a19be2 100644 --- a/13.0/administration/logs/index.html +++ b/13.0/administration/logs/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/seafile_fsck/index.html b/13.0/administration/seafile_fsck/index.html index 27cc325b..bf8de6e2 100644 --- a/13.0/administration/seafile_fsck/index.html +++ b/13.0/administration/seafile_fsck/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/seafile_gc/index.html b/13.0/administration/seafile_gc/index.html index 0c30ba15..22be68b6 100644 --- a/13.0/administration/seafile_gc/index.html +++ b/13.0/administration/seafile_gc/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/security_features/index.html b/13.0/administration/security_features/index.html index b58e11d0..61bc8add 100644 --- a/13.0/administration/security_features/index.html +++ b/13.0/administration/security_features/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/administration/two_factor_authentication/index.html b/13.0/administration/two_factor_authentication/index.html index 78e04680..c5905c00 100644 --- a/13.0/administration/two_factor_authentication/index.html +++ b/13.0/administration/two_factor_authentication/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/changelog/changelog-for-seafile-professional-server-old/index.html b/13.0/changelog/changelog-for-seafile-professional-server-old/index.html index 82a8432f..c0c4e353 100644 --- a/13.0/changelog/changelog-for-seafile-professional-server-old/index.html +++ b/13.0/changelog/changelog-for-seafile-professional-server-old/index.html @@ -2237,7 +2237,7 @@
  • - + diff --git a/13.0/changelog/changelog-for-seafile-professional-server/index.html b/13.0/changelog/changelog-for-seafile-professional-server/index.html index 6d0ee23a..a53625cb 100644 --- a/13.0/changelog/changelog-for-seafile-professional-server/index.html +++ b/13.0/changelog/changelog-for-seafile-professional-server/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/changelog/client-changelog/index.html b/13.0/changelog/client-changelog/index.html index c7fbe466..71cf00fb 100644 --- a/13.0/changelog/client-changelog/index.html +++ b/13.0/changelog/client-changelog/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/changelog/drive-client-changelog/index.html b/13.0/changelog/drive-client-changelog/index.html index 12d2caa2..e3742e98 100644 --- a/13.0/changelog/drive-client-changelog/index.html +++ b/13.0/changelog/drive-client-changelog/index.html @@ -2241,7 +2241,7 @@
  • - + diff --git a/13.0/changelog/index.html b/13.0/changelog/index.html index c18a716f..007a2ccb 100644 --- a/13.0/changelog/index.html +++ b/13.0/changelog/index.html @@ -2237,7 +2237,7 @@
  • - + diff --git a/13.0/changelog/server-changelog-old/index.html b/13.0/changelog/server-changelog-old/index.html index 481f23e0..b396037e 100644 --- a/13.0/changelog/server-changelog-old/index.html +++ b/13.0/changelog/server-changelog-old/index.html @@ -2237,7 +2237,7 @@
  • - + diff --git a/13.0/changelog/server-changelog/index.html b/13.0/changelog/server-changelog/index.html index c6a12068..883b632d 100644 --- a/13.0/changelog/server-changelog/index.html +++ b/13.0/changelog/server-changelog/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/config/admin_roles_permissions/index.html b/13.0/config/admin_roles_permissions/index.html index b79a078f..0c3ff72f 100644 --- a/13.0/config/admin_roles_permissions/index.html +++ b/13.0/config/admin_roles_permissions/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/auth_switch/index.html b/13.0/config/auth_switch/index.html index f419a433..2a3dbf7d 100644 --- a/13.0/config/auth_switch/index.html +++ b/13.0/config/auth_switch/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/auto_login_seadrive/index.html b/13.0/config/auto_login_seadrive/index.html index c28993c7..30d655a0 100644 --- a/13.0/config/auto_login_seadrive/index.html +++ b/13.0/config/auto_login_seadrive/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/ccnet-conf/index.html b/13.0/config/ccnet-conf/index.html index cb6ce001..ad42875e 100644 --- a/13.0/config/ccnet-conf/index.html +++ b/13.0/config/ccnet-conf/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/config_seafile_with_ADFS/index.html b/13.0/config/config_seafile_with_ADFS/index.html index 64c2260c..780ebe08 100644 --- a/13.0/config/config_seafile_with_ADFS/index.html +++ b/13.0/config/config_seafile_with_ADFS/index.html @@ -2237,7 +2237,7 @@
  • - + diff --git a/13.0/config/customize_email_notifications/index.html b/13.0/config/customize_email_notifications/index.html index 81f845ea..f7de8b85 100644 --- a/13.0/config/customize_email_notifications/index.html +++ b/13.0/config/customize_email_notifications/index.html @@ -2237,7 +2237,7 @@
  • - + diff --git a/13.0/config/details_about_file_search/index.html b/13.0/config/details_about_file_search/index.html index 98c61f18..94f24633 100644 --- a/13.0/config/details_about_file_search/index.html +++ b/13.0/config/details_about_file_search/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/env/index.html b/13.0/config/env/index.html index ab0064a7..e30e7eca 100644 --- a/13.0/config/env/index.html +++ b/13.0/config/env/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/index.html b/13.0/config/index.html index c713d71e..5e09b81a 100644 --- a/13.0/config/index.html +++ b/13.0/config/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/ldap_in_ce/index.html b/13.0/config/ldap_in_ce/index.html index 64c9c1df..4fb2a973 100644 --- a/13.0/config/ldap_in_ce/index.html +++ b/13.0/config/ldap_in_ce/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/ldap_in_pro/index.html b/13.0/config/ldap_in_pro/index.html index a01053ef..15277055 100644 --- a/13.0/config/ldap_in_pro/index.html +++ b/13.0/config/ldap_in_pro/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/multi_institutions/index.html b/13.0/config/multi_institutions/index.html index 9ae7db6b..7fed515b 100644 --- a/13.0/config/multi_institutions/index.html +++ b/13.0/config/multi_institutions/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/multi_tenancy/index.html b/13.0/config/multi_tenancy/index.html index 6792d6a4..a646d910 100644 --- a/13.0/config/multi_tenancy/index.html +++ b/13.0/config/multi_tenancy/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/oauth/index.html b/13.0/config/oauth/index.html index ef3c1cc5..15812838 100644 --- a/13.0/config/oauth/index.html +++ b/13.0/config/oauth/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/ocm/index.html b/13.0/config/ocm/index.html index 35c84b1d..4689c8eb 100644 --- a/13.0/config/ocm/index.html +++ b/13.0/config/ocm/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/remote_user/index.html b/13.0/config/remote_user/index.html index 27443112..4528407d 100644 --- a/13.0/config/remote_user/index.html +++ b/13.0/config/remote_user/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/roles_permissions/index.html b/13.0/config/roles_permissions/index.html index 8de2dff9..9133655f 100644 --- a/13.0/config/roles_permissions/index.html +++ b/13.0/config/roles_permissions/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/saml2/index.html b/13.0/config/saml2/index.html index 7686751b..99336d19 100644 --- a/13.0/config/saml2/index.html +++ b/13.0/config/saml2/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/seafevents-conf/index.html b/13.0/config/seafevents-conf/index.html index 787d6610..1088b32c 100644 --- a/13.0/config/seafevents-conf/index.html +++ b/13.0/config/seafevents-conf/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/seafile-conf/index.html b/13.0/config/seafile-conf/index.html index 2c4467ce..2dc6225c 100644 --- a/13.0/config/seafile-conf/index.html +++ b/13.0/config/seafile-conf/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/seahub_customization/index.html b/13.0/config/seahub_customization/index.html index 71ea8add..874ee451 100644 --- a/13.0/config/seahub_customization/index.html +++ b/13.0/config/seahub_customization/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/seahub_settings_py/index.html b/13.0/config/seahub_settings_py/index.html index 6463e159..9d39c5ae 100644 --- a/13.0/config/seahub_settings_py/index.html +++ b/13.0/config/seahub_settings_py/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/sending_email/index.html b/13.0/config/sending_email/index.html index 08af3992..4db85fcc 100644 --- a/13.0/config/sending_email/index.html +++ b/13.0/config/sending_email/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/shibboleth_authentication/index.html b/13.0/config/shibboleth_authentication/index.html index 3329d6c4..9e69b72e 100644 --- a/13.0/config/shibboleth_authentication/index.html +++ b/13.0/config/shibboleth_authentication/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/config/single_sign_on/index.html b/13.0/config/single_sign_on/index.html index 100baf4b..a895f55c 100644 --- a/13.0/config/single_sign_on/index.html +++ b/13.0/config/single_sign_on/index.html @@ -2247,7 +2247,7 @@
  • - + diff --git a/13.0/develop/build_seafile/index.html b/13.0/develop/build_seafile/index.html index c51ea7de..746004f5 100644 --- a/13.0/develop/build_seafile/index.html +++ b/13.0/develop/build_seafile/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/data_model/index.html b/13.0/develop/data_model/index.html index 9e89be5a..32a517f8 100644 --- a/13.0/develop/data_model/index.html +++ b/13.0/develop/data_model/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/index.html b/13.0/develop/index.html index f73903dd..60d9a8d8 100644 --- a/13.0/develop/index.html +++ b/13.0/develop/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/linux/index.html b/13.0/develop/linux/index.html index 6e3d1c81..30c9e8e9 100644 --- a/13.0/develop/linux/index.html +++ b/13.0/develop/linux/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/osx/index.html b/13.0/develop/osx/index.html index 70b93102..e0053342 100644 --- a/13.0/develop/osx/index.html +++ b/13.0/develop/osx/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/rpi/index.html b/13.0/develop/rpi/index.html index 83103c0c..ce9081b5 100644 --- a/13.0/develop/rpi/index.html +++ b/13.0/develop/rpi/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/server/index.html b/13.0/develop/server/index.html index b17f6f3d..af7bd196 100644 --- a/13.0/develop/server/index.html +++ b/13.0/develop/server/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/translation/index.html b/13.0/develop/translation/index.html index f8ffe6fc..3f19a53b 100644 --- a/13.0/develop/translation/index.html +++ b/13.0/develop/translation/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/web_api_v2.1/index.html b/13.0/develop/web_api_v2.1/index.html index 4f66aa43..db31e7fd 100644 --- a/13.0/develop/web_api_v2.1/index.html +++ b/13.0/develop/web_api_v2.1/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/develop/windows/index.html b/13.0/develop/windows/index.html index a6072d7a..b094d099 100644 --- a/13.0/develop/windows/index.html +++ b/13.0/develop/windows/index.html @@ -2243,7 +2243,7 @@
  • - + diff --git a/13.0/extension/distributed_indexing/index.html b/13.0/extension/distributed_indexing/index.html index 81821e8e..d1699434 100644 --- a/13.0/extension/distributed_indexing/index.html +++ b/13.0/extension/distributed_indexing/index.html @@ -2253,7 +2253,7 @@
  • - + diff --git a/13.0/extension/fuse/index.html b/13.0/extension/fuse/index.html index becb6b1c..994e3e5e 100644 --- a/13.0/extension/fuse/index.html +++ b/13.0/extension/fuse/index.html @@ -16,7 +16,7 @@ - + @@ -2330,7 +2330,7 @@
  • - + @@ -4836,7 +4836,7 @@ drwxr-xr-x 2 root root 1.6K Jan 1 1970 a09ab9fc-7bd0-49f1-929d-6abeb8491397_My - +
  • - + @@ -4871,7 +4871,7 @@ docker compose up
  • + +
  • + + + Deploy face embedding service (Optional) + + + + +
  • @@ -4644,14 +4728,14 @@
  • Detect text in images (OCR)
  • Deploy Seafile AI basic service

    -

    The Seafile AI basic service will use API calls to external large language model service (e.g., GPT-4o-mini) to implement file labeling, file and image summaries, text translation, and sdoc writing assistance.

    +

    The Seafile AI basic service will use API calls to external large language model service to implement file labeling, file and image summaries, text translation, and sdoc writing assistance.

    1. Download seafile-ai.yml

      wget https://manual.seafile.com/13.0/repo/docker/seafile-ai.yml
       
      -

      Deploy in a cluster

      +

      Deploy in a cluster or standalone deployment

      If you deploy Seafile in a cluster and would like to deploy Seafile AI, please expose port 8888 in seafile-ai.yml:

      services:
         seafile-ai:
      @@ -4667,13 +4751,25 @@
       
      COMPOSE_FILE='...,seafile-ai.yml' # add seafile-ai.yml
       
       ENABLE_SEAFILE_AI=true
      -SEAFILE_AI_LLM_TYPE=open-ai
      -SEAFILE_AI_LLM_URL=<your LLM endpoint URL>
       SEAFILE_AI_LLM_KEY=<your LLM access key>
       
      -

      Deploy in a cluster

      -

      Please also specify SEAFILE_AI_SERVER_URL to the host where deploys your Seafile AI basic service in .env, if you deploy Seafile in a cluster.

      +

      Deploy in a cluster or standalone deployment

      +

      Please also specify the following items in .env:

      +
        +
      • .env on the host where deploys Seafile server:
      • +
      • SEAFILE_AI_SERVER_URL: the service url of Seafile AI (e.g., http://seafile-ai.example.com:8888)
      • +
      • .env on the host where deploys Seafile AI: + SEAFILE_SERVER_URL: your Seafile server's url (e.g., https://seafile.example.com)
      • +
      +
      +
      +

      About LLM configs

      +

      By default, Seafile uses the GPT-4o-mini model from OpenAI. You only need to provide your OpenAI API Key. If you need to use other LLM (including self-deployed LLM service), you also need to specify the following in .env:

      +
      SEAFILE_AI_LLM_TYPE=<your LLM type>
      +SEAFILE_AI_LLM_URL=<your LLM endpoint>
      +SEAFILE_AI_LLM_KEY=<your LLM API key>
      +
    2. @@ -4683,6 +4779,107 @@ docker compose up
    +

    Deploy face embedding service (Optional)

    +

    The Face Embedding service is used to detect and encode faces in images. Generally, we recommend that you deploy the service on a machine with a GPU and a graphics card driver that supports OnnxRuntime (so it can also be deployed on a different machine from the Seafile AI base service). Currently, the Seafile AI Face Embedding service only supports the following modes:

    + + + +

    If you plan to deploy these face embeddings in an environment using a GPU, you need to make sure your graphics card is in the range supported by the acceleration environment and correctly mapped in /dev/dri directory (so cloud servers and WSL under certain driver versions will not be supported).

    +
      +
    1. +

      Download Docker compose files

      +
      +
      +
      +
      wget -O face-embedding.yml https://manual.seafile.com/13.0/repo/docker/face-embedding/cuda.yml
      +
      +
      +
      +
      wget -O face-embedding.yml https://manual.seafile.com/13.0/repo/docker/face-embedding/cpu.yml
      +
      +
      +
      +
      +
    2. +
    + + +
      +
    1. +

      Modify .env, insert or modify the following fields:

      +
      COMPOSE_FILE='...,face-embedding.yml' # add face-embedding.yml
      +
      +FACE_EMBEDDING_VOLUME=/opt/face_embedding
      +
      +
    2. +
    3. +

      Restart Seafile server

      +
      docker compose down
      +docker compose up -d
      +
      +
    4. +
    5. +

      Enable face recognition in the repo's settings:

      +

      Enable face recognition

      +
    6. +
    +

    Deploy the face embedding service on a different machine than the Seafile AI basic service

    +

    Since the face embedding service may need to be deployed on some hosts with GPU(s), it may not be deployed together with the Seafile AI basic service. At this time, you should make some changes to the Docker compose file so that the service can be accessed normally.

    +
      +
    1. +

      Modify .yml file, delete the commented out lines to expose the service port:

      +
      services:
      +    face-embedding:
      +    ...
      +    ports:
      +        - 8886:8886
      +
      +
    2. +
    3. +

      Modify the .env of the Seafile AI basic service:

      +
      FACE_EMBEDDING_SERVICE_URL=http://<your face embedding service host>:8886
      +
      +
    4. +
    5. +

      Make sure JWT_PRIVATE_KEY has set in the .env for face embedding and is same as the Seafile server

      +
    6. +
    7. +

      Restart Seafile server

      +
      docker compose down
      +docker compose up -d
      +
      +
    8. +
    +

    Persistent volume and model management

    +

    By default, the persistent volume is /opt/face_embedding. It will consist of two subdirectories:

    + +

    Customizing model serving access keys

    +

    By default, the access key used by the face embedding is the same as that used by the Seafile server, which is JWT_PRIVATE_KEY. At some point, this will have to be modified for security reasons. If you need to customize the access key for the face embedding, you can do the following steps:

    +
      +
    1. +

      Modify .env file for both face embedding and Seafile AI:

      +
      FACE_EMBEDDING_SERVICE_KEY=<your customizing access keys>
      +
      +
    2. +
    3. +

      Restart Seafile server

      +
      docker compose down
      +docker compose up -d
      +
      +
    4. +
    diff --git a/13.0/extension/setup_seadoc/index.html b/13.0/extension/setup_seadoc/index.html index d7e9da3d..14b1a1d0 100644 --- a/13.0/extension/setup_seadoc/index.html +++ b/13.0/extension/setup_seadoc/index.html @@ -2375,7 +2375,7 @@
  • - + diff --git a/13.0/extension/thumbnail-server/index.html b/13.0/extension/thumbnail-server/index.html index b15f291e..6fed36a4 100644 --- a/13.0/extension/thumbnail-server/index.html +++ b/13.0/extension/thumbnail-server/index.html @@ -2324,7 +2324,7 @@
  • - + diff --git a/13.0/extension/virus_scan/index.html b/13.0/extension/virus_scan/index.html index 21c60259..2f8c8bed 100644 --- a/13.0/extension/virus_scan/index.html +++ b/13.0/extension/virus_scan/index.html @@ -2253,7 +2253,7 @@
  • - + diff --git a/13.0/extension/virus_scan_with_clamav/index.html b/13.0/extension/virus_scan_with_clamav/index.html index d73465a6..e4af70ce 100644 --- a/13.0/extension/virus_scan_with_clamav/index.html +++ b/13.0/extension/virus_scan_with_clamav/index.html @@ -2253,7 +2253,7 @@
  • - + diff --git a/13.0/extension/virus_scan_with_kav4fs/index.html b/13.0/extension/virus_scan_with_kav4fs/index.html index 372c3b32..ad100003 100644 --- a/13.0/extension/virus_scan_with_kav4fs/index.html +++ b/13.0/extension/virus_scan_with_kav4fs/index.html @@ -2253,7 +2253,7 @@
  • - + diff --git a/13.0/extension/webdav/index.html b/13.0/extension/webdav/index.html index 33bb0c5f..75b4607f 100644 --- a/13.0/extension/webdav/index.html +++ b/13.0/extension/webdav/index.html @@ -2375,7 +2375,7 @@
  • - + diff --git a/13.0/images/face-embedding.png b/13.0/images/face-embedding.png new file mode 100644 index 0000000000000000000000000000000000000000..cacf32da2e7c1dc74377dd45eff8e9f353f928f1 GIT binary patch literal 88085 zcmeFZbySqy7e7jeNGXDXgdiZTbPgbmbT@)@4c!AGqI7q6cXue#-QC?i3`6{e*SCJ} z)wS-Q_pbFF*33NfJZGQSXP>?I*`Iyzlamp{d_edB4h{}eLR?q@4i0$*4i4!#8Vc+V zBy{%>4(=hqR7glpLP&^A&K787YGDWmC+-)eimImAji0O;9x7mx_71%Xot*7sB#s8$ zwn!;%I9%H2r)ac}2J&rH0mv3x`M&z7?VrdU@!P(D%2Lw{1CSd|sF3aFRhu~$Ih<~x zgK>9>TuvJcJaD;5YreuxL0}BoGTCElz7NwnbwR1FvmT7lRoo$;lQzRw>Q_- zx$ycbzNq$MC-=>|3alixXTHsjV=wGpHhA~}qGcdLBNxilvn+MTKYHBq&MMfT>+6$3 z+PIY=we3W`1uLUXpLb;s+CkqcyI%RSy|^V?>fU=HN)s18gjC08*41y^mIzPmo8+9> zYVC{p0t%s{h2-HIc2EmSc}=Cug+4_uqiqj{Oxr9!NO&U>SJ?G}sO+T* zVGDA5nY*6&M=er1DFW0^+Pz-e)2|x=mIHXD6i+S%1dZHtdHL1oVkiPg2atD{FyhdK zxUa8maE0uaj}g7s>^hT=eb8+lBw?q2`ltp`OC;~{Q<+*dx=zHQ0iu+dd*~(V(CZ9h(>zMa2~7Dn5NbZfTRFoW zAdaUo7kd-Iq0T+I(p&Kusvt5@_pi-TPrJ*!sd;vN#ER!=K+P;UK?#kp^dQMI%h_Qs zB=0{DfrNF&vnK*4tOo~g)%gulP-l-)7|ML61oxghK4|zz{GAYv*t~b54)te zvwWOwjX?!pmVFHO`upNgM3fQpV%|jF5Rc7o@$gfJ@HKZ~hl!Yo9^8@e zoSvWQa0z<2v|L}b)_f+MGrekk8jDE8Nou@=)#$~KhM-6GpxxWxHM(dD`efZxDP)#5 zUbzQ7ZOo;Fg{TRwDy5J2;86t-IZvYH9TARZDFey*r7UW zY$xbH;sg-#@chGo9ls;Q9#@ zr?U+s9{e!S$G1VTd1HfU!*u+zEaK9aQ-D0|Oyc4tsREv#5G`3$_(YgvM7)HmIA12V zWRE13zs5Qfzy5tQ=T)16mT!`xY+~ekiZl#7( z)fC-d9Y@ml@b+j(60bj8XIu{|FE5WP&#?_G7jP*)(O3udY(|m3@>CjDDpSf$Q>`KAY>AP| zk%uE|rqL!=-!H>`ru2j{>?zejj$bA+M8?V|^vw-Tqs;e*%_esyC&nDdWyX@T zwevt)4VtKV&S$NGcNqF2TU|#J}LaZyeD&djY~UWAaiqQazu0cCi_cv zTK1z+hV1?9l>Wm0M}7YN7xD8fIk7B#qy4IJHL+mLShc{aSW|g(o7r%S?$W+Wtq(2( zCrwdR%HiV(1t6qMHQT+^%iI)S?%D~{#-hcN`ug^(##hu}?qJ;DAHkTxOk(PRlFzE#$Li!4 z6Xz0b6RWxApA~U&Ti73OWe=Am?I+d^L=8-8(tFOoM>~@FW6_)1vzLg zO{`pu&wtn6)7f0u)mskRkzXJFF{Cfdg3mJG_J|jechi~V^m=RkKzYfbb(aZ$s_G7nK?{rspB8?Y`9a*W?%`ZOMo!9 z(g-}a=3L_I4PXm!V8+3Ch)$1Tfj#n25>12Do_~s-lcJWrmcO0BK(wn{?yZUQ*2xfK zHEu$0u^#xV%jfia9otW&6^g zsyne8RS`W;BCkQA#X6mHJkg8QQA1gSKjw$_cTn5uX3@&|3FwmUQg#$HqMFIyd(^EK zH=M8?qaHR*{T_V+L&wm^$g;;Zg*d8-!tFIRjWMuT!OH9aH!b_M=2X0KA_qf>q5%`_ z69?Jj_;Odt7EY~3KGN=#*hRHeWY4wPm+axXFR>qhFz7J&rKA&Gt>Zgbmn*Bc9Y+bI zJvH#O&SoFFqd1B7N{z;y8UbQ|Bvu)+GxJzF_C7!5qO^0}_|iAe6~fHqws81E<_Des z;(%=YqLRK6bIsZ?(~Fj|==^B^cMbT?OjDIOy06rxn!5~#>qQoOoDB(jlX~cSTIe?z zn=f~_bSH1QYhQvSpbFqDq8Qv5^q6_IgBthE2SHCn=tzp5HbP^8){Q}5W1e0|Go0N;ko$D+12fr zzApzIYaIg=dSV*!jR{z!4!rfNvD;-mt23Q3$*GC2xZX@@jqzG5*q0wFb>xXLL}(r) zk~m#ym`j;Mkj6pC2ZBb%=XG7RQ`X%#3ZMkd+2zG~5B|A>1s%`n zRof3=jl~oGbuCQnMFB}`3NIh{bQ}^}ezVn3ChUoAPcwT4atf8Mv{7{U@VH-?L zA>PG2*mnlpx(s3r2MmI;Jk74v&qp@a(^{_Y%yvm97f&Ux&5q7jIIe(>jSiq$W*k22 zJMDvp!NXp_mgf{C?D%*tCsS6IU-sthRry81{$w_AdGP>i0}IQaQ$Ki570&yKv@Gh< zITl=QH{8$?B#>Fh<2K@nu!m99i=&j%>%doZ2XJF;ci>pSrPC;KYqRCiCGz<=6&#K< zGTFl8R7S?{4qJs(JgSlyxXFm@6)oB8*qRgaqtc@q?|Q zp_QEp(B9j3YZG<@-CA7T4h{~V^8O7kq44qu4h~`7R7uTVO1}i&?pOySokFcTL2U}BXdsCnl*?qlw`alPJK63K=hW>v2?5Cl#=|3%5 z+5I^z*Z`UCpD?{)e9iPLGJ8{_-;muu`APQ2xPCUrdtVv1vYnx=5YW=n(8?b0565}` zXzBlY_)kB763Ur68(OFdo5CpVU}FNjVSCN~C)s}={gPDuU!%`1id(%kwhb3&6hw;-|FzaTg|TfCs!xe~T{Q!4|(W2OOLLoP@BTk~93?JnDPA z@rl;sh~%Lx?~nF!{-0Pylmxb45ewrX;R^3H@wy4_k>h7h2}F|nlZz|LBjM8dKNt}a zFinfNIEZ^45y$Yt%Oc$8?xxw$_@HmD4w?Wuv>ce@;vnzGOC$RThk*9$4*_u`a-k90 zAoAZA`A8{1mdu3kyBgpSUf_}8kiON57lngI!V&n@$43F)#os-Hm4Ew6fDG`tmNn?N z-GuXUZbtmg5MV@~mpCgUtiK;6(h3CY*F3!M zHO^ajgyR?OS*E|?0IU(T_EX|ta_0|@k$px$S`qSnH~RZg;`naz{C=7Q(2&vEzv9GX ztsU)S+) zA&Fvt-G~Ag<%Ka`aKhVm&_+qojy!j zwQ>t?hkSIoy7l&^b-Tq4neW>^>3zpbQstADkO~np?^b^z8p3*S3>f;fH=3bh$KIe3WxYbfXfT<9)cwe7@qn8akSJMWa++1{O_eFSf_GjJR9US*@BEzsvL;6xE78@}s5E&IfX{H^ z{v5Nz+%>+SxSsZ1+hrV!aZe|y=bovMYCH#!k?lLZ_kAC!n|Qe1<1{OFVkwm95Ys4^ zXIe~^%HxC1tLX1;QL#_9VszQscB2(qbogXJwT1S(wt4n-nHA&ntKDDm7*k?Aer+yW zyJ@T;>oJ<7a~w}w>`h%C9A+S|=13<{rGPHtNRv@6_p5K%H&*?%u-ijiK#5<49`A$@ zpZc?!&UGpBU)P%(p12+Mg24Q1d7j2A4a~N}&L}JA-Z&q@S~4oXwp~j|ctd9_H&^Es z0Ch+2;|OY5{G`P38WWrat5GLS58c6Wf$QS=21DotF-b%(^x_!f+b))C8sqM$CcbBd zun~y6lWSwvaFMIm3t#1~N)&KoUtOr#B6xcX1=1+xhAQP+=Z_U=ip|sjsgWN&y2eW2 z@btPq9mJn58=d8tKh6l@57YJ3G$mF{7e?P6YAz~NJ1)4ke%aEL9cL2*>?2M>Kz^X6 zeD%!re2=lLtSme}-pq<#3O6Zpg3)qD>!qPqU7*n*q;D`l`t=PO0C$doYb zO97x;TP7^(2c+c|)3%$9l<%TLFZO4+cMp)8zO-DIf8*ZZSS=ry3Y04{Q!XH7lS&yV z)RkRXU7i108u)9wMxFN&Wq=K3n@A0tof)8p(`?uqJ(44vQmPy%&O%w^dN&!*Hj=GP zJ-AH*x`d}&I>@sxDpYS!X}&(8%MleD0`Cp?tJe@X?oGXLnsX?jzrMz3=sDC5X@U;S zUJp#>96l-EYX}smT=Wv7%~vX>KLsREX6U%8Cwm@ey>D>YiDA@vNjN1VDH%TFFmPt! z2JJsyNiIDPFXrPlbvtOhQ89;R&AYk=+m+0@ub$iP51GHDrR~wSWT2)x2%9}@oJCqD zxU?Mg-x)9HR+I%;AurEIj7=0PD+1!Uz8}USWAMi$Sk=w5tdv>i}`|nlOSAQy6ix^ioPhW&TH*eHfd{c(F zC~Vh*NLpl^R=H3$)zWd^mF24G@W~B~heeLctxidS%8K*XRYpZ~PJ`O;;BMI{A`Z)N zFYm7gGg+HDPbn$iMMVOd8rxinMHXuoqm0(BQUpVEo35C)oz?}mhnviYKzo?7{HKYH zCo{VjWzxD@ZNZ@%w4-&xIVja6=ANpUF8+1S750y#c zme?HFKDD~Ce3;?iHMeIjB^8)BT9~&P$sdo$q+Nd=E^7ob8_C`~w&?Bg&vvcbj-Ew8 zS>By2po5L**xcwF5zsH&tL$AExzGL&sl@<%Iy1`<*)G?esIAx!Et7Ay=fT$s5Tu=@ zRoTGECO5DvJ0JL4Kpe{Qe$x3ydjhcOLkWueBr9*TpfjjmVD#W&V}8q6p52#48;TT< ziIU(4zcyZ+F37A;J-4%BuHfl)8aZK#?OhBbwJ?qj|52Hk-%V|~%5eU=&q+|X!vUlD zWKjf>RsDEAcL}6!q;y&RUdNf*I||Wgah{SvBJ)Pqj3X-MwCf$3#sZyNH2v`z^p#6A zsx%l|Y(G-xg6_Prdqs*g)ggWzjaTJWi_r|4nGi_PoOE|&_hV^KLgyV6Y{FMpBer_G z?BzDARK`%^nt5`e;<_1i{sm-AXMRX~hV1}Xe`aa7Q_D4!bZtWu2%d8udS6dCWomVX z?p3oGx8}4XNM*8+r-+)TT@YP(eS;0Tj8JFx_?F-Sg{br;aV#n-rwiLatgn=4RErB0 zOH9pCu%B%d?si?0dS0mya96-I`)|xe;v51ow|%K-t85B@PtiA-&#gy`6cL7NHYt6*)NjZX%M=sIqXm3eEqN>C5OHOaW{Xl6@6TNTGEO+UEog?;6P z?z~KY+!2i1-)2RS#OkD&OQHJ?6{s?q&euD%S}tqE737)X(J(VBkTl)_wmq{r zLZ3gB6SLeE-(}zD>E7tSb9S7qcPKD1BXSxJ+wnrUhzG2HI@PRoiW+RW9H~fNRAH?O z=0O935BI)ciil-3^e!gcI;ynjTnAMYVsPi*dV&}B^D0zXRhxmD7wpg`jjH^M^mBmQ zfEMI^hnNb^VpE#-EW52pOY=a1Q9t29KmG5v7ttR({8m?15X@kXA95k~W{(yrZi$+| z`yB|}W!U7_-R?x)TPSPnHqwEFFfKo>T@Q}zj#zM{0?uze0L*swU0P?;>)tjs?YP{n z^ok^(_a|_;O`Oj5#KmPg3`?IH=D)!pw!~OlDafie2I= zh+yDCqCaC6*s#jzvXmy)_qmWj@;eGdcZ< z3my+UAq;G}TnU&T*K10o_Hx#gQta5;at0N_41>qbIS1V&?eWQ>BjBgwyWKj~Ug|A;n)i4RG)^tuUvEp2gU8HSl2n z;$$pOk#hPWz-qC%N&CsfVO?@ORcv(d(ZO6^#+>;{>>$)4+8y8-e6~G53IrQ2GQ=RF zVriU1!H3}4)cEd<{hwX=O2`M+@PGU>ul_~Rr-AX?7Tgd)^t7ss3Tb3%ZR^(vAJye>Gz2`3J{XtL_Z8~b~TyJyECbXV`oh<>gi%D1Q?R?B8M{>qD zYWO|T40JaoThupKI#flom0+aRmb=@pA56nP{916AkZ^{c?zQ_pHXKeD@kr_5Kr7)f z5df&YUcg%WYW^CaYS*5k-jYmu*>vY70CTyPRZE`4D;SQwV}e>1C}fo@=VVkkJd$^E zIa(H5?@YN?EHcr7BsW1NZ%~4YCgU&@x?qmK1F6}klUp#QJ)Wl#<;-Sm-RXvLwOg?T zPl=12`HB*_+rIKj#B#Rxj>K78Ia#mz5t;mKU8@gXmG0Eg$kcT`biTYUpv9e1FYz*hn$sSo`Fz%MOiS zut0^O2(FB$YVEv>Sl&LXJtD5}C6EVbcu8PFXa zv^x;nn0vS0di|pybL!obk=o&DgJ>&ofrK~y#+B6vlQ0_#vXe|rgc%N*7)&A# z$zBYm&~mEHI+<6yjN?-E1WvErV9uJYd;-=;ogFIIkF}b^(E{V4#Pb73TU&LYT%hx{ z{4-vI*c^3-l(Pf3WNvL5`E=(YtwUrC{77~J-IpnGXDp5``t6DnF-<>Q`m;pOcc}RK zRa|!WorF`Itz%Fy2W(5qf9HMswQ2&JU~WA9F|@Kjo-G0%5k)Oy@rIowZ|ME?Qk%Eo z_2qH7MI1*_HD7(RZi`17)?mze9icDNdxbXMlOaTAi_0LAhr|wi8|OC3^#XK+uSo!V z8iUza=R4g;yTws4QmONdGs%Z0PHqV|9`mJX3RRL%+{RreG2HKW@%@huKf}cfY3nM} zs$O8UPjX~jJFF-;4YytgWQ>TNIGIe!ARu4PL%-_RDfeQmAB&MjyB##}k8ZGaEmTT; za9Jy({&e63vwg_|jR%}7-8n_7rQWO`Jt2lM$g@&>zcJ>i2z08&kv{^OydBRoj4087 z5yGOPJ*{4dMdJc(msHa6;xJb1&!6776=!G52US}#MjI!)GS9w-d7)tvz!sXEWQ~Qx zDWWgfk1-34tF+jbBOCN6)%JhBSC!AI`JC%?yf4G8ra}2t?`0<~m>|{DCMdZ6>~*XZCp4(i{(C zTnlxYbTo-<+Y6X_oa7~6%z3>>drXa0BL>$#rdYE_=4vr7X zQ`;^Dy;1ylo|a5=?!?y`b4H;>OaWwBW=Xm2#XT;U#Uj3fBG^pLCC&2NJAcHz2ck!K zHpVB~bZiTHZ?vU8ehlu~@MP~TPHM2v*EYukL2TCxQ|(GWd>YTm%C*r9X2sHeO?}o(H+t-lcZJ5e8XdDz;#gaXtIaverk$mSJj5-SGuO)>;f0Vvw-AP zkSc5={b9Xhu?E`gwdD42_ty@OwJq99Dyp8EMGy1-l<9Pl0EXcW}_f=+n5)#{P$HU!D97dln(}pn>BBn&YBB#tGP?+qC}gH3bm{~0xXC- z2Yx+lSY)gX*_PkS<*2!o5*3*+XLacvMeRmQEA5t?T}bLV=1jSB|=(`O0VO zOQ|#5UvFe_(5PWUS+=j*qWevw9|fk+L*uFT7@raU7M}TkRS66lXm}_3_17{Fi|2lm zfI%>v+6-6zzg7(}h{O>#gWnIrhxLB#Rtdm)SwDgyNiwPd&A*PX!D{}T1OsYH8w~89 z{)Qt0WQj1O zgbYUorjxM?dPR(Xuh^u?$onI$cUf;l{(!B>S}>+$6P0Oo$y=PFZeRQtEfMfVeu_(~ z|33bAAQuj29So>VnVU?J4f%gC_)nFEqkoSkqh!1MR#Qf3eiXRw2Hil;eyinP;KP*Z z|2pz7!}tQ<7t039`WM?pmlmVhZ2myYIpL8d8Lm%}u9e(h{>^i*MEv){?lJ)*B>$@8 zKkR0NO%&rp{NG9sPM0aH1Q&y(+kXiE^|Kacuo_;g3I7Ha#StLOL5?kC%Mmff{=?{b z(LZ?Iri-68g$euFMU5cUm?X=HH2*j3|4r^A?y;Wp@D}s$`YmvY2D9fW<|4Ac?KrFw z0r#gmto6Uyn!)Tj;NG5ZY78s>&9VR3WUtrvnIT^Yf*5}n^F#X_0<-5wbt-3g|DpZ+ zC)vaMyoP0wjNX5-?Eg;0Sf+s4bNAvWd_Py{FZhTi1e=BbkFdlS>pNi7@K2thWeN1? zN$@nPj)Y%GXq*V*Rxr{?ghxjc_EZ?v?fas!1e4KrH0o25bL)`nKado*cwx@h8&pd1 z-5{ zc*v#VOXjp%@t6EI^mw;||2OBl2oSEL;+Yr`lYWX8SqM^}33v>o*-yt8n`@>-6S$z4nS@p~qUFcDe_rDMWJ>W!|g$=g9F`)&qd{!}sUULT=ye*e+E z0=f5MrV)Gbb47HCA(&EOyZ013z`I2niH1@GuQb9rm{{sooRH_Jb(P|Y5V-v;{3Y@t z%Fm4@n3Mc{nW%=>iQd`!Y&_B%8L17(E|7p6I{DG6sFSmL@*@8&&Oce~r3F*YDZNXH zSbse5YJ4O@54(d|I6Y9zuZ&@ug^U0*xAivf_Ljn~FK`?3FzCw&(lNAa;CL z++hXypN>iJ{|iU|XP$I0Ot=Yo;PwxCmvyN(6XcH^;Q;;gnPx|P*{SVYT^F{PFS898 z{Ag|Sg*%>9*QdCegk-+FWstbLc_DFkO(sEgL=sjhOV0KRh`J`d6aT$MDspU|=w-DG zDY&zmo}4^GLUC1I55`m(Rz5M+O%IGBXXXyvX0hM7$Sm+V_0FV9IT_?SZ!<4>Iz%2=v*>S&&(0C_Y4ZDBCK8jjSs%+b}BQO&ft6S6N? zaO&m|bS8#a-7-;*xBK_KzC@4)hQ2k{J~%L|jsf3t%3m;npKtiVgjTX`qELOCxJjz|6+ScGGra$OeniTNq9I@*RgU5w*}}O%$jb}AJWA@s`#d@5VSPYde)0|vqyj~xM+u~ zTrW9&+S;k2Jh+~Cq}-e?j88*Lb7vV58MM20%0svA)fc%AIzZfAoX~ zn!hvzYfwKeL6OhekrdYIK=LtrqMn%!+IrJ8n9w3HQKXwv^kLB4qj;=X#4OPwt<0_( z8H2y;|FlH(D0Y8FRGB$uqmOLnQmugZ2pTz`o*sheOKb{`e7m6r@KM ziyRv+ejt~07X@D;29l?Lt3t0;JTkFs8w6Xr2M%|qWY1z9_b)G0%l`adGS)8snUScG!0#+^O_%v#zt#5K7h7*qh2tbVS zJK1t+Z@DHo2)O}XnTx98J2Hp;lbnxz2W9+#^Mb6DK@FLO+6==v$_}b!|9GO-iTA<4 z$D!ZY|7v^-w0Ub!Ui z2WK6qF_@w{O&7SF9FSn9JW`hPA8TTrgr;rI-JG8q3Ez5{E4lA@X{WP?{V3o8$v60Z zJ{u#FF(jei%8ZZibnB0=vi0w7)9yvO=#3n>GP#M2#Dm;~@UN$M-j>;VtCr|!n@!|0 zzIpRT{g$;r^^WpBlP0ObQ6ev#GV8=NDpUW*hm;|98XAde80d(a3BUZ!XVm-K?Cp)} zedL+TdMTBaAN-s~IX_dE6oxJ8^G!adcl0^Ym}# zzPCM{>{AhN*{!xLpV;}Xvig*6y(g+l3Im^hYjW}Z6C!qtNZ6`V2Mw*7$L{LqxDH?M z!ScE^zUF($PGz{mhgcRmTz}6XG zXHp+s-t6d|ogtBM)G&mx{5A!Xk1@ZJt79!NhBcyPS6t#|aJE=`kmu*}hRtwm83v9o zzavlZ&#fETB6=pJi`e&^J+-J!kbTIPki4CKk;H_g0InjRmnCugf&QvQvSbTW>xN`H z-izQlr-`Yt&TvnyQJlI!>#r{L1_*&Nt{k2S+3cveUYTa^*+>LsfWh0CE_q}uT)h8u|$?1+6YUaYt5@5U_El*W#Ev6I$G}Me>}W$(Rt1`gH)(` zX*tPmRc}*kzcbYaOwc}tl6rR84Te0JLY?32p<{&QjMV~0Q!8~Q#Yo)VHeb1x%@>|p zk@6euskxk2m8smss*1haRbfa1pJZw487~HG~8Bch#sXf%AQKZup-xtp% zbPI0%ezE{n+|y2Ux=H4}IzmKR3li_~oPAE9?MtuIQ;{4M70KWU%eirtQu@)O&J_vz z$LA=25!$r;XxfA`(P>;>@bQ9k@AajpxW|p9A*UzaRq*{*!a5u_`J`v=D`V}L$>(!A z!(@#{hO&I&q<~`g?{f#A>;QZ<8@ZFsCMgPzZkF!*iHLT3dRKwiS+I;Xc<&=uS7OS$ zz6z!;7<4`Kpcd*V;T=1v^K()wQ#1C2O?0 zGwN2T+dH8%jCl4YX+Aw8aX+1+@v9ck+~dzRHPeRyE$Za^+&Yg~;fmp}mpSI>2~Dt7 zbYSrBxeEgF^7&KC)s6&UM3^i;(U1}l&VFx>&4jcvsAeJAgo<$DO0jWTR^h(>jTohQgT~@;o6wi; z2#OS}DSk`Qk{@gv9p7?ebS})t`$(4aMiU6UJ{{FZ=zw8KNIbH*&RD$NDl3c@6h1(= zR+lGR4kFda;i`AbPEz*cgdPq`|LpdkrwB}i_)hYN!+aYcjn+tAL?mNWl{^_8>}2`7 z=9>xbV)Y2BWQp+w5SZ^i_1Szjad4xDLl_aW+!2;J z{mf_$vMlt~zzdzb`DWmyc>@a7y{BbwvN$oVOOWikp&r+=WS1i&R5OczIaRRnD-nQd)0g3ucQ*BKE)u*k=immIu#|4TL^*O zO-hAR*w;P)sTAliw?%t*B9CIVv)PC^rww%TT;o1V&Ah#lF@{N1X0cr94EiCYeiD(9 zv&H9Jy+A3Co=|9T=m8uAd<@D&{8N1G@V+ar!(yT z;u;r(W6vV>UH7Lqs}grhv_`g- z8^XiG7v{GbAJ`mvXmZpb%y#M8Ge2u>eIzb%B9KWuv#&mQ{sgux5so)ViGxTK_r|mi zKY`xz)$ox67#QAOTe$D-t-ie}&RAy4%@sjh0=951^n_WafZZPt6{=L_^IjfhsEpV2 zM#GxFI!n&ZEbFZjLg}@vS+FS4I85Ski1fHA3D0^LqrMxlkhGWid{}GQX#rGH;R!>q z*L*gU9c@d^2}9v;N+Od%R~l{dn4y5Pt`8@DiWG?-${VbsB~q9NGSkt|pk|++$y>Ua z;COUYg887BTb@31j-B(&tKUNkN6lW}_WGPAww}JQJ6*ZpIkc%CgJqVS3}`;)6|`-F zhox3OacRpe8fLcoMr7-<2pBN-*z*e<%x+tf1;j6R>n=8Fs&0>0G(^mZC_?UcSp}HT zcBVkr?m9@C!(sDjw!??^g<`Lp0#t2E?FO(TprnbR!f6o?u$eq670kCveS`-Lx~FuW_z^W9;*6iP>hvz}QKeh}B{X$5?yNu1P{- z^e(?3Dd81({w_7j|JBqS@(y7C#);4F@s^YPX&?WU^VNBrMW5`2K%=*NAO>_HiLBea ziKb6~!0crhWjTB8_EXtjy+60)A6q48-gkJ*yCa`rzqvUsF+3Vad5jZym6&z*e~V(=`?sDjc7&etIvWI#*w(GA|2u_zPZMEvZ9d?le&NEl)Dg` zov5PEAV0-|%5?NG^h0bhOXl!u7mrGHHToe@=bF^CIuu^~3dUGFf9&1mN5_ zrleWJf=S~LhNq9IPY$1OEZTclSTSw2XH$^8!(KC=Ujt`%Er0)7)E`ebM^aT35eqn9 zTa^)*0q9WgJqKSET;xANa*{pTw&+^`s$1|%(s z=v_FdUryst+Doq+$?<&sU5AZ>A^8kxc^}i&dp&BHX{JC7)M9i*CQAZ>esp!%jnBbg ztW-@(tyjcd@sS0<{u9G;`b3ez7MpjHgPS0AIB2=fIB{|6DoL}P^=4bijT8)xkmcQg zbz}BQXJR%!Rb}#=d)MiUtpx%!r;!0QTl(zzbNSR%yyja*Sz=f)<}bj8ivs6@V#V%D z+pNFL+iK_GP1~a-!TU20P88;UmI}4>I+H)12GDn6zqWCv!%11iY#M5+PF<-E8g6vhe4CDvnPkuB`O@C}(taY5x{WaN4A;Y)5qeG(sbo(P_ z;J|WLi~jidc%a@b?OR@sMw@{f`DBX6)wJaJ$^tcAFZbK|8<)AxTEvPg`&QE&Wm}+Q zbk!k&mUVN)j)5O+^<>&mm^bk7`3Gw;!F+YQL^nY(eNWa8@pUi443s;6WVzAb8s$|a z$S@L`oG7||1%O<+O!ZhpTkJMvhN(#$gzKR^LuEodP@EPg%&iy(&5ruCrJCWKbUkkr z0Nb;Is{WUa7nq-6xwFO=T|QZLcAGrLb#q8P=N+=C=^Uce#!?>wCqdQogV}WaA0(! zKBDA)ahhtEdzG~*!vZQ5{l3dTY?G{*r!9kr$!_+Vy+WZ{D(+)~!{@^gs@A49BwMFL znMgi2u(-bd72OhiwgUBbWdO=67COhH`KG}ym_$kAV5y!Kyvg?bfiDyojyO81HI}m* z4P5VbD1LM|~p{!u9=jIGZT z`QKdxd8&_GP+jeZTAKp>T5>aV`JVh+xM6Ygj~M`&!VL3Dlh=T$T!#5#&zE<{n+hE6b(<5}Tw{X2QZi$ahiTTO_)xXO-Fv zVio8UDCd84>II&!{~Ir`&;UC5ioc`=3F=DHK&+2eIo6^ibowuu_e?v7YB7Y?Xn=itG28M@sHL_AIhJtH2?Jcbvu z>-?uYo!aFyG5fPD2#W`)*TYs)wS$ICyFiA9G2Wga%z0UAzACY0nD;ZvJqFU2VUZ<& zUSz^}T^NagjxOlb+sC#g$W_{Qqh7@Y0QsT&IC{yiX;}9h{miE)fJFbE0BRiGm3X^Nw1#MpTSK3-Er+=A z!-M(yt}fgVDCo<55_Q8NB*hpnzA0iu6*MFD-m%_Ac#2WztM*~HZvOd|*eryBsobfI zije1A>5z2DZnHl|egj({jK&IuBevl%I2t!XsA>&K!zOV}I-NSGS#+l?338d261~U< z)v~?ag(ckfR87t=?Qyt{osJY+5*d>&`q->eb7qX9=#1+gG(lzlI*Qr#&MQ|lH$S<6cT)~z&k{A5H~O9L`r0#?%9b%2Rpiz6P41S z@1xl7yPg==1(>R<1XMIz%$?O3W=6!$(Ia3?{xLnd^ef z6w9~Pavas`PO#nHY(Y~ziyzc8v;dEq;6u%lbB~JbJW-OKPcc@MihxV?M0zGIup5ISKq)-3=$3-auAzo7Foab! z;)(WO{|f*XcZ-pTL(#T_o=rf`=4Md$1MsVC2&#Gm((g2ZsLO+<6G~QZB8to;BR?Yn zJ@dzTzn8c*Lkl%)bn;aPdD(n{6j|?#Ga*BMLbFqoxdN?Y zk0W~7W((al9?N0gSD+I2r*h*t?0oV5(*dfHOw`SxOlai|^qSD0UPI~u)>A5*q8W%~ z2EyN%7a1!8SHwd$R#0zDkr^R@6Hc@2VKVdijgw*9-1NyeJ6Tw)fPnkP19s?QZ7A*R z3=SO6|FSa#ByCme5nFLnSTRt!Q>mkyrS0kN!Mv*|i=!jvwp~`A68si8O#VT?z$eA? z#UKFuY1AqenJ3j#=hO~%+VqPi2l|(XBnJC4X`qe|x$!AVcWMunREjkAdErw-Vx}Ff?PD2PGuwgK2aCnGS@ULCCUyKfl9@;#Gq4` zGhC=&tOf5lCS}AFOWzAVJDurOS>lxY$fw4!GuDkZWM1Fc*Hf(BAbc7-%hm6o3pRl% z49&RdQ!YpxepH;K)P* z@%cI-M}F&sJtADjU{=~Nf8R#GE*ZD&9F|4{X&cOR+;7S3 z8k?+#ctt_rCh%;5$`EKSRyC>9{rssk#wl#GzxG3(NfRpVyvhJOsaN3gndkDQPMhc! z?11ka;myVLoQsO4F5?yLQtl;}SoN+9$o0IE8hPD$Pz zn@P-D?Y@xQ5p4JaX=zmKyO^5bQP&!%+y!D!r0y9@xVv!Y;I`HA6k0Rj0w-q6*j-g7%V@bx z#GNN`gFh{>UarUJ7Sa;Wy}v`L&;38_y@gX8ZPzE95C|6BLeSvu?gV#&y99T4CrFS$ zf`wp%ySqcs0KsK&X9joIZSu&y_3pR-z*k#Ep+)yh_v!08=ltZT%f-hq3myvsHOP*S zwu43Loo5^3#7SKFvna0QHV1z)H|D3b21vFtN@%Ol3WmA8uugx=s{x+RG7mM5Mz685 z<{@(EPDhE!I`mKzAf@j(TUl7NFl`_8z?1k-ss6yD|872^(^AS#eqEwjVqIarqaW~8 zoQONTSMf@CeSQ5tW|}uPKj1h^b>*}RIn4~$S#tIGO3v))ELLv!@cag8v8*rMCkVUI zxllZje_DU|AF_xD6JnZj&^1tB({9=xzG#1d2i@hS{J0oK+~~=;E;SuEmr7W=Bec_2 z9iGi80Yn_+qrztiSRo!H{Jyhwr;|z@JXj&ax2}qv!W?VCuBRl*ayW9VkntzLhmCrc)G8-J{&O?qP>Uz@`S8Hyc;WmNPBbDL{f#6`_yw~kW zPuL6c6tpPiZMYOw4eWo5%zrS?9 z%Yrcp zli#iQyR=R+qYP>m>CJgXDnWPtDin2UztqGs6&4YNQ~>QsoDi_LLftc{_>;}8xjd5i zX>LC@FU2PAV;P9+;guJl`);;O%vfsU{s9Q@mZirEQ0f-F@6u1F*heFmug9tZnsfTu z9<)B-PMg5xhJ-&aCPM=>)>!CPVtXMHfH&XKec^Mzy+OYDJ)HQsHVdQ#rK}b%Fd%Q! zNJzutVc8Izy9&e4b=llOZP_ZEESAo)u}?~FwwP0I{fDEo8Pti0^JNsJgZ+;*Z3`e4 zsRmMe{S;2SPnz0Cw>)0vO{{|a@LJrJF@8T4~$HOfKT=O1q% zBOWp$ft=QWHgxBSYQ+Ui zG_q}jlFSTrnlD^+zwSjepzb;_`M@?3=P1$dy1C#T^aI)C5G3Hy39=4A z7$x%FSAtjeGfvZg5Y9g`=Lv6Z&n3&zd;1fmS4gOC`95{WW-H;QS!GBfoS)}AGysyk zVQvHF(KeRB`CQOP5ZN>}BApt~G(OMzBWeucNix*@yF+TJg%YV%FB%oXQzSQnL;GjA zTRloR@AFAv!fG(7&;J%Qjn6^TVLz)}WCgRKP3t0*YV#13nCQ23_lzuAsGpS>`1ih` zhqna4hAlu%n*066q!JJ-jR^HuS9+b9Ls?MHEi@L%ceqjps)7@DA!sLmA|H)QitLts z_lRt`SI#*OYdHj4JVr}t>;LjDH>*TUKRC%KEN-5YWgF2(luvz#<2GH~cH@F{1;5_l zL?^M6%z%KjteMJCUf39tZdrz+yNm3VDf2+JB5Wzupm~HN* zZr`>=HO@irZlvY#Wg(~VKuFN@$?s=A3;x&>61^ZOJx(GZ$5ID(C7ZmWzwNOY|E1wf z&Ca4r$^g(J`Sdj(jPj0U8gYIpzIFlLvKa4S7^gT}39J30kEh9eo5iB11$d-?IE;Va zuV`bNcTttN8h7Q&G4LE=4>o+YcYDfcUDC0!D4}{N?|p}Y&*S-JGF&369oO#$w@vhT ze^Tl8LiB3#7ygD}fWorp9wR>YqXKnh#e%E&^|P93B%RL_0ykmTqz@Q849P%qppO^e zl~PTI_(&FdVD*H|XMukQEHvl_`RapHQQu9WsZEt+-7Luu;J;K5tAXx>E1(NaTLC_4 z29b+bxjj?ebE3xo)zJSo3ECC_WS|+3AK2f~mI&`Y%~eybl9)*CeN$}bv>P-Xm&!Z% zD0mxwmJIIa4d4A;PYgNPG#U13GTY-SVD!jbDspAqrXg>!4B+VSZM|7L&?V!9aZbqg zk~Gq5xldbkVXXz`w$h5!#;GnhDO&XI0Hj z8Q0$ z&}1uP1?PQSUBhB8FDxZq?XWA1Tsm#6d>c4Yy0}~9!`Q9N5-Y9sxm6R*%qCwgQBO7Y z&-u#Djmr&k+vAI;Tj^x5w0oAh&X+WHRNuKe9w zZtvW0r>-{P;vwS?rui-Ohg{h?55sl(ZADotXl?dG?Yj2dN39;LO5O&7mVs#oE%mAv z%-aD{vy`_qD;OSz*<@{?Y5NUR@0Gh#_PAyjpFSxr|Ij1PWK!QS1iAk-B1GEJzW_EF zhUc4a`LlBJAk5c`eBOhb5!$Fddn85V8NTy;ha>#<@iyhe+vltBXVUJm20-_Esl}~| znBJX>SbI#b}XyxDlc)-uS1b2G@gS zIgXBeT$Ee*)Li)nYD!9(13vs4PR;V`ac^7Q1~+byCkDqccT&m zzrl&{)UDf1>9(MxLh)V}saHz-*LARk0aI0CtCdx@9C$eX{y2z9#M-*}*^cJ&XN0)i z4?4;`*~B-s3m^A5R$I*WaAo+?O!HnNCPA3A#O}}tS;$iwegn)F32Of`$K9flqbQ^P zkYXWT-Z|f-vT7SBQ$$Qe{Vk>?+x(xAijD=>xVav|2$gDa8Ct`3J@b}3yGbEi&R3Ki zU&@8khZ1PX`J7j{Ef0lQSe;@Cg?wj==>Y4a&H=fD2LJURDojA;;|4JfiA`7^b@Ee_EUQya52Nrv zLxn!Ao3{W{uQQFpFjIUC1YC6WW#7OCZVl^G&L8oz@0cDs$Pq=J<6frHo0GP_KZ-Qa1U;nb`RFxi`6pVZY9~$HGaYH31yZ5?$C&Dbq$_JjPB!il})!%zth_Y3+7M^Uf~ z-s3913lcLNIrE*ljxlE{KzQsq%lt<>y@~Zwvd3cM!}i8H-+)b|mzw71BcM{-zG^Io zAWS1x?BAyV_9n>QVMd~tN%>1vR1Nt_9xJJ24@@0@*M@$Hr3UH5`$y9`Eh|vLWp# zy@qj0xuqI>hX_*63&mz3U%MbYByCM8M1c!ZM%s3ec+mIQBl7r}cBlI)Lsk{py3>H# zKacbqQBZ=NuJ{C-bGL4PvvaRS0b_@sOEFPL*gv!_MFW7fHP?8V(xCn%?Y+I$Uz#J? zc3xeoQ#Y7vV@1bVtQp_I?T}RSPP;-~Q|R z_ZJR&bdnseMH3auWqF7<%}(IHHm{s}`E`%{yPxK#0|hek-xYU$-_l@dfw8%7=}L<% z{!nC`P@z{;G$tcNe3knKq=-7tzs);CA?4}};2CTkcu?_Pq%f-u<)!oM26^h+112m2z%+uU zhnN<(>38@~00%6Fz*HT&Q4vPCBw)3h^TqqNCd&7f<=Vsm(ZEzLD)06BRRJ zNzKRC2Q+=ONG`f+oIma*0r+@o#uQ6)j-us!tqfMvvm42j>X1)NohIPx#Z_b@nXHt? zq5X^==pT5Q8ql}6HK|!om(rT_e?@y6=rCVf^@eb4<-9ilwuP9)Ecl)KK+IR-$tG1P zCDL}lX2f0fUln}_;9!?;eC_9!50A8*Z$TOC%cjMw zLpwQ(lkzNr!>}9VJw5BOuxpdR7r`J;pMbr$XTl!iaFH_iMPDbSI`IJeHaR7U4Pqn$S$gpeAbFgOxY&XcHaeO zFuC@!jQQ~h?EyrRbLSeMG^(cg26}7}h|)Lb{)g`DOZJU5 zO#tLdv)G(2$WVA!;iDJ~^v@F)Bwn3RLCP__=n*Q8G)R{R&_T=O?8{36GUiFc!tZ>+SLf;v z+&SX7Ow8Xy2hG(gL;k0%h4`6R{_6bRckp75`*$wjp~Nkhq_gxao#*YBXOsMUr+7|a zIYfx8RO)gM7px7QAW>+AMW!4H<-e|JP%25Z>$6X0=D!ET>|1Cysg7CdoBmRPsP}PT z+8lNLLx%kKiM^-*@+75%o+)G%T=h;uRG9y7HRtFQZQJ%}cDpnOa8R1ZHHU(+IWSHNw7BtlHoN|Hh5n1%BanVGguSNc?9hu4 zIP3?~&U_3~EBG5629Gp8+U-;U-m+XLkwh_bohxqsRI~aiFiMH=NF|ARdp>WuE zfGb1ujTCSMNt(0)C&f`tQoj}0VY%)Eik{8^rp%Z2@zs)s|EF~jkN-0@*unEdt#Xly z1itg|Gai3|t-SFJp$(X;0; z=l}7a|KKwJ&vW?Md>WmotNy>%(QFvk4Q9jg_0@>~y-fd6#VKL~`6q}*Gj25Ke>`RX z{qY+!pdy0~4Sgv1&u#kuItt7Q^lItJx2TAHRXRCCJ0L+a6m^X zfqnq`_xAn*T1Y<$_E{Vhj!HB*(caE~u-vArqN?gw0yG^rSW)m=OZ_Du zj_@Cj2xL7GwgWP-u&}ywYR)nL9huGwq_}RSpY@=f1x#J0J z>S}CQj|p*JgA6ipA@V;XC@9Vn*vzcsIAn@Kuzy;qMLt3sKyGP1hrCxyJA$KUx}Z@X z3y@%XTZa$Gxrb*WWEB2dX+pK>G46s%HUX*7$snaI*}uV2H@u+vu!%{wm%tkYNZ{IP>2Pz*i3(; zyU$IfvEt^JXjUWv)GFDTQtiBer$<^`)lYu+4_7N@g9)_Nes}IQzk$k@x$Rsf@<2(} zVYcrpf!Xd<5ySuxRcOU=;ziK|9!1;Z)xiS5Q7QgcVVUz&wAD z##!T>&})_@0c3x@nKE5wF+)NMu$~`hKR;}c8DOdfn7r9K%M%JqR%=F9konK-^RhWS zeo%c{oU0g8pmcaMo{}rm^<$k1O_(m={v^EVh5zRP z>JGSKMceA(WTXG9%H62&Q}p$%XMHye#^`Ns5?~bg8?e!a!R49&c&SrA%pPcyJMj#C zjdj9#pYhVyH0!L~Rnj56ae(DjrhzYDzfFaDMuKb}iiCqS7>`MIdALMRt(1}Q=O_CR zvGV9Q9yWILS@;WypU3zKYW=SL!b2kGlAP@%x#S6r=4p^0~243Hr!-=wj zhb^B!vnOoUo5!a3X1-RByL)!0po^`i;5T@`r+XtQhulW5qC&bKj@QU9(_T~%@q1(( z&CUj3lD@=5AQO>LLXXS*!l+w6D|?-o`8K?wjEfH#e{UPG>Vxue{xrqen6lkv))JOuZ*Wg>$)VdaEMj~G5sk!Y= z?W9@K6Uh91Z9w>bYX$Cyc^T0BMasUuJjD@pispGjI6new3O#t{lp5B^A{C5jc8qp> zG>!$rafB1b^K2jRqlzk=o2_L^`O0w8H#wdol|#2TEz;N)w6diozO=FlL{X`A_Rbw( znrBmLY#c;bPRgt$p+c3`JnrA20M9Bkey+5Dq>1qzVbIuQQW_2%;X1-s5mY_?$Iyc4 z1c8L#onaS+pOt%6hpGv-HQR|D$Lem3y74h0-+>P;r^%w0;V>u{-ETzC@fV!MFs8xX z+nunfaUqKn+n95mL1OT^kD^tEW9E zq8v*I@}T&wSKyw+*&G&Xs%1vv?GjBB#FFR1i1<0mNP~_Ma`~dJ#llgCil>iYFNg_T zg{Ct7l?BL0gkgRd`p?~ftuB*cr2}EJDS%}OK4;c$JUetX{B|&r9!_ZDedTS-Mht&0 zP-tbO8a`cb#F~pu0&B{`;Mx#Vi~RAte>|0fz>p=oQyE|vH~_4d#UGtR>&Cgc+CS4L zOT)_A*@iU%ZmxGy!uNV6s#>=DNFCQ}zkh!x-)cE(ui3laEvd-WZ*kAxUh-J6(~Gtg z9KU=3*0&#kmESBAtuo1d(gEFDjYv34IWANhfBvW?g3sf9ZrQ?<(A)^22Kj#K-x`STXOZA%Zax0Mzl<-U3;pwx zyiga;0T*a%et5@Wxynn;;-Bo{_z>)@EMR1!+UVc-aJir$T*m~(xX~!pGKPGs78R~^ zB3qO&Vwa%VCh^+DXu6ouRrq-AKBGWbh4w;k&G3i@FIQv|R>v$=-;HKS;UQLFR_|N{qu;A@*1efa%FC!Npzl`Tz z@trj7@2mAXgVaTRG60%VvW^ach_F}lbzlQ}k0m!v5rdX*N}W+f?DPzMYZLueyfO9n z0CCgB{OpaC_vm(8tk7zE7vT(VDDtYm%}nXfoe~2ULVE*0-=X;iL|?a7$0@JRk3mh4 zUwUuZOus<=KBL&+F=!b<`lFcJlMC+{EJ)Va;B7l@AOr_7rlT49$C5aZ@*m=NX}yBs z&_BT5VkbeJL7B|%S-#HRO?&8b4h$;b7?r=c%b116)i8PROn9v^9SML>`r9D)f1HI( z$RFh0W@1_9`F%Zu@1`#g7KWyYeX`eT5JuS$AQ(ac>STWPt&g{Rr@+vKpS+o)%w@<@ z`(7+g>*DOtv{WR1kW8%LWpeB7Zpo#^3ofmG7lwo$KJGeufgylhWGkF{e8~r4*ZbpT z7e};X5gX&BB1GTucx!Xk6l@W001wK#UQ~$rx|>KD`>(xn9820Q^15N!zR`cP(7<_zGH&3u>WEtT(q!wM;kh$J{`v$}lczuC z0do}--pS{Z;vPX%U%T4$^1--yMa6o5u}SXoXoVS1@7u2_-BQc%jrL)o%%Av6Z3uat z)mHQKEWdX_q(Fwk59nz2JkY(FZvTR;5Vq4NX4F(1fR*{(>iY3zx}` zYD~kyZ8vY~A9A%jEyo0;A|ALVRge2MqpyAQ$*@Yt4g7D+&TPN-B=+aZ#BbJ&3L!V5 zW(+AOWT!W3@Eq=qxvR%mnR%DXlJ-a~c(C-Xf7U(z?DKekV~&xjUZSynz7ad>PBV87 z&pSx=CXey)xCy@3sWE#4MIuvme47DHZV8xxF)z!m&@IqO0zrg)zH=c!QuWaNh&!lD zsuV2=UQLEe1n_Y{plw7>onW(mRw zTbJl}1-7>ga3~v6Qj6lsC{51R6dS>XHQ{d9cGFqen`7}-x;rdqs{3#@9Asj}U)LW* zBZbd5#-&Kys0i|ScllknzkQt8?fPl{;T~91hd+n|8d}czD+I-no6zWav;+F}Z=*H_ zs|KI5aZDBqlt@NVY(6eCHim)SzM&=6DvQ`OC&8iBt~KwKPZnmHa9l+%-)VjEfu?%| zdm3eJ>=b~w&UEpzy4E1m{f-b6T;obom|rzzYDFrd558AR9w;QyRX^g!^+oQ!gsL(i zG|jDZBVlI)32^S*Xs5nV3X~y(wV1+vreGA4MiJz_TND`j8Y&p+g8`ye{H50m#e@(g zOs>gtoRO(5@jc#}e}+s$6>>pEI?G;Df|M*8T0IvkJtkQ&JD$XNv?@JJ#KScbD_Y0i z8d;whY@4Ad>lgS1qr@GjzxODsMiizZMk(7Y&fmQy|3gxXEb9uju;Bm+@)jpbQaPVgg-P(4xWZ09DtyuzOI#z0sV(jc{hFCcb@_OCbX#p+v;LlrEMp5jc} zxB0HNAfqO83qGP*du{B+E0Hd=>AT`30%sR+p90DEgM|)m$_C%dDm~wmUN);!dN%8G zEsr{9i(WeS#V^KUxwo&b7N7{WHU8o#B&>szkt90`sT@g)MDw~Df#VJ%=Sv<7W~-U+ ztL-0NtKpLtc9`7NzjX4a?q`7eEtk{xyJRvS-YiH$Gztxez+20f1>@q@x-;j{2 zD_-Ik3|y`pG)AS&I+N2Vcah)Yz}Q8r#=2>9$fGY(E){1eSw5LVyONj1^nUhZ65E>W z&iEPaoYljaBa-LE!CCH9xjOsir@)#w-OrDoBNyVT6hkSiaa}aYlk%ZLhQJ(+fpHc> zUWLy58a$N1q18Ag3aWnw87`Cf{lUBnU)Gw2^tc-j2}X;$1uoJ8p_I+o2`x%TOKc;Y zD&g%$e=N6bg`-}#NKl!qr>!SKlm_sr_wamYQo&Do`{H1M`=c37!q7HBIa(fTsnJ5c z!u6YJlH>79B0Duo0fyD8AnILs-Qy2Fzg{3I)Oml7BeLs9b8@r?+*{j3NwIe-Swbi9 zai1y+W5qK`UwK^T_s#BfahAg&%lk=?%tTkBhrzs#%mi{#0yv?BRYf?~KHUYR5?8I6 z^{=orLq-QEQ63>#TB`Y$M?ek+$YvA1z7>wPHsIhDGNnEBZs>bPFToUe8Z# zpL!5BPzy}@W2pB0u9hr1(!aBsNMga8Vc}}K8W^3xpTYRDIGhNGWc>OJKg2#NfHl+g z!?5M}O=q3juTUSjhgYgJ_Rx{^J^uEpWp*w34ZQgE0)(>IY4fg5UfuE}t$}-%Xka0IWYeYdg_7VcvF1Liegwf(Gqwn8ZXgO~% zqW|G!Kv;Y1CqrGnb+jiW7Mi*9gI(D;`Kg~X7;F=Wqc_hlZKd_sRL=Fbz>WfCd^bO>LV{$#L zFc?xjDZR;W;}Wx;Dz|BKZ_&*mkL#^F2mf#=A9h0oVuGo1 z@P{$t#?rtKSi%NbM(Ux=3EIkw6jaKjIV3zEI$uJsRpF#+{ldwRVM5h_^f=daAkI9C zB$BokYmf>-udFcBVVgXGb@j~^owBvaS~S}>J?!8wX}IXj+|W39a2VOUVAcgUZzudn z_eSi%F5jhX6hfa;7`Inx2@*_n*nDWyp;ToqGM(#mKJ`x(U@J z3Je9`;_0cDeZL@d;tRhYBr_=EX3cN3sB#QyHwk*}AQ?ymizFv3yoEx*#bFW>ilm2k zMS+`3s=OUeZWLW@DGdAYi}z7&C;U#ztJ6;nC~^O!b-FnTx|P955Hi%6V9;D<`34(} zh#E)p0%bq0FpIfAW~@)X#b}1Pi~c#u6=Hd~*J~#s_-uK8zOQWl;Oz zsI+e2grpZE!eS0&&^7F|r7V4D$b`vv$_Ag7I|cD!!ChUSkwz~3qc(Y?xRKLFVFfl$ z;*%5d5H3BjYn(0@*8xLSPSIc2+2x>C^$cX{%W%!^FGEnZ?d1MBi<)}dKU<_DtlXh zon-^g7?(9~qiX5K{r~e631(g)XHdI`+AMZsyK>l}zN*gQE#l4#VE-%!n z^&C)X(Hnk;ID>ZmQaR6=5-Z^P7-R1I#GGGA;8mTq01ZI+M>my;<$0jDc}P|d`qXB& z$3Ao8sQYT~+{wfs?icf$Z}5j5N;Nu$+5T~t>3pf+yo28?FtfFVW_$ILJ0)`@rT!gn zh}fhhQ3J-S`^t^|D@{(;>vq^V<;E~({0{hBt8oVVcFT=lO={NGfmq${$9f+-#PMv;o7?%oMm@3h#-u~IEAJ(l+s$eXUOO$T1;jJ)f?T1Ci zQf}02yR!FsY_c$eoNI1{LP0hD$y79|V`0CTQQ2pF4GxS6pBpq3a4%`lPi#-`&h9Ya zqg3yIyCNk}U9%!PHFtEPiQmumfqt0b?gp>k98n*?Kf=|j5?zCtbJM}!AK4HHcgsb> zcDE0TBao#+@IB}g%iiG^vPguR-*E@OGJBVxpgbo0c)j7yuI}^#t~HfC!DCmI*yOW~ zI9X+7=%*pZK}1=K1{|i-;?p#P{339vyJ%sR*15*;?{ziqbbV(hHny{O9Z5i$qNe4Y^BE)+^c8750v4_)6+I6IQdGv*jr6PqVfZY*E2v#0%;G`VSXB14Ci- z)tn8m?8bUYh+HiAx;*7zM_(4KKK3n$qWdlzXK}JdxEWArbZB~0fQk&ZI8l+yo6$qK z4brmDUX0o>eEP6{Ve4c-9mj%eoRcUG%|GMwd~Adw;kF#N!K~l6I)#zn>^m8ZGMBnA zPFPU7zN6FPab|Kg8QE}wS!t>jPWd7Auf|1!6sg~!jfyK{*N;eE7p&3& z_&DnF)60ZoWau!er`gT-@KkB=VVmh%c5gls%?7wa+sr^TCZWZU03C#FGEr>ivNMxc z<2R?$uwvc>Zjz!~(w`{jUIOEzexC0K_ijM*EAa-PQ<_FFZ`M|nH$%kfZ=%ND%!^(jOM zebuQGd7vTfbF1x1s_);-R8qJj9gxWwytXnqxQ4(bF-T#uO z0*W`&obED}4&Kv_80AX%rHkt6^2UK;9YsRx+9YV<;obv0;PUUF6(gOdSzntMPaMIa zUo_Kw{lYC239-VS?2XNVP@4~&Htu`ICRoF7njJMW?TaB!CNK%dDaz%x_;L|c z7R84R8)?WS?z4L>meIGz%j5zv4Jw@MBG&t0NbFVaO_%TC+%Xw;(q%mr3N;(*ZL54) zyB^Rs54PxY0Wws|zE2O@O|RTYE8EjP zMWuF zvw=U;o}=hivsO-`@vXABN0(v5Y20^rUVQYTP@~VAIF=l@kJR7JEkCPGt4HK62cu21 zyD6#W(Q}b~U|?#_y@Lh2Qn{zZ=iMI<_4ZHi``Q|}G-KI?2+NxTBb-N?@J3t^%+f|f zddkCnetDrJXrB0FWF93$JrB1Rr`Qfn1R$X;BaR~v8O;8mqO9E>UDCe?YYkd=mCHFS zRF)FRV9c7wq+^`1Q2OKo2X-G(u+Sx2D~l$3_}9vI#+ugN2ugGm1sWq98)(EX1gTOR z4kzoqkQR*6t2VCv3mfE(f7Q4ns6pH9FG1<`VXeDe5_0>lZgM#oc)G$Wt3nct#Xy)) zSx%}ArxF4w>a3+9By6uDK2>(v64devO;Bw`qbI=p#;5-WvftO`bg)+pNykD1$ZNR$ z`<85<5xQRJSf)!X8+N;gMJ6r&V(4J^h9HLQvHL5@-1O2X?eXreCAs5n zXnD(FEmyN5xo+V9tCFX zdb%MwEFPCc?SCG)Os5`iv}34dNIdxTFpOWqZp>Gk$$3=sf^CWy$h1U@Rpb*3GvM^U zSB8ZeRV^x|or&TQ%*t!QC6yZ>D=C&J52wb(%;VJ}I;0iKp<56b50{tcCM2>8@^)*X z|7u0pN|DeHF*+1436TQ1qK3IJQh%;-8|7I*KVn(z-EM=s;;4+&^q>Hi73p#UR88t3 z%Z!>4i{KID3NCBidkFVo0J9k_?namXy~`yfFDTF8;VTy^sLWCDm5mJptQbZGu<4;f z2_$50Y$Lz~T>gZvLY{eh0?si7n(dD3uI&=Hb6AQ?RRZ)U`yoDjtuNtAJbhO>smiVi zJ1zDqjk|LJL$-B`2NK1*0=*Cla8zcbO@k$rP)h#Pf^9y=cn83x?T zaX&SZVq;}d#9wUSJZ?TcZwk%sx{i&jtYak%7_3d zx8g)@=0*$=|3RZ*(uFKfu!51gqu;gqRs0USK|}oIf$*d-KU59{A5ulDorX-k z3P~fMw=dXxfALgmHQ*Pr63|F=`A0dKb#=hXw^a7bVQ|`KeiRL4gw^ko9Kx<>>F0DH318tVs6JxX3pyS*a5m5 zcBt*AAJ#6YDKqesWjxFN5Q-#;QE_N>K8$chX2&p!t1r@>ziE&?=vYzf*(1Tnozs>- zvLh|*)74}kkddhT+eFOg-dLC@`hvcq^%GMp^u?hV(sP>nO=OVr8y)ruy~gXu)6<8Ue`E-q#;UB8S;Nh0SIjDExTbY1w3EeR2zhsZFp@rQkF(F1 z(14N?D)pv3Y1h+}%nMD<#~JPHYuyK_JL@!jc+fXR(i z7rWCgRH?_nj3qO_dSX_BFU7H2nerIo;*%aU;4JYl34%prBXSuiBu!Znm?$$v!}rVe zcs1mR*XRY+F~(EpD>T@~EwT8lS}mZjVdV#mCF)lBMmeLduDpuU#?1J`6=23DbzhYM z!=T=-Y&ibNM0!a>l1X@XKB@GTZJC#g<_?nTFc?RP=)jHoj^j7YQo0vpB%K~`9{~>~ zljBmcl%qFv=xZT;MuyCnYS-ifH2?f3nwn3&NDF@9v}rw0uD@s!RQi`-XEWuk={wEoLG`ly*xj<6({3q!6$?ZV zSL>L;>!|Ijr>%$ylI-%mOM7Lm(c=8pV3C6{iF|QV{bwq|#+T-_QA4QTy8##6vlo$`0+Urc)jr)jiS(K&y&QTD-{3jltEd*GNi zPvd%Iua}*0XEFM6euVcK(l|>oxN05Qk_IK}*4wh$7qWm$G|H?A$X3tbe4aAX3n%S* zV;iuKTeR_t(+^Dk;(*et`{>d*^POJExUa{2OfCs+OeQ;p>%zd%a?A49Yx&RtFL?{? z&BFV$BjI=Ff*CwcU5avlB9+&ejH8l3xg|bndKt<9dk`3>dlz0WY8BLYu?HrQvt5ZKlm1eF zq>L?=sRsZjxmC6ypI+f+DO2o)eYsk6iCs#OO={usUEW~755+TJ@hJ+#(b}lH0Eh5+6T!89yQzG!?CY-UUL`AFVS37BZ2WWI;1ZXMN*)HftTK-WvEC5uPI zK)vfTNT)q#SSumWcD{Ci<{eAGxNxJ<3u-+Al`LEvpGPKL5@r*YN);NuZtV0&Y5HK^xW^9c7MKjZ4B`SZ{xF6`a1bli^)fmK!@XJpx zUmm~Z))G`xIVGvz2&x+UVj+-$2q0o5O&01uQ6-vHPaF(qk&G78N97pg6@Rkz8nAS> zWg#1nI3FI*CF31(^?0Mg@iXMU*ZLjS$@oK6+n%f}U|dMo)fmTw%j?wCM;KM0-)Ti+ z-CKSEbB8sq3EyfdML21ccq;44L;#fN*=~%1zoK19%Z8h%evBW^8n|si)kX7pv{lIO zb{6;SOTlyG03-~37-*}+ee6tZJ1{s4PFXF~P9)bYTX+WjsgJ;A>!hF9&4Lw5tr()A zch?pJ)&41ET3=E|3=Z$4^^w(d@<(cQZ(TU~6c)WeHhrS)pE&i>OL+&Lbhov z4uruC7^x=(GT@WSFe!bY$*vKlMWIz|`TZkV(KP?AS`cTp>aVb~db@?e!jCy`m}wf9 zg4^q@r|B5X5?V^Zya{}Q-sj)i{qEjTmb9ZDjp%mxKfFNp`$JFDUB&YvpdM&hyWz1C z#Ac@f#+du8XMHfZWJX&N!VRkm@cNG995i{&?g!Qh&Xt>?>(UQJVnyI=3FMunmWBv0 zn~WPkNh;LmWJo#*=c#2*=caJ}TB531FEQB|z$`Tkm`Y~55;tMoc zH*;)%xvk|W1BP$JU{sFgD*?yx3i*&%Sq&?58aP(-?U{)FM5bbc?z=X{+EHAF+tnLH zu(Hb4g!_wKf5dDe9)cwubFf_|QX7w@9{}spq zy%q7ZAFA4MQxKFBmMIG0*W}CmhX^DAV>P;7w*f%Ca-+UGJz=>k0e6YMCp%Q59S$AK zpYF>xy7(DOS{akJLS_5j;B&rp<|H98Uu)K{qIZRJ)+LFf^G9-25H`~G=fy*>w&;+J z|3K^lk)K_C^K;d3*#X`ww>x{FXkRK#mPtx*p={Xjsn%bhU)6a_pnH9CR4CSB8e=+< z&;;}2=j5NyspAOdOB(yOp3!3EGycge%g@=k!bs}JVi?F<%1A#Lv?s)Ew1;z`m8GF^ zQ+9BOHaaxcZ4B0RrNniLjebF=Xt?LM*7c8;ZNKOL5XmkAsHs$L;Y|DP$BIysT0bf6 zMvFrImijpa94MV7^*kDt{T0RauN6R;A0$z|P#{$L>`i86*nq0j0Uj@LNI~0pl}C?D zwAhC>i%#7b^zoiQ6`RB z0~*>)n&2(}2K%Kq1<(wiky;{+T|P7p;g}JB{_YV0zW(zs92T?ssI4rL)~qr2iZ;%S zB~rO1fb~H4pO1Co)1C~rs|N@bO?&O_N#i-}OZYRc9ps0C(Vty1c<+L^@mZKNVckcN zX)-EjL+_NA*sk@v@sBpw?5Q&t-|AAUCWP)$^_U3V$N<1=eeV)#TbQB1gqYK$_xDl# z@H;}U`<^CN`dhpq0v2WWb^l+4E=U<-%8K3x4mbxcxEmoBFd6D2UZGAQ(}G+Xt|OEd zKIoD@jwC$1WW;AE$gdAQuXs<3#o3u_Z3}Z&I3M~n&+hWVn{o95X_*&2vJO96W-wY3 zFqD3*s8|?YAYU<7HIif$cwG{A4UNCG_w`93AjIdQ@HedC>_l5oV0aPg{j@Pc-OZ@V^Az0lO+>CD1V zo_;v>{x&1XkMP(GFLD=fD(zK#^4##bgwK>*SFhfaTP`kO^WUdwYLPug(=gp$sOZ?H z$^%fp_@a2~xh+iOsbbX?jY@9239Z}9oda#tbAU$Y+au>b-*aM;>zv0L`JFp}}30D_bED_<& z6h^?J#rzhnSz=6!ng>(L^58EIkB#IM3>DP#%VaFBMEEY4pKEy+bHsgo7Rh~_$%5LD zPE%0+vXT^?zQmC~w%1=P)x?)YaSZ_*!E^5=5^RH;UEygm+FM~7M6nCBnX%u zEJx!k2Y(T-mr=8u=rjtQNDjCnUicBKEp&?$ox2=*Bj2Y;><#{~`?ZiJbZIWh_FBIL zX|*_37zr7drXPO8qz^yeY_;gx!c}Zp@;dHA|6dV;FcEgKj@vsuYVTwl0ilGQSLoiBZpyVd?U{KLm#su{CdIDW+>MSI~~5d!ZJE zP?q^uVqIECh!!1hpSRJMm|wmIHq7bTx>4!wC<#CO(de=mh|>mezi61n3XCgW-!JW~ zKIJ#r!L8S)FSg17eugSwKKZzrNU;FL;1| zldwe}Y=|su{*ZilEN-#01jRqQ`niS1K^Wwmd(cMTDLaPO%s7F z*Z>hJf`CX@Xh)uyjqT>5w^6ncyVof|G^K|c__ zQ+F$O;ChkHsnpW@tL~__7Bf!m)ok zE1*ykAHgGET6JsqQlMg_LYyzeLoi2fa*+nA2Na8?yKz;ej~rQ9AFK9 zT+YXS@VpH4d)yyd+qe6(Y5V7zo&s^Hg9`A-?KQK8C*2V)@`Sa9d%rhDcGCeF_X zEk~H1B2j1ySKaSS=H2nawwc^#g%3jR7RN1Kx`5z;sQ(X~m6Eaqhd#zEI(FDa>D*I# zOsU~#pnr7$o^bcP_-lh$C3BkQXjw_uDMvKb3n_BW_i(J%Luu$~tFR5gn7G`8_G`SO zo+Qk+H-CUrj*{p3V{>tamMPDs8GKvVE1{xeo*dq25((t-Mo&mQ`C0NVcOA$A?W__= zs4SvVM|vkF+0 zXDN~CP%{YG-A?QXm+f{L+seQV`R|^7v0K7St#a6YnKeQ4iq!qf5|FWda5NRU#kC*! z&6>J57q7>FfTGxikH}PwlbgNO3o6mh?eZ6~mg<4m=j`DrE)9}wjRL0@(bu0wfd@O8ew4ePx5hezeusWNyrWaLm!Ti#ak#R~z} z`V@u(wi|wCWCX@$5%Cw4{VL>cdb@Ms921%_yM{g19^N7!mEY6!C}*QirCu*EcdprR z0)Q+Tm+s02o$_Gl2x4lLtql#eu=Pisp{QyWIgEX= z^Q3g?{L{p?TFaeKl~hBa9K$~9Ad}~9(-3DE;<^o6+%7#7X1NE34$5G1G+BFAi`pHlYhFy zW22j;8%)5uHZoR3x3*KB*t;oW>PNm~az77{M>iGJVAb;;NZy5tRw9Anec$+O(?tcE z$NcPY5naCst4+9KY9F%HuFJ9E6I(ii$?j^*p3Q#9$c*?_*V76{1^fb!)mQj@@cPeN zYS26WD9vY6cHFrS))=>P;hRwT(>M*Ur)In1>Gxe5Rr)<0j{*OXKO zD+?oxH2>e@oivjF zH+m;5!v9-)CoPq0|F?5bl2`w~6D--$HKzU>kMx$txD{f@J20W)D;|;exKLl2mkU22)+1#vk#h> z-R$#XI@yzk;&GJ>{@GdNkNNTb66~*O3(E@|K#$%u8 zP-0)ILd-)Wb9V)LwJ)nXi6Tw$DHW(mqDjr6Ccl2khoJu7Xn^Q%-2uDg^!FqI4acAK zgcH~MS&C548Lr^{w3FJYFgY@j3dvS7$z-@E|jvstR z`X*dqr`+6kx}yI&d@CVY6w)CU3xHE0r_BQgR7(9?%%y$S-#?irzL)y}Vf@AU8CrIq z(|~_I0_0gS<=3`ne}-4&A^EklEMzz4xEI=|eswCZ@P_K=yo$CvP0uDH2t6WJ@%xY4 zCUpTM$Yqm0#iK)RYWgeU4y!|XaR3#n=N-4|B6hp!$q@<2Pzegg8SJl*gELpU6Z8hN z)oe0lDJH9+B8sHlxGNQf&&q83Zct%X;_4wgGG&y{0X`Q)&oeCZ1%PH~*cEd%j3$dM zGkCvdB>IBxXC1PxOpzvYuYnh2w#4JoOseBwJ(EU~vO21Q2Dn~O1#fUO?h*)_O-T)k zM}h#u^};S;&APqSr88eIZ!y)iDIqg>f*VTQOFGu|-&_fi1~`3m=g(p;`}scxbj&3%Q3urPD^?evN12V=Zf!yHV`&HztdSr#$pqf2_aUkuQu|=+5c2pPgtFtrsOLPT){uL z&H=e?7_5KZ z0~=B~&(s1o7K?&Myi>)+WEXzD+W6hIaf@Q1M^ow7F7Rq5-m>XT#ctcEvZy#kXJ~iz zThx(bEIqn-2CLw4x^;${NR^Py#z|oc>NDrc5kkl8hA8x8ZI(RzqgRl_@Fj@%#O?>L z@+_4d)f`P!Vxq?kRQ8$gXko$~<(HRj3(C&NZw}UEiMwE9#AN2T7K$di?MLrYJsAq$ zG^IV-Tuipl+^M%TD=6yY0Q0U6<^Yr)Ci9Kzg4ovr)U zLb%vnjPBQqn_8wS4D~PkKIQ4l2>E0a02EaGEH?36abowYIN(sZ5L`aqHu%wkl|{_u znLKqmRdT>o+w~T!ImLZ4O0@OdfJp@Oj4AEZ50# zO*LvAGlQ4leG9eiF%q8>G!dm++lzg=$yfx&zeOzN4A?9JOx(-190fB0RRBd4Q5!8f z>HhnlF{Km!SJFMZg^1#9AJMf+2hxdNxK4gm=c)F4tcQ-k$D2kxa_7T;_gA>CU48C? zkgfj?Q;~ea*5`#V1}XKn4$Y-J`GC8IxIQVQdReFGDgL=frwyBce6CF9JsMW>puAvZ zZ5}y{cA4a)(?ns70X);P9evxFgeXG%(4&cd_>?-nM1-F8agsZ=T_fqG+)SxvjIMc) z;^YxzRnh80o$>IB&N>O^AcjPp33h+)wK36FI!uz9y?oRK-N&i*ys2A>)26yUhyFH1 zW;}r?)I%E4L^}x>7RLe}&a>rRLM4JmEv&3oi)mp1VuXoeP2#DO5N*)>+sd}>OMFG^ zBZyq;>vIwc{83-01gu7L%(PblA8y`xc63kxPCeiMD6Dj^02cQNR~Yw8S?UDr0hL2W zBXeQya0ZEP6P-{h&x$Vxw1pX0-5w93^7Aw=9pU%T+%IUE#8(Hq5q~JXr|g@yn&!vK+JlAY@{@j*13Twd^BA>FaT~%PzO@VMaG&humi~DDeskZ z@+8@k7*L~ig30x*(lLbS>|lTCX(Mo;F%03iMFwoU@}=SxZOBnrWU1SLbsSp+tJ_Ci zz$qf+5~UNezd8wzYJ2vbcwi7$YTNxCAb(ILVysRTEc?+gUFR&BZ|t-N4vYsjhXHt_(ZGE@&@bIclyB#K|tk zMu9-ip_}o8N%XxbD|h3k(3q&6!b-d|M$IXnlZE zRC-AdX(?`Fdpc5D@a<29-R;E-gVGh1aNf-y?nj8#CT!vy02GMpTK5<7VW@u zA73qHn%U0Mg-JY}Q8%vjyAuL)D|y*ouV>=Q{Oam&NjGioN0yA+)Xys98Kn9g>pHp1 zWE9lN3RWLGG)lHYr019Jo_^!`HnY2T6-L`}e`zLQBXP9I^ugZc3iMaM$6IGvBs{9^ zw&nWErsm@7w@=9yb%c!wRmq^i<27;dSrWMnGm26-0i5zUk;Auo>%lq$>zmpf&%7vdj_tEfjku2W8oM|( z?+EgC)Q3>`c(+;Ht!GeH#fc{Z7O`mpJ`B55R}$(z%JBqn3T!{Ha|7y~93TO9==XvhF2-Z}3A8zEF>&TlW*ZememG z#==~j9j1Q1h5F`s?9R3*cZizrM6vGZ0+`r^k8fdmb-5WGfxTd%_z$iw`?onne^M=U znv0aqS-3VWJ>Zb=cn`=c2Rf}Lnh>{5OL+il`zq{7)7lLdS$xj(3#g-GwHm06X$OEQ z;qsGGN;I%lMl3f-*^P@ggLD8 z(d8S6QvX7OvX`gAqEw@<(2QkQdgQ3zfryhQcHTg-v9<-5JH*{LQwNePCZ@Vp!ly&S zQzhM1Rf1-|Phj^-dxUoc8Bhn|YlyNTpjNQaH>A&Gk&lAC)ln$LKI_F-t~yP{V$z(y zBZQ6PAGwPT+?F4Ot$?(Nwe~ZX&3HdTAx|fa+dk=57AjDM+bJrxw8rKGWc1 zOdR9>I(pkO>_AI?UI&Z86*FI>jRgprLK#HKo`t#B59+ebxTq@6sdZr=P^3k0Q zx_dJLy%}^*>6YDIbRVSP0udIzmy!E!0!vkwn7{;+j9;FkQ^1zwVjrz_8#xzI?l>?t zQRrnGVz5&NPa7|kn5a#s^}cSd8qLCNXrLO+zSHa5#lsxX!7b{1d6Stf&D+8kUD3EC zL8fjkqH+l2jgW|temTjU_X$^GYXH;jZS#JWJNK%JG3||=y=nFwfNy*$s9UXbRh9^3 z>h&38d0_ACh~n!He$iI_*=FwN);pzQ|1%dykoQa?c=8++is<}dn78F&FP@&yC(Y7#Bz4=iGlSJiS@GsBv%9V4?rt3#sS!$!3)*q68Z;=iNYD&>%pqpq@3e9ze7n*aIfkRK zpdBALuO$xxsx>qJaF06H5O{4kGY)9qO9o`;;|PFhxl{&MWX68Tl!AU#VqtI?D$a5; zt~2#m!uXgZytP=#`PG4;%O5Ic*Ogx$_Rb3hXujP7dU?rQC9N-9{Z3!p(fQHIwKZN; zI-=TAw5sL}5PHKc_U77D7k>_9?bpb-;w|$x(cQ2QWf_OoSCDp{su;~7B}@5&jE%9xI`LXW?w)^Wf zmw%UGm+>0g=mAW>^<97ib6JmN3QA{H%HFoQQOmH7$_ab6nSy+C{Q}5lDb( zlxtF~uK%GtQeV`z`&!kse}sh-kb=l(jLpw;+^iDhn=Rc_vlGQ4)xu_*DLYgW63?yL z`bPZ%Jq@AiE|WQ(Cj-g><*dxz8|c7Mk$o zX{FPaJ-J(HyqSP3y0wA5XS8#mlf_#)H+}G|IGW%GgtF0C082Lh_-|B#8Or&BrAS{C zS0MxK<2tXWC*-JB0f1#ls8o`KV)7piD;~9;1xS#= zJ~HGGbK!^GGmq}*&4o|~eIck6d_EYV{ zNNSFoo~IUQ+(orA6&jo-cHNtA+w^+}f3o?6a2&5qhh%-c`$AT8rUHzhu4cFa_%y|F zpsW!8`CD3Kj4$2i^&K~-Dm1!{J`0X;RD&=}eFBk}B_EW(1m;ODF@j^gB}9exG!ulq z`beSd(#!S=Am3Lv_I2F)3#s0|?t~k>6T)^U1U3FVu|l8HWZzJ!&(z-0aht{Gcp}6M zfr#Tlp}GHRj?cUD#MDSKB0+70z#;DL+M8i>v0AH&M<-F444=|gL=!(8b9tnIRYk59 zu!<5xDexMAh2iFSv5AgZ=-goq6>U$YvuRD1jY2q=-+cA0!OvZ7m0ZAi0HcIzg>qd; zO=(StNDArs{H`s>U~<25o}Jc3gh%0GdYQdu5&(Fo)TiQD7ty|AKl9s<=Vw@FE*wfP zT_5UzKhGAO!d)AywX zn*aD5YKytn<<-u3doMm$^K$CfXVxs9Q{arO44MU14d7%YUwhSgn@ayu2Mv?WEElzF zxYBG>@L-Q#FYDF0>+_FzM+0)~4~k0z4qS##y_MK713H&_CK}@KJSe($2%_~1fvZHm z&FR)(m;1WI8@LJc*!oL)4hOTl$~bd?xh$(mp%TIL&d1pdmG6Zb(3q{8;y+FweTO2G zZmT6~S3EJHMsE#Kz)iQ@@VLe{e+}?rY&9r2uRU2s!eC0T*Wz~*4H{?*UlOksaSJ(5 z%m$ViTZ%)A#RIY(bQpC~4uWc{a-MK7eHea0jua{p&bWnUgp}I*PNJj47}m(Eyf+I= zE|wX|#;v=x)B1J|w(rQ-w6z9w_gr`=3siODjft=@xkOff=IcByo_a*FoIR)eVvz`zg;Z01|o7q-{M zv?l|YZqpsY+?7pApEh0;*8k4p9B#vw=M@F{d4-xlUi{kxp*vn}Fvn9B4w>r~1`56| z2YUg9C16%jBJZWlCaS;-T^ybTxUA^!tq@Pj1+8C43bL=oEGufnV#rr)rrpFm2Qd+6 zP>Vo{5t3Z+R4LPp{b7F_Er+ng6jPsC-zH!v#R86Ar->K|4a2P4-Xgy}A3B94Q}n`? zTp5EZm6+H^t&c}m_};daV5mlq*C9+7Z}Zf6ET46fyv&fV*YwdjziGA2mnwDi?ratm z!BDrj*`)oT*j$aQVU3@cjn9px+NdJsaop>qno2$(p9Z!=0EaGo}@dbaZr9b*me)z zdMxrw7xO>tbzXA)Z=KJhU;J;^i38fG^3LNM|3u21bX!1c{dO-TwW0%P4^Bls*@(Lz zOx%+i8a8uj7?--`aiX zP6(hjth8{JMf|B_bpbF2?4o_Yz@Hfv|J@RdQBvnoLWuKwKN3ER_+zw6Bh*pVQ#%2QCGJ-??Rh-kccH`t!>eT>x8=sjK=D&Gp|s z{kLx(Fap>LZN|3mTL00#{~GmdePI6bhTlD|`^zHy%ST-*VE**lZLO^l_b^s6lq=j@=EVRt!9JDJnvwe!@7@z~h zDzOWs*cF$Bam+>4*~PB7`&Tn>*>qe)NJ_psY01tW^29hXZ6A>cn>dYRdA>gu-2+K- zosJzbzHzsmyC>fG@$vHh{Xy^DKOV}>j?6Cf+w*DMmjT=_2{|BJYrt-pGnp7>a|x+}YgljnpN@Ue^2k zwkrSTiF5OBU)rC3j!rq1xTVE&n0$jIW{9!xXE}K_{96Zg$R7*LkFZ5Dd9f?!NblSN zg1!IN?Lf!um21?h+Rpi`{lN0~#>z+C=%nx4Q zQvBbpQv$9#ZFNiFf4lDgGwpE(Q9_av0BL`h+^lix27n5W2Nw(TRydBvyk!x)XB-At zsGYVOhg79t1cPpsmNS2F-^e*c%im3;JpfsRy#kf_q_58qZSGO_#0&GZzhR90{5t?` z$fhKb2(FNN6)$!+5+ z>X{1I#Hp`44{Nwpqq<$2h{DOD7U%Stx#zWKn>e5`aiE|K9rqORSW?E?cGGF_ufU2A z_9&lK1m`#QtaH*_V+b{u_EabOdq3GvgT%@c3_2tt3ElDm@;o3HV)s1})0?WajDkP= zxz4O15&*9VZTwaryUSgkz_TB-Be3=@zvB+V_Gp*^k+iB*W_L1t;=$6f+mi%XG3u|+ zw_ji@m4kTjrG&FQ;AE%7?{4s<%aq3f>fUWfU(qd^CjWLbOw!WY@}P$BYt=Gi)k~Bl z0;)P~s{Yp7w0{V_llJ1rW0UT1Wc1~G1jyIvXSQQ;PeBAXnGZv={O1~0<86Z=F0 zbPl`X_?9L&D|-Oa-l8@*tRL{Ws=aG{vG|Nm_;fdld7Bu;R%#DF_RlbPrAS09_M{qF zf1N#caxMZM*=3I;Guk-~k%r;t=MHcypzk0kktatZK@{Op<#0rzC>_FpgSTeygo?5h z8@{>7e+@Y3%!ARZ2d7p~Y}iVY9yixwgx@ z^FK6-RJl}4xV>J4XKG`NiI_<_#s%!k_VYf|N7QTh10euz5j3LjW|9PNe=v z8ptj(?#9+F*uEJtJY*X1Lb|kC9;JDnZCtz+e$$1DcJZLwr4v0_1=1q=s*Bovziv`` ztz@9K@rV@AWj9R?AX%h@eb(>h-*$66(30L>!|G2d`$V2_q8-l>r!=6sxemO<)FI0# z7Kh+kuH8Q`g=z>UaYf7HUx`BtlOKJOiCv!s&?`^yy$D-Oe11oCRl1vun_d@d&Ow~~ zB7kn0QrpMj&un)8{JO9NFm1=(FCXU#&IYe&ku&qWJBF&f>olvBXiqtWy&L|r{XuS^ zqVACk*a8R>#>n;{KjxJZ32d0b&$kjm7;m4nQy=^`eiRo0cnI4_jNB*1g%0grAV z4=ZSKM};p6^fH65@#RKU7^JNc%P3$}6Op>ZuLnw~M9V^M z%)Oh-ik4I>Q{_mK4><5oWMG7>4MTlI1?y#vonO4D$qcOC=FSITa6rV+R;N;QAx=@>H6y^!-Qb0QXOweQq{ur1c{&e`B&k;7O&fk+h;z%{M zYFED%j7uz>_jbi^~FdbWg^% zlH?}CdoM-ov&r^gY2wJc=NA zHWCT80I0^fU`u$~zkA(8j9hTiJ#vow{`k_s%QuXhrBitq&l}%u!i`Se$3;?wR-$FP z!7#0_7KvjoT7MS|+7XHq1Hf64w&I7Y%8x+hPtRRoI1owC`00o^m2}%+vq4pT#xLxV zUsk5^#Sp7GtBv*KJBFkJ!zOMU!Jc47J}5bJ!*C5@9{>K73S?vk^lk) z*vB)SKD~Bq<*7h7GI+8GGYOOuBy2*hl8#pM$NW+f*He#_(-_fT>u+gS-R=iKcsJ^4giK0@jq9`8 zbV9UKZfc3z^;#Wp(Dpr}qBHKsxA1N(^kq_BpKqGkk31%$^fMetuubw+hYmcb1|7TV zo$!8TuT$jhi_spGjje=Tbe_o{NCqHeU&2`9MuBPSIFr-W7JYf?`o(OWeTAc`GN0rJ z6jD=e>2Dzp*-yH?RCESDCaOrp7oNR72g+0s;zS-@mWZDT!gt5!^gLw0zK|qhW=&8% zB5Yp3=x5qLyiA%7^i)fha}NxOy;2OK1@JUBLRAtm4zRwMQ+sO@LF}0Mn-`*?I;Y^N z@&e7!Ak7{L4M4MULI}Gpi2?N~9Dwk(g-ckH_S~PTH)45?{YP>A1~zk zK+)gMl2y@V4(7Nd4d%Eeg*F&j z<#Nv3s|B#eL@7IX#RZviFn6>RbXcL&+qB}Tu#g}MYH<&;U$YV^z}3`1*BsPQo=+BV z!AiIlemHxTW@ZTL5hFZR9C7Y|Je=39WQqr*`vZrnIP8fhj9 zXSk9&qS+WfJg?f(FZgl?z#}oBZ<4!;XqT+tuYS0yJ6NnKKuJN#n!1mg?2JkU^WQu! zY0*C?U|v)iVPd#SfmgH<$gcQJa{Y?ug#TrCooBLA*x|rA_Rh#)ex;gXfNWjZ_qeE7 z^zqcs4}oJ(ca!rn&zCbk>oZsM#Eu}b1FDtQtld)|0f5u>xe6CSoRv$y z=I@}NJ>q_O{DYii5_+&#fw9W}if5W&TN?;i~mq#)7z~@y(bJ(p=tNzv2 zAFG07;Upsd6aW|b8a!S5tcs4)xTGcRU=1^e7ADm`qM z`F-V~B7pd0lIR>s>|p>Tpz_=*&)5gg9o0=U7b`6m#B~m^@%(ypv?Nb;!<{RV%zG1u7ad}1y&WfA9+!Mv z8?fnI?0%U1R;AXHepZM=G4!rtzZypBQ&Pp2fhI@R*gOCjU=NyO{qtlCc?qpiTp)fWSuBjlklv$_EsfOdiTZp8K(mi zx?3v34f=8L8k<_P?gt%mxS+|PK@W?a%~~-!wnmoZU!Tjb&pt2!C~=2(Syy{KXrwNKf@^C9ZNCPcUr?JpTA!wVKV@4ZHS4R#c`a0#?)ha-aeiG&)&}3R`byHq zN>te#_a24*xR?;erLsyL!}Z|`6M=Tj&ShkT0PFr^Hq8hq-M4?0-Ps9B<)XbdighI#X*wOqS$RZqMY3w z4Us)#FIOa9V#27U!W)GwtK-tEW*q4UjMBSABr!dU4Dv&}}$0_Hp(`BjzD9yn9r<#%>yuDj;D1~fMsk*H*X(DUe9_Awm z-9*Ab3ofZ>_80!nJNK{rrAxaGT)-LZGtE&Hh;<}24@^+Uk7i_U7Q(@0B8_9# z{78s}nNPNl0(5hvfM>eAd%C44TEbFMV6wt{XtGXHgenfP(%-Ue9pN2}fCj)br)|<3 zl8h`N6^@CpE{-+RfZdI0Cs7DyabnJdG*dRmOoa<`vfqD?+01dqcvsY+n4Pf^ub^^- z^;c!0ZBri49CHL@;L4BD#H=pgluSZTrcv0!KKXvsjJIW2{XTZ3NwL1X5{W0s zZobuU)ldB7VBVdx?Sh$uA7<_8Ew7S9d&EV+m~VPOq2mbw@xW%3*wN2Jm)&|^=>B&Q zfaL!?YL@#Ll4+j-$sIb_va?M;>}Y!OnW_gTa_X{$2rjcnHZUDr+)&&O_VRnotT2F0 z0&K%A>%7hK?IhM75yWBA@97F%YX901|FbnHmyJ1{&K?Z{7i}9_LUPJ=sKFtC3pQ*I zW$Lxyrto>Y`?72> zqQWkTdT=uss=S9nLt){TP>gEHc2}fSaZ`7kwnBPF;Myua7!`S_5jGJ3*&m0FYP(h} zG3}wjFoK1noRQ+A@$XHPxK;(w7yl=5rcaN$B2$kroFeU>@P-2kg`)O-Amx-U61iBG zsYWCmz&4={nGL8(W<%22Ty)ixDH7&96@bhfiq<|dajqIWV3$ul;v2)Z6qMm#R!;h) z;&UJtM_qAw!w0NV_upPhcBx&B-cwGMI$R%Nm^fjJDOnYt7S9XuTw1Ezh$t?_bni(W z>>^1S6Lnd{DA`RdMfrtZymyh5&xAVx|MAKvdg;~Sc*LqpU_IblULD&EY6^ae3_2)= z@iYzaNj?O84*GjjJt9r9^s@7x<6*AE>V^KgFW~Xaz_n;S(wY<7)+juEgcwZ3=K}Q; zDuQuU^mw1{9yE}(=HQTSb=H-`Fo*-!FsyJ*0(7wLjZh0aRb&k9es{E&E*^Y{#Rofc zr!EKY*rZn=)H%#NBiDQ^9c|%owB>aF(G|$9?_h*T)aOlvq)Ywk^6n(67>3S;qraL3 z$+{le+d8CofMNrW!ufKYeaEEJ@mWI!AX#*+s?7XnhQygJ=$S{Duixf1hIdI=uVD{Q}`W>l2BcX$Z(eS5C`JLlE)? zs|}6St`hacb$f;Mj!2FqcIe^j_|24!^{-C0{0TPE(lY7p%OYQrmYNUWsd5z6Z%8_9 z%^KW*-4Z;*hF6mRt&dq^rYN0aZ%9j;Kd9`y|B7nkg`l3IDs4083KiSrw7tP^uP+RN zjyC7;=Vfpy$_&!ig-XA3L3X&Ihloe2*+31YJbbX{(>l~fKu(|3q_}ha0N)@vonQ=U z|6p!4H#K$h%M4)h59QqeqY&)4Hf3nw1iwQQvB^+AzHMJq5-H={G+pVC6)E{pMDEDi ze^vyVAHIeA1cRarM!?{sD?y8Mt5LEWUsBPHE6lo$3-X9=-vFdhvRb2A#6PJgI8_znt-EsVtTv^>2BW*ij3w6JgQ38O&^I6X^<;hl zRe&9l2c-Fxp{hoRmGc4jQRBDs5qWeXSOb~E?^y!i@g|EPV*NEOk|XiEZ)v9IC|nQt z7omsKLW#k#YBI}X3u~P_BG)lSDAmg8;JW1;0}QU6$xP6~f17GGrY-7oQ#kbz=1BLr zfhNw|MAf`X2m`LRe)I?imzTAG>`ANwZbZj(_f}+E8Azj2gZ;AT_ZSah9*zL$+|FKR z`k}&0252sR57)4tmcyx_xROd8+<+gakp2#jKGX=G@Yz#pQ&hxl=a&($)}GO>Qu_}r z<4>8|9DeraepNfbAUmvkKHkvdo0D)VrvU0{vKNIO)rem#*E^HSC4KToWlL$Hc_k2#7qKD>VW^Al<(EQVN%$O#|3^%Z3!_3>dM3SG>JZx0=+1 z-CP6F4@XG_!^^NhnXNnvpPBq^H-Jd6*&B4&#rmA-;f3Rj^@E7=yKu5$X*8@@dylAY>TzJu#l7~FsgBnN|l!thW- zc)Z@{V7)%Gp4Y#T8*pglJB)V^a;8(YqZ>8?HXDqBf=ROoz+y76v`Jnoy@|Gvt%_b^ zNC+ZEN)1-~b{HTkK$Yh&uN;WWM%OO~1xM0c;LQ!}B#Kf{_xBGKa5xb;z9OefKlpSlo;$&s)-p(!a!qi6{I52KETp7K#Kz> zye@6h7WDB2lR8d|SiJS!7qsHtv4aQ?TKvsV%X}x`J9v8qW)gG=w>8R+5XNP$E#b7b z>Ro~YqU$9Cgr37!j2y8a#`lXenLF(cnAy+`dD27{r%eeq?*G)w|JX6JZFHyS73w*5fN}aP49CW85nLrAJc7xdD_s4>&yw-22`g%>cpQI9< z?tQ0JbyPAcy*3lKVip?4fVZn%{IpZRkvRD%4i{zlc?58(bRoi9G_I@Q2|Cqe*2pj;_!Eq%-^{mfZdqkNsOH6L}fqw<^C}HsEo4JINcG zs)2cDKVdMI^{o<%uqTgWHx3h0pW?CuWX+e0Cb^sugnw{Ff`eE&$6@iY5Nfv;nk>1NWm z%2t*g|1xP-Gp8>y%oFy}vaT`)FMbOZ=D(Sr?z?ovJaNbU)n7Wrsq|rz);J}1GOC~T zulM|O_(L~1IbUtk>tWbwPSPfh|NiuR9r|be$y@F0Px|A8HIWW#Z`lm(h}6ee0tt1?TWNc8Mhq>4 z0L!Jd%-nJKbJF0ebKHaPzq;nxCbAeqNM9UY^Dw~_p!45eJ4{t?kD$pY5+BkDmMDe8 z2tYpLye0-HKz|eGKf_+HZVJgs(9Ki`lBu8hg+TvV3v9}6r;Wyy8LxS@yzGH2kgHfe zqoJ`vy4>RP^7iG_3TY$Rttn4(FsYO*^Kzftam@nYL@s*4uj0mNvqR-Uhy0!DN5hA2JB}jaI&@Yxo3i+I3;okGB ze0i>HfluqM2C|O>R&*LYw&Tt!9y$GEgA(bt)3>`sY?^R6otf#@?pmx4lAUFBz%25k z6%;wr0La6!=`a`*r|m5D9FCasA*4HWTKH%~352bB)SZ7W;{TkG>3f{JY}?Ta`^L5S z6fi1lBB;t@&|ZPK+U;>uz=&cSX&DfN-}yl(ScxXIY&!t?d^I&hD)fo?gP8zDHhr3H zuy4r$3L&y2i;zM(4aFl$;J)9H9w_J4uDp!m;E~KR$Av~k22Cl_TrPfKlf&0(0x$#( z4>$sxjBD4{z=L8(ewC&x>z@4@%!l|Xe1+u6r`-oI-E;bRk;cVRyjLSGl48&uNz@8b zbaetu($yH{=m)-25TiY;O|*Ol;G+n~OEk%?OfiuWB#bOGMlA!1@Hjxx<_}tEhULjC zHfehU$q8Q@vQ|w8s}jGPC@ONJD^bFGL|UaR^WMEokhp@I~s?1VFtm-*&Si zUS>Ucm;Lajx+|jTIT*7rH0^tskM{;Nt}5A_h9)cyzkRIdHp&C_+r8S3W{i=FJ8v^9 zPtSq*PQgmm@p}+^gwG_Age~D)>ohWR9>M!Kb3?aKKLR!%9!x>Z_P~JiuR^c!!iiE# ziJAE{+qV^4J3~_koxK8}d>J~*ake=J)p=Zk4!{5XQP!Hq;9^+adc6(N92KdlKuGRp zTknGn;SW!tU`C2w^D%liP=ihSfHO(3_U9*uA0HSCKx_?&iHcv{5^?TygSh6xB}{lR zeZf>RP)*l0dmGU4X%b-D3w+si8;y0_rTBd_*T{U=m8GZt2OAbhS67?1Gm;OgNUN3m zS_Y#DNQG&y9ib7=Xv4&&agS8CK|aYTPUo-f%MMxEPVYwv*xG#UOa-(8;?6I2$^`jb z7&e@Qhpu8TXsL@tUAko!*L^1led}pEqhl&tFzE4%C0V(uw*ASRAuX2JD8=nXyo7WN z9E5wPNa=HIX%g0nFLu95APRx{v?m`$wT((Ya~y>04yBGAAfvp`LDsL^hmM`K3VZpH zdNVGYUyW_^-%r?Jx1hs-*Bhu|d$hh~uCSdGbfCr{e_NdGC~RS(P(smRFnc#u0Hy^D zjZrP&N|Oy@pY1(Jmk)lplka|Jzlj*+H$n95 z;}|myXbs6pQM@UE)I8d#+sp;@fk%DKW z=fYQK>Re#L+In?|1D)&z&UmeprICgCv6J?2M`T#FY{Ic%w93qN3hAUAt} zil@Qe!L{2AQiuaEtM7D>w#;h$kYk;5W7AH*?CP;&l<1Frr#hJir^aAzLxQjqHjCdM zRcIoAG2{_+&n;4x7dSvw3MrGWO#*BlKdN+r>^P{-TjyXBILNWLseo{xxMc-!dXfqzaTG?AbppZGwq42G(IlBM$*yENGH6~rFoNJFgu`BfQho8$)!m@eVE&x*t+|jhv8nJpvC!&t?-r=Uk zPdYUicuy++LgMXF0iH7)g$dMs89rD=uTUtR{|J-#Q%0iXQrk}NI zcR$e$+8UX^6Rz3CF!?sX>Icd>{G-5Ln5UBEShRLi;_sSZC}7+>3gHEiJH zn@klAExg@iHrLB!h&p4V@UOqHU2LhAdpH}7c%H!I{rA?Z+XL-!94^%g=^hi&Ls`-C zmI3N}1iMt{SP!L{GSxQlp5u&5{cUK;+PiQLL*ivAm%wgRqe#WDE`RuLh3Z17xTdCN zMcc?GBtQ9xNc3JcS^*iG*pqVc9+DLi9v_;3FidV%l-#Fw@Mu5bSL@j5gTwu$0dM3? zeSkes$3YXo9&%|C5lw?{1OzjgEdAz^nK%@K@1}^_s_)glVBW}NGIwjC&)fly_Y@Ky z5niwYg%Vu_G-d<;pZ2~ps;R9BTahXvT#<4?2#AP+5K)TMfCWTKR8*t|6cGXn(t9vA zkg6i!rK*&m2uQC1lqR5w^qxrX1PGxeA>Z-(>b+=ue}3!z))#)AwOBiQ&OS5GJTtTR z?1~ykydQz8;M)FSYE4^a=dMbx1Eb6U5i85C&M;}XfbS1!mIG!=_0svtratl_Bb)`2 zrAEt*9)Hb5180SA7U4dh60kat4%L86y7|o{Vbq7EW;JP;^0}|6+&lh3es+=mQd9uw zT6!cg^jWT!@*h04*muvr;uA?s6MXRKmG`R!14Vu59-XE#vX!etlZ9P6C`iA%TiKAZ zNk`_$_(<9fb^3l??7{6c_}DGXcmg@oy|ZT=)0*jz$ib!=8>z~ZCfh1JDTg##PJPwG z&$G;j4BKXP#<({7LuBcGv0xgzJ;-+=XYv_AG*%}PfgUiK?#i)JoeHi2Qhqdt@^O)` zv>Lev1wsVcrwh8975hsK5W7L%SY(bUvBACqp2A(ksF4FCQX*Y$wu^bO?pZsuI#%)a*~&i{tA zYdwDi1cE#jd7DN2{%v_qXz_q-FlF?k1mtmm&mNy|+C`r+>;MAtFqP>in`QnU&Ti*m zAL4u`qyK%X%|gpFGcU-Gz0s%dln(%b512XU5d8q5mWQXd;aR@iZ%~-=!vD4n#uwhC zybP88Zl8ZEi5A0#H=!2;v^K#t1En|lCx%6aV<$r}s zvtMeL{@x2<6P;ru12$#dw=k*@o7RI78~e?R=M*fYb18O8A*EQ0}Bo3j148KA`g zEyf0ye_RA3gZa-|0NDyg29uG&WMnXZxCllDlaaw>Y&87=iHrmQBLTqJJN*wNGBO@N zJmuF12A5`V>Hl{AVS+Ek(DFB@GEhuy8`0^SiiZq^sb}IeJq_YCuUJgwP7J*oKfld5 zGA(xP3whVJ^9~MEOSTC&WW<7<9f#O|IHrF;yk|E65wH8M^ftGRRQ1PRHxR_b@fs$V z50VB}rs3}li*|qTlI~c%))v;3GAi!(&6=wdwukw87?30{S$IBF2{`!kX>m70>!uSY z+U~g_Vy+v^sNZ&`vij~cQz1d-=iB|z;bzHs_=wwzLw)p`Dtt8!V!2l3HUwp|0qe=0 zY?&VJFCR{8;chKB2gVQ#Kzf05!L-wY=x;A%fACAhYK-Xero_#2M-BsFs)O(N#J09D zFR4Or8$+sq5&Dv)1W72N>Jrot?Tdovgq<-?^4@1CvV1z!k!XY+WlKAStvH|voFN)Z z*!GF3GuXN4?Ws*R`yVhv@-Pu#2t+(jM0|Nsl!xPRrtH(egP_m0lt^xyfM&B z(3n}db#JpoTe*p4!n%m}<=IDsS$3ddgvjooO~QVk;c(S<0}w>caASI#Y_GX>4K(eP z(V7o%tb6u7Zu(6!zsjK0EBK4b!V?_?pviSbU1eesaCE0=f5av?`#qOuUCH;%A3qy? z3P-z00E1=n=U0sM3^_6WK7Up0HpGJ|cGOZIn_hhhX_|qf%SR)9;GmB__kTX{_aFI> zXwPz37Iz&Dk7Uuzx3vvlxi7@+Q8wThUTB_>EbrkEx4f9a-!N0Ko2RyT>817v!yPw&2&L`a*q)f*<4h5ZM{1tr)TWW7dGaFcY#|9=$+QnI)t3G!P&Rm zicDiI0!Cu0VE);kBsF?D#``RGuWIE~qa71}lJ{HXe2|&Hm#BZxF!>yzyh}Q>qu9>Y zW@;W~2J6f>nJQg6A{*J`C=Qs$yDLF-#}kXIkNeFKUkHEH|7_qhkK@N$%^Sz3w$}{F z$euNu{S0Th8cTN|bMJNoKT?{)oFCq(4HlTS23+_2ieSR+ge&gIzO6RYXY2Ba?m&5# z*V=x@#tyIj4M8-cxQ)(uc#{MTY?$580kLVVRXx+j#F>s@6N&cSX_1Zis6z(6|FY#C z$$u~PcjMMNjns=xiceQ}4@99?gerW^R;!FoYs7-uCq0Z1V%BgW2**FZ`QHk8*qjN? zn)CQPc*O@R9Vdpklx9Kqqi$uoh+H9*sGtMp5%AVJJCuSAYxH02tI>4^w-ff$m1!T6 zMY&Ij1PjPguvr{Y2$+eF&XI@r%A~XwwB!_BdnT`e_97Bm!&dP6RBjC=Ds6d=`D4Uu z1HpMOKYcHydpx_C?gem*J;-Y@gp?&fg~vrBJ8kn1ycyc}dRJ^A3G zV5iIOvqj9Td-d5L-47P$&_lKLS$Wu);QIzR22!K^oJX_9OGny)X8af*EXl{e(r-QU zK=+E}&UU~3Jb1?!C+TXj2h6&5BWQ>HXHDvh%bsl>b+JV;N|!zR!dps+PVz&KyrM73 z#ImnGe93&`H!WLO`Rx<({K8a-&GL&i4a<&im!_;F4?2{scVu1`7vmws(_1z`SMKr) zuC+icdN@!L-@f|;F8OjZp@D5jrDdY{d8jtC} zNAEn|WfPVdn3`fQ$X6^L(S~EI@6MO|fMGMwNG^b%4A=#mn-QFmopx7y1@D|3RrcBB z_WvVxrzG-$;r>{|V&eV3Y{&0vO!|&SBeYkMo{ii^RTag&!C3P4co1FDH{{OZm3bg` zp6*~rkvwQa8+5rGb*1^{ddI8(vZP3llg|-tpPKFBQe)ud3h~Ds}Vwshn&bbcqoj(3P zCjoJM=@StqsIlJ+7jUxOxzI2b49miMM@=|6hGGPgBQd5}ooNq~lMNqH|Xd^K_*oM|ukkBGLo=^V6p)rY_K6YWM%e5Ki zfp-;;<@tNa@+9Yw6okJnT*fZIaHLJyYc^R8Qk%ma6VE%#4dIz>14U%75nnnkyq|y- z9hy>(6C_0`>1)PkuX+))LPoVcUZ2}9#*=*Rz~9anImpWs4ARus*nIpMX(sSUqO#NE z^C~^F0UAiXW&!SK_4U~ivB?;JfU$$6mKb9=U3vp7ozQDvch+y7$-%<9b0*f&pY_4d z6yi2Ma*$gsik`e*VX| zkA8zesh$s_?$B?Uu%_a-F(?gp7(2>i|epPzjGBJ~ZO9*x$gnL=SV z!_%^wQ_v|AW#vKcne{6C2X^m`>zb#;K;wmGvHkpsVC?Cnk>=tDrH&=!)MBRSSfJUKH+GsJWfN`SbUyF5CAgJ!P_o zqpGDO_s;xu>yU|eHe6LmZBV9yU2$V|i5!K9>|7S-sVb_|i2T`=ogHR^8?7!~cK-N5 zDEZ-FSDaRyS*#E5iNenau^|f&z8$K2<4Am% z6s?Oq;~&X9L|ipIBK3=qLc1?Vfrl*a)^vKvF_*c?b4FzpRQJ+EIciOOKWY4?f1oR% zN6FKpiYh<<+_$&LC;%v6nn^X0zW)~M0@SP&28*JvhR8FV?7-wK>Ws;M3TytqU3Qf} z?7LSD&nf#JH@be*zs+8-GJAJZ^wkv80+%r1FP6bJq|)q? zHgfew-CpJ){lmL|wYk?OU&doCgsiCR%B*|7^p_Hc7HM9#3&b>V(jN_h>&DxPjP16V*Q`B{HU24f}K6IdDcD=CC@xI7{kEJQ`ryfAe?7*~1eskga8^Z#&`6?q{ z?hbX^Xo|+)EQ71l-g7PlL2v>BG%_|%smsF8GE7)mu5uNMvh&!^{6PA11vAzAnbdkug(MT(ecHPmJ)WwGEu%+P%uow>>f0FBG zc)qO_&F=2$S#LTXLwFN__rvqzsmsdwe>edh`CO_u$aToZ@q4_`h$WWn$pr$0>a%C1 z(dKH(!f<|3+Wmrod@Lpmm4w(|R#tws{ASU^tYVz1nOU5EyzS`n^0K#6C$VQOJ>EdN z@<36chpGDF2MKv%>G;+BPfDS{%?L{Mk@&-o#joGe)oy@z zm3r+j7GLY)mo?kdmJW^V$sa!{-pHD_P%qrzR6e&0xS$f#d*Dry*1$79u&C^EYsa6V z;6RfePBXP}h-hl%|(2l=DlLPT37aQOL*jLUC7LJ+=-R}oSCNvRElZA$IQ@8{3lFhA2ImySXVS$f#!$J?YSObf8S~? zHmNNy5NNxZvrn1gvXDriie*;OHrV!Z^~Z{G3dn`zST2Q^04+83GxHbOa5UWN6pPiQ zz$570u^`YIw`uvSs)~XVUK$%@hV}%b0HvZdeQvaOb=l48b4D7)^V=l`z7R_rh*%3rhc)}o%?EyStpxvj#l{0))sKP)vo zh1FztRxNWrMktRf-Ru9&ROqix< z-k+us>z}C*OG{>2lN*3Wx9b+O8q`q$`(=x9o#yAxpCPuRUb#f5Q{F!5<*P#_`KoFn zKBDpx$pONt<--uS_YYm>daR`9CJ261d?hJyb)gP2Yo3@GNFYO`V`vLcqw-bnzuOEzhW^sX&(~09d zz0oMwlZ(SzWyWa2RK1?uk>eYEC7CB_$(v0z|0DRjemk4raOlV>^#eob@v zp$#Ba`P>o7^Ci5=dP>~T}9~_wbfp|S=6J7TS@ZL zwag=Kbm9m2BQ=)2bKyc^P~*i^h`}*fl~z}#Thvq8s12O9xK1VM<%F;8^*lFnjD6tL z*hpO}7`=fp8O9u9Po|vxjJ~10+f3=S@ALo~UovW*a#T+upYjk%o014v3K8@7a!0S9 z-#sNv!!?9xr@?OsDdF7B|y%t4WY`%d}N-b;MC59!wOZ|G-}2#|NQJc8j1 zgufk9fgi4tp}vz)Ip3uY0&swyb80WC)+dg~ezGPuMm1xCd>2s=h@iPs?x}^MyWE;@ zOQtJOkyugMU)_FH+x(0|;dYn!f}z4NKT>pE#SGjB?&#=0Vw3#g&fp|w*`1Q6f(Ndd zTF(P9Y5Kjl8~S+ENZ%PO+J=Jg2Z^k`NNOwDco097$_p`9hZ09=%~h~RmVG|si9;dH zfqzPvn}v8JYtD5a8;eSgfIv$2&g#Wg>WFC$`&!;FVnguA2Em^7_X&?=`_=HvU&Uhi zAT1rDK>QRu+LjZ%Z08(kiS;&rgP$s0pYiDp|Vhp4uDG z_{QcIlV>eAMo;FKPzbr5Jxt`NQlB=?%ZoC#Ln>f!@+ekQ7(Nw$Ka{_2s4g@Lo4H`+ z)gSHA7d@k8)sfr$^dMCZnp6Qdwd~8YwH@cypxpA@7*i(v$;CyjaYH3g){aR!c9>6) zYpOfCHugJ}Opf7L^m@dAvQ1xh+jE!KQlQv{U$ztG4YF@ zZ|q}dvQ7bxnp4-VC_``|p)dp3neqU5^r9HcIt?7~NZH}%UYJ1I(b|yHAmNyJQld)! z>N83Gn3L;y9q!}n(;BT?C}0#!6i+E8JROAxYEW;!eYZ|^5^hm=X=MqmtB8d)AugPr zF6wn?PSU@-zS06mmru3{xB4&Sc&IOoM7acOQ5@ybV1d-&Y3K?)11m&?%q>f5T)ewld^lK1 z(om?mN?*fdJ68aLed+)$G%U$;!;%bm3P*fD@2`BH_28{9TgeTIU9i}~N`R)=5YV_M zi7T?|&nhyOPJmQYGc|{ojE8HnNoUmq2kQg?#An;{)@l!J5?Yr8v?^tphORZV4W-9B zH_m}D?|rAk!#^qYDR3^+M!`_7SLE>eNU$T&G&Sd7^B-28EsYMG?aps+wmVnoc48N$ z5XLcg(c|wI8v+wkv(_%RhsS+3zSw^dzd#}66I+i{S!lkYHT9>y)3-6!d zpFQd{;q}U?-_zDZ1dOxtoJ)0Of_0jy_(6Zk`S5siA@A-~fBxoFSv)mvpYpnvuHBP1 zsvm@Mt|v{y6R)90s{ze5H^B!h+%O^3i zA9$vBu4+RGT`UQ966wvR;LN)&y>e==EhJ@xKu{Fn^9zG?BFZgD7!qjqTdS8$vv59j zUX`dnUJG1VBiCB(gMB>b30W?|)}mLI=Z+h-O4N47Y%RHwW-Z+ zcv@`8G%tboJhynh{fWqIqdv5pUo*CF+Ix`OR7F-{AJ{m{+?n_$+XoNU8JKv%lFAtl z)T+pVNlQmdyP*IyKOrVdnom#XBg$hwHaB&g2QW@+n4eAeO093lkqSlCoj?`zKn~_t zWxr(dg_x`+4qUqzGn1AD50pxDbqE7^^^GI&^A*SZmTzxe0xkq|ZSPuP-H%_4QI6#r zT?$;kY60B)BM;m|Spx9-rggC6u`nr+`qYQjS(5TetkZHIZ91YG=!d;`V2w5s_NTm; zlh6DTmEh;Ryc82NR&>-kiYzuLY<-Q z6)S&!_yBT=CCidCDZGqSY}TU5Q5Nal_E7$6Wx2JUy2oSDU=7@I=ZRrqtE#sJ(ye}h0Ue3}XMD&j zRSSLcJmAIQ+SuDMq?v1tvZ#|?Ljuj>Q$jC4=V|Yb!+#dGp!tO^qn!1az6d-mhGKd* z{9UTbj@#(--vb-kw&e_N;Y$P?60&AF=2tpv^VkrAi9}JkSFa+j0(5gPbxEUDLG6AF ziF|2%%0f)jq#1tX=ZrPde|sue8ci{YtrNhiOSFm+wRFo)Yyb(F$mwjfv}ZShjEt*| z#X`V9-{t~DK&o164tl+*+p`b1r!PD_+%}*+I+c1F{B*8}0Kc3e!(B|$fcBxUph-h{ z`hlXL^)HV#ifw7>TUV2Emp(<}+a@w3B7+GCa(v^SX197&R~s2hec$NP9Nwk7UULGU zQu$&9%*-kjh+m#w_wky>4|QZ}KC2KUtp{gEkM}{niidu6q8-@p3tJs|J^WRs29RDiqdXl*PFkAHC-^Kp zz+F(Uv!n#5ncmmNr*Fe0E10>~aI|O=F&q5bB2ZR2ist7gj3VMh(8#~5CrD|&XNu&} zp%43^LMCYv3WxroIXPC(TWNvH0b3_|q3Ljov3kHUUiIIVig#%c*~`_*J$l;8p=`CI zuI{#nP<3`~OK;hsv5$$oq5QHDT*`Y)3<{4vwVavMH?@jeIqxz~zQ@5E5^&+F=r#?v z4RLDV0l~oWFl5}$GN%?v@{Y3EIQwT~cbvONWY1L%M(A0WYpBBf#Z<>A2RWp{przpu z@WsTp=6P)hBX1!zUZpb-QGanxww|bID%1|81qb&*aR9eTtu2 zH;`+J>IJ#U(%1o-S)};@A%D+8j^vE$uZf$B9I0xhUO0Hekevss5`ywTk0-FEWAbVt z!H`%9TsIn%Q=Yuk5cFbW%R(7wtbPKf3hAY}+AI)#RYJBB_t|S&03u-bZ(X$u$}BHT z);9IpvW2Zk@1*vHKIozV(?B9;7jPTbQo&+X^sCQe>M_4Wf8Rpmk&9YlnmIC#u%FfW zo5W|o29FnWcd-7Z<-HFdPcU}6DNf**7yNs^3-^Jn{l!Cfwdq!lZ)?GT>JPCjZ;bBV zK44c9uo1_Kui2W1zHpCBfKqNn_8Xtgwf^s-XkBCnlKyo^1iv<1|G~Zfd0@Qy|Mjo# zp!@u6Mq;iI9LMaxwpjEs`Y-Iay3qABjp&~>^lUy;I2Tu4Zn3O$PLGP9_s#7<1ut8P z&8hvOE!gV&sd!@VV`=@40<02a`=se$rmq4yI zy(vWfvYprAlJ(3)jJ?B+VB4Fs@{Y^R;$l|$`lfE%oO?$nGC;)vpThfYXX=VkH&XE_ zg#m9?)m|1-FJOO3Nb_XCkz8FMkwD9NheOVU(@YEcp~-PckKS>YYc;=JDS27*wOrV# zhIxpIO}01z{d^O~0%Wh(sjq5*k|c)*_SfoRiPnh|0S0@jV26AQ6=RCzB9|i~Cg!pi z^#0s<%kidBV7)WEXP=IUC;U*dl45UisVv6_?CJX1X5|~9vE>ol8?DaW5P+-3ote2u z7~CC9csvjO#UQF5v9u~EPBv&i (V^40h!v0jw<^Rmd;QflWXm`Khp4*dg8aV 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 diff --git a/13.0/index.html b/13.0/index.html index 14215dea..694e6f01 100644 --- a/13.0/index.html +++ b/13.0/index.html @@ -2306,7 +2306,7 @@
  • - + diff --git a/13.0/introduction/components/index.html b/13.0/introduction/components/index.html index 8aab76b1..2f470ec3 100644 --- a/13.0/introduction/components/index.html +++ b/13.0/introduction/components/index.html @@ -2258,7 +2258,7 @@
  • - + diff --git a/13.0/introduction/contribution/index.html b/13.0/introduction/contribution/index.html index 76a061c7..3b2e4f12 100644 --- a/13.0/introduction/contribution/index.html +++ b/13.0/introduction/contribution/index.html @@ -2317,7 +2317,7 @@
  • - + diff --git a/13.0/introduction/file_permission_management/index.html b/13.0/introduction/file_permission_management/index.html index ba351641..4f2df822 100644 --- a/13.0/introduction/file_permission_management/index.html +++ b/13.0/introduction/file_permission_management/index.html @@ -2308,7 +2308,7 @@
  • - + diff --git a/13.0/introduction/roadmap/index.html b/13.0/introduction/roadmap/index.html index acb699df..191b2a6f 100644 --- a/13.0/introduction/roadmap/index.html +++ b/13.0/introduction/roadmap/index.html @@ -2258,7 +2258,7 @@
  • - + diff --git a/13.0/repo/docker/face-embedding/cpu.yml b/13.0/repo/docker/face-embedding/cpu.yml new file mode 100644 index 00000000..48724782 --- /dev/null +++ b/13.0/repo/docker/face-embedding/cpu.yml @@ -0,0 +1,16 @@ +services: + face-embedding: + image: ${FACE_EMBEDDING_IMAGE:-seafileltd/face-embedding:latest-cpu} + container_name: face-embedding + # ports: + # - 8886:8886 + volumes: + - ${FACE_EMBEDDING_VOLUME:-/opt/face_embedding}/models:/models + - ${FACE_EMBEDDING_VOLUME:-/opt/face_embedding}/logs:/logs + environment: + - FACE_EMBEDDING_SERVICE_KEY=${FACE_EMBEDDING_SERVICE_KEY:-${JWT_PRIVATE_KEY:?JWT_PRIVATE_KEY is not set or empty}} + networks: + - seafile-net +networks: + seafile-net: + name: seafile-net diff --git a/13.0/repo/docker/face-embedding/cuda.yml b/13.0/repo/docker/face-embedding/cuda.yml new file mode 100644 index 00000000..6d019335 --- /dev/null +++ b/13.0/repo/docker/face-embedding/cuda.yml @@ -0,0 +1,26 @@ +services: + face-embedding: + image: ${FACE_EMBEDDING_IMAGE:-seafileltd/face-embedding:latest-cuda} + container_name: face-embedding + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: all + capabilities: [gpu] + # ports: + # - 8886:8886 + devices: + - "/dev/dri:/dev/dri" + volumes: + - ${FACE_EMBEDDING_VOLUME:-/opt/face_embedding}/models:/models + - ${FACE_EMBEDDING_VOLUME:-/opt/face_embedding}/logs:/logs + environment: + - FACE_EMBEDDING_SERVICE_KEY=${FACE_EMBEDDING_SERVICE_KEY:-${JWT_PRIVATE_KEY:?Variable is not set or empty}} + networks: + - seafile-net + +networks: + seafile-net: + name: seafile-net diff --git a/13.0/repo/docker/face-embedding/rocm.yml b/13.0/repo/docker/face-embedding/rocm.yml new file mode 100644 index 00000000..261bebcf --- /dev/null +++ b/13.0/repo/docker/face-embedding/rocm.yml @@ -0,0 +1,19 @@ +services: + face-embedding: + image: ${FACE_EMBEDDING_IMAGE:-seafileltd/face-embedding:latest-rocm} + container_name: face-embedding + ports: + - 8886:8886 + devices: + - "/dev/kfd:/dev/kfd" + volumes: + - ${FACE_EMBEDDING_VOLUME:-/opt/face_embedding}/models:/models + - ${FACE_EMBEDDING_VOLUME:-/opt/face_embedding}/logs:/logs + environment: + - FACE_EMBEDDING_SERVICE_KEY=${FACE_EMBEDDING_SERVICE_KEY:-${JWT_PRIVATE_KEY:?Variable is not set or empty}} + networks: + - seafile-net + +networks: + seafile-net: + name: seafile-net diff --git a/13.0/repo/docker/seadoc/0.8/docker-compose.yml b/13.0/repo/docker/seadoc/0.8/docker-compose.yml deleted file mode 100644 index 726e086f..00000000 --- a/13.0/repo/docker/seadoc/0.8/docker-compose.yml +++ /dev/null @@ -1,22 +0,0 @@ -services: - - sdoc-server: - image: seafileltd/sdoc-server:0.8.0 - container_name: sdoc-server - ports: - - 80:80 - # - 443:443 - # - 7070:7070 - # - 8888:8888 - volumes: - - /opt/seadoc-data/:/shared - environment: - - DB_HOST=192.168.0.2 - - DB_PORT=3306 - - DB_USER=user - - DB_PASSWD=password # Required, password of MySQL service. - - DB_NAME=sdoc_db - - TIME_ZONE=Etc/UTC # Optional, default is UTC. Should be uncomment and set to your local time zone. - - SDOC_SERVER_LETSENCRYPT=false # Whether to use https or not. - - SDOC_SERVER_HOSTNAME=sdoc-server.example.com # Specifies your host name if https is enabled. - - SEAHUB_SERVICE_URL=http://seafile.example.com diff --git a/13.0/repo/docker/seafile-ai.yml b/13.0/repo/docker/seafile-ai.yml index b120153b..dd9f163e 100644 --- a/13.0/repo/docker/seafile-ai.yml +++ b/13.0/repo/docker/seafile-ai.yml @@ -5,23 +5,19 @@ services: volumes: - ${SEAFILE_VOLUME:-/opt/seafile-data}:/shared # ports: - # - 8888:8888 + # - 8888:8888 environment: - - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty} - - IMAGE_TAGS_SERVICE_KEY=${IMAGE_TAGS_SERVICE_KEY:-} - - FACE_EMBEDDING_SERVICE_KEY=${FACE_EMBEDDING_SERVICE_KEY:-} - - OCR_SERVICE_KEY=${OCR_SERVICE_KEY:-} - - SEAFILE_AI_LLM_TYPE=${SEAFILE_AI_LLM_TYPE:-open-ai} - - SEAFILE_AI_LLM_URL=$SEAFILE_AI_LLM_URL - - SEAFILE_AI_LLM_KEY=$SEAFILE_AI_LLM_KEY - - IMAGE_TAGS_SERVICE_URL=${IMAGE_TAGS_SERVICE_URL:-http://image-tags:8885} + - SEAFILE_AI_LLM_TYPE=${SEAFILE_AI_LLM_TYPE:-openai} + - SEAFILE_AI_LLM_URL=${SEAFILE_AI_LLM_URL:-} + - SEAFILE_AI_LLM_KEY=${SEAFILE_AI_LLM_KEY:-} - FACE_EMBEDDING_SERVICE_URL=${FACE_EMBEDDING_SERVICE_URL:-http://face-embedding:8886} - - OCR_SERVICE_URL=${OCR_SERVICE_URL:-http://ocr:8887} - - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty} - - SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL:-http} + - FACE_EMBEDDING_SERVICE_KEY=${FACE_EMBEDDING_SERVICE_KEY:-${JWT_PRIVATE_KEY:?Variable is not set or empty}} + - SEAFILE_SERVER_URL=${SEAFILE_SERVER_URL:-http://seafile} + - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty} + - SEAFILE_AI_LOG_LEVEL=${SEAFILE_AI_LOG_LEVEL:-info} networks: - seafile-net networks: seafile-net: - name: seafile-net \ No newline at end of file + name: seafile-net diff --git a/13.0/search/search_index.json b/13.0/search/search_index.json index 8f77caba..40eadd35 100644 --- a/13.0/search/search_index.json +++ b/13.0/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"

    Seafile 13.0

    Our document of Seafile 13.0 is still in progress, the updates of some key components have not been completed yet. Please refer to Seafile 12.0 for more stable support.

    Seafile is an open source cloud storage system for file sync, share and document collaboration. SeaDoc is an extension of Seafile that providing a lightweight online collaborative document feature.

    "},{"location":"#license","title":"LICENSE","text":"

    The different components of Seafile project are released under different licenses:

    • Seafile iOS client: Apache License v2
    • Seafile Android client: GPLv3
    • Desktop syncing client: GPLv2
    • Seafile Server core: AGPLv3
    • Seahub (Seafile server Web UI): Apache License v2
    "},{"location":"#contact-information","title":"Contact information","text":"
    • Twitter: @seafile https://twitter.com/seafile
    • Forum: https://forum.seafile.com
    "},{"location":"changelog/","title":"Changelog","text":""},{"location":"changelog/#changelogs","title":"Changelogs","text":"
    • Seafile Community Edition
    • Seafile Professional Edition
    • Seafile Sync Client
    • Seafile Drive Client (SeaDrive)
    • Seafile Android Client (Seadroid)
    • Seafile iOS Client
    "},{"location":"administration/","title":"Administration","text":""},{"location":"administration/#enter-the-admin-panel","title":"Enter the admin panel","text":"

    As the system admin, you can enter the admin panel by click System Admin in the popup of avatar.

    "},{"location":"administration/#account-management","title":"Account management","text":"
    • Account management
    "},{"location":"administration/#logs","title":"Logs","text":"
    • The location of log files
    "},{"location":"administration/#backup-and-recovery","title":"Backup and Recovery","text":"

    Backup and recovery:

    • Backup and recovery

    Recover corrupt files after server hard shutdown or system crash:

    • Seafile FSCK

    You can run Seafile GC to remove unused files:

    • Seafile GC
    "},{"location":"administration/#clean-database","title":"Clean database","text":"
    • Clean database
    "},{"location":"administration/#export-report","title":"Export report","text":"
    • Export report
    "},{"location":"administration/account/","title":"Account Management","text":""},{"location":"administration/account/#user-management","title":"User Management","text":"

    When you setup seahub website, you should have setup a admin account. After you logged in a admin, you may add/delete users and file libraries.

    "},{"location":"administration/account/#how-to-change-a-users-id","title":"How to change a user's ID","text":"

    Since version 11.0, if you need to change a user's external ID, you can manually modify database table social_auth_usersocialauth to map the new external ID to internal ID.

    "},{"location":"administration/account/#resetting-user-password","title":"Resetting User Password","text":"

    Administrator can reset password for a user in \"System Admin\" page.

    In a private server, the default settings doesn't support users to reset their password by email. If you want to enable this, you have first to set up notification email.

    "},{"location":"administration/account/#forgot-admin-account-or-password","title":"Forgot Admin Account or Password?","text":"

    You may run reset-admin.sh script under seafile-server-latest directory. This script would help you reset the admin account and password. Your data will not be deleted from the admin account, this only unlocks and changes the password for the admin account.

    Tip

    Enter into the docker image, then go to /opt/seafile/seafile-server-latest

    "},{"location":"administration/account/#user-quota-notice","title":"User Quota Notice","text":"

    Under the seafile-server-latest directory, run ./seahub.sh python-env python seahub/manage.py check_user_quota , when the user quota exceeds 90%, an email will be sent. If you want to enable this, you have first to set up notification email.

    "},{"location":"administration/auditing/","title":"Access log and auditing (Pro)","text":"

    In the Pro Edition, Seafile offers four audit logs in system admin panel:

    • Login log
    • File access log (including access to shared files)
    • File update log
    • Permission change log

    The audit log data is saved in seahub_db.

    "},{"location":"administration/backup_recovery/","title":"Backup and Recovery","text":""},{"location":"administration/backup_recovery/#overview","title":"Overview","text":"

    There are generally two parts of data to backup

    • Seafile library data
    • Databases

    There are 3 databases:

    • ccnet_db: contains user and group information
    • seafile_db: contains library metadata
    • seahub_db: contains tables used by the web front end (seahub)
    "},{"location":"administration/backup_recovery/#backup-steps","title":"Backup steps","text":"

    The backup is a two step procedure:

    1. Backup the databases;
    2. Backup the seafile data directory;
    "},{"location":"administration/backup_recovery/#backup-order-database-first-or-data-directory-first","title":"Backup Order: Database First or Data Directory First","text":"
    • backup data directory first, SQL later: When you're backing up data directory, some new objects are written and they're not backed up. Those new objects may be referenced in SQL database. So when you restore, some records in the database cannot find its object. So the library is corrupted.
    • backup SQL first, data directory later: Since you backup database first, all records in the database have valid objects to be referenced. So the libraries won't be corrupted. But new objects written to storage when you're backing up are not referenced by database records. So some libraries are out of date. When you restore, some new data are lost.

    The second sequence is better in the sense that it avoids library corruption. Like other backup solutions, some new data can be lost in recovery. There is always a backup window. However, if your storage backup mechanism can finish quickly enough, using the first sequence can retain more data.

    We assume your seafile data directory is in /opt/seafile for binary package based deployment (or /opt/seafile-data for docker based deployment). And you want to backup to /backup directory. The /backup can be an NFS or Windows share mount exported by another machine, or just an external disk. You can create a layout similar to the following in /backup directory:

    /backup\n---- databases/  contains database backup files\n---- data/  contains backups of the data directory\n
    "},{"location":"administration/backup_recovery/#backup-and-restore-for-binary-package-based-deployment","title":"Backup and restore for binary package based deployment","text":""},{"location":"administration/backup_recovery/#backing-up-databases","title":"Backing up Databases","text":"

    It's recommended to backup the database to a separate file each time. Don't overwrite older database backups for at least a week.

    Assume your database names are ccnet_db, seafile_db and seahub_db. mysqldump automatically locks the tables so you don't need to stop Seafile server when backing up MySQL databases. Since the database tables are usually very small, it won't take long to dump.

    mysqldump -h [mysqlhost] -u[username] -p[password] --opt ccnet_db > /backup/databases/ccnet_db.sql.`date +\"%Y-%m-%d-%H-%M-%S\"`\n\nmysqldump -h [mysqlhost] -u[username] -p[password] --opt seafile_db > /backup/databases/seafile_db.sql.`date +\"%Y-%m-%d-%H-%M-%S\"`\n\nmysqldump -h [mysqlhost] -u[username] -p[password] --opt seahub_db > /backup/databases/seahub_db.sql.`date +\"%Y-%m-%d-%H-%M-%S\"`\n

    mysqldump: command not found

    You may encounter this problem on some machines with a minimal (from 10.5) or a newer (from 11.0) Mariadb server installed, of which the mysql* series of commands have been gradually deprecated. If you encounter this error, use the mariadb-dump command, such as:

    mariadb-dump -h [mysqlhost] -u[username] -p[password] --opt ccnet_db > /backup/databases/ccnet_db.sql.`date +\"%Y-%m-%d-%H-%M-%S\"`\n\nmariadb-dump -h [mysqlhost] -u[username] -p[password] --opt seafile_db > /backup/databases/seafile_db.sql.`date +\"%Y-%m-%d-%H-%M-%S\"`\n\nmariadb-dump -h [mysqlhost] -u[username] -p[password] --opt seahub_db > /backup/databases/seahub_db.sql.`date +\"%Y-%m-%d-%H-%M-%S\"`\n
    "},{"location":"administration/backup_recovery/#backing-up-seafile-library-data","title":"Backing up Seafile library data","text":"

    The data files are all stored in the /opt/seafile directory, so just back up the whole directory. You can directly copy the whole directory to the backup destination, or you can use rsync to do incremental backup.

    To directly copy the whole data directory,

    cp -R /opt/seafile /backup/data/seafile-`date +\"%Y-%m-%d-%H-%M-%S\"`\n

    This produces a separate copy of the data directory each time. You can delete older backup copies after a new one is completed.

    If you have a lot of data, copying the whole data directory would take long. You can use rsync to do incremental backup.

    rsync -az /opt/seafile /backup/data\n

    This command backup the data directory to /backup/data/seafile.

    "},{"location":"administration/backup_recovery/#restore-from-backup","title":"Restore from backup","text":"

    Now supposed your primary seafile server is broken, you're switching to a new machine. Using the backup data to restore your Seafile instance:

    1. Copy /backup/data/seafile to the new machine. Let's assume the seafile deployment location new machine is also /opt/seafile.
    2. Restore the database.
    3. Since database and data are backed up separately, they may become a little inconsistent with each other. To correct the potential inconsistency, run seaf-fsck tool to check data integrity on the new machine. See seaf-fsck documentation.
    "},{"location":"administration/backup_recovery/#restore-the-databases","title":"Restore the databases","text":"

    Now with the latest valid database backup files at hand, you can restore them.

    mysql -u[username] -p[password] ccnet_db < ccnet_db.sql.2013-10-19-16-00-05\nmysql -u[username] -p[password] seafile_db < seafile_db.sql.2013-10-19-16-00-20\nmysql -u[username] -p[password] seahub_db < seahub_db.sql.2013-10-19-16-01-05\n

    mysql: command not found

    You may encounter this problem on some machines with a minimal (from 10.5) or a newer (from 11.0) Mariadb server installed, of which the mysql* series of commands have been gradually deprecated. If you encounter this error, use the mariadb command, such as:

    mariadb -u[username] -p[password] ccnet_db < ccnet_db.sql.2013-10-19-16-00-05\nmariadb -u[username] -p[password] seafile_db < seafile_db.sql.2013-10-19-16-00-20\nmariadb -u[username] -p[password] seahub_db < seahub_db.sql.2013-10-19-16-01-05\n
    "},{"location":"administration/backup_recovery/#backup-and-restore-for-docker-based-deployment","title":"Backup and restore for Docker based deployment","text":""},{"location":"administration/backup_recovery/#structure","title":"Structure","text":"

    We assume your seafile volumns path is in /opt/seafile-data. And you want to backup to /backup directory.

    The data files to be backed up:

    /opt/seafile-data/seafile/conf  # configuration files\n/opt/seafile-data/seafile/seafile-data # data of seafile\n/opt/seafile-data/seafile/seahub-data # data of seahub\n
    "},{"location":"administration/backup_recovery/#backing-up-database","title":"Backing up Database","text":"
    # It's recommended to backup the database to a separate file each time. Don't overwrite older database backups for at least a week.\ncd /backup/databases\ndocker exec -it seafile-mysql mariadb-dump  -u[username] -p[password] --opt ccnet_db > ccnet_db.sql\ndocker exec -it seafile-mysql mariadb-dump  -u[username] -p[password] --opt seafile_db > seafile_db.sql\ndocker exec -it seafile-mysql mariadb-dump  -u[username] -p[password] --opt seahub_db > seahub_db.sql\n

    Tip

    The default image of database is Mariadb 10.11 from Seafile 12, you may not be able to find these commands in the container (such as mysqldump: command not found), since commands of mysql* series have been gradually deprecated. So we recommend that you use the mariadb* series of commands.

    However, if you still use the MySQL docker image, you should continue to use mysqldump here:

    docker exec -it seafile-mysql mysqldump  -u[username] -p[password] --opt ccnet_db > ccnet_db.sql\ndocker exec -it seafile-mysql mysqldump  -u[username] -p[password] --opt seafile_db > seafile_db.sql\ndocker exec -it seafile-mysql mysqldump  -u[username] -p[password] --opt seahub_db > seahub_db.sql\n
    "},{"location":"administration/backup_recovery/#backing-up-seafile-library-data_1","title":"Backing up Seafile library data","text":""},{"location":"administration/backup_recovery/#to-directly-copy-the-whole-data-directory","title":"To directly copy the whole data directory","text":"
    cp -R /opt/seafile-data/seafile /backup/data/\n
    "},{"location":"administration/backup_recovery/#use-rsync-to-do-incremental-backup","title":"Use rsync to do incremental backup","text":"
    rsync -az /opt/seafile-data/seafile /backup/data/\n
    "},{"location":"administration/backup_recovery/#recovery","title":"Recovery","text":""},{"location":"administration/backup_recovery/#restore-the-databases_1","title":"Restore the databases","text":"
    docker cp /backup/databases/ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql\ndocker cp /backup/databases/seafile_db.sql seafile-mysql:/tmp/seafile_db.sql\ndocker cp /backup/databases/seahub_db.sql seafile-mysql:/tmp/seahub_db.sql\n\ndocker exec -it seafile-mysql /bin/sh -c \"mariadb -u[username] -p[password] ccnet_db < /tmp/ccnet_db.sql\"\ndocker exec -it seafile-mysql /bin/sh -c \"mariadb -u[username] -p[password] seafile_db < /tmp/seafile_db.sql\"\ndocker exec -it seafile-mysql /bin/sh -c \"mariadb -u[username] -p[password] seahub_db < /tmp/seahub_db.sql\"\n

    Tip

    The default image of database is Mariadb 10.11 from Seafile 12, you may not be able to find these commands in the container (such as mysql: command not found), since commands of mysql* series have been gradually deprecated. So we recommend that you use the mariadb* series of commands.

    However, if you still use the MySQL docker image, you should continue to use mysql here:

    docker exec -it seafile-mysql /bin/sh -c \"mysql -u[username] -p[password] ccnet_db < /tmp/ccnet_db.sql\"\ndocker exec -it seafile-mysql /bin/sh -c \"mysql -u[username] -p[password] seafile_db < /tmp/seafile_db.sql\"\ndocker exec -it seafile-mysql /bin/sh -c \"mysql -u[username] -p[password] seahub_db < /tmp/seahub_db.sql\"\n
    "},{"location":"administration/backup_recovery/#restore-the-seafile-data","title":"Restore the seafile data","text":"
    cp -R /backup/data/* /opt/seafile-data/seafile/\n
    "},{"location":"administration/clean_database/","title":"Clean Database","text":""},{"location":"administration/clean_database/#session","title":"Session","text":"

    Use the following command to clear expired session records in Seahub database:

    cd seafile-server-latest\n./seahub.sh python-env python3 seahub/manage.py clearsessions\n

    Tip

    Enter into the docker image, then go to /opt/seafile/seafile-server-latest

    "},{"location":"administration/clean_database/#use-clean_db_records-command-to-clean-seahub_db","title":"Use clean_db_records command to clean seahub_db","text":"

    Use the following command to simultaneously clean up table records of Activity, sysadmin_extra_userloginlog, FileAudit, FileUpdate, FileHistory, PermAudit, FileTrash 90 days ago:

    ./seahub.sh python-env python3 seahub/manage.py clean_db_records\n

    You can also clean these tables manually if you like as following.

    "},{"location":"administration/clean_database/#activity","title":"Activity","text":"

    Use the following command to clear the activity records:

    use seahub_db;\nDELETE FROM Activity WHERE to_days(now()) - to_days(timestamp) > 90;\nDELETE FROM UserActivity WHERE to_days(now()) - to_days(timestamp) > 90;\n
    "},{"location":"administration/clean_database/#login","title":"Login","text":"

    Use the following command to clean the login records:

    use seahub_db;\nDELETE FROM sysadmin_extra_userloginlog WHERE to_days(now()) - to_days(login_date) > 90;\n
    "},{"location":"administration/clean_database/#file-access","title":"File Access","text":"

    Use the following command to clean the file access records:

    use seahub_db;\nDELETE FROM FileAudit WHERE to_days(now()) - to_days(timestamp) > 90;\n
    "},{"location":"administration/clean_database/#file-update","title":"File Update","text":"

    Use the following command to clean the file update records:

    use seahub_db;\nDELETE FROM FileUpdate WHERE to_days(now()) - to_days(timestamp) > 90;\n
    "},{"location":"administration/clean_database/#permisson","title":"Permisson","text":"

    Use the following command to clean the permission change audit records:

    use seahub_db;\nDELETE FROM PermAudit WHERE to_days(now()) - to_days(timestamp) > 90;\n
    "},{"location":"administration/clean_database/#file-history","title":"File History","text":"

    Use the following command to clean the file history records:

    use seahub_db;\nDELETE FROM FileHistory WHERE to_days(now()) - to_days(timestamp) > 90;\n
    "},{"location":"administration/clean_database/#clean-outdated-library-data","title":"Clean outdated library data","text":"

    Since version 6.2, we offer command to clear outdated library records in Seafile database, e.g. records that are not deleted after a library is deleted. This is because users can restore a deleted library, so we can't delete these records at library deleting time.

    ./seahub.sh python-env python3 seahub/manage.py clear_invalid_repo_data\n

    This command has been improved in version 10.0, including:

    1. It will clear the invalid data in small batch, avoiding consume too much database resource in a short time.

    2. Dry-run mode: if you just want to see how much invalid data can be deleted without actually deleting any data, you can use the dry-run option, e.g.

    ./seahub.sh python-env python3 seahub/manage.py clear_invalid_repo_data --dry-run=true\n
    "},{"location":"administration/clean_database/#clean-library-sync-tokens","title":"Clean library sync tokens","text":"

    There are two tables in Seafile db that are related to library sync tokens.

    • RepoUserToken contains the authentication tokens used for library syncing. Note that a separate token is created for every client (including sync client and SeaDrive.)
    • RepoTokenPeerInfo contains more information about each client token, such as client name, IP address, last sync time etc.

    When you have many sync clients connected to the server, these two tables can have large number of rows. Many of them are no longer actively used. You may clean the tokens that are not used in a recent period, by the following SQL query:

    delete t,i from RepoUserToken t, RepoTokenPeerInfo i where t.token=i.token and sync_time < xxxx;\n

    xxxx is the UNIX timestamp for the time before which tokens will be deleted.

    To be safe, you can first check how many tokens will be removed:

    select * from RepoUserToken t, RepoTokenPeerInfo i where t.token=i.token and sync_time < xxxx;\n
    "},{"location":"administration/export_report/","title":"Export Report","text":"

    Since version 7.0.8 pro, Seafile provides commands to export reports via command line.

    Tip

    Enter into the docker image, then go to /opt/seafile/seafile-server-latest

    "},{"location":"administration/export_report/#export-user-traffic-report","title":"Export User Traffic Report","text":"
    cd seafile-server-latest\n./seahub.sh python-env python3 seahub/manage.py export_user_traffic_report --date 201906\n
    "},{"location":"administration/export_report/#export-user-storage-report","title":"Export User Storage Report","text":"
    cd seafile-server-latest\n./seahub.sh python-env python3 seahub/manage.py export_user_storage_report\n
    "},{"location":"administration/export_report/#export-file-access-log","title":"Export File Access Log","text":"
    cd seafile-server-latest\n./seahub.sh python-env python3 seahub/manage.py export_file_access_log --start-date 2019-06-01 --end-date 2019-07-01\n
    "},{"location":"administration/logs/","title":"Seafile server logs","text":""},{"location":"administration/logs/#log-files-of-seafile-server","title":"Log files of seafile server","text":"
    • seafile.log: logs of seaf-server
    • seahub.log: logs from Django framework
    • fileserver.log: logs of the golang file server component
    • seafevents.log: logs for background tasks and office file conversion
    • seahub_email_sender.log: logs for periodically email sending of background tasks
    "},{"location":"administration/logs/#log-files-for-seafile-background-node-in-cluster-mode","title":"Log files for seafile background node in cluster mode","text":"
    • seafile.log: logs of seaf-server
    • seafevents.log: Empty
    • seafile-background-tasks.log: logs for background tasks and office file convertion
    • seahub_email_sender.log: logs for periodically email sending of background tasks
    "},{"location":"administration/seafile_fsck/","title":"Seafile FSCK","text":"

    On the server side, Seafile stores the files in the libraries in an internal format. Seafile has its own representation of directories and files (similar to Git).

    With default installation, these internal objects are stored in the server's file system directly (such as Ext4, NTFS). But most file systems don't assure the integrity of file contents after a hard shutdown or system crash. So if new Seafile internal objects are being written when the system crashes, they can be corrupt after the system reboots. This will make part of the corresponding library not accessible.

    Warning

    If you store the seafile-data directory in a battery-backed NAS (like EMC or NetApp), or use S3 backend available in the Pro edition, the internal objects won't be corrupt.

    Note

    If your Seafile server is deployed with Docker, make sure you have enter the container before executing the following commands in this manual:

    docker exec -it seafile bash\n

    This is also required for the other scripts in this document.

    We provide a seaf-fsck.sh script to check the integrity of libraries. The seaf-fsck tool accepts the following arguments:

    cd /opt/seafile/seafile-server-latest\n./seaf-fsck.sh [--repair|-r] [--export|-E export_path] [repo_id_1 [repo_id_2 ...]]\n

    There are three modes of operation for seaf-fsck:

    1. checking integrity of libraries.
    2. repairing corrupted libraries.
    3. exporting libraries.
    "},{"location":"administration/seafile_fsck/#checking-integrity-of-libraries","title":"Checking Integrity of Libraries","text":"

    Running seaf-fsck.sh without any arguments will run a read-only integrity check for all libraries.

    ./seaf-fsck.sh\n

    If you want to check integrity for specific libraries, just append the library id's as arguments:

    ./seaf-fsck.sh [library-id1] [library-id2] ...\n

    The output looks like:

    [02/13/15 16:21:07] fsck.c(470): Running fsck for repo ca1a860d-e1c1-4a52-8123-0bf9def8697f.\n[02/13/15 16:21:07] fsck.c(413): Checking file system integrity of repo fsck(ca1a860d)...\n[02/13/15 16:21:07] fsck.c(35): Dir 9c09d937397b51e1283d68ee7590cd9ce01fe4c9 is missing.\n[02/13/15 16:21:07] fsck.c(200): Dir /bf/pk/(9c09d937) is corrupted.\n[02/13/15 16:21:07] fsck.c(105): Block 36e3dd8757edeb97758b3b4d8530a4a8a045d3cb is corrupted.\n[02/13/15 16:21:07] fsck.c(178): File /bf/02.1.md(ef37e350) is corrupted.\n[02/13/15 16:21:07] fsck.c(85): Block 650fb22495b0b199cff0f1e1ebf036e548fcb95a is missing.\n[02/13/15 16:21:07] fsck.c(178): File /01.2.md(4a73621f) is corrupted.\n[02/13/15 16:21:07] fsck.c(514): Fsck finished for repo ca1a860d.\n

    The corrupted files and directories are reported in the above message. By the way, you may also see output like the following:

    [02/13/15 16:36:11] Commit 6259251e2b0dd9a8e99925ae6199cbf4c134ec10 is missing\n[02/13/15 16:36:11] fsck.c(476): Repo ca1a860d HEAD commit is corrupted, need to restore to an old version.\n[02/13/15 16:36:11] fsck.c(314): Scanning available commits...\n[02/13/15 16:36:11] fsck.c(376): Find available commit 1b26b13c(created at 2015-02-13 16:10:21) for repo ca1a860d.\n

    This means the head commit (current state of the library) recorded in database is not consistent with the library data. In such case, fsck will try to find the last consistent state and check the integrity in that state.

    Tip

    If you have many libraries, it's helpful to save the fsck output into a log file for later analysis.

    "},{"location":"administration/seafile_fsck/#repairing-corruption","title":"Repairing Corruption","text":"

    Corruption repair in seaf-fsck basically works in two steps:

    1. If the library state (commit) recorded in database is not found in data directory, find the last available state from data directory.
    2. Check data integrity in that specific state. If files or directories are corrupted, set them to empty files or empty directories. The corrupted paths will be reported, so that the user can recover them from somewhere else.

    Running the following command repairs all the libraries:

    ./seaf-fsck.sh --repair\n

    Most of time you run the read-only integrity check first, to find out which libraries are corrupted. And then you repair specific libraries with the following command:

    ./seaf-fsck.sh --repair [library-id1] [library-id2] ...\n

    After repairing, in the library history, seaf-fsck includes the list of files and folders that are corrupted. So it's much easier to located corrupted paths.

    "},{"location":"administration/seafile_fsck/#best-practice-for-repairing-a-library","title":"Best Practice for Repairing a Library","text":"

    To check all libraries and find out which library is corrupted, the system admin can run seaf-fsck.sh without any argument and save the output to a log file. Search for keyword \"Fail\" in the log file to locate corrupted libraries. You can run seaf-fsck to check all libraries when your Seafile server is running. It won't damage or change any files.

    When the system admin find a library is corrupted, he/she should run seaf-fsck.sh with \"--repair\" for the library. After the command fixes the library, the admin should inform user to recover files from other places. There are two ways:

    • Upload corrupted files or folders via the web interface
    • If the library was synced to some desktop computer, and that computer has a correct version of the corrupted file, resyncing the library on that computer will upload the corrupted files to the server.
    "},{"location":"administration/seafile_fsck/#speeding-up-fsck-by-not-checking-file-contents","title":"Speeding up FSCK by not checking file contents","text":"

    Starting from Pro edition 7.1.5, an option is added to speed up FSCK. Most of the running time of seaf-fsck is spent on calculating hashes for file contents. This hash will be compared with block object ID. If they're not consistent, the block is detected as corrupted.

    In many cases, the file contents won't be corrupted most of time. Some objects are just missing from the system. So it's enough to only check for object existence. This will greatly speed up the fsck process.

    To skip checking file contents, add the --shallow or -s option to seaf-fsck.

    "},{"location":"administration/seafile_fsck/#exporting-libraries-to-file-system","title":"Exporting Libraries to File System","text":"

    You can use seaf-fsck to export all the files in libraries to external file system (such as Ext4). This procedure doesn't rely on the seafile database. As long as you have your seafile-data directory, you can always export your files from Seafile to external file system. The command about this operation is

    ./seaf-fsck.sh --export top_export_path [library-id1] [library-id2] ...\n

    The argument top_export_path is a directory to place the exported files. Each library will be exported as a sub-directory of the export path. If you don't specify library ids, all libraries will be exported.

    Note

    Currently only un-encrypted libraries can be exported. Encrypted libraries will be skipped.

    "},{"location":"administration/seafile_gc/","title":"Seafile GC","text":"

    Seafile uses storage de-duplication technology to reduce storage usage. The underlying data blocks will not be removed immediately after you delete a file or a library. As a result, the number of unused data blocks will increase on Seafile server.

    To release the storage space occupied by unused blocks, you have to run a \"garbage collection\" program to clean up unused blocks on your server.

    The GC program cleans up two types of unused blocks:

    1. Blocks that no library references to, that is, the blocks belong to deleted libraries;
    2. If you set history length limit on some libraries, the out-dated blocks in those libraries will also be removed.
    "},{"location":"administration/seafile_gc/#run-gc","title":"Run GC","text":"

    Note

    If your Seafile server is deployed with Docker, make sure you have enter the container before executing the script:

    docker exec -it seafile bash\n

    For all scripts in this document, is located in /opt/seafile/seafile-server-latest:

    cd `/opt/seafile/seafile-server-latest # valid both Docker-base Seafile and binary-package-base Seafile\n

    This is also required for the other scripts in this document.

    "},{"location":"administration/seafile_gc/#dry-run-mode","title":"Dry-run Mode","text":"

    To see how much garbage can be collected without actually removing any garbage, use the dry-run option:

    ./seaf-gc.sh --dry-run [repo-id1] [repo-id2] ...\n

    The output should look like:

    [03/19/15 19:41:49] seafserv-gc.c(115): GC version 1 repo My Library(ffa57d93)\n[03/19/15 19:41:49] gc-core.c(394): GC started. Total block number is 265.\n[03/19/15 19:41:49] gc-core.c(75): GC index size is 1024 Byte.\n[03/19/15 19:41:49] gc-core.c(408): Populating index.\n[03/19/15 19:41:49] gc-core.c(262): Populating index for repo ffa57d93.\n[03/19/15 19:41:49] gc-core.c(308): Traversed 5 commits, 265 blocks.\n[03/19/15 19:41:49] gc-core.c(440): Scanning unused blocks.\n[03/19/15 19:41:49] gc-core.c(472): GC finished. 265 blocks total, about 265 reachable blocks, 0 blocks can be removed.\n\n[03/19/15 19:41:49] seafserv-gc.c(115): GC version 1 repo aa(f3d0a8d0)\n[03/19/15 19:41:49] gc-core.c(394): GC started. Total block number is 5.\n[03/19/15 19:41:49] gc-core.c(75): GC index size is 1024 Byte.\n[03/19/15 19:41:49] gc-core.c(408): Populating index.\n[03/19/15 19:41:49] gc-core.c(262): Populating index for repo f3d0a8d0.\n[03/19/15 19:41:49] gc-core.c(308): Traversed 8 commits, 5 blocks.\n[03/19/15 19:41:49] gc-core.c(264): Populating index for sub-repo 9217622a.\n[03/19/15 19:41:49] gc-core.c(308): Traversed 4 commits, 4 blocks.\n[03/19/15 19:41:49] gc-core.c(440): Scanning unused blocks.\n[03/19/15 19:41:49] gc-core.c(472): GC finished. 5 blocks total, about 9 reachable blocks, 0 blocks can be removed.\n\n[03/19/15 19:41:49] seafserv-gc.c(115): GC version 1 repo test2(e7d26d93)\n[03/19/15 19:41:49] gc-core.c(394): GC started. Total block number is 507.\n[03/19/15 19:41:49] gc-core.c(75): GC index size is 1024 Byte.\n[03/19/15 19:41:49] gc-core.c(408): Populating index.\n[03/19/15 19:41:49] gc-core.c(262): Populating index for repo e7d26d93.\n[03/19/15 19:41:49] gc-core.c(308): Traversed 577 commits, 507 blocks.\n[03/19/15 19:41:49] gc-core.c(440): Scanning unused blocks.\n[03/19/15 19:41:49] gc-core.c(472): GC finished. 507 blocks total, about 507 reachable blocks, 0 blocks can be removed.\n\n[03/19/15 19:41:50] seafserv-gc.c(124): === Repos deleted by users ===\n[03/19/15 19:41:50] seafserv-gc.c(145): === GC is finished ===\n\n[03/19/15 19:41:50] Following repos have blocks to be removed:\nrepo-id1\nrepo-id2\nrepo-id3\n

    If you give specific library ids, only those libraries will be checked; otherwise all libraries will be checked.

    repos have blocks to be removed

    Notice that at the end of the output there is a \"repos have blocks to be removed\" section. It contains the list of libraries that have garbage blocks. Later when you run GC without --dry-run option, you can use these libraris ids as input arguments to GC program.

    "},{"location":"administration/seafile_gc/#removing-garbage","title":"Removing Garbage","text":"

    To actually remove garbage blocks, run without the --dry-run option:

    ./seaf-gc.sh [repo-id1] [repo-id2] ...\n

    If libraries ids are specified, only those libraries will be checked for garbage.

    As described before, there are two types of garbage blocks to be removed. Sometimes just removing the first type of blocks (those that belong to deleted libraries) is good enough. In this case, the GC program won't bother to check the libraries for outdated historic blocks. The \"-r\" option implements this feature:

    ./seaf-gc.sh -r\n

    Success

    Libraries deleted by the users are not immediately removed from the system. Instead, they're moved into a \"trash\" in the system admin page. Before they're cleared from the trash, their blocks won't be garbage collected.

    "},{"location":"administration/seafile_gc/#removing-fs-objects","title":"Removing FS objects","text":"

    Since Pro server 8.0.6 and community edition 9.0, you can remove garbage fs objects. It should be run without the --dry-run option:

    ./seaf-gc.sh --rm-fs\n

    Bug reports

    This command has bug before Pro Edition 10.0.15 and Community Edition 11.0.7. It could cause virtual libraries (e.g. shared folders) failing to merge into their parent libraries. Please avoid using this option in the affected versions. Please contact our support team if you are affected by this bug.

    "},{"location":"administration/seafile_gc/#using-multiple-threads-in-gc","title":"Using Multiple Threads in GC","text":"

    You can specify the thread number in GC. By default,

    • If storage backend is S3/Swift/Ceph, 10 threads are started to do the GC work.
    • If storage backend is file system, only 1 thread is started.

    You can specify the thread number in with \"-t\" option. \"-t\" option can be used together with all other options. Each thread will do GC on one library. For example, the following command will use 20 threads to GC all libraries:

    ./seaf-gc.sh -t 20\n

    Since the threads are concurrent, the output of each thread may mix with each others. Library ID is printed in each line of output.

    "},{"location":"administration/seafile_gc/#run-gc-based-on-library-id-prefix","title":"Run GC based on library ID prefix","text":"

    Since GC usually runs quite slowly as it needs to traverse the entire library history. You can use multiple threads to run GC in parallel. For even larger deployments, it's also desirable to run GC on multiple server in parallel.

    A simple pattern to divide the workload among multiple GC servers is to assign libraries to servers based on library ID. Since Pro edition 7.1.5, this is supported. You can add \"--id-prefix\" option to seaf-gc.sh, to specify the library ID prefix. For example, the below command will only process libraries having \"a123\" as ID prefix.

    ./seaf-gc.sh --id-prefix a123\n
    "},{"location":"administration/security_features/","title":"Security Questions","text":""},{"location":"administration/security_features/#how-is-the-connection-between-client-and-server-encrypted","title":"How is the connection between client and server encrypted?","text":"

    Seafile uses HTTP(S) to syncing files between client and server (Since version 4.1.0).

    "},{"location":"administration/security_features/#encrypted-library","title":"Encrypted Library","text":"

    Seafile provides a feature called encrypted library to protect your privacy. The file encryption/decryption is performed on client-side when using the desktop client for file synchronization. The password of an encrypted library is not stored on the server. Even the system admin of the server can't view the file contents.

    There are a few limitation about this feature:

    1. File metadata is NOT encrypted. The metadata includes: the complete list of directory and file names, every files size, the history of editors, when, and what byte ranges were altered.
    2. The client side encryption does currently NOT work while using the web browser and the cloud file explorer of the desktop client. When you are browsing encrypted libraries via the web browser or the cloud file explorer, you need to input the password and the server is going to use the password to decrypt the \"file key\" for the library (see description below) and cache the password in memory for one hour. The plain text password is never stored or cached on the server.
    3. If you create an encrypted library on the web interface, the library password and encryption keys will pass through the server. If you want end-to-end protection, you should create encrypted libraries from desktop client only.
    4. For encryption protocol version 4, each library use its own salt to derive key/iv pairs. However, all files within a library shares the same salt. Likewise, all the files within a library are encrypted with the same key/iv pair. With encryption protocol version 2, all libraries use the same salt, but separate key/iv pairs.
    5. Encrypted library doesn't ensure file integrity. For example, the server admin can still partially change the contents of files in an encrypted library. The client is not able to detect such changes to contents.

    The client side encryption works on iOS client since version 2.1.6. The Android client support client side encryption since version 2.1.0. But since version 3.0.0, the iOS and Android clients drop support for client side encryptioin. You need to send the password to the server to encrypt/decrypt files.

    "},{"location":"administration/security_features/#how-does-an-encrypted-library-work","title":"How does an encrypted library work?","text":"

    When you create an encrypted library, you'll need to provide a password for it. All the data in that library will be encrypted with the password before uploading it to the server (see limitations above).

    "},{"location":"administration/security_features/#encryptiondecryption-procedure","title":"Encryption/Decryption procedure","text":"

    There are currently two supported encryption protocol versions for encrypted libraries, version 2 and versioin 4. The two versions shares the same basic procedure so we first describe the procedure.

    1. Generate a 32-byte long cryptographically strong random number. This will be used as the file encryption key (\"file key\").
    2. Encrypt the file key with the user provided password. We first use a secure hash algorithm to derive a key/iv pair from the password, then use AES 256/CBC to encrypt the file key. The result is called the \"encrypted file key\". This encrypted file key will be sent to and stored on the server. When you need to access the data, you can decrypt the file key from the encrypted file key.
    3. A \"magic token\" is derived from the password and library id, with the same secure hash algorithm. This token is stored with the library and will be use to check passwords before decrypting data later.
    4. All file data is encrypted by the file key with AES 256/CBC. We use PBKDF2-SHA256 with 1000 iterations to derive key/iv pair from the file key. After encryption, the data is uploaded to the server.

    The only difference between version 2 and version 4 is on the usage of salt for the secure hash algorithm. In version 2, all libaries share the same fixed salt. In version 4, each library will use a separate and randomly generated salt.

    "},{"location":"administration/security_features/#secure-hash-algorithms-for-password-verification","title":"Secure hash algorithms for password verification","text":"

    A secure hash algorithm is used to derive key/iv pair for encrypting the file key. So it's critical to choose a relatively costly algorithm to prevent brute-force guessing for the password.

    Before version 12, a fixed secure hash algorithm (PBKDF2-SHA256 with 1000 iterations) is used, which is far from secure for today's standard.

    Since Seafile server version 12, we allow the admin to choose proper secure hash algorithms. Currently two hash algorithms are supported.

    • PBKDF2: The only available parameter is the number of iterations. You need to increase the the number of iterations over time, as GPUs are more and more used for such calculation. The default number of iterations is 1000. As of 2023, the recommended iterations is 600,000.
    • Argon2id: Secure hash algorithm that has high cost even for GPUs. There are 3 parameters that can be set: time cost, memory cost, and parallelism degree. The parameters are seperated by commas, e.g. \"2,102400,8\", which the default parameters used in Seafile. Learn more about this algorithm on https://github.com/P-H-C/phc-winner-argon2 .
    "},{"location":"administration/security_features/#client-side-encryption-and-decryption","title":"Client-side encryption and decryption","text":"

    The above encryption procedure can be executed on the desktop and the mobile client. The Seahub browser client uses a different encryption procedure that happens at the server. Because of this your password will be transferred to the server.

    When you sync an encrypted library to the desktop, the client needs to verify your password. When you create the library, a \"magic token\" is derived from the password and library id. This token is stored with the library on the server side. The client use this token to check whether your password is correct before you sync the library. The magic token is generated by the secure hash algorithm chosen when the library was created.

    For maximum security, the plain-text password won't be saved on the client side, too. The client only saves the key/iv pair derived from the \"file key\", which is used to decrypt the data. So if you forget the password, you won't be able to recover it or access your data on the server.

    "},{"location":"administration/security_features/#why-fileserver-delivers-every-content-to-everybody-knowing-the-content-url-of-an-unshared-private-file","title":"Why fileserver delivers every content to everybody knowing the content URL of an unshared private file?","text":"

    When a file download link is clicked, a random URL is generated for user to access the file from fileserver. This url can only be access once. After that, all access will be denied to the url. So even if someone else happens to know about the url, he can't access it anymore.

    This was changed in Seafile server version 12. Instead of a random URL, a URL like 'https://yourserver.com/seafhttp/repos/{library id}/file_path' is used for downloading the file. Authorization will be done by checking cookies or API tokens on the server side. This makes the URL more cache-friendly while still being secure.

    "},{"location":"administration/security_features/#how-does-seafile-store-user-login-password","title":"How does Seafile store user login password?","text":"

    User login passwords are stored in hash form only. Note that user login password is different from the passwords used in encrypted libraries. In the database, its format is

    PBKDF2SHA256$iterations$salt$hash\n

    The record is divided into 4 parts by the $ sign.

    • The first part is the used hash algorithm. Currently we use PBKDF2 with SHA256. It can be changed to an even stronger algorithm if needed.
    • The second part is the number of iterations of the hash algorithm
    • The third part is the random salt used to generate the hash
    • The fourth part is the final hash generated from the password

    To calculate the hash:

    • First, generate a 32-byte long cryptographically strong random number, use it as the salt.
    • Calculate the hash with PBKDF2(password, salt, iterations). The number of iterations is currently 10000.
    "},{"location":"administration/two_factor_authentication/","title":"Two-Factor Authentication","text":"

    Starting from version 6.0, we added Two-Factor Authentication to enhance account security.

    There are two ways to enable this feature:

    • System admin can tick the check-box at the \"Password\" section of the system settings page, or

    • just add the following settings to seahub_settings.py and restart service.

      ENABLE_TWO_FACTOR_AUTH = True\nTWO_FACTOR_DEVICE_REMEMBER_DAYS = 30  # optional, default 90 days.\n

    After that, there will be a \"Two-Factor Authentication\" section in the user profile page.

    Users can use the Google Authenticator app on their smart-phone to scan the QR code.

    "},{"location":"changelog/changelog-for-seafile-professional-server-old/","title":"Seafile Professional Server Changelog (old)","text":""},{"location":"changelog/changelog-for-seafile-professional-server-old/#44","title":"4.4","text":"

    Note: Two new options are added in version 4.4, both are in seahub_settings.py

    • SHOW_TRAFFIC: default is True, set to False if you what to hide public link traffic in profile
    • SHARE_LINK_PASSWORD_MIN_LENGTH: default is 8

    This version contains no database table change.

    "},{"location":"changelog/changelog-for-seafile-professional-server-old/#449-20160229","title":"4.4.9 (2016.02.29)","text":"
    • [fix] Show \u201cout of quota\u201d instead of \u201cDERP\u201d in the case of out of quota when uploading files via web interface
    "},{"location":"changelog/changelog-for-seafile-professional-server-old/#448-20151217","title":"4.4.8 (2015.12.17)","text":"
    • [security] Fix password check for visiting a file in folder sharing link
    "},{"location":"changelog/changelog-for-seafile-professional-server-old/#447-20151120","title":"4.4.7 (2015.11.20)","text":"
    • [fix] Fix viewing PDF files via Office Web App
    • [fix, virus scan] Do not scanning deleted libraries in virus scan
    • [fix, virus scan] Fix showing the virus scan page when libraries containing scanned items are deleted
    • [virus scan] Add more debug information for virus scan
    • [fix] Clean cache when set users' name from web API
    • [fix] Fix a performance problem for generating picture thumbnails from folder sharing link
    "},{"location":"changelog/changelog-for-seafile-professional-server-old/#446-20151109","title":"4.4.6 (2015.11.09)","text":"