From c9492833ed23bb13e85b1dcb3ff33182b9d1c310 Mon Sep 17 00:00:00 2001 From: Metabase Docs bot Date: Mon, 28 Jul 2025 21:30:38 +0000 Subject: [PATCH] [auto] adding content to docs-filters-in-headings-and-dashcards->master --- _docs/master/api.html | 9473 ++++++++++++++++- .../master/configuring-metabase/appearance.md | 2 +- .../configuring-metabase/localization.md | 50 +- .../setting-up-metabase.md | 2 +- _docs/master/dashboards/filters.md | 114 +- _docs/master/dashboards/linked-filters.md | 2 +- .../master/data-modeling/metadata-editing.md | 22 +- _docs/master/data-modeling/semantic-types.md | 2 +- _docs/master/databases/connecting.md | 2 +- .../master/embedding/interactive-embedding.md | 2 +- _docs/master/embedding/introduction.md | 2 +- ...onProps.html => BaseSdkQuestionProps.html} | 6 +- .../embedding/sdk/api/CreateQuestion.html | 13 +- .../sdk/api/CreateQuestionProps.html | 26 +- .../embedding/sdk/api/EditableDashboard.html | 2 +- .../sdk/api/EditableDashboardProps.html | 4 +- _docs/master/embedding/sdk/api/IconName.html | 2 +- .../sdk/api/InteractiveDashboard.html | 6 +- .../sdk/api/InteractiveDashboardProps.html | 4 +- .../sdk/api/InteractiveQuestion.html | 131 - .../sdk/api/InteractiveQuestionProps.html | 25 +- .../embedding/sdk/api/SdkQuestionProps.html | 48 + .../embedding/sdk/api/StaticDashboard.html | 6 +- .../sdk/api/StaticDashboardProps.html | 4 +- .../embedding/sdk/api/StaticQuestion.html | 30 - .../sdk/api/StaticQuestionProps.html | 22 +- .../embedding/sdk/api/assets/navigation.js | 2 +- .../master/embedding/sdk/api/assets/search.js | 2 +- _docs/master/embedding/sdk/api/index.html | 2 +- ...estionProps.md => BaseSdkQuestionProps.md} | 4 +- .../sdk/api/snippets/CreateQuestionProps.md | 31 +- .../api/snippets/EditableDashboardProps.md | 34 +- .../embedding/sdk/api/snippets/IconName.md | 2 +- .../sdk/api/snippets/InteractiveDashboard.md | 8 +- .../api/snippets/InteractiveDashboardProps.md | 34 +- .../sdk/api/snippets/InteractiveQuestion.md | 35 - .../api/snippets/InteractiveQuestionProps.md | 41 +- .../sdk/api/snippets/SdkQuestionProps.md | 40 + .../sdk/api/snippets/StaticDashboard.md | 8 +- .../sdk/api/snippets/StaticDashboardProps.md | 34 +- .../sdk/api/snippets/StaticQuestion.md | 34 - .../sdk/api/snippets/StaticQuestionProps.md | 21 +- .../embedding/sdk/api/snippets/index.md | 71 +- _docs/master/embedding/start.md | 4 + _docs/master/embedding/static-embedding.md | 4 + _docs/master/embedding/translations.md | 47 + _docs/master/permissions/impersonation.md | 2 +- _docs/master/questions/images/02-widget.png | Bin 95511 -> 0 bytes .../questions/images/filter-and-parameter.png | Bin 0 -> 353523 bytes .../images/join-with-custom-expression.png | Bin 0 -> 83552 bytes .../questions/images/multiple-values.png | Bin 0 -> 425001 bytes .../native-editor/basic-sql-parameters.md | 103 + .../questions/native-editor/field-filters.md | 153 + .../questions/native-editor/filter-widgets.md | 123 + .../native-editor/optional-variables.md | 158 + .../questions/native-editor/sql-parameters.md | 437 +- .../native-editor/time-grouping-parameters.md | 62 + .../questions/native-editor/writing-sql.md | 2 +- .../expressions/converttimezone.md | 2 +- .../query-builder/expressions/countif.md | 2 +- .../query-builder/expressions/datetimeadd.md | 2 +- .../query-builder/expressions/datetimediff.md | 2 +- .../expressions/datetimesubtract.md | 2 +- .../query-builder/expressions/isempty.md | 2 +- .../query-builder/expressions/isnull.md | 2 +- .../query-builder/expressions/now.md | 2 +- .../query-builder/expressions/sumif.md | 2 +- _docs/master/questions/query-builder/join.md | 53 +- _docs/master/questions/start.md | 24 + _docs/master/troubleshooting-guide/filters.md | 4 +- .../troubleshooting-guide/linked-filters.md | 4 +- _docs/master/troubleshooting-guide/sql.md | 5 +- _site/docs/master/CONTRIBUTING.html | 26 +- _site/docs/master/actions/basic.html | 26 +- _site/docs/master/actions/custom.html | 26 +- _site/docs/master/actions/introduction.html | 26 +- _site/docs/master/actions/start.html | 26 +- _site/docs/master/api.html | 9473 ++++++++++++++++- .../configuring-metabase/appearance.html | 28 +- .../master/configuring-metabase/caching.html | 26 +- .../configuring-metabase/config-file.html | 26 +- .../configuring-metabase/config-template.html | 26 +- .../configuring-metabase/custom-maps.html | 26 +- .../customizing-jetty-webserver.html | 26 +- .../master/configuring-metabase/email.html | 26 +- .../environment-variables.html | 26 +- .../master/configuring-metabase/fonts.html | 26 +- .../configuring-metabase/localization.html | 82 +- .../log-configuration.html | 26 +- .../setting-up-metabase.html | 28 +- .../master/configuring-metabase/settings.html | 26 +- .../master/configuring-metabase/slack.html | 26 +- .../master/configuring-metabase/start.html | 26 +- .../configuring-metabase/timezones.html | 26 +- .../master/configuring-metabase/webhooks.html | 26 +- _site/docs/master/dashboards/actions.html | 26 +- _site/docs/master/dashboards/filters.html | 164 +- _site/docs/master/dashboards/interactive.html | 26 +- .../docs/master/dashboards/introduction.html | 26 +- .../master/dashboards/linked-filters.html | 28 +- .../master/dashboards/multiple-series.html | 26 +- _site/docs/master/dashboards/start.html | 26 +- .../docs/master/dashboards/subscriptions.html | 26 +- .../docs/master/data-modeling/formatting.html | 26 +- .../master/data-modeling/json-unfolding.html | 26 +- .../master/data-modeling/legacy-metrics.html | 26 +- .../data-modeling/metadata-editing.html | 48 +- _site/docs/master/data-modeling/metrics.html | 26 +- .../data-modeling/model-persistence.html | 26 +- _site/docs/master/data-modeling/models.html | 26 +- _site/docs/master/data-modeling/segments.html | 26 +- .../master/data-modeling/semantic-types.html | 28 +- _site/docs/master/data-modeling/start.html | 26 +- _site/docs/master/databases/connecting.html | 28 +- .../master/databases/connections/athena.html | 26 +- .../master/databases/connections/aws-rds.html | 26 +- .../databases/connections/bigquery.html | 26 +- .../databases/connections/clickhouse.html | 26 +- .../databases/connections/databricks.html | 26 +- .../master/databases/connections/druid.html | 26 +- .../master/databases/connections/mariadb.html | 26 +- .../master/databases/connections/mongodb.html | 26 +- .../master/databases/connections/mysql.html | 26 +- .../master/databases/connections/oracle.html | 26 +- .../databases/connections/postgresql.html | 26 +- .../master/databases/connections/presto.html | 26 +- .../databases/connections/redshift.html | 26 +- .../databases/connections/snowflake.html | 26 +- .../databases/connections/sparksql.html | 26 +- .../databases/connections/sql-server.html | 26 +- .../master/databases/connections/sqlite.html | 26 +- .../databases/connections/starburst.html | 26 +- .../master/databases/connections/vertica.html | 26 +- _site/docs/master/databases/danger-zone.html | 26 +- .../databases/encrypting-details-at-rest.html | 26 +- _site/docs/master/databases/ssh-tunnel.html | 26 +- .../master/databases/ssl-certificates.html | 26 +- _site/docs/master/databases/start.html | 26 +- _site/docs/master/databases/sync-scan.html | 26 +- _site/docs/master/databases/uploads.html | 26 +- .../databases/users-roles-privileges.html | 26 +- .../developers-guide/api-changelog.html | 26 +- _site/docs/master/developers-guide/build.html | 26 +- .../docs/master/developers-guide/clojure.html | 26 +- .../master/developers-guide/code-reviews.html | 26 +- .../developers-guide/community-drivers.html | 26 +- .../developers-guide/dev-branch-docker.html | 26 +- .../docs/master/developers-guide/devenv.html | 26 +- _site/docs/master/developers-guide/docs.html | 26 +- .../developers-guide/driver-changelog.html | 26 +- .../developers-guide/drivers/basics.html | 26 +- .../drivers/driver-tests.html | 26 +- .../drivers/multimethods.html | 26 +- .../developers-guide/drivers/plugins.html | 26 +- .../developers-guide/drivers/start.html | 26 +- .../master/developers-guide/e2e-tests.html | 26 +- _site/docs/master/developers-guide/emacs.html | 26 +- .../master/developers-guide/frontend.html | 26 +- .../internationalization.html | 26 +- _site/docs/master/developers-guide/mage.html | 26 +- .../mbql-library-changelog.html | 26 +- .../security-token-scanner.html | 26 +- _site/docs/master/developers-guide/start.html | 26 +- .../master/developers-guide/versioning.html | 26 +- .../developers-guide/visual-studio-code.html | 26 +- .../master/developers-guide/visual-tests.html | 26 +- ...teractive-embedding-quick-start-guide.html | 26 +- .../embedding/interactive-embedding.html | 28 +- .../embedding/interactive-ui-components.html | 26 +- _site/docs/master/embedding/introduction.html | 28 +- _site/docs/master/embedding/public-links.html | 26 +- ...onProps.html => BaseSdkQuestionProps.html} | 14 +- .../embedding/sdk/api/CreateQuestion.html | 13 +- .../sdk/api/CreateQuestionProps.html | 26 +- .../embedding/sdk/api/EditableDashboard.html | 2 +- .../sdk/api/EditableDashboardProps.html | 4 +- .../master/embedding/sdk/api/IconName.html | 2 +- .../sdk/api/InteractiveDashboard.html | 6 +- .../sdk/api/InteractiveDashboardProps.html | 4 +- .../sdk/api/InteractiveQuestion.html | 147 - .../sdk/api/InteractiveQuestionProps.html | 25 +- .../embedding/sdk/api/SdkQuestionProps.html | 64 + .../embedding/sdk/api/StaticDashboard.html | 6 +- .../sdk/api/StaticDashboardProps.html | 4 +- .../embedding/sdk/api/StaticQuestion.html | 46 - .../sdk/api/StaticQuestionProps.html | 22 +- .../embedding/sdk/api/assets/navigation.js | 2 +- .../master/embedding/sdk/api/assets/search.js | 2 +- .../docs/master/embedding/sdk/api/index.html | 2 +- .../docs/master/embedding/sdk/appearance.html | 26 +- .../master/embedding/sdk/authentication.html | 26 +- .../master/embedding/sdk/collections.html | 26 +- _site/docs/master/embedding/sdk/config.html | 26 +- .../docs/master/embedding/sdk/dashboards.html | 32 +- .../master/embedding/sdk/introduction.html | 26 +- _site/docs/master/embedding/sdk/next-js.html | 26 +- _site/docs/master/embedding/sdk/plugins.html | 26 +- .../docs/master/embedding/sdk/questions.html | 52 +- .../master/embedding/sdk/quickstart-cli.html | 26 +- .../sdk/quickstart-with-sample-app.html | 26 +- .../docs/master/embedding/sdk/quickstart.html | 26 +- _site/docs/master/embedding/sdk/upgrade.html | 26 +- _site/docs/master/embedding/sdk/version.html | 26 +- .../master/embedding/securing-embeds.html | 26 +- _site/docs/master/embedding/start.html | 30 +- .../static-embedding-parameters.html | 26 +- .../master/embedding/static-embedding.html | 30 +- _site/docs/master/embedding/translations.html | 5165 +++++++++ .../collections.html | 26 +- .../content-verification.html | 26 +- .../data-model-reference.html | 26 +- .../delete-and-restore.html | 26 +- .../events-and-timelines.html | 26 +- .../exploration.html | 26 +- .../exploration-and-organization/history.html | 26 +- .../keyboard-shortcuts.html | 26 +- .../exploration-and-organization/start.html | 26 +- .../exploration-and-organization/uploads.html | 26 +- .../exploration-and-organization/x-rays.html | 26 +- _site/docs/master/index.html | 26 +- .../accessibility.html | 26 +- .../activating-the-enterprise-edition.html | 26 +- .../backing-up-metabase-application-data.html | 26 +- .../installation-and-operation/commands.html | 26 +- .../configuring-application-database.html | 26 +- .../creating-RDS-database-on-AWS.html | 26 +- .../development-instance.html | 26 +- .../information-collection.html | 26 +- .../installing-metabase.html | 26 +- .../migrating-from-h2.html | 26 +- .../monitoring-metabase.html | 26 +- .../observability-with-prometheus.html | 26 +- .../installation-and-operation/privacy.html | 26 +- .../running-metabase-on-azure.html | 26 +- .../running-metabase-on-debian.html | 26 +- .../running-metabase-on-docker.html | 26 +- ...running-metabase-on-elastic-beanstalk.html | 26 +- .../running-metabase-on-podman.html | 26 +- .../running-the-metabase-jar-file.html | 26 +- .../serialization.html | 26 +- .../installation-and-operation/start.html | 26 +- .../supported-browsers.html | 26 +- .../upgrading-metabase.html | 26 +- .../people-and-groups/account-settings.html | 26 +- .../master/people-and-groups/api-keys.html | 26 +- .../authenticating-with-jwt.html | 26 +- .../authenticating-with-saml.html | 26 +- .../changing-password-complexity.html | 26 +- .../changing-session-expiration.html | 26 +- .../people-and-groups/google-sign-in.html | 26 +- _site/docs/master/people-and-groups/ldap.html | 26 +- .../master/people-and-groups/managing.html | 26 +- .../master/people-and-groups/saml-auth0.html | 26 +- .../master/people-and-groups/saml-azure.html | 26 +- .../master/people-and-groups/saml-google.html | 26 +- .../people-and-groups/saml-keycloak.html | 26 +- .../master/people-and-groups/saml-okta.html | 26 +- .../docs/master/people-and-groups/start.html | 26 +- .../people-and-groups/user-provisioning.html | 26 +- .../docs/master/permissions/application.html | 26 +- .../docs/master/permissions/collections.html | 26 +- .../permissions/data-sandbox-examples.html | 26 +- .../master/permissions/data-sandboxes.html | 26 +- _site/docs/master/permissions/data.html | 26 +- .../master/permissions/database-routing.html | 26 +- _site/docs/master/permissions/embedding.html | 26 +- .../master/permissions/impersonation.html | 28 +- .../docs/master/permissions/introduction.html | 26 +- .../no-self-service-deprecation.html | 26 +- .../master/permissions/notifications.html | 26 +- _site/docs/master/permissions/snippets.html | 26 +- _site/docs/master/permissions/start.html | 26 +- _site/docs/master/questions/alerts.html | 26 +- .../master/questions/exporting-results.html | 26 +- .../master/questions/images/02-widget.png | Bin 95511 -> 0 bytes .../questions/images/filter-and-parameter.png | Bin 0 -> 353523 bytes .../images/join-with-custom-expression.png | Bin 0 -> 83552 bytes .../questions/images/multiple-values.png | Bin 0 -> 425001 bytes _site/docs/master/questions/introduction.html | 26 +- .../native-editor/basic-sql-parameters.html | 5180 +++++++++ .../native-editor/field-filters.html | 5247 +++++++++ .../native-editor/filter-widgets.html | 5223 +++++++++ .../native-editor/optional-variables.html | 5227 +++++++++ ...eferencing-saved-questions-in-queries.html | 26 +- .../questions/native-editor/snippets.html | 26 +- .../native-editor/sql-parameters.html | 471 +- .../time-grouping-parameters.html | 5142 +++++++++ .../questions/native-editor/writing-sql.html | 28 +- .../questions/query-builder/editor.html | 26 +- .../query-builder/expressions-list.html | 26 +- .../questions/query-builder/expressions.html | 26 +- .../query-builder/expressions/case.html | 26 +- .../query-builder/expressions/coalesce.html | 26 +- .../query-builder/expressions/concat.html | 26 +- .../expressions/converttimezone.html | 28 +- .../query-builder/expressions/countif.html | 28 +- .../query-builder/expressions/cumulative.html | 26 +- .../expressions/datetimeadd.html | 28 +- .../expressions/datetimediff.html | 28 +- .../expressions/datetimesubtract.html | 28 +- .../query-builder/expressions/in.html | 26 +- .../query-builder/expressions/isempty.html | 28 +- .../query-builder/expressions/isnull.html | 28 +- .../query-builder/expressions/now.html | 28 +- .../query-builder/expressions/offset.html | 26 +- .../expressions/regexextract.html | 26 +- .../query-builder/expressions/substring.html | 26 +- .../query-builder/expressions/sumif.html | 28 +- .../query-builder/expressions/week.html | 26 +- .../questions/query-builder/filters.html | 26 +- .../master/questions/query-builder/join.html | 85 +- .../summarizing-and-grouping.html | 26 +- _site/docs/master/questions/start.html | 50 +- .../questions/visualizations/combo-chart.html | 26 +- .../visualizations/country-codes.html | 26 +- .../questions/visualizations/detail.html | 26 +- .../questions/visualizations/funnel.html | 26 +- .../questions/visualizations/gauge.html | 26 +- .../line-bar-and-area-charts.html | 26 +- .../master/questions/visualizations/map.html | 26 +- .../questions/visualizations/numbers.html | 26 +- .../visualizations/pie-or-donut-chart.html | 26 +- .../questions/visualizations/pivot-table.html | 26 +- .../visualizations/progress-bar.html | 26 +- .../questions/visualizations/sankey.html | 26 +- .../scatterplot-or-bubble-chart.html | 26 +- .../questions/visualizations/table.html | 26 +- .../questions/visualizations/tooltips.html | 26 +- .../questions/visualizations/trend.html | 26 +- .../visualizations/visualizing-results.html | 26 +- .../visualizations/waterfall-chart.html | 26 +- .../troubleshooting-guide/bigquery-drive.html | 26 +- .../master/troubleshooting-guide/bugs.html | 26 +- .../troubleshooting-guide/cant-log-in.html | 26 +- .../cant-see-tables.html | 26 +- .../cant-send-email.html | 26 +- .../cant-view-or-edit.html | 26 +- .../create-har-file.html | 26 +- .../data-permissions.html | 26 +- .../troubleshooting-guide/db-connection.html | 26 +- .../troubleshooting-guide/db-performance.html | 26 +- .../diagnostic-info.html | 26 +- .../master/troubleshooting-guide/docker.html | 26 +- .../troubleshooting-guide/error-message.html | 26 +- .../master/troubleshooting-guide/filters.html | 30 +- .../master/troubleshooting-guide/index.html | 26 +- .../troubleshooting-guide/known-issues.html | 26 +- .../master/troubleshooting-guide/ldap.html | 26 +- .../troubleshooting-guide/linked-filters.html | 30 +- .../loading-from-h2.html | 26 +- .../master/troubleshooting-guide/models.html | 26 +- .../my-dashboard-is-slow.html | 26 +- .../troubleshooting-guide/notifications.html | 26 +- .../troubleshooting-guide/permissions.html | 26 +- .../master/troubleshooting-guide/proxies.html | 26 +- .../requesting-new-features.html | 26 +- .../master/troubleshooting-guide/running.html | 26 +- .../master/troubleshooting-guide/saml.html | 26 +- .../troubleshooting-guide/sandboxing.html | 26 +- .../troubleshooting-guide/server-logs.html | 26 +- .../master/troubleshooting-guide/sql.html | 31 +- .../sync-fingerprint-scan.html | 26 +- .../master/troubleshooting-guide/timeout.html | 26 +- .../troubleshooting-guide/timezones.html | 26 +- .../troubleshooting-guide/visualization.html | 26 +- .../usage-and-performance-tools/audit.html | 26 +- .../usage-and-performance-tools/start.html | 26 +- .../usage-and-performance-tools/tools.html | 26 +- .../usage-analytics.html | 26 +- .../master/util/resources/introduction.html | 26 +- 370 files changed, 53505 insertions(+), 6978 deletions(-) rename _docs/master/embedding/sdk/api/{BaseInteractiveQuestionProps.html => BaseSdkQuestionProps.html} (66%) delete mode 100644 _docs/master/embedding/sdk/api/InteractiveQuestion.html create mode 100644 _docs/master/embedding/sdk/api/SdkQuestionProps.html delete mode 100644 _docs/master/embedding/sdk/api/StaticQuestion.html rename _docs/master/embedding/sdk/api/snippets/{BaseInteractiveQuestionProps.md => BaseSdkQuestionProps.md} (99%) delete mode 100644 _docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md create mode 100644 _docs/master/embedding/sdk/api/snippets/SdkQuestionProps.md delete mode 100644 _docs/master/embedding/sdk/api/snippets/StaticQuestion.md create mode 100644 _docs/master/embedding/translations.md delete mode 100644 _docs/master/questions/images/02-widget.png create mode 100644 _docs/master/questions/images/filter-and-parameter.png create mode 100644 _docs/master/questions/images/join-with-custom-expression.png create mode 100644 _docs/master/questions/images/multiple-values.png create mode 100644 _docs/master/questions/native-editor/basic-sql-parameters.md create mode 100644 _docs/master/questions/native-editor/field-filters.md create mode 100644 _docs/master/questions/native-editor/filter-widgets.md create mode 100644 _docs/master/questions/native-editor/optional-variables.md create mode 100644 _docs/master/questions/native-editor/time-grouping-parameters.md rename _site/docs/master/embedding/sdk/api/{BaseInteractiveQuestionProps.html => BaseSdkQuestionProps.html} (73%) delete mode 100644 _site/docs/master/embedding/sdk/api/InteractiveQuestion.html create mode 100644 _site/docs/master/embedding/sdk/api/SdkQuestionProps.html delete mode 100644 _site/docs/master/embedding/sdk/api/StaticQuestion.html create mode 100644 _site/docs/master/embedding/translations.html delete mode 100644 _site/docs/master/questions/images/02-widget.png create mode 100644 _site/docs/master/questions/images/filter-and-parameter.png create mode 100644 _site/docs/master/questions/images/join-with-custom-expression.png create mode 100644 _site/docs/master/questions/images/multiple-values.png create mode 100644 _site/docs/master/questions/native-editor/basic-sql-parameters.html create mode 100644 _site/docs/master/questions/native-editor/field-filters.html create mode 100644 _site/docs/master/questions/native-editor/filter-widgets.html create mode 100644 _site/docs/master/questions/native-editor/optional-variables.html create mode 100644 _site/docs/master/questions/native-editor/time-grouping-parameters.html diff --git a/_docs/master/api.html b/_docs/master/api.html index c96928f667..d94a040518 100644 --- a/_docs/master/api.html +++ b/_docs/master/api.html @@ -113,6 +113,105 @@ }, "required" : [ "zoom", "x", "y", "lat-field", "lon-field" ] }, + "gsheets.response" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "error" : { + "type" : "boolean" + }, + "message" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "error", "message" ] + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { } + }, { + "type" : "object", + "properties" : { + "created_at" : { + "type" : "integer", + "minimum" : 1 + }, + "created_by_id" : { + "type" : "integer", + "minimum" : 1 + }, + "db_id" : { + "type" : "integer", + "minimum" : 1 + }, + "sync_started_at" : { + "type" : "integer", + "minimum" : 1 + }, + "url" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "url", "created_at", "sync_started_at", "created_by_id", "db_id" ] + }, { + "type" : "object", + "properties" : { + "created_at" : { + "type" : "integer", + "minimum" : 1 + }, + "created_by_id" : { + "type" : "integer", + "minimum" : 1 + }, + "db_id" : { + "type" : "integer", + "minimum" : 1 + }, + "last_sync_at" : { + "type" : "integer", + "minimum" : 1 + }, + "next_sync_at" : { + "type" : "integer", + "minimum" : 1 + }, + "url" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "url", "created_at", "last_sync_at", "next_sync_at", "created_by_id", "db_id" ] + }, { + "type" : "object", + "properties" : { + "created_at" : { + "type" : "integer", + "minimum" : 1 + }, + "created_by_id" : { + "type" : "integer", + "minimum" : 1 + }, + "db_id" : { + "type" : "integer", + "minimum" : 1 + }, + "error_message" : { + "type" : "string", + "minLength" : 1 + }, + "url" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "url", "created_at", "error_message", "created_by_id", "db_id" ] + } ] + } ] + }, "metabase-enterprise.metabot-v3.client.schema.message" : { "allOf" : [ { "type" : "object", @@ -198,10 +297,126 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.answer-sources-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "metrics" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" + } + }, + "models" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" + } + } + }, + "required" : [ "metrics", "models" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.basic-metric" : { + "type" : "object", + "properties" : { + "default_time_dimension_field_id" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "type" : { + "const" : "metric" + } + }, + "required" : [ "id", "type", "name" ] + }, + "metabase-enterprise.metabot-v3.tools.api.basic-table" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "fields" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "id" : { + "type" : "integer" + }, + "metrics" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" + } + }, + "name" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "model", "table" ] + } + }, + "required" : [ "id", "type", "name", "fields" ] + }, "metabase-enterprise.metabot-v3.tools.api.bucket" : { "type" : "string", "enum" : [ "millisecond", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "second-of-minute", "minute-of-hour", "hour-of-day", "day-of-week", "day-of-month", "day-of-year", "week-of-year", "month-of-year", "quarter-of-year", "year-of-era" ] }, + "metabase-enterprise.metabot-v3.tools.api.column" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "field_id" : { + "type" : "string" + }, + "field_values" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "type" : "string" + }, + "type" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-type" + } + }, + "required" : [ "field_id", "name" ] + }, + "metabase-enterprise.metabot-v3.tools.api.columns" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + } + }, + "metabase-enterprise.metabot-v3.tools.api.count" : { + "type" : "integer" + }, "metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" : { "allOf" : [ { "type" : "object", @@ -364,6 +579,28 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.field-type" : { + "type" : "string", + "enum" : [ "boolean", "date", "datetime", "time", "number", "string" ] + }, + "metabase-enterprise.metabot-v3.tools.api.field-values" : { + "anyOf" : [ { + "type" : "array", + "items" : { + "type" : "boolean" + } + }, { + "type" : "array", + "items" : { + "type" : "number" + } + }, { + "type" : "array", + "items" : { + "type" : "string" + } + } ] + }, "metabase-enterprise.metabot-v3.tools.api.field-values-arguments" : { "allOf" : [ { "type" : "object", @@ -388,6 +625,38 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.field-values-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "field_id" : { + "type" : "string" + }, + "statistics" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.statistics" + }, + "values" : { + "type" : "array", + "items" : { } + } + }, + "required" : [ "field_id" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.filter" : { "anyOf" : [ { "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.existence-filter" @@ -467,6 +736,86 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.filtering-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Query" + }, + "query_id" : { + "type" : "string" + }, + "result_columns" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + } + }, + "type" : { + "const" : "query" + } + }, + "required" : [ "type", "query_id", "query", "result_columns" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.find-metric-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "default_time_dimension_field_id" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + }, + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "queryable_dimensions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + } + }, + "type" : { + "const" : "metric" + } + }, + "required" : [ "id", "type", "name", "queryable_dimensions" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" : { "allOf" : [ { "type" : "object", @@ -536,24 +885,115 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { - "type" : "object", - "properties" : { - "for" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { - "table_id" : { - "type" : "string" - } + "metabase-enterprise.metabot-v3.tools.api.find-outliers-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "dimension" : { }, + "value" : { + "anyOf" : [ { + "type" : "integer" + }, { + "type" : "number" + } ] + } + }, + "required" : [ "dimension", "value" ] + } + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.full-metric" : { + "type" : "object", + "properties" : { + "default_time_dimension_field_id" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "queryable_dimensions" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "type" : { + "const" : "metric" + } + }, + "required" : [ "id", "type", "name" ] + }, + "metabase-enterprise.metabot-v3.tools.api.full-table" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "fields" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "id" : { + "type" : "integer" + }, + "metrics" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" + } + }, + "name" : { + "type" : "string" + }, + "queryable_foreign_key_tables" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-table" + } + }, + "type" : { + "type" : "string", + "enum" : [ "model", "table" ] + } + }, + "required" : [ "id", "type", "name", "fields" ] + }, + "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { + "type" : "object", + "properties" : { + "for" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "metric_id" : { + "type" : "integer" + } + }, + "required" : [ "metric_id" ] + }, { + "type" : "object", + "properties" : { + "table_id" : { + "type" : "string" + } }, "required" : [ "table_id" ] }, { @@ -578,6 +1018,74 @@ }, "required" : [ "for" ] }, + "metabase-enterprise.metabot-v3.tools.api.get-current-user-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "email_address" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "type" : { + "const" : "user" + } + }, + "required" : [ "id", "type", "name", "email_address" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.get-dashboard-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "type" : { + "const" : "dashboard" + } + }, + "required" : [ "id", "type", "name" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" : { "allOf" : [ { "type" : "object", @@ -604,6 +1112,60 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.get-metric-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.get-query-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "query" : { + "type" : "object", + "properties" : { } + }, + "query_id" : { + "type" : "string" + }, + "result_columns" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "type" : { + "const" : "query" + } + }, + "required" : [ "type", "query_id", "query", "result_columns" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" : { "allOf" : [ { "type" : "object", @@ -626,6 +1188,43 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.get-report-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "result_columns" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "type" : { + "const" : "question" + } + }, + "required" : [ "id", "type", "name", "result_columns" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" : { "allOf" : [ { "type" : "object", @@ -662,6 +1261,25 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.get-table-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.group-by" : { "allOf" : [ { "type" : "object", @@ -705,6 +1323,9 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.proportion" : { + "type" : "number" + }, "metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" : { "allOf" : [ { "type" : "object", @@ -788,6 +1409,59 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.statistics" : { + "type" : "object", + "properties" : { + "values" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" + }, + "min" : { + "type" : "number" + }, + "percent_url" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "average_length" : { + "type" : "number" + }, + "earliest" : { + "type" : "string" + }, + "q1" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "distinct_count" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.count" + }, + "percent_state" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "percent_null" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "avg" : { + "type" : "number" + }, + "sd" : { + "type" : "number" + }, + "percent_email" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "latest" : { + "type" : "string" + }, + "q3" : { + "type" : "number" + }, + "percent_json" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + } + } + }, "metabase-enterprise.metabot-v3.tools.api.string-filter" : { "allOf" : [ { "type" : "object", @@ -926,154 +1600,15 @@ }, "required" : [ "conversation_id" ] }, - "metabase.analyze.fingerprint.schema.Fingerprint" : { - "type" : "object", - "properties" : { - "experimental" : { - "type" : "object", - "properties" : { } - }, - "global" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.GlobalFingerprint" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" - } - } - }, - "metabase.analyze.fingerprint.schema.GlobalFingerprint" : { - "type" : "object", - "properties" : { - "distinct-count" : { - "type" : "integer" - }, - "nil%" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - } - } - }, - "metabase.analyze.fingerprint.schema.NumberFingerprint" : { - "type" : "object", - "properties" : { - "avg" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "min" : { - "type" : "number" - }, - "q1" : { - "type" : "number" - }, - "q3" : { - "type" : "number" - }, - "sd" : { - "type" : "number" - } - } - }, - "metabase.analyze.fingerprint.schema.Percent" : { - "type" : "number" - }, - "metabase.analyze.fingerprint.schema.TemporalFingerprint" : { - "type" : "object", - "properties" : { - "earliest" : { - "type" : "string" - }, - "latest" : { - "type" : "string" - } - } - }, - "metabase.analyze.fingerprint.schema.TextFingerprint" : { - "type" : "object", - "properties" : { - "average-length" : { - "type" : "number" - }, - "percent-email" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-json" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-state" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-url" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - } - } - }, - "metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" : { - "type" : "object", - "properties" : { - "type/DateTime" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TemporalFingerprint" - }, - "type/Number" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.NumberFingerprint" - }, - "type/Text" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TextFingerprint" - } - } - }, - "metabase.analyze.query-results.MaybeUnnormalizedReference" : { }, - "metabase.analyze.query-results.ResultColumnMetadata" : { - "type" : "object", - "properties" : { - "field_ref" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.MaybeUnnormalizedReference" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Fingerprint" - }, - "base_type" : { - "description" : "value must be a valid field data type (keyword or string)." - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "description" : "value must be a valid field semantic or relation type (keyword or string)." - }, - "display_name" : { - "type" : "string" - }, - "converted_timezone" : { - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - }, - "unit" : { - "description" : "value must be a keyword or string.", - "anyOf" : [ { - "type" : "string" - }, { - "type" : "string" - } ] - }, - "description" : { - "type" : "string" - } - }, - "required" : [ "name", "display_name", "base_type" ] - }, - "metabase.analyze.query-results.ResultsMetadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultColumnMetadata" - }, - "description" : "value must be an array of valid results column metadata maps.", - "optional" : true - }, - "metabase.cache.api..cache-strategy.base" : { + "metabase.analyze.query-results.ResultsMetadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + }, + "description" : "value must be an array of valid results column metadata maps.", + "optional" : true + }, + "metabase.cache.api..cache-strategy.base" : { "type" : "object", "properties" : { "type" : { @@ -1258,65 +1793,2653 @@ "required" : [ "type", "subject", "body" ] } ] }, - "metabase.lib.schema.common.non-blank-string" : { - "type" : "string", - "minLength" : 1 + "metabase.collections.api.DashboardQuestionCandidate" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "type" : "string" + }, + "sole_dashboard_info" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "type" : "string" + } + }, + "required" : [ "id", "name" ] + } + }, + "required" : [ "id", "name", "sole_dashboard_info" ] }, - "metabase.lib.schema.expression.temporal.timezone-id" : { - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + "metabase.collections.api.DashboardQuestionCandidatesResponse" : { + "type" : "object", + "properties" : { + "data" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidate" + } + }, + "total" : { + "type" : "integer" + } + }, + "required" : [ "data", "total" ] + }, + "metabase.collections.api.MoveDashboardQuestionCandidatesResponse" : { + "type" : "object", + "properties" : { + "moved" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + } + }, + "required" : [ "moved" ] + }, + "metabase.legacy-mbql.schema.!=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.*" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.+" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.-" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema./" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.<" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.<=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.>" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.>=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.Addable" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeExpressionArg" }, { - "anyOf" : [ { - "type" : "string", - "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" - } ] + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.interval" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpressionArg" } ] }, - "metabase.lib.schema.id.card" : { - "type" : "integer", - "minimum" : 1 + "metabase.legacy-mbql.schema.Aggregation" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation-options" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.UnnamedAggregation" + } ] }, - "metabase.lib.schema.id.field" : { - "type" : "integer", - "minimum" : 1 + "metabase.legacy-mbql.schema.BooleanExpression" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.and" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.or" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.!=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.between" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.starts-with" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ends-with" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.contains" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.in" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-in" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.does-not-contain" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.inside" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-empty" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-empty" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-null" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-null" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-time-interval" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time-interval" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.during" + } ] }, - "metabase.lib.schema.literal..string.datetime" : { + "metabase.legacy-mbql.schema.Constraints" : { + "description" : "Additional constraints added to a query limiting the maximum number of rows that can be returned. Mostly useful\n because native queries don't support the MBQL `:limit` clause. For MBQL queries, if `:limit` is set, it will\n override these values.", + "type" : "object", + "properties" : { + "max-results" : { + "description" : "Maximum number of results to allow for a query with aggregations. If `max-results-bare-rows` is unset, this\n applies to all queries", + "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" + }, + "max-results-bare-rows" : { + "description" : "Maximum number of results to allow for a query with no aggregations. If set, this should be LOWER than\n `:max-results`.", + "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" + } + } + }, + "metabase.legacy-mbql.schema.DatabaseID" : { + "description" : "Schema for a valid `:database` ID, in the top-level 'outer' query. Either a positive integer (referring to an\n actual Database), or the saved questions virtual ID, which is a placeholder used for queries using the\n `:source-table \"card__id\"` shorthand for a source query resolved by middleware (since clients might not know the\n actual DB for that source query.)", "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" + "$ref" : "#/components/schemas/metabase.lib.schema.id.saved-questions-virtual-database" }, { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" + "$ref" : "#/components/schemas/metabase.lib.schema.id.database" } ] }, - "metabase.lib.schema.literal..string.zone-offset" : { - "type" : "string", - "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" + "metabase.legacy-mbql.schema.DateOrDatetimeLiteral" : { + "description" : "Schema for a valid date or datetime literal.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.absolute-datetime" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal.datetime" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal.date" + } ] }, - "metabase.lib.schema.metadata..column.has-field-values" : { + "metabase.legacy-mbql.schema.DateTimeExpressionArg" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + } ] + }, + "metabase.legacy-mbql.schema.DateTimeUnit" : { + "description" : "Valid unit for *datetime* bucketing.", "type" : "string", - "enum" : [ "auto-list", "list", "none", "search" ] + "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] }, - "metabase.lib.schema.temporal-bucketing.unit" : { + "metabase.legacy-mbql.schema.DateUnit" : { + "description" : "Valid unit for date bucketing.", "type" : "string", - "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] + "enum" : [ "quarter", "day", "week", "default", "day-of-week", "month", "month-of-year", "day-of-month", "year", "day-of-year", "year-of-era", "week-of-year", "quarter-of-year" ] }, - "metabase.logger.api.time-unit" : { + "metabase.legacy-mbql.schema.DatetimeDiffUnit" : { + "description" : "Valid units for a datetime-diff clause.", "type" : "string", - "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] + "enum" : [ "second", "minute", "hour", "day", "week", "month", "quarter", "year" ] }, - "metabase.notification.models.FullyHydratedNotification" : { - "description" : "Fully hydrated notification.", + "metabase.legacy-mbql.schema.DatetimeExpression" : { "oneOf" : [ { - "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-add" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-subtract" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.convert-timezone" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.now" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.date" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.today" + } ] + }, + "metabase.legacy-mbql.schema.EqualityComparable" : { + "anyOf" : [ { + "type" : "boolean" + }, { + "type" : "number" + }, { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + } ], + "optional" : true + }, + "metabase.legacy-mbql.schema.ExpressionArg" : { + "oneOf" : [ { + "type" : "number" + }, { + "type" : "boolean" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.ExtractWeekMode" : { + "description" : "Valid modes to extract weeks.", + "type" : "string", + "enum" : [ "iso", "us", "instance" ] + }, + "metabase.legacy-mbql.schema.FieldOptions" : { + "allOf" : [ { + "type" : "object", + "properties" : { + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning", + "description" : "Replaces `binning-strategy`.\n\n Using binning requires the driver to support the `:binning` feature." + }, + "inherited-temporal-unit" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" + }, + "join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias", + "description" : "Replaces `joined-field`.\n\n `:join-alias` is used to refer to a FieldOrExpression from a different Table/nested query that you are EXPLICITLY\n JOINING against." + }, + "source-field" : { + "description" : "Replaces `fk->`.\n\n `:source-field` is used to refer to a FieldOrExpression from a different Table you would like IMPLICITLY JOINED to\n the source table.\n\n If both `:source-field` and `:join-alias` are supplied, `:join-alias` should be used to perform the join;\n `:source-field` should be for information purposes only.", + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "source-field-join-alias" : { + "description" : "The join alias of the source field used for an implicit join.", + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "source-field-name" : { + "description" : "The name or desired alias of the field used for an implicit join.", + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "temporal-unit" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit", + "description" : "`:temporal-unit` is used to specify DATE BUCKETING for a FieldOrExpression that represents a moment in time of\n some sort.\n\n There is no requirement that all `:type/Temporal` derived FieldOrExpressions specify a `:temporal-unit`, but for\n legacy reasons `:field` clauses that refer to `:type/DateTime` FieldOrExpressions will be automatically \"bucketed\"\n in the `:breakout` and `:filter` clauses, but nowhere else. Auto-bucketing only applies to `:filter` clauses when\n values for comparison are `yyyy-MM-dd` date strings. See the `auto-bucket-datetimes` middleware for more details.\n `:field` clauses elsewhere will not be automatically bucketed, so drivers still need to make sure they do any\n special datetime handling for plain `:field` clauses when their FieldOrExpression derives from `:type/DateTime`." + } + } + }, { + "description" : "If `:base-type` is specified, the `:temporal-unit` must make sense, e.g. no bucketing by `:year`for\n a `:type/Time` column.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.validate-temporal-unit" + }, { + "description" : "You cannot use `:binning` keys like `:strategy` in the top level.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.no-binning-options-at-top-level" + } ] + }, + "metabase.legacy-mbql.schema.FieldOrExpressionDef" : { + "description" : "Schema for anything that is accepted as a top-level expression definition, either an arithmetic expression such as a\n `:+` clause or a `:field` or `:value` clause.", + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.Fields" : { + "allOf" : [ { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, + "minItems" : 1 + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" + } ] + }, + "metabase.legacy-mbql.schema.Filter" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.segment" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.Ident" : { + "description" : "Unique identifier string for new `:column` refs. The new refs aren't used in legacy MBQL (currently) but the\n idents for column-introducing new clauses (joins, aggregations, breakouts, expressions) are randomly generated when\n the clauses are created, so the idents must be preserved in legacy MBQL.\n\n These are opaque strings under the initial design; I've made them a separate schema for documentation and\n future-proofing.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, { + "type" : "string" + } ] + }, + "metabase.legacy-mbql.schema.IntGreaterThanZeroOrNumericExpression" : { + "oneOf" : [ { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + } ] + }, + "metabase.legacy-mbql.schema.Join" : { + "description" : "Perform the equivalent of a SQL `JOIN` with another Table or nested `:source-query`. JOINs are either explicitly\n specified in the incoming query, or implicitly generated when one uses a `:field` clause with `:source-field`.\n\n In the top-level query, you can reference Fields from the joined table or nested query by including `:source-field`\n in the `:field` options (known as implicit joins); for explicit joins, you *must* specify `:join-alias` yourself; in\n the `:field` options, e.g.\n\n ;; for joins against other Tables/MBQL source queries\n [:field 1 {:join-alias \"my_join_alias\"}]\n\n ;; for joins against native queries\n [:field \"my_field\" {:base-type :field/Integer, :join-alias \"my_join_alias\"}]", + "type" : "object", + "properties" : { + "ident" : { + "description" : "An opaque string used as a unique identifier for this join clause, even if it evolves. This string is randomly\n generated when a join clause is created, so it can never be confused with another join of the same table.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Ident" + }, + "strategy" : { + "description" : "Defaults to `:left-join`; used for all automatically-generated JOINs\n\n Driver implementations: this is guaranteed to be present after pre-processing.", + "type" : "string", + "enum" : [ "full-join", "right-join", "left-join", "inner-join" ] + }, + "source-metadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + }, + "description" : "Metadata about the source query being used, if pulled in from a Card via the\n `:source-table \"card__id\"` syntax. added automatically by the `resolve-card-id-source-tables` middleware." + }, + "condition" : { + "description" : "The condition on which to JOIN. Can be anything that is a valid `:filter` clause. For automatically-generated\n JOINs this is usually something like\n\n [:= [:field {:join-alias }]]", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" + }, + "source-query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" + }, + "fk-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field", + "description" : "Mostly used only internally. When a join is implicitly generated via a `:field` clause with\n `:source-field`, the ID of the foreign key field in the source Table will be recorded here. This information is used\n to add `fk_field_id` information to the `:cols` in the query results, and also for drill-thru. When generating\n explicit joins by hand you can usually omit this information, altho it doesn't hurt to include it if you know it.\n\n Don't set this information yourself. It will have no effect." + }, + "fields" : { + "description" : "The Fields from this join to include in parent-level results. This can be either `:none`, `:all`, or a sequence\n of `:field` clauses.\n\n * `:none`: no Fields from the joined table or nested query are included (unless indirectly included by breakouts or\n other clauses). This is the default, and what is used for automatically-generated joins.\n\n * `:all`: will include all of the Field from the joined table or query\n\n * a sequence of Field clauses: include only the Fields specified. Valid clauses are the same as the top-level\n `:fields` clause. This should be non-empty and all elements should be distinct. The normalizer will automatically\n remove duplicate fields for you, and replace empty clauses with `:none`.\n\n Driver implementations: you can ignore this clause. Relevant fields will be added to top-level `:fields` clause with\n appropriate aliases.", + "anyOf" : [ { + "type" : "string", + "enum" : [ "all", "none" ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" + } ] + }, + "source-table" : { + "description" : "*What* to JOIN. Self-joins can be done by using the same `:source-table` as in the query where\n this is specified. YOU MUST SUPPLY EITHER `:source-table` OR `:source-query`, BUT NOT BOTH!", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.id.table" + }, { + "description" : "`card__` string Table ID", + "type" : "string", + "pattern" : "^card__[1-9]\\d*$" + } ] + }, + "alias" : { + "description" : "The name used to alias the joined table or query. This is usually generated automatically and generally looks\n like `table__via__field`. You can specify this yourself if you need to reference a joined field with a `:join-alias`\n in the options.\n\n Driver implementations: This is guaranteed to be present after pre-processing.", + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + } + }, + "required" : [ "condition" ] + }, + "metabase.legacy-mbql.schema.Joins" : { + "description" : "Schema for a valid sequence of `Join`s. Must be a non-empty sequence, and `:alias`, if specified, must be unique.", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Join" + }, + "minItems" : 1 + }, + "metabase.legacy-mbql.schema.MBQLQuery" : { + "type" : "object", + "properties" : { + "breakout" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, + "minItems" : 1 + }, + "source-metadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + }, + "description" : "Info about the columns of the source query. Added in automatically by middleware. This metadata is\n primarily used to let power things like binning when used with Field Literals instead of normal Fields." + }, + "source-query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" + }, + "limit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" + }, + "filter" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" + }, + "joins" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Joins" + }, + "aggregation" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, + "minItems" : 1 + }, + "fields" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" + }, + "source-table" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.id.table" + }, { + "description" : "`card__` string Table ID", + "type" : "string", + "pattern" : "^card__[1-9]\\d*$" + } ] + }, + "order-by" : { + "allOf" : [ { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.OrderBy" + }, + "minItems" : 1 + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" + } ] + }, + "page" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Page" + }, + "expressions" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.FieldOrExpressionDef" + } + } + } + }, + "metabase.legacy-mbql.schema.MiddlewareOptions" : { + "description" : "Additional options that can be used to toggle middleware on or off.", + "type" : "object", + "properties" : { + "add-default-userland-constraints?" : { + "type" : "boolean", + "description" : "Whether to add some default `max-results` and `max-results-bare-rows` constraints. By default, none are added,\n although the functions that ultimately power most API endpoints tend to set this to `true`. See\n `add-constraints` middleware for more details." + }, + "disable-max-results?" : { + "description" : "Disable applying a default limit on the query results. Handled in the `add-default-limit` middleware. If true,\n this will override the `:max-results` and `:max-results-bare-rows` values in `Constraints`.", + "type" : "boolean" + }, + "disable-mbql->native?" : { + "description" : "Disable the MBQL->native middleware. If you do this, the query will not work at all, so there are no cases where\n you should set this yourself. This is only used by the `metabase.query-processor.preprocess/preprocess` function to\n get the fully pre-processed query without attempting to convert it to native.", + "type" : "boolean" + }, + "format-rows?" : { + "description" : "Should we skip converting datetime types to ISO-8601 strings with appropriate timezone when post-processing\n results? Used by `metabase.query-processor.middleware.format-rows`default `false`.", + "type" : "boolean" + }, + "process-viz-settings?" : { + "type" : "boolean", + "description" : "Whether to process a question's visualization settings and include them in the result metadata so that they can\n incorporated into an export. Used by `metabase.query-processor.middleware.visualization-settings`; default\n `false`." + }, + "skip-results-metadata?" : { + "description" : "Should we skip adding `results_metadata` to query results after running the query? Used by\n `metabase.query-processor.middleware.results-metadata`; default `false`. (Note: we may change the name of this\n column in the near future, to `result_metadata`, to fix inconsistencies in how we name things.)", + "type" : "boolean" + }, + "userland-query?" : { + "type" : "boolean", + "description" : "Userland queries are ones ran as a result of an API call, Pulse, or the like. Special handling is done in\n certain userland-only middleware for such queries -- results are returned in a slightly different format, and\n QueryExecution entries are normally saved, unless you pass `:no-save` as the option." + } + } + }, + "metabase.legacy-mbql.schema.NativeSourceQuery" : { + "type" : "object", + "properties" : { + "collection" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "native" : { }, + "template-tags" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" + } + }, + "required" : [ "native" ] + }, + "metabase.legacy-mbql.schema.NumericExpression" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.-" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.~1" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.*" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.length" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.floor" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ceil" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.round" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.abs" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.power" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sqrt" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.exp" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.log" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-diff" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.integer" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.float" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.temporal-extract" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-year" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-quarter" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-month" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-week" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day-of-week" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-hour" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-minute" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-second" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" + } ] + }, + "metabase.legacy-mbql.schema.NumericExpressionArg" : { + "oneOf" : [ { + "type" : "number" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + } ] + }, + "metabase.legacy-mbql.schema.OrderBy" : { + "description" : "Schema for an `order-by` clause subclause.", + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.asc" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.desc" + } ] + }, + "metabase.legacy-mbql.schema.OrderComparable" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "anyOf" : [ { + "type" : "number" + }, { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + } ] + } ] + }, + "metabase.legacy-mbql.schema.Page" : { + "description" : "`page` = page num, starting with 1. `items` = number of items per page.\n e.g.\n\n {:page 1, :items 10} = items 1-10\n {:page 2, :items 10} = items 11-20", + "type" : "object", + "properties" : { + "items" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "page" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "page", "items" ] + }, + "metabase.legacy-mbql.schema.Parameter" : { + "description" : "Schema for the *value* of a parameter (e.g. a Dashboard parameter or a native query template tag) as passed in as\n part of the `:parameters` list in a query.", + "type" : "object", + "properties" : { + "default" : { }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { }, + "slug" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "target" : { + "oneOf" : [ { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" + } ] + } ] + }, { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" + } ] + } ] + }, { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" + } ] + } ] + } ] + }, + "type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" + }, + "value" : { } + }, + "required" : [ "type" ] + }, + "metabase.legacy-mbql.schema.ParameterList" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Parameter" + }, + "optional" : true + }, + "metabase.legacy-mbql.schema.Query" : { + "allOf" : [ { + "type" : "object", + "properties" : { + "update-row" : { + "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" + }, + "settings" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Settings" + }, + "constraints" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Constraints" + }, + "query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" + }, + "native" : { + "type" : "object", + "properties" : { + "collection" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "query" : { }, + "template-tags" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" + } + }, + "required" : [ "query" ] + }, + "info" : { + "$ref" : "#/components/schemas/metabase.lib.schema.info.info", + "description" : "Used when recording info about this run in the QueryExecution log; things like context query was\n ran in and User who ran it." + }, + "middleware" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MiddlewareOptions" + }, + "database" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatabaseID" + }, + "type" : { + "description" : "Type of query. `:query` = MBQL; `:native` = native.", + "type" : "string", + "enum" : [ "query", "native" ] + }, + "parameters" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ParameterList" + }, + "create-row" : { + "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" + } + }, + "required" : [ "type" ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-keys-for-query-type" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" + } ] + }, + "metabase.legacy-mbql.schema.Reference" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + } ] + }, + "metabase.legacy-mbql.schema.RelativeDatetimeUnit" : { + "type" : "string", + "enum" : [ "default", "minute", "hour", "day", "week", "month", "quarter", "year" ] + }, + "metabase.legacy-mbql.schema.Settings" : { + "description" : "Options that tweak the behavior of the query processor.", + "type" : "object", + "properties" : { + "report-timezone" : { + "description" : "The timezone the query should be ran in, overriding the default report timezone for the instance.", + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" + } + } + }, + "metabase.legacy-mbql.schema.SourceQuery" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NativeSourceQuery" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" + } ] + }, + "metabase.legacy-mbql.schema.StringExpression" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.substring" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.trim" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ltrim" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.rtrim" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.replace" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.lower" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.upper" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.concat" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.regex-match-first" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.host" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.domain" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.subdomain" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.path" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.month-name" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.quarter-name" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.day-name" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.text" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.split-part" + } ] + }, + "metabase.legacy-mbql.schema.StringExpressionArg" : { + "oneOf" : [ { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.TemplateTag" : { + "description" : "Schema for a template tag as specified in a native query. There are four types of template tags, differentiated by\n `:type`.\n\n Template tags are used to specify {{placeholders}} in native queries that are replaced with some sort of value when\n the query itself runs. There are four basic types of template tag for native queries:\n\n 1. Field filters, which are used like\n\n SELECT * FROM table WHERE {{field_filter}}\n\n These reference specific Fields and are replaced with entire conditions, e.g. `some_field > 1000`\n\n 2. Raw values, which are used like\n\n SELECT * FROM table WHERE my_field = {{x}}\n\n These are replaced with raw values.\n\n 3. Native query snippets, which might be used like\n\n SELECT * FROM ({{snippet: orders}}) source\n\n These are replaced with `NativeQuerySnippet`s from the application database.\n\n 4. Source query Card IDs, which are used like\n\n SELECT * FROM ({{#123}}) source\n\n These are replaced with the query from the Card with that ID.\n\n Field filters and raw values usually have their value specified by `:parameters`.", + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:FieldFilter" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:Snippet" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:SourceQuery" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:RawValue" + } ] + }, + "metabase.legacy-mbql.schema.TemplateTag:FieldFilter" : { + "description" : "Schema for a field filter template tag.", + "type" : "object", + "properties" : { + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { + "type" : "boolean" + }, + "type" : { + "const" : "dimension" + }, + "alias" : { + "type" : "string" + }, + "options" : { + "type" : "object", + "additionalProperties" : { }, + "description" : "optional map to be appended to filter clause" + }, + "dimension" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + }, + "default" : { }, + "widget-type" : { + "description" : "which type of widget the frontend should show for this Field Filter; this also affects which parameter types\n are allowed to be specified for it.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.WidgetType" + } + }, + "required" : [ "type", "name", "display-name", "dimension", "widget-type" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:RawValue" : { + "description" : "Schema for a raw value template tag.", + "type" : "object", + "properties" : { + "default" : { }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { + "type" : "boolean" + }, + "type" : { + "type" : "string", + "enum" : [ "date", "number", "boolean", "text" ] + } + }, + "required" : [ "type", "name", "display-name" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:Snippet" : { + "description" : "Schema for a native query snippet template tag.", + "type" : "object", + "properties" : { + "database" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "snippet-id" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "snippet-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "type" : { + "const" : "snippet" + } + }, + "required" : [ "type", "name", "display-name", "snippet-name", "snippet-id" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:SourceQuery" : { + "description" : "Schema for a source query template tag.", + "type" : "object", + "properties" : { + "card-id" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "type" : { + "const" : "card" + } + }, + "required" : [ "type", "name", "display-name", "card-id" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" : { + "description" : "Schema for a temporal unit template tag.", + "type" : "object", + "properties" : { + "alias" : { + "type" : "string" + }, + "default" : { }, + "dimension" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { + "type" : "boolean" + }, + "type" : { + "const" : "temporal-unit" + } + }, + "required" : [ "type", "name", "display-name", "dimension" ] + }, + "metabase.legacy-mbql.schema.TemplateTagMap" : { + "description" : "Schema for the `:template-tags` map passed in as part of a native query.\n\n Map of template tag name -> template tag definition", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag" + } + }, + "metabase.legacy-mbql.schema.TemporalExtractUnit" : { + "description" : "Valid units to extract from a temporal.", + "type" : "string", + "enum" : [ "year-of-era", "quarter-of-year", "month-of-year", "week-of-year-iso", "week-of-year-us", "week-of-year-instance", "day-of-month", "day-of-week", "day-of-week-iso", "hour-of-day", "minute-of-hour", "second-of-minute" ] + }, + "metabase.legacy-mbql.schema.TemporalLiteral" : { + "description" : "Schema for valid temporal literals.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TimeLiteral" + } ] + }, + "metabase.legacy-mbql.schema.TimeLiteral" : { + "description" : "Schema for valid time literals.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal.time" + } ] + }, + "metabase.legacy-mbql.schema.TimeUnit" : { + "description" : "Valid unit for time bucketing.", + "type" : "string", + "enum" : [ "hour", "second", "default", "hour-of-day", "millisecond", "minute-of-hour", "minute" ] + }, + "metabase.legacy-mbql.schema.UnnamedAggregation" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.avg" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-sum" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct-where" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.stddev" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.min" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.max" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.metric" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.share" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count-where" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum-where" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.median" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.percentile" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ag:var" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-count" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" + } ] + } ] + }, + "metabase.legacy-mbql.schema.ValueTypeInfo" : { + "description" : "Type info about a value in a `:value` clause. Added automatically by `wrap-value-literals` middleware to values in filter clauses based on the Field in the clause.", + "type" : "object", + "properties" : { + "base_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "database_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "semantic_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "unit" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" + } + } + }, + "metabase.legacy-mbql.schema.WidgetType" : { + "description" : "Schema for valid values of `:widget-type` for a [[::TemplateTag:FieldFilter]].", + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.widget-type" + }, + "metabase.legacy-mbql.schema.abs" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.absolute-datetime" : { + "oneOf" : [ { }, { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.ag:var" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.aggregation" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.aggregation-options" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.and" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.asc" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.avg" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.between" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.case" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.case:if" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.ceil" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.check-keys-for-query-type" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" : { + "description" : "`:source-metadata` is added to queries when `card__id` source queries are resolved. It contains info about the\n columns in the source query.\n\n Where this is added was changed in Metabase 0.33.0 -- previously, when `card__id` source queries were resolved, the\n middleware would add `:source-metadata` to the top-level; to support joins against source queries, this has been\n changed so it is always added at the same level the resolved `:source-query` is added.\n\n This should automatically be fixed by `normalize`; if we encounter it, it means some middleware is not functioning\n properly." + }, + "metabase.legacy-mbql.schema.coalesce" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.concat" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.contains" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.convert-timezone" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.count" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.count-where" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.cum-count" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.cum-sum" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.date" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime-add" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime-diff" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime-subtract" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.day-name" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.desc" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.dimension" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.distinct" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.distinct-where" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.does-not-contain" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.domain" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.during" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.ends-with" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.exp" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.expression" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.field" : { + "allOf" : [ { + "allOf" : [ ] + }, { + "description" : "Fields using names rather than integer IDs are required to specify `:base-type`.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.require-base-type-for-field-name" + } ] + }, + "metabase.legacy-mbql.schema.field-or-expression-ref" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + } ] + }, + "metabase.legacy-mbql.schema.float" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.floor" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-day" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-day-of-week" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-hour" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-minute" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-month" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-quarter" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-second" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-week" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-year" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.helpers.distinct" : { + "description" : "values must be distinct" + }, + "metabase.legacy-mbql.schema.host" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.in" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.inside" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.integer" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.interval" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.is-empty" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.is-null" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.legacy-column-metadata" : { + "description" : "Schema for a single legacy metadata column. This is the pre-Lib equivalent of\n `:metabase.lib.schema.metadata/column`.", + "type" : "object", + "properties" : { + "field_ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" + }, + "visibility_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" + }, + "base_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "display_name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "converted_timezone" : { + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" + }, + "source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" + }, + "effective_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + } + }, + "required" : [ "base_type", "display_name", "name" ] + }, + "metabase.legacy-mbql.schema.length" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.log" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.lower" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.ltrim" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.max" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.median" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.metric" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.min" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.month-name" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.no-binning-options-at-top-level" : { }, + "metabase.legacy-mbql.schema.not" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.not-empty" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.not-in" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.not-null" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.now" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.offset" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.or" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.path" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.percentile" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.power" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.quarter-name" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.regex-match-first" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.relative-datetime" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.relative-time-interval" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.replace" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.require-base-type-for-field-name" : { }, + "metabase.legacy-mbql.schema.round" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.rtrim" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.segment" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.share" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.split-part" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.sqrt" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.starts-with" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.stddev" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.subdomain" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.substring" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.sum" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.sum-where" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.template-tag" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.temporal-extract" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.text" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.time" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.time-interval" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.today" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.trim" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.upper" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.validate-temporal-unit" : { }, + "metabase.legacy-mbql.schema.value" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.variable" : { + "allOf" : [ ] + }, + "metabase.lib.schema.actions.row" : { + "type" : "object", + "additionalProperties" : { } + }, + "metabase.lib.schema.binning.bin-width" : { + "description" : "Bin width (size of each bin).", + "$ref" : "#/components/schemas/metabase.lib.schema.common.positive-number" + }, + "metabase.lib.schema.binning.binning" : { + "description" : "Schema for `:binning` options passed to a `:field` clause.", + "allOf" : [ { + "type" : "object", + "properties" : { + "strategy" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.strategy" + } + }, + "required" : [ "strategy" ] + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { + "strategy" : { + "const" : "default" + } + }, + "required" : [ "strategy" ] + }, { + "type" : "object", + "properties" : { + "bin-width" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.bin-width" + }, + "strategy" : { + "const" : "bin-width" + } + }, + "required" : [ "strategy", "bin-width" ] + }, { + "type" : "object", + "properties" : { + "num-bins" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.num-bins" + }, + "strategy" : { + "const" : "num-bins" + } + }, + "required" : [ "strategy", "num-bins" ] + } ] + } ] + }, + "metabase.lib.schema.binning.num-bins" : { + "description" : "Number of bins to use.", + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.binning.strategy" : { + "type" : "string", + "enum" : [ "bin-width", "default", "num-bins" ] + }, + "metabase.lib.schema.common.base-type" : { + "type" : "string" + }, + "metabase.lib.schema.common.int-greater-than-or-equal-to-zero" : { + "description" : "Schema representing an integer than must also be greater than or equal to zero.", + "type" : "integer", + "minimum" : 0 + }, + "metabase.lib.schema.common.non-blank-string" : { + "type" : "string", + "minLength" : 1 + }, + "metabase.lib.schema.common.options" : { + "default" : { }, + "type" : "object", + "properties" : { + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "database-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "effective-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/uuid" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.uuid" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "semantic-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + } + }, + "required" : [ "lib/uuid" ] + }, + "metabase.lib.schema.common.positive-number" : { }, + "metabase.lib.schema.common.semantic-or-relation-type" : { + "description" : "valid semantic or relation type", + "type" : "string" + }, + "metabase.lib.schema.common.uuid" : { + "type" : "string", + "minLength" : 36, + "maxLength" : 36 + }, + "metabase.lib.schema.expression.temporal.timezone-id" : { + "allOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, { + "anyOf" : [ { + "type" : "string", + "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" + } ] + } ] + }, + "metabase.lib.schema.expression.window..offset.n" : { + "type" : "integer" + }, + "metabase.lib.schema.id.action" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.card" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.dashboard" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.database" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.dimension" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.field" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.pulse" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.saved-questions-virtual-database" : { + "description" : "The ID used to signify that a database is 'virtual' rather than physical.\n\n A fake integer ID is used so as to minimize the number of changes that need to be made on the frontend -- by using\n something that would otherwise be a legal ID, *nothing* need change there, and the frontend can query against this\n 'database' none the wiser. (This integer ID is negative which means it will never conflict with a *real* database\n ID.)\n\n This ID acts as a sort of flag. The relevant places in the middleware can check whether the DB we're querying is\n this 'virtual' database and take the appropriate actions.", + "const" : -1337 + }, + "metabase.lib.schema.id.segment" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.table" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.user" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.info.context" : { + "type" : "string", + "enum" : [ "action", "ad-hoc", "cache-refresh", "collection", "map-tiles", "pulse", "dashboard-subscription", "dashboard", "question", "csv-download", "xlsx-download", "json-download", "public-dashboard", "public-question", "public-csv-download", "public-xlsx-download", "public-json-download", "embedded-dashboard", "embedded-question", "embedded-csv-download", "embedded-xlsx-download", "embedded-json-download", "table-grid" ] + }, + "metabase.lib.schema.info.hash" : { + "type" : "string", + "format" : "byte" + }, + "metabase.lib.schema.info.info" : { + "type" : "object", + "properties" : { + "query-hash" : { + "$ref" : "#/components/schemas/metabase.lib.schema.info.hash" + }, + "action-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.action" + }, + "pivot/original-query" : { + "type" : "object", + "additionalProperties" : { } + }, + "executed-by" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.user" + }, + "card-entity-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "card-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.card" + }, + "pivot/result-metadata" : { + "oneOf" : [ { + "const" : "none" + }, { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.column" + } + } ] + }, + "context" : { + "$ref" : "#/components/schemas/metabase.lib.schema.info.context" + }, + "dashboard-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.dashboard" + }, + "metadata/model-metadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.lib-or-legacy-column" + } + }, + "pulse-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.pulse" + }, + "card-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } + } + }, + "metabase.lib.schema.join.alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "metabase.lib.schema.literal..string.date" : { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}$" + }, + "metabase.lib.schema.literal..string.datetime" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" + }, { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" + } ] + }, + "metabase.lib.schema.literal..string.time" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" + }, { + "type" : "string", + "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" + } ] + }, + "metabase.lib.schema.literal..string.zone-offset" : { + "type" : "string", + "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" + }, + "metabase.lib.schema.literal.date" : { + "anyOf" : [ { }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.date" + } ] + }, + "metabase.lib.schema.literal.datetime" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.datetime" + }, { }, { }, { } ] + }, + "metabase.lib.schema.literal.time" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.time" + }, { }, { } ] + }, + "metabase.lib.schema.metadata..column.has-field-values" : { + "type" : "string", + "enum" : [ "auto-list", "list", "none", "search" ] + }, + "metabase.lib.schema.metadata..column.legacy-source" : { + "description" : "Possible values for `column.source` -- this is added by [[metabase.lib.metadata.result-metadata]] for historical\n reasons (it is used in a few places in the FE). DO NOT use this in the backend for any purpose, use `:lib/source`\n instead.", + "type" : "string", + "enum" : [ "aggregation", "fields", "breakout", "native" ] + }, + "metabase.lib.schema.metadata..column.remapping.external" : { + "description" : "External remapping (Dimension) for a column. From the [[metabase.warehouse-schema.models.dimension]] with `type =\n external` associated with a `Field` in the application database.\n See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", + "type" : "object", + "properties" : { + "field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" + }, + "lib/type" : { + "const" : "metadata.column.remapping/external" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } + }, + "required" : [ "lib/type", "id", "name", "field-id" ] + }, + "metabase.lib.schema.metadata..column.remapping.internal" : { + "description" : "Internal remapping (FieldValues) for a column. From [[metabase.warehouse-schema.models.dimension]] with `type =\n internal` and the [[metabase.warehouse-schema.models.field-values]] associated with a `Field` in the application\n database. See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", + "type" : "object", + "properties" : { + "human-readable-values" : { + "type" : "array", + "items" : { } + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" + }, + "lib/type" : { + "const" : "metadata.column.remapping/internal" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "values" : { + "type" : "array", + "items" : { } + } + }, + "required" : [ "lib/type", "id", "name", "values", "human-readable-values" ] + }, + "metabase.lib.schema.metadata..column.source" : { + "description" : "`:lib/source` -- where a column came from with respect to the current stage.\n\n Traditionally, `:lib/source` meant something slightly different -- it denoted what part of the current stage a\n column came from, and thus included two additional options -- `:source/fields`, for columns used by `:fields`, and\n `:source/breakouts`, for columns used in `:breakout`. This was not really useful information and made `:lib/source`\n itself useless for determining if a column was 'inherited' or not (i.e., whether it came from a previous stage,\n source card, or a join, and should get field name refs instead of field ID refs --\n see [[metabase.lib.field.util/inherited-column?]]).", + "type" : "string", + "enum" : [ "source/card", "source/native", "source/previous-stage", "source/table-defaults", "source/aggregations", "source/joins", "source/expressions", "source/implicitly-joinable" ] + }, + "metabase.lib.schema.metadata..column.validate-expression-source" : { + "description" : "Only allow `:lib/expression-name` when `:lib/source` is `:source/expressions`. If it's anything else, it probably\n means it's getting incorrectly propagated from a previous stage (QUE-1342)." + }, + "metabase.lib.schema.metadata..column.validate-native-column" : { + "description" : "Certain keys cannot possibly be set when a column comes from directly from native query results, for example\n `:lib/breakout?` or join aliases" + }, + "metabase.lib.schema.metadata..column.validate-table-defaults-column" : { + "description" : "A column with :lib/source :source/table-defaults cannot possibly have a join alias." + }, + "metabase.lib.schema.metadata..column.visibility-type" : { + "type" : "string", + "enum" : [ "retired", "sensitive", "normal", "hidden", "details-only" ] + }, + "metabase.lib.schema.metadata.column" : { + "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", + "allOf" : [ { + "type" : "object", + "properties" : { + "visibility-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" + }, + "fk-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/external-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" + }, + "inherited-temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "lib/source-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" + }, + "database-type" : { + "type" : "string" + }, + "lib/type" : { + "default" : "metadata/column", + "const" : "metadata/column" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" + }, + "display-name" : { + "type" : "string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "effective-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/deduplicated-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" + }, + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/original-expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "fk-field-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "type" : "string" + }, + "lib/card-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.card" + }, + "lib/expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/breakout?" : { + "type" : "boolean" + }, + "metabase.lib.field/temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "metabase.lib.field/binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/model-display-name" : { + "type" : "string" + }, + "has-field-values" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" + }, + "lib/internal-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" + }, + "selected?" : { + "type" : "boolean" + }, + "source-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" + }, + "metabase.lib.join/join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "fk-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "lib/original-binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/original-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "lib/original-display-name" : { + "type" : "string" + }, + "lib/source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" + }, + "active" : { + "type" : "boolean" + }, + "lib/ref-display-name" : { + "type" : "string" + }, + "lib/original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "lib/hack-original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "semantic-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "fk-target-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "field-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + }, + "lib/desired-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" + } + }, + "required" : [ "lib/type", "name", "base-type" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" + } ] + }, + "metabase.lib.schema.metadata.deduplicated-name" : { + "type" : "string", + "description" : "The simply-deduplicated name that was historically used in QP results metadata (originally calculated by\n the [[metabase.query-processor.middleware.annotate]] middleware, now calculated\n by [[metabase.lib.middleware.result-metadata]]). This just adds suffixes to column names e.g. `ID` and `ID` become\n `ID` and `ID_2`, respectively. Kept around because many old field refs use this column name.", + "optional" : true + }, + "metabase.lib.schema.metadata.desired-column-alias" : { + "type" : "string", + "minLength" : 1 + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.global" : { + "description" : "Fingerprint values that Fields of all types should have.", + "type" : "object", + "properties" : { + "distinct-count" : { + "type" : "integer" + }, + "nil%" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.number" : { + "description" : "Schema for fingerprint information for Fields deriving from `:type/Number`.", + "type" : "object", + "properties" : { + "avg" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "min" : { + "type" : "number" + }, + "q1" : { + "type" : "number" + }, + "q3" : { + "type" : "number" + }, + "sd" : { + "type" : "number" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" : { + "description" : "Schema for fingerprint information for Fields deriving from `:type/Temporal`.", + "type" : "object", + "properties" : { + "earliest" : { + "type" : "string" + }, + "latest" : { + "type" : "string" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.text" : { + "description" : "Schema for fingerprint information for Fields deriving from `:type/Text`.", + "type" : "object", + "properties" : { + "average-length" : { + "type" : "number" + }, + "percent-email" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + }, + "percent-json" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + }, + "percent-state" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + }, + "percent-url" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" : { + "description" : "Schema for type-specific fingerprint information.", + "allOf" : [ { + "type" : "object", + "additionalProperties" : { + "type" : "object", + "properties" : { } + } + }, { + "type" : "object", + "properties" : { + "type/DateTime" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" + }, + "type/Number" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.number" + }, + "type/Text" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.text" + } + } + } ] + }, + "metabase.lib.schema.metadata.fingerprint.fingerprint" : { + "description" : "Schema for a Field 'fingerprint' generated as part of the analysis stage. Used to power the 'classification'\n sub-stage of analysis. Stored as the `fingerprint` column of Field.", + "type" : "object", + "properties" : { + "experimental" : { + "type" : "object", + "additionalProperties" : { } + }, + "global" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.global" + }, + "type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" + } + } + }, + "metabase.lib.schema.metadata.fingerprint.percent" : { + "description" : "Schema for something represting a percentage. A floating-point value between (inclusive) 0 and 1.", + "type" : "number" + }, + "metabase.lib.schema.metadata.kebab-cased-map" : { }, + "metabase.lib.schema.metadata.lib-or-legacy-column" : { + "description" : "Schema for the maps in card `:result-metadata` and similar. These can be either\n `:metabase.lib.schema.metadata/result-metadata` (i.e., kebab-cased) maps, or map snake_cased as returned by QP\n metadata, but they should NOT be a mixture of both -- if we mixed them somehow there is a bug in our code.", + "oneOf" : [ { + "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", + "allOf" : [ { + "type" : "object", + "properties" : { + "visibility-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" + }, + "fk-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/external-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" + }, + "inherited-temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "lib/source-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" + }, + "database-type" : { + "type" : "string" + }, + "lib/type" : { + "default" : "metadata/column", + "const" : "metadata/column" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" + }, + "display-name" : { + "type" : "string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "effective-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/deduplicated-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" + }, + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/original-expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "fk-field-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "type" : "string" + }, + "lib/card-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.card" + }, + "lib/expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/breakout?" : { + "type" : "boolean" + }, + "metabase.lib.field/temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "metabase.lib.field/binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/model-display-name" : { + "type" : "string" + }, + "has-field-values" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" + }, + "lib/internal-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" + }, + "selected?" : { + "type" : "boolean" + }, + "source-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" + }, + "metabase.lib.join/join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "fk-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "lib/original-binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/original-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "lib/original-display-name" : { + "type" : "string" + }, + "lib/source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" + }, + "active" : { + "type" : "boolean" + }, + "lib/ref-display-name" : { + "type" : "string" + }, + "lib/original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "lib/hack-original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "semantic-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "fk-target-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "field-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + }, + "lib/desired-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" + } + }, + "required" : [ "lib/type", "name", "base-type" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" + } ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + } ] + }, + "metabase.lib.schema.metadata.original-name" : { + "type" : "string", + "description" : "The original name of the column as it appeared in the very first place it came from (i.e., the physical name of the\n column in the table it appears in). This should be the same as the `:lib/source-column-alias` for the very first\n usage of the column.\n Allowed to be blank because some databases like SQL Server allow blank column names.", + "optional" : true + }, + "metabase.lib.schema.metadata.source-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "metabase.lib.schema.parameter..dimension.target" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-expression-ref" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" + } ] + }, + "metabase.lib.schema.parameter.DimensionOptions" : { + "type" : "object", + "properties" : { + "stage-number" : { + "type" : "integer" + } + } + }, + "metabase.lib.schema.parameter.dimension" : { }, + "metabase.lib.schema.parameter.legacy-expression-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" + }, + "metabase.lib.schema.parameter.legacy-field-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + }, + "metabase.lib.schema.parameter.parameter" : { + "type" : "object", + "properties" : { + "default" : { }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { }, + "slug" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "target" : { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.target" + }, + "type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" + }, + "value" : { } + }, + "required" : [ "type" ] + }, + "metabase.lib.schema.parameter.target" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.dimension" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.variable" + } ] + }, + "metabase.lib.schema.parameter.template-tag" : { + "type" : "array", + "prefixItems" : [ { + "const" : "template-tag" + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } ] + } ] + }, + "metabase.lib.schema.parameter.type" : { + "type" : "string", + "enum" : [ "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + }, + "metabase.lib.schema.parameter.variable" : { + "type" : "array", + "prefixItems" : [ { + "const" : "variable" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" + } ] + }, + "metabase.lib.schema.parameter.widget-type" : { + "type" : "string", + "enum" : [ "none", "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + }, + "metabase.lib.schema.template-tag..raw-value.type" : { + "type" : "string", + "enum" : [ "date", "number", "boolean", "text" ] + }, + "metabase.lib.schema.temporal-bucketing.unit" : { + "type" : "string", + "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] + }, + "metabase.logger.api.log-level" : { + "type" : "string", + "enum" : [ "off", "fatal", "error", "warn", "info", "debug", "trace" ] + }, + "metabase.logger.api.time-unit" : { + "type" : "string", + "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] + }, + "metabase.notification.models.FullyHydratedNotification" : { + "description" : "Fully hydrated notification.", + "oneOf" : [ { + "oneOf" : [ { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" + }, + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" + } + } + }, + "required" : [ "payload_type", "payload" ] + }, { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" + } + } + }, + "required" : [ "payload_type" ] + } ] + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "creator_id" : { + "type" : "integer" + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" + }, + "payload_id" : { + "type" : "integer" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" + } + } + }, + "required" : [ "payload_type", "payload" ] + }, { "type" : "object", "properties" : { "creator" : { "type" : "object", "properties" : { } }, + "creator_id" : { + "type" : "integer" + }, "handlers" : { "type" : "array", "items" : { @@ -1357,11 +4480,8 @@ "required" : [ "channel_type" ] } }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, "payload_id" : { - "type" : "null" + "type" : "integer" }, "payload_type" : { "type" : "string", @@ -1374,8 +4494,8 @@ } } }, - "required" : [ "payload_type", "payload" ] - }, { } ] + "required" : [ "payload_type" ] + } ] }, { "oneOf" : [ { "type" : "object", @@ -1384,9 +4504,6 @@ "type" : "object", "properties" : { } }, - "creator_id" : { - "type" : "integer" - }, "handlers" : { "type" : "array", "items" : { @@ -1430,13 +4547,6 @@ "payload" : { "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, "subscriptions" : { "type" : "array", "items" : { @@ -1444,10 +4554,8 @@ } } }, - "required" : [ "payload_type", "payload" ] - }, { } ] - }, { - "oneOf" : [ { + "required" : [ "payload" ] + }, { "type" : "object", "properties" : { "creator" : { @@ -1494,18 +4602,14 @@ "required" : [ "channel_type" ] } }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, "subscriptions" : { "type" : "array", "items" : { "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" } } - }, - "required" : [ "payload" ] - }, { } ] + } + } ] } ] }, "metabase.notification.models.Notification" : { @@ -1821,6 +4925,16 @@ } } }, + "metabase.timeline.api.timeline.Timeline" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "id" ] + }, "metabase.timeline.api.timeline.include" : { "type" : "string", "enum" : [ "events" ] @@ -1880,6 +4994,18 @@ } }, "required" : [ "schedule_type" ] + }, + "metabot.reaction.redirect" : { + "type" : "object", + "properties" : { + "type" : { + "const" : "metabot.reaction/redirect" + }, + "url" : { + "type" : "string" + } + }, + "required" : [ "type", "url" ] } } }, @@ -1898,12 +5024,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] }, "post" : { "summary" : "POST /api/action/", "description" : "Create a new action.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2008,6 +5156,17 @@ "summary" : "GET /api/action/public", "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2025,6 +5184,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] }, "delete" : { @@ -2040,6 +5210,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2065,6 +5246,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2082,6 +5274,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2201,6 +5404,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2234,6 +5448,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] }, "delete" : { @@ -2249,6 +5474,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2257,6 +5493,17 @@ "summary" : "GET /api/activity/most_recently_viewed_dashboard", "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] } }, @@ -2265,6 +5512,17 @@ "summary" : "GET /api/activity/popular_items", "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] } }, @@ -2273,6 +5531,17 @@ "summary" : "GET /api/activity/recent_views", "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] } }, @@ -2300,12 +5569,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] }, "post" : { "summary" : "POST /api/activity/recents", "description" : "Adds a model to the list of recently selected items.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2356,6 +5647,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/alert" ] } }, @@ -2373,6 +5675,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/alert" ] } }, @@ -2390,6 +5703,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/alert" ] } }, @@ -2398,6 +5722,17 @@ "summary" : "GET /api/analytics/anonymous-stats", "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/analytics" ] } }, @@ -2406,6 +5741,17 @@ "summary" : "POST /api/api-key/", "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2433,6 +5779,17 @@ "summary" : "GET /api/api-key/", "description" : "Get a list of API keys with the default scope. Non-paginated.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2441,6 +5798,17 @@ "summary" : "GET /api/api-key/count", "description" : "Get the count of API keys in the DB with the default scope.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2458,6 +5826,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2493,6 +5872,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2510,6 +5900,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2527,6 +5928,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2549,6 +5961,17 @@ "type" : "integer" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2577,6 +6000,17 @@ } ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2621,6 +6055,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2674,6 +6119,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2729,6 +6185,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2793,6 +6260,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2840,6 +6318,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2856,6 +6345,17 @@ "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2905,6 +6405,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2963,6 +6474,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2971,6 +6493,17 @@ "summary" : "GET /api/bookmark/", "description" : "Fetch all bookmarks for the user", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bookmark" ] } }, @@ -2979,6 +6512,17 @@ "summary" : "PUT /api/bookmark/ordering", "description" : "Sets the order of bookmarks for user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3034,6 +6578,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bookmark" ] }, "delete" : { @@ -3057,6 +6612,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bookmark" ] } }, @@ -3065,6 +6631,17 @@ "summary" : "GET /api/bug-reporting/connection-pool-details", "description" : "Returns database connection pool info for the current Metabase instance.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bug-reporting" ] } }, @@ -3073,6 +6650,17 @@ "summary" : "GET /api/bug-reporting/details", "description" : "Returns version and system information relevant to filing a bug report against Metabase.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bug-reporting" ] } }, @@ -3112,12 +6700,34 @@ }, "description" : "Model id to get configuration for." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cache" ] }, "put" : { "summary" : "PUT /api/cache/", "description" : "Store cache configuration.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3148,6 +6758,17 @@ "summary" : "DELETE /api/cache/", "description" : "Delete cache configurations.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3227,6 +6848,17 @@ }, "description" : "A list of question ids" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cache" ] } }, @@ -3253,12 +6885,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] }, "post" : { "summary" : "POST /api/card/", "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3348,6 +7002,17 @@ "summary" : "POST /api/card/collections", "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3381,6 +7046,17 @@ "summary" : "GET /api/card/embeddable", "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3398,6 +7074,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3420,6 +7107,17 @@ "summary" : "GET /api/card/public", "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3453,6 +7151,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3478,6 +7187,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3495,6 +7215,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] }, "delete" : { @@ -3510,6 +7241,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3522,11 +7264,28 @@ "name" : "card-id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3575,6 +7334,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3614,10 +7384,16 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } }, { "in" : "query", "name" : "ignore_view", @@ -3634,6 +7410,17 @@ "enum" : [ "collection" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] }, "put" : { @@ -3656,6 +7443,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3757,6 +7555,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3774,6 +7583,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3791,6 +7611,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3822,6 +7653,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3834,11 +7676,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3876,6 +7735,17 @@ "required" : false, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3884,6 +7754,17 @@ "summary" : "POST /api/cards/dashboards", "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3912,6 +7793,17 @@ "summary" : "POST /api/cards/move", "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3950,6 +7842,17 @@ "summary" : "GET /api/channel/", "description" : "Get all channels", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3971,6 +7874,17 @@ "summary" : "POST /api/channel/", "description" : "Create a channel", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4010,6 +7924,17 @@ "summary" : "POST /api/channel/test", "description" : "Test a channel connection", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4046,6 +7971,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/channel" ] }, "put" : { @@ -4061,6 +7997,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4098,12 +8045,34 @@ "summary" : "POST /api/cloud-migration/", "description" : "Initiate a new cloud migration.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cloud-migration" ] }, "get" : { "summary" : "GET /api/cloud-migration/", "description" : "Get the latest cloud migration, if any.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cloud-migration" ] } }, @@ -4112,6 +8081,17 @@ "summary" : "PUT /api/cloud-migration/cancel", "description" : "Cancel any ongoing cloud migrations, if any.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cloud-migration" ] } }, @@ -4152,12 +8132,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] }, "post" : { "summary" : "POST /api/collection/", "description" : "Create a new Collection.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4207,6 +8209,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] }, "put" : { @@ -4229,6 +8242,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4269,6 +8293,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4277,6 +8312,24 @@ "summary" : "GET /api/collection/root/dashboard-question-candidates", "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4358,6 +8411,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4366,6 +8430,24 @@ "summary" : "POST /api/collection/root/move-dashboard-question-candidates", "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:moved -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4395,6 +8477,17 @@ "summary" : "GET /api/collection/trash", "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4444,6 +8537,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4456,11 +8560,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] }, "put" : { @@ -4476,6 +8597,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4526,6 +8658,24 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4538,10 +8688,16 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } }, { "in" : "query", "name" : "models", @@ -4609,6 +8765,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4626,6 +8793,24 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "map where {:moved -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4663,12 +8848,34 @@ "enum" : [ "all", "mine", "archived" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "post" : { "summary" : "POST /api/dashboard/", "description" : "Create a new Dashboard.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4717,6 +8924,17 @@ "summary" : "GET /api/dashboard/embeddable", "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4749,6 +8967,17 @@ } } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4784,6 +9013,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4822,6 +9062,17 @@ "summary" : "GET /api/dashboard/public", "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4830,6 +9081,17 @@ "summary" : "POST /api/dashboard/save", "description" : "Save a denormalized description of dashboard.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4847,6 +9109,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4882,6 +9155,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4958,6 +9242,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5036,6 +9331,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "post" : { @@ -5060,6 +9366,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5092,6 +9409,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -5107,6 +9435,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5124,6 +9463,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5169,11 +9519,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -5189,6 +9556,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "put" : { @@ -5204,6 +9582,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5370,6 +9759,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5477,6 +9877,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5508,6 +9919,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5533,6 +9955,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5550,6 +9983,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5562,11 +10006,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5584,6 +10045,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5649,12 +10121,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] }, "post" : { "summary" : "POST /api/database/", "description" : "Add a new `Database`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5713,6 +10207,17 @@ "summary" : "POST /api/database/sample_database", "description" : "Add the sample database as a new `Database`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5721,6 +10226,17 @@ "summary" : "POST /api/database/validate", "description" : "Validate that we can connect to a database given a set of details.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5787,6 +10303,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] }, "put" : { @@ -5802,6 +10329,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5870,6 +10408,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5903,6 +10452,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5935,6 +10495,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5952,6 +10523,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5969,6 +10551,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5986,6 +10579,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6003,6 +10607,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6020,6 +10635,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6069,6 +10695,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6086,6 +10723,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6119,6 +10767,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6152,6 +10811,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6185,6 +10855,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6202,6 +10883,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6219,6 +10911,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6236,6 +10939,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6244,6 +10958,17 @@ "summary" : "GET /api/database/{virtual-db}/datasets", "description" : "Returns a list of all the datasets found for the saved questions virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6252,6 +10977,17 @@ "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", "description" : "Returns a list of Tables for the datasets virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6260,6 +10996,17 @@ "summary" : "GET /api/database/{virtual-db}/metadata", "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6268,6 +11015,17 @@ "summary" : "GET /api/database/{virtual-db}/schema/{schema}", "description" : "Returns a list of Tables for the saved questions virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6276,6 +11034,17 @@ "summary" : "GET /api/database/{virtual-db}/schemas", "description" : "Returns a list of all the schemas found for the saved questions virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6284,6 +11053,17 @@ "summary" : "POST /api/dataset/", "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6306,6 +11086,17 @@ "summary" : "POST /api/dataset/native", "description" : "Fetch a native version of an MBQL query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6335,6 +11126,17 @@ "summary" : "POST /api/dataset/parameter/remapping", "description" : "Return the remapped parameter values for cards or dashboards that are being edited.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6373,6 +11175,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6402,6 +11215,17 @@ "summary" : "POST /api/dataset/parameter/values", "description" : "Return parameter values for cards or dashboards that are being edited.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6431,6 +11255,17 @@ "summary" : "POST /api/dataset/pivot", "description" : "Generate a pivoted dataset for an ad-hoc query", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6456,6 +11291,17 @@ "summary" : "POST /api/dataset/query_metadata", "description" : "Get all of the required query metadata for an ad-hoc query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6488,6 +11334,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6525,6 +11382,17 @@ "summary" : "GET /api/ee/advanced-permissions/application/graph", "description" : "Fetch a graph of Application Permissions.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/advanced-permissions/application" ] }, "put" : { @@ -6547,6 +11415,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6583,6 +11462,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -6600,6 +11490,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -6608,6 +11509,17 @@ "summary" : "POST /api/ee/ai-entity-analysis/analyze-chart", "description" : "Analyze a chart image using an AI vision model. This function sends the image data to a separate external AI service for analysis.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6655,6 +11567,17 @@ "summary" : "POST /api/ee/ai-sql-fixer/fix", "description" : "Suggest fixes for a SQL query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6689,6 +11612,17 @@ "summary" : "POST /api/ee/ai-sql-generation/generate", "description" : "Generate a SQL query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6718,6 +11652,17 @@ "summary" : "GET /api/ee/audit-app/user/audit-info", "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -6735,6 +11680,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -6743,6 +11699,17 @@ "summary" : "POST /api/ee/autodescribe/card/summarize", "description" : "Summarize a question.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6823,6 +11790,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/autodescribe" ] } }, @@ -6831,6 +11809,17 @@ "summary" : "GET /api/ee/billing/", "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/billing" ] } }, @@ -6839,6 +11828,17 @@ "summary" : "GET /api/ee/content-translation/csv", "description" : "Provides content translation dictionary in CSV", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -6854,6 +11854,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -6862,6 +11873,17 @@ "summary" : "POST /api/ee/content-translation/upload-dictionary", "description" : "Upload a CSV of content translations", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -6887,6 +11909,60 @@ "tags" : [ "/api/ee/content-translation" ] } }, + "/api/ee/database-replication/connection/{database-id}" : { + "post" : { + "summary" : "POST /api/ee/database-replication/connection/{database-id}", + "description" : "Create a new PG replication connection for the specified database.", + "parameters" : [ { + "in" : "path", + "name" : "database-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/ee/database-replication" ] + }, + "delete" : { + "summary" : "DELETE /api/ee/database-replication/connection/{database-id}", + "description" : "Delete PG replication connection for the specified database.", + "parameters" : [ { + "in" : "path", + "name" : "database-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/ee/database-replication" ] + } + }, "/api/ee/database-routing/destination-database" : { "post" : { "summary" : "POST /api/ee/database-routing/destination-database", @@ -6899,6 +11975,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6951,6 +12038,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6969,11 +12067,111 @@ "tags" : [ "/api/ee/database-routing" ] } }, + "/api/ee/email/override" : { + "put" : { + "summary" : "PUT /api/ee/email/override", + "description" : "Update multiple cloud email Settings. You must be a superuser or have `setting` permission to do this.\n Calling this automatically sets `cloud-smtp-enabled` to true if the settings are valid.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "email-smtp-host-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-password-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-port-override" : { + "anyOf" : [ { + "type" : "integer" + }, { + "type" : "null" + } ] + }, + "email-smtp-security-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-username-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + } + } + } + } + } + }, + "tags" : [ "/api/ee/email" ] + }, + "delete" : { + "summary" : "DELETE /api/ee/email/override", + "description" : "Clear all cloud email related settings. You must be a superuser or have `setting` permission to do this.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/ee/email" ] + } + }, "/api/ee/gsheets/connection" : { "post" : { "summary" : "POST /api/ee/gsheets/connection", "description" : "Hook up a new google drive folder or sheet that will be watched and have its content ETL'd into Metabase.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/gsheets.response" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6996,12 +12194,41 @@ "summary" : "GET /api/ee/gsheets/connection", "description" : "Check the status of a connection. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/gsheets.response" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] }, "delete" : { "summary" : "DELETE /api/ee/gsheets/connection", "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -7010,6 +12237,17 @@ "summary" : "POST /api/ee/gsheets/connection/sync", "description" : "Force a sync of the connection now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -7018,6 +12256,30 @@ "summary" : "GET /api/ee/gsheets/service-account", "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:email -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "email" : { + "type" : "string" + } + }, + "required" : [ ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -7035,6 +12297,17 @@ }, "description" : "Must be a string like 2020-04 or 2222-11." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/logs" ] } }, @@ -7043,6 +12316,32 @@ "summary" : "POST /api/ee/metabot-tools/answer-sources", "description" : "Return top level meta information about available information sources.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7071,6 +12370,35 @@ "summary" : "POST /api/ee/metabot-tools/create-dashboard-subscription", "description" : "Create a dashboard subscription.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:output -> , :conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "output" : { + "type" : "string" + } + }, + "required" : [ "output", "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7099,6 +12427,32 @@ "summary" : "POST /api/ee/metabot-tools/field-values", "description" : "Return statistics and/or values for a given field of a given entity.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7127,6 +12481,32 @@ "summary" : "POST /api/ee/metabot-tools/filter-records", "description" : "Construct a query from a metric.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7155,6 +12535,32 @@ "summary" : "POST /api/ee/metabot-tools/find-metric", "description" : "Find a metric matching a description.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7189,6 +12595,32 @@ "summary" : "POST /api/ee/metabot-tools/find-outliers", "description" : "Find outliers in the values provided by a data source for a given column.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7217,6 +12649,41 @@ "summary" : "POST /api/ee/metabot-tools/generate-insights", "description" : "Generate insights.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:output -> , :reactions -> , :url -> }>, :conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "output" : { + "type" : "string" + }, + "reactions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabot.reaction.redirect" + } + } + }, + "required" : [ "output", "reactions", "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7245,6 +12712,32 @@ "summary" : "POST /api/ee/metabot-tools/get-current-user", "description" : "Get information about user that started the conversation.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7262,6 +12755,32 @@ "summary" : "POST /api/ee/metabot-tools/get-dashboard-details", "description" : "Get information about a given dashboard.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7296,6 +12815,32 @@ "summary" : "POST /api/ee/metabot-tools/get-metric-details", "description" : "Get information about a given metric.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7324,6 +12869,32 @@ "summary" : "POST /api/ee/metabot-tools/get-query-details", "description" : "Get information about a given query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7359,6 +12930,32 @@ "summary" : "POST /api/ee/metabot-tools/get-report-details", "description" : "Get information about a given report.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7387,6 +12984,32 @@ "summary" : "POST /api/ee/metabot-tools/get-table-details", "description" : "Get information about a given table or model.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7415,6 +13038,32 @@ "summary" : "POST /api/ee/metabot-tools/query-metric", "description" : "Construct a query from a metric.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7443,6 +13092,32 @@ "summary" : "POST /api/ee/metabot-tools/query-model", "description" : "Construct a query from a model.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7471,6 +13146,17 @@ "summary" : "GET /api/ee/metabot-v3/metabot/", "description" : "List configured metabot instances", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7487,6 +13173,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7503,6 +13200,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "put" : { @@ -7517,6 +13225,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7578,6 +13297,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7617,6 +13347,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "delete" : { @@ -7631,6 +13372,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7647,6 +13399,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7671,6 +13434,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7679,6 +13453,17 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent", "description" : "Send a chat message to the LLM via the AI Service.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7721,6 +13506,17 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent-streaming", "description" : "Send a chat message to the LLM via the AI Proxy.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7758,48 +13554,39 @@ "tags" : [ "/api/ee/metabot-v3" ] } }, - "/api/ee/permission_debug/" : { - "get" : { - "summary" : "GET /api/ee/permission_debug/", - "description" : "This endpoint expects a `user_id`, a `model_id` to debug permissions against, and `action_type`.\n The type of model we are debugging against is inferred by the `action_type`.\n\n It will return:\n - `decision`: The overall permission decision (\"allow\", \"denied\", or \"limited\")\n - `model-type`: The type of model being checked (e.g., \"question\")\n - `model-id`: The ID of the model being checked\n - `segment`: A set of segmentation types applied (e.g., \"sandboxed\", \"impersonated\", \"routed\")\n - `message`: A sequence of strings explaining the decision\n - `data`: A map containing details about permissions (table or collection names to group names)\n - `suggestions`: A map of group IDs to group names that could provide access\n\n Example requests:\n - Check if user can read a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/read`\n - Check if user can query a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/query`\n - Check if user can download data: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/download-data`\n\n Example responses:\n - Allowed access:\n ```json\n {\n \"decision\": \"allow\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to read this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```\n - Denied access with blocked table:\n ```json\n {\n \"decision\": \"denied\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User does not have permission to query this card\"],\n \"data\": {\"sample-db.PUBLIC.ORDERS\": [\"All Users\"]},\n \"suggestions\": {}\n }\n ```\n - Limited access:\n ```json\n {\n \"decision\": \"limited\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to download some data from this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```", - "parameters" : [ { - "in" : "query", - "name" : "user_id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } - }, { - "in" : "query", - "name" : "model_id", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "action_type", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "card/read", "card/query", "card/download-data" ] - } - } ], - "tags" : [ "/api/ee/permission_debug" ] - } - }, "/api/ee/scim/api_key" : { "get" : { "summary" : "GET /api/ee/scim/api_key", "description" : "Fetch the SCIM API key if one exists. Does *not* return an unmasked key, since we don't have access\n to that after it is created.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim" ] }, "post" : { "summary" : "POST /api/ee/scim/api_key", "description" : "Create a new SCIM API key, or refresh one that already exists. When called for the first time,\n this is equivalent to enabling SCIM.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim" ] } }, @@ -7834,12 +13621,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Groups", "description" : "Create a single group, and populates it if necessary.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7900,12 +13709,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Groups/{id}", "description" : "Update a group.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7964,6 +13795,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] } }, @@ -7998,12 +13840,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Users", "description" : "Create a single user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8107,12 +13971,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Users/{id}", "description" : "Update a user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8214,6 +14100,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8346,7 +14243,18 @@ "default" : false, "type" : "boolean" } - } ], + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/serialization" ] } }, @@ -8371,6 +14279,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -8455,6 +14374,17 @@ "enum" : [ "asc", "desc" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/stale" ] } }, @@ -8463,6 +14393,17 @@ "summary" : "GET /api/ee/upload-management/tables", "description" : "Get all `Tables` visible to the current user which were created by uploading a file.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/upload-management" ] } }, @@ -8488,6 +14429,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/upload-management" ] } }, @@ -8496,6 +14448,17 @@ "summary" : "POST /api/eid-translation/translate", "description" : "Translate entity IDs to model IDs.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8520,12 +14483,59 @@ "summary" : "PUT /api/email/", "description" : "Update multiple email Settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", - "properties" : { } + "properties" : { + "email-smtp-host" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-password" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-port" : { + "anyOf" : [ { + "type" : "integer" + }, { + "type" : "null" + } ] + }, + "email-smtp-security" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-username" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + } + } } } } @@ -8536,6 +14546,17 @@ "summary" : "DELETE /api/email/", "description" : "Clear all email related settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/email" ] } }, @@ -8544,6 +14565,17 @@ "summary" : "POST /api/email/test", "description" : "Send a test email using the SMTP Settings. You must be a superuser or have `setting` permission to do this.\n Returns `{:ok true}` if we were able to send the message successfully, otherwise a standard 400 error response.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/email" ] } }, @@ -8559,6 +14591,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8588,6 +14631,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8596,6 +14650,17 @@ "summary" : "GET /api/embed/card/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8618,6 +14683,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8633,6 +14709,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8671,6 +14758,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8686,6 +14784,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8719,6 +14828,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8768,6 +14888,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8776,6 +14907,17 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8784,6 +14926,17 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8806,6 +14959,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8821,6 +14985,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8854,6 +15029,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8915,6 +15101,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8994,6 +15191,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -9019,6 +15227,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] }, "put" : { @@ -9034,6 +15253,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9111,6 +15341,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9151,6 +15392,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9168,6 +15420,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9185,6 +15448,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9219,6 +15493,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9236,6 +15521,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9270,6 +15566,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9287,6 +15594,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9304,6 +15622,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] }, "post" : { @@ -9319,6 +15648,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9362,6 +15702,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/geojson" ] } }, @@ -9378,6 +15729,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/geojson" ] } }, @@ -9386,6 +15748,17 @@ "summary" : "PUT /api/google/settings", "description" : "Update Google Sign-In related settings. You must be a superuser to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9414,6 +15787,17 @@ "summary" : "PUT /api/ldap/settings", "description" : "Update LDAP related settings. You must be a superuser to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9446,6 +15830,17 @@ "summary" : "POST /api/logger/adjustment", "description" : "Temporarily adjust the log levels.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9471,6 +15866,17 @@ "summary" : "DELETE /api/logger/adjustment", "description" : "Undo any log level adjustments.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/logger" ] } }, @@ -9479,6 +15885,17 @@ "summary" : "GET /api/logger/logs", "description" : "Logs.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/logger" ] } }, @@ -9487,6 +15904,51 @@ "summary" : "GET /api/logger/presets", "description" : "Get all known presets.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "sequence of map where {:id -> , :display_name -> , :loggers -> , :level -> }>}", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "display_name" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "loggers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "level" : { + "$ref" : "#/components/schemas/metabase.logger.api.log-level" + }, + "name" : { + "type" : "string" + } + }, + "required" : [ "name", "level" ] + } + } + }, + "required" : [ "id", "display_name", "loggers" ] + } + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/logger" ] } }, @@ -9495,6 +15957,17 @@ "summary" : "GET /api/login-history/current", "description" : "Fetch recent logins for the current user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/login-history" ] } }, @@ -9503,6 +15976,17 @@ "summary" : "POST /api/model-index/", "description" : "Create ModelIndex.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9537,6 +16021,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/model-index" ] } }, @@ -9554,6 +16049,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/model-index" ] }, "delete" : { @@ -9569,6 +16075,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/model-index" ] } }, @@ -9577,6 +16094,17 @@ "summary" : "POST /api/moderation-review/", "description" : "Create a new `ModerationReview`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9630,12 +16158,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/gtap" ] }, "post" : { "summary" : "POST /api/mt/gtap/", "description" : "Create a new GTAP.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9672,6 +16222,17 @@ "summary" : "POST /api/mt/gtap/validate", "description" : "Validate a sandbox which may not have yet been saved. This runs the same validation that is performed when the\n sandbox is saved, but doesn't actually save the sandbox.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9711,6 +16272,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/gtap" ] }, "put" : { @@ -9726,6 +16298,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9758,6 +16341,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/gtap" ] } }, @@ -9766,6 +16360,17 @@ "summary" : "GET /api/mt/user/attributes", "description" : "Fetch a list of possible keys for User `login_attributes`. This just looks at keys that have already been set for\n existing Users and returns those. ", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/user" ] } }, @@ -9783,6 +16388,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9815,12 +16431,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/native-query-snippet" ] }, "post" : { "summary" : "POST /api/native-query-snippet/", "description" : "Create a new `NativeQuerySnippet`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9864,6 +16502,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/native-query-snippet" ] }, "put" : { @@ -9879,6 +16528,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9966,12 +16626,34 @@ "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/notification" ] }, "post" : { "summary" : "POST /api/notification/", "description" : "Create a new notification, return the created notification.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9989,6 +16671,17 @@ "summary" : "POST /api/notification/send", "description" : "Send an unsaved notification.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10006,6 +16699,17 @@ "summary" : "POST /api/notification/unsubscribe/", "description" : "Allow non-users to unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10037,6 +16741,17 @@ "summary" : "POST /api/notification/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10077,6 +16792,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/notification" ] }, "put" : { @@ -10092,6 +16818,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10118,6 +16855,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10154,6 +16902,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/notification" ] } }, @@ -10162,6 +16921,17 @@ "summary" : "POST /api/notify/db/attached_datawarehouse", "description" : "Sync the attached datawarehouse. Can provide in the body:\n - table_name and schema_name: both strings. Will look for an existing table and sync it, otherwise will try to find a\n new table with that name and sync it. If it cannot find a table it will throw an error. If table_name is empty or\n blank, will sync the entire database.\n - synchronous?: is a boolean value to indicate if this should block on the result.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10202,6 +16972,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10243,6 +17024,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10271,6 +17063,17 @@ "summary" : "GET /api/permissions/graph", "description" : "Fetch a graph of all Permissions.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] }, "put" : { @@ -10293,6 +17096,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10320,6 +17134,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10337,6 +17162,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10345,12 +17181,34 @@ "summary" : "GET /api/permissions/group", "description" : "Fetch all `PermissionsGroups`, including a count of the number of `:members` in that group.\n This API requires superuser or group manager of more than one group.\n Group manager is only available if `advanced-permissions` is enabled and returns only groups that user\n is manager of.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/group", "description" : "Create a new `PermissionsGroup`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10384,6 +17242,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10415,6 +17284,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10432,6 +17312,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10440,12 +17331,34 @@ "summary" : "GET /api/permissions/membership", "description" : "Fetch a map describing the group memberships of various users.\n This map's format is:\n\n { [{:membership_id \n :group_id \n :is_group_manager boolean}]}", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/membership", "description" : "Add a `User` to a `PermissionsGroup`. Returns updated list of members belonging to the group.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10489,6 +17402,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10506,6 +17430,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10536,6 +17471,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10544,6 +17490,17 @@ "summary" : "GET /api/persist/", "description" : "List the entries of [[PersistedInfo]] in order to show a status page.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10561,6 +17518,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10578,6 +17546,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10595,6 +17574,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10612,6 +17602,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10629,6 +17630,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10646,6 +17658,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10654,6 +17677,17 @@ "summary" : "POST /api/persist/disable", "description" : "Disable global setting to allow databases to persist models. This will remove all tasks to refresh tables, remove\n that option from databases which might have it enabled, and delete all cached tables.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10662,6 +17696,17 @@ "summary" : "POST /api/persist/enable", "description" : "Enable global setting to allow databases to persist models.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10670,6 +17715,17 @@ "summary" : "POST /api/persist/set-refresh-schedule", "description" : "Set the cron schedule to refresh persisted models.\n Shape should be JSON like {cron: \"0 30 1/8 * * ? *\"}.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10704,6 +17760,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10712,6 +17779,17 @@ "summary" : "GET /api/premium-features/token/status", "description" : "Fetch info about the current Premium-Features premium features token including whether it is `valid`, a `trial` token, its\n `features`, when it is `valid-thru`, and the `status` of the account.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/premium-features" ] } }, @@ -10728,6 +17806,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10757,6 +17846,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10773,6 +17873,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10789,6 +17900,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10823,6 +17945,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10831,6 +17964,17 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10839,6 +17983,17 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/values", "description" : "Embedded version of chain filter values endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10855,6 +18010,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10889,6 +18055,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10897,6 +18074,17 @@ "summary" : "POST /api/product-feedback/", "description" : "Endpoint to provide feedback from the product", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10938,6 +18126,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -10955,6 +18154,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10987,6 +18197,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11017,6 +18238,17 @@ "required" : true, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11050,6 +18282,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11075,6 +18318,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11100,6 +18354,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11148,6 +18413,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11165,6 +18441,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11208,6 +18495,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11250,6 +18548,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11311,6 +18620,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] }, "post" : { @@ -11335,6 +18655,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11380,6 +18711,17 @@ "required" : true, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11413,6 +18755,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11438,6 +18791,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11481,6 +18845,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11506,6 +18881,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11549,6 +18935,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11612,6 +19009,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11693,6 +19101,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11726,12 +19145,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] }, "post" : { "summary" : "POST /api/pulse/", "description" : "Create a new `Pulse`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11784,6 +19225,17 @@ "summary" : "GET /api/pulse/form_input", "description" : "Provides relevant configuration information and user choices for creating/updating Pulses.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11801,6 +19253,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11818,6 +19281,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11835,6 +19309,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11852,6 +19337,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11860,6 +19356,17 @@ "summary" : "POST /api/pulse/test", "description" : "Test send an unsaved pulse.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11905,6 +19412,17 @@ "summary" : "POST /api/pulse/unsubscribe/", "description" : "Allow non-users to unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11936,6 +19454,17 @@ "summary" : "POST /api/pulse/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11976,6 +19505,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] }, "put" : { @@ -11991,6 +19531,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12047,6 +19598,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -12072,6 +19634,17 @@ "enum" : [ "card", "dashboard", "segment" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/revision" ] } }, @@ -12080,6 +19653,17 @@ "summary" : "POST /api/revision/revert", "description" : "Revert an object to a prior revision.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12131,13 +19715,24 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/revision" ] } }, "/api/search/" : { "get" : { "summary" : "GET /api/search/", - "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", + "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n - `display_type`: search for cards/models with specific display types\n - `has_temporal_dimensions`: set to true to search for cards with temporal dimensions only\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", "parameters" : [ { "in" : "query", "name" : "q", @@ -12209,6 +19804,24 @@ "minimum" : 1 } } + }, { + "in" : "query", + "name" : "display_type", + "required" : false, + "schema" : { + "type" : "array", + "items" : { + "type" : "string", + "minLength" : 1 + } + } + }, { + "in" : "query", + "name" : "has_temporal_dimensions", + "required" : false, + "schema" : { + "type" : "boolean" + } }, { "in" : "query", "name" : "last_edited_at", @@ -12294,6 +19907,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12302,6 +19926,17 @@ "summary" : "POST /api/search/force-reindex", "description" : "This will trigger an immediate reindexing, if we are using search index.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12310,6 +19945,17 @@ "summary" : "POST /api/search/re-init", "description" : "This will blow away any search indexes, re-create, and re-populate them.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12331,6 +19977,17 @@ "required" : false, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] }, "put" : { @@ -12350,6 +20007,17 @@ "required" : false, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12358,6 +20026,17 @@ "summary" : "POST /api/segment/", "description" : "Create a new `Segment`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12393,6 +20072,17 @@ "summary" : "GET /api/segment/", "description" : "Fetch *all* `Segments`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] } }, @@ -12410,6 +20100,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] }, "put" : { @@ -12425,6 +20126,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12487,6 +20199,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] } }, @@ -12504,6 +20227,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] } }, @@ -12512,6 +20246,17 @@ "summary" : "POST /api/session/", "description" : "Login.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12538,6 +20283,17 @@ "summary" : "DELETE /api/session/", "description" : "Logout.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/session" ] } }, @@ -12546,6 +20302,17 @@ "summary" : "POST /api/session/forgot_password", "description" : "Send a reset email when user has forgotten their password.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12570,6 +20337,17 @@ "summary" : "POST /api/session/google_auth", "description" : "Login with Google Auth.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12594,6 +20372,17 @@ "summary" : "POST /api/session/password-check", "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12626,6 +20415,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/session" ] } }, @@ -12634,6 +20434,17 @@ "summary" : "GET /api/session/properties", "description" : "Get all properties and their values. These are the specific `Settings` that are readable by the current user, or are\n public if no user is logged in.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/session" ] } }, @@ -12642,6 +20453,17 @@ "summary" : "POST /api/session/reset_password", "description" : "Reset password with a reset token.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12670,12 +20492,34 @@ "summary" : "GET /api/setting/", "description" : "Get all `Settings` and their values. You must be a superuser or have `setting` permission to do this.\n For non-superusers, a list of visible settings and values can be retrieved using the /api/session/properties endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/setting" ] }, "put" : { "summary" : "PUT /api/setting/", "description" : "Update multiple `Settings` values. If called by a non-superuser, only user-local settings can be updated.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12701,6 +20545,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/setting" ] }, "put" : { @@ -12714,6 +20569,30 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "value" : { } + }, + "required" : [ "value" ] + } + } + } + }, "tags" : [ "/api/setting" ] } }, @@ -12722,6 +20601,17 @@ "summary" : "POST /api/setup/", "description" : "Special endpoint for creating the first user during setup. This endpoint both creates the user AND logs them in and\n returns a session ID. This endpoint can also be used to add a database, create and invite a second admin, and/or\n set specific settings from the setup flow.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12801,6 +20691,17 @@ "summary" : "GET /api/setup/user_defaults", "description" : "Returns object containing default user details for initial setup, if configured,\n and if the provided token value matches the token in the configuration value.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/setup" ] } }, @@ -12809,6 +20710,17 @@ "summary" : "POST /api/slack/bug-report", "description" : "Send diagnostic information to the configured Slack channels.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12832,6 +20744,17 @@ "summary" : "GET /api/slack/manifest", "description" : "Returns the YAML manifest file that should be used to bootstrap new Slack apps", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/slack" ] } }, @@ -12840,6 +20763,17 @@ "summary" : "PUT /api/slack/settings", "description" : "Update Slack related settings. You must be a superuser to do this. Also updates the slack-cache.\n There are 3 cases where we alter the slack channel/user cache:\n 1. falsy token -> clear\n 2. invalid token -> clear\n 3. truthy, valid token -> refresh ", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12866,12 +20800,34 @@ "summary" : "GET /api/table/", "description" : "Get all `Tables`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] }, "put" : { "summary" : "PUT /api/table/", "description" : "Update all `Table` in `ids`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12932,6 +20888,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -12949,6 +20916,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -12973,6 +20951,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] }, "put" : { @@ -12988,6 +20977,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13043,6 +21043,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -13082,6 +21093,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13099,6 +21121,30 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "map where {:success -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "success" : { + "const" : true + } + }, + "required" : [ "success" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13130,6 +21176,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13171,6 +21228,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13188,6 +21256,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13205,6 +21284,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -13222,104 +21312,413 @@ "required" : [ "filename", "tempfile" ] } }, - "required" : [ "file" ] + "required" : [ "file" ] + } + } + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/table/{id}/rescan_values" : { + "post" : { + "summary" : "POST /api/table/{id}/rescan_values", + "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/table/{id}/sync_schema" : { + "post" : { + "summary" : "POST /api/table/{id}/sync_schema", + "description" : "Trigger a manual update of the schema metadata for this `Table`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/table/{table-id}/data" : { + "get" : { + "summary" : "GET /api/table/{table-id}/data", + "description" : "Get the data for the given table", + "parameters" : [ { + "in" : "path", + "name" : "table-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/task/" : { + "get" : { + "summary" : "GET /api/task/", + "description" : "Fetch a list of recent tasks stored as Task History", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/task/info" : { + "get" : { + "summary" : "GET /api/task/info", + "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/task/unique-tasks" : { + "get" : { + "summary" : "GET /api/task/unique-tasks", + "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/task/{id}" : { + "get" : { + "summary" : "GET /api/task/{id}", + "description" : "Get `TaskHistory` entry with ID.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/testing/echo" : { + "post" : { + "summary" : "POST /api/testing/echo", + "description" : "Simple echo hander. Fails when you POST with `?fail=true`.", + "parameters" : [ { + "in" : "query", + "name" : "fail", + "required" : true, + "schema" : { + "default" : false, + "type" : "boolean" + } + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] + }, + "get" : { + "summary" : "GET /api/testing/echo", + "description" : "Simple echo hander. Fails when you GET with `?fail=true`.", + "parameters" : [ { + "in" : "query", + "name" : "fail", + "required" : true, + "schema" : { + "default" : false, + "type" : "boolean" + } + }, { + "in" : "query", + "name" : "body", + "required" : true, + "schema" : { + "type" : "string" + }, + "description" : "value must be a valid JSON string." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] + } + }, + "/api/testing/mark-stale" : { + "post" : { + "summary" : "POST /api/testing/mark-stale", + "description" : "Mark the card or dashboard as stale", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "date-str" : { + "type" : "string" + }, + "id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "model" : { + "type" : "string" + } + }, + "required" : [ "id", "model" ] } } } }, - "tags" : [ "/api/table" ] + "tags" : [ "/api/testing" ] } }, - "/api/table/{id}/rescan_values" : { + "/api/testing/refresh-caches" : { "post" : { - "summary" : "POST /api/table/{id}/rescan_values", - "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "summary" : "POST /api/testing/refresh-caches", + "description" : "Manually triggers the cache refresh task, if Enterprise code is available.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/table" ] + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] } }, - "/api/table/{id}/sync_schema" : { + "/api/testing/restore/{name}" : { "post" : { - "summary" : "POST /api/table/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Table`.", + "summary" : "POST /api/testing/restore/{name}", + "description" : "Restore a database snapshot for testing purposes.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "name", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "string", + "minLength" : 1 + } } ], - "tags" : [ "/api/table" ] - } - }, - "/api/table/{table-id}/data" : { - "get" : { - "summary" : "GET /api/table/{table-id}/data", - "description" : "Get the data for the given table", - "parameters" : [ { - "in" : "path", - "name" : "table-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "responses" : { + "2XX" : { + "description" : "Successful response" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/table" ] - } - }, - "/api/task/" : { - "get" : { - "summary" : "GET /api/task/", - "description" : "Fetch a list of recent tasks stored as Task History", - "parameters" : [ ], - "tags" : [ "/api/task" ] - } - }, - "/api/task/info" : { - "get" : { - "summary" : "GET /api/task/info", - "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", - "parameters" : [ ], - "tags" : [ "/api/task" ] + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] } }, - "/api/task/unique-tasks" : { - "get" : { - "summary" : "GET /api/task/unique-tasks", - "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", + "/api/testing/set-time" : { + "post" : { + "summary" : "POST /api/testing/set-time", + "description" : "Make java-time see world at exact time.", "parameters" : [ ], - "tags" : [ "/api/task" ] + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "add-ms" : { + "description" : "value must be an integer.", + "type" : "integer" + }, + "time" : { + "description" : "value must be a valid date string", + "type" : "string" + } + } + } + } + } + }, + "tags" : [ "/api/testing" ] } }, - "/api/task/{id}" : { - "get" : { - "summary" : "GET /api/task/{id}", - "description" : "Get `TaskHistory` entry with ID.", + "/api/testing/snapshot/{name}" : { + "post" : { + "summary" : "POST /api/testing/snapshot/{name}", + "description" : "Snapshot the database for testing purposes.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "name", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "string", + "minLength" : 1 + } } ], - "tags" : [ "/api/task" ] + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] + } + }, + "/api/testing/stats" : { + "post" : { + "summary" : "POST /api/testing/stats", + "description" : "Triggers a send of instance usage stats", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] } }, "/api/tiles/{card-id}/{zoom}/{x}/{y}/{lat-field}/{lon-field}" : { @@ -13382,6 +21781,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/tiles" ] } }, @@ -13463,6 +21873,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/tiles" ] } }, @@ -13479,6 +21900,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/tiles" ] } }, @@ -13487,6 +21919,17 @@ "summary" : "POST /api/timeline-event/", "description" : "Create a new [[TimelineEvent]].", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13554,6 +21997,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline-event" ] }, "put" : { @@ -13569,6 +22023,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13624,6 +22089,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline-event" ] } }, @@ -13632,6 +22108,24 @@ "summary" : "POST /api/timeline/", "description" : "Create a new [[Timeline]].", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:id -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13687,6 +22181,27 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "sequence of map where {:id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" + } + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13710,6 +22225,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13742,6 +22268,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13790,6 +22327,24 @@ }, "description" : "value must be a valid date string" } ], + "responses" : { + "2XX" : { + "description" : "map where {:id -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] }, "put" : { @@ -13805,6 +22360,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13853,6 +22419,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13861,6 +22438,17 @@ "summary" : "POST /api/upload/csv", "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -13903,6 +22491,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user-key-value" ] } }, @@ -13927,6 +22526,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13964,12 +22574,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user-key-value" ] }, "delete" : { "summary" : "DELETE /api/user-key-value/namespace/{namespace}/key/{key}", "description" : "Deletes a KV-pair for the user", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user-key-value" ] } }, @@ -14009,12 +22641,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] }, "post" : { "summary" : "POST /api/user/", "description" : "Create a new `User`, return a 400 if the email address is already taken", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -14058,6 +22712,17 @@ "summary" : "GET /api/user/current", "description" : "Fetch the current `User`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14066,6 +22731,17 @@ "summary" : "GET /api/user/recipients", "description" : "Fetch a list of `Users`. Returns only active users. Meant for non-admins unlike GET /api/user.\n\n - If user-visibility is :all or the user is an admin, include all users.\n - If user-visibility is :group, include only users in the same group (excluding the all users group).\n - If user-visibility is :none or the user is sandboxed, include only themselves.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14083,6 +22759,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] }, "put" : { @@ -14098,6 +22785,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -14158,6 +22856,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14175,6 +22884,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14192,6 +22912,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -14225,6 +22956,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14233,6 +22975,17 @@ "summary" : "GET /api/util/random_token", "description" : "Return a cryptographically secure random 32-byte token, encoded as a hexadecimal string.\n Intended for use when creating a value for `embedding-secret-key`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/util" ] } } diff --git a/_docs/master/configuring-metabase/appearance.md b/_docs/master/configuring-metabase/appearance.md index 34c9694a40..2cf23de98e 100644 --- a/_docs/master/configuring-metabase/appearance.md +++ b/_docs/master/configuring-metabase/appearance.md @@ -176,4 +176,4 @@ Metabase will display this illustration when searches don't return any results. - [Customer-facing analytics](/learn/metabase-basics/embedding). - [Embedding introduction](../embedding/start). -- [Brand your Metabase](/learn/metabase-basics/embedding/brand). +- [Brand your Metabase](/docs/latest/configuring-metabase/appearance). diff --git a/_docs/master/configuring-metabase/localization.md b/_docs/master/configuring-metabase/localization.md index 711cf5adca..cce9f05d01 100644 --- a/_docs/master/configuring-metabase/localization.md +++ b/_docs/master/configuring-metabase/localization.md @@ -13,11 +13,15 @@ redirect_from: # Languages and localization -The **Localization** settings allow you to set global defaults for your Metabase instance. You can find **Localization** under **Admin settings** > **Settings**. +Admins can update the localization settings for the instance: -## Default language +1. Click on the **gear** icon in the upper right. +2. Click **Admin settings**. +3. In the **Settings** tab, click on **Localization** in the left sidebar. -Here you can set the default language (also called the "instance language") across your Metabase UI, system [emails](./email), [dashboard subscriptions](../dashboards/subscriptions), and [alerts](../questions/alerts). People can pick a different language from their own [account settings](../people-and-groups/account-settings). +These localization settings allow you to set global language and formatting defaults for dates, times, numbers, and currencies. + +You can also override these localization options for specific fields or questions. For more info, see [Formatting](../data-modeling/formatting). ## Supported languages @@ -68,7 +72,9 @@ The locale codes are relevant for setting the language in [static embeds](../emb ## Translations -Our community contributes to Metabase translations on our [Crowdin project](https://crowdin.com/project/metabase-i18n). If you'd like to help make Metabase available in a language you're fluent in, we'd love your help! +Our community contributes to Metabase translations on our [Crowdin project](https://crowdin.com/project/metabase-i18n). + +If you'd like to help make Metabase available in a language you're fluent in, we'd love your help! For a new language to be added to Metabase, it must reach 100%. Once it does, we add it in the next major or minor release of Metabase. All _existing_ languages in Metabase _must stay at 100%_ to continue being included in the next _major_ version of Metabase. This rule ensures that no one encounters a confusing mishmash of English and another language when using Metabase. @@ -76,7 +82,21 @@ We understand that this is a high bar, so we commit to making sure that before e Note that while we only remove languages in major releases, we are happy to add them back for minor releases, so it's always a good time to jump in and start translating. -## Report timezone +### Contributing to translations for Metabase + +If you'd like to help make Metabase available in a language you're fluent in, we'd love your help! Check out our [Crowdin project](https://crowdin.com/project/metabase-i18n). + +## Instance settings + +### Instance language + +Here you can set the default language (also called the "instance language") across your Metabase UI, system [emails](./email), [dashboard subscriptions](../dashboards/subscriptions), and [alerts](../questions/alerts). + +People can override these settings in their personal [account settings](../people-and-groups/account-settings). + +Some translations are created by the Metabase community, and might not be perfect. + +### Report timezone Use **report timezone** to set a default display time zone for dates and times in Metabase. The report timezone setting is a display setting only, so changing the report timezone won't affect the time zone of any data in your database. @@ -99,29 +119,27 @@ Report timezone is only supported for the following databases: - Redshift - Vertica -## First day of the week - -If you need to, you can change the first day of the week for your instance (the default is Sunday). Setting the first day of the week affects things like grouping by week and filtering in questions built using the [query builder](../questions/query-builder/editor). This setting doesn't affect [SQL queries](../questions/native-editor/writing-sql). +### First day of the week -## Localization options +If you need to, you can change the first day of the week for your instance (the default is Sunday). -**Localization options** allow you to set global default display formats for dates, times, numbers, and currencies. +Setting the first day of the week affects how the [query builder](../questions/query-builder/editor) filters or groups by week. People can, however, use the `week` function to override this default when filtering or grouping by week of year. See [using a different first week of the year](../questions/query-builder/expressions/week#using-a-different-first-week-of-the-year). -You can also override these localization options for specific fields or questions. For more info, see [Formatting](../data-modeling/formatting). +This setting doesn't affect [SQL queries](../questions/native-editor/writing-sql). -### Dates and times +## Dates and times - **Date style:** the way dates should be displayed in tables, axis labels, and tooltips. -- **Date separators:** you can choose between slashes (`2022/12/14`), dashes (`2022-12-14`), and dots (`2022.12.14.`). +- **Date separators:** you can choose between slashes (`2022/12/14`), dashes (`2022-12-14`), and dots (`2022.12.14`). - **Abbreviate names of days and months:** whenever a date is displayed with the day of the week and/or the month written out, turning this setting on will display e.g. "January" as "Jan" or "Monday" as "Mon". - **Time style:** choose to display the time using either a 12 or 24-hour clock (e.g., 3:00 PM or 15:00). -### Numbers +## Numbers - **Separator style:** some people use commas to separate thousands places, and others use periods. Here's where you can indicate which camp you belong to. -### Currency +## Currency - **Unit of currency:** if you do most of your business in a particular currency, you can specify that here. - **Currency label style:** whether you want to have your currencies labeled with a symbol, a code (like "USD"), or its full name. -- **Where to display the unit of currency:** this pertains specifically to tables, and lets you choose if you want the currency labels to appear only in the column heading, or next to each value in the column. +- **Where to display the unit of currency:** this pertains specifically to tables, and lets you choose whether you want the currency labels to appear only in the column heading, or next to each value in the column. diff --git a/_docs/master/configuring-metabase/setting-up-metabase.md b/_docs/master/configuring-metabase/setting-up-metabase.md index 3bb6c7a348..8eae745476 100644 --- a/_docs/master/configuring-metabase/setting-up-metabase.md +++ b/_docs/master/configuring-metabase/setting-up-metabase.md @@ -43,7 +43,7 @@ Don't worry about picking the wrong option. If you say you're interested in embe ## Gathering your database info -At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click **I’ll add my data later**. Metabase comes with a [Sample Database](/glossary/sample_database) that you can play around with to get a feel for how Metabase works. +At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click **I’ll add my data later**. Metabase comes with a [Sample Database](/glossary/sample-database) that you can play around with to get a feel for how Metabase works. If you’re ready to connect, here’s what you’ll need: diff --git a/_docs/master/dashboards/filters.md b/_docs/master/dashboards/filters.md index 6407c4c95d..8f4412d64b 100644 --- a/_docs/master/dashboards/filters.md +++ b/_docs/master/dashboards/filters.md @@ -16,30 +16,15 @@ redirect_from: ![Dashboard Filters](./images/filters.png) -Have you ever found yourself in a situation where it seems like you need to create nearly identical copies of the same dashboard, with just one different variable? Maybe you have an Earnings dashboard, but you want to see the data for each city your business is in, or maybe you have a KPI dashboard that you want to see broken out by month. +Instead of creating duplicate dashboards to show different cuts of the same data (like a different dashboard for each quarter), you can add filter or parameter widgets to let people change _what_ data is displayed (filter the data), or _how_ its displayed (parameterize the data). -Instead of creating duplicate dashboards, you can add filter or parameter widgets to let people change variables for cards on a dashboard. +## Filter and parameter widgets -## Adding a filter or parameter - -![Add a Filter](./images/add-filter.png) - -- Click the **pencil icon** to enter dashboard editing mode. -- Click the **filter icon** that appears in the top-right to add a filter. -- Select a [filter type](#filter-and-parameter-types) -- [Connect your filter or parameter widget to dashboard cards](#connecting-a-filter-or-parameter-widget-to-dashboard-cards) to one or more dashboard cards on any or all tabs. -- [Configure your filter](#editing-a-filter) -- **Save** your changes. - -Metabase will display the filter only if the filter is connected to a card on the current dashboard tab. - -## Filter and parameter types - -The type of filter or parameter widget you choose determines how the widget works, including which fields you'll be able to filter your cards by. +There are two basic types of widgets you can add. The type of filter or parameter widget you choose determines how the widget works, including which fields you'll can connect to the widget. ### Filter widgets -**Filters** determine what data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories. +**Filters** determine _what_ data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories. - [Date picker](#date-picker-filters) - [Location](#location-filters) @@ -50,13 +35,45 @@ The type of filter or parameter widget you choose determines how the widget work ### Parameter widgets - **Parameters** determine how to show the data. The time grouping parameter, for example, changes the granularity of time-based visualizations (like showing data by month instead of by day) without removing any data points. + **Parameters** determine _how_ to show the data. The time grouping parameter, for example, changes the granularity of time-based visualizations (like showing data by month instead of by day) without removing any data points. - [Time grouping](#time-grouping-parameter) +## Adding a filter or parameter widget + +![Add a Filter](./images/add-filter.png) + +1. Click the **pencil icon** to enter dashboard editing mode. +2. You can add a filter or parameter widget to: + + - **The whole dashboard**. You'll need to connect these dashboard-level filters to individual cards. Metabase will only display dashboard-level widgets if they're connected to a card on the current tab. + - **Heading cards**. Not text cards, only [heading cards](./introduction#adding-headings-or-descriptions-with-text-cards). Can only be connected to cards on the current tab. + - **Question cards**. Can only be connected to cards on the current tab. + + Go to where you want to add a filter and click the **filter icon**. +3. Select a [filter type](#filter-and-parameter-widgets). +4. [Connect your filter or parameter widget to one or more dashboard cards](#connecting-a-filter-or-parameter-widget-to-dashboard-cards). Only dashboard-level widgets can be connected to cards on multiple tabs. +5. [Configure your filter](#editing-a-filter). +6. **Save** your changes. + +If the filter isn't connected any of the cards on the current tab, Metabase won't display the filter. + +### When to add a widget to a heading or card + +These are just rules of thumb to keep the user experience predictable. Do whatever works for your use case. + +By default, you should add widgets to the dashboard itself. + +If, however, your dashboard grows larger, and it doesn't make sense to break the dashboard up into multiple dashboards, you can add widgets to headings and cards so people can filter in place as they scroll through sections. In these cases, you should scope the effects of a heading widget to the section immediately below. Filters on cards should generally only update the card itself. + +If you want tab-specific widgets, you could either: + +- Add them to the dashboard itself, but only connect the widget to cards on a specific tab. +- Use a heading filter. + ## Date picker filters -When picking a Time filter, Metabase will prompt you to pick a specific type of date picker widget: +When picking a Date picker filter, Metabase will prompt you to pick an operator: - Month and Year - Quarter and Year @@ -65,19 +82,24 @@ When picking a Time filter, Metabase will prompt you to pick a specific type of - Relative Date - All Options -Single Date and Date Range will provide a calendar widget, while the other options all provide slightly different dropdown interfaces for picking values. To get a widget that's just like the time filter in the query builder, choose All options. +Single Date and Date Range will provide a calendar widget, while the other options all provide slightly different dropdown interfaces for picking values. To get a widget that's just like the date picker in the query builder, choose All options. + +### Issues with connecting to a date variable + +If you get a message like "A date variable in this card can only be connectedd to a time type with the single date option", you can handle it in a couple of ways. + +- **If you want a date picker where people can select multiple dates**, you'll need to change the variable in your SQL code to a [field filter](../questions/native-editor/field-filters). +- **If you want the filter widget to just take a single date**, you'll need to change the dashboard filter widget's type to "Single date". ## Time grouping parameter ![Time grouping](./images/time-grouping.png) -You can add a time grouping widget to a dashboard to change how charts are grouped by time. For example, you may want to look at the time series charts grouped by month by default, but give people the option to view the results by other groupings: by week, by quarter, and so on. - -> Time grouping parameter widget can only be connected to questions built with the [graphical query builder](../questions/query-builder/editor). +You can add a time grouping widget to a dashboard to change how charts are grouped by time. This widget won't filter the data; it'll change how Metabase aggregates the data. For example, you may want to look at the time series charts grouped by month by default, but give people the option to view the same results by other groupings: by week, by quarter, and so on. This widget doesn't filter data in the charts; the widget just changes the time granularity for any cards that have a datetime field connected to the widget. -You can group by: +Grouping options include: - Minute (or minute of hour) - Hour (or hour of day) @@ -87,19 +109,32 @@ You can group by: - Quarter (or quarter of year) - Year +To connect a time grouping widget to a SQL question, you'll need to insert time grouping parameters in your code. See [time grouping parameters](../questions/native-editor/time-grouping-parameters). + ## Location filters -There are four types of Location filters to choose from: +There are four types of Location filters to choose from. - City - State - ZIP or Postal Code - Country +Additionally, you can select an operator for the location filter: + +- **Is**. Select one or more values from a list or search box. Use **Is** when you just want to plug a value into a variable. For multiple values, the card must be either a question built using the query builder, a native/SQL question using a [field filter](../questions/native-editor/field-filters), or a basic variable set to accept [multiple values](../questions/native-editor/basic-sql-parameters#basic-variable-that-allows-people-to-select-multiple-values). +- **Is not**. Exclude one or more specific values. +- **Contains**. Match values that contain the entered text. +- **Does not contain**. Filter out values that contain the entered text. +- **Starts with**. Match values that begin with the entered text. +- **Ends with**. Match values that end with the entered text. + ## ID filter The ID filter provides a simple input box where you can type the ID of a user, order, etc. +You can give people the option to pick one value or multiple values. + ## Number filter You can choose from: @@ -112,23 +147,27 @@ You can choose from: ## Text or category filter -A flexible filter type that will let you create either a dropdown menu or an input box to filter on any category field in your cards. Options include: +A flexible filter type that will let you create either a dropdown menu or an input box to filter on any text or category field in your cards. Options include: -- **Is**. Select one or more values from a list or search box. Use **Is** when you just want to plug a value into a variable. For multiple values, the card must be either a question built using the query builder, or a native/SQL question using a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type). +- **Is**. Select one or more values from a list or search box. Use **Is** when you just want to plug a value into a variable. For multiple values, the card must be a question built using the query builder, a native/SQL question using a [field filter](../questions/native-editor/field-filters), or a basic variable set to [multiple values](../questions/native-editor/basic-sql-parameters#basic-variable-that-allows-people-to-select-multiple-values). - **Is not**. Exclude one or more specific values. - **Contains**. Match values that contain the entered text. - **Does not contain**. Filter out values that contain the entered text. - **Starts with**. Match values that begin with the entered text. - **Ends with**. Match values that end with the entered text. +You can also select how people should filter on this column: + +- Dropdown list +- Search box +- Input box + ## Boolean filter A boolean filter allows people to filter data based on true/false values. ## Connecting a filter or parameter widget to dashboard cards -Dashboard widgets apply across all [dashboard tabs](./introduction#dashboard-tabs), though they'll only be displayed when a tab has cards connected to the widget. - For each widget that you add, you'll need to tell Metabase which column the filter should update for each card. Click on a card's dropdown menu to select the field that you want the widget to filter on. @@ -137,6 +176,11 @@ Here we've wired up a Text filter to the "Event types" card, telling Metabase th ![Wiring up a dashboard filter to a card](./images/wiring-cards.png) +Which cards you can connect a filter or parameter widget to depends on: + +- Whether the card has a relevant field (i.e., the field the widget is filtering). +- Where the widget is located: on the dashboard, heading card, or question card. Only dashboard widgets can be connected to cards across all [dashboard tabs](./introduction#dashboard-tabs). Widgets on heading and question cards are restricted to the cards on their respective tabs. + ## Auto-connecting filters to cards If there are other cards that also have the field you select, Metabase will offer to automatically connect the filter to those cards too (including to relevant cards on other tabs). If you later add a card with the selected field, Metabase will also try to connect that filter to the new card. @@ -145,9 +189,9 @@ To undo this auto-connecting of cards, click on the toast that pops up when Meta ## Filtering dashboards with native/SQL questions -If you're trying to connect a filter to a card with a native/SQL questions, you'll need to [add a variable or field filter to your query](../questions/native-editor/sql-parameters). For an in-depth article, check out [Adding filters to dashboards with SQL questions](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/filters). +For filters, you'll need to [add a variable or field filter to your query](../questions/native-editor/sql-parameters). -You can't connect a time grouping parameter widget to a card with a SQL question. +For parameters, check out [Time grouping parameters](../questions/native-editor/time-grouping-parameters). ## Wiring up dashboard filters to text cards @@ -201,8 +245,8 @@ A list of all of the possible values in a column. People can use checkboxes to s If you're not seeing the **Dropdown list** option, and your dashboard filter is based on a column from a: -- Table or GUI model: an admin will need to [enable the dropdown widget](../data-modeling/metadata-editing#changing-a-search-box-filter-to-a-dropdown-filter) for that column from Metabase's **Admin settings**. -- SQL model: go to your [model's metadata settings](../data-modeling/models#add-metadata-to-columns-in-a-model), find your column, and set the **Database column this maps to**. +- Table or model built with the query builder: an admin will need to [enable the dropdown widget](../data-modeling/metadata-editing#changing-a-search-box-filter-to-a-dropdown-filter) for that column from Metabase's **Admin settings**. +- Model built with a SQL query: go to your [model's metadata settings](../data-modeling/models#add-metadata-to-columns-in-a-model), find your column, and set the **Database column this maps to**. #### Search box diff --git a/_docs/master/dashboards/linked-filters.md b/_docs/master/dashboards/linked-filters.md index 50e9dd50e5..4f15039e8e 100644 --- a/_docs/master/dashboards/linked-filters.md +++ b/_docs/master/dashboards/linked-filters.md @@ -63,7 +63,7 @@ Metabase uses database column metadata to populate values for linked filters, wh - You can't create linked filters on custom columns. -- Native/SQL questions must have a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type) variable in order to be linked. Basic SQL variables aren't connected to database columns, so they won't work for linked filters. +- Native/SQL questions must have a [field filter](../questions/native-editor/field-filters) variable in order to be linked. Basic SQL variables aren't connected to database columns, so they won't work for linked filters. - You can't link filters that use "Custom List" or "From another model or question" as their value's source. diff --git a/_docs/master/data-modeling/metadata-editing.md b/_docs/master/data-modeling/metadata-editing.md index 96b3befa07..9fc1a559b9 100644 --- a/_docs/master/data-modeling/metadata-editing.md +++ b/_docs/master/data-modeling/metadata-editing.md @@ -21,6 +21,8 @@ Metabase lets you add and edit metadata for your tables and columns. The **Table metadata settings only affect the way Metabase displays the data. None of the settings change the data in your database.** +Admins can grant access to these metadata settings to other groups. See [table metadata permissions](../permissions/data#manage-table-metadata-permissions). + ## Table settings _Admin settings > Table metadata > Database > Table_ @@ -31,17 +33,17 @@ You can search for tables, or use the tree navigation to find each of your conne To edit a table's display name or description in the table metadata tab, click into the box that contains the current table name or description and edit it. Changes will be saved automatically once you click out of the box. -Descriptions are displayed in Metabase's [data reference](../exploration-and-organization/data-model-reference) to help people find the right table for their use case. +Descriptions are displayed in Metabase's [data reference](../exploration-and-organization/data-model-reference) and tooltips when view the table. Decscriptions help people find the right table for their use case. ### Table sync options -Actions you can take to refresh the schema or field values. +Actions you can take to refresh the schema or field values. For more, check out [syncs and scans](../databases/sync-scan). #### Sync table schema If you've made changes to this table in the underlying database that aren't showing up in Metabase yet, re-syncing the table schema can fix that. -To update the values in your filter dropdown menus, refresh or reset the cached values. **Cache actions** include: +To update the values in your filter dropdown menus, refresh or reset the cached values. #### Scan field values @@ -49,7 +51,7 @@ Metabase uses these values to populate dropdown filters. You can also [scan valu #### Discard cached field values -Clears cached values and stops them from showing up in your [filter widgets](#filtering). +Clears cached values. Metabase will pull new values for display in your [filter widgets](#filtering). ### Table sorting @@ -98,7 +100,7 @@ Click the preview button to see sample data from that field. _Admin settings > Table Metadata > Database > Table > Field_ -To scan or discard field values for a specific field, click on **Field values**. +To scan or discard field values for a specific field, click on the **Field values** button. Metabase uses these values to populate dropdown menus in filter widgets. (To be clear, values aren't actually dropped from your database.) ## Field data @@ -156,7 +158,7 @@ _Admin settings > Table Metadata > Database > Table > Field_ ### Semantic type -You can change the [semantic type](../data-modeling/semantic-types) to give people more context. For example, you could set an Integer as a "Score" so people have a better idea what those integers indicate. +You can change the [semantic type](../data-modeling/semantic-types) to give people more context and enable additional functionality, such as displaying text as an image (if the text is an image URL. Another example: you could set an Integer as a "Score" so people have a better idea what those integers indicate. The semantic types you can choose from depend on the data type. If none of the options describe the values in the column, you can set this setting to "No semantic type". @@ -169,19 +171,21 @@ _Admin settings > Table Metadata > Database > Table > Field_ ### Field visibility - **Everywhere**: By default, users can see all of the columns in a table. -- **Only in detail views**: This will hide lengthy text from question results. This setting is applied by default if a column's values have an average length of more than 50 characters. For example, you could use this setting on a column like "Customer Comments" if you already have a column for "Customer Rating". +- **Only in detail views**: The detail view is the view you seen when you expand a single row in a table. This will hide lengthy text from question results. This setting is applied by default if a column's values have an average length of more than 50 characters. For example, you could use this setting on a column like "Customer Comments" if you already have a column for "Customer Rating". - **Do not include**: Columns won't show up in the query builder or data reference. You can set this option on sensitive columns (such as PII) or irrelevant columns. But this visibility option is a simple omit/hide option; **it's not a permissions feature**. These columns are still accessible for people with native query privileges; they can write `SELECT hidden_column FROM table` or `SELECT * FROM table` in the [SQL editor](../questions/native-editor/writing-sql) and they'll be able to view these fields and their values. To restrict what data people can view and query, see [data permissions](../permissions/data). ### Filtering -The **Filtering** setting changes a column's [filter widget](../dashboards/filters). Options include: +The **Filtering** setting changes a column's default [filter widget](../dashboards/filters). Options include: - **Search box**: Display a search box and suggest autocompletions for values in that column that match the search term(s). - **A list of all values**: Display a search box, as well as a dropdown menu with checkboxes for values. If the number of distinct values exceeds 1000, however, Metabase will instead display a search box. See [Changing a search box filter to a dropdown filter](#changing-a-search-box-filter-to-a-dropdown-filter). - **Plain input box**: Display a search box, but don't suggest autocompletions. +The settings here will also affect dashboard filters. For example, if you set this to plain input box, you won't be able to set up a dashboard filter that has a dropdown menu. See [dropdown list](../dashboards/filters#dropdown-list). + #### Changing a search box filter to a dropdown filter The dropdown filter widget can be finicky, because Metabase needs to run a [scan](../databases/sync-scan#how-database-scans-work) to get the list of values for the dropdown menu. If you're having trouble: @@ -195,7 +199,7 @@ If you have columns with more than 1,000 distinct values, or columns with text-h ### Display values -On numeric and foreign key types, this setting lets you map columns to display different values. +You can map another column connected by a foreign key relationship, like mapping a `Product_ID` column to instead display the name of the product. #### Mapping values to foreign keys diff --git a/_docs/master/data-modeling/semantic-types.md b/_docs/master/data-modeling/semantic-types.md index 9e9d64e84d..07091af587 100644 --- a/_docs/master/data-modeling/semantic-types.md +++ b/_docs/master/data-modeling/semantic-types.md @@ -174,7 +174,7 @@ When you [X-ray](../exploration-and-organization/x-rays) a table, model, or enti ### Field Filters -Knowing what field types are and how they work is helpful when using [field filters](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters), as you can only create field filters for [certain field types](../questions/native-editor/sql-parameters#field-filter-compatible-types). +Knowing what field types are and how they work is helpful when using [field filters](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters), as you can only create field filters for [certain field types](../questions/native-editor/field-filters#when-to-use-a-field-filter-variable-vs-a-basic-variable). ### JSON unfolding diff --git a/_docs/master/databases/connecting.md b/_docs/master/databases/connecting.md index 27d2ea90e2..63f7f9f36d 100644 --- a/_docs/master/databases/connecting.md +++ b/_docs/master/databases/connecting.md @@ -76,7 +76,7 @@ Go to **Admin settings** > **Databases** > your database and click **Remove this ## Restoring the Sample Database -If you've deleted the Metabase [Sample Database](/glossary/sample_database), go to **Admin settings** > **Databases** and click **Bring the Sample Database back**. +If you've deleted the Metabase [Sample Database](/glossary/sample-database), go to **Admin settings** > **Databases** and click **Bring the Sample Database back**. ## Troubleshooting diff --git a/_docs/master/embedding/interactive-embedding.md b/_docs/master/embedding/interactive-embedding.md index e80ce4741e..c16dd02ef8 100644 --- a/_docs/master/embedding/interactive-embedding.md +++ b/_docs/master/embedding/interactive-embedding.md @@ -20,7 +20,7 @@ redirect_from: **Interactive embedding** is what you want if you want to offer [multi-tenant, self-service analytics](/learn/metabase-basics/embedding/multi-tenant-self-service-analytics). -Interactive embedding is the only type of embedding that integrates with your [permissions](../permissions/introduction) and [SSO](../people-and-groups/start#authentication) to give people the right level of access to [query](/glossary/query_builder) and [drill-down](/learn/metabase-basics/querying-and-dashboards/questions/drill-through) into your data. +Interactive embedding is the only type of embedding that integrates with your [permissions](../permissions/introduction) and [SSO](../people-and-groups/start#authentication) to give people the right level of access to [query](/glossary/query-builder) and [drill-down](/learn/metabase-basics/querying-and-dashboards/questions/drill-through) into your data. ## Interactive embedding demo diff --git a/_docs/master/embedding/introduction.md b/_docs/master/embedding/introduction.md index dbc020d74d..acd7fdd4f7 100644 --- a/_docs/master/embedding/introduction.md +++ b/_docs/master/embedding/introduction.md @@ -53,7 +53,7 @@ If you'd like to share your data with the good people of the internet, admins ca | Restrict data with [locked filters](./static-embedding-parameters#restricting-data-in-a-static-embed-with-locked-parameters) | ❌ | ❌ | ✅ | ❌ | | Restrict data with [sandboxes](../permissions/data-sandboxes) | ✅ | ✅ | ❌ | ❌ | | Use the [drill-through menu](/learn/metabase-basics/querying-and-dashboards/questions/drill-through) | ✅ | ✅ | ❌ | ❌ | -| Self-serve via [query builder](/glossary/query_builder) | ✅ | ✅ | ❌ | ❌ | +| Self-serve via [query builder](/glossary/query-builder) | ✅ | ✅ | ❌ | ❌ | | View usage of embeds with [usage analytics](../usage-and-performance-tools/usage-analytics) | ✅ | ✅ | ❌ | ❌ | | [Actions on dashboards](../dashboards/actions) | ✅ | ✅ | ❌ | ❌ | | Embed individual Metabase components | ✅ | ❌ | ❌ | ❌ | diff --git a/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html b/_docs/master/embedding/sdk/api/BaseSdkQuestionProps.html similarity index 66% rename from _docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html rename to _docs/master/embedding/sdk/api/BaseSdkQuestionProps.html index 70e4b609e9..eb917617bd 100644 --- a/_docs/master/embedding/sdk/api/BaseInteractiveQuestionProps.html +++ b/_docs/master/embedding/sdk/api/BaseSdkQuestionProps.html @@ -4,12 +4,12 @@ show_category_breadcrumb: true show_title_breadcrumb: true category: Embedding -title: BaseInteractiveQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/BaseInteractiveQuestionProps.html' +title: BaseSdkQuestionProps +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/BaseSdkQuestionProps.html' layout: docs-api --- -BaseInteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface BaseInteractiveQuestionProps

interface BaseInteractiveQuestionProps {
    children?: ReactNode;
    entityTypes?: EmbeddingEntityType[];
    initialSqlParameters?: SqlParameterValues;
    isSaveEnabled?: boolean;
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>;
    onRun?: (question: undefined | MetabaseQuestion) => void;
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void;
    plugins?: MetabasePluginsConfig;
    questionId: null | SdkQuestionId;
    targetCollection?: SdkCollectionId;
    withDownloads?: boolean;
}
Index

Properties

children? +BaseSdkQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface BaseSdkQuestionProps

interface BaseSdkQuestionProps {
    children?: ReactNode;
    entityTypes?: EmbeddingEntityType[];
    initialSqlParameters?: SqlParameterValues;
    isSaveEnabled?: boolean;
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>;
    onRun?: (question: undefined | MetabaseQuestion) => void;
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void;
    plugins?: MetabasePluginsConfig;
    questionId: null | SdkQuestionId;
    targetCollection?: SdkCollectionId;
    withDownloads?: boolean;
}
Index

Properties

children? entityTypes? initialSqlParameters? isSaveEnabled? diff --git a/_docs/master/embedding/sdk/api/CreateQuestion.html b/_docs/master/embedding/sdk/api/CreateQuestion.html index dd1d9a4f9b..e79feca847 100644 --- a/_docs/master/embedding/sdk/api/CreateQuestion.html +++ b/_docs/master/embedding/sdk/api/CreateQuestion.html @@ -9,13 +9,22 @@ layout: docs-api --- -CreateQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Function CreateQuestion

  • Parameters

    • Optionalprops: CreateQuestionProps
      • OptionalentityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        +CreateQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Function CreateQuestion

        • Parameters

          • Optionalprops: CreateQuestionProps
            • OptionalclassName?: string

              A custom class name to be added to the root element.

              +
            • OptionalcomponentPlugins?: MetabasePluginsConfig

              Additional mapper function to override or add drill-down menu

              +
            • OptionalentityTypes?: EmbeddingEntityType[]

              An array that specifies which entity types are available in the data picker

              +
            • Optionalheight?: Height<string | number>

              A number or string specifying a CSS size value that specifies the height of the component

            • OptionalinitialSqlParameters?: SqlParameterValues

              Initial values for the SQL parameters.

            • OptionalisSaveEnabled?: boolean

              Whether to show the save button.

            • OptionalonBeforeSave?: (
                  question: undefined | MetabaseQuestion,
                  context: { isNewQuestion: boolean },
              ) => Promise<void>

              A callback function that triggers before saving. Only relevant when isSaveEnabled = true

              +
            • OptionalonNavigateBack?: () => void

              A callback function that triggers when a user clicks the back button.

            • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

              A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

            • OptionalonSave?: (
                  question: MetabaseQuestion,
                  context: { dashboardTabId?: number; isNewQuestion: boolean },
              ) => void

              A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

              -
            • Optionalplugins?: MetabasePluginsConfig
            • OptionaltargetCollection?: SdkCollectionId

              The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

              +
            • Optionalplugins?: MetabasePluginsConfig
            • Optionalstyle?: CSSProperties

              A custom style object to be added to the root element.

              +
            • OptionaltargetCollection?: SdkCollectionId

              The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

              +
            • Optionaltitle?: SdkQuestionTitleProps

              Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

              +
            • Optionalwidth?: Width<string | number>

              A number or string specifying a CSS size value that specifies the width of the component

              +
            • OptionalwithChartTypeSelector?: boolean

              Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

            • OptionalwithDownloads?: boolean

              Enables the ability to download results in the interactive question.

              +
            • OptionalwithResetButton?: boolean

              Determines whether a reset button is displayed. Only relevant when using the default layout.

          Returns Element

          Use <InteractiveQuestion questionId="new" /> instead.

        diff --git a/_docs/master/embedding/sdk/api/CreateQuestionProps.html b/_docs/master/embedding/sdk/api/CreateQuestionProps.html index 162264812e..c3b9fb4804 100644 --- a/_docs/master/embedding/sdk/api/CreateQuestionProps.html +++ b/_docs/master/embedding/sdk/api/CreateQuestionProps.html @@ -9,21 +9,39 @@ layout: docs-api --- -CreateQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Interface CreateQuestionProps

        interface CreateQuestionProps {
            entityTypes?: EmbeddingEntityType[];
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            targetCollection?: SdkCollectionId;
            withDownloads?: boolean;
        }
        Index

        Properties

        entityTypes? +CreateQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Interface CreateQuestionProps

        interface CreateQuestionProps {
            className?: string;
            componentPlugins?: MetabasePluginsConfig;
            entityTypes?: EmbeddingEntityType[];
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onNavigateBack?: () => void;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            style?: CSSProperties;
            targetCollection?: SdkCollectionId;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
            withResetButton?: boolean;
        }
        Index

        Properties

        entityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        +withResetButton? +

        Properties

        className?: string

        A custom class name to be added to the root element.

        +
        componentPlugins?: MetabasePluginsConfig

        Additional mapper function to override or add drill-down menu

        +
        entityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        +
        height?: Height<string | number>

        A number or string specifying a CSS size value that specifies the height of the component

        initialSqlParameters?: SqlParameterValues

        Initial values for the SQL parameters.

        isSaveEnabled?: boolean

        Whether to show the save button.

        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

        +
        onNavigateBack?: () => void

        A callback function that triggers when a user clicks the back button.

        onRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        -
        targetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

        +

        A custom style object to be added to the root element.

        +
        targetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

        +

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        +
        width?: Width<string | number>

        A number or string specifying a CSS size value that specifies the width of the component

        +
        withChartTypeSelector?: boolean

        Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

        withDownloads?: boolean

        Enables the ability to download results in the interactive question.

        -

        +
withResetButton?: boolean

Determines whether a reset button is displayed. Only relevant when using the default layout.

+

diff --git a/_docs/master/embedding/sdk/api/EditableDashboard.html b/_docs/master/embedding/sdk/api/EditableDashboard.html index 43f5381000..bd76c55d96 100644 --- a/_docs/master/embedding/sdk/api/EditableDashboard.html +++ b/_docs/master/embedding/sdk/api/EditableDashboard.html @@ -20,7 +20,7 @@
  • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
  • -
  • OptionaldataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
  • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

  • OptionaldrillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

  • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

  • OptionalhiddenParameters?: string[]

    A list of parameters to hide. diff --git a/_docs/master/embedding/sdk/api/EditableDashboardProps.html b/_docs/master/embedding/sdk/api/EditableDashboardProps.html index 624a16cef9..0b4a818e9c 100644 --- a/_docs/master/embedding/sdk/api/EditableDashboardProps.html +++ b/_docs/master/embedding/sdk/api/EditableDashboardProps.html @@ -9,7 +9,7 @@ layout: docs-api --- -EditableDashboardProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface EditableDashboardProps

    interface EditableDashboardProps {
        className?: string;
        dashboardId: SdkDashboardId;
        dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">;
        drillThroughQuestionHeight?: Height<string | number>;
        drillThroughQuestionProps?: DrillThroughQuestionProps;
        hiddenParameters?: string[];
        initialParameters?: ParameterValues;
        onLoad?: (dashboard: null | MetabaseDashboard) => void;
        onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
        plugins?: MetabasePluginsConfig;
        renderDrillThroughQuestion?: () => ReactNode;
        style?: CSSProperties;
        withCardTitle?: boolean;
        withDownloads?: boolean;
        withTitle?: boolean;
    }
    Index

    Properties

    className? +EditableDashboardProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface EditableDashboardProps

    interface EditableDashboardProps {
        className?: string;
        dashboardId: SdkDashboardId;
        dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">;
        drillThroughQuestionHeight?: Height<string | number>;
        drillThroughQuestionProps?: DrillThroughQuestionProps;
        hiddenParameters?: string[];
        initialParameters?: ParameterValues;
        onLoad?: (dashboard: null | MetabaseDashboard) => void;
        onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
        plugins?: MetabasePluginsConfig;
        renderDrillThroughQuestion?: () => ReactNode;
        style?: CSSProperties;
        withCardTitle?: boolean;
        withDownloads?: boolean;
        withTitle?: boolean;
    }
    Index
  • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
  • -
    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_docs/master/embedding/sdk/api/IconName.html b/_docs/master/embedding/sdk/api/IconName.html index 79e2c3249b..dc5d728476 100644 --- a/_docs/master/embedding/sdk/api/IconName.html +++ b/_docs/master/embedding/sdk/api/IconName.html @@ -9,4 +9,4 @@ layout: docs-api --- -IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Type Alias IconName

    IconName:
        | "string"
        | "number"
        | "function"
        | "model"
        | "table"
        | "question"
        | "collection"
        | "dashboard"
        | "add"
        | "add_column"
        | "add_data"
        | "add_folder"
        | "add_row"
        | "add_to_dash"
        | "ai"
        | "alert"
        | "alert_filled"
        | "alert_confirm"
        | "archive"
        | "area"
        | "attachment"
        | "arrow_up"
        | "arrow_down"
        | "arrow_left"
        | "arrow_left_to_line"
        | "arrow_right"
        | "arrow_split"
        | "audit"
        | "badge"
        | "bar"
        | "bell"
        | "birthday"
        | "bookmark"
        | "bookmark_filled"
        | "bolt"
        | "bolt_filled"
        | "breakout"
        | "bubble"
        | "burger"
        | "calendar"
        | "check"
        | "check_filled"
        | "chevrondown"
        | "chevronleft"
        | "chevronright"
        | "chevronup"
        | "click"
        | "clipboard"
        | "clock"
        | "clone"
        | "close"
        | "cloud"
        | "cloud_filled"
        | "compare"
        | "combine"
        | "connections"
        | "contract"
        | "copy"
        | "curved"
        | "database"
        | "dash"
        | "curve"
        | "document"
        | "download"
        | "dyno"
        | "edit_document"
        | "ellipsis"
        | "embed"
        | "empty"
        | "enter_or_return"
        | "expand"
        | "expand_arrow"
        | "extract"
        | "eye"
        | "eye_crossed_out"
        | "eye_outline"
        | "field"
        | "fields"
        | "filter"
        | "filter_plus"
        | "bug"
        | "format_code"
        | "formula"
        | "funnel"
        | "funnel_outline"
        | "folder"
        | "folder_filled"
        | "gauge"
        | "gear"
        | "gear_settings_filled"
        | "gem"
        | "globe"
        | "grabber"
        | "grid"
        | "group"
        | "google"
        | "google_drive"
        | "google_sheet"
        | "history"
        | "home"
        | "horizontal_bar"
        | "hourglass"
        | "info"
        | "info_filled"
        | "info_outline"
        | "insight"
        | "int"
        | "io"
        | "join_full_outer"
        | "join_inner"
        | "join_left_outer"
        | "join_right_outer"
        | "index"
        | "key"
        | "label"
        | "ldap"
        | "learn"
        | "lightbulb"
        | "link"
        | "line"
        | "lines"
        | "lineandbar"
        | "line_style_dashed"
        | "line_style_dotted"
        | "line_style_solid"
        | "list"
        | "location"
        | "lock"
        | "lock_filled"
        | "mail"
        | "mail_filled"
        | "metabot"
        | "metabot_sad"
        | "metric"
        | "model_with_badge"
        | "moon"
        | "move"
        | "move_card"
        | "new_folder"
        | "notebook"
        | "palette"
        | "pause"
        | "pencil"
        | "pencil_lines"
        | "permissions_limited"
        | "person"
        | "pie"
        | "pin"
        | "pinmap"
        | "pivot_table"
        | "play"
        | "play_outlined"
        | "popover"
        | "popular"
        | "progress"
        | "pulse"
        | "recents"
        | "revert"
        | "sankey"
        | "share"
        | "split"
        | "sql"
        | "subscription"
        | "straight"
        | "stepped"
        | "sort"
        | "sort_arrows"
        | "sum"
        | "sync"
        | "redo"
        | "return"
        | "reference"
        | "refresh"
        | "refresh_downstream"
        | "rocket"
        | "ruler"
        | "schema"
        | "search"
        | "section"
        | "segment"
        | "shield"
        | "sidebar_closed"
        | "sidebar_open"
        | "slack"
        | "slack_colorized"
        | "smartscalar"
        | "snail"
        | "snippet"
        | "sparkles"
        | "star_filled"
        | "star"
        | "stop"
        | "store"
        | "sun"
        | "t-shirt"
        | "tab"
        | "table2"
        | "time_history"
        | "trash"
        | "trash_filled"
        | "triangle_left"
        | "triangle_right"
        | "unarchive"
        | "undo"
        | "unknown"
        | "unpin"
        | "unsubscribe"
        | "upload"
        | "variable"
        | "verified"
        | "official_collection"
        | "verified_filled"
        | "view_archive"
        | "warning"
        | "warning_round_filled"
        | "warning_triangle_filled"
        | "waterfall"
        | "webhook"
        | "10k"
        | "1m"
        | "zoom_in"
        | "zoom_out"
        | "scalar"
        | "cake"
        | "external"
        | "table_spaced"
        | "beaker"
        | "eye_filled"

    +IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Type Alias IconName

    IconName:
        | "string"
        | "number"
        | "function"
        | "model"
        | "table"
        | "question"
        | "collection"
        | "dashboard"
        | "revert"
        | "add"
        | "add_column"
        | "add_data"
        | "add_folder"
        | "add_row"
        | "add_to_dash"
        | "ai"
        | "alert"
        | "alert_filled"
        | "alert_confirm"
        | "archive"
        | "area"
        | "attachment"
        | "arrow_up"
        | "arrow_down"
        | "arrow_left"
        | "arrow_left_to_line"
        | "arrow_right"
        | "arrow_split"
        | "audit"
        | "badge"
        | "bar"
        | "bell"
        | "birthday"
        | "bookmark"
        | "bookmark_filled"
        | "bolt"
        | "bolt_filled"
        | "breakout"
        | "bubble"
        | "burger"
        | "calendar"
        | "check"
        | "check_filled"
        | "chevrondown"
        | "chevronleft"
        | "chevronright"
        | "chevronup"
        | "click"
        | "clipboard"
        | "clock"
        | "clone"
        | "close"
        | "cloud"
        | "cloud_filled"
        | "compare"
        | "combine"
        | "connections"
        | "contract"
        | "copy"
        | "curved"
        | "database"
        | "dash"
        | "curve"
        | "document"
        | "download"
        | "dyno"
        | "edit_document"
        | "ellipsis"
        | "embed"
        | "empty"
        | "enter_or_return"
        | "expand"
        | "expand_arrow"
        | "extract"
        | "eye"
        | "eye_crossed_out"
        | "eye_outline"
        | "field"
        | "fields"
        | "filter"
        | "filter_plus"
        | "bug"
        | "format_code"
        | "formula"
        | "funnel"
        | "funnel_outline"
        | "folder"
        | "folder_filled"
        | "gauge"
        | "gear"
        | "gear_settings_filled"
        | "gem"
        | "globe"
        | "grabber"
        | "grid"
        | "group"
        | "google"
        | "google_drive"
        | "google_sheet"
        | "history"
        | "home"
        | "horizontal_bar"
        | "hourglass"
        | "info"
        | "info_filled"
        | "info_outline"
        | "insight"
        | "int"
        | "io"
        | "join_full_outer"
        | "join_inner"
        | "join_left_outer"
        | "join_right_outer"
        | "index"
        | "key"
        | "label"
        | "ldap"
        | "learn"
        | "lightbulb"
        | "link"
        | "line"
        | "lines"
        | "lineandbar"
        | "line_style_dashed"
        | "line_style_dotted"
        | "line_style_solid"
        | "list"
        | "location"
        | "lock"
        | "lock_filled"
        | "mail"
        | "mail_filled"
        | "metabot"
        | "metabot_sad"
        | "metric"
        | "model_with_badge"
        | "moon"
        | "move"
        | "move_card"
        | "new_folder"
        | "notebook"
        | "palette"
        | "pause"
        | "pencil"
        | "pencil_lines"
        | "permissions_limited"
        | "person"
        | "pie"
        | "pin"
        | "pinmap"
        | "pivot_table"
        | "play"
        | "play_outlined"
        | "popover"
        | "popular"
        | "progress"
        | "pulse"
        | "recents"
        | "sankey"
        | "share"
        | "split"
        | "sql"
        | "subscription"
        | "straight"
        | "stepped"
        | "sort"
        | "sort_arrows"
        | "sum"
        | "sync"
        | "redo"
        | "return"
        | "reference"
        | "refresh"
        | "refresh_downstream"
        | "rocket"
        | "ruler"
        | "schema"
        | "search"
        | "section"
        | "segment"
        | "shield"
        | "sidebar_closed"
        | "sidebar_open"
        | "slack"
        | "slack_colorized"
        | "smartscalar"
        | "snail"
        | "snippet"
        | "sparkles"
        | "star_filled"
        | "star"
        | "stop"
        | "store"
        | "sun"
        | "t-shirt"
        | "tab"
        | "table2"
        | "time_history"
        | "trash"
        | "trash_filled"
        | "triangle_left"
        | "triangle_right"
        | "unarchive"
        | "undo"
        | "unknown"
        | "unpin"
        | "unsubscribe"
        | "upload"
        | "variable"
        | "verified"
        | "official_collection"
        | "verified_filled"
        | "view_archive"
        | "warning"
        | "warning_round_filled"
        | "warning_triangle_filled"
        | "waterfall"
        | "webhook"
        | "10k"
        | "1m"
        | "zoom_in"
        | "zoom_out"
        | "scalar"
        | "cake"
        | "external"
        | "table_spaced"
        | "beaker"
        | "eye_filled"

    diff --git a/_docs/master/embedding/sdk/api/InteractiveDashboard.html b/_docs/master/embedding/sdk/api/InteractiveDashboard.html index 41e5061096..fe6812fef0 100644 --- a/_docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -9,8 +9,8 @@ layout: docs-api --- -InteractiveDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function InteractiveDashboard

    dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    +
    dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

    Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    drillThroughQuestionHeight?: Height<string | number>

    Height of a question component when drilled from the dashboard to a question level.

    drillThroughQuestionProps?: DrillThroughQuestionProps

    Props of a question component when drilled from the dashboard to a question level.

    Type declaration

    Props for the drill-through question

    diff --git a/_docs/master/embedding/sdk/api/InteractiveQuestion.html b/_docs/master/embedding/sdk/api/InteractiveQuestion.html deleted file mode 100644 index dc7989bff8..0000000000 --- a/_docs/master/embedding/sdk/api/InteractiveQuestion.html +++ /dev/null @@ -1,131 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: InteractiveQuestion -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/InteractiveQuestion.html' -layout: docs-api ---- - -InteractiveQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function InteractiveQuestion

    • A component that renders an interactive question.

      -

      Parameters

      • props: InteractiveQuestionProps
        • Optionalchildren?: ReactNode

          The children of the MetabaseProvider component.s

          -
        • OptionalclassName?: string

          A custom class name to be added to the root element.

          -
        • OptionalentityTypes?: EmbeddingEntityType[]

          An array that specifies which entity types are available in the data picker

          -
        • Optionalheight?: Height<string | number>

          A number or string specifying a CSS size value that specifies the height of the component

          -
        • OptionalinitialSqlParameters?: SqlParameterValues

          Initial values for the SQL parameters.

          -
        • OptionalisSaveEnabled?: boolean

          Whether to show the save button.

          -
        • OptionalonBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>

          A callback function that triggers before saving. Only relevant when isSaveEnabled = true

          -
        • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

          A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

          -
        • OptionalonSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void

          A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

          -
        • Optionalplugins?: MetabasePluginsConfig
        • questionId: null | SdkQuestionId

          The ID of the question. -
          -This is either: -

          -
            -
          • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
          • -
          • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
          • -
          • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
          • -
          -
        • Optionalstyle?: CSSProperties

          A custom style object to be added to the root element.

          -
        • OptionaltargetCollection?: SdkCollectionId

          The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

          -
        • Optionaltitle?: SdkQuestionTitleProps

          Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

          -
        • Optionalwidth?: Width<string | number>

          A number or string specifying a CSS size value that specifies the width of the component

          -
        • OptionalwithChartTypeSelector?: boolean

          Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

          -
        • OptionalwithDownloads?: boolean

          Enables the ability to download results in the interactive question.

          -
        • OptionalwithResetButton?: boolean

          Determines whether a reset button is displayed. Only relevant when using the default layout.

          -

      Returns null | Element

    Index

    InteractiveQuestion

    BackButton: (props: InteractiveQuestionBackButtonProps) => null | Element

    Type declaration

    Breakout: () => null | Element

    Type declaration

      • (): null | Element
      • Function

        A set of badges for managing data groupings (breakouts). -Uses question context for breakout functionality.

        -

        Returns null | Element

    BreakoutDropdown: (
        props: InteractiveQuestionBreakoutDropdownProps,
    ) => null | Element

    Type declaration

    ChartTypeDropdown: (props: MenuProps) => Element

    Type declaration

      • (props: MenuProps): Element
      • Function

        Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). -Automatically updates to show recommended visualization types for the current data.

        -

        Parameters

        Returns Element

    ChartTypeSelector: (props: StackProps) => Element

    Type declaration

    DownloadWidget: (props: StackProps) => null | Element

    Type declaration

      • (props: StackProps): null | Element
      • Function

        Provides a UI widget for downloading data in different formats (CSV, XLSX, JSON, and PNG depending on the visualization).

        -

        Parameters

        Returns null | Element

    DownloadWidgetDropdown: (props: PopoverProps) => Element

    Type declaration

    Editor: (props: InteractiveQuestionEditorProps) => undefined | Element

    Type declaration

      • (props: InteractiveQuestionEditorProps): undefined | Element
      • Function

        Advanced query editor that provides full access to question configuration. -Includes filtering, aggregation, custom expressions, and joins.

        -

        Parameters

        • props: InteractiveQuestionEditorProps
          • OptionalhasVisualizeButton?: boolean
          • OptionalonApply?: () => void

            Callback function executed when changes are applied

            -

        Returns undefined | Element

    EditorButton: (
        props: InteractiveQuestionEditorButtonProps,
    ) => undefined | false | Element

    Type declaration

    Type declaration

    FilterDropdown: (
        props: InteractiveQuestionFilterDropdownProps,
    ) => null | Element

    Type declaration

    Notebook: (props: InteractiveQuestionEditorProps) => undefined | Element

    Type declaration

      • (props: InteractiveQuestionEditorProps): undefined | Element
      • Function

        Advanced query editor that provides full access to question configuration. -Includes filtering, aggregation, custom expressions, and joins.

        -

        Parameters

        • props: InteractiveQuestionEditorProps
          • OptionalhasVisualizeButton?: boolean
          • OptionalonApply?: () => void

            Callback function executed when changes are applied

            -

        Returns undefined | Element

    Use InteractiveQuestion.Editor instead

    -
    NotebookButton: (
        props: InteractiveQuestionEditorButtonProps,
    ) => undefined | false | Element

    Type declaration

    Use InteractiveQuestion.EditorButton instead

    -
    QuestionSettings: (props: StackProps) => null | Element

    Type declaration

      • (props: StackProps): null | Element
      • Function

        Settings panel for configuring visualization options like axes, colors, and formatting. -Uses question context for settings.

        -

        Parameters

        Returns null | Element

    QuestionSettingsDropdown: (
        props?: InteractiveQuestionQuestionSettingsDropdownProps,
    ) => Element

    Type declaration

    QuestionVisualization: (
        props: { className?: string; style?: CSSProperties } & {
            height?: Height<string | number>;
            width?: Width<string | number>;
        } & {},
    ) => Element

    Type declaration

      • (
            props: { className?: string; style?: CSSProperties } & {
                height?: Height<string | number>;
                width?: Width<string | number>;
            } & {},
        ): Element
      • Function

        The main visualization component that renders the question results as a chart, table, or other visualization type.

        -

        Parameters

        • props: { className?: string; style?: CSSProperties } & {
              height?: Height<string | number>;
              width?: Width<string | number>;
          } & {}
          • OptionalclassName?: string

            A custom class name to be added to the root element.

            -
          • Optionalstyle?: CSSProperties

            A custom style object to be added to the root element.

            -
          • Optionalheight?: Height<string | number>

            A number or string specifying a CSS size value that specifies the height of the component

            -
          • Optionalwidth?: Width<string | number>

            A number or string specifying a CSS size value that specifies the width of the component

            -

          Returns Element

      ResetButton: (props?: ButtonProps) => null | Element

      Type declaration

        • (props?: ButtonProps): null | Element
        • Function

          Button to reset question modifications. Only appears when there are unsaved changes to the question.

          -

          Parameters

          Returns null | Element

      Type declaration

      SaveQuestionForm: (
          props: InteractiveQuestionSaveQuestionFormProps,
      ) => null | Element

      Type declaration

      Summarize: () => Element

      Type declaration

        • (): Element
        • Function

          Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. -Uses question context for summarization functionality.

          -

          Returns Element

      SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => Element

      Type declaration

      Title: (
          props: { className?: string; style?: CSSProperties },
      ) => undefined | Element

      Type declaration

        • (props: { className?: string; style?: CSSProperties }): undefined | Element
        • Function

          Displays a title based on the question's state. Shows:

          -
            -
          • The question's display name if it's saved
          • -
          • An auto-generated description for ad-hoc questions (non-native queries)
          • -
          • "New question" as fallback or for new/native queries
          • -
          -

          Parameters

          • props: { className?: string; style?: CSSProperties }
            • OptionalclassName?: string

              A custom class name to be added to the root element.

              -
            • Optionalstyle?: CSSProperties

              A custom style object to be added to the root element.

              -

          Returns undefined | Element

      other

      VisualizationButton: () => null | Element

      diff --git a/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html b/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html index ab3d118292..a1ccc4f197 100644 --- a/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html +++ b/_docs/master/embedding/sdk/api/InteractiveQuestionProps.html @@ -9,13 +9,14 @@ layout: docs-api --- -InteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface InteractiveQuestionProps

      interface InteractiveQuestionProps {
          children?: ReactNode;
          className?: string;
          entityTypes?: EmbeddingEntityType[];
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          targetCollection?: SdkCollectionId;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
          withResetButton?: boolean;
      }
      Index

      Properties

      children? -className? +InteractiveQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface InteractiveQuestionProps

      interface InteractiveQuestionProps {
          className?: string;
          componentPlugins?: MetabasePluginsConfig;
          entityTypes?: EmbeddingEntityType[];
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onNavigateBack?: () => void;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          targetCollection?: SdkCollectionId;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
          withResetButton?: boolean;
      }
      Index

      Properties

      children?: ReactNode

      The children of the MetabaseProvider component.s

      -
      className?: string

      A custom class name to be added to the root element.

      +

      Properties

      className?: string

      A custom class name to be added to the root element.

      +
      componentPlugins?: MetabasePluginsConfig

      Additional mapper function to override or add drill-down menu

      entityTypes?: EmbeddingEntityType[]

      An array that specifies which entity types are available in the data picker

      height?: Height<string | number>

      A number or string specifying a CSS size value that specifies the height of the component

      initialSqlParameters?: SqlParameterValues

      Initial values for the SQL parameters.

      isSaveEnabled?: boolean

      Whether to show the save button.

      onBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      +
      onNavigateBack?: () => void

      A callback function that triggers when a user clicks the back button.

      onRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      onSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      -
      questionId: null | SdkQuestionId

      The ID of the question. -
      -This is either: -

      -
        -
      • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
      • -
      • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
      • -
      • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
      • -
      -

      A custom style object to be added to the root element.

      +
      questionId: null | SdkQuestionId

      A custom style object to be added to the root element.

      targetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

      Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

      width?: Width<string | number>

      A number or string specifying a CSS size value that specifies the width of the component

      withChartTypeSelector?: boolean

      Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

      withDownloads?: boolean

      Enables the ability to download results in the interactive question.

      withResetButton?: boolean

      Determines whether a reset button is displayed. Only relevant when using the default layout.

      -

      +

      diff --git a/_docs/master/embedding/sdk/api/SdkQuestionProps.html b/_docs/master/embedding/sdk/api/SdkQuestionProps.html new file mode 100644 index 0000000000..80d8e43f09 --- /dev/null +++ b/_docs/master/embedding/sdk/api/SdkQuestionProps.html @@ -0,0 +1,48 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: SdkQuestionProps +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/SdkQuestionProps.html' +layout: docs-api +--- + +SdkQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface SdkQuestionProps

      interface SdkQuestionProps {
          className?: string;
          componentPlugins?: MetabasePluginsConfig;
          entityTypes?: EmbeddingEntityType[];
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          isSaveEnabled?: boolean;
          onBeforeSave?: (
              question: undefined | MetabaseQuestion,
              context: { isNewQuestion: boolean },
          ) => Promise<void>;
          onNavigateBack?: () => void;
          onRun?: (question: undefined | MetabaseQuestion) => void;
          onSave?: (
              question: MetabaseQuestion,
              context: { dashboardTabId?: number; isNewQuestion: boolean },
          ) => void;
          plugins?: MetabasePluginsConfig;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          targetCollection?: SdkCollectionId;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
          withResetButton?: boolean;
      }
      Index

      Properties

      className?: string

      A custom class name to be added to the root element.

      +
      componentPlugins?: MetabasePluginsConfig

      Additional mapper function to override or add drill-down menu

      +
      entityTypes?: EmbeddingEntityType[]

      An array that specifies which entity types are available in the data picker

      +
      height?: Height<string | number>

      A number or string specifying a CSS size value that specifies the height of the component

      +
      initialSqlParameters?: SqlParameterValues

      Initial values for the SQL parameters.

      +
      isSaveEnabled?: boolean

      Whether to show the save button.

      +
      onBeforeSave?: (
          question: undefined | MetabaseQuestion,
          context: { isNewQuestion: boolean },
      ) => Promise<void>

      A callback function that triggers before saving. Only relevant when isSaveEnabled = true

      +
      onNavigateBack?: () => void

      A callback function that triggers when a user clicks the back button.

      +
      onRun?: (question: undefined | MetabaseQuestion) => void

      A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

      +
      onSave?: (
          question: MetabaseQuestion,
          context: { dashboardTabId?: number; isNewQuestion: boolean },
      ) => void

      A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

      +
      questionId: null | SdkQuestionId

      A custom style object to be added to the root element.

      +
      targetCollection?: SdkCollectionId

      The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

      +

      Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

      +
      width?: Width<string | number>

      A number or string specifying a CSS size value that specifies the width of the component

      +
      withChartTypeSelector?: boolean

      Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

      +
      withDownloads?: boolean

      Enables the ability to download results in the interactive question.

      +
      withResetButton?: boolean

      Determines whether a reset button is displayed. Only relevant when using the default layout.

      +

      diff --git a/_docs/master/embedding/sdk/api/StaticDashboard.html b/_docs/master/embedding/sdk/api/StaticDashboard.html index 137b9f13ef..2345fa0fb4 100644 --- a/_docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_docs/master/embedding/sdk/api/StaticDashboard.html @@ -9,8 +9,8 @@ layout: docs-api --- -StaticDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Function StaticDashboard

      dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      +
      dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      drillThroughQuestionHeight?: Height<string | number>

      Height of a question component when drilled from the dashboard to a question level.

      drillThroughQuestionProps?: DrillThroughQuestionProps

      Props of a question component when drilled from the dashboard to a question level.

      Type declaration

      Props for the drill-through question

      diff --git a/_docs/master/embedding/sdk/api/StaticQuestion.html b/_docs/master/embedding/sdk/api/StaticQuestion.html deleted file mode 100644 index 51f2d9ff73..0000000000 --- a/_docs/master/embedding/sdk/api/StaticQuestion.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: StaticQuestion -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/StaticQuestion.html' -layout: docs-api ---- - -StaticQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Function StaticQuestion

      • A component that renders a static question.

        -

        Parameters

        • props: StaticQuestionProps
          • OptionalclassName?: string

            A custom class name to be added to the root element.

            -
          • Optionalheight?: Height<string | number>

            A number or string specifying a CSS size value that specifies the height of the component

            -
          • OptionalinitialSqlParameters?: SqlParameterValues

            Initial values for the SQL parameters.

            -
          • questionId: null | SdkQuestionId

            The ID of the question. -
            -This is either: -

            -
              -
            • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
            • -
            • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
            • -
            • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
            • -
            -
          • Optionalstyle?: CSSProperties

            A custom style object to be added to the root element.

            -
          • Optionalwidth?: Width<string | number>

            A number or string specifying a CSS size value that specifies the width of the component

            -
          • OptionalwithChartTypeSelector?: boolean
          • OptionalwithDownloads?: boolean

            Enables the ability to download results in the interactive question.

            -

        Returns ReactNode

      diff --git a/_docs/master/embedding/sdk/api/StaticQuestionProps.html b/_docs/master/embedding/sdk/api/StaticQuestionProps.html index 0ddc7ab72b..726ffb163d 100644 --- a/_docs/master/embedding/sdk/api/StaticQuestionProps.html +++ b/_docs/master/embedding/sdk/api/StaticQuestionProps.html @@ -9,29 +9,21 @@ layout: docs-api --- -StaticQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface StaticQuestionProps

      interface StaticQuestionProps {
          className?: string;
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
      }
      Index

      Properties

      className? +StaticQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface StaticQuestionProps

      interface StaticQuestionProps {
          className?: string;
          height?: Height<string | number>;
          initialSqlParameters?: SqlParameterValues;
          questionId: null | SdkQuestionId;
          style?: CSSProperties;
          title?: SdkQuestionTitleProps;
          width?: Width<string | number>;
          withChartTypeSelector?: boolean;
          withDownloads?: boolean;
      }
      Index

      Properties

      className?: string

      A custom class name to be added to the root element.

      height?: Height<string | number>

      A number or string specifying a CSS size value that specifies the height of the component

      initialSqlParameters?: SqlParameterValues

      Initial values for the SQL parameters.

      -
      questionId: null | SdkQuestionId

      The ID of the question. -
      -This is either: -

      -
        -
      • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
      • -
      • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
      • -
      • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
      • -
      -

      A custom style object to be added to the root element.

      +
      questionId: null | SdkQuestionId

      A custom style object to be added to the root element.

      +

      Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

      width?: Width<string | number>

      A number or string specifying a CSS size value that specifies the width of the component

      -
      withChartTypeSelector?: boolean
      withDownloads?: boolean

      Enables the ability to download results in the interactive question.

      -

      +
      withChartTypeSelector?: boolean

      Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

      +
      withDownloads?: boolean

      Enables the ability to download results in the interactive question.

      +

      diff --git a/_docs/master/embedding/sdk/api/assets/navigation.js b/_docs/master/embedding/sdk/api/assets/navigation.js index ba4359a8d1..aa69cd7e02 100644 --- a/_docs/master/embedding/sdk/api/assets/navigation.js +++ b/_docs/master/embedding/sdk/api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJylWU1z2zYQ/S88ezpppkmmvtmyPI3jtK7lJIeMDxC5EVGBAAMsrTod//cMzZIigcUH6ZNm8N6+t1h8U1//yxD+xew0WykhIEeu5LlWBwM6O8nykotCg8xOvwZ5NcOSgn4psRLZSbbnsshO3/72dOKXudGqNgGtZ3wq+PrN26f7saYGhnDBTLlVTBcfVcGErxc0tTcn0FBfCLrdHR/F7ZFX9zMTDfg1Ozik1xiwYs5qftQjYafbbsH/bsC0AxUs9Yg0Sb9vt31OslwwY7LTrIBaQ84QisxrTVZ7AoZnztBjTx/WBUe2FTDm/e/lQIGJ4nCtvGk8NKTvJYJmOfIHKjcKDaRH0a0MvZRQkhtkyHMiPwsIpGYxrawoNDzgo35Epu+F5kLclVo1u9Iz3byUxJFz1wYBpo1bzz5n+f68QXRyjXOtpF/9/u7XN68jbhrYXjV4oVVdqEOKJxWxwHlVMo13jzWkW9MhL/HeQHtUKfsISw5Z4H2hDlIoVnzhxQ5m1D0Q9+Is5rovdW13SaVTZ7fDnrkou/hUnyUOl1wg6PQxJPgLqtippLotdYnrL6lY/7sBRC53Jr12wcgXZjHffWlV+9/P3DRM8B8srdT+sJk9vwUDmLoAbfJMrw17gFQri7ugsq3CMPOVrtI8nYi5fWyqimn+Y8YpRocs6PEdRwFxvyMtfLH6CMi2zLTUB154X5EFfOMSevJZg+VKyW98d8zBxwjcg0JyMSG3Vm7EF47lWc0/wGNI98ha5nB1wJj81QGXaW9YJWLiLSdVfTTKlmaPJAxXT7UmIQmHJ1/3Dohc6B3S5BGRcN2eEsmnyIynp8LSu0rOmYH4oRpihTYicledsX0+X2ZXSqjxJ6ChLRptf+C55qaNbCoZ+gw0YkUdGoOqGl6Fq/a7C8jmPUI1MvCTYvqToE7H1Q+QZum3QR7VFpqt1aWyFlCBxIDwhJfiQpfZRmJK62oLRcHlbi2R42P7ZBp9JnHBqN7A7O6zH+Bx/N2FQKNHaa7kn6wapdW3xCKv1Y7Ldp9oRimMGlM335Xg+f4sn+5iBLhA70Y0Oy6N7xD1MZOdhlVNaA/YfLXpnKPxGapKE8dR1x7aV4/MqlYSJN6VMJ4nNJ6aF/EZzYFma0XGm+aluyC7UVziX9t/ICcuNxYhVXfYBjZgTHtFVXsgJhRJS/W4BMzLW/jenqnPgZeEA0FK1lcSL1nFBXGlPGLJ17HwMC4aPfeiZCMpa8GzBKiZT8Z/MtQl85PzH5PbjxumWQUI2v77xAJiOptiP9pIxh+xp0CCzrCcLJlR+xyVa8WK9cPkGCfhBM3uILTS6htT4rVWetjXpioTaLaWfc0m8RTVthJ/MFkI0M5CofEE1X4pWJU7Ns/QoB7kJJyg2S4QK6euKRr7XXgXjovF1FrP9l8GkMXVAW/B1Eqa0XZA47Tq/dP9Ty1Guno=" \ No newline at end of file +window.navigationData = "eJylWV1z0zgU/S9+7uywzAKzfWvTZKCU3W5T4IHhQbEusTayZKTrhsLw3xknTWLLV1/mqR2dc8+Rrq71lU8/CoRvWJwXMy0llCi0ujR6a8EUZ0VZCckNqOL8U5DXMKwo6I8Ka1mcFRuheHH+8q+fZ36ZW6MbG9Da4UPB5y9e/vzc1zTAEK6YrVaaGf5OcyZ9o6CpB3MCDYylteBEXDTipEbCodQQ7m52fJRxgry6H5hswa+5h1MS/l8LtpuoYKp7pIHfod3Nx1lRSmZtcV5waAyUDIEXXmsyPQMwPJDjqD1jmHOBbCWhz3vyGkGBmX2jEAwrUTxQShQaEFsiQ1ESOg4QkBj13ckjjYdqjBqDI+qlhHSdMTmSFBqe8F4nIuV7ZYSU95XR7brylJuXkpipQ0yXbm0uW8SRRQp7kluqzxSHuPYU1cPfJSAKtbZXRjdcbxPcgpETe/FB2JZJ8Z2lDdgflul/BxYwtVRccqbXkp3+X2hTxw3JiEzXe4ES4lYnWnD94BtPVbpIZi8vWblJnQaH6zg9+/vVny+eR9wMsI1uMb3myYgJzrOKGbx/bCDdmg75He8ldGfClEWLDpngfaW3SmrGPwq+hoy8B+J+uxe57lNdF0IimPQxE/zJrqluU13cvSB/95jq3K2NqSuGw53i1tY1M+J7xndLh9De/TPVO0C2YrZbjB8E914gOXwRCg7kixarmVZfxPrUJx8jcJIlvJ/EXCRDxEkVCYe2i9AYY6MbT+444qPA6qIRb+ExpHtiTXO43mJM/nqL07SXrJYx8Y4TL779FSBylh+SyEtExqVRY+Ut8ktmwX/moNCUQpppqQ1Rkfv2FIXxNdxFUlTuK6hhLLFrDsWTy17G+rbb1XeD7d31j23RaPdJ6UbYLrKtVejhqceKOrQWdX28h866pxlQ7RuEumfgJ8X0B0F7nbF+gJSl3wV5VDsoW2vflbmEGhQGhAe8FBc6zS4SU5rXK+BcqPVcocDH7uzYewgZg1G9I3N/UHkLj/2XFQKN7u6lVv+w/od3aIlF3ui1UN361va60GtMXbxnUpSbi5JeQHrgBL1b2a6Fsr5t0sdMdjp+1eTq+YTlqw1rjsbTVetGK1DoWV6HeKoq8UA4grK1IrNF89JdkN1qofDf1f9QEocPh5Cqe/yIl2Bt93KgN0CUA0lL9VgAltUdfO02013ggnAgSMn6WuGC1UISR74TlqoWmcZJs/feUqfv96Nfg8YKt8ywGhCM+8uEA8R0lnzT+wD7D+NDIEHnWMiOTK89R+VGMz5/GGx/JJygud9AnG4dGlPijdHmuKIMVQZQttb4fY3AU1S7TLxmikswoxKl8QTVwzHXydypOUODeqEk4QTN7gNx+rRvisZ+ld4PZ4zF1DrP7pkSFL/e4h3YRivb24to3Hc9+/wLboObAg==" \ No newline at end of file diff --git a/_docs/master/embedding/sdk/api/assets/search.js b/_docs/master/embedding/sdk/api/assets/search.js index a91212dd5e..2a04bc2d93 100644 --- a/_docs/master/embedding/sdk/api/assets/search.js +++ b/_docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/_docs/master/embedding/sdk/api/index.html b/_docs/master/embedding/sdk/api/index.html index 4cb4c9246d..60bca935d7 100644 --- a/_docs/master/embedding/sdk/api/index.html +++ b/_docs/master/embedding/sdk/api/index.html @@ -9,4 +9,4 @@ layout: docs-api --- -Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Embedded analytics SDK API

      CollectionBrowser

      CollectionBrowser
      CollectionBrowserProps

      CreateDashboardModal

      CreateDashboardModal
      CreateDashboardModalProps
      CreateDashboardValues
      useCreateDashboardApi

      CreateQuestion

      CreateQuestion
      CreateQuestionProps

      Dashboard

      EditableDashboard
      EditableDashboardProps
      InteractiveDashboard
      InteractiveDashboardProps
      StaticDashboard
      StaticDashboardProps

      InteractiveQuestion

      DrillThroughQuestionProps
      InteractiveQuestion
      InteractiveQuestionBackButtonProps
      InteractiveQuestionBreakoutDropdownProps
      InteractiveQuestionChartTypeDropdownProps
      InteractiveQuestionChartTypeSelectorProps
      InteractiveQuestionDownloadWidgetDropdownProps
      InteractiveQuestionDownloadWidgetProps
      InteractiveQuestionEditorButtonProps
      InteractiveQuestionEditorProps
      InteractiveQuestionFilterDropdownProps
      InteractiveQuestionFilterProps
      InteractiveQuestionProps
      InteractiveQuestionQuestionSettingsDropdownProps
      InteractiveQuestionQuestionSettingsProps
      InteractiveQuestionQuestionVisualizationProps
      InteractiveQuestionResetButtonProps
      InteractiveQuestionSaveButtonProps
      InteractiveQuestionSaveQuestionFormProps
      InteractiveQuestionSummarizeDropdownProps
      InteractiveQuestionTitleProps

      MetabaseProvider

      defineMetabaseAuthConfig
      MetabaseAuthConfig
      MetabaseAuthConfigWithApiKey
      MetabaseAuthConfigWithJwt
      MetabaseAuthConfigWithSaml
      MetabaseProvider
      MetabaseProviderProps

      StaticQuestion

      StaticQuestion
      StaticQuestionProps

      other

      BaseInteractiveQuestionProps
      ButtonProps
      ChartColor
      CollectionBrowserListColumns
      CustomDashboardCardMenuItem
      DashboardCardCustomMenuItem
      DashboardCardMenu
      DashboardCardMenuCustomElement
      DashCardMenuItem
      EmbeddingEntityType
      EntityTypeFilterKeys
      IconName
      LoginStatus
      MetabaseClickAction
      MetabaseClickActionPluginsConfig
      MetabaseCollection
      MetabaseCollectionItem
      MetabaseColors
      MetabaseComponentTheme
      MetabaseDashboard
      MetabaseDashboardPluginsConfig
      MetabaseDataPointObject
      MetabaseEmbeddingSessionToken
      MetabaseFetchRequestTokenFn
      MetabaseFontFamily
      MetabasePluginsConfig
      MetabaseQuestion
      MetabaseTheme
      MetabaseUser
      ParameterValues
      SdkCollectionId
      SdkDashboardId
      SdkDashboardLoadEvent
      SdkEntityId
      SdkErrorComponent
      SdkErrorComponentProps
      SdkEventHandlersConfig
      SdkQuestionId
      SdkQuestionTitleProps
      SdkUserId
      SqlParameterValues
      UserBackendJwtResponse

      +Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Embedded analytics SDK API

      CollectionBrowser

      CollectionBrowser
      CollectionBrowserProps

      CreateDashboardModal

      CreateDashboardModal
      useCreateDashboardApi
      CreateDashboardModalProps
      CreateDashboardValues

      CreateQuestion

      CreateQuestion
      CreateQuestionProps

      Dashboard

      EditableDashboard
      InteractiveDashboard
      StaticDashboard
      EditableDashboardProps
      InteractiveDashboardProps
      StaticDashboardProps

      InteractiveQuestion

      DrillThroughQuestionProps
      InteractiveQuestionEditorButtonProps
      InteractiveQuestionEditorProps
      InteractiveQuestionProps
      InteractiveQuestionQuestionSettingsDropdownProps
      InteractiveQuestionQuestionVisualizationProps
      InteractiveQuestionResetButtonProps
      InteractiveQuestionSaveQuestionFormProps
      InteractiveQuestionTitleProps
      SdkQuestionProps
      InteractiveQuestionBackButtonProps
      InteractiveQuestionBreakoutDropdownProps
      InteractiveQuestionChartTypeDropdownProps
      InteractiveQuestionChartTypeSelectorProps
      InteractiveQuestionDownloadWidgetDropdownProps
      InteractiveQuestionDownloadWidgetProps
      InteractiveQuestionFilterDropdownProps
      InteractiveQuestionFilterProps
      InteractiveQuestionQuestionSettingsProps
      InteractiveQuestionSaveButtonProps
      InteractiveQuestionSummarizeDropdownProps

      MetabaseProvider

      defineMetabaseAuthConfig
      MetabaseProvider
      MetabaseProviderProps
      MetabaseAuthConfig
      MetabaseAuthConfigWithApiKey
      MetabaseAuthConfigWithJwt
      MetabaseAuthConfigWithSaml

      StaticQuestion

      StaticQuestionProps

      other

      BaseSdkQuestionProps
      MetabaseColors
      MetabaseQuestion
      MetabaseTheme
      ButtonProps
      ChartColor
      CollectionBrowserListColumns
      CustomDashboardCardMenuItem
      DashboardCardCustomMenuItem
      DashboardCardMenu
      DashboardCardMenuCustomElement
      DashCardMenuItem
      EmbeddingEntityType
      EntityTypeFilterKeys
      IconName
      LoginStatus
      MetabaseClickAction
      MetabaseClickActionPluginsConfig
      MetabaseCollection
      MetabaseCollectionItem
      MetabaseComponentTheme
      MetabaseDashboard
      MetabaseDashboardPluginsConfig
      MetabaseDataPointObject
      MetabaseEmbeddingSessionToken
      MetabaseFetchRequestTokenFn
      MetabaseFontFamily
      MetabasePluginsConfig
      MetabaseUser
      ParameterValues
      SdkCollectionId
      SdkDashboardId
      SdkDashboardLoadEvent
      SdkEntityId
      SdkErrorComponent
      SdkErrorComponentProps
      SdkEventHandlersConfig
      SdkQuestionId
      SdkQuestionTitleProps
      SdkUserId
      SqlParameterValues
      UserBackendJwtResponse

      diff --git a/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md similarity index 99% rename from _docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md rename to _docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md index c3205ce9c4..1550e682b6 100644 --- a/_docs/master/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md @@ -4,8 +4,8 @@ has_magic_breadcrumbs: true show_category_breadcrumb: true show_title_breadcrumb: true category: Embedding -title: BaseInteractiveQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/BaseInteractiveQuestionProps.md' +title: BaseSdkQuestionProps +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/BaseSdkQuestionProps.md' layout: new-docs --- diff --git a/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md index a5ea63f17b..ac2e474cee 100644 --- a/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/CreateQuestionProps.md @@ -15,16 +15,25 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | -| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `isSaveEnabled?` | `boolean` | Whether to show the save button. | -| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | -| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | -| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | +| Property | Type | Description | +| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `componentPlugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu | +| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | +| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | +| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | +| `isSaveEnabled?` | `boolean` | Whether to show the save button. | +| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | +| `onNavigateBack?` | () => `void` | A callback function that triggers when a user clicks the back button. | +| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | +| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | +| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | +| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | +| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | +| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | +| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | diff --git a/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md index 69186d18d2..37062a3333 100644 --- a/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/EditableDashboardProps.md @@ -15,22 +15,22 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/IconName.md b/_docs/master/embedding/sdk/api/snippets/IconName.md index b39c97dd64..61158e48be 100644 --- a/_docs/master/embedding/sdk/api/snippets/IconName.md +++ b/_docs/master/embedding/sdk/api/snippets/IconName.md @@ -19,6 +19,7 @@ type IconName = | "question" | "collection" | "dashboard" + | "revert" | "add" | "add_column" | "add_data" @@ -168,7 +169,6 @@ type IconName = | "progress" | "pulse" | "recents" - | "revert" | "sankey" | "share" | "split" diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md index 3f026cc008..6cde9d0c98 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md @@ -30,7 +30,7 @@ function InteractiveDashboard( onLoad?: (dashboard: null | MetabaseDashboard) => void; onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void; } & { - dataPickerProps?: Pick; + dataPickerProps?: Pick; } & {}, ): Element; ``` @@ -41,9 +41,9 @@ A dashboard component with drill downs, click behaviors, and the ability to view -| Parameter | Type | Description | -| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\>; \} & \{ \} | | +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\>; \} & \{ \} | | diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md index f479613fcb..1c97d668de 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboardProps.md @@ -15,22 +15,22 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md deleted file mode 100644 index 62f4d3b260..0000000000 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: InteractiveQuestion -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/InteractiveQuestion.md' -layout: new-docs ---- - -```ts -function InteractiveQuestion(props: InteractiveQuestionProps): null | Element; -``` - -A component that renders an interactive question. - -## Parameters - - - -| Parameter | Type | Description | -| :-------- | :-------------------------------------------------------------- | :---------- | -| `props` | [`InteractiveQuestionProps`](./api/InteractiveQuestionProps) | | - - - -## Returns - - - -\| `null` -\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) - - diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md index 58e17b122f..508615f00b 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionProps.md @@ -15,25 +15,26 @@ layout: new-docs -| Property | Type | Description | -| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `children?` | [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | The children of the MetabaseProvider component.s | -| `className?` | `string` | A custom class name to be added to the root element. | -| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | -| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `isSaveEnabled?` | `boolean` | Whether to show the save button. | -| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | -| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | -| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | The ID of the question.
      This is either:
      - The numerical ID when accessing a question link, e.g., `http://localhost:3000/question/1-my-question` where the ID is `1`
      - The `entity_id` key of the question object. You can find a question's Entity ID in the info panel when viewing a question
      - `new` to show the notebook editor for creating new questions. `isSaveEnabled` must be `true` to allow saving the question | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | -| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | -| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | -| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | -| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | +| Property | Type | Description | +| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `componentPlugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu | +| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | +| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | +| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | +| `isSaveEnabled?` | `boolean` | Whether to show the save button. | +| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | +| `onNavigateBack?` | () => `void` | A callback function that triggers when a user clicks the back button. | +| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | +| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | +| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | - | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | +| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | +| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | +| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | +| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | +| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | diff --git a/_docs/master/embedding/sdk/api/snippets/SdkQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/SdkQuestionProps.md new file mode 100644 index 0000000000..84fdb84c84 --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/SdkQuestionProps.md @@ -0,0 +1,40 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: SdkQuestionProps +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/SdkQuestionProps.md' +layout: new-docs +--- + +**`Expand`** + +## Properties + + + +| Property | Type | Description | +| :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `componentPlugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu | +| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | +| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | +| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | +| `isSaveEnabled?` | `boolean` | Whether to show the save button. | +| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | +| `onNavigateBack?` | () => `void` | A callback function that triggers when a user clicks the back button. | +| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | +| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | +| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | - | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | +| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | +| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | +| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | +| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | +| `withResetButton?` | `boolean` | Determines whether a reset button is displayed. Only relevant when using the default layout. | + + diff --git a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md index 3136fb39f0..a2e705acfe 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md @@ -30,7 +30,7 @@ function StaticDashboard( onLoad?: (dashboard: null | MetabaseDashboard) => void; onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void; } & { - dataPickerProps?: Pick; + dataPickerProps?: Pick; } & {}, ): Element; ``` @@ -41,9 +41,9 @@ A lightweight dashboard component. -| Parameter | Type | Description | -| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\>; \} & \{ \} | | +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `props` | \{ `drillThroughQuestionHeight?`: `Height`\<`string` \| `number`\>; `drillThroughQuestionProps?`: [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps); `plugins?`: [`MetabasePluginsConfig`](./api/MetabasePluginsConfig); `renderDrillThroughQuestion?`: () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478); \} & \{ `dashboardId`: [`SdkDashboardId`](./api/SdkDashboardId); `hiddenParameters?`: `string`[]; `initialParameters?`: [`ParameterValues`](./api/ParameterValues); `withCardTitle?`: `boolean`; `withDownloads?`: `boolean`; `withTitle?`: `boolean`; \} & \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `onLoad?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; `onLoadWithoutCards?`: (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void`; \} & \{ `dataPickerProps?`: [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\>; \} & \{ \} | | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md b/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md index 048fcb36ab..7a1c7074d6 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticDashboardProps.md @@ -15,22 +15,22 @@ layout: new-docs -| Property | Type | Description | -| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | -| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`InteractiveQuestionProps`](./api/InteractiveQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | -| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | -| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | -| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | -| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | -| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | -| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | -| `withDownloads?` | `boolean` | Whether to hide the download button. | -| `withTitle?` | `boolean` | Whether the dashboard should display a title. | +| Property | Type | Description | +| :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `dashboardId` | [`SdkDashboardId`](./api/SdkDashboardId) | The ID of the dashboard.
      This is either:
      - the numerical ID when accessing a dashboard link, i.e. `http://localhost:3000/dashboard/1-my-dashboard` where the ID is `1`
      - the string ID found in the `entity_id` key of the dashboard object when using the API directly or using the SDK Collection Browser to return data | +| `dataPickerProps?` | [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys)\<[`SdkQuestionProps`](./api/SdkQuestionProps), `"entityTypes"`\> | Additional props to pass to the query builder rendered by `InteractiveQuestion` when creating a new dashboard question. | +| `drillThroughQuestionHeight?` | `Height`\<`string` \| `number`\> | Height of a question component when drilled from the dashboard to a question level. | +| `drillThroughQuestionProps?` | [`DrillThroughQuestionProps`](./api/DrillThroughQuestionProps) | Props of a question component when drilled from the dashboard to a question level. | +| `hiddenParameters?` | `string`[] | A list of [parameters to hide](/docs/master/embedding/public-links#appearance-parameters).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `initialParameters?` | [`ParameterValues`](./api/ParameterValues) | Query parameters for the dashboard. For a single option, use a `string` value, and use a list of strings for multiple options.
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to filter data on the frontend is a [security risk](/docs/master/embedding/sdk/authentication#security-warning-each-end-user-must-have-their-own-metabase-account).
      - Combining [initialParameters](./api/StaticDashboardProps#initialparameters) and [hiddenParameters](./api/StaticDashboardProps#hiddenparameters) to declutter the user interface is fine. | +| `onLoad?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded. | +| `onLoadWithoutCards?` | (`dashboard`: `null` \| [`MetabaseDashboard`](./api/MetabaseDashboard)) => `void` | Callback that is called when the dashboard is loaded without cards. | +| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details. | +| `renderDrillThroughQuestion?` | () => [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | A custom React component to render the question layout. Use namespaced InteractiveQuestion components to build the layout. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `withCardTitle?` | `boolean` | Whether the dashboard cards should display a title. | +| `withDownloads?` | `boolean` | Whether to hide the download button. | +| `withTitle?` | `boolean` | Whether the dashboard should display a title. | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md b/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md deleted file mode 100644 index d4933df40c..0000000000 --- a/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: StaticQuestion -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/StaticQuestion.md' -layout: new-docs ---- - -```ts -function StaticQuestion(props: StaticQuestionProps): ReactNode; -``` - -A component that renders a static question. - -## Parameters - - - -| Parameter | Type | -| :-------- | :---------------------------------------------------- | -| `props` | [`StaticQuestionProps`](./api/StaticQuestionProps) | - - - -## Returns - - - -[`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) - - diff --git a/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md index b652cbc226..6e3657c2a4 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticQuestionProps.md @@ -15,15 +15,16 @@ layout: new-docs -| Property | Type | Description | -| :---------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | The ID of the question.
      This is either:
      - The numerical ID when accessing a question link, e.g., `http://localhost:3000/question/1-my-question` where the ID is `1`
      - The `entity_id` key of the question object. You can find a question's Entity ID in the info panel when viewing a question
      - `new` to show the notebook editor for creating new questions. `isSaveEnabled` must be `true` to allow saving the question | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | -| `withChartTypeSelector?` | `boolean` | - | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | +| Property | Type | Description | +| :---------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `height?` | `Height`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the height of the component | +| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | +| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | - | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `title?` | [`SdkQuestionTitleProps`](./api/SdkQuestionTitleProps) | Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. | +| `width?` | `Width`\<`string` \| `number`\> | A number or string specifying a CSS size value that specifies the width of the component | +| `withChartTypeSelector?` | `boolean` | Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. | +| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | diff --git a/_docs/master/embedding/sdk/api/snippets/index.md b/_docs/master/embedding/sdk/api/snippets/index.md index 205f77f586..dd64abddbc 100644 --- a/_docs/master/embedding/sdk/api/snippets/index.md +++ b/_docs/master/embedding/sdk/api/snippets/index.md @@ -21,9 +21,9 @@ layout: new-docs | Name | Description | | :-------------------------------------------------------------- | :------------------ | | [CreateDashboardModal](./api/CreateDashboardModal) | Creates a dashboard | +| [useCreateDashboardApi](./api/useCreateDashboardApi) | Creates a dashboard | | [CreateDashboardModalProps](./api/CreateDashboardModalProps) | - | | [CreateDashboardValues](./api/CreateDashboardValues) | - | -| [useCreateDashboardApi](./api/useCreateDashboardApi) | Creates a dashboard | ## CreateQuestion @@ -37,62 +37,64 @@ layout: new-docs | Name | Description | | :-------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [EditableDashboard](./api/EditableDashboard) | A dashboard component with the features available in the `InteractiveDashboard` component, as well as the ability to add and update questions, layout, and content within your dashboard. | -| [EditableDashboardProps](./api/EditableDashboardProps) | - | | [InteractiveDashboard](./api/InteractiveDashboard) | A dashboard component with drill downs, click behaviors, and the ability to view and click into questions. | -| [InteractiveDashboardProps](./api/InteractiveDashboardProps) | - | | [StaticDashboard](./api/StaticDashboard) | A lightweight dashboard component. | +| [EditableDashboardProps](./api/EditableDashboardProps) | - | +| [InteractiveDashboardProps](./api/InteractiveDashboardProps) | - | | [StaticDashboardProps](./api/StaticDashboardProps) | - | ## InteractiveQuestion -| Name | Description | -| :------------------------------------------------------------------------------------------------------------ | :------------------------------------------------ | -| [DrillThroughQuestionProps](./api/DrillThroughQuestionProps) | Props for the drill-through question | -| [InteractiveQuestion](./api/InteractiveQuestion) | A component that renders an interactive question. | -| [InteractiveQuestionBackButtonProps](./api/InteractiveQuestionBackButtonProps) | - | -| [InteractiveQuestionBreakoutDropdownProps](./api/InteractiveQuestionBreakoutDropdownProps) | - | -| [InteractiveQuestionChartTypeDropdownProps](./api/InteractiveQuestionChartTypeDropdownProps) | - | -| [InteractiveQuestionChartTypeSelectorProps](./api/InteractiveQuestionChartTypeSelectorProps) | - | -| [InteractiveQuestionDownloadWidgetDropdownProps](./api/InteractiveQuestionDownloadWidgetDropdownProps) | - | -| [InteractiveQuestionDownloadWidgetProps](./api/InteractiveQuestionDownloadWidgetProps) | - | -| [InteractiveQuestionEditorButtonProps](./api/InteractiveQuestionEditorButtonProps) | - | -| [InteractiveQuestionEditorProps](./api/InteractiveQuestionEditorProps) | - | -| [InteractiveQuestionFilterDropdownProps](./api/InteractiveQuestionFilterDropdownProps) | - | -| [InteractiveQuestionFilterProps](./api/InteractiveQuestionFilterProps) | - | -| [InteractiveQuestionProps](./api/InteractiveQuestionProps) | - | -| [InteractiveQuestionQuestionSettingsDropdownProps](./api/InteractiveQuestionQuestionSettingsDropdownProps) | - | -| [InteractiveQuestionQuestionSettingsProps](./api/InteractiveQuestionQuestionSettingsProps) | - | -| [InteractiveQuestionQuestionVisualizationProps](./api/InteractiveQuestionQuestionVisualizationProps) | - | -| [InteractiveQuestionResetButtonProps](./api/InteractiveQuestionResetButtonProps) | - | -| [InteractiveQuestionSaveButtonProps](./api/InteractiveQuestionSaveButtonProps) | - | -| [InteractiveQuestionSaveQuestionFormProps](./api/InteractiveQuestionSaveQuestionFormProps) | - | -| [InteractiveQuestionSummarizeDropdownProps](./api/InteractiveQuestionSummarizeDropdownProps) | - | -| [InteractiveQuestionTitleProps](./api/InteractiveQuestionTitleProps) | - | +| Name | Description | +| :------------------------------------------------------------------------------------------------------------ | :----------------------------------- | +| [DrillThroughQuestionProps](./api/DrillThroughQuestionProps) | Props for the drill-through question | +| [InteractiveQuestionEditorButtonProps](./api/InteractiveQuestionEditorButtonProps) | - | +| [InteractiveQuestionEditorProps](./api/InteractiveQuestionEditorProps) | - | +| [InteractiveQuestionProps](./api/InteractiveQuestionProps) | - | +| [InteractiveQuestionQuestionSettingsDropdownProps](./api/InteractiveQuestionQuestionSettingsDropdownProps) | - | +| [InteractiveQuestionQuestionVisualizationProps](./api/InteractiveQuestionQuestionVisualizationProps) | - | +| [InteractiveQuestionResetButtonProps](./api/InteractiveQuestionResetButtonProps) | - | +| [InteractiveQuestionSaveQuestionFormProps](./api/InteractiveQuestionSaveQuestionFormProps) | - | +| [InteractiveQuestionTitleProps](./api/InteractiveQuestionTitleProps) | - | +| [SdkQuestionProps](./api/SdkQuestionProps) | - | +| [InteractiveQuestionBackButtonProps](./api/InteractiveQuestionBackButtonProps) | - | +| [InteractiveQuestionBreakoutDropdownProps](./api/InteractiveQuestionBreakoutDropdownProps) | - | +| [InteractiveQuestionChartTypeDropdownProps](./api/InteractiveQuestionChartTypeDropdownProps) | - | +| [InteractiveQuestionChartTypeSelectorProps](./api/InteractiveQuestionChartTypeSelectorProps) | - | +| [InteractiveQuestionDownloadWidgetDropdownProps](./api/InteractiveQuestionDownloadWidgetDropdownProps) | - | +| [InteractiveQuestionDownloadWidgetProps](./api/InteractiveQuestionDownloadWidgetProps) | - | +| [InteractiveQuestionFilterDropdownProps](./api/InteractiveQuestionFilterDropdownProps) | - | +| [InteractiveQuestionFilterProps](./api/InteractiveQuestionFilterProps) | - | +| [InteractiveQuestionQuestionSettingsProps](./api/InteractiveQuestionQuestionSettingsProps) | - | +| [InteractiveQuestionSaveButtonProps](./api/InteractiveQuestionSaveButtonProps) | - | +| [InteractiveQuestionSummarizeDropdownProps](./api/InteractiveQuestionSummarizeDropdownProps) | - | ## MetabaseProvider | Name | Description | | :-------------------------------------------------------------------- | :------------------------------------------------------------ | | [defineMetabaseAuthConfig](./api/defineMetabaseAuthConfig) | Defines a Metabase auth config. | +| [MetabaseProvider](./api/MetabaseProvider) | A component that provides the Metabase SDK context and theme. | +| [MetabaseProviderProps](./api/MetabaseProviderProps) | - | | [MetabaseAuthConfig](./api/MetabaseAuthConfig) | - | | [MetabaseAuthConfigWithApiKey](./api/MetabaseAuthConfigWithApiKey) | - | | [MetabaseAuthConfigWithJwt](./api/MetabaseAuthConfigWithJwt) | - | | [MetabaseAuthConfigWithSaml](./api/MetabaseAuthConfigWithSaml) | - | -| [MetabaseProvider](./api/MetabaseProvider) | A component that provides the Metabase SDK context and theme. | -| [MetabaseProviderProps](./api/MetabaseProviderProps) | - | ## StaticQuestion -| Name | Description | -| :-------------------------------------------------- | :------------------------------------------ | -| [StaticQuestion](./api/StaticQuestion) | A component that renders a static question. | -| [StaticQuestionProps](./api/StaticQuestionProps) | - | +| Interface | Description | +| :-------------------------------------------------- | :---------- | +| [StaticQuestionProps](./api/StaticQuestionProps) | - | ## other | Name | Description | | :---------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [BaseInteractiveQuestionProps](./api/BaseInteractiveQuestionProps) | - | +| [BaseSdkQuestionProps](./api/BaseSdkQuestionProps) | - | +| [MetabaseColors](./api/MetabaseColors) | - | +| [MetabaseQuestion](./api/MetabaseQuestion) | - | +| [MetabaseTheme](./api/MetabaseTheme) | Theme configuration for embedded Metabase components. | | [ButtonProps](./api/ButtonProps) | - | | [ChartColor](./api/ChartColor) | - | | [CollectionBrowserListColumns](./api/CollectionBrowserListColumns) | - | @@ -109,7 +111,6 @@ layout: new-docs | [MetabaseClickActionPluginsConfig](./api/MetabaseClickActionPluginsConfig) | - | | [MetabaseCollection](./api/MetabaseCollection) | The Collection entity | | [MetabaseCollectionItem](./api/MetabaseCollectionItem) | The CollectionItem entity | -| [MetabaseColors](./api/MetabaseColors) | - | | [MetabaseComponentTheme](./api/MetabaseComponentTheme) | Theme options for customizing specific Metabase components and visualizations. | | [MetabaseDashboard](./api/MetabaseDashboard) | The Dashboard entity | | [MetabaseDashboardPluginsConfig](./api/MetabaseDashboardPluginsConfig) | - | @@ -118,8 +119,6 @@ layout: new-docs | [MetabaseFetchRequestTokenFn](./api/MetabaseFetchRequestTokenFn) | - | | [MetabaseFontFamily](./api/MetabaseFontFamily) | - | | [MetabasePluginsConfig](./api/MetabasePluginsConfig) | - | -| [MetabaseQuestion](./api/MetabaseQuestion) | - | -| [MetabaseTheme](./api/MetabaseTheme) | Theme configuration for embedded Metabase components. | | [MetabaseUser](./api/MetabaseUser) | The User entity | | [ParameterValues](./api/ParameterValues) | - | | [SdkCollectionId](./api/SdkCollectionId) | - | diff --git a/_docs/master/embedding/start.md b/_docs/master/embedding/start.md index a83528b80f..ea2a7ab88d 100644 --- a/_docs/master/embedding/start.md +++ b/_docs/master/embedding/start.md @@ -52,3 +52,7 @@ Admins can also create unsecured public links or embeds of questions and dashboa ## [Securing embedded Metabase](./securing-embeds) How to make sure the right people can see the right data in your embedded Metabase. + +## [Translating questions and dashboards](./translations) + +Upload a translation dictionary to translate questions and dashboards (only in static embeds). diff --git a/_docs/master/embedding/static-embedding.md b/_docs/master/embedding/static-embedding.md index a61ea8b85a..7b0d3d55c3 100644 --- a/_docs/master/embedding/static-embedding.md +++ b/_docs/master/embedding/static-embedding.md @@ -197,6 +197,10 @@ You can only use the **URL** option for [custom destinations](../dashboards/inte You can propagate filter values into the external URL, unless the filter is locked. +## Translating static embeds + +See [Translating embedded questions and dashboards](./translations). + ## Further reading - [Parameters for static embeds](./static-embedding-parameters). diff --git a/_docs/master/embedding/translations.md b/_docs/master/embedding/translations.md new file mode 100644 index 0000000000..5202bded97 --- /dev/null +++ b/_docs/master/embedding/translations.md @@ -0,0 +1,47 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: 'Translate embedded dashboards and questions' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/translations.md' +layout: new-docs +summary: 'Upload a translation dictionary to translate questions and dashboards into different languages. Only available for static embeds.' +--- + +# Translate embedded dashboards and questions + +> For now, translations are only available for [static embeds](./static-embedding), not Interactive embedding or the Embedded analytics SDK. + +You can upload a translation dictionary to translate strings both in Metabase content (like dashboard titles) and in the data itself (like column names and values). + +The dictionary must be a CSV with these columns: + +- Locale Code +- String +- Translation + +> Don't put any sensitive data in the dictionary, since anyone can see the dictionary—including viewers of public links. + +Uploading a new dictionary will replace the existing dictionary. + +To remove a translation dictionary, upload a blank dictionary. + +## Example translation dictionary + +Metabase uses these dictionaries to translate user-generated content, like dashboard names in [static embeds](./static-embedding). + +| Language | String | Translation | +| -------- | ----------- | ------------ | +| pt_BR | Examples | Exemplos | +| pt_BR | First tab | Primeira aba | +| pt_BR | Another tab | Outra aba | +| pt_BR | Title | Título | +| pt_BR | Vendor | Vendedor | + +[See a list of supported locales](../configuring-metabase/localization#supported-languages) + +## Further reading + +- [Static embedding](./static-embedding) diff --git a/_docs/master/permissions/impersonation.md b/_docs/master/permissions/impersonation.md index 034aef9963..0303d10667 100644 --- a/_docs/master/permissions/impersonation.md +++ b/_docs/master/permissions/impersonation.md @@ -13,7 +13,7 @@ layout: new-docs {% include plans-blockquote.html feature="Impersonation access" %} -> For now, impersonation access is only available for MySQL, PostgreSQL, Redshift, Snowflake, and SQL Server. If you want to switch database _connections_ based on who is logged in, check out [Database routing](./database-routing). +> For now, impersonation access is only available for ClickHouse, MySQL, PostgreSQL, Redshift, Snowflake, and SQL Server. If you want to switch database _connections_ based on who is logged in, check out [Database routing](./database-routing). > If you're using views in PostgresSQL, the row-level security policies on views will only work on Postgres versions 15 and higher. diff --git a/_docs/master/questions/images/02-widget.png b/_docs/master/questions/images/02-widget.png deleted file mode 100644 index 4ce9fda45507ff4731119bdea6d11ca77c1695ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95511 zcmb5WcUV(d*FLP{*apRdf>LA<5$Pf|p~MPGl`dUD=|u>dXWx{N-!drRAWaDK$kkZEpmeR)G9))1m~>$G^|BW zjk+>pMLA=Pb9uSrjU;s^x@`G<7k}YamKbic@Zf*FPI*=QD%Cr@nD$81CZv5a%#pP-^q!outjFZ! z_$ME0Hs4E$3g|=NM=zj$r*9wQ>VX`{gh%IBlxii!Xsx6_Da@%FW=b)injE7ZF{)br z(E)9=D-@P)m~#$g4Psn|`OL@nT5P~m>z5JOYC&b)1?-IBCWXXj^m5ammhBE8yEZ@t>@~%^^kDLbsBlUyZ7h1x( zJ?^+aoe%gTK-szKD~rGXUT*VVB z9Q%BU3g?{~!iR;bP(G+`U*K?_~AKV*y67ph(y z%8(;(^u*d8y2H&`sw(nZT70%GapTg7$Qt?Q)449TUS{bfS0ECEl(U&jr6rim)R%Pb zJ(2c6_U4m>J$MtnQh%|r-FZS3D!E87*y=2-K6+?_pkOWLmU(%UDnM(Y@lfijic`^B;Imi|4;&U6?5v(zWCz@RbF_w|w=in&MqOstas?Om-u0##{HmgD3*|zyq)D)zmV9Vtdnss4{*Qu*| z_%jEw6gyDrX0iK&+FDNbyIbFo@t~YBI7rFOW40fOzc_@&E+%|tdFFH&e91qx40C;8 zIL&^>e=_{z(~O=ciHe>HKi?(69CW)+%?N5uyPx9QyoDPWL zUQVua1lIdc<0Y@na-6B>-u3FL9Jh^iXQ#}wSB(@-IX1vU&>Jy|<*o9&# z^a+dsZ5^GPUUthM0j>3WusCaDTJZD?OKT1+BrX;XpRPNMmlQFs;tgi!l;VqtiPlqY z6)U31l2ARXEGC@V1iyUJR{Lq|2P$^&Tr{PfhJm+HpGE^p1Hn;9{o~o zLa5UX+M;)6!z9`ky~!f?x<|UJGI6)chm3W!Vo=dcyPMQfwo`8Nu@H%YWv!TACpwuUh!y7&9L@AX2WbR1Jf3zw}axIBAw59Ed8Wc@p9 z=s(r0rUIIgHa3I&12uKr`+>yU8K0_V`HJb7V$934S!w+jpPRYY71Rc5b~&f&e7kIB zU?7t#S@p<$ylDUoKbdaqsqP;yY*bS{F6X+j$^rFo7)$yXl#8jG&P|?l#^YV5jWEu7 zl`_Qx*+wQN8UjM<9c{+iXfaU;aw!=(MS{(4G)V%F1K(5 z;=OO(kdv#XFI^PfoQ$e!3GezwC88q!(32x?wX7ZOl4VmZ-;#Bl^noo}FW$#}5{+$> zzoe{Ula<9uHAonrHjI_|ZHoDI^PTcJx2s}MV@nPwW^q^?b+fVjvaEFrhv|bn z2~8A`Laa{T%Yf&fdC<`|vbb<*gX08oaW2BI+SU&3I97+fM$XSpci0$>NcbLt#)w~+ z&SjsoM01~A6Vzah4U23h!)`MNxyNeO*aWbM`q=(c&W~CVYN4ac_XzlFQ?6CONF0V4 zqX^xoV;IVH@ye211BouP!cou7=^eX-0r*G6#wu`b3!|Q0#aOVyQWgbJZq;1mrNpc4 zbK%{iNqZq`_^ZEXs7G`rC)zg8gSMrPswom1f88Gu-4`-gPF6C}Yv4&$j(GiRU~l^H z_>WJ!qu=jSHGszPT@~(~c%JRrMu+ku*9~qBxp8)rPHyjV*Cl4o%sy|C_?JK{umRUD zX_$yu4wy`xFjvr-o4n}v9U?BCEXxxY>i=Z&178Osy``ro(x>M!yA(16d4aXs9@pu4 zDls!UBfU0k>jPCdQ%v5$U`a#p!t!+>QcC5a*QYr(OcWI{k;{PqrTp#m26N#mlI0Yb zW5H~RSG>sQujQBQhY+hvg)4G{6}Od#aw62ou5*LcA|B)lWWAQEAt=wzjhwx%hm0M*_ik7%lDnjQsWH+|c(%EZd0&5jPwY z6O&?y>1nrf?!x_zJ(q9$KImv5Bh~ByDi9Zl}dl>WMTn6 zc5qv!cj*1f%z})QBJVE+m^|BQDNe4yVE2hhFQ5&7hsi#7G*e`51nju|V);sojGUak zq~Q@i1tVb=#aCfboXg*MYW@GWufc+VTG6W3&x^$Kyw1%B)=a&pg88^y^)D&1=E5WO z&Jdo(oGxNb@#2_r1M%)3=m(fS03CnfkDu6ZKj!>nB>)uO1H(}8%fDy6j{)~C{b#}c zdd%;?ukQPnzue5}eTck|9{&X-{r14=9!&jbF#bOt17Y&Oqq#UknXJEo=>G5bZzOfy zfR`^o`FGR)26^mzK5p+rAM;>a2g*p9PbILON&mRNf4A@DZ2vsD@31>!dX>Y8H1t-o zqqOd}Q_l6VO0#;M0HL6qO3hsjZGZ{06Nra)@UAyP!cczuq zcL*M%S@3^=zmrbd+h)5&7!#r@khdDGbbR4&Za&sh8`>Y*#R* zY;x&S)vGBy8(Joa_^sTQ1taXNDMG9ZgYDB?hSDu0y#DY?Gwt6JuXBUbSr98)ha8;Co@eD8}*PO}{1GUdrT6jCB(Zt5V5VC;Ju zI7N#z%h{1tZs|ygQjNO1_9g92f~C2ZelQ}${rAM0@|MP$cSKa{#hpa?GzEyF<$2Y1 z4LLG{Zj=eVqoy*!?PshCb41sJSoSseka2w-Yp@@m9qYd;AL_LUECj87T=LNTPC-t zyMsf^B)XV3v(H{|&TQZeCPy88go@a9`2A^Y#JYvb7X4%5$za(U#Fty>L&E&U{oUbt z4bVp0#EGfj+uT&qy_$s0ejVhEKCfuk>v}ypaC!1vr#$UQZOcl{IK90ZTdRMsL*{2{ z*(9Ywm_4H4Gv@4EBUK99#)xo9Btk8}y3y%d&wO3%qDLmSR;xV2O`T?^^Wb{lGJ#6f zD4|oN)QvhWJuH>Bd14&S;}H*6GN>n_G)D&|XUE+RakZlQ4*G4=zaD1esAyfT-A%%N zWsQ#%8}qBE;U(o(YBnaSCs$uO>3gJL6l&S-o2!nVqKao(Wb;wwxjBCt`kuP!o{sUH z{LySkk?B#D=`i}t?6hmM89hRnej`F@$%3ca?{45;DXNV`v&$oB9kqvad};P$o*F|^ zs{wB18%>D9tdoXn8U&C#`=YhRY*$d>@TH1%GY@*e>l&d6Ry<`ou0s8fjx=KG8(N|@ z$0DDP)ajz_<>FK-zcKJOx|CED6$ zk)4yE65(j(s%Bu3zuCw1SH`aUj*@+Zx?t_Do!yO(cFaZ&6_K0P4mCPlWAT|nV9Q=G z5X(aqR&sETK0~rn)eqQ3V?528H+VwUefv05u}N4eKO&?TQo3Os>ZLeIvI*8nc*#8( z_kmgYmk7(a`0s_)*Z^zlRZ+o(_D5!=UmwSg14S1o>!cd&Pu(JBiom0zZJU>@&`4KL z#zTIqDcGoyv>)l^0smJr{Y5D<`>=`fh(}k7J56brnh%ZK&EYP=eSZF)j-}9j{#)+=F*F zwiW7yWG6l^C@zf@VeEkjY|GmH^cB=HBFeTrC2b=e<{&*!N0_!T8{W~foC(C8`gXQ1 zegua{Fvs7KP#BVmG<-xQuCe)b3$>dyH}M_!d~cv>VyScD(nX1M%b3>+>2+7D1q*DR zOZU>2vR8xqvGH5FbA}NE20BBlSFVat^cC(QQhKL+ym1gSnmxzh{P2xJUTgh&#L0zS zS>j<5`xC3Wr7_b}EhCTUAAOD=Rb@~6JS}U@O_I7);5Z*3J@udfkRCe}A}I zse6JcR87{l!HEHZ{Vf+hc!VH~DO`C_j!Y14Y$QJ8V4g5eR5f{&QmDjGojqG}|NHzR zpLKxt@2V>8Z3mSyZ(wXh1>C+%h#C((dyp%61s9})&=*=ECw-Uem7l(5Ct0s|@tuJR z`a2{3?&aGx?Fs~vE2IbV=s5Gd^R%tCd$msQ?B06jc0m>Ohnj*zaBpn0u;ISnbm-&+ z$Lwg#Vq5|IbxE6%#h=NcCBmIKk-Jtd*dw8IT>o3$i`Dr_PAPVc>amd`nvr>{Vj}iw zjk}QBah_+6zFX!FQHWa3#h%pw(c@WE;B(X~(8fm#tUTnmXcHSkVgyl|kMRqK$Em3p zH3!`*Ri{iYvWjl%6MCdv?S?N+BTLzO6GZZ`u{-7AR!Sf$+$Y&s-ISF> z>NnQej2oG@BF&Ws+sstpwQ}QAd57h zbZiW_>k)Dr2s=!K+08Gde*%tTP3=B${;{$}8P@HhkKdjaB01~|2RAq> zrzmtl6$Ro%pI^6JMQNxD<>;ol%&E3X| zk%xWCW=P{ZvB;oFqKOyn0 z_z^rb)E%5Xk|=$?^c&^Mg!AnY(%IRpWWU6j!79sTpj`sl*b1uI!y1MNZ|A}sktFN@ zXNpcQax7Zuv2rr#~UskI!r<=vT0;A&hh+4uMovXBp!= z#alCDJa+bmxSbVgHul4Z?YadORn=e&e3-1&3kJ8GXY2XE$vuG!*qrZDs_JK0(^o zhmjWqqGKX)d}BPdf|*OX@YERvyQJ!z@|was6+?3a^))2+VAq=oM_fogK~LJQFte&g z`%MINearL2cDPYQ=_K~RcCPZPM?=OQ&EFCWF=UOe5;pM_Ote$=5}2Fg@S-QGmLil# z`U}5Q0eh;aZ0q%U!g{VximtDn^6Z0jMY+H4W~euo5=R^{IT0Sin>r)n3PTH*d)>?* zeb;p|$p6ixPh#Cuc3CGa`Bs#4LcAL~D)g=RoRVN$vjDAQ>y_s5E3kZ??X0r#M9tlx zB&^2F%^+R*?!mLV8wP}u6a8ar1Cb`;L9M4!KMhRl6YNfq-sN5B4U)F4%wy@M;onS- zDPP=Kcol+uqIh?CSiJyrQL~-eV5VBIp$q!) z4+)Rope*cbHjcDNB{N`aH5k*e`c#$&6w9m8r&|27DzPoU$^OzJZ26VNP$y+7rBws% zX#Xt1xxH~EAM-%g_6AHQ9vF)jA-6>8@tIC*mi#viF^+embvF&Q{b8|=Bcb8Cm~-3x zcxT@Vxgf8&-Q9?=5yIQG#MRv&b1r=JQ#a%m$dLSYiyVsBwb62>Jv6?IYsy@HG;Unr zTRku1Tuqx|Nd6#H*445lnxbE^G~D~#dfRm96-d_eI0h@kRxHkU?1Xy}%P6-6omrek z#7B#<1I*8#SUpuio=3sxjFAq5n3Y^IRB_Q~cbGX7wZ#pPi(zHfEMkGT5Au!EH!<2W zS#aXxajr8DoDWWUU-mLAC-zvPn%yprK0trt0_Lqk;;o5~2>C+1Wvqbw)?1q@={9!O3#c6n!_ir9BJYgAp>{cw5|yccy? zIR;d@vddEhp1%wUC3x5HdRz0FKYhuFz`g`-C(QTpE;*yxd*?et{tXFm1ooTJV!+EuB6o&^FBvars2HjGLJuSnl%pHW z@!$6<6olQdAL}RE(GCKODc$ym*=w!}!I0}UmT0E4;i;8lO_moa>4Lg6F9hgTM5-4@ zf6)Cnc>lIijZ1gLhamL=xDS=IQ%x_Mt2@gW2SbGDv6Usf@B1xOY0YDSy+dHE$z1=NeJ`AmMtB;1 zbCul4Iwt~(inL)r7HAbQU!Y2ml2@G~>~k{0@l)%>Q`_;Uw(|1t)(i-O?go--Wo7&c zP92I@+9%ctPi?asKl3Meytm1YR>(JKRH;oh%JKVfVD1e)ke!wqmT$Jb61|wQ(x^y`gdgCd>4HXe( zs#t7Uvz8z*AMFkKr*Tz*@6;G-1Dd6J@%{xmW156_pan`J&1n#bzxgJ3U$u~x=*@`7awT-)i!rzpu= z1bSX`t$Qm!Ti?#^?$joI$Mrt)3`a(*v4Otty7TOeu_b+{^n}7FEG*PO3 zr595F%y9=2{tYD3@`YGyyT$kA%&f7=nC6aGGnQzv>*B0yvI65vrF)P`5^sst+Q>IH zNlV2z6w(Izl6LI7kN4)8Sr)-tQx6`wSB(E2%Ess$4eOt-&5f>Y)mKKSHTh+Uy&RRD zSnHnfMBaJn6~zI9+CnCY?7va$3(yiV9}n+=XcVkc|LylhQc*~WrH$S3oY3C75r zP2Un2OFhVJX>9@RVtd6G;;Rcc(Z$=Gp2zVzC*_ZX#tYK7kPedSMqRBU)t++IhX@6) zIb@y0BvyKPbrts{ObNcL-ysN=&*nM;Yq|2f;4S&ZF8tyfskJ-`vib^ayM#=Dh5AH6 zGd`s@tWabV5FuVRB3$L4G?8n{Y2g}Ez>DiS-fMP?)YIk>*`R+EdIZ`u`5!yB8^ z{EeysjE&ThY|6n&xe7jkom5zv%9x`JU)5Jo3lJ|>l($L>=Ud@`_eRCa7j}Xy6l;(T zFCqo|FkhlTy0>%T^NU&BPSss`69o#gQk(ijR2^}H&PANL9!#ir62v|zh#_!Iv&}i{ z-cGrLeih|v9el6aa%pR9O=}O%S3(t$5!q!Ll2G|R12IHMqR6qFS)`-G!s-bAeqTR3 z`n(~*|5}Ij8JFeo&~UzsZ(3@UE5-RYG%{u3O9q3zkud>`tL$p78;bFkd2Srq6+D0%D)l z?k89v)QX`GLg6}lYDM2m&DKx1(kjd=i4{gdtue_L#a+Sp>gVREKV#3flaWie0FeFSIo8Ox&3W8oU=mQO!6@Gh*sC z&BXGNKU6_OI@1%3du*RKm)DSrmt{V9y)wq?Il2Hm-lg^hPmu8|KWU#WK*~)Hw0uZ# zAJORz{lhuGp(Qv$f(&l#rD1gIYqkeUmTy*T$SQU)kk-CbMq* zUeN@@EIRfH^yqSWYhKI6#>F{Hqm+GqH#6qs4O}rMsHmxV=Y!e`Q=j*wJAj&rX`T91 zV{CQ-e6Y&n6?=y%ThV7n3sCk<=0t_efj*HEfJoH>(E0SrFO7Us^di{&mOI18+omGm)r_{J zS?X-6?^<5=ZyDn{rJI31^v=g~@PM&$6x4fnBEFKjLp1<#h|!b@Kw()?Q7wzrQ$eWO zv+HD2Mlbr*=%GeO7X&FaJmwX5TKH{s@(V)x5kEzMa#0nlRzPVc9k+dVihMV|3M7R$ zOIDeGg*M`ydDCYStIur>%|uM*pSo1bCy9Sv8U2uO;v`!_gT-NEuM&{j6taObotzub z{4*b_7yO07$%dm(jspdxJADtQ)2zws)hr@o{%y@d@o{mJB8P7u(|@aAspA64sluMA zeOSIweXYIrcnvML*pT3?e(aVdcnq=hu4G#6KFV1J7=7zQ!aT%F)$u}1 z41rk}TP>>83^b1RrF2cLstEncsA0uxNeS+E-wRca{@!;RdoQ3^iJEQJjszLCVs%PmYV2ca6i>f{j zqzb}@Bf5K8NrjsxFcN#aKU{f}raYtVsy|aT)}cx8H)>`Ni)Q!lWaP78nQJieO!mY$ z_=P#|K3A;Ou zFA1K_9;c%}+DJtD&f#ipIXgp}IWz8ya}rT#8e!&8DPr}S)C~xPZ`Xj{;iu)62`UPy ztOeQdEtfko8>Z_%dl_Yj5w>w^>GjUfs*@&`{z(6^=9P^Sp?aic{4Jc26%-}r*icDyX$%m&N z7udKxmB@<;Q^f8z^6^GRz(DRGyz!c1AJ*?<_4M6^)9ze%^V#bR6Ay#WJv`=pHF4ek z_)+`xbp8)HS!LvE_XXG04&O^r`6qh1Wv-36EGj*+H&!-R#uaa(IHlUE>z54($7=1N zPP|tZk&~?qxXaU&xtQ9JX7yk?4RT$apCb&Uvgf0F#KjRHqX^^W4LBq~z6q+7l;EuX zKQamWdJghbpxe)6PO%}dW*`@DI{D7dO1;N2z=kmVsUL|FX_*bh`hWk$i!|9z^M7~MZX3C+|Gu`(cMAj%x$t2eVbM?BJXyjBAq$d>xesbDujG~ ztf7vuwDAkqYp)6g%ku~bJ$F4KuUatk;hK~Z@b#JrJvm8*ch(p*<>hb%M~*@y9Mi)I8i9c^hdTIQZ#mHF!G2SLeR-&@=Z z3F3-`=>b|o{MnB2c27}xB0E*vPN~)b$_1957Q0sDQuFE)Y5Y81kUgiJE77^Vdn>q+ z&9D;G#|_ZjHzan{EznN3uN8ENnZKsZigT-RBGf=1WP=%-PLy{TwZs4(%wsve_mgu!8oXUbPos5Qdc}4cpF6M{EUQ2X1FSoAlIHi3a*Wx=*A=x_z zPjpwY&&5G=@P~&%qRlV8GqEgO}GW3Fy0CBh9!@z_`av2Yjhv!S1?ej5d)!ujV7Uaq~W%Wj{tp7-a0yOM5 zSvw}DW77LOTBv>ExqM(pxH3A-{|Yk7{1%*(TS2}x%;FaaDnI!>Yat96ax_+6@fg=M zg9J1uvsHf$5%O4Ezs~V4)yS}G$e)8IBB$;?ffUZ2EGlmatg{<|?>@Wr=0YUOPsVVxc2!AO#8F@_AmQPu0c;MylALf7)r!KUDxnc{M9+pctU1J?m9Ol|F^{nsXO~wH`EFy=Qz3AJkErDIWB)!9+JIeLm28RB!H_91&HJpi&<& zR&V+v+qQ#UXZy2B1@&&JgI3@S@>}4j{91GJDKv(sU`@d(kK-Ad+j}@Xdd;TID%wE@ z8?>xJ_&m&XoDWI8rxOvuxyFfjC%HPl91n6BP}<3U$ArH~aOK1lf%5vI8*TpH!BpYw zv^>MLC9>SR7)ObqVC7S)yI&?k^D=mOsa2t;Z`Y`$6!TZ2N*@y1+8IO*t4a^CF1&Ez z^W=Q1aKfI$V3~YlKFWyj`tFqn$_fg>l?QitO~miZwk3?-T504}pd~YV{;2yt-?NIe z56G2Nv@BPX{gt%M@t$|NEVsb-(WVj2+U;|R_Z?6#VA>LW|n#NC%=(CD|~{I`q7GbLcGGo?wf1T+o`C z^~zt!{e$4GL-+jyN)TwUfM27_G@&pR-6*{KW>=Ypb7J}6y-0!xE>|9+HIND@+A2>`Tu7^(qhS>dskZ?`v5v}Z5*}=H? z8w;i|GMU6V6D+mYFZW_XU|T?e?+z>=M;GtaK>)z`izx8LSqf^K-U`T!#b>)lvvg`2 z)>pBs7Xi7iC8smh;vBXA+w^p5x}n}u_7>2@PrQ6BS|xHP)K?7%zZ!c@o4@kugETm; z0O(ohs397=ac7FYK^xYe1qDJnBE-eQ{Q)QqgIb<^OdM=c?j3EZf6RTf5{c7ys%vOa z!JOiK9VRmPXQg1Tn*wMHKj{VIfl^Qx$d|at=-4WIoW?RaZrjifU&}BEpUvLp(gQHy zk>*O7zP`mHLCFFE#uG&DUiSnLQo+77r#{AM-UJqt|(1D|n(wR*2 zv2&e_+co$|q8c3(@O$mIw(b-~|6%JHP_lV`_*vNux+UFhSpMy**uN7)Dii zP6Ip&!0(obxAi=DR|JV&E#`C9xXv0&Hr#{ub~^UvSOLRlSDEaRWHkrX$h;u1PLGmN z;$pd+08F2Y!J;Kq*Y5>Xt|DNpsl&1)PIbOz}Hb4kG&t7}r0j zCGMe=_t#kp?lqZ`hkcvjpPtwmUHU}$p%Xungjs9tg|tBK9Io%pE{)bD^wiqw^+{4* zfUbjseJy62EJxtw&4~7Di#L>@q=TB`1#-i2u4!dANKP7{ejMCndby_)dz6s_h>#7d zN`y(l?)z}9Nyug|$pCqCy7)wI-kg3tNMZ*nLFmkaz!ni$?62>|l0JVb424<_Kh?;W zkdyN!ZXcrdvAHESOMy-iNHiDvrOG{H|OJiS>CWQ} zy%5lw2#aBf>S=0KTs3d}g?w$ps|HFau>T{t9j&D$rezZ}HPb3}86Us9wz8Y_VeKY>dEX*0ZnmcKKkY)0{3G|$h_8s#^(7lT) zgRl6U*q?24KtPASom}yIw*Rp@ZSk0IN;+sU(?-Dd5-6Y*A#nqqp_7ZUK_f*Zlnp~- zIrezKeNA1#3@q$eu!=l^xx)zuU_7q7YaDio@CSN2ga5h&a?XzudI zc){T3lVe*M*XG`WkD#@#Y_B$IEcZLYg5*GZaTvc1`r(zkPey}*X}#xm6AR?Gm@YM& z1jX>5Y$QPI1{^1S4kxHFY{%)Y{(Zn5Ca`VGPQ1ZI6z_m{*QYtUF4k`I5K&GM`0{q% z>QTS}+%TPvqUFOG6EQsQ#&SetI`0EktK%X`o`0d&LqlXMU;IJvPV zup~DxJvheobYDo{uEeM1-P>cu|3|N|xVG<0cPlLVy_epFh6De15yAtS)iI59^2VL7 zZV8N}#=1O!ruWQxfW&^rn7#xsOC-Yo0!mLCA}6=ttj;d$vqD1>QJg-5G1SS@3ruIC z_!r{E(`M>oJ)cFbCD6vJu;IxIY_h%*+dvCib^zF(c%br@cv+6oPmCw!A$u43Jh$)G z)NJXHM%Ni`z^VGToT!&$6A~`_xgEZg4b(=n4GD{{yW{pcXrDzL(qggiVn;rA7IezVR6m zBTC>0_gnuar@fGPL;$SfY4zLjv;_?1>}_4WI)<3-%U4Z)Y>oiR+J6XEk5BeN0A-uP zoAf~9hzasISB}8s8)cs}Od?j>i@>^nvKWBLe>y@!bx9U)KbT#9E&u=XAbUi69_F3< zy^J?3rnj4H0{%}@VF=O7R^)hmP88gq*|C=y5*C`W8M|wUDNWg({T0-3mHEUc0 zVs7|2{fnGfj0ibxD4M;kEuPizMfp0{QyxW(3ZH3dUEqaUFeLEKdm9$O!sRYQ6^|+P zi7NV?F5*v)i{Un@*^K(9G{)mI;U23Y#u{=h>i0u=S9M$r+=Z^b&PDmN@Zi^+e+86e z>%M=E=p}#%`O)R5B>~mUiqJN^-#sLhN3OJ^#^os{7=%j3z}QC8?Z?yxXlj;1iM?C zY3>{C-`g@ESL3Tn+SxT^&qn61U~(A`2p(FVpop`wa%zvc49}fSaYA^P}XblKW+q1lV)+9Lp`O>gbO~UoB7x$ld5s|mo zSKnuD?p^qgA?)A%n+3Xm`X6)JKl}R&{&@=Kw}1T2`P@7Gn-sc#^S{RZDa*aBHv7ka zM7w|Xx8U|qi75O7>nf_r=nv50Y=065_KSQWT;6#R9BcpRc!Q8@;K-b_`ceR7KV1f8d(;-W`2OzraxJ@qMl|CxX$K zF%y0><<8%8!?xtXm4@2IPkzMy@kJl^lN$T;@uUe42)OFS!6AQ>_b-WpFV6y3lO&$J z1ort;H}*ogXhn?F-FC2uO@gkxiAhXIZDmVH0FtXgGP??C!ZgJ%1NpFXsYY2_QQV zW@}P~0SiVQa-yK(_hw(yD?5rH%hG|E{eB*Pt&)5upt09X9aaRb>VZoqj}m$y-`{KB7`9M z=3t%&WANt`INSSFj(pD%u~atl0=xH0Hf_1$auyb8IJ`4{KmUEn&bV=G%NtRgGV*_$ z%H`zl#kX}W$!0fd`{I)}htB^&V!FiMUOHr4qu7E_)0Y1yrGQO zs*Ans_dTz&*I{M%GLgQ|iQYL)TQ7?BJ z+9+*v{(If{x774|ateQ{^IoqXs16{&g0(}$g#duvY{$kb`N+-{e;ZV%m_y=omHYny zYY*f~*uCF%Dpt=OtrdmiTX>;n{-?9sON79i_e?bR2UHPe<8>iA>_Z&cS-puttBZl` z*KjH{Na)E?kHJ;VAt$7=0ld_K2M0OsW+}YFz23Ky4cI{c^$}rFnuKGe2qClc%LS|U zBUP@;_B!_6?>CaNvdP|pFr`?=C?{0)>mE6Yv-6q?AF-emJhorRE2PY zNx+j0#_C7&hf;rf((*tJzm&%(KV`Hs#Eeuhc z(?(gii=AvRZ*@TnMKza^fib2uex6;|H{Ej}MV762gmS6X%=$fPxtqk^EBR(iGtYVY zRZ4}~qqfqndU^5xWqG1O17cLNB;fp;xbpTyC*QYQ4d2yR?(Zn|q@As5$LkZk@@xrr zjRl#x9gjTK*vq)~y!T3bA7qHT3UFdCD=U064MwSU+I!~4I`-p(b`Ns|kfIs_7dFLA zn898FT})VCZRU9?zxIXcuLJ`mH9ym#_m1>wF*vDybr&5zQWM(TTqkeM-8kvF19@xq z%B;Lz^n?H_^Qmd_v0#|3{c#*hX`X?PJ;WoAWuufg+tMBfaTK4DFjh!PvK(&wq>FyQ zdNnA>kTB$bid@2JU+dW~IF`y*D)>1unEr3cmk{JkWrI$;M5CT}lNwDju?8|%MQX#vGChthN0AekcSUiGiNR{< z^_>g?AUAP-Ux#(;x)_{@KHe*=s!A6VU&LmMVR6CszmeYYaUwovXbZe6b*R2zlmoiP z;vo&z-Y2SJyG6(*xG-c*@TSewS&yikD|(?#Qc)#ALZ1`8JzBjCM_H53$j~u%?$6tl z_FWk+7k)yac=Y=2z0oTbypHo&P2jm?y^Ro^Slj$Xmv#kD642zugsAk4)p^KY++ zN^?)1{Ew=SfjTi?uJXXOpbsOxthV;$i2mtl7KL-6ZF+1gmzqei)Ru( zEcVH~Sq>##^YgUXXw2|#b+?UlEQMy&c>}~*sfeNoX5C2CdYK7Njo-KVP+`W}O$%Y(2)!qC-$orNbp`A0J1kX_nrqKo>E#2D~=GPe7T+ z;)kS#OCN#-%4Ql?^`5miI6B{wb+2*CGe<%<#h&s5E(EAkh!AqHS3ZdMlaU_KCOTHu3nBowxRtK3tw-4M+LukLBR zzafjj-sZOCot4gaP-dBOB)4AdHjI*jpdEI?V*dmbL{zCB;VH)3)Ki)_U8l6&tIq^f zj$KtQ1$7E%V zDPT6PT)cQai-@9PuvR(?aMO&5!Sz@L!en|6rr$02ym#rFIDl3P7Mhwu9slFSEf;zr zfG|zfer)(%V$1+7mM1+JcP4{yW=Vrk!q|qk5Sq$!Dm*&jwCs=Bs?a8)di4m$I+XnI z2TP4X)B|x&mmtGcy*5!e{L!?Rr)A*e14t)=x%dvm{Y?+#rOyv`&lJH~++BPVfCZ88 zfc;X=KDHA>s5!SAErhRI*mX`Vi>KL22O-nxj9!Hs6pNjA7%b>D=g;0q=xnp~@ zNt!p#a_G{4D!Q0RM4hWYVp<;ZQynXn(dG3c^;tp{9c=t2E+swdIau?u8^I?&jGl92 zxgxHMng8J$1Z8&^9o$Fdpx}9xgkpodqI=2S;o0tOVodD)28bkp{Wqd90?Zw`G&Ok! zkTHt0;75}(pYa`if{R!T$f_8)WyX0n=Oow*0mw`m=#`sJR224>*uFmPD?5O!RLwXS z*WR5<-VEESyswZ$@yuZ0h7lm*s9DV&n=H73io>$~!y@d?1i$oTpcr2zV9evQy3AS> zV_c^rvQK7ni?}A6H=WUtrMSJGG0cR!-a{zXUW)4of0PG9U_+V~Ju43JPZS)fbwPIz zIu344SPxzruzwVNM{!SQ{zC9rDNs4~9PI9L+^9ShcZT3pUq32GVlT)d7UkxH?9^8x z8Fj6gH@ndd9RZ9f^c42u(hcg>Y}zBQf|jz-j^;8*u0XA|*Wi#Sd%5bUhv?@S5<8um z3C9dFjqD&vsGQhJpI17k8AzTDTG@)O^0D!C(b^I>_ENjQCIKLQCh((NZ@vRZ)?xE? zF%G(FR0YOK%B&YJ*Mrj1ubU#&8VplpHyswk2#j@ltg@jh&&y&a3Aa6JrOlWkOl&v` z4Ab}bdYmF?(oS4u`Gtu6;(_-R@E2?(_( z#n#8!Ok)vPJJF94L%eD6>2xYVZShC^r5qfT00fNLDGGIb59XLdEb4JJWIG>om7+mt z3TfP645`BFVAF_w&(UykHIjLMJIcqG$UeqKH9}y=LM4uxdAz>UQ5w^QNP6>%PlB5@ zv^p8!#6O)7NFH1HYpoY4*Zt13q?vvPtwA36&4f!+&()imqO?JO^^-8Jj^-pu0F2cH z>iV>m5jmO2K4CIC+>_`(c?NL%9}<4G+z|1F-}%=%GB4$-(0vkGR$(oq$lL{}qJPdR zW#u7J^e}IMQ~n~qgM@Dbl%Q=kHp~w>w1?pKQO8f40DY2fgxX`xF+ll$Q{vMRZzE3b z5R;T%OdtTjGvSG5WoM3C&IbeF!Haqp!)p%wt!n{Y9@vx1Lw)A{OOZTaJaZNQD za{qJWDg-wAxoT}EPkSwL#6mu*znsr*M%)beizrKj)?6{r*g04FAyo(Ss2zb_Z*rJx z0*xOF*d*t}5bLf10ONK;KEyY>$R$&o{v^VyzLTvR98Cv4bPBCSlpy&ib z{n%S2FWTzhAV(tX90OPnZ}6-Jst6SudhJz+9`Gk0336~6j?Bp+qU1E>C~0ofrETjE zdf`s8Nil#71#R?;I9?52xzg;Fk^z?b&uRzAP;zr4^4`?4YOG1M%r+PSHkWpe7dKdP zDK{&RB&cP&*!}qkH@g~t4mDq~bioGD?gk!?+F*!^0DCr~S2Q2&FB6!(7yqlyT(%z~ zPwD|h??=;xqo?;*4s6|Wm77z`zewUh%ar%m^^`cYMQPjjpIyW=tvF_2!xf;G8J$3$ zuiKyOfhDk2{$PqBL{BkyNOao2K-|6hSM1Dl)w|30;kDkB@6btKg|@{>UHDCx4(Gl7 zG(SZrh)&O-x3u&6?s9C7RK5UAf0IVA14-6t#>C-P8qQG6S*flPlw(g-Ze}JGzPhvb zUo?BofKxKuRiJW~aDR4$Js+@ZOq6#+e*AiM1FbSIb2??@+zgpt(aiHu#8w$>*GAC? zLIP@i}%ItH<&fHYYN?LEG#+GtQj@2|Dr@A|iFi z*ZL~m7W~vkw>q{CnFT$k% zm`qYFSz>e~0gGWY*1KKmjfd^{)~{d19X2d6U#&*rvqU%2FS|RffB4UeM+^{`1&3ae z<)g64%$K6BDkv4h#Rvaj+em;I6T6xgpYvp}?0%l`zd$97{V`a>m2hrf1|XE~Ww*DR z^m5=P)%n$IXLBgmWeYRh!lW#7lEMD_1;E7Eaxnfv_mS!8>?I&n0FC9sQa7ifGXsAj zZ_PQ=7~LM2y8ANO)WTvS)uM({+1He*0d*X5j8|to5lq4CzXs&9d)Y8({}`a*B3FbV z)t^%57f6)Kj6!|Q6sFxPy^GJ6ckS>v2;gaT1$0tObvmTdbE@c|-8QFf2Z$P?-9OrP zY2Q0&4lwt{DHoeyA!Du9_vo5^IOd6NV7Jw$0N?6-0S9O4 zVNS-m*PE`x*WGq2cM}TZUgr0eA9AfCF_BQ~`JKv+!4V z6g1|&^cxwsuYe#+-m5np;}S^5BAH{r&Or028Hp9ioWf-CH`8XZopx;7^iiGjA~L_7 zWd%hlG+hiLhta)cA>QvmPUJHOV74R3OKUlqTP}BfGF`iHdSY2NzITle5i&CKPFm|q z4fCNo`QZ~y%%-OOA8zzW2?ys2b!84-jUvh1kdHg^v~b6A=hj$;z9${kK)4^_4tT5A z5Mol~`fZ@Bo44(_NYAp!y+hCv%|oeka|9uoe=qj`N85WwMU`&d!fzkDwN;c>6ePDI zAd)0QkyI2U=bR*G5Q-uPLmL1A$+18sXUQ1@IaNu{nWD%@&TvBW`G6n_L?rL4Tu$xnnF!-ejMB@Z<4TE3n=7m(R4i@p@GFl@}?F6IznjT<$zZ55W zLMBE~TA+u@ehVC%LYviU1z|Z|n*U=mM56+1A5I!*d>MMv`z^K8J_OZTQSV!+NLnH? zw)mNhG(U$cc-=YhxBciF;zgaQbN;h?Y`J@bw30?{bHQ^|CP=!*fOL|xBulDp8}bLS z)(dSDlQ6b!p{~tTu`7Dx4cpaxLph z#k&bXkWv_Kua34u(%5d%fzdsu-}y_BZxocsNejC}B8hUl1NI~S>#_(`fI-Wp3uq_4 z>%7;mrR8`VvsQklnCFq|dX?~BE*xJvjwz}nb3J~|pQNC=DAJ?E z1yzJRdp|Vx>uF6mRBJ5*eXymJ7k3{eH;v|>j-R=kIkXStzzUyiaq*!k-xo32Wrs|)t`@mva-*=8HqO#G? z6Yp+Z+kBp5ezwRl!u>8Pq;)Eow_T%;k+sp^;*SxA;S3djnbT?E(UCjtNj(C|_T>dZ z9F<-5=gsipUd3#q-XE#+`l6wOHanzae#qW}3H zH3xL{_7MbMAP(rXrOB0C*oDqOBFy!t`)wqldjREP)g&+w?bH zUo%0j3u+KJkk7}LEjX5b9Q>ui)ox10YT#dN-@K>^LwX#hkH2*XP}zr;=dW6Qz-)_8 zpKASF&I!0?_wYQx@A5enRh8@#ERw`IVK1X(&!or{uL)j{j_eHe(EiaPHP1%_#dt?Af505)jlw_NbxTg!g${MJmym4@rGy|VYF zhLOq0+wN)2$s6Zp>SEGQlTo4-6qN1D4I-tV>id{ctkcH7GRE4&)7gVjje+lS;! z{l-PMLr6XA?fP>s-Q7-Yj~&g~hnHas)9fh;fNNHLp2Ix~;DP)8aQ7UMzwI!}smNI% z7^1mHWg?z2+d1ic*246K_gHO&sf>?CtEP*li$K5%gr#qLzT@j{s1Kbh<|i!=xkgC# zG99aTawqO=Ci)HT?cv)#oxO_dS_=Pw4ljy>T?EV_l=?ffpQ$5wJgM}Kzt0Y$hNFUe zCW{?qf52};``DeRj3FT+d7Uq$oP>}Tblr9%L35zd+7f9yE`|{T;-k8(#+j7nthV!x zPIKWOvO(xwncuVc$o|UrQ~yW#_2^2F4c=fBU8OPn;t%k>G$qFHR zZ*Q^|Oxf5M8`Qk7=$eUs!)wAJSg|y))lxOXeR4SeI|f6DtFHd_#;zEX#@=-@TRu{L zZ{duqG1PLfzYtbNsUAYabal`{_8kKOJ{kr1DB8+#<$n@BGq7U)Exwi6X$INVX2CrD z7I*n*kVnBVd?z6k&+DBXF8tWSE-%IU$_ESVXSek-HM=W^WhlA51>c(Tu$wr6g>(cS zcI;dsSf!Jt>U>USQgg#Z4S-!T@o9(kkgv_P$U=Q?h?S1|+%u@0EC9A8tLh1#s*7X6 zQX@+lvTfv3j>{q6%eD|G%2~N%hu&y}0mlZkKUIe4iAN=#fuXapp>JkOpD#8-d;)== z9}Y&3!%f-O?>?6wzIjU8AJb(s)6UdCiIAAKC088Mb>DyM2yPiicXnK@ZRkluzK=IE zF(!izT>M^=lt1R#*Iz^W%A#juH6bjjSsB=Mn4~w+v{AB|aFD$r5iJ`4Ppw9FsmWax zB?nH9UaPI07u=6X2^J^c8!a#MV zf|vU)?3VT&A%3+EXyjD!J?x^yd`qotTD$CbF#Y>vYSzWO+{{Xin2m*U;!QM~#5rSc z|5B{|%Yx5@nxuaPQ~RqJ%wZHuj{tGNl$4pNmAl}d#8#QpB+@kT5XK(O@E_085*5%a zY)~lhdLn$PXz@csXkSN;3EN@JJNZmx3qw6TFGE-N{oNH)*iiaM6-G+%;s}ai{R{Pm zP8B)GfXOn5HIUG7aa+GJo&0^1rWQ9DHgj%5 zKNr*H^m>;2WYUv34j{^JMY68!G3Vae5Ra<(kY#(j|83vow~F!uViWA!?i)Ptfu(!;6(g z$}cWt6d0OKywSnG!odh?da%#TOt z8dOxgl#^+cUlvN39aqt1tZOP&TYREbLEka3W7@-HMwftG#14xwFyfWatDGM_3Ofbv zj#o;}R9FhzxVgUTnhoXcRq4W)2Kkavk0(RKGDMr5K-VR3SI!abalRNX`19~`!1W@9 z%=9CRXHRF^%nY!AvokF~CeH>YG$_`LR17(7zV2`^1F48m_?(iX%GjOf?X@mb0}o(Z z!vYJISi50a$l~|1%Dq!RcsMfcLzAMqWiSsI|PjF}b zhXnLl3e*(@Sd1=Zi3L04|C%CWgqx4o*?#ihVu6O6*~noYXVUP_-+@wGrtNu+p>e9j!ou^zB_5DbBkvTN964y%p^L#v$jsz-5Nn(Uj1f0*`M}9mJ z^2TRl`^&=1ujUe0lk{j1j#y9tjO&*cx+(WWZ;zwIj9ymHY^=O!F(;j{aZ0Ih(=-ut zbF!Co1%Ph^SwY)=(Z=b%VTJB-?BWh(qGr_i5vsx1Y z#7>q#GL>f;mNCF1zbi1Bvv3D6D!t9bEHU?;Ju%$F#vtWl90xql=+aH~u5^@yxPSYo z;xkE{=I;uO<7qhniRVHUUa$ zC{KdOX32~!PRL!9O@N(Y?0G>St=BMQ0%`sJaaEr|XLrqZA3W6pejBbNxk%=6)fg-T z;x+K0p*=q5d~x1;o`|i*jCpGxKt$g(m9J6(#0na%wr0*@C1`F(K%w1|M=c0~nd)O$ion!kZ9OEiMfVijS#R63p$vTw zMw);(6go$PaFr$!L@hqCq>W`O?wT6?8*?H&e9c9IYxeW|$%E&77QkM~uE!Dxj($Ou z=hI@}%=!b79|Y@@l!&0ma7XR&(c!!QmEiz)(J z1bz%{(L$v;r}nbgzk6U(_aZChHG`jn8}OUjo>olaMa|e)>1g?q%K>ohtag`PL z;TJ}tS&Bfgs&mF`-nFChtBZX{Rl;W|SGhU)1lj~p$S9Sr6uoO*?S48Q)jdftyOLL!< z7rwLN*p3{}a74YZdlSF?uTIo1-opZ8pehS)KLZlR;kf@V4+W5pKv@AVu+lbRtcuPD z4PnmaaN3M=7+pK|XfRixh$Ab3+M zk>wf8rGYlm^CR2nF72l2WGIA*>DlOxwk}2|>*PQBJyrnc6FqcQnRVYewVrN;Z^-vJ z*b`J>AsZO1Se-9rHUQYUXkLV`k zRNN2Ytwubh6$OF38dMFKbVVdQKFc4MgMK9N+t*M5?Zl!>g6;yHR^TNF{BJWlRsOuk z)je)*r&O!KCuVT^fvjZf04ePF7<;VVnCX7qM0*1mdi_BWW$0W2=eiyg>DBozfzgE{ zIZfk7uReB~`%boLJ)We_Ws95DO`plK?>FQlU#uIA(-bcXcVT3UT8&v?I1fhMc(>F$sJJaWGMCvqT^wvI;pJsD(Q`l1UpLvj$W+HKDP!J{ivL=mh36yq=TUa?;Fh{B8V*g+g;?V_Ze_y zO)-uX)e0k9Eo`NgOZkT}KZll@>+RK+Cwdr-gs+uDaH=%=p_c0$TJp1cz4um8Av6C%V1g&J|BQa{DtD9jpYGT+)@XI!PB zq@-KMR$21fIc5wd&7%*zZ@;fZLYe_%h*i%SxfIr^*3Io?=?H=E%14s2Dmpr#lS9$Q z(CHO>Fs+J-M3)cyilLe5r18Cq3;M-9#B3mdc4C_D`Aa%RxxOCEMvuPqN0gC;QIvYn z$n`oZd>gF*gMp!;a@@IFxq8}M(QP})CE6a#Yf?TX>wSeiD?UAw2u8Yb|0@X&V>!k- z5O`>0$r&jGv9(MjU}omH2YW-3`bQ1EMalZ-AfTd=P@ON%!z_Q!$1FG5I=glYv_(kg zCCvV{_MsmzG0Z`nMtIj$Y4w2}>Cp}SShZ#|AX~O_53CkY7JcQ7;3=zbvrtOtXz$LC zUHZ%6y_sBA`1Y2+qaF_d^CZ;Sg16i}TAVDTXA7yx+aHu-BulgvgNM@{4&;~eku+3| zvSs>d*LZfa`r# zCA6~YKmpvmo1i%C7CJ-WG*IG(H&^gs+~lQ(%V9%vlq45+Hlh?`&p%kaiEGjMXeRNZ zcK$oV@CTR&z^H3id2n8_?oin~12HRidD}ai8GRrJ@bNZBeKf1NtV z;@7Y2o_V1)HJ0BSMZr;2=>;R--ugkD{f>vKry^HGTWS?ub@ht(>|S8@gRY|((MvB9 z>3K7l0W`KSkoLFTo};?DtcSBs3hf=>_<2d?4WclhdHB$9$s}l%ACZ-Ie^qsuNYad# zL`J;4;v444=Gk5MI*~$*y?pw%BK~z?U!skOP#oStmc=0d-`7E>Kz!3JQ?QPND5GAs zJ7>%E2B3yBD*{c=my4Mb!)q<=y`<0+UBEE~N2j|euLwtFO|^lG|1lf##jlH|LYeCi z*Tpag1A9w94HpaP^a^9Rg<^M3p;U!IM|^@VvI05T5&(N+Q(fSC^|N#9-N*_;uSh^&Jd#o;ZmWar~CKKWSWDa33arH z=qbM-L!nbP|I1(KfYFVP7qL@o0RC-O<$qlyY|qDgzJhkSoKd1RJKMm$vRf;qP=ks@ zq)wZf1o13i(u{diDAb=E&%Z|FW{3A`)^Hz9vpu935_kFLaZr?Cuww-Rh3xL4RJZ&|!~@ zka%9LG*=`blR#eN?&+YGNDHNBshRssfkvK{4#k!-5i!+x*wW%X(dp^A4W% zDF^bBaiM^VHy9Xc&Bnr$qZBKT3!f#U8WA3U0}|kv7zEx56kFE=szZW1S<(yXH0Rsys&cy4!{Y*^g>n~7LQ1P`d8w^Y!NRvcd!wsm4 zLD^j|GoB38BrEe81--5}fPlf%YBOHuXt&NqIj%z|0IQ{WYAW8>uPMOC4xH~uV-oU; znCMaxGxH2IM2kk16DY5wS()2ecEPq$bN=`9Da}X?b!Tr|1Cu-UDEXyPkCX;VuISoX z-g4!gZsS}Z&j(mGHm018wY87>=0(07O|&O2XS9yFe^SpxHucNG6FXmHzEAGWovlvf z)s^?{a-a;avr#Y@<`>hjbF{kp5UEVBy;8a|C=rkL>Y&;i3K`NZ`h*7LBsfxa3uRt?<*Z<3yjaZC>F=R@Xz2Nyqpp(R^BThDw{8K%Gv#QcQ9&6Q)!~PSQ!@IB zIi9GSrseKaZbAmS?WXkQ@5{u_ybzM8Q+sV2IIk8E>cV>)gcq%d0Wkc+b!VFqyNDnp zO;Wav4de0Wud7prR`1luK53*qH?UDsp4um!wO-(8TBKZ)VPN6a0N0Sf1)$9B=2tsV+^OYkI}C_G0rq~aivsc_U>=;Ff+8B?xd_Y`>O&)z=%tAf4}VU zlJ}tden83Q_}7L@7T&hPE{mnbh7pPW1OuVjtW>}>2~bium|cV2`3UyBpzDU0j)R`e zm$SLm;{(Ug=1d``kvaXM;Gb1nxEv!$f&EyS=crzGtoO{*`Fn(qm8y?7ykhkm`h(aT z-r`g4u>{YrRij&koyYjm#wQQwcU=7ETS>2gleS$YRZAM5uj&`QbEkwB1meE#w*5-6 znb;ekA_t6Y5+j;P;@=q7K}R7*+jBMUOti?Xikk$rV0_D(m^$Zf{#?D1)wy<3;A$g; zP4_~bBa{3=EJL@!``$$(lfFy336Uac7DgH;GcTP=;o0`EB3|_Rx@w@G1UMo2M%UMh z4P4AVjUjhY;>(C{lr^P+fV82)1n`#@#Nx5&!o$4j>>7kTp zwmHbyHm+uI5(~)3&dy654wwopodV?;FMgweUT_biC)h1;Gm7h7Q*@#Moc{0tNAQ%- z%Cre4tFkeVNz?P{@5!J%NVRBSiee2pKSk=H(zsV*Fm<()r@%Y%E;q{%%0nvdy;h_P z*wC|F3hcRM3Ta=Wgfn!p=$+q-0Z1?p6NSF3!cw(wUu}TpY6JhNtF~v#wx%;g-|30g z&~hV^Oz&nmv+#=)n49{x3=Q5{O5sP!$4R40^O~#7gsUgmx-`G2pxRdZtTqTv^F0_e zpLNTuT9?4*z7r|IJAdga4z;_?Xlt6JXu4v!(<&rWDZ^EgixXtSF!6hb$dN#Tg8oxw)x0w%c+YF#Gbro9z&g>KyfcN#rGd&PLs4VQ4! zCQ)+J>rvqFRcfcM*}GOBW!)0v@JNzpNj`TDS}>)N!|W#+Z=V0{#{rx(Gd&;9?7w?e z-h)^Kx=eCA)W;ba8BN67^Fb%H3d*Ow%txp6Bsfk*3D7${CnTtvIz@Xn(%PH-E`g{q zts2-jkMU^FzzW*vKgAEKaEY}$Z4w*l2(w&9?E&Y>vMWfw>x&bZhlbVN$|J3@4y>wr zz3ttrz|F1s0{LMo@B4IQ;;GAzwxaPq{fVXbh`*2kem~ZNQ{WJfdz6q4F2hHNB7IwK zUwUO20O3p&OrmhyseZK4dsCq#L#7I29+1oZsoWS*jiLL^E`LYDiYC+G{DKxk}*u=rc%OlkCR@{0!%7S}uvo3&~NX zq$5`-MnqFN0-5_B#0ZD=;x+NVzcg}}XhmkEf_PzLp4wG!fWg=)f82H169VqJXoz)$Egh};3l+y^SEIV5E#?4dah$*c5-E6xSBEElaCEL0NU&| z_?$hT5^@A)ZWE#8r?<}*{Kl$L%l|*A8_#kUH zojPe!LA~mxR5%1WgJ5_mxyJ6s#h()rVPMXtIkzWDGZy>&)*iSECYRg_RKZ)H?HBChG^&jW{tXhJ3c9%<#HuuN}ynWir2WNj)c>dPB?xs#& zQd+<)Eh%60>M`n7k=-Pq!OCASjd zLLWXI2`F_^>te6B1z2E9wF^ZOj3}S=*a@+P*U;lZ*(`pJ!6K$fdZyuwZ$_;wVe{(1 z!A3CCM}L-vBfpjbbstFk4QIie`$qWnT+ybYwG)nBGgTCX=$4CC8_ zO7tx9)#`VZ78b1~C)Tgs1`?6W-JDq^1gHIAVr$Xb0ElxcE3SIS1zF|)*4vd?I@Azb ziD+vjdnVF7OO1Nak$8P5ANg*|${dcZW;(l%RLA-CZS(|>Q@PP*m2#EeAI0v5&~4A6 zC098jIVDAX^u#gHjZRQg?YIs;Ooo5%xQ1(7e8+#fcUDz#=mrlhz?w@zjWf^NGcU0x z^)Pk{w3~WwxyH|qBl48-G!4SO1sQt9$g=1PT;y=X%P(JJGRty%eHCX`ZoF`&}OhvNf~WWp7(M~2NhsCxo;X+znPw$Ll?qF89K-} z(yaoqW^Kn&!*In(4@zu@yYI#m=pd646Z)(UC$_f*mwn7Wn-qGZcB! zJ*UdTdHzrrxEUv5Vf)5RjIM}*=Is^oKZZy&IfD=C6cTcek=wVJD0cbxBp&+3$?3^* zG;hL`-&R;SI4Gr1re=D@#73h-gXycT(DJ3J(bAA-Wx6RVYuoW^C(*lAj@@6(n2-IJ z?%~^l#7Z%`y5D76ZQ=wU@@hwG_phFjimOlZ^&aRiC(T4ACnpzFmZ{TUPMcw$n~lj- z8vq|w@I%fWD72$c>d>!faqsHww9M}#6ADJ_3XfkcC_*)=YPy=(IB3bi^4KpojcCT9 zSiJ+@RgZ-R1e$C-k&%(>uJU9o(oxbf$<@Fautk)YCF{*2wZv^@ZJyOmC}M5C&RoKx z?kJ{}bgcOH4_A4KaMAzu27G%6hQLSF$(Kr>z1XkIu}Er6&l_jlMQRs!+PK8c$>5ed z969Efgvo^Lq@hze*k*4*4RfGrjJPK?jRY#N4dTp}X!cXC{3Z8+>GaoztzbauUk z@!(FQq2SrqJuy1%Yh+|f7(D%yS0x1{GeBe4$@VjsknMfFq{bRcdOq=6oQ*B+y^sm@o_?G@^)zz11sVT?>#hMTe3z-MK$`*}bbDOGJVmfzsHiqg|HXU~L{z_j} z=oX;cXcVa%T$c~HeI^&!W6sD;;LI} zc4*Os7Wv(W)2;IXlwH)ogVsU*-o2Eeb3V}JC+%Gt@}6Bwqq{c`8ahE)jh^c+Y1}y` zVgKpy4p}dWZiN_7k=1T#p1@SKnzbIDNy7By9=6NKuB5wFwK`euc*I_jZCo>Ol3T9F zz3IS-P`F4G2I=#m{}@R&x$JH$Ap{IThzrBcf^@s#azF`LLgO{`zp}H$$_r9Pn{@>x zB+VW@K;IilHTt|vykeGJd+lJoY(GCg#iSgZ5^i7Kd6(bjAtYFD?M&;pgwDYPF+|_H zM2tQ3Zfq286JAAMk)?m+a5hSHkJvwKe?7G>UD6P0C{}k)5E`tEq9dOk@3bJbevC7 zb`9xWUZ53O_P#>F$`1XwlV?waLML9}TV#AD=FD3Ot)9$ScgaFJmOY_kWNUFIi^v&L zkK2&VMsCpjeo3f)iHLuAsH6BHRD<6scHc5ohThl_A6pMx9NIll80a@yxtOo9=u{r@ zhzN&}xEbELj(zfJD%@#1(N(H^Bkm9ETZir-kJRVT#(F`JfAb+RwXhl5`z|q%WC@yU zyIJj|197G``@C99eafX=@cG_@91S`}sl|D;bj+!{5ValngM)0u0S ziF!{D=vsYv(oGzQ?9MLEvU|7c6igA)xGw;x<1k{;Xu4m)NV#gLX!E_Lk{`7DU~636 zve-%K6mY99Q8AqaNC!&I9fSI!@*{PZre(g{P5 z^nao7H!P$pbn4Nw_4r+K3%4jxVM<)T{+D3*0z4@?bhTl%|h zjNh(25GqXxG3DJYYrS_=?0Af*$6kt1X^5Zs$d;iroXGMpTB{$2+kT#tly+4Sdr^C! z?8OUlXs{d*=b>*Dd!~%RnbiTE4?S3Q9_T>F?m9=*I>;Gg@AL-=LD_>U7yK!(? zqA(%9Tsq-04twpdKk|G55YH{01JXiivyZHY zKqjp=*HSK&#FgmtE%4-BwWi>!4E&{))2#=a16Mib8`1_qmj}h)O`1}+@Ikk4gL5_1 zSA}lMB8X%1m^q`e&_hVt0KP&?ur-w7xkw$8q|-CzNEY6Cuims-I(yLL+6$l0DhtVZ@FxdJxqwW{Cr04 zf!%@>?-r)ZLV>2mRLhnw%8_-*aZC$KcwCewi#8oM>poKcO^0xw2><3nWS1wmt*IBb zEAy9^a|vZ~nU}S=GZ7b}zP%sY4+Pn9$40~AK1ctm1=lWv{)_V_$_Fo%M|Y^t(ht#FHb9o zlGO6z{Fd&(`}%>Aa*Upx0-K`K^@JB3&|bOlce~*#@Vi%9_~gN;&GnkRwh}BSZ#vJ6 z2IaSpHcY!<5oQpvv1U;>`QM14DSZv5X;IHt+9nvn9WTDy>rE zbE@%4Iw8|3w= z1Y~)bD(~KiynB+=4Djyi z?QW#GsSt^Xln)r*Hz9W1tM(a^W7wef5J9E@3^;JgrdY3~;7<#?DNJuSkM)RPInN0TJwLlxBNI&l!zZfYwL_q6w4wM#6{@vaiKwwaq;RR+4;GZd!3JA;w{xIkFn z#3gsI-h6=GWe52I#*=^1K|-W?>!A9v|G+a}y&kD%$Q+XU)7*O&OL6ala-rA2M|GW( zrmL8I5X-1kpYgLI^z^FGY5{w8+P~-voIM?z2sX3OgH-YaK?x1~JJO6HT-=-fx7~s4 z525J#4{Zf6IHrAYjj=D5-(5d*otw@5zHk^IK!I72rCKfiu}^-hheA$!XH>vd{jg_O zHWH2RS(*=@jS&!yoW08vhMuAhTB?T%cg8un&G~y7eHezMx>3{y7A*MFuy4R>0DT}X zoM+X`)_M?R&wQzuPR&Pb~I&;E-y!BqXx#^beb^t*BE z;N37KI0ivH)g7TTx!nX0Cw3yz)z`CA zz@512<1}W>2>%Q-qHuAOKAy?;GzycCXIiQgN~R) zWVvKSi=r^%P8_r(B#Mu}co$T4>D-)_9s^&&wx}qhd}PcKG}{&FV?bf^I8nhF&B9}+ z4KDLxDVoaImPchV17-S^UQh|{?BL@c*#LSkG(DNE0|x9ceOeYd1^Fr>D;=COpjBut zas09d)N>DEu0W5=gNm5_yM)~K9ry&wORt{|=$WNf3K^RiXXDHt8sdGJG0$C0+%JqJ zV#wuZ7+%+!EA0M_9hDIMu3dybAJ_d$%7y@`=;Snpx1R zvJTcx-Ex}cjaJI^iv>jklZ%%b|@88JUFpueuYCyaP2e z%A!~;j9{f3v(%skbRh|I;;!&|#jaa0rJ^+QbOM(#pPKELA8x)L(3-FO$ngbEP+CuM zwdJ`7TjC5U)yyN=d3Ro9e=#1n1C_KvXK@S5P&4hn_Y4WC=5!o(ZG@*NRK2@tq^Jm$ zc9ODQHX?gix%+7OZIN%XT>9$5!_5t!pgIg3GfP7{tokL{5mN~WjwH-Y&pVY4dU#0@j6=6tAlv{7 zn4@FbS)aP_Y&iC}06zvUb#oCHXr^m~f&DicX4kEEH?iTTM>O%!Xh_E-zd1Cw2cR?%Sn4fo<8}d#B~^wixQMQwYV%<|4+zp>Swi z1XWX*51X`h3CdJv%M~?h)ACrFLw^Ik95mPJWOz|b&FCaWHKDDB@4Yx=unLxi5a}!6 zZ%jCpPM*FN)V6Fu+vL+>mMu-DA7qr0~#AxR8bcHQ5jGB0dRPgjt3~Jdg+m zjxp+dc;lz91TAS*eC0uF)+wwqmtR~hL3GTZyM%{Oj5K54Z}C${$vm)gfq|Xy#5vLG zEKi}O+UOH0nO1lMQO`q`oviU8wzyhTD54rBUdf^8SvrRw_WMBK(D zZh!3N_CB=f+Z3pqgx({q7 z+qpboasG(H7z(#6t;*`D*l){|zGezU*|VI* z=Xxtd{#c&hbva@$JVr?PW_v53=))j-*T~}S`mmKqG}HYS`MC+VM4>IBjy5V5yrgVN zaY^~rV2|Ak$Q2;2ENb0f4>beE( z-elmtpDqqs2F*^6Jr-2J1C4vH3ycrPxcc?b4i(ATyZkq^lM0^^%R_YzaY|pI*y(M> zjxH46ycAWTvfNrF6Cn!PE1Bk-7}iv4%P#)d#W0Uo|4y?gF*UP$#bG!ZefXp;MrX+_ z>v`+Meb$L}t&FxZ8LV#4o65HqLQo9O#m>4K#IUbTdMO_-k=a;zEPxkbC^-N#upIO` z%(!0wqT(K^%(BsyHwrFZ64@X(1BSnoo|enTmsW^4+;(@Qn=|C&OBw81q0{X=5kH%g zAl@XXH_7wm(@9)YbUplUaBMUyyXa*{Rt8>rI%aumn~~3Np-E8@#B+-E-;iAb3?Z6c ze?p$@zI6k^I$`2rSckJ(ig&cn*iyt1LJ*LnR;^H>YdZHJH~_Ihr4LClr@IlW$lnwZ z(x8IYO2u|Y)u!IS!(K1&_rcr`_+$ycjbplX+KAG!*TPSxdp0a#|6(8b12svNAt#^S`j43KM&<=e-&gU(~6W;x)6LH zPg3juU;+PM9@77(@oW0om!!~KKEDJdY2$A4?Kc5G-H)awlP!-O(L(TbHOj63`rT<( zisSe9&y!TMJulp&1m-`-9S{h24rI5h47-U=ow(@84YO~PosJ*dy4vmd`WZZlxHK3i z+3F7w67!$GmbgC}6vp*b?Q!w&2wOW8pF`BJ2@EM8h#Kd5+Dn`e-wci4T(i%_FxjV^ zZ2mP~2%^#->T`mPUep0TevhGJeg1Q$ynAAuiE`wWhR0I%Q-h(%X5`-Ew*AycTlemc zgg^4vX`c^R^Z^S|ufY@aJ+F0}DSD~95};$67F7G`!E`>IV4GR11*Txd5>C<+#p332 zj5B&wl<_$>U>Ao;S+_eMGY|#Q#c1s3OoWkKbx9`nTbmKb0Aqsm`jf`8k96EC0cg2d z_Z2Ns+s$@4dNs-#)89DsUIzte-wiXEd)XBqK7-?Us^PVZ8%?a26C6@j&p%n@ais`) z(hu>}ri8<+`sbNW#UqTON`eL6W@?8PiJL?J$`0C_r_0@M78yF`zpqskpc=@qe(WSP z6K9urJ@Ju7DHr(n+w_YP*S(|o^v7~=!G370M82!L zpW4x%*m#4HWS5l6gW*17kLYfk#eNQQ*4-wZt)}B0P*r?7zv%gI_2F*Bge6)&6D63V zK~DMw06r(Ftol#6KCD#$TvooOi4{WE?Iw+=_Vqp=qE`rlA6z`MhRYcp~ZR+mdMW1tLiQ> zlcu=O-foc?!ajRC<|`*{5<$N=fniAYP+5GhLh{UkqE7H7HMyOCI>n6FK}&L?^n|&D zZhGH+!~6DRFcBoiMcn=bA8%+e1p9spxRnu+2);!m8g-X8&q8_iMeC580P-=G8IIt8 z`1~y~&Yrwo^fs2|cnlFQhX8tjKTg5qkvs;ClJU5#Z^9pw?w56ir=MZ+xxl%JCfOk` zfy4?r4h>f;!@|!UPomo>4{8>r;JJ1EEDRVHu$)jmc$pk>PlZ!OH><%boa7 zlYwPP&8`1kOy^DP3}}2Qsj6?%O^zSPjkaZuSO00j zMDeB1UMnznX^eq}Nz8nx>)Fn^D9oaHZJ70!vK>*8-=bi`(GU zPut0I9LZ@~-QV%L@e9gD$rUHD$+ue9)~?M`B`hQqnaVo`dhqf_<(V|vP#v006=o_&UipNrZhy5d*oeYZ1nKqvd={SDYN8L=R7@} z_;H!k1gnC-4><{RTG|XNt^QrpZ`ItFyvJiBvuE?_)X8nDt_Vf+dvjMgchrYyC4-4z zs@!hTTkzc!&1ZBCVgE*F?f+GXnbNcEmKXRUmU5|I>PbX#cccg?31fYVqy(LNHuwAno$Iaw|B(>}ObXC9+~y6#nUmX5*Mx;E8;EkGU6 z9+ePN((88bJR5SE)9dRSPH^f14xw7*(|rOKcHx|Y5|fQqm6n1{cI6VW9!k&!<)5c$_5>Pt zg#IRmc6wrkUznu*Sm25)RhF8W3$cEiX&~{~yspb(M zkVuIn8L>Usx_0{+?bIg7KQENV2~VT?6ke(A|?eG(1wc%?PWVe%8zp;oXmX)a* z3Gzvs+1;j9)iL}aBySF=47@J02)YedL(Ay@80S_Pr2wrw?diEQ7;>3R-g}nlm~f|)UX$0G3#{Et zpIUtNdBqnxhS%t&7cs%cvP}NdJEHRDGK|~W%{BcjKB?-bNdz|CZ2axu48SLEeR|W2 zy=nWl=gA(AY8A3~7L<+;GQcx)zb^_7NouixZPT-@5-6n-`c8ps&s!M+JIZCh{rv5* z_wNbL3I%=T(@%no4O*65TWp-!7N_xU2%}7u++-dIQ_RrMx!FwCi*m^p=WT2x%&$xkR-3%TIR`d%s>- z0IgxeAM_QxL2Vs?blD%dqS&PpY`<%4?4#$Jmj?lcl4X4?3D;14N1oz#rd2vZ!b82& zP)Uv5(0D5&$RI?!kjt<(VyO?P&hQwZ6o$(Eit4*> z6XdLz&3V%>bc{6U*#Mc1Mpz&~G@E3)Gj0#olau@bVXCQ2ll@{Pe1ENM!P>e`)L@ z6V|ggD^icnX#jcl(udbKb;%fYVWC0 zOlFnFJ(Q{^5HG2{C0bgqHDz+K9m=J%EznirdIIo0)Hf&!;pI@ z-11nheLG7b3Y09?fJT$y>a-c}fVx&$;(mz2Dy07SDGbQpSS@R<;K-EL9B?UImE3&X zR=HQM-e;ourO*jBr+?chc)~3G*SG3P>_dzGvU)GQUX^oV?K$T@Rx~AK%E`Ju#P3PRcuq!kenS;CgK6%mo3q9D6A3L>%@_9f|V6dDmwP*Dh^ z1r%fz*&!sdt3V<V}Uj z(<5LzT1n5nDVp&Quz_a^cTTmxYR~%h<)yyqxDfcdBg_~--C*HzYAWYhj7ENHRy9bW z=MF*R#FunabdR4;^w0Ifr#%155_}r$w30u;AFc|j|2fb9e3}1{_KQxtl7oCICq6Y_ zt+dn#r~1MI?|COL4hcQ_=BF~oGA7G1N&l!=?EgCTZ_iqczZ$PtM2{tY_x+7SKmByv zeOWO0YrW^0<3D{9-cOh$QNC8Ao~?S}MAA_^_@M*xAx7RP2Kk|F5fdeE^q&qke&_@n z-C-1S>BHEbm-t;qG5_Pi|K_a7dfZLXfT#oX<1zA>56uZ*F7f9FAARV5X+*}zzs8Gt zUw%Ov#>oGNgGQqt>d-HDb%AnM{y!c3xIn9(^~T}bl-A0pLg|$m-w#wlP(mNm;~W>1lrrX@L$e1)7$jBVkCjC0;lqnbUJ1zc#C<} znr7hYr+MN;1Fih;Hv-$A(ed77w*(CbL6of+@!LJ0U8wty=3!ibUdsmM0Q26iixP7B zx9X#ja}Nra`W_zgMthBfgqr-2n?6RwpbZQzcgA&=`Z;GaDe!Txz5V<@qFqwbqG zQRvcOx}DbU5+A-fU+0t!kH?MdS>CwAHs1%sAs4%)kv%ETva^Gk%;uq#G!6GY46CIu zCZ=U;6Vlt;d&rGoT2AzzoY7m}XkX!zUr;a=NxgLOV)JkI<_4WewUIdHrDIi?>%zm1 z?5|YpOaDG&9TKgoOI0DHH#F~Ymdd#?P$yADB+|Mgd*Frly>K-xL7h8yPP{*?qYv{b z#{IHUkKWthw@pH(!5ltK`||d?2<$R8@kZh3Xm&Z+LZph!cpt7U+>E|S1Njqci`^xei>Z2Vd2{|j{;DU5(x>03Gl}0`!5+wG zyqdjrt0uonmcb3!_ORH)Ac!09Z7prB@>^!7TL%Gy#q0a_L^)s8Ji}+bMo9-_}21)^gjfwz5wy262ej)lD?1_$Wm-D=v+8Leav$A6$qM)!o{y# zr>qmZEhjY7)lvw)U~6vf6U3~z9Ttv39|#`(El1pT`p(~DGcvjdlZ-!Y3SPe<6$N#1 zgI(cj;Z6!04|KZqMwt%am|YEvlN&5a6P*dgEtu=G3$j|;ew>=ISAS1QtBWwurF%`P z@57Q`6>OiYRvjN-On8XdyLYdcM8dXd#Lx*jy?`BVSB54{)z+g4Mwux3(T1kc>_E4H z(#0Q?0*4>ivc@r^$}Rzvb>wdr_sS9Eoah3^h=o|9mj8Zk=wooGk@usToE`dm`~p;l z5A%GUSYoj2$dS5%=6H_o-!$F&jfhia_QeKirudjmgl$x0^L5PFtJlm8y`>4NV2K=d zwV`PRUoY;H1C9L+gZB3~ppte?O6&z&K632jEi^)ZqCR!;o=t_15{mpi>t0Rdd!x$M zRHP!eq^MxM#RSg(qywVJoLO+7_k@Xw3C(r_b>*5Dvt`TV1Qn^ry?tETcvD=GU&|E_ z%DY1P1+NpGH+IE3X1BX&YO+q&A!dvGoUgW6f`tc*MTJwuqc!#QdIQLv(Lb=vnrTQU zcFA}+VV_h|eB#Zd>isD`OIFTwWu@v>wc7oV} z{x=wKUu0UIlJhl+^YhwM9gWLk z#3bYloJ{!6c9Wy{x8O^|mP&%r1PoopP;uin-Tf?w0k|c8=(JI1{^gz|4#mRUyy*4k z^=m}R22=c*%+tj0cx9}1?DH$E3C?iCtq9|IQs|2pvyFz)!%9fZ%+GLN;Nh;L`0noR z-_mY2SmfX;dQZAi@N>k}L!>o7Iw?^*5EM{UREs&3k!=jpK_W5bT2ki@sQ`6DURzu)Ya7$o?Pw= zBy)=rZbn#W>i$*Fui*N8U7n<44d$l=Dsp7Y7Q^U75Q|pc8H&Y@A>~=S!ROoB+iRt4 z%CRmE7_?EYSE9lBN(;hpiv^U2A@NqKCtRV#*4I9W_v#_;Q= zHA?AU!nkB3vfdOQY0o9YC11DFhX?wJ_mgvG~}MtzOgmS_1QgqIk>#LU$|f z88tJvZd{M(OFpd}k9niCmlnb3^8Os^Pmxmm*5PGY(^9ls_liY$2gXs1hu8_8d(BDG)&r$YMG(KKQdU;nO@C9CBt zI0H-bgIqdIlT}clNkKklZcA~fN|DpJdV)R4W-m7pFbgxN*&Z{i)6KhAzZ-}s1p(8e z7KpDkynZ5gx);9l9lYYe7~Xy`=*;EI=Yj%yD9Dg7liO%rKh9BFrE((1XGVY9z^{gu z?@Stztm4@XGRP+x856QiNLHXr*?hpfp0?y}Y7XwaB!+U&8IzK~R)WxFzWS0;Ncw4W zpBAYcFNR)LYU-i!=iV|!2J|R7O+6M{$-=#$9dBlCp2U0*->}YoXGXk+0~S`2flX;) z=>2X=ef@e8HelNNnLgjte{$&^7>aO{{gjcaZ9Zrys5TJ6Ko+l=VIF-u^LAxcQOKakeA*i@!mzOVyde4*A| zabw~g&M|y3ah097HX;>G38r`qWL)XElSW44e_WJ|>93azj;2fzq>9_Y*8OYB7Pf67 zYo=Esop`C1ddpGA%gz?t9g#rj-S>-#Y(hdP439k-BM7PMZ}97?$&d3y<-1fE^UGA1 zT3aAr3t(?&1xWO?4xX#Upo{IQCkA3Gt9OU?oX{00GgigMLl`uiiWl_&^0%u~&kdvH z>Jj_4ZrG;l)=*Rdez1KJam-!Je_7;IZuL29D!7ri!|>y3Qb!rjEjbMt%pNX=BB2+C z*9{g3LK?%(&OjkMrE}0`0z41008p)YPuEQ|#{w2*?sKql%&#VKGdBFHH4GuwC9G^- zT3XJ^%?;b43R!WpQ_4-D_4)H{Y<&Jqrz>PrvP|x-;k6sKlOaYrQE$l*+j@Fe(wmp~ zx%bhF2hE(F-+>GBc)xK6zH2pa@8}pELHXaiFYA_RAhj>R9G@5~wZDHNVWY$Z>`35` zRO^zPH`b4$_Pl!CXJi$$P5ORy=Lg>Kl@FCO>@xR~q@?O|t=rF9EMJl_Y9W*|O)v7u*S`@S zjsH~H%8mph4Q}2Hg?f9FVdB`D;{%L9uTSMRUTPptvQO0-s`h!QL<`{w5}DDg`l+ZF zSXiBDIZTrIF(!56dA3{!lltUCwFVZ_e@p*Zoi)6dtIx;8wTB4CpK1nrMf*i^GgQz* z^OehsYS52Y6BWD%=?_2M*8hBbrNS0f<6nyTM&!Rg{t-tw0O$ViuOO-(SC`YT~3E6yCYiC%dl^{^#i2))E$RP(#J&g2ot#?-Hk zoW6$C!&Pwp+lX7$O~IWQqSP^kXOe{heK}(T5ydt?(hH|5BQFGwOmFx(Q)jNUpzW)waE?@=a1%$ zH{;$I+7q=#a%}@}OViBbi`dwTpY|Hz1`X0=i&pN7PSv5qCFvoi0b!WsjY%ZGrBU@s z-{^!FVYBh zfQmJO_)mhz=T`66p3WaxF>724l0G`U+$Mtc=5+lXBw~8Z#tN(+NvIC~7OH z2*(wL(wn1ppe~;d>dH-63^UW`{`_ML{kchEVQ*MAIPs-s=VImh4|voC%2F%^Ss`Y! zJ}o+t_+0SBk!mdN#J~4qul~r(q5S4~5LfNwEgW`S5C$*MY_-Z45|5W=Jqy}CVoDex~z!(rYD~kqe9v)XQDnN47Hci3v?6x z{ZMkN;Gh1!h@mZ=C|JUUX*{(aFf!`&;dCu==F7Q=e8-R1o3mT>p0wyYP~LmAE1sv9 zEOl!5b6YqHL^*z1TU#5r>^QY(j2QQ2ebgvOXoreIldn&^spU?*VikDs#8d|2=8E?R zSLIr$vwunwt;dE4w9YCc0~{eEL*NqEKg8bhOefx7j}WXUzXRpl%w_gG$t=2Q4^s94 z_H9GaE6!Keo+f{J#dSzU_FR=Wz~rQDred;ANpk&e^|YEqmuT4)`o@7t<2Ea?tk4XT`UH|KDdPvfRrmh*GNHcQ3%?L6~O zS2%m-jD}NXw|iM+q~=4o6cSdkm-w59o2_l%A9wSs!ues8y`tiHUd*S8=RT^p_+- zgw%cxNU(=}4Bo3@N!F(OqQjp96Cll>!rg~o|M$mNFiYZ5Kq8SVey9q-@+!dkUygsm zBSjmAo=urLqvF~z@(MzwrP*wx zir{|Mvz08MUnra@Nq_z}d6&@{+5^d8`SImoiOiMAkU_7lZSGT2QdXZh9g~#1F@*K6)YYFTC^U;TeD#uG&PhAK3*pF-RaO=o z@btvppWY6n03VaJ|BFCsAUswK@Bh&lpL}W+@vu6v`hPTrC?u?k9IFlIbJ$oZLw*b+ zU|L!k1EmSg1yEPBSYc84laIgud;8I9?O2mF1Wd)1bqx{RI0_517g?%Q`O zDQvJ~n!Sk!_MGe>CZ=iE^>+K2?MB3{*H2+-H{>m#)LCa*;5^>0+C z<8{6Dbt~q!=7^m6LlpT1#lg4cGk%BS_t2Hv4Dseli`>3j^jlEnX*f~dJ$H8UGIz71 zFE9L2C+8j(kJ-)FQta)8+8*Nk$5kDa(5K&))2u+&+XGrQ&CPbA*q+qQ3r9LRzEMf^ zr8rNqeDKJ$qM{;0!r$R#e2niGDE>zP%vrNGda@0Jj<_mBD(Wbzlp%rETM0MB^sFo% z`%%I1)6Mx$>G+I{j2_>a+PS)Sm^c6#zL~kKd$O!MK0f{<0Mhr|nf`c}V)c^@m#Z;R zubTolxv_y|s;yOE`MmhdaG$ego+&6d84PVBD;dQxQQc)(Yzi(7pGU=e)p)?a3Q z?p$A&2`bP$Xui7%OvSAykHNdCG(>#`iTS5+jqaf$EiK=%Y&-#S061osp{e(@s=U6| z>49GzV(RW++?6ITtLDfvHOizm4?892C#%d_lCB2_F=>~dy~a>t(^#d7rirFj0obvn zi6~j!pntHk0EKd^2tDRxi(49#4kR`|Jmgb#yJoq!V)1z!@D6y)n+7EjR5;*vjmZoj z$}zpzwS@lfd7cGclywqL035~SDDu_`V2Bjpi4Gr7P_Be@g5O9^9(XKMDgb|p zZl%L=sIb0;)jBK8i6R_Q()JyqwTGu6w7hglgSRc$OH#El3qJ*ECTq?dTJS>vsURT{ z8BWJT<_|PoU0RqTv9h7gp4!?-ztl`?cLfK~kL^fVWY*=lRzFPyv<#@4vF^7lKpV5t z(@$=DofIvtsprX_c;{Q=j{94_6kr@H#H;fRUhPs%D!jf)rIVaHd81S$)OP?S&GZLq z=?j9oM*v#?ZCT=AiUU{x&9^%1e8rHz(YVkKOL`~bA{3*fb(FC#$3Jo-NjIN1Jw*M? zZUdxr9?`jwxSUeW6_>V#?2{k>vWaE;ZLyr&etnnMvxP?Pi{M3+la_3*^6n!5&z(JW zio^3a>b|MOlKNVKf&`xpP_Oes1kLaO7|no+5AZ(r#Nxyw;pNxy0KQvu@%J7)xT%O4 znmnB*{3EZqRp$Ns(c&wVb+~^t>x4NrTKU1!da!^!L~}jSynQ36J?TKp*mq$D-?G5N zhN3S}h?iO8fM4;aEp3Z5^tE)uhVsHtQ98bAp-~Tc6VqmCRKSovFINY?^&!}5;m`2B z8Ly>)pddH9S+xVez4#fO;D#nRtBuz0I@N-g3`SePbIg-Br{!sG(({9kg1pp%eKs2L zza{4bOSyv_=J@gst2x|RDp!N$=iY~oHto%4c+evC8yhoF^lR^mG_@~t8@~=0Q?Z|S z@#40OOj<4CZ*;hJZH-oFS{in{rcx^WUTwT}dJ`g$Ce{JaA;;kG;fp~5CB;A(8kea7 zJq6^15A7s$#+o|Nda6FhHh_5kK&EA6XbX<#)o5alPWR#DwOs&2oTua0qHMFVEGDq0 znav~Y$!N2lGJbo_i%aji$Fg9>Q_KLZJPnRpGt37}tP_!-kxV51gSB;TZavULEW_$- zyK*FJkeQy+YS!uM+=poi#h^pPWOObb zYf;wFqSr7^Z9nAo)1m7?*4=oWOX{OHzFVIii0<#hOU~GF=A<<}9le-u+GP^d=&80P zn+AkqyXLE6xATjD%rKHr{2gV!UzhrM2Y86-*QLv2N6$GF4&h^cSXWya-=2`Ruu`R` z4g@kM#5F6zEFgARSQxsCJ$f{2tflGQ_h76S%uNu-Own`hQpooaO)*vAZFJ@ zN0<9gy0LqJU^fRg6-ZC6c@j|KPZ93Cr28Bb(WcRyU<>fN6|U}~Iz6r`*(n=~?!HQa z_72MzL9RTcdv3pJEAH%Kf3?*ix((_2E|TA&nA&JPdUqu$@XC~$^oT+v~_eWY(K!QU4sys`R!}Ih-$Lp)YZ%2e(8G1 zLaAdYuSTq-@>(z@gG>V6CS5t3Kx;~6k zL4BpHzxXPz6?Q#zk}>f@Wos2sb8=dKJY_l_(gl6Kp`krN($vAf9XV=>m0H_y2t2lhFTv|RC`0kt{c2t%f~;-5SVw_g{_+5H%j4bJ36yD4!L z#d&l%QR}i#5VvN}9#9kj*?E|DP9fN;JKeK&66c9dwa$HP{2)6!Bg3s06T?}E8>=38 zu+P2+cvlGiz~o)OJ~!+F!i3r;YhT7?-QLp49~pv_4`i4f@6pEXWNq)(9KEouf){%Q z6N%W6y4`}m*aC5`uiqO`5(bQu^#_N{bxc|p>(trN5&vbU@J9iaO(8xpT5}8tH=3{a z4MoQ{1*MTDvXW`3o25{=2Bf0$knOH{^7L-j%yc&<{ZaHHP-1?5#|yld`#Iv;AYb5k zJ4CC#fV`YDIEqqy3~GuoYyX%i=P5mH@fn5u(S13%BO*Qw6_Qg4f`%W8jza2Lo`6M- zACuUj+n+-HeJw&n`Rvg1=`LS&Zv+h5)AKd)YbBa7M96WGU6rdQFQ)9!@(b#%c?5Ec z2zweqOJRf)o)75&>tc2iX0MV`3iZq~WISq4D)NbezzMrm*i}p_z!#GrMQh$mSd?eU zA|=xrN!RBcwfKWWl0yPT3R1@xaT|^F7~{;vw0I~%Vi6j$ID^_`x{EIs4al>jzT#;} z>!o!r)@4eZ3@jb#E%8rVVo=uI3@r3oD&tJ6gXG}+i)*f6@W8mAc1Tm#qO&J74=QR3 zA&ai8R;-iQ$=e26mbSs^&@?69whcl2ao1)RL`%~E3TTg3@N{A^WPfs(FURo&fj`G& zJbU(<^19)5Q*L_t)V}DPbHV|l%b!)-qfJ6r3m4WiR29gn=(XH-dvI^_maWHpw|phQSD|hWA!?Y^RYp6F`z! zljiE}?fUPI#ju_B^USsZYE*@~yHbT1`rD&VUwpjNFebI;v?BMbmc?Z`*-sb|y>@Zr zsBhx~0IB!}^mcL#V-?9Iy#L^y*B!>%JMz!gY^?}WUxj`ZCr969bwGVCy)PgH&7rq^ z0^R-Hy}R7mfWVROf4Y1WM8^MuiuxC(XazzSfgm5(_k+F?^C!nwNJ$Z5@GocjtZ4nS z<14=77k&b6^iMAEXUG3n7p5S_6f&T~!T0_KaPt>#iV%+HZ`{ntpq0RHgsG z1x}->Kz&RFv3QF&S^oE3^;8`XPL`CINT9g#=7LE_3mJps`|bHfv^LG3dA&qlS~f|b z8oTu*zNkj&_UBc{Z?&+rRKLz6Uddk?jO}kVGoR_j@PKSFT_1sP9NnRN-L0)=skwBG zVdK?4lg(SVghk+h^Rn2sB8O~5D!Yxp$!@lqGg-{*bnkazK8%QS2f`<2>4!9LP0x>v z*9ub88b8xVm$D!#dowhF$>1Bk@WpG?tSWjXAe}wl?vZJ zQlsbU?fKyv^I@C);vpx>p4@bzr_%7-W(+h#1E6q~_9|gHlzJk2di zPM%#z6dSr)eP2_6Q*TdOKZ+sPi zrz@OY#izP1Z93;>cer5Wc2db7>WlBk^F7VB8o1AdH^s-rYdva=FMnz%+=B>K{T@Hx zxxa$U^YKdsb|T#3ew@&&>md>m)S^R5l0Z$CJMw4z?8A+zeupl3ouDbhv~+=F+WsU} zr*rS?vTt(+6~8t}+1+SN?3U1Tsm?qaC~m#m!k<~oN=;P zSOXSFzP}HTQXb~-#ime8_C(OC|CNCwH;LAtG28x!$4gvUR8sjBepzH-bzv}X)T39*IsY4dOrLuL-5{zQ5SLt}{qDG(0v~5TThIB4qgs5ASkn0{SCI zxvblRC7GtuPQZW_KMx#uU6XyKg{?5uYv#1ykgVtN{u)1x*7Z7~`4n4AXTUgpmGyVe zDr6MOEF4oZ=zfx*Tru@)wG)b$#rRD@MiTYgwI*&~^A@{uPZieSv-}5|3m09UTpj_6 zQx~tZl=fuHmiuI7P2^IuwcWxFtt|vCw>QZiZ^&fCea`7?QYr(t+}MpvF0Am8ku5+a z{R7{X&3Nx|ZXKg@&y?O+?G*c6=Mm7m#f;*CE8`6~@sF82^kvuFWR|>;qi+F!z)Vg| z2$riKdi+SJY@I;e*qP#3%#}rd@vx`y2OTUA-8i(6sA*y$jD4Gt>5^PLl?7DuBMe2Q zK{G6$#C5x5X*pZm4K4lp0S)M&Hz=XnA^eMj-i9rA2Ye7xXj8toY0#UP`_}eEhtb&n z`2p3r)IY|mO_xJ4^!-+ZL-fCaU7QF)o$4K(4og|%)>lgK3jmVX-1O%!H!?~=LjKz` zF=K!z)$ksjb)+B%ykum8-&peVleWYi_028F(&Yi7r@>7xP^0JUmR%Zd5PRV<{xmgH zmcYz&Czqqt?0X5oOeP(o^M>aH;qD_w0aB;ECWrFmljLUn*;{nPqkjBy#p1n!YXx8l z-4iq7vU-X(L+RmjP)43LHxFhSF+9wLkJX+wS)CpbBjb*oJXE&Nrc9M}0t{O?HyitQ zBSJ?waWyj|CDSAz_EfKkuoJVJ<;K#IU1oIr0wg6|D`O&u9)fqt1pn1KotQiui>u&t z5MW}TKkMw5P>=2*AN8iOpImA0BJw>Za~?ysJ>Ak|(4b)wPf8WO-7XYh+w9BPZUX$= z_i8$2Yivo8*wE>7Gve z3XHIFc0nl( z>d?K^;#$bMj=3)y#bchPWo=NzE=~W=wZMY+k9C+PR-6&`zR8%VNjP8P<)Aei;U0=W zd5;?%J`JK_2Z^hblwHm3{U!JBdUaGRTQ*y|XimA-;`3oI^LP)|HUrU>8DVVU7Wi(J zty0Q^!!v-Orw%$dSFwhif}NUd^IaI>Ff!xPWqM!9{XGAk$76~6EAd~uq(s;dgOs!t zrfHF!fTYcvHzJlXUI8um{Da>0nZqi58^}!oc;D%|3Qq6N6tgNzA%}=7=^N8={)uY* zM#D{y1Cg!nq}6vS+HpC(0@(bU&lyxb5%7h_Hg40$ux6XKOT3^>W@QJf@4M-u73ZTz z3I&Nw5UVM|eR1jOau>)5%^Q(JXPVXj*2hK9#;;!A1;6l&r%!#_yAyHKv*l0Zo9pd2 z>IO~m+}-1!WleMk{;b7k2&Xh52;DT+j7lmQ1hes()N!W#RtOjzJZ%t@n?Vv_&z3x< zlH|^aS{f1(gazQNtfaPzf%ooZ(R@)Bu?KREsQQN zEL5aW6Z*~|1tZ0~s-9G-%lBXL_HKI9CJXC(tL`z`XS@%>O>Kjwg?y02DWy^T8biu4 z#_}_q9)#SL zL3QwPZI|g#J={`BCv|=()X;`nJ=q6QBl)C>GD|qJ3?) zDnpW;QOH>A`kjRl&U)s8=0jRnbG}o`fqJKT4}ZMB-c_ zwY3k{oCWO?`Mf7-$6E-cu)0!P^xVUA?rZb^}{cvkE`)(>@Q7`LLJxIv} z<)xu-E@(2-cNrage^h84_B~H>3CpEM3^C_dl|!Y!iDuCIF5)jERD&-yP1SL}M_u~xN0ei4lP>%k9e@r#C; zxgCq`d=c$KNoi~hTV(kDV`yVox$I1k-#1^DS@7@(+Ro079`7M7DR+E1TKmh7`X47J zJF&LL5aR4@ctm3I3yj_kkFe^#jlTNW?}rYH^vNHA9?mX5ZovV$>)L&{S_g9^qqT<~ zulivKQ6()seJpyuky<%9N@MU zG7pFf(~s}ci&i|!`wK}WO?BvTVUNt}Kbq$;3z*UT4t$N~*bOn4&;6x;#J+w_@%IyA zJy~<8h3X9w2Xq^m7gn9}VDv#XVHcrbYq-9h8m#>EI0$%%RF+awz6$EYdZ(S7q z#YaP2eTmT>(QTibj6X%Qj~*uLL@D)HGJpOLZzp+PSzdKj>6e##CGGBT)rd7zD}sjl z3hB)zI;_f}&gSvRNWCw=1RV0A_wte2%~(k)(sg;Q?3V`{#b06_kd!%e-6u;>%F^-v z@|aADVN`0NY;~lO;g_cy?2FnFzTU*)2)ZS`b#V2cJ;Zcl-yiRFj8}Vo z)cx%<;X9Wv_u;3w%P@k(ds^xK_6yecvRoRuiT>yT>Hdd+{PB^eHR*?Nx5M?Fm0!z{ z-M;()IzH8{*d2H@|M;pmPrAEH@V)>F;{=Sh70{Fn&^^fM`nAnfd#qd8@jJ*`u!5;s3}Y8%RUh~bUde;pd;?v)xBF?t7{5!!)aX|#PF)E*yc zK)q${D-NAu(MiRiS!G?a^hg@~97tmrm z;?IW$`J#I|pyQEIF0t`gbV7g4MQBvmBD;0-=FL7ian(_BD9M4P+1Xo*SRC}(3@>9q z_n;|9AlQG0z_D5iQFNDhcy7a}#2IL}5e}ajq6T$UzwV*60oH-F1El@2B1&$RSU@5}Wfo>2PH!{u4YjBXoF&gU*W~S%0IyTxB0QI|e zz`UgfZ)SH|)v5mlP~0L)ipnGct$n2~>*f$^>(;FmBlvu1I^}Q(j>=Q1rmujw88&1= zlO{ZrERG`Tg=)DYISEpTv}K7)A44Uo8Q&TzvMrHQ%aVyaMZo%hPx=*9JD2n*&Rh=Y zLV(semWI&r9HlbbT)PU?0*Iylrv29`r2*6CK|InLL!EKSS?B>F2vSlES#!M0iL^fC z5K2|V#6i0?Mrt1l__^_XsgA6^-t5k|W7^gCdvrfoEf}Y3PIfj)N71Gi;sRu4>+Iix zR>XtNTo#vJCZ@6@>oryBQ{5P*sXB}hUwV=aO@zR@!K(=v?X5-g@t5fD`DLE<{d~i{ zN}1ZVc*!>Y%lro>O2S$Vo>XvF+3rDia~A{R~# zEj&5m^c@ws$TTc)Ap!I6Li9qR^x_=(2!D>^i~inpz&*dFCgIfEyNGdukBGnH0OJUa zh3^V3cf#XA@2QQob%Ni^CrX{B1f%s%BXlWw+al;zZW}KcR;1`tC??vO011NqdQ^ff zA7Uv>L2gV}v3XZI`4U>PL~0_@b_^Efk|5df41& z?l&7tDf3`m_3Ge@Ju-3{dH?>VSc(5+5_p_Qyp-p(D`0OFLAU&3E9HnGIyB72ma*l1 zFHv!5cU9l-geM+Ukj?B6*Z_^AsHY6h(*NAK{@0Lt&`-Gk?64kp#dtPQPeswUtzq9mwK~)6P8&O-I^2}mTOnO9eXr(=6ngY znTp|6o1d}rp}jBlD0Ih<#V=vD=n;m*bhw$D_iw@8f)=7;mI?5=U9g##$6h8REbi#rd|!wztx?|nbc-=8b2e(%qbT!-5a-HIE9n!F&ACuN=Q zz8yt@jK>~In(lofViSA_PblWzL==H(C+7KoY#P9z6KsciaOm!G4s8egr%}{}20A~^ zWBQ#`#+V$48fcjiO|l};2<@M*x7`1rGU@oGayaJLA22r{kbiKjw{E5%|7TDHoB?GBN{R{%o6?AkA;v@qi?YtZpVP+Ixh{8H7gQ6bI;}4t3fyp26L? z0|PH^ExpXc+`;~@giFANgB~yX#f$QJ>5i_;`I|bPrkO^7pz*mtPuE*JyRx|GsLE3W z%5xzsDVNl6iTOO-gm><$fO?J>lw*~z3XQ0D9iFx?msa$4W$!=+>>W4NVCA(DFjXlL z1Am>L&_nczxp%)%Vlf;XP{mEc!?(K28LuWCLOT$?4Gl^(!h4SF*&(N4k=cAR&<-n7Nddl;kxABgI3o!Z zB-3%spRcqC<#07)78WGmfxBxNUEnscbRj?5a=K4PbL3Ck3QurXv~6yT z{=gps`cR%*Cpso;i_7aR?z1;0r9ave(S3>X`t@rU+6xw5QVva9v%%Dv*7^d|`70NL z_WK4}L67TR>%iAW^0ya`(f4BYt4$4}^>@Y3VU~OFm?tYgdOi^KH1MpjTr~ zY!9o#YbaV@`+FW9C~02JyRj@g{xS2jXG6_^uU0fkZ0)KRO-{&ns%;YPymk$gVasd9 z6W(@ZpG@LnXuZ%w|3xf!dnTwAgPz0nZ(5Htqmd1VP|%~Ulo0lz_Buc>81b%ywxn9k zF(N-9uo3Bw$AGl0+;fgncUxK~8whwT)ueMK1RN9C?-Y+25V_JUWCG`9EIG5dF1vH* z+Ch@a&HXzFaqn^tj)j`&-~uz>#180R+NVPPRq;6>&mOC^UZ$vc2`_0X zHDospucB8-ry95Hw+SZ;QlSSLPBJ{%i({TQa<=q4s5axY-@X(J158+f2SpM;i++o& zekSy-TV1B5{eyR*hTymrMP=o8f@%Wx{^)Ib>Uw;v*7v&U5Km*j6MR$kb!J9}ifw7q zLEqOP_>&2=G5t0v3d_If((1JT8=OaYnT9(h-0p7@n$iT4XG0F>M6%}H8@q;=nDyhB zlxV^FMP|)wOmln-$TXSxr*Z4UkJT`7)e=9JWP&cwmHBG{o1XCmRcu6{KkyU|fwX7X zMT_8r40z5m#4G6ExB!Y=*v8gTTZ&|tX*UZ&D#eoQ8l<|a;qJs(aRTHvn)1!J5MO6!+s-^AR6e9vREz}D`4{)Mvb`l zpRj*;z=5D2YYwuRys-@l9-tlch^v~XJ}Ta)ug9wYqY{~BfO7W)^Svz$Vb}Kj($9Vr z_^D#R7Xt?zVgAUk!MVr136yJ1$R;VOyhxlU={t>l$hQ2ErLJQ2V)wXu6LJo_{L`|% zrdzaKc9g!6^VzC|8!!-Mi!2IsHgzP2U8FVhx|=;1e0~LEZQbqt0@G0XkFFh9E*J`YMLitHp(KmlehKNL>uzXZrHB6XZ*>MNUNxG zm``5{OFGhOhZ{HMOBG6~n7B5ZI`c+vb7U<%K_Qd8bFaRh;QQPgrqepx+!c*fQtBCV z=PP_LA=a;+Dwl5>IN!>Seb-3Hd?4uUP+=*1&I^B&*T2E+JizKxgzO-idW&Hi0-=$2 z_{2nAlMd@#UxVKr&czT2O#@kGr%!KB`ZZ<%mvWLfe2=pf>CW4EjaJ?9ZPHe|3ZKl~ zL%SGNm`%7l-5;k<3`vF0`IKaH)L5GccVK7V$|u&MUb2=8s_c`w_AR?UC0ouiti^#t zb9&lR`v*?+Uhn2*BS-PYcudi?9vSkxWPz9<%PN15z%OU)9t`5CA?(>qc9gC-pbcu{ zxveDbtEZgFL!~%J_7B=V&=xLtr zA&#tp5fyWmlVa5SwP9oe$+e!uMJUdbM)Cc8d%a)RgxxlUh#_@Uol~o3WPLoOkVeli zKoz^{&|$ucjqpgFG_TZ^B5@|9mO$)uf7^BCZyBJ9)R<@wI|Mm-#<+TVNr^mb`PW-^ zxX~^d+&2j*Iw%vj>MDb{G1$w4v;7JM1fN4E_?p{5qEs+OS00c4o+tJ+vHAn__n|&F zPz*>ze}|67-aYi5SPt!mv0C)oXwJQSuJUot#&AE%_W6JlMoa!i{0NxOqDFevWIb*~ z(A*OIHJ8$ttMB#$%u@o9`ft$y$?+ z*Ae!-zXP)d1j=X_7n7*tTF27>Qb-ZAK#l0RNLiN%Z4(0QU6G2i)?PIRw5pi?>@B!p zV~m{<2u&UMF5j45kW4tb+=x_Ac+%wmyka@}Y9GG!79kT2hC~;8R#|1j1DPHzyB;?p z6I5*P>guX>t^c>RK^W@%?@pXJQC-POkog%(1-IG;+J`Ye&PQ$dhf^_S*7YK|&b3DAJ4rQ^HwX1;>UpINgA8$;64m}iTkTcUpK)}+X_dV%J> zJc}0lnV@3FCQBP(;p}cw;8R(c;4iriB>}?4=B|(?NNzr^5al49$P#;&N4x7Vq>@?X z9+%5i=T5^ktJo-_w@xtRnc)@!(F~)#t>zetAf!G{_5F2Hr z03$CmFE?J~_pmvJ7bkNRnx8_8xG{P0LhXb&3w;18B6H%tBu=od6U8q5qmYo&$Ke(Z z0(7G2b~ZZ!LsQxgDYrQVnTslaCa}mqq(MIlg+y3p;-eQoknWEt*%OoOKoeKEy|@SO zd$^qeodL}bX@-%BTkYRN;R&BvbZIW>>dJ59DW_Iiu`uo7qxh$|JN;Uo^J8wR6TNrPk zp4>>b%L?%uzs9WYuwu`B?CX2EyaV|&1pQl26Tjz`$(nzxe3m8TB1{|Kyg`?}5=}bE zwKdY!>vuNK>c7Ko@vsxbj@^6G&}lI6LhS;xt)s;IyKZTpN4rdB?b`| zioyLBJlowvSw)E$+Fveoy|U2EgFR(Yhh8%fvuWlGtR?8TvpJ;`UKq3_>UgBda~1(h zjBgXpq(fmN6V%@g-=rJhOJe;tNw|&UC37vq?E_&{R%WdkZGx@ z1yDV(Zk&Q$6@gpmbyv|uXkS0b%2=4v*@3%rnnQ-Ci6VWYceRm2pyemOP8(k)B*w+y_cgf`M`S(f~F6l7fPL{mG&MZI(+DtQj4TL!_7j0Ct9{X|_?I z!GNY^R^d1^efaN6LZidHiZP)4SxzKx(2L96xa#5pnXsh0TsYMJ<=b!GBwPPg!|mM` z*&>)3lxeydp@ikkd5oo2Hzs|fb4acVns6osSC#^v@N4|?vZ^&vpz`OIj4 z7mdj6xOYS`CTcs%+1$(APatVJ@Z8xDf>XGTJ*~3^07jDpRWh`8fnuIz61HDHsOl1D z*bS;L*b#&HqQPgvXFWC6?>^E3jYt5e75yQAYI*P14~8uWvUB3)o_>H8X_AU3lVmFl zMvJBH&LzoXb!urKT&BCdD^g_j0+yxWnG3niu|*u@?{tbi+LVl&ZCiT0Yj^#?@#eC) zT5wRqDF6AL7i97BhDk2a zkdU)?+@G~gCK7UNt zyT3MrkJayGs0CY>5oVOeMS8G)|B<>T_0KiDe>tA~b4Gb1J z2pEQ>n_Ki6-`a>st@{=?7Cw-?dH;Ft>@Es+(TE<1&3nRqZ25wa5T|TF~bwTEk2CD;p0b-fBq~`9- zL%Bn7-*w}4J`BN%VUzGB**%LSxiyZ8eD_9Bg3(m^oGFWiy(VOoZ{;i}p(O+c`b|MA zS^sq_{tG{t-bm>at2c>%m)-fC6JPBL0HC^`X_TCfENTsky<=0-9T@vlTT4xu&Ol<& zFoLSa_x%mJBKK?#AmK-IuK*rP4Dv1sfVoW-%aOP2OYC8Yqo|I3kR11X7!WurG`5&L z($K`B4s#4jGL0s!f|!7GR3G`BaLdDKH`)k^rCpo&mUk`bK91mAAtCt4Se>cqDe>8b2#f>}w|YW;oBb+)}9)$<3TxW9oxg1x_=*3jYm zZOa?dLs7aDmaLSlsZ{?zY9-QEgzwqqezvx@ej3-W&&Ffj&2;l_^t^HFuLNnr&@1LO z`Cy@mvC@7lm!OM8=x%QEjeZzQ4bhw z{tjjC;j6Yc4XCiXTQmfZgIs6BVt~rgwRobugjt8$3z^Dq#iiqp0wQRBH&-+`{rJ&m zUtOg5(=P8>p`}Fvh8}7z5{f>)Yaz`{re-+eE}lH3hB!< zWd48by=PR@SrZpK-6hT2G5GjgM zmEKW`C?!ZQ0b)W4MF>5Cw7Y*y(V6$X_rqQ5ez=Ywk&Y3H2ZIs5GW>}NmwpzJ)E z%^cbBB;aeXkl3%DPs#7UCDq1mxa4BR2CE=V%Zgwhtyv4$!awquP3>ucd^A!^OC#43 z)ikrF2C|@Cf9DKONkFFfXTR4?;*9yOWF6y8)pt++{o9|Hhet-(Z%NPjD^5zNG%a}+ zMgN@-z3oB&DIqyI88w))i7$O%@Y%O1e;IHPYvDwOqRU6_@${%cCFEb(&Myg5TXi<2 zjO<0paQS9bmB_o#;ol0}3-0pQN%{88?w%3o6BAIKLUS!c7uS#->(8QnDnUWvuSEGN zpM#P)9~&D(iz3ldDv?Xel{i!zF8WD=hulmllL;_F5>JIqu$kZHBatkY&0CJQ~0~;16SDZ z0yM$CCLKe&Qm6go^dlgI@rS$Cr0Af#AY`Xy;OJ1tlX=phINhdo_O;!&moc3Q3&E|{ znFXJiF55O4?(~~5F5ZyS@ZBh1LIu>iQ2Ep*9lu6eqitp^DJ6QBgW(rOmv_6pqldmXiI+-mCPIL*a0l5V|K3{7*7-zHyMfzTr4gzu=oTlWQ57If(Q-) zWz4!oYoKs)3>19O^s57XTYQpv+PtVZpfGKqR{>i*L;?uYD&D5`X!C_TnSZZJ7Oi$% z>(IO|U0i8C8*{M#Tyc^U7Qp9yE3B%s5s4RMsjl}FsVLOL5V3Anov^WUg5?3JrwR@s zhA#V&!+#JC{~AyljLGbYI*wX&Msvz4laM)AH^bEjg_!5vr=xocgy|p}q~v2hfl{N1 ziyrlFNN#I$!4jAW*urU*x%UzkC@$^uLmnfk3P>_joB~OUBD5!_Kpx;qAvBUNEoxLC zBED$S(OzkY_Ao>SNj^_!&YCI=OeA{@1kO=>PGQov42PNr&7V`2^O*=^!0dEW>sedW=dH@WGh z9HSO|Y|y44jqWd&uV1~|>>;C~NEWgqeC+sw(*-J{0 zC9l2X z9qkBrep2(0Hq}wE1G;FH&k;T`K^3W8#~dB=gVleEz_Ew5QM<$ZJkYLNLhfqA(tBPe z7j6^p0Mc*>=C`i?lVtB?R3^|G*`WWm7f6yz>Dhml0|k6gw0=+70tZ4;GGlcK0^>Ky zuVhnkDH3hTd+A?MaVJ3c0_!!=G!kM`z0^$;SS18{kuy3|i9MfCQVB|S%k+u^=h8L{ z%cdnKAGalJNJ|5uGVY=X7xtGoFT=Sna|fAwzCK`SF)~$MLM#plryY-l8b_s#NtiJm zDBfU-hS0e*D2Lw&wQ)h2n;W`VhmC!up&|dl2&yZyduXWaXkS&550A&1IKP5 z=O>k3pK7gg@mX1N{qca=Aekyru>s1$<0lnAp~HAL@x9?F+Z)SMA982w9*O(+(d&g8 zyD~|tAWW5V-FD_o$^A5vhedX15Iy>E3Sbu zFCQn#f`HvnJ22MS-O@6H$M_xhs~rO>@z@vJJcE7yE4{Dt3_&mgAqbATL1WOyX=7kyO_8JM!J+aKbAnOk^4Ua%1ag*iuxQ7iLzq@ck!bkEfNzJ1%|zyin!Wa)GaSXC=5T4;9+`%A8Ype1*Z%Pw=L(4QmK85B&}xGd0r zUgB3USfc_*!#2<^tzH~^?8l=cAu1BSoYayUi>JydDyeZbue;7bB?&)i{SH5WV^}DTcW1cC7Y0dVR{n5r9SqK?SUuNiISI8mQnJcCJt#D7T*}@TB*k?21qHX ztt7^O#j(bUphzb>U4|mco^Q&)DVUqhmr@zRO+~vzfXHh zTqF50)bN;B_{*<&7BMoRdZ@LIpOo8PYdNlb!+Rn7B}7LQzW1A23ckwYNo7iR=`efnqdJHblJNKX+-`@4312gQM*&#>NZ1j&Nm<bm&iYT=^e$z?$L>6{_9Q?t)i zRk-i1fMtb?ry9ev8Q=TGEG&n`3KZ6)bIZhrs&lN%SrZ9R@=`mmx!{g(%IuGpsnShr zG`u?$VPyxZK-syuw`jlXk_qSV;BET?!S65ku*wb`V6gk*@(bCI3Z?#Vgt97wK>i5M z6x1PlA8P{343&M&rbo_z7iCYGbbx{<@q{wk=kZZf@`^Syc_?LSVvwCVRs`Kl?Fcy8 zRRuz*ntYX?S)L?G5*NkC8*arjpxj4k_KLwY?2ctn0aR~Etfvxu6=&}G>|iHz>WeF4 z6(uGRp-feIh)n(}wLK+)wzwFFF9m1X!|yCGbG8J=`*>gpQ04)*YIt~DmFL-c!O+Wa zF+-Wz4&I$`A+oXcT*hzN3~=Va{fy3bTKW29k>olD7au=rI`ierQ4$w(V<9Lh_3r!} z-XC-h!Enh8wOW*wd){pYvV3$-dAicd!NL{#JltU7Xq`ANCEg_{JTcm{t0aGtT>E~n zwT8Hm2lzGNvef=c<}cnBdKCAQs#aF*c)!1us?K52S6b(hTjccV*0QoEP9v>Z_u_q+ zid4qyP>=xlK)_WMy4NIXw#WK{R^!-h&{%AgJZy3TBu7qL&*^C4tIU6aI`U+X{2zUm z@RtnlwJecg=MYYm8bAhrae>RmQcokXkIVwM-&DqEh6t zkv`je6lW*j26qFN+}6x^3aLb!!<%%BDOQFrr|(P0FU@_)toMQ}$NV3j#0&?djZu<^ zA8_!#HVHF(xBEx39R9Ngi`G*1UGQySb)^3A+yPv9h#o!@O*K`hC&-gDjs5;9mjJ*< zDnyWLb>ZeCn)gFyW%s=?JI`vaS-CF|C$?FTXN7*OJ&iO(>& zaz)XJ(KOcYG{PNMQYuZl!cVQo%f)!Ip)3)KKErdQOuZI3iDPy*dByF%#FhKV$SQrQ zlgR3fZ-#2PpCk08yj}X72qA-t+o7Pr3w8?mS(X2C_$w%uK-ngg`qAI>YzTNs{@D*4 z7Yb#Y%-4%ZhJ>c8sTp$UPT@9x94i5tV`%!TSEg?~&%!j3P_1q;IAaS;H92`u`6j?+ z%X7q^k*b#R-x`14Yu(szcvqPx@RUA7_(kqh12<-@0mbzG2uB=zaSUZ6FdPP;K*A<* znbG(=nUT>=>q1pRR#WBP7`BJg_re3}AG;iTbWKc5uIaHlJ@!VA;$EHAXjv3q(Pha! zhv$C__7CiCId>{|9ttLVI^r59@opo117l)hs?KEabdsDVL6$Xi@XP|G;vAliKjEi| zc0A3VgznAPSnq103!xTjr6mF}7PsB~EW+2_DI8H%0$oR2TZnKgSx55=BCvDBrDrue zg8rB+w&Kpx!g!vTo8R(-31Poy~lAHP_r1!NySqbV`RWNhHHcEz|>mFxR zQnIWQ?_c_Nq0F53s!uw@S$=qOur4ioIes0~DaW`|I$pprLgLsOnbr-4JF<_OIuy^L z2DR*)earsP(_{>>P)nZ+SU%Ticip0C6-wuM&9<^OO{CPfJCgh^U%sqo1YBQ!|DXMZ(VMLU*HXY=tbzV_T2Tuz2q%BSNnhVU z0OfP@!54>n;=5^$kM_N;=^BR(0#Ov0Q{&v=qH=pkEM;o%n$Q!1fA!ty+iT}4BH@3z@AAxzoOEcnIsF5pB7CbT-c^q|eebxG^ zEfPU_)jx0^@7KIV{QLKeB@+H8@*`ffPtzd^84L{Twb>*j$W}!ys6(%B0!pC~kv34t zeE$6TtK8hfN(WebAh*4fu#u;hCwNm(DD!OWzHzBh+4E|b=1RH{)^TgE?pTGo{!}q@s<&e$`9U%=-&J}`0ZG9{>Txdl7cvVc9$#pVzs`J zD?D1aRp3!GD%Cw}2(mQRnNskU9pZ1gu94G|)$7x;;dwpywo*KJEaGmeS!QVu#ztQ& zt{&6vuGVH80}TrG)yfa}wZ4LI6$B=ezE-{)Tt^ds3$$egODv%S!9rO3E<|;(zI~xa zB9>QN6@MJ%297yx`T(?Dh+i+?VPJU8+}wGRz=q5zbY^n>fDcyO)CCpu6HuO>1&q=i zCe?Kif{tTi_Oai7TV+vq!lA?7oH@&`tHc>e?1W&pO6e0PEXGTpCj!TW;zTI!UyO}~ zJEeus@4!@_Pcn4>;AgA&F4Wz2qQ(MXRvOBs1|K6++O2aIRCqt4zfy_#J{d zan4!~E`raoUVgh{c4zlxLqmC}X|F05bD^k99CxaPa3C;Yg!&$K{4Mmi6|NyDY8lvT z#^F~KB)Ddz%f%s1XUU_+ep`f##2&`P&!RXk671{HsRIOp!%T!=2&^wd=EwzHo|>7* zQb9_Dnm_%0jG**F0%95%4{UNG0#YCmdf$V_uC6Z77zo{P1Ju$NTPobB8~|06TU+kJ zcId!;TYOMghf|^zhxcCaG-d(@w2CE}IQKI7#5FL`dunt}{L6pM!V(m9+{KYkF{ke? zm6RZJs17TnyhqfQc z6ew>^RPz&H7nYVDfWQ}=)l{=mBjAv`I%#W9v4bP{#FfRTmjTF2#llsVoBIG9a8Z=o zth2j6o0w(MhJ)S$*!d+kAQIJV%nAkS7mH{r>s!uyqQOIoBKSRiA}sc6aa2%15MFH) z6_BH)ZlkC^slQE2*D)&YJCLVfC2!zCqH4q_?h5~CXGez|b&uDwPH1a z@A3exgGCu&QdWSjw9RiJi{f&7mFXSq6LOn{PBOtm)CN_<>P3jXHu7-OCdW!byK;!d9)QJ)2PhuJ z9d}*8)fT-0l4dd7_%fqmI^KLc)#lS4>x0LFRQ{452l&Y+mnR=rJN^uN2h>ftIaEe% z!RYmyXxB^NGPpXNj^OA*Rz=B_>>RsPQ~6 zxY=-U;RbZDBmaI*a6^%TL)U}Kvo8Z?<|rWI{bjnMsdfm2_s0+c`z`=ZQ8vSw5E|B4 zrC9G35vd{{Qjt1)KJ6YqLbZuZZfEkv{~UI;xxek72K*@&4W8KZynaf>Lk)dH zVjselIsEo6RBnDI3u?%NEe~+>^Y>hj0CgrV2!xXtRC&;K5>U?T4^{#;#(w{gJx}aB zQsi?%c3(p6SR#;c+2iwEUbDE;A((z^9u)wGy84H4`CsbJ&(+-?N|XK|(bd^0s`{wV zdGbBuF(cvBT@3VM~`1ubI+Jya2ru_lrc1xho== zks@)}A9J}s`c5)53lJu3iG84>;>570NPG;W${Dx1PbrgSa`zQrzl}9Gi%rWy*-NEo zXHQQomdOT~vjI`{XI{nWFsGFn#O?~;b_aU}XaBSE3z^0HN-x+Nd9};ud)CE_&3CPi z*NW5klgx1+^IHp=Rw0-Tx85+yuoL)BkBjCYShttFF_fogv!)iT< z`w&GAr)fdbW*rr0Rz%f3en1l6fOpjDAH#4L2R{bs3y63q;1G@C^8SQ!)~Wvuf;&Xp zWn^Wk#=85#xlUQ6aMdO~AcEwYho5g1HeKOMI0oB#C0XWai5qnbsgmDsx)(_T;J3A` zs_o3|flcA>Tvl_le3k%d=5x#j?xbR6NGSZjip-(V>EXUDGHM61bJLZ)_25hqNo0#=PBE5b*bsX8qq7?WxXe<08pj`vh`&=Bi@F zdBGL~LV$!GKe0jC2#WVXh87TbxM0$njgNsW4yG)E$wV;=TnQnS$)fgZUqTje`$({{_fx7aQTTMOc;^ zut7Y{ec>Edyn7sL2r=F^vk4IDU)ZJK20Ih5YG5PHlVT+sYhQkZo%S`63e1G8WTERpX*k3%|L=$bFuF zqb>%58VI3Ce>fQV!z0wBf^1J4O^|a~8j|5bdZ}m`I)tKy6nvpM0;8(AgkZxo0_3R8 zDC;R!Kzd+1xJ@W##ccddP!Pp_ndt>tX22Ydg*c5Ma9F|0F6f)H0KQ4z;R)g6N-q%N zFr%N9#tyDj;viBVH2LNDY0H$6(YiA07)-cf82+jOC@Jqmd63(*QG{ztU~$#h^e>?H zl@C-R56h3QdRwn^=|)w9cV9x&9beZnGFr{6BCg;Qv|sCsYT+s`fQke6v-MR4HDgoA zgsbW(sm)(Od;XN{vp5^O)@KWDm)NfhL?=2$=St%zDaKf%pohI}g|Zx&X$4i4$g=S` zj*`|ttn6wk;?HcpVNP0A=p>(^aJEYSIZ9esK{BW@XDNq+FxZzyOmMxACb%0*Apg@d zTje-N0*Mmjx)J3h8-K6mgFf>>?pXo>7ARyCM>1^h@0BTmA0oTOPs|J? z3~yRZggg34s1vVxmVlK&nWUhJapsc2qZi0DGY!D zz~lx`X4;o!feJDO9AjD9Fmb!%9%Ts>=TeEhnlPdtqJ2E7L+CsA(07$Nh(t1QKNDxP zT&wj1B{##;_P5;Lr}1Y`r7R@-R$*geURLYz~9{~EXg)xYgQ-6ln@PsLbj zlLa$|lrlfZbm{7I*{A6Z6(Fn8r{0dTVEg?hyMzb?Fbw6|Da>^-Mpi3=OLz==ngT- zojb|Uk814cOy~^J={E&Qk*(q)(mSQ6`OKnHi<-WLPo;_y>959?!K^{bew)ro?e)Qd zcWcyH&RS6&2fkepApKZtWkpTUE-SR8zlERqfUgnw8)so1f_E2wdpAK1!uZssmcM@n zdFlT=|;jq+*9a`KL<{y%~rE_nScW!=vni+63RY*&FO zX-b4iRI1!}v1Tcddz0PkW?7?|3X6gN8{km%$=L@0M;8J@P+E}H{_YEsq04F9ogyKZ zZGjnc8Zw$!GrooG304Fn&x1Kxg}4jFX989L{gM6_q8%E=$&p+T{>t}T1<(oyhLD|_ zoAy7)IipDZS`p<@G;;2L;u4SbIyi4m44Fa40Wg!xngCoZe|vZUTx2RFlA1I}V{5#q zvKJF$^s2ls@9!iRk!x?7tMq?18SI2UXV0OCnQ#8?TW~mqum)4T0d1t8L5bztb`MU# z!kV764q5gJa4e^sm>Ij6Uh_k9Num=rt1{!oixJTJF+6JZAs5xe_aVT4C%;(hLa!uS z^wGY~ZyU$0N6~s9?vA|UQDtcXIcj?Kbxe8s>KDLreflJ|^QiAAgf7ppZ;-J5+_zH% zcY>cG$|hP$Vj?UQ4GbAlC)5Ins6G;yz5zMbX2l)^m)P@dg&_!rJ%eFAEQm3u3ZvYl z`fVns9pKD%IrJlP8U>IKMEqU^B?3p%M5dhFd_vpT0-X|(pISOTxmmui)Q4y^ii400 za^?TnH%*GxOM|!r?y(lUAP#V=W?g)7pHoU!S>K0IT(WhGtk?~G!|vKN6#@YT>Qs=O zZfH0>VWHz_etI;8G=0|0Y+zua$uAg9f_%#CMGDZI#H6osy&pU03~dC+DcR6<-XPFTx}c6+pz9ATfNY zG!fj0dwGx%ykclr1W9FxrXNIbAz2T>>ID@+C)5+DVOGIOcVZ949GAxf5NbC4U{ zB6JdT+ls{BG!ywWtf!P+mBxV@Jdav&Ii+BSU;)SWzrJhzeW)^D)Aq2ComybXSNN&L z1R$c)3&7_got(474Tc3y>Fcb4^c}+4HVbF<9DB{o(bi$j@|^8 z2RPG66dy?9K<)^1BnyfI>HSgM7l`SR z-J_<;T7e*aQ(6GflYI9>Wg#V5*r639($AvN(-`q_cgWn0B`8@+$UM|JB9p^_>*$+v+I2XKlrW86oP`p})WS zV?A2aHMkg@wGRAFO+m!~@_APSiaZ6RRiou4Jd$JjfHu>vr}-y$5xu)h|de{hlB0( z{y?@ISdi?(9auD|wYhdd*fSdfMes@BB%W}#@QT0^fCx3VQnMwHWMH7LL2Af@=8Zq) z9QGHxc(H-PkKYjsB6l-R6zHm^VW|Un3Pbo zG0F>GqHLwsuNpWtECB+K3dXry%^bByUsVZ6pORLhvw#c<$GEmD{>I;;kCgG~G?_3e zB3ODaW08I(N=fSP#nT~R{p%wS;+4tnI#1Mn4|XPc6(;*)g; zhj7vHhLOc2DDy)|V>84NyFz(SeK00lsQxp~Ibh}(wKMNh_-mf9vb69sllo!42Js*W z{arR@6vsbNwsN|CvN1d~u(_(x$*H|t0AOp60;n8|FQRGG(*~hP^h*G@>d_*fe>au@ zl$?~wDsML6H-M7w_up!I6*P`FQ8@q;lKdwU)tCT1k!t}l3?@mN6-cpGfRyo)%b8M! zo~rTxh#5;|*J<+|ZMJY7EFSq0!MY8J?u6y+dT4<>91$ffZ*@gs670|8m z#riSN>0RWNJSe0<)Cbwhz1LcCvc6wiG!3tsmh*l z9m8})PLk{1%{$PYTbXXaGObDBO@s7pNok)(w&qm{r1cMSiFIVd%_>1R0_B~jkiK}v z5KD0C5=L1{ZChOw2P*E@cQbK1c(qXU=GX*;Lb3wa?9g2qiwgb(1?LIMTx`k(z^5UW zCDEU44cM*SwoMi=ega)?sn4#5NH>8a=UykbC<6-as9ez4FzRzQPw1c z$UWtf2K|aPocDXCaQJ9n2|>#$^UZ{WfwH{3yK8$7P;r+C2cF@ykN@gIXdQld;mj}h za*dl+Uq0`jj=5)iLS4(7L{;%Wr|;IOn6_!-1Qm;Zbrt_!7Zjd5hBbEWx=PCFUr}#4 zcIC%K9lRT@&Cm7K^%E(^TPOI{#M~FBQHmZ{3qFSh(3IwyPdHk-q{Xj&{_6g!klr@^ zCTFx0#bBg999zBrLF!v)96$Sb0vhFQ`b>D8RS2&SCpr0v;p^<|3csS%^z;Kcr6=X& zf-+LCW;Im65AWy0cZJ+oqa^K&2&%c+KXYkR<$YJ9+Y{~SiAGzHf!zPt5M;Sp+q0?+NGv#S-vk*}7vQOl*r zGVRn))*IVH`e2|k?x^hw-BD}J1Dpav)Bfek)Iq`qbbmU_w{?ndgG+UNjixVc&CKrF zRn^3hTNcjf%SOcFh0C_YT-?n28D|TnHNL<6Io>`q9KY9GuK(g}Zek;?@Ic)LBqY=D z9awXDD@6pp{`R?ob_EIdsVmKV*5;Rp%f;Mh%vlwCa_~&!n`2)$@-Sk4c>dta2cQc0F!1#FVwKxqSrA)GrqB&scflV>NC7=W|w11C860_f$FS z?OW$A*2ydkA$6SeulJ&HrTYkcX<1 zYW*-#1UXd50b4y~3Ej1?wdxeJTo+doxD4Vuxf2@5OMmUPQ`FAI$yo}nOTlyaYZa%& zgZOMOe6vdk(2acIpXbrH?Cn|IT%s0k-W)iltjJL?S+`C9o=ECNF*T{`BWbTFxS*hp zqV`z7U$My1M=av%(RRHW9FZVNP@uMORiE!%p>}4ZSKdwY^IUyb_HW@>$H8(e2;KD0 zvAmY+%f_N5UTB0T8do_JV;oRsW&V?vMa~03St%dTo2**fI@c*)x3nCBrY0cCresHm zBBvaP5Rr9TZrGwNwmjA0)%t?|Rk{C><9J(JZlIPyGuyEjIvtr{Stau*4Uh-W)^?yS zS6IyW@QvxgI6rGD?A$Ngwvj;?L zK#XT$rZxJES$1XR^{EvpyvLNFg%z2iFJ2ag9SsmSvx9Cr;{Jt_h8SMqWd{R`u$`(e zKHWVlexAp^C%|;oA4nU&HEi`uZpwB65SpVDTTVGSv z>x8IHMsKFumzn~#y15G$?2VnP&o(3BgQD|tGVyk^iO0#*tK$A8i^4@#iOciZZ1=By z^tZ&GYRN_DSf`Csv0f^Fk)_f(P{yZ5>qBJ+fR3Alud>hJosnQ(yv-a#fP(9^lMmLy z3{;j4475Da?~Jpcz_*c@kA{bE&-(g=@&tp$)B?zJ5?>{qc~@_h&zf%IYNZN8IAFT@ zS3C9=(0hbUj->T^xq(eqZ6VMX>&;h#3T1%{ozItv{4 z8Ei{?(XvZenBT^7Q%*@K)-YQ`Q}yBUh*`-rKLo z$lBCq>U2tsyLv;h#yZR+Ls(e2YU0?dMP~x+AxgH*NEE8MP7zUi((nn#!b2;vXC69{{&hLDO9bzW z%k!%jbLRa#h@2bQQY`KI&o>nV7>)A4Aq|M)g<52BSzB_w&EwT^poefDGaAxAwU5@* zD4=oIF>2?~yQJ$H^}go7zTOX`=C4uStP^6twLO~`QDVtOj}7`?fs$h<)-eEhdY7jHV=cWPxor%kxULT}-#^7!5Y#2B2I?T%Oyq5de- zU;zc*V*@z*yNwOzH$)@RX?PVs_lbq&FchoUvb!=gHv2|JZomR#JS^Tr;E1tMy&^gG z$_Bq^uN&%h8F(2BVgd6VXxG#PfQDY2TUJB*gk`;s#>hzHgC?_r0=L<0YD?qLly>D+ zKI#VjutNH@ENdl9)yb@y6-Q>2?6!>}2Gyn40vo*_`VnM>d1+?FQ z0FrqZL<|HMTe65A*s5Bm^s~V_rX}8c>4ycS%|q0#fjWY}khCCsuC2uo%Lf#s4V{De zUewYpL{J_Sb_{}Jpm*49y1Ip2ww~n4`1nbeIypIMQfx^gN`!@lMc^L?(GHfHzB=1q z)!Cxbi;aMLrmA9T7du?MlM*VCSR~9ac5)GI+{VAo%EJ-$H z%EDcIYu4lT>gUnWhHjDJZF94Lxq0Uf2`?jOLdhl+pU82w45S&E*ilbYz4KuSK%Thw zETGll6js%Aj_6*YXnnTd61J!VkwJ68Hywz5&lYpe~XdjkIRqTX-^rG(Iw zF#gJf1h*1}<08krFLq^5$~y-0ellyF=$i83JPZs+9MOc<`_A(wapze?yiX1>zwC=u z_n;+J#yo(PdSp?POMe?}?a!&Ps9b*K^9~>AlEbR)>?4nn9(eJ&SwHmS>&530v zIA6OwEKF~V&$(et{N8e-ubVsKj#CMY=?u2J8QvkfJe?F1XL!h5|b`F6LfrdZ@Sx$ zVoKjsJdsrVVG8j$lv23MF6SiM?~D0KxObp?%GvKweqC%!J{00hlqj7-z!dSSTjC(O zk^eR+={ks^&VH~-e7mv|RHK3R@3g$UKw!^Cw~c)<%sDJ5WyD^xa-}5|Ig-LIo^Ue( zGrwJZvzXlMyQCpLF_m(c#nEyP*{DF5uMFZ_wRItgwXJzEG@|cK7ZU51$aabuoe+Nl z&EX1;6TA$TR76moJ@-5;BPv66wzY@~R<+Y)f9(L37r15G#~0vAWAg11c0jp&)$S%mWd-UpQmB+W>o}B%#va-_TdZURU6ek|CHwc-qfYcAsi|=s;1hZn`JrEOBmt1Aa^L3ykt|sN-5`({hm(OxKE<*X6k}YGXI0 zF^iP1I!*5X)OE*+#PN<#P>3#(?ElsI#x@<22X&f#a9g~J+hAOt;91c6RT1|7YF5CE zRg<(M5Beko;O56>+l$x6N?Xv=b0-$#g{BO0{DjXz|Gr~(dRspq15fOE`v$HYXMk(# z@bH+|=v;XBTC%tgRv=UBrko<;fn}_%RXh#1{?KlP)|e^frE=LSs4~If|kr8*dq@am2V(sqb2(g2Xny#xdDn_3T#C16S&WKKa14 z_3@Z)%G4%-tR|(-=6DZ^fryH)3bq>@32arS0wLtUOP@!1Yjk1|tFc#w(py8YC>Cjn z67)-QE?gKJ@Pzp+h6)gDv$bTchs*q^{-f$1Q)-brs2$z%wLhzmeu>J>6?AsmnUnDt zgV!_cKH=dT{XyrMD34YgQBd0G$;l&!Twv)k4-qb26st2-f!*IoHwUHE$Kx1aZOM;y zZy@dAmuLxbPf+q3#OHsWU0tXW=Xw9h_WN7n>8@`^A*stNq$=^Y?svpl%?|&Wy5Jp~ z={tbAk#EIHHEIP8w}7>%FMaxMzhIYCy`r}98&4}0l5zfvntDayfS%bxJTv^G@d1gk zF1wldb(Sl2DaR-ZX|#8(t;J#V{;-xt*)y?4akXt$lgZny+eeEGL6msv6mGzWSKZ_Q zI@5#EW9O!#eTQ%<_2?>-kTeUNCA7Avt5PN; zaF;72Laa+S(KQ=IpBUo!`-FA!3hn5>XAXIA@=<*Sw)5zKwlnps?jtp=qTU359vBxd z_7+qu^oGj#glQjXL_9R@i8an>D}A>QTO*71?kuH?ZF5+DN&1+yx2pNb?2X@4tAqsb z`*IZ0-oAYce$9ST&L`uu$fTk5WQfLTtHoOfXYa>&3O!XI809%?Nmebi4!yLNc6^LZ ztD07(h*veW$*E4)7-3`2@#w^t{L(kqo_JTv!}gU^zH{d@@!agE!qjq()#p#FqE3dh zj_)wswJBjBxMPFG4-3N<=&sLbt$p4tP51lozqK77H_+2BgUL?=S93R{`}*L_-&BE37-I=9bxT*a9%b0ylO z{cVzX@(^(=wKi{9eXS$qbyM|H@qfr4UgcmIR-3gWitHv-Bz*?Y#2V<8KbTw^BKR2@ z+8+lw_}MwZfuGI^*Th!dYUTsEvGDWBuFJVJIO@cHiRBN9?;ASflZQYz>)B$0V_$hn z2&to`5e)K4@BW2BOw^mEt3A;6vNtr#mYJ!j#nRj)8i82h1f<*6@du3dfW^t9S!%8e z{SdX$d2Y&bSw?(t;%CTUiTSIn!ec{q(%NTJuR+)M3b>}CM`nl8W;Nkz^6$eQ&Ay~p zIiYq`Y^K$Vf&(94z3hNaJjpcYrgVQ>kb;CcFBOd0#Kc6GgC{Xt15=r)9q)0zs@!wD zVMMY!1%EbBwk4AILSJa8DETz1YPr!%*BQN)Ag)s)5c}DdhgXyvsb+f?7hS?=uF=q; z?Ds9bafHmT`QqxP*vtnKr$Q|oWy<&%JDt%g7_v;&VmRJ0dwEvG`IN>UB=(`AxW`hT zTsa2_pYr+WZu_1^@{oN{L|oC0Wr5Whg8PF7`D9PG73j|jP`x@4LWtJ>VPoxEyLo#n z=$FeqKY@puV_IRfJo+M_+~#7mGXVxJtJ8Ljf>SUJu^21L+~SNrdV^7`ur1V|mmB6@ zw|tth=S)Eg9&zdChqQGHmmKFRc4Wv~nPq=ckVrsl*e&@Ec+|pEt28Ozldmdbq^ryP z-49u=^$sDz!a17!I#N61RXuD)lpTnb%KedUZdI)C`>|2p7#u%bNorAUbNvbuxNN(F?V%QO) zghMD&E+8a-m~%!4UlQrn)ZS)28#naAdrwvbHYTTktHakWJEyZ}&yH$>5&QLBq;u7aHRr07gkX zd!SBn+*L_$8CnQS8ekf5dbe7mI^*zChrAZNx;f5=BbR?G1$t_I0uz2V^5P3hSaaR( zI2n>oq7vRYY9%C^dZSM9w8~oIm~%TN6k1r<>AHYx(3|g7Ul#d1;Ka^@C&~jW5C4jj z^>6#?Az5%Kl&P|kR9UI!?}xfs{jfmxtALTu)FPxmGSerD4<8pwMkWGDHJE5NFh(M9I!kGNhy03}oZ zez(-cE442g<%t+AanvCuDSI#KXybAf*Mi%Gep+O67t9C4X=)F_3u83Le)g>ItI-?E zy}jP!RlXxZ03}FWE6>%SC6&y-DcBn9J3p<@0Q;wtP~t@M|CF>>;wQfNt#}n#LWt$< zF+E8G2OM)CS3$wn562&|eE+A%M@(}Me^T*bnE8ZsUpq$J2+-3cZmYj)b??k^=Q2n-kk|??zLK@=d1>T9E`*8$kn=K4iI8s-p1 zbj;vhx|eexalQ1jWQVDhEOIyu{|YWG@zedl+q?)IpU{X~H)$-cUY?%mSdY;(*JCYL z@%UbdX@@9HL&twU(Q3536CTC$H33&_sm_FVyNB`&UWasccUvFeH-ch8a@?klqOHNK zVk~C5zRb5%CXr7{mT)M*=w|}Xht(mpi4x1q3c=pGWjAzWpL9ySHpX$M#t(3$NA6R$ zMeN<+PE*{jvDat>a2{R}6#? zz(ze@F||ZtD#S$({G|lQqQ?cpMuhDFL4Cchi`#NK2_6<^aAm*xQ~E&e zOkswm~i|zOb_~O&0(~SG~3ON-pS}* z7lyq9Qt2O(^lUD?8jgNAw#RdBp%-kzb^)|~ezj+iwZw_KuVU=FKb-p@5DP>p)$ch^XqFHyI#HR=t8 zc-S1!OGb!nXiRpvY!XPR<|pagagw!Xk?R?}8{`3gFv$RwJG`XWe*Vh#1ALzPMg=yX za!#`L-!&>nKqaTSSL(1K%&Ux)4my5}4>v}TM_BXLEpa=j=c+W24N-^$$E?>*^);xQ_ANunwh{0D+pMty$0ir{T_-* z`WY-SG;N~;1j8!4^@Uc3>q6(;U1h;nzo)$0!@aWSgSdZ_sK$=?<9`16MJ4*zAqXY& zZs_#nl(W{-B25<;7x(jtBls3;W;Yc%0lV6s;SR-Id{OOIx-}^xHWkoC=F@~&1xcEiH&-ONvc^?zb$D_Z)aMluN?%x+C{;X| zsZ&{0!6mxg_>__+g+~s>_InCExv+!5Z*4IvI%K}%Cg9XkEvI=tlM#%NKkk@^o8;O1 zBzBUCcKtIiueJr6i4E-?Syob#gxXyO=jGsfXWkRz(*rzOl@_w#11FL;GwWmhd=`b& z94Sp!l5#3uSJSa;5F|UqSJvqwd|Q>@vGThG6)#^F(!SVg%eg~V;k8}{M+5ce{5*5? z4!_`Eb9{9K%U^T+OoYyC7FW*M%eni;85)cRtmODR%a*x{`^`1AWTB920~y7iXud#8 zLxYLv zm69TDxwA#TFaNYNiM2?(E74+F2}oz`jwhn8`Tq66o;O}P!gu2Mj#M$vf+f6k4HDNw z5>}$m|NX|NprbSAj5hV>)+e^#%<(l|DL11h{cEPGD`?g|X9DpuRY%pDV8YJKEKgYa z*PAwuyRMM9Lz6nt;$y^u(}BnW0b)3nE&R`+>3XtKGcV-giZ?@17oV5w;uj?P zM6#rx4~d|>-u6&%mpMyyGs<+a!W2gY>RY$_uRIU>I%IIvcT(@o(E^rNKF-chz4-TU zJU!~B38{=E)->M$FtaBKhU_5Q z6N_3rJPL2(a(sI-4E5CqqyIV7*#Q}^tHVZUy`RFKLc%MwMB<-w9a8pY`Ig*-rrEr$wT(chtdW%~``Od;j27Emz$rzPLYttoeXGxa1!N6a`U8f_)+!)RlbW$C7Zf+p5_kIEW!@{ zikoMm7LWKXCEJv(&ive?dc{tC{Xx>92gwI7-rT@fufw?w{^lv_Redw;Fk=}ce>hYw zuj6t5^+aT2(Z0N%n={N(v0iR8)QG_2k9jOsu}kQ|5=wcaIfwcN0cc;d?n;w0A>+XV zMumQQ()-wTr>q6U0%y4+Tg4vX3y&jqp`5Z?897BY^-av{L=Nn9wJ~vSPP#!3X*rfF zw6NQmP{n%PotHaD`Fd>iRH_S8&tWnfEXubIuQ_!@MIdFv1=Q3|QRKC;qBWfbmJ(7c zk>{)lciifFPpp0dl0&IiU%&b-S7gmc|BG@b%Ka|-m%6#aR(hxL){6N%iTm0boc;iI zRYf8y!028Wg3_(Kf^$a0GkBD_Wz8D(gS%>WiN)g6{{v(GVyWmkY#+}vX5Ukuw%%kP z?7EG~kmIr0C3F@nm1gUjgqdQN-VV52)`+*#ff_GG0IehUpXFBV+&S2G>Sf7%Ydj4q zSN(Z?r35j!`h{Txu+@Ts^xmHQ%OI{%c|VV2FV(W)adWb@*SboZmYUl;AmGI6cGsCf z%)spk$Ax?A9PVRdj*za}Z~3oRfoRHvSG|`K^#1$ReXNmypGJi5`7U*<)pc!LT``#D z%#SU|Ik-@L@3mIn(Nk$jyY=<5kSTrtyZfO16GVpucs$9s0+G#&SU=A@R3weEkKDId z20!aK;D7mld{o7I4*6&t*6>04j=xULmko&s$071w`ouH2T1DvCek9!hv37Uhr*BJm zBIp0q8Dz&V-`tIwQZ?7p{;x5?B@(cb=~HR+@wIGh=>PcchK32bONH+9OLza*pj)G@ zVbI7%_#cBdt@4r~{W9zkFcx$1q=3F8G91JjzvEXya@D_VfCO%%{QBkj0J==!e+_&a z5P~8xTjzj(^FLPlOpAZ?+?F%Y#MsFGzg9W|GBF%_z}Gm;)?E9=rQhuC|7*2U zqx`xJBk-{6y0-r7IWorJd*d)0=kQ$R;`PFaQ?v05Jfy@gt7H@LZfGt`JbJ5dRQ|*n^k%*JBs_; z%K8yH4Kr}4H<$gcP&8QDq9Wnl4!c{oxM0HNHa82YUO(;p?ZWtT2PIU8nb5g&sJq84 zgTNds1A?PbF*YpJ*cUl+&joBe5RN+R_tj-&1M6{(_6+xICAybEJy^YKOyDOoPJ)K0&FdLB5<2hee+NGITFQ) zjjaS z(&CSTU~PHm!?wNF0aNW~24`CEi%+4`u$7ftQuZ}N(oq+dheM+aviT##Vg($mAN+AH zwjU*w_|V=Dzn%xMbe^K_RbQ;SaU1nJ8=yGeB==fO*N@B!<7CKX5X% z1hsm5xmGKr*|nUGe%a)Zd&I18`mFR@$C|>iZ90kWk%0m5)A!87&}~`WU!cPc___OZ zmq#hMzP?gvOrgxR{JDSrGWa{q9!^bQWgPp7R*Da{eb_Dx17EM%4_P@zW~7feCo7xDkAy)O@kdVl}c>6{!X zI)sC8T2Lq_>x?YfS{W)s_7+Q$tudB{QAapglMn`>h%AwPEM;HDAX&0a3`S%b`|i0v zzV&;4&-3?lUC;Gg*W<5qu10<4{dvFd_kF*X`#uLRMW_o#M-!KQN{db!L(8{`(8SQ^ z%3f=OZz1Y@4{%s#4SBJ+uC}!CR7(80ydY6x?i9~|LfeU#IqRVZ7*=+0xtG~*j~_$2 zYUj-XmA%e+2tEUU{{`gl?||EWd$rP6?QcuAQMD}v=aJ%7Sw@yco>%jlF4=v<)vBY* zdx!y-CQPcI@gaw9%wE=dO>6rG)n@|%i|m`nsI-gFnyWrEkz*8Vjm;mW4y^aNe}}&L z&5tzeF9RQ{R8di}1%vFEeXD@cn^(G=c@7=4t%dlv5zc1D$MdU_U*$Kp+^ z>RT;~`+ItN?nBoCQ^DS1=!FeuNeCu-g%h&|Q zWn7R=boo6qn?eO3*OQs-HSOM3MV|#o;T=+o(o|C8DkwE+sb#vu6cm zua7i3@eX9Z@mQQ6wTCkFdhXrZD>DcuqSj{xLl14vRec;PMB~>spf>8ywWrlyHUdg( zb9E1_{tmL68cwg2G-!Kv_8SNot*yDX=SsG}GAp-7Cl#W7wldFG=(3C0Rr|q(HzK^} zA%_mBskaqP@G9}^^7d2}{8B z?A{aBtYp*E;Pn1#;_iUZ^W@|LuPCodF;$O`!#1qXpGQUM#xu>k8Z~P{UGpjSqlnsc ze_UrEOmV}Il+$2Ce)xFXCA!YKizF&NIC?}>G%WUe#2Y|hN3l~dK%s^}PY64tbpOa; zWX#QxIy7xT@Qax@j3OZQiFeqZ3|`^@dRNknEgOdK`6!1XNQY6@>fvSL??w8Cw?6MI zQw1@i+WQRNV!GUYp~udr=8^cy4l2xXr!Q1<>UcBULY$CGOT{FV5Vo&?T&R^0>>{}P zEUOsR?&=}N<4^7%##47cEO*-d5Td_4AD2}fS`DTytwvP>KqA`_1i`ZQe4Pt*<>Gs& z>mxm@U`sjVRl$zk%2@v}mVq4ms6H~xz~oJi&P0&k)|hQ?n^D5TR>4WjWuYspHW#j8 zv3TWmGf<~YzBPXee6BK`gk$)GayD%IbA+8YC)f>`1jXLDuOF*bcb}7Ye*!CLW2500 zh|{Q*nRyL-an1WazdVO^N1rD6g7tp^?9FkfJ+Ea-w0X5#ZMovXCgzq3a@z!|iwA?k zUbxh`F(WhY{$eV{R~E7|!)$0LseIfs-*Yk>xXJT^Fc$KUazDM-$Y8d07e>X(%C)ps zTB*0<^E2)EKk^nkN7rr7> z@1*&F6^Wa%7X$*8aDdm=EHi|tBAf?|%Uq!^pxk>iuV=u~YYlK+I(RR?q8CWrgh&<6 zXkq1hRpdWppiA~CTD<^$P?_i{y1kJFvSX!%D!`g+2>HhLWc{|fFS6dLV z-JSMz`RxI`nbt?VF=$&CL!^I7-@5tBf*b8lHbj`A78>xx0C*#XE}*^eJ#dG|A^S;O z1_t|yP10Tg>r!*##z8Y}4iPlJxI;`tRiuiK3-ePaB@$KL!oA#+{Q50@3f8f3riWXP zQR|6)jLoH{eo)gPaa9j7Zk8^2*=4; zJ61lrogDdS7&yi>;6mkT+RKBQ8|tiZOvDiiE@@<_qn(@AYwr0l0%}Z#`X;^;LF$6j z2N-hc?_gOs?hPFU{ng#P$Fk?^iw;wNkb7yaK{UG07w@ypF4Ql$=wUj{MvW*?RHQyh z^PlXr^}y{%-jTVvx2sn(54u#8tGZhRJT{mN$H42jgZ79`)BEgw!KN+gdfx~@Trt>(bF zbFTk_d*LRX1R^mH$81O!%9kgg6tZbG7ii5aa9E!vEMKnDwzSR6`V`yPg|W@t&)pb; z1Hyt!#4;v4UM_7EmA2R!D(=ZH8hOb&VdQo_S{z!_Z zoU^VMz})4yD|`+cH_uDbNnUYin~mT*%^C7)D;@ikKSn@d4Fo52+T9*kkZ5$i1(1AOW;<6z(V$pWOe@Q-MXm>DOGm3hJ}S=*r-t z=%}dL_mAcI7-iH33}_D!1)#@z;S`yEw+8rFpO14M7g`1goHBa&$)y3%@A_r`TaS5$`rRVsvgecE~`(#QLW zbTR50@J_R})|eSyRl(^1$XpqikE|a5R3g}s_;P0EMnKm3`o4rU@^(l0L%SLuAJuzx z{a8@xNfj<370k|U!rO!hWss$MuCk5qY3c@gVU?&0M{k(rXgnq?4kfF41H>kfkqo@E zTMzycG~CUE!Cb){R7I*M=?XOCjj||tKnJ~AU*QZe85hdR{ZNdm+UA(aE((xcK*(&e zhO~T-0VZVOY}lYC-MAJucB$QbC?uX?@w0`GZaS^}lHzN+voAn5-4;%(>w|=`*ljZk z(OMdP*&*=muvt$8&%o$!x216+yfDZ&yG1Ala?r)M)mlN2LrYdQbL6i@eI_1L&rEpB6%HTk-F^4M(1VH zwU-cffsN~8BQFbZg`Ht@5I`8HXkit{2cStEZ&1jLmj!8KKW=H|!8k~61_cpX@wXtu zF`^etA!4$`13j}Cmvq6KHPkWtBw*>>VZYmXPLawoyx}%Qtu;wC8{TV>q?UjhDVh`k zxBu%=VaE%vk;_{Ik!bhdCia&o7CkVpm?(ma3zU2gcWlOoC>O-uE`Y$bYsxb9c!SOz zjn*2GL?A{z)*rdQXIOJ^O(-^~v3}q#V}l^|RS^b_wvxzsc9Ru$?~Rs(|6a}U5!nc+ z^ol@>_swj725Kl{xmf+EjqZz5tHI>ONrkD3`%{=PDQK0M5BjnD_BKP zHZZg|#z$T^tpj*qfzuC~kQ^?>6eiIV$7i2V@H4RSfU7jgx56uL3`du|=gpA-I}`MN zi+u&60r5QV`UL$Ul%EMwsoaBg1SvhE4z2#C2O`)W4k3~AM`74ftO8DbOv@sN#>W^j zor+VO*$1k2uUZh^L8A@Pdx^`ATSdSUeuU(Z0Lr|n&1BPU^n4{JZG~_KZ6Pndpl5E* zo#I)wOvbNIJC^UMSEuf(-{Lt6meD8A1|24j-?H2rYvNtxekSrvATe`vh~TODzRL2&(n1OEU2`#-S~fwHI* zKFlMZB|6)_vj6hXZ0HYu;pamxtLYL@Ou>p@FaSsz8yT5o2n0aIUn~tg!r?>e{6Fz- z#M#DUONzMkIysR4d_Yk*x`Kw~QBbQuj>V z_;Fw$0=c4ZT{p!*Cdk6_^v#hlgxNixmXRkDd;Q#%gW6Y=9N5CDX3uUso*cD8;CkfO zSLi?!^*|;AKU_aeKk(ldc3cDqnvHk>;emI2MaWYl*f|2A|Nme3e{7ZTFFcVs^Oryznq84}n-%$`u1&VHE}=J@yZ3a`Xs6V;iN9Cw6Rgg5e)y!D<)uDELil-dSK0-GGsal!nrlvu ziL!(5R8$Gni$DLA&jk~K%iPTSpmTeWo$@#=pZwaLQo84C?$2|zLMItyc z3w2qdbKK&$mmWV33U$g{1L`6QOL&6Q5HB{`bzJ!8@%AJ|$Oorx zVDXv~*f$XY*9ua!>W?U~97J@KJ8oVy)$X2-t+v2#{Lv97NbiJnOL&!DJ#+wJC8Rx} zO(2>wRbA;zp9iA?Z&QMIz-IOdF2b@%jH>+*AO}2u)9-~PM5zWjQuRT4I$8J7>gVHu z>loh1FV)w2+m)1(*!T9#0;aJ=Z?13w;rJUrUjk89O6gv8>J+j2pf4g=p$(+AoKeCV zJ%6qoNFM$)YCpaIg8z@h59A?aJ2kvvjV1|cFD{QqX%wuH{Ul}RB&xnkHYw_8QYC;bFo=R-9#zUU5lE}|~p z^xCM284KlO989{bW@%n9769MJZH{<=@j)CRw||7{kdVq4yR5^VE4ev;o@%$)Gya&m zI=h5e=oZ!pwHYDvyi#Gr1gKnb^+7mfFRmQ>u~j6f$bLMGk+v}GI)-a^PICK$@mXF? z)I@Ti)LWXk=?!WwsQa|l+(CXDk)})A2VN5}qU~VRAb$!$&wm9NdcAFkTU;+5AT(q0 z^q}_v?{}|8u8b{#QB6a>@ZP%J=!7m5S(1=B3&YPwP&!Jvl# zun%6P9ssBTrt+YmmVKgmxXNf#M8C zD{`rRdfM^H(kDnoTFrB!e*zz;$)=`t-lEJ^-fR+be&)@gV^_HE?|uR~m=;+kEGIkL zv+rcRUUYQjMo(4)G;83yi~sr+8fFoHr1M>Agkz#eFI#{`z^l0M~3_t>bNo zHH~i5w(qO=vd4-jFZRR8$rN`QR3MOof>MYC%~gxD8pEvW(J)m)x-IOGN~GrqEHq+~ zoazNeYAhT2XCRP-+vdh}0m07h%V&O?b@uT5<#!9%${qVo+5YT0@ZvdagCxDb;V?-e zGzHXZAqtMP+#=JQkH%^7rwJ}!=J{IimlL;Ak|UITEQs45tBV_xluvFhE;j(e&$>@I z8b5aPXk|Hm-C`Q;19^MC=zIf6vxK3tUGuCNKfw%_Wk`i8U{>7Rx-RmbvWO&j;WV$R zo|BaE6SM)hgvtZXmbLGIH=3+`r<$*)R3q+5#fZ1*=~IJ~Q^7v0oFc8u8oF+^k&trw@SwCVN_IdSO_CD>L&Q|9O!4;`Ijp)IkJBGS|oHzbMkgjd;);B#q_ zM^G(e`VHcyP<;4^19;EuXOgPLlg+`amF*2fbMQ$TwLd&f&prDdW7ZdK5)^3jzaTOr z_~F8W^1#y?PqKI=AQ*vsdqg0@@VX$&c}PjPGKo0nDAf!?KY9ohz?4k`fV8ap^xC5U z+y=m97L2{j^osGW%F?y&S-YWUMY%Qq)JmqDbe|p!^Pkg6P?9!V25S*SmQa4Rqgx)| z-dmo7&dUl*f+(?G6!DYOr%(#%D+u@6Ke|{H0AA_r8xS(243);d#FLVQcC*$R^$Q2L z5rIBnY#L9vUxNChuG^&4YXCf&-A-aErZ9nCc}`6DitGGXe6a{b{0A^37eG)}(J9 zw#UxFqB-51&h!u~5+X0v3d(j5d|B<-LLK|pG4feJm`}^wgfSPVdi4u(Z4B+Yf8@eX zbkHz+yPeuzWb*g|8_PYVgkSUOiW>Aj|9Q);>I14|^^FTg-6UKxe-zNH)*mi*F$wuOeH2$r#DW{4EWDt7Yg#9#usR08*q(X`a`aYk2tL$6W@Y#wwLB zaiX-=thfIIVzryeToyvbme>Ox#B?<+nXHBy^&^;(5J;*}FT|Sgbv( zY_0kQIP)o|C1c>i8)j>A12a;AA|?`W@71-IU^f?`Vg9LGx^=R@h2d1oc(V9fqq;_$ zEAaS5UEv5!8Y_n8fYfa0b+m&=63U*f& zi;my>acyxiJI=rp-o<9%R=`Ifnt}z1a-O30>Yu z#uhIaoBK->B98_uJn$8?^&_er8eN%v&&Z0h!hfQyHUJc|i2|O=I=dyp(|LLX-&lhd z84T>Ykk$bg8eDoodZr1o!pFhfQqKIogY(*i`e zvilGN0BQ~arNbsk;_m@tEb}t{qotPb5=yg&YdT~+8o-aHeIs+F`s%|ZfJTZ^ZL925 zk(7uPS%NNVnyug7cl@!l{Q<*pGV*#=94yW zq?jO#^X7e!xC7c?=_)vDQ<||A$uIlx_0@EMJ8L_9%7uj62^Th|Rb{DcU?@1?AfkHr zKDZ-EYAT?YeVaQZ0rs;$I2E5XgTXj<68WlRcaa)#G}t)d3XPQl$l|eYYXbS8h!;et z%xm6NDDfOaxo<%DF%3Mfu+i+i2>FKqfxW(AGw9xIVf*WS#85kryh_T8^5epHyUdEL zPR{)r|Fgpka{n82)_l`8_m+qW^8Zf&!t@FJDeX#&eI`F(7~z6>cdyppqabpeacXAp zy&@3MzK{GvHT)Wai#;z%nc2$23-(1KS#-bIhEqN!&iZmWzKHT)QU7$;WQ%IPVA8;A1`OgtA7I zExd)2_$3Q&xf!C!SFQmm|AYIr64q_@ZO)ojXH!QgIP~~eriAo7pOn+;eSr5}It(}5judzEA2pDP@b$2M z39y;%$$13+%P|}YtZd87&w-W%(m|v9h^CK1)V}{)Z{pqH7yCWXdAUvyJoDo7$8_t^ z-~%Tr?s;Pg1|Z@6vlc&7ep~SA(hj8YNlV)AWFb5EaDEb=`PH{S{6Gxi)f6d&J^&sB zptmI=C)x>j^1U$AAk;58Af3&veF6!dgjTR4I@HWzD=GV4=I2XUtcpoeJ>&nNXjy-K z$}D*+343(`;IkOhQ{Y!pBEk*TQm|RBeqro2rwBTxe7?cF4mao)FvFYu`zAen7b3jeDe`1@io894 z?oSV^@WK>pksI!7u*F9>O#*BPkiAw;2J8O#wz=?fnh@Hfr)Fne-rZ<#qIiuqc33*4 z0bWkw`3}r@`0B@c{@wmIt)>q~Cqh8fg4nclU~;Bj-Uhf7l`D!G5&!_zL8xwyox|AjP)< z)ROUd_i)Kf@*8M5vZi_Jvzbwi>@NRLZ(C=1-YUQiVLa9nAy4lIaSDBE=-sS0q%!tj z0vDOi$$-kR_LGT8*uNk!Wn zZu~CqMSn4|$ZEI`@sDy$4EOpqYTg4(c$8T3v90e_wQp5tHCpi65G4k^{TT_z`ti(* zdAtXDVKBRZG=mVMm;e`x6%<o(sX;@S?+JWyw4p?i% zMP|7WCaky#rE9u@#N<~ncxzqWt9{$mFthi%F?L|Y1QiapR_}SoqEj1cD(EkEF5EBR^a=Orak4 zuj8Qefy8?Hi#sYXC~uhbwXwq%s_T$SKYbueay`Dq_LKSkD+35rKoBYsRf*S;GUtEc z@oY2~Pu=}y2Y_E`r>6}CEDM`$)uW%o;vKH+(A z>rL}yQR`cy$RX1PvnjR)M9_@f+U-DabUKNjweS1ze7Q+rj{)WN1YJ+bXahuNyw-<- zRJTvlg}t&{f8!^-FovLV@sYNl6<_ToJaMjCdN%r)OX*bvEgPmY0yAxQzca#3i?rL7 z-_b$8}cUPWT&qA-Q$n9ZrA%{)uonRTK)Ow=JJdo3t0AdjT<-RM=HQ*QpHI1k z5|6wqwW1&CmT!SE_}_po9}@THPDMHN4bjMLSJR=R#?{_|m5;~BS9Tqj`0>zi*)j0* zbUO+A2>}zu`=W<YXFesT$$vat`Uz7l2{UToQSpoWvGRDpN+EBP4wNrr<6-Y)kKBjd&!cb% uTJ9kdNCed4K>p1qKVZiH+uiE6d_Gu4_dM(~QiNw?xu}iN%GS8?&;J0}9BfDc diff --git a/_docs/master/questions/images/filter-and-parameter.png b/_docs/master/questions/images/filter-and-parameter.png new file mode 100644 index 0000000000000000000000000000000000000000..e0df5f3c81e956b46119e4ced48204303f4b9673 GIT binary patch literal 353523 zcmb@t1z23k);0W!p?h!PYOQY#eH%X5U6ker4C z{2?f)*D@Bu!U~eY!bA#=c4ijVrch84pb;h&qvP{qS91xNKgXV#Bx}}aPFwjub@_GV}{S6iKK|_80qwjd##A( zVg=!e%hfhzFl^N}oiW-M?9d5E0&mcuOkDW%6A?d)p=@iy`O6dv2T#J7hbqweEf5;5 zwYE|Vh3pAhBiXE{JLmCnKXPY`c39-2Se)Oc2y0+S`x3*4?M&%BMLaX(Keue}e0aH6 z>8HvojfqndfxUaIIG$int`>aLM#jtZ%E$&vL5KFJLEXqKk%UFiGWNS!!b(ZH z(M>VrrNMVq!y2^2iJ@e~&>y@@X@xQIxD7gJKMS+=(Wo6J^kN8s(m_Sg5P-JgN`|TSYbb>;%viPnFH<)+dr`W|u11*^t4MO03Y-aabr`6xSS+%wExJ|}=htZp{1M)Lai%h4JAQHJJKW~I=T zm82S^b7A;Oo8K|Og}!}n#xa*c^2jsT?Pl$~nx+&x<8|Y@<5{ZSx7j~$hm&HtMY)72 z#z%+E9oD0Wjn2qm3Sw!o%(2*^67Hi9F0Q%qef0&C%hnpDdMUh?>Uvd)sq%Tu0JrcZ{}=CX&@5k!*WYoV(EFFHv+3|=taI)| z+jUXG3Q8cnF(i5!LTwbtK}3&$dnW21gFuEUDK-@&BjQgLqd5qZ`%W`Zg-AOVXB%sq z$niC2cr7V=?7alm`K#Lyqe8CYFE}}K`&0>$jz8>K2r@#VHC`q94OMb#AgTqa8oFqpdyOYmA(!Ibe@1tB zIo^%G@d~*Q-5#0`BkK!8AI+&{D*?Zsem`i7_eLEi(m=$X$PLXc;4DC|i!K^(Bzl%Dq8N~Xov@Q| zoIo)QCq=n~t{QGBeD%Fwxu)o%XlI7&K=J_pz>1ZX)rnQU?mcVO5>K6DU7Mx(%t?v2 z!n|68`d)ECG0jX;5lDr<*hl%1HBzi5|8`pG(`~J3EzXj|67Q1do1mchm-51ejOsZ` zIeJ@h{YYGawxWAKC?}DAnqEF$B3;_bhUM2$sK-}uiq|MzeA{&y)1wQT`&33%##5H3 z)lxfd$vaD7p=||kfmDZOX*bPR{utxONc&zV=yTQQstkv?$s*yIs>zL?CWi?J52e%j z(>Wz&hs9}y+`0`);22wYbYm@M_fef)$6dZ%)?IO4W8SDt3A<3ej8*bBz#Zx31c%w{ZStgMajjA&W)?7UVQmjf&|?c!{z`?o74lc;-U=2fhl`!7R&GAGi9_Y9kU zt&ywr7>yVe8hdA^J+?H;m$IBpnT(YJV(hRItTWIy(I~C@RJC8lQio^GIZ{1$o`}&G zX7kmwZv3EjmfH&VknB)&?#-OM&83YSTOeB<8^GG4-ltyKro_5p0quCfmD3gXn0_he z+V)!W`s+0oo&r1ozN$wo_&PQqHj|W`v_wn~paR(Dz~q?YS_K$!iE?0YvU0S&H|6|b zIy0NM`MdgA3-d%a&dDVmce*5OzMKxDM3aXnp zWUvzl;em8l-h8G+-aUHs7S97X%VfFrjVr&iV>QztO?Swb#PbEH!+!*w?9!4 zv+y{Z?z?0%%6FD*Tm`rXj3INQl@kzP>7hLlb@K^fPO>25W3ky@HFC$Q#l{T=QK9yQ zYvH@FFHv|{UfMDCChsQ?Cl6HR7@PNHMj7|YMlEB2+4zWj+#il%mtjSPq)B)gS*s|{ zbd?OIigTmRa{4C-eEAkXYNoFw3rR`JEXGc86MyPnLd+<#E$Syd1V zN0!Z(-<4m@5|faYTK;;SLfBWa3C_QmV$TI5H2S;v?+N*C;20(iiq}eAlJ!s;tM*UJ zWR1?I=xX|CnrZ@#${U3qn7COyovvHb3)3?=y_+PPJkJN+E!^SBm*Vh-La8Z~^W`m) zxFo{!@Ri&0%QKcpk&=#MNY6vh`@QgQa@L9~RUf`J>aS}nXrB6LZPq?c*X2v+H;h+i zRhjh1cdvJ6nQbz|F>9NpjHU7)K3R_+l{v+5{&dpX)f(01XmHXSY(2Q0x#hg@WpJd| zQoS@2obt~P>_^(8^STipM5*h;>8sv63~$A<(TiZfWU$p{G8?)h*Ov|;-;>Ia9+Bc_ zz@X&?Z|xI~_#SB|R+ZW`-Ji?SgwT-Dl$Tv-T6WSMQE34OvYj zHYM8ViR%_<%qtQot~RbZK89Uo(NupZS9_^)vS?6iI1~iH4a8-zIbTz0Safsxxf`wB zt8HujW>HJuR9Ce=va!rydFwcIS^l~AsmLsNBWem?-&M-hRb@aetMII_XwkIR%AHQD zr0{qtqxpVw!jGSQj&sfi*t4SCjCG`XT}BDQx3)O9IB(#5Pov9 zE9qEw_HQ6&mO>@xjNc*d#=`1 zCf~3JBwnFzDsgW(%A9N~=0AE`nBG`**!Nj~oP&2jvE_fq$*QcIYKGmr||YVw^%Zt+B;`()lY2?@@<<=nxCiK8M%4vfO)S# zV8aCER)-Fy#RT=*%{Es~Ap_+eDVuBhn)EcQ^5FHN{t9&Am*-1H;3;UA3(B+Mg~6Mv zpG8n2(@-H`*!^TiVV6_ddEXNiOcEYk>y#UEUIzS!v}~?;pFQv?CY7pg*Xgx>7WWsS zU??;YWO|Wksv&76D+~1jl16}ngMJJ30+ND;{6RtEK*9Z%hJuoU#{J*45;WBxWniG7 zf-Rt6|0tsc`Tq5Zf!q-3KfYhY1wp|>e!Yd<0pDQ$r!-RQw-^7Det8ag1|_I0EGY^3 zRyKAtHMMp6WanIQ`0xbDK(v?8bb^AyB>#0oODd6_LP5bSTBv9^YskuQ8Qa;=8=BY| znbN!2*#D{ripPx$lC&{(HY9Shv9@*Ma^ofWtppb&{VSV+gy^>-&Q`o68nOyR!gh|P zL~QgQ=|7V2y&@ta;&C)F<5Ch4`$HV^i@`~ldaPqWO@sr3uiti9)^FG{dXzNe~9rhvOw(nP3X_Lf0xksrxJh8 z{kw#`qXncR41YC^kMR!;f6n`(JP*S!=l=-|za#CpTnN8OXU{*6>lW=zpMxfkt_jXA7bCgu;hR4gugk>h+Lq{vvgY{>Oc18 z-zt(I`VO&Ao=Q(m?jJt=vw#1CG%5}Bt5sw20muJ9=1)lavlQYl`-IM_9sheMXdo(_ z63}oalK$8Dl%RsxhaQ&nHU7VbLa)?kf3U_-72babPDnchgdp~1DzuiS|MyT(gL&6F zAQiRqcZ~e!aDDsBzJN{Boj*JE|6jW5*Q>1NNGtwd<19&dCSPyFRJB1&`)^>(o1Ip=!SzY9|V+FukGh%*A=N)t{PRAmBwkC_l) zjn3Yp;V-oksL&jbozMur?@5V0CiE)}f)Lj@*(mpWtF?Z6J^enzGTnPJ7!)K+{M$Z4 zO@wfvAsXWg2!hop?Kf{6I9<0Zo!;Lfy^Ha>y^z+6{FJUa8Idt=ANUK`OtGIsOUsP_ z5%B}j_{?&G$#6LW-@DDyWlZKd*eK)Z4=H|gDS`+Qa|amaD%j%R$674fpvyz=5Ob`l zDgAGq>;W4^$ZeU8nX`x5jP*e$nFL%4z*#hYOXT;O2nuaIwkJ696n~6(%JT^Z4tzTe<&$&&~e-L!q)ZAl?7ht2b zKiHOZ3b;Mro7fc}?)f$3`Srf7+$zLZpPo)F>zPZ*Y}QEpqw2SUoj&4=pi+_AF0Ow+ zBFUzNjLes#8vd{n>v)v*cQe$}J+1B+nOnT3;9qE1U!gD^ z<0N3A@9|ALYTi!1JS6)!aRU7|Bojgulg!455L2AeJ5!j=Wl)^P>6`ubyS{(BjsF~Z5W0YL)k^_0^nXbP|04SNKg&;|Lk2+)Gg`ran_&M{)iKb& zUInN@Yls8?^KtzzB19gL@l<>wg8VPJ|3;-uew_!bhs@tq*(CpJPfW_M#>w1Sr~QYG zBO-yx8IX%7%WzKsWICS;d$jP&=H?4Nt<|8%w=tt3<|P(1n!5m;rC3#N6) zS+w{I2ZV$QtR_oU{m!tTBk*|j#3Js-V)lV0B|1wNn=vZcV}#XAC%&+FrhOqf83BJD~5%N6oou+WP_&3)M>ITd(qu?Lgt~i;(o*hmq;M7 z^2;NB&Tm6h_HEOum|YCg6xZl5=>I7PI(~qrd97D%eXMC{ZUZmMBRVLTr)k}H9-6f z-Oic(r%kV-a+B`rtwo^|_qSOEBrF@J?z*4M88DenG+Au4NZTHY z7cW+mi~FGZLBj9h)`+v7R(m(=*$L2r!!n)jA?524Ahh_F#mr z;RpWxk*itc(EgX@C_K&&%k|{p`)wMNB!PJ{DN4If3mL(OMX++|9MqKZnKH8WWro(> zyf$XNGh?cEP|+HVSD%9ecM@`Gp*fs^cjnl(U!Qk#18ylxPaIGMmN_|^3EhJNCy6m;0A?Y#}T`@dx2|S{7U^%&%#7UPPlqQ>=ruWwjH-p zMM_1jp6d0w`W=R8cs$Mvc={LlS8sjNC!WEioHzm@Tegj#Vuh4s`zld;T|rBN#l@sT zYW1>d@uv4tz+Kdp&CyaXnIq4B)Jp$BxB4J1W~SoPTxutio5D5IFI-so+&&~@-xC;y3D-CTTLB>0t?w+H_i+pQ--r1vT-l3 zf_%;4)g_38VElSdP%GeZ^~-W%8`AOjj-L?H25TleQC9x%Twe25uoTuJt%{`HJ zjhD0+Y^}KQuxPGSwwJT4gl|f6IMft-xIQ^u?J&<+z}#*;^mIAk?@bZ<1@^zU>D4~!7jU=C%0ZsT*sOYy6}!=60I4n*ry-t@;55VWxR z(UG?wI2^p*t#jBiAIxab`6-Lsn4w9lR=Tu4PdG~PwyaFEMU(H@EIFOWMe6B%4>wol zXDR>k;AWnc$=THGIi(AgWB_^dlgK3}fs2Re;rpDj1zw#;)cP&ZRRf=^*+J!&lUV4g zddc8pnjim2R7Q)xE0$t67K5hYljUqFMZ+qOfK<}(T~_Efc)S7p0=bO26z}U){z?LF z+iD$O-3}S7WI|q7nR@F*+b2v~oe!+V>R)kd^)ccdgW~P*k9^1j zVv(3uCOY(<5TBb~ms^w|4<>wt&n*7xoDg}_W376CkbUtkv~Ah$@}mT^w4{PF`SgB#af&!0Se)3 zwP}&RdGTGUiX@PfpJ_KDQ~)}1SEoQtwSX26+4X24M=?w}y*8dwKBe&8v^i}8B|(#@ zD5q(L_n8*<#UYDkn`?Xmy(W*IYBj;z5E|$Z;1+Q}ZT7Hg$$ZLSo5OK#Ni|%!+Hm;u zy$&+rS@ek??G9_Rb&*n^>0WtTH2~z(wMS6zvMh)G{oeN(T(~{_wFynon>Xy?S<$#) zxR{kIXy3uql-qtiMkcF?YK&Os!MlFN%bRd0i{WA3tyN?F{=4n5rN!N*oV_n$t>vUZ zQ1laU5m>KEYR)_Lb**3`K2TaM<;c&BG^94uiF^(4rGHT1u?Ev_vZdvTBJw~YUd)d~ zdU391;_X%ezO;i1YV!aSAOFKT{wC&l&bYzk#+IbrX^bM1Pxm|XqcZ)9dKOCs^$)6Y zabXz4Bh)T85{nIMA!p{}sdge~R`WIqS#>MN4SKi}NW_@*)5O}`aDGPT=l+4HzY@_{8^JRYs#; ze-6Y$L5>vMfgAP2gu8HfPKnGdOVubYSE>EiR|+PYt`EH_6s_603_i`6?i1j8K!o(YE~PeI0M6`84;T z0FgNo*bP?#m2l!|d!|{fLKEx!$Kgylnj=5pZ**jW50i2ij%RG$wNm$E6NO-P+|qSz>0~-<5iZgggkBwB1_NPBg7w?&qcS^ zYRNTM)q(@}vfB8|jTWX0F724;)$1(8ByHKF?I|fUVfClSTfiO(L zTG=efF1nG(aF3W=B9FV{NDj&h>ik554P~r!1Tk*)(0e9_VLVQU^V}}gdKpPhubV>7 z=wuh;y9l_cJmq~*pIbGRetB){w=M77xn@ye_v;G45Z+^Xg?>Y`^U1=8scgA+m%|2* z!$m_l5@)omb>OSDEpiV)II!!L;0Ohsq|czG zqs;!H?lhF;ZJZFP^;$Hf>mkULVyZ<{@+YuWq*JCMT5=A1E=sB`*Z_C_V5gIH}h)hLaPL#ymX&-x!b7GLU+}ti#Ip6gjE?hRCLQus!TnxFR zR-BU4<1$&LEbhvuSH$FQYoKP}J=1jqf4cHaxr^~)$8(I#t#P|#PrJQ8c+|{~3Um`b zJ7=?iV>RhijR(6A3BWc)+@q8Bfi$k-xMy#tvf_z!GaSWD#2u*|xOz`2IwF$PP)VVDLpaRj;^{g`_Q93JrQLe%+D zl|fYegxEH}((0~#8iC!q7skhHQqRSN$6>FKSfP>8Rc5}nTc3xQ1R19!3OxFR2)0|_ z1e*ZIYirg6XcHv4{uT}vk=e#m6WNhEG z0JM5$oBUhEN0I!$U*R?k<&Q0o=}%^h=8DyYO|@!zQ^)Y@r+U;Eee=kBRd=yBLV3Kz z!l)R5*5#EdHX^%PC4OK*wv?#F)=@&6ojQ?RrvU~f8uh)BuKOT4C3FFq;!(;zPMg!S z7>zLHNf!#VMlJe^kkVFY)Cne5=rEX%r%!%rV2yBF0g9!Db(5uYxeSX4>6f6{6I+Tn zyIvwa2HSr?3zA4cS-qfiKdpKmuB!2$^5c(U!<%fM&*o+4K&jcIcPZv98raW->lEoO zRasrMQ?I84F`;F!+b)^GenTz}w zN-PJ_{rcM`8Cqx>e;I3 z6Ir@ZF>kHxnk;@Zet7xll{LA4d{fF|r6ewuB!%k&Ydkp0DV_dda&Bs;XdJOmmIYW# z;#2#j@YJd{TD$(_<3KbYTcJAXky}_hoqpZwWtGtFlvaNJtqxa4hy&ajHtv<@nAX6B z)?k-#Fn$-e&$~X(q6C$3vor1f;qHn!XKTDEs!Qg*{7fVcEm$sdztqn?-NUoEaK?Fc zvsP@9VS3^py}(9C7h1J@jJ)%;4aX7<0_IH}i z8b^SXHbA(u>50>8sPtH$C&?O3>4rBp-jgVnZ^*IMuLuhoUT zucD6Uav7{!mCC#UyZ2WpHY7Ma=YdQK@cMZC9J%x7yJIDCW*Apb_Fq>)$1H0_t9udg zTw4S6$K02mmMx+0qW4e9rSl)@Mf8ygcyf*Rp{bR{?h9gf41+JZVdtMVdc<=rXQh_( zmOzIZONHO|CNpV7#>H{_W{Z#~FWX+)rZrfzPw0Q8q5OFvjcu3MXr06mEALwP5$`3V z%l(olxqfEn-aE8u_=(lSTJ3rbzC{-zrh%sI#{-V4y+-RvejO%NslB8RdFRqin-*Du zlbx~X1*T6g*Iedn!^TAvegGmX*4$+hZFx!Hqch`j-`?iA2Er(59-b|IH!d*k>KB$f zmptatGx(EJ+ds|ei>4+!b#plS35GCTdjGhpS_DQDF4x1nCRHQz}fle%ip8^^(LCYHYu zTd6!zV;uX7s4^oZ%XcF^;!#8L9S>$ampzCw*7HOW*!RoMx4ZX>jv8<~dcu#W=JO?6 z3}M=>&UId=KjkSr8^V`xH||;pABlpI3+5Ch0%;g{JUh@#k?}btm)~26{5WB=RH-0C zSp#IK6df^SK3t9v!#GfqVSrk%6J8}W3~PhlB;pWwaJ1F)yvM~DyCcC` z4!bVVH~>BS%-c%c*URpl1=~8-6GJ`kUvyO)OiEFXm9KL(%aBg!17s^=vR$^b8tel% zLa$eXoE~P38;X*L^kv?SoGp65qu?`qxzYmbp)9O5n+i8wB>MPME!!^Faf_}#t#fO( zI!AIZmSWK6ej?7FsuGcb zvcfB{>h;WhYqKdsxo3v)fv?!#!wQw&w;XL(d|w7tZzP96PW`fJP$YYtu(Qf!V^j5f zb%4LP&@-u_P@vIwU`$WTC(ESYk-snp=F2%hdtd32w)^b#b>L23dJ_6jw*U%O zX;ytkvT{{N^5x)AGoG2eB4kpSn8%V;>#Z%CY&$W;$UyHnTFw`-_zUAF%q*rF{Z>5Z zBUgcDo(GqjOxC>|HBZ-v6ZeRNXp25)aTt!rtVz-X7t6y8J+&yx=0mYLMc_^Qqn4{( z=&3?M;ODD>RD^+KV2k$_FYMMF5t;ASvHa*R>*M{t_pH0Cdg@MsMUBZiSUBQh3~7QF z4XcYAhuU5(*+=UhA()QFE!h6Ch0up_bUl5&{(`$U_DTJEuKHeUk6KP|W|@#tvwW|F zQ}?eTap&T3%MS}++@C$;y$@cWZ>^(=-9&GFvFFEWDKvDzW-_n9Q}(-E6{g&2AivKw zXMVo7(k3M7w40YWt!(`e){*PraC;IBbOm&hA3Rtd&}-HXQR;!sELC$tbbNg@sr3f+ zCEA})sc)U9kmK9@!_Emox{`cpt;&hk*E2aNac#97>b3NA2Uxa8J&4>Ub4x1XAIXG> zo~J@)78QP+wCO%($$ICBMxOFY7q=8|J$r{!_Lk2PE_bM1SALZK4e2&A)a$Ohnj!RR)|Hv-TE4Ad{T z{wkNs?W?AP0`P8zoHE19y1#R($SFT^^X~7a(n!e!5*t-uTQ}%)^_}=|H2!s;O*8dZ z2xv85x(N>&$Ql^(!XN-Q=6*qA6LuyTMddxs!XY>MDz=Sm7P9^H;L9J!uJ5iSRh&!} zBWUoroSQI z&9_&iZy$X1??*X1s3Im_2J{xFTn2V8}@P%*3#OSc$VfPWT#J~}WpY_AGre7SX9Cx;yfpUHU7gX1GI60o= zwjAYPOeV_}7UlUH$(rpT=r%mXTpJ=x%zA4x2B)GHjoQcPE1u?P);O!B4F0x5wH4dG z6IYAro>}>-7Bc6D-uKb`++xN*F}s4f`8TeOcL{NUZDx^{9)$0CNSqp*Tkje9j%61q z3BAuFvlj4gKd8xIbdwC%hd7lQZ_>9y|WxH=R)&@(hlR-0bwud*j z;JrD`hzi-#X1Tiw2%XM#D!BF`@dm(C$ec%Zm1(o8cDX%>bZgh&v?~u6E3CX)*c;QQ zT`O)RP+W{vD=}k@T-RR_@fdJVW%I5N-Sq+E7mb^pw4VUej7YkDZ^z_uRQXvgIn7`y z6(6RT`|qyOwt-;2`4rAM$tz1$7E4cyM_YY{WW@DlkZ)o^rkjAC?;)vE+4tw2;jfIb z4``FVL)Bl;p9b_twxUhe(H2I zzN3#>t~d%+Hc#hSaQOaeM;Zh1F(e}7z%FW;UOf7qo3N246S6;3`ok;wS|-lY^i?B( z^Kb~q@99>*ULq`PZ#tO|Gg2#tgk0t0T3uDgmQ89a8pQ+PMy(Ajb>AAeb@OQxxu`I9 zrzCNR(9q^=#4PYgZQVAh9xe<>hxpe;O(JjDQ@#QGK;DD};N!`_@`vmO__x)bq99bi zY=X3tvfyPhC>X!;5do8Yd&436O`c!*qd-$qM`Au6925n9v{7{mp#h{oOeiy8DIs z-r=-o>DfYl3@^buO>q(gNJMXJW>BV@BejsyYivR2=a4_4v#nmc_BENu@9 zyhugp$YB+t4fqj)hvIkU4bU@AJJmMw-4KG?UMlfCkQK2(Cw5I1a~9vetUGKN^fb@G z26Wu;U~FbFECY@bV{wWW_)>9uDeo2ZKKWlfdl?I0v$?L?XVZEZ9Y3 zquCFXtP{A18+`(mfW$bAI;B~f&#qq3v-)Eou=w6sl!oTMu3Ep(LXJ~^zWAhKbSH85 znFk|&I0fNajcEgOw%^0{r1|Q@Pv8~|c6s)x1v6%H`8x)+UIrW|#mEDzGRM4gM8#uBdK?Lo~rYLB@5-2TO$WZ=1}wPFW(_F2+gnuJK1-ORT{w9O|T z>sA3TA++@^22fZj?`{5R~ZBBkrUf3u8VwpWj3S)$GrzwsD2DQJB zG_?{#nWDJBzO*W+>Mb)%Z_nwiR=Z?qaUeD{aiI}qInu;JUBk)vS*hrR3 z{~PX1QXKYdU*pm~H-wGrKHa6IY^5q8&6=oSOA%?%R8d{RTnZ*?6@l?(Iq&`GQ#9YR zrdHi2gLcx>#r^4$nv*PAtTUYL};dT zvyYiZm@({n9xK@Lu_u@c&2=}=U7$7F*XdTJ0_3TE#`huFRX6b ztNZ~R7^CSmWMe2Olhu_j!CFEh;UW87uZ^PtY!L?T!g+v}#S>+k2u(azJbKi#2KC?)RJfsl$cCA%2hh+kW&F&j{dUom7 z+y2uR@W{jC87({DBIX%1m#^CsS@O1R7N5~>T1NC&@^ZYcj^)J)+f)JT>j>r};mzrGC*1b!rI9$yfK(a);K$bBk}WrQ8Kc2`p z%1n-iVV8E=OBKau(%>|NQwiE+hK5U9y(xyU6n!%wM-j{|L;jI-?@36Mk8BImE?lLa zWwrAm8a9hn!#OW$Fw5OtlCtX%vp3D*)nVCC!<#D4oZ-N27>q4Si(WA2hXnB~Ma&?q zK3$x5?6G@xKSIuQS??Yyq_0PgYGPNzF-J*JoTXh%sI!Hh4P2$T5d?k14@56DoQ7t; z!e4uzxE5fhe`S1CcZ|{3f969_M!<-ybIqaQp;krioGq-E-B{u zCM1cF4!n+8EzH*G@nG$v3nt|0h4^i7y) zuRTf|V+gLfEUTK~-s8@c5Cc}g>F8*9BuxhX;15fCzC11sVKU)q=Qkh=4E@#T!SD|Y zm+p&@z`khxv4$adkQ$??ljxyES#(qFCb+P-Vb!f^J)gj6s%+VHxU@++0%7T0$d)gh z3Ki_x&y$+$>BzMD`&ojKCTgYJn6RQ^>7O-502Ks3q$wCp{5JZhiwSsEu4juPbxKwg zk)&Bwuls%FXXd_6tDomCf^Zt{f_|DLsnZRqTooKbjYM;YfYLyk$!VFwt z5t2{^pT@QCn@ZL_UZQj4qJhKTNn)s)+h6#M3D&+Tz_D6ooXH=k4rl-nJa(-!pa7|k zmswo;iM8jeF%C_#$GZ)Vwc6S@woTsfUp{IMJa;_a>&CNa5Iz9?!R>7=pK^icN}Bu= zlIDG&!4O6a#c^WiV4G<|A=lzh1X+36TtNn2{iFDEF<2IUuU#|>QXIK5S3Ny__c%Th z039wc4sL2SeZT3@Xgl)+0=TnF2vy4YQPS2`LJ=;a`Ru>cyctNr%JNjO?Re(ATIJu) z6|Z5E%djq;Em0o3T_Jrl@P$y~=q8|5PyYUs=0d#?9pIqOWJ3L$7kI_z>*c{5l-Z#8LJJOYR^JQA0c15Fd% zXZ8w(Y$pP%J)#kwAm1;(eZlgNiB%f7?1+=Dspjzjvj}vq{@E>nE|R3u))~ z*;GM)^zIvGg@ywqBO**N`?}wpe4E^d@bKN$=@-C$jbw2$9&$FY#WgXS?@=vFGA=T? z4YI`H6Z}INpUM6xM6bi+*n_{z6C};R_{di_URK3b`%VG+-jq&isPkw0{q33bwdA~5 z5!y=hCleeLzfGxHOnT)qNkOxT3t3Fm`+=nv}lRPb+Og~pTCNGYU9@PJ5Ba^ zX2N6j8o5s7&dqwvI-5x3XClsov6PO{MWEJ%)wlg)Y?tAY*Uh46|SHda$VN!q?^b!v-2V3zThv3T^vpPbQtHv!H0FLt8Uae9wW za8*NAiLJpneJ6S(lQu1Ihp3g&c*o(DXu5P~Ly?O#rNl7qRKm`Y6CDr4>-v=rZPT|l zkG&_WcYAai)^Vt}Z8m9`kVQf6q@djPeIb2VCxk@6(P?PV3$rN3st7TBa2U`=b+68D z$1B)op|X!cyp}evCMAJJyZ@F(xjBK^X8&#E%2V8{%>tRUule){j|}@WtGNu*5~pmN z&0~$e&(M(~?Y-7|GkITRque-c?yLnby&t?E76sgY&Vsi?3-n?HzlbMOo!Cz`KP}PB z7S-nJXEZXrF|mK$=g=*bk!4kWfUa_6dnjv%OAf<*llS%#v^uP_oc-RLy45^EMrw7)aO)_PQ$rfoRHuk@_824P6O2KVAdZU0 zmrl3jyfCEHBGmQS=)z1DspJ$0@cl9x&JN$PR-s=N`I-^x%Lt33`*(FpqZIvP@XKhjjnxABTW{d*^>ru1Ar*o+R&0s?s20%rB#i z`8It5d9hky?dh5-q>oUXb(g#b!>>L)WqR&rvM6q~*}$R`c;0)K+X=g^wgf)gNrl`I zjO!7`1M(l~(EYf6 z`|lY8#9uoXjzAmvk-7#xI$Smixe4>-UtBGViS@&6?%Lk3jr{aP;gbd=9sm>q_+b&mGMZdCD%E@U48}hE4ZKMi1TZ(uDKl0gRrUXI>T_bbx zVx_Ya#knj~T*1@_rN9#SoMW{7q?NbWmbMDzTC4Y=ufgPyB& zIh<`X{$W|lfrm{r=yh39@p9DjJOFgp7yW*p&}_ z_Nat%WX2OR_tBoi;dO@3tz`?|w+GkW#*HUN_|1Xwy#^U&bXd>}Up$-kHG4VVjE}CDI)%+~Pv^~a+zqJSbMg``nyuNJRklh96FyQo*E7AgK=)(U) z*n3Ac-F4f-(m@1*hy|oe7f^aH(o~xC-lX@Q&{0r8X(CE5O7Fdg(3Re$lY}CK9w0z~ zkZ|+7=bU@ad++_m_fJN~ATWTv_grhwHRt>#UdP^};^s`ZjE+0aZQeXBF(^;}Yfx{= zksec@A{{k?7e5g?KJpH*)(rp!_+i4 z1A~L+alSwn5znvk8rffm7{WRtx?tm;NNG%ikOORC6EEIKmRIDNH0`~m^4ey$FX~6S(SbfqRH>z z?ma2>8=|k$7*eMTMZ;%|nZ7Y=X=FO@bO{{GasRMXiBwm)@NO34oLy^CTl}+uO0BTs z>T=hS^8DJ8YZ;6pUKTX$zX@6${M7$xQiJ~Z=DMKj#buu#`5fA08uAw1SrwXx7t+}R z7fT%c^Ab$1dWHY(w13H=u$ZaI`XuPiamW0aa~eXL?0v(?jK+&V6))>J7?hm4KWC(K zP%P{XStXrco%YsVs!Utez&h5NJp=mVsp@|~JX+&%OT%6#Ehgs=n4ILJKkSb*U8qZ?@ z%3r=f+om4gE$8-`xOJFQB=eKW<{y75LX@DRBD>V=KV+B{p%&w8Dsr4l zQ17SohrNlL4SBETFUvep^>YA$&Q}G}K#>t4EW9|6D2Avm2wlxI3g2(j*h~O*(ev|I zm+J;V-fD#su--oZ@T!4WpZEX<(a|n_wr$a}&iVN&zz3ZhW=n!JYILRKLXsn?f|od> zn>W|%K0KTCm=()!_uRjOkHz?pEP#38-4(p!V(rEPLcJ<^D<&rJVZI)i3PDc0S@p{| zlm-gQ={TAm_*#GSql|RwQ^|ydGw$dO2>VWh1UC9i^4??lue+Mb^~iUtLf>-a59nxO zhWo;#;uL53UM1pVgcyG(7oOl6%$`KPJV}IVH$Ci=DC^Ufl%ZdZW=>?b3(pbcH>#SS z0DbmDu~b)kV_LXN&S`>Lz*mfwPgN3YtCsZ&9`}{~a0bv?*9N~R>XW)fBQ?i*|N02k z1Dx?PRa8w>pBSem?7_UNXdf8M=&AYH!04SDxVDHPIv8$jJk1`^-1Co({*N2NUDcJn zSW+)kbZH`(5K#M{8lXeLw`jI8foc%qQvgKo*KMwHk!;~U3RoOHKc9pZ=zBOU3{Cux z5K_wT!SAI;UZ>@!mct6WDJ^;`uUk^H-;pDm4{b*7O4HpVMuwmdDN{Mu{Ut*T-_Txb z&7&nI=tP{xBqD(-Uu%q->h);?TU?-{vFkVK&yBB654j$C`M{kDdO2>(I=X+J%M`7y zNwhT7tXo;i(;M#U2VLB10hVb)nOy96d1&Sat28wFcU? z7%_sAJJE)3;$$+EVi&eGL zpQWJzckrqKj<+DnFHxUFi72FrW_POd_MX^K;7vs%)tQ{tQvCPNmuX|D&}Z?x9UcQe zKWWzFTYV%H?wyS@Sv!Y^di|jLwftl^BFGnUUxhNBv%IB>V@kv8Uf)|jAhpw`EG-L5 z2SP`$S=0Hao?-)qoN|#F~$L)j0AvOIRD&hr)dda{g zL2@CKRH?nmB&o(RVfbW8BWa{IImJFdmPHi@ z$g(hCWRg}|qx@NX>M=3k`NN1><>xAlI`&BwMrEuGh$8v@BxVUM&$dn-_AJqWG=6h4 zarY(9xh#pYEXSocUSubmBiv1=C|fFOt{e1jNxkbBSC)P1m(R8xnl*MBm%cdN7c8AO z(!39VvS+H#mHq^{l^7Bu1N!SRZ%wtc>fWsAZmwMjy9}??8Xg!7 zjK&{KVt;NyLo+roed}^jRW@FR*K7Tu)AdZc$NEXHKfh;7BoN%VQzlSYt*YncdU)gp zc#}4VX@`Q*!&g*Ur@5QowLM}_8N*Mm3!1so?*kGYQ^G%`NJEuxIMH!GME#E5DgIEF^N z?-TUDmwb$qq@a5mvWyVN@6l6Y zR)ZGZ6D}awx*^I>cS; z1V7Zfg$jQ<=X_etiqc#Mlo9++PANddSDigD?*ij4wR0Oso-oPzpjii$H*HQps49P! zwmfZ4HG=p2+ba|9Nf76fNHa3?(R{);w>iXsDX4%&lELYrV3eTZKC_4ag+EYE`Lk1p zFXwPydAh+kFTr~PcDY`o>Lu12^l*u^8^O1lJ6HNJ&~eIosQ2XJHmJL=e#{s*p_-OmjGZE=Gxcsee$1)Yu6*l%TX z7DMwH=uyIFi5|20KMkr)##Pos@$L{YzEjc?>#6E}*hbdLL}~+q2QqKnUojU@nBVA=Xd z4b)md8LN@zsw_9rtWRqFvWG20+Ij1S5v9Rjhtot3@LNX;3h8?B@d#c1b15FkqVg+5 zA1@c&9Qg%uysP5VvK8<`HTe55{aDjGH`i%o#KYvPzq}FY?D+BSOop6Z4y%XUC$n(u zfsU{x#~5NF&-%)8O2bUl?Wu!>cCA+@_7z_I@Muac|3byg3s1in{=^9^`>J$-CnSYl z@TH9l9k`WP(fr&UN#joYCXi|jJVeVy9Ln7bbu5C!=s7*EFkz15VTdzdkQl zEkFf5+Q$a|H_7}T9!AB##7Bt)`5OHG>aW1eFHe~(9j*Va`?#>*EjV=Er7%*MdDX4O z`o-=e6iG)rzm5^1d=kmY-l_bTdJ1g3?->VHMGn&OyzUqq;mmKSIqQ4pHs|q}F-(-z zLjBLVvkKBP(PAQ(7_f;=5sHx{lK}MyQw6r^yaqe|2mrPlh37n*Y2uvj)S}BVY-+X6 z1Q8*b0H=WDg&DVW`uifF0TG)C-5fC{g1EOCw&Ih=Hs>d@L3&YL#KS2tQDW`aIuSGG z@+LPlOwxFr#e;Z_{u^(lipaB`;*CsYYvEzM<l#tNDMX6Qi=Ed2_T1* zQ|q~JMSZ!a}69X%qOnkEB6m=_H$z`IX#7n2Uw3ItTz2($Ud!IlAsGrKBLG!n_H6;swkUV4OT?&z#Gz6>_miN-&jDQJ zo%Emblfhm{B#0xA7U2lKZHq^wu#0*4;S^6AeI0{D)^oQy{RhNn;=#cki8K-{XM1zc zBAQ%{l4%qe-Itcj5cBe(28KUt=sPBid~T?S1PyyqkRq%8iTqChk+&S_x62gnEo2C5 z=gJl(&nTn}uynp+eL`a&D0y?8W$P%Oz%K}X_9nH~<;bd~*#`woIPcV2aRFNY;QX!5 z4~$VB!|Mm#vrXKsWbvxeXCZ`+ls%2QweXU$I3BZGC#fiv80$v+CV$x)DWFs|BaUuZ znqj#ePckLt%L(nUf}p{MgM3!H19|_%B%{aj+`VXg~3>5qVyw49+e6bHMnDs&vSd=c5YRj^!p7HirOU ze0=TgSDUlE-c|0G~TAu;4kGIPb^?;7~W9D}se6qntk3}M%rh`3}^G=^i zcxfL<^dG#xqYGmTgm;F;d^+z8y>v}E=oMrlbkKRZv?Z_{zrgez9x*XS@yY%ht;Z8$ z?K|JuhcPJgvjLU)C`|>exK)r*Nz-diluRW0V;1$us{oTTwHSrq^~R@g;FBgzUKm*B znLnpq9azBbKgXWXt^Y}F{$q}2^(8d=;`#BA=TpG7(l?5RpwZ~PE}Iu1>qnoVmZhx> z+=QKOp6-)N-q7CUjW#D&vavoU7YfBmWEKp)M@V#9mt~ff;;U5QRUSBsd{Xi^gf>XZ0DC(Wt4PN4rxp9kZ zwDlN2uDjUreKyB#vsXMev}NK~HptAt5uZ0XK+LFcaO{oGlK2u%nEV;$_jQ5EKt$_^ zx@Ub48Oop4@?=kI%f0O=QhZw7i^m5=s%-B`-d?hoRxgJBqng#2-L!s1veQIDX&js) z>=06RyPp>N(0YB2ODlte|1_>=sfeLXQm;=dl3r~?jg&S?=x}bZ`|c9rJGVya~TUya~a7oRqvrn3Aq*q1^ER+=UWf0 zOXt39B{a6l1>t`?>nG7}R1z7jubN1E1QO>nF^`K77tfgHUxk_UX~itB4%!I3Vv?yW z@nA_XQ!uSb)91^D{zR69~qY&YIMM1v- zlMebo!Jhh#!Y$eJKR2T^B&{yL`{?CC;IrcJp8W5^FIm1F)lx^1@1MXPWa7!%KB~iR z7Ij7?sqpkb3>LY$GvFmbbHAB6w3tmauW0y%Q`b%ZA7&^;Day- z7lt8BV&h3-yg|!9vM=xLBl#^X`vFX~!Q#1o{3DS?&L;h&$foC-@2;F@^YNE=^>ZSO z3S6rLcjB$57EG{8eIDse{fQ)p{^+Y;SKiJf$XM|tmUrG3bLisr!&bGmXK(3js zw52x?tYD>aec^ZTjvs%Clh-B7NI4mHLuMUpjWK+5@BQ4Z?0CDO!7fHz*kSh$2T+|D z#SCpPRh;v*ufO_HqM2B_Z=k zkLR41gZG0_#bHnI!jUH_5bw1Y)9nr-UQ_8UN!v*l$}t%Br?&A`rUkCu?U~{(tde*O z1{$yNQDaE(KQNmua;3isX?^!`<6CPu#4DBMl+GiBYTS^F`l@pof?!r=$@2oN zttqCi7kh) zaSy01oU8htCvDx4Pt9>SaByttp`ZGxeB2b|w?6HACtyGMFNL9e$zj}+e+rH-p90#4 z40FA{bVq`;b#I7wFZPsqiR%Mw46^uHQ8%F(R;Nsv@hqs>&jLUhbGIX;0L*R3W9KiT zP10VkeI|emKaHX_0?*WS8pAzSy$&NceO=Ir4DTxQ3Y6=DXv$3rs@i=$ikGe>}>!X0%oBS%|xR#fZekqk3rhEp0*fh|fbYxEs`Wq%XUWDHXsGD0wc z78 zt?j=RuMkMBbj$x`Nq`Sy$JGkVb0M0X@f-|$+8tF2tSVQ_mQ(Zkw(`~iB=-nHjVvF? z3)fm|@?bBT)xSs7B_k}=F&rGQ_t2+h^*t#WL7;3e47;t4;*5H^2I%Wfq0BV_yzB!o zwL#Rnlm4&{9!B(S&^p9CM2XXzga|+oq>*ZFl8Ie67)vE${}ox>Mj1FkvIVb26pw2Q zm%m(h+9{)X1OTn8Ip8xBcAF3p1qb(zDitj-{UVa;T2w-s9H zzk(A?c;ja*_Gmqdj3a?~h4@Ih2k%*Cy$Qj%sh?5{U3wXQ5yTr)@E!)_m@9KmBF`M} zr)P9M&=zaXo8V&(eVL9ymcV^gzcAxT7A9{yd7S}18M|Ni=@+`LulpPySLh8PE0F#18XKS!75Hst@D+33bNRNJv4Q;m5tYq zmdtK+i%79m6dEmy{n?jTf)BP4rE&4@R{9f)Y3nDNRMzQm4}aN1#OTP?)8``^O(qjN zTV+`JX704llgxbGwoK)ieLP6@1~004X-Zt7ATq;msEHL+RPYX8+Ftm?Lg*b2nUIeA z70fJxTF7@<{tPSNO_@1qFX&LdkoP^kC{@`#96aQ4`-NKFhNY2LpY6@!o7jLfyuDeh zcauipQtcO1OKeFktgJG5AVsuX`Y}fD{9yjMOWbHy*TQvCix2<+lJ3gEXWdLT4`jF? z1*c=Tg7CEN!4x?oON9KJ^PMEo)~wGSVy(2j*ouF^7){7SpY7evT- z*!O=_5$-{K>c`WibULpczbtl| z)pP}_&UMx4OO@$KcZIja`FpN{x3bkZOnUCYn0D`{>{NsbiK+>_Or~E>%yfaU0j+-~ zLnZcKhmp3G>iU$Kam{8(L~`{ymc3yYdn=oL+nS-yu>3nOYpmprNzIc6=H{=O!?%*# zaii{L$mQ~HCTt;3pmjl2+hLpM9QY_Q!o;9|%Y$MiCWw7@OvV#oqm0{sC+*=6z-}KE|Bz~{NE5#4JU&!JFxAM^fS8g?-3%)1 zVT>W@ww9k-S0-Y-`0$N$#9Zva_X*N7e*{f)BAPzQ)u#RIidj0FZFOzLE0hy?jjT~q zr{}w|D}NP9&6!?hNHwaE8(|F#KYOKM)N>Lt1D|L0Eij1LYz}1@EiJrlNz2QaDfAGQ zq6|l!S44b&@$t6gVw&rpOB#915beSe)8snqt>Ul}B02gGsAO^&?Gsd4MCT^AP4iiB z+T=p$^)JBXNS@c};mI-%z6}5HH#Qtsm^_jtR>lt-+_5=AM|3%<42FN-B|Uw}6Q{7v zwQd`za5Nv$v4gN#t9lS5f8k!c`}Ot3&hNWEOfS&K6|VFh>mjFQcq{NslS*Tp+g262 z%deVEC@L=|!5FFv(_O9#;&~wcG{+!nfU|{+2mu` z^08gkS1+xCaI|y*%r3t^t3C*%aHv$$znpiPvD%n?)Z5m(%g1JNW5A?wL4mDBr75 z5=THZ*&10M&b}dwGrvdKJu$0$RFwP+x)j9IK@W+JUDuHfjl2CpPn8lT3-btdkq^B& zJBbb_SmZedxS917%P16cm)G=;1u_=DXu~w)wzve}KzHOMys3H4!k!~+2_lX6=r7*G zUUps7C@?0y(c~o-dil^Z_}HoHy3X>0^ODxvqYUIs_XmN!Eu6)ght<$7}T`DY{1{D1@8ZmwsIqy zk^M*!HhaN#OF>1^fI_A#Oyu&gAToL(b-Y6`E77-ZU9 zc?#By+$;athmTKYS$qHv0+ZcZqdR70(!YK9e`37BlnYNT|c!Y!zqhyH4k0U;Xf% zdc(*?SKz^tU3Lnes~l1FAwT>^@{i@yF=@x`#b!CvTpT8jD>IlNN6v1!nJG8|>9?}) zZROT>kw3_!>_LR=xcO*F)jFCcl;;mA)ijZvkh(C#t<-SsI%v{_wCq% zrD;MhrsnbHAUoc2bcoEXuFc}ftTg7O=|<}_2eS(d)CM{jD<0Xz#1}R+{ipPPT2B=Ds+7kEC2q6|!;m^y^GY~QVJIenOp$v-Zc zyIY#`2V&|s#+V%DaPoYklm%H}+Jr5QH>sVdG4omumuc9JMl(@^)>B@)pa=}N=D66z zhZ?9<@tRh?kjDGrkZZ`PZqR|5gm@3?h5g9Nh7Gi2L{UD|Y#ru`$&vTo%^S{D<@viUx(F{}PwA&iSKH}7~w#s1VWeU3(!$%)IDT~V9mo^-z)*Y>N^UH8Utz_HH!;=>=x z?;k$CgyD`tg3c6@(kImUtM-~6u!s*%CpQdx1-Iv76Ge@>*A7`trHun4;quR zYLErUr*Rn*41^*tIy}$(;n&Zmoq2vVkUQ3t(&4SDKMbGN1c6*wMJqn`Jf*{nlQ!}ZBnYXy}d^`(fujLd~cxb(}`|w=`KEp$i@R2erKI{|ft4#~uNJq8P$QH~C{poo~ z#OldItGle`F2OV-M4S}QGILGP&bDJjicIg?lPx)PoS=AN@JS75w;>^tT`^!MaytQ;ieRfu8v zy{w@--A4}k4Z#jOurpZ#>y>AP1FJ6N1o{DItx@X6XRh>Tah1vU$l0cKkZrt$R<=5F zz^pb3#s1)jSNLFm#0KQYxQ6KB_bS>vC3PAcB*$kHoWfwY8B4q*39X^vZ} zIK}9!E)0@^wc=0Q$uf%?g=en~AZbGloyvH{U|R)tuN;VBT;yZOz@;Uph`R2)?kdX! zU|D9!&+yDxo*miJFRkBLX%9NjcG4XKm00P6T&~;t{%c!Rpowup8WXeM0DQ8WK)j|` zMcR3XB*gH8K+^FRQU_++u|#Xh)bPk1mcJ1L`(WOu91s#9y)%zkZ`G9hKz1r##W4K9 znnpxh+Oq~E`&V&tMTf=tc(K+&mx}_H@vfH=aVfoiz1qcy9s_1op5FO>yHRA&DG&?qfr7M!x$vW zVx_1Gj!y*XxLAog!Eq~O#5n8?-DZuAj zL_&YX_O9I_QnoZYVy23FxjZr$8qtZ+acu8Vu%Onm32nkn+7>7kDAeT+#LM1q{%%4D zywj8qil0C$oW|4kE{DAjwi)m>AK!YvAZH+zC1f>HZpb&3k^~n@iMUaotAyIHCnJrH zTOnOaG8ej~!A*SA?S}f02X0%M{14n%RzF4{Jm!Zg7f}vho52ol_3l$;;O}LBW4PnQ96}lXG6PA&0yqqoY z6YfW)v}-;q1E9RgI`I~mpHb>RK6gs#tDBchmAT$KtqOvc<=HigZ5b)VN1u ztce7n_8^A39D&GCr4Uq~!NLol(Ob4SCJnxpeiq zv{Uju{d8C?D~)bgL;0sRAtAgyNp_(sGV~myy;zTM?`MWIl~wD)YFy2)vgyIgDNd?; zK$#^6e0JwDGwR>6@)fn&Z9XCaRxkdzP%Q(rO_iKjk2A)y^i##($}A8!yuoxhu-j%@ z^|Z8%`MEF-cm?%H-HHHEs`qkEZv>uyM01Q~ZlY|X+rRU@j7dn(dy8Y<(PgXdMbG~( z^qT9bB$oQRM;GKhwp1swG*N-RYP8cdTJP`tsu)bM8upZ3*F3AZcOUF|;3Uc-PNkvp z1!#_^@=tSqcD=kuIR1~>`@Vo_(fhefjak03hPZ;KjSm2^OXx|!H}+leNFb>Qxyo_% zn)vL6|L){8xpwkAmYLhc)a%NF;Td(L0r>#f-*ppB&0zKeKiwQsuz;KUZ3$4~;|r|* z(o$tpJg*ib4*x*i%_PSXO!qh859`)1jJI3h1a4m4>o}|IF*2+A0Isa3NBvMq;w15n zz>HyDHHv zaAt2qP|U0VAG7+Z9^+qtOsZS0LCY$ZG63ikH}2!!+FYfSg1~6zJQopWWfI}j%pyR1 zP2E~>n=N&(-^j^cc6C+!W7F`+ruefe!}cV@2Nd}|cPdTV#^c43!>=JMI0cTk3c;tX z6iuU$-?g^$(oN$!Jz zgjQ4F110Ud_-fot26Wh)xsjM|yf65v^#gkB@=M@Et zBoOAvPy4h|!5C_}aL7=9pN1$c3YzU*Ktf|`LUL9c-~U!lp4=7Ws*1oqkDa8TLn(BQGn$X^^Wbn@H zK@{5`ztuBwQh!<4b4->ze_U%)>~BL`1P)XAcoT7cNc1dm*X-g#7YSLYUkUm3n_eP5 z;rRy`1qCPDm!o%p7Yu(X*=SzAco`JL`{cvbUDhXn%$)^)_h*L?`~Dq=hB%b0h<80o*uNNkgl&r#SK7a7SieqVLj=Q8&zSSOSWbJs#HK{7of;Xp zn4@R*W!)Z!HKhrm^|2YUo=c@an_ZBP&9jme&`tBbd3K;?p|C5n8X_!AX;W*a`!cdw4Z<7TvZYw|nVF=S=#a4NW_DGr-TtwSSt_E&B(H!s``(B^nDcXO;9 z1r-}?<3|bw3ylczh@zKyP~h&6`*aAY-TGOWx+?{?zPuP z<2Uu03)m;=F%2s>WGvQK`=6z=TK2!FGlwi?PE6cjVz|H>^Tf|E!swHe+bDD)``-1F zEO?%!kAVNc!_LPQmL-LS1`MMCJ0pD*z^vS>aiNL^!m$)PFgobu>u@k{Re4%t>oW?8 z#XVje?a@3^?q)RF3ZQt4fcQUOSig{n7PN){LFkRC?zwZ)fp#?Q_8!CjA@AzEwV)+5 z!V5LOzjsKmgV56WhAO^7z$d}&H?Xb6+4-aroOR&UJS5@g@>T-~u5>xmrz80re2~g$ ze_Fbh7;s;ueFJV5+-oXQ6LGK=V)>O6<~u`gRO}HVe}$}*fFDza%wFLxb-Z@oMB7qD z&OQALY&*V+tNP%0e#KoOk-0kCwOldR5^}3yWITnxENdE z{zU!I&yF>nTg4%d!D8lE)J@=EUA5Q!n+P;^5&uT&W)TYat&|aJO$w-atDE9CV_AYj1`)@=(=| zue$A+dkc=wLi_ogJ{&*)%(5?xsx04=IP|B8o%cKM?^8H?=(f6-e&{zDFm`c}?QwHe zlZ_NRx+tN!Ru#`+1%X2siG!^@gi|nPOYPK6dCQ$>es!Ra<$R!6fKLRuD*Dn)TDaO# ze}2^qk^hO>3xZNYXq~huT=%~&M0DuF36DC00R4hjfX|Mi^ZC!ojIBUv9PbN%2gso= zhy-cM77qMj!3oZxaj7GkiWdP}*OF;jT_{Sr=Q@YjrGxVg|AW%JUpC_mv2RN%e4fC)%s(`vA$@0mZx)#m(;~9wxuQT zVo>)z2{B+B_&#q1UE8LxAMmK9i=+dD>>32WX|b5H$<;);culdQVSsJeT!+lpF-Vns zK$raUt!$>nG;ye5NdrP{Y{_?qRUgZ_yqN!9nc>ZH?)22g47c0acT*-_X`KiK(W&I1 z(|PgCV`BvdgT+N*$5ZkON({IG8&DXQeyOo{^iwN>cJC$Tym_i?r4b<{S+_OoQ}m8dS-IarY+;k95Qn(oR&zr zjWtDrdJg4+bbz_~_9`ESq^HBsPLQ;s;wLgXJtYnmIYZg7#r2wS zX&D;CIkNhC&@4yH&NYb?y!S+Op|gVM5NvnH3ErF<7WOW`D!kn;;`|`j&7JBxp zpRDh05t9G+%c(YjjLow7q)gAD7Gg|FrrB(#-2;&%vit`wtbRY}z`W&bR`|Dl;C%cc z*sr{5|1k3yYTa|_T8wqO1tINpo9YZOw-yMla=z7$y`^Dnl^2Fx+OL==AJ}9e&>99_ zUGJP!>yx7Ckzt2-k2+7H!~~-pG9&VGWPKV(#I23LrfgW2Z)H2bj^D1Ia#0l#wGQ|3 zd&^m38E*Y2Lg>}&_!K&>_xbn3W&+zN@)Mrlcpg?cGwP@k)t|vl#oE#>MTgQI8PP@C z=JPpmq`ncZ^~exDhFGLUVtUJMx9*UctT3|SP9oDe&oRPqgk@I~EU@$9)HLyj526`o zHh0S%@zqb5pctQiohnxRws44{x~CgBG$G_WYDsrT`aziaJE2c!*~|X+rYZTs{8yM^ zsa33s=gisPs!q&#qD72E)}8Z%Pb5Ap`tvfv)g|GwzcPY8H!w&5TQyME*KY@|rZ(CV zZ9vdcFPn?~xT-|#A!X*9QR+a2uirO1!IpdDG~?UK>{otSPSsL6MdPvtZ_}E8%OUqa zR^g;f?1WFt>qWR(#)ngv@yVUpPG7ORa%OajdH}^A2x3_h@SeNqEi1GO=>_ghuwi#d z#4W@_TE!n;el7> z_uatyPO*e!zuN=-0~86hbP?kjfxqt`=Mc?_X~>qqvn5oDErc`JZ?jOQk=s9z`JK># zU4gw|szrqfT&{iuSRQ+z9ucO#x?kjHNeBZWW!&qFSki2jg$sZFRDxlSDAS_koOWc> z0=)P$i!N)2+QW~IeE6LWhz8LIUbj1&mz{5_=(Rp<3zT*=0Xz3+TKrig0}VvqH1*qC z2#I)w3h?rST$bjpE%?AyPcm17(%ymSULxJP!G4ofz>3A8vkeU?$HVl zEL0eA-56Wlyg4oKaE(1L;K zC+zJZV>M0aHg@|b{3g#Ypl0NdMk%mr+cqY18`3R!^<~ftH+hY+^Fp6mni>jxR4tlQ z7Rfy?X{N2MreVqPIIQxjGTC&_bqi0-4R&n1&by3f6tNhWwQJ6<^Nv0{_fqG)k6+Fa zk`;VMPyxO#vm6p}JD7VFG9n~F`rnmz+mis(^8`B=kG!gjV*+?ZEH7WGb>9yJZ4S)k zTXAGWN#Ag>fvr1f|NC41LgY>q}9Me$kFw{{X3W=VT* zN0|_4`V4J=s#W?ai$Y4MCPCZm5r0P-Cb~F<1R~(l^G+Gv=<{#&^|ynN1x+W3QuFGG zK*0)N$nSvaEI)R5kl|No*ere}XZ|N@RZgrL^*Gd2khkinD04u1 z$b&dF#NFT5&V~DTLOi*IS3ssT7{baF7>AaZ&N$m!2qlo8ZhAKDl;CW25Hh&l;n9yfMS751#H#wLO#kp9uXg ztUjfBUp-0CR3hLW;$DSfB z1R>s^vc=s#cX*DEsOMFKhHR?NL`BZ>ZqB`C1g#vk^0rt0?488qRi-G&od}hcRk`V^ zvwV(Cic9W@+#=&NGdP)vUU)d~rkhk$5{HSRDl4mAoCjm18|8vsEkdr(L&4TJC1cr7 z;T>zjdF?M_lg`R=OI|-B(pN>2P*G_iXV+e+Z1h!8*L@(e{BAvi=+dH8G%A{bfi_tOuZ{M`-tBr25I)R_Q4}~o!Vz*>N z*;qn5w09X9DtTQ3krg!&+xp!Ye3xv3n54d)_&NTIgHx{KlJ-~HK2lQ}mF-Zkj)QP( znwGw^>1hiV_Q}2GlDLo`5sqr8K1yg9)6#wX0h0?4>4MhW*lktO=Ct9$m=r`sRfI_k zhw)|5D1{wmL<*hDU=6k&09H#Z63_0Il((zRRl^-&`9~S!|M8Lco)2P0l}0j^uB+%P z9@_~;Y;Z`~5~dvpyALX6JoEej**&p*W3qpDU*0#c`1%@VuG+wij;_BROM2XMD4mB~ zxuQ4i@ODho@)&7`=o!yv^IA3JmK3!*UU_;Pu|<)!?!y`#TK>#SynOkxcI5oLnwX4i zhz*mB5!5v$^<9`b5_(z zy1Yz)G>d=)ZI|#P>8r+GvD`JoL+2jqT7&=ZP6TAFH2i4t`G7DbIqRx5fprx0Ko_Gw z8G^vwdmDG0@NaG4|J=3z_ZR%%tY+g&x>>bZ!=eLrzX;X<_JVd!6dji74}{zS3MoA5 z-qmYkG-`H-?>$r%X`9Fj`)mibn!I(ExnveHTY~&LeRBUy6pV=*f%`31D^*BW*Eqb~ zQhc=gZPSv-JFV;Z=lqtT;cUI<2DQkIbWOktXuFS+D4Xzi*w7D46BG6UZO5)TTy$3a zAs%x__%jK=LkCXLSKGOb!DpAFc4*gf(>Ct=S)THeFz87Q+Lw^M61ncK?05-hYmku7hZPXi0& z>*=Xh2+3rFn)@&t?_FaT=L_@mhs^_|0x!}ZdrKp%_<_Cyk0_m5Prs~ul8|rp@4rn* z-b&smu>kd~R6=HwzyyQgvz=FFY^#u(9Nk2+|9w6F|Jl6nZ_z!pt*=jF68p1JDV73q zGfmuhTVT0VCEjzw@WJ(gWjGo#@wdz=bvdj3Y&j@gI&GqJVO==9ddU8!!TQ?pcHC>r z=9Z=t2sna!8MrUn!zv{dA=^phJwY4bqLC??QEP(D+g3m-u~OcnF;_LUsV_u z2wW*T8T!7x{W7f^D~F+u8}DiR2iXp9X6?qa+TDZx#P;|O7d{un-mFU`jVzrlS8dF0 zgxuf@cR>h_HRPPhr))ms`vdDR9UN|A{#W=rWtP;7(*~`R3b@?n^nsMqSlYM0TcbG3 z0H*dkyS7Cozt5i0=Sf(GoLzneuB1C-|03mTz zmCLot`8!kd+A<6xi>;B^EZSs=J(jGM@m-u68FxI!&td(IerJi$N?S|7tBdDHqVXn9kjh zkyNn*`F(lwIUCCV=n>`kZEh0lBb?6m-5)ajzcA)Kj<>d(Soe1zx%^*mo3b7Hi%ej^!wET{QMP`!uDy#2A>^=<}@)`&HF%NaLmW(;VO8Co-kRF49!}= zWtMeUKj%n@i|NNudttpU+&OnW%DxuEiO6HK7N*hhSD!+ipScP8XQU+VJ^qrNk<8U~ zc?sf_9>yp$9%Q(cQ+#RGuu}4gvjK(itj^P{tgY9af!C!Q5mQSborLA3?9fFJo|y2R z&$0HqT$}}7dA|>-1(Oz72OjQhu|*XLw0Hi!{*_N78_2JN+n^tqh?;vO$vT_eg*178 zGVXDjIUU25T_XThaF}+!Tw|J-G4?>$k1NPlN`dM-b8Kc2S@uN~A3)T=dCUS$ryoQE z3ZzjZA_g4s{OH-eQcF!F1uy4Fqx}M8;74!KQ|4V+NIghE^e82M{hUh_YlE1KA(taI zIhP+|Vpf#xlUnR@z1u|8oxcw{I3iCS=(OFe`NtwkX&De)Knl|-~2zj z(NjZ$u~mGWafZ=ReONq4G}YJV1u;t%R$XGPGIRD#;fEhvEQMXv)uKmMOiKohtFOKm zmT;M74BcE^L=@)N54&08V95X${;pQE5&uRTX{*eGvDDCHib*TqtEY4qR$e6Ohf6cT zslH>5|BJo1j*D_z`-cUQQb0jKkd%^^?vj#Lxf zbIkY6w>Q;N0&S2^0A3=b1y5}K|xpdz8CNHo0ns$k6#d{HFeUp>JChPxpIzA zoVM`<+=UYWWa7nV6ILH53V`3}?=S5a@Bf&wwC#yz2#fPZG7)>Puj_8)pYL5G6h*^*A2k z>LEW95BNwA8<7DO?-Z-2pcN)bGhIe6BL4dP4 zK=n^rXDTQtjN18t859({b&KmIHXt41#@I3Ov2seTHSc6)lDutJDsf(caC>e2bgtt; z7jmuXEy&a8haDgPjl&ugK{fxXB=Jp-k#UyG_(u59#Dvu?+vVie&4~mnk|$I-TIMuk zy(>wMP#9WWUN-GBC)KBUH9V%TYuD6z?h+i##DXe|^Yf#!=o9qcx<*I;pev2-9qq@^ zwBb}+Np#M1Cb#MjLYHu_y&oTwxX@qM5AxEjY;Tuxt?f~+D=RIHq>*(l4uK^FiA)Hm z3{LKicNj(R!3~yHmp6RTW3Qr5%o>& zjGoipx?-xR}2Jh&XLICaaZlEA$3;MJ%sRmh5ad2={U+BIJjg5#I$?lHALQJr(i2Yz>gh0H|$y>Zld^J!8S0=$R7Ql7{mX@B7^p*XwB{qd2Uks ziMwM1k^Uh_u9>C%hYOwYH;X1 zV6>k_3H*j8cv`8YDn90=e2_FZ;V37#6)(2FHw0cBvRbkrIi z9#sRKdH!QSL%;j=3=TeTv0!t%(~5e{LMl|!%{;uDYv9V<#wiZlzD*cm+jbaAFDlZ) z5-09AnQ4^FVDLq_cI=B zgR%p>gNt>LQU49b12!lE5FLy~Ytx~>M?5$&po)le)3Ce$%#xp$Va#WM=-k|^=CJ-- z#LGZjyB6dChwO)+;?@7&BU&~fIw+n~3EY2+c>llJ|9?|^Ojc$#?9L#rzsLL={!mu& z_edz%M?mmzNe`9rt*530_&4456v=*8di|kn&o%W&#_=K-enSiYFmA0yH%MTRq4NI@ zQU0wl%wV{7A9CPtf6oBk-C+`MZPFrj`_m-<($m4U7KjuKO#E;4_{miafwxD>f5H7* zOt|5n2AF>c!y(CUc<+~epEy8!6ojGmg#X{N091p~*S<4b)b#IJe@qWTs<~Na9HE~! zdH*T_Ue}&KZN$>#~EfmSATzeHj)>{<$ zc~95cuKl-agjR#O@1PKuNp)@A`O1Fa=z5^#FN1}P8+Ugf3lAr9ryNT72v!%C+hUkS z#`n{&i^7!QzgV^pFZwT)FGV z^Zf~qv!J}0ZMggU2mMP4^Gi#ju?dbTRs;Ny;$m-mfq3EXzy0ecAZ?&slNZywjpEjy z!1h1nL(BC;hm0qvP!R)8^kkF6{U;YgK|_5$7kem;!f%@!^1Irg<%*jt*&8dLFBW5Y z;H?gKEdDeg!DK<{+ctboG$EnoPuFkvKi>n+eE@^dUE%;c<<2`_=f#cd0qBBH5Zg?lWZYp1`=^w=sYV;5wp@_=9;qLR>9bIejimxVX_8M3#ZD$=x z_-G{AAogKBz!gGA4#I3blzMPoLR+|&55LiSrDyxvh@Dbl&;5c>P2(2l031rPYE5E8 zVM8K)Zo}Hdxhui}2glN(WvBHF{)V*`%UYfA>#)|(^8C-w`7!vj-S!wSongLo3%QM-y~*oKh4FfB-z@{zTgKEeZ|iz18iLJAMn-wGI|}``k|5CB zLghWh+S9&tvdSWP7rT0oB=7#nmqp62onoZEz7tyCc=|L6F}ZF)TKVSBSN(;j2iKeO zJ%WSer2}l=9~{?D7*g(B?)C_k7$Z?62^JgEQ`kP4P>0<%-$}UN;bePzpZx)Y=sCy_4EN?a8k;gL`U0w=fVd1zPaJ+Plai8_6d$S)-EoEY3I3#b{p-F4P5hTJS8(0u8%zugQdh_!uWf6) zew3R3NNHnh+lIWJ+De0U`#RL1p3#_oUaSNSIAXcEZ?kYW3(Ubih5nH&`Bg~}*ShVZ z^B(z~CQ#nSCi4zy0zEslQq{)Bw&_&+e9E_f{$X_bO=tKKy>-0~!A_I=)qSM+WMrW&- zamHK*VMi2e+oRT~$k?Ql8GrRo?^5W2N3XBPwe656emT}j#3v)8b*;hKTZB+{8WNDf z#=GYYJjbZl9COXu4{N?Gc>J7?`d1H@5svu|{j(!2ZF^TQN%UeBPqO*O5rorx=z;Cj zwEK2^R)1>3dDvc`lXN=2SMzq+P)W%=Vh8D;Ep9@ChjAhaUiT zkM>a`oxQeHK5b5N2-1h`^iFFK%~uNV(6Hc$iS}pl;3etNF)w+U;&<=R+qv-A_AP(I zCBKR&PXon!@;8AStgcfJZv(@+h&O7x2HS2b5gi$yoCmW;#U-(*<%Jw>6nCT~QEOej zf}XG7r7L*K)z}%hws#*ucYf@0nyx*=!p637Z5~gbm~(7FA2#wGcocpn*tENw4n`w3a+M}5R+cqqck8M=Oqr`pCH%t#|0^N?dIK4JSZIo^P3Vd2y8LRF`+L|Ya|<<^ zt=?I3_CD_?$24zv$+mLI()H9)=rg558x_W&O)7;JQ}Dfo5vg^S$IJ;bi-|04<%!$66U^aeO~u(9zC!YazXp>8Jtc-v`+LNhSUyVg>@cT{_^I zg=)PS?Rz;na|ju8ab!xAptY6Nf!ClM$EPTwap>J@(|{UP&DofIE^0w3^!7l{t(Fq< zfThDIJzeJcPZFHMHRf-IYNw{pifkS(z4EDn*nshrapPBamb3G{oeJ9*E$v^7u+Tr! zUJn^=o3XJD=*ij2M~TFL`2$*QMm(;&tYizl;FB1LPh9YO_k^)DKR#>u^-|o(sW4PT zUP`|;Qb!o*GZ6AD2do)0^5`yS5laowq$FYrKc387DWAXWX(96l?IWf+wzsfb-F821 zJ}{sAyAZtc**aGz5zA-H?L2wH{lR;5Th-Ii-akf*55sB7)gnA3vd6NHontj!Yq9g2 znuCmB8!~ROG5(ImC+@l4~ zBqayWb-$6Zx;v;XE}E4ooU~ImRbDCu!n-d@6~thg+x*@cQc1?ntiTQ4MT*n4-JJ)R z4IVO;cR2j3EAFvI*Q}q1B^w_iYvZ+7N|x-BWj}DXoyYep#z`+MNE4I_65H49Yv-Ih zyQZy`jd>CSUTaQzF0?PFa^GYBEteSN@$7j@?HxmR2k4V;|fB zn}^jwAT@|HHWK4)j#9CiaIpFuruI07!M64o^bFZDc3&Y3YZIyYrnirlLr_~LH=su+ z`X!w}?h?3LPp_6{Fiw0!Ov%1x`_n}pdjfSZQ9pN!m4WYrCMQ9`vC6WvM_7zXzWkGQ zjCss~8$-}*WOF)>;p)`22g@0A`FUIoB22JA?Y}x3YNL2N>)QW`USwyDp6b-UC(xs0 zSTDSUVVTEWF@+`Z0Rs7n=XMkN9Ng6>SMdoRy$812xWpI5?&D94_x5T6toOkCH~cI% zkm{;RL~Cd44ESX6v&C2Z84@6N{x zRPH`+F#VA<3*Ju9769o+6$?FQW00T1#WsRMpN}OqLgNOIu|YmFJ&cl>OVd5*g1jwN zHQKNl^+j!WqfQ>@v##5+GkgkCRuSiGr}x6Pyeo?qkswOSEwM0) zl0?809ZOTwm+?0ZE#Evd($RWs8=~j0wgW}43sVfQ=B!M&;Y8X(EVY(u9(aAMAUAz8 zzqL2E{K(VV-albIEOT;}Ju%U)mZy7N#LUXAwcJmf{a(F~Kdfc?g9qYA!~5j34IXC# z1DOIoJj#+OJ?b95*bgbqdCiR#>hxw(&+Nr*M8?1-*mFgmj9tkslF@Y6P+MZ>Q(Il8_0seF97z&t#H&w)QFHR1oVIAo8(+v6+{eh2fUR z*?0MPpk*c(WtbAdR3qA`ylX)9-ArXX0|{^T)F(}$=>j7@7YcwBQxtpc`a@DID;dO^ zAL)hNAE{oI3k1qYPDv~(_qCF%kx3scxJX91zqLZOMI?P{=`VBOe zcq-4oyY3yq`MMI+Fyw74nqyCzfdgF_<>Qz>O3J9yQyCILHtAe;YoEP=3#&BG9Rj3M z*dfO-diN4sps!-Px!n80@ni{yT?pi)b6FPHAJtwRmpH-m99rXM>El`1E9zaXV07<= ziPLE6{v!OUN*>#(dl4jN$jB8R7UTZ~Kc}%$b1y8mdu&v;SaIhzI|X7W?iZjTrk(%d z#PT2qbDO0xrE*yUWLc=jImw3TklB)<$2on;-OAxRz4v~sv#S2o<-)Ljc-uBxY;X6c zW}EAMEKWS>aLU3GzKx4r$=M*pTX}uxc2PA}waBKKGiVYtRBZKTkh69`OS&3C4Yay@ z+-iaq{HB-vRGj^0Z-pT;T6z!GQrlhX+Oage)TEEg zI6?+;(Xa2}1-dN$gk^vIM749vN%6)@Cq=d6iFXn&I6Yrg+x6LWcRoCp9p{oQck@lO z%J6>a61|Zajc*2=AB!io#D4rjA$+jFePt$R-X!obaJ?c6e~^v&DFBlDZ)7i~@_ z9$G=0{F>I4KFH5<$UR1lQQmGN&E-zK{)e=mzNz=P-X2=Ck_aVZEw&!tEH%%{5yp>~qFk>k+%kEa`nEA>BrD$jsp1IV>A9o`oQVxyoca4a=3tB9m_ z`u5Ia11R_^6hrDj)sOEMi?|tQYYl(}G{B;Bv!cg%?s1&}>`b%-3ZJ7WDCyzaF%F(* zN&IkuFHN;wY^61)dk5+5tIvU3Jjt|^7e37rP^LvZ9C#ML%fNL$4St_EH?#J|w0OXO z#>VqU7D1H3B3QqP91av&s2Y!^eT;i}QEk2-$y6r7n)qN?1O>7DP2C!1V-ovKhOxjV z!c^L|@}*wlVjM5VUiiR=h~DfcW&7qBs8H!o?50MfMgE%x^OUee)32eDbVZ}J9BOR<2*=mM3U)D3?hhUXg7R7hyd@VaA%6j~2q z6~1oC7iF~9*V!B`#&zmn2sVNhGp5j3p^%);Q!7o!z8w*F#p3L*JQyu_d~E{?40PJA zx&@yXUxX%MjV3_3n#aBR z!`}NrxbD6&?KOMvB{eEvdM9qkP>z)*#y|dUqJ$(wuFEa2H1Nd~NIqIp$ZMC=&tCC7 zdN05k*oqHSV3hY0S4sbOZvJ7j8>Qx~OhQ*zYH$LaE(_$GK4A^k_8dz@($CEr?w^-P zObLZ)c)=#|>TE0yWW_oo5iC6sR0PPv^lLFaGwP3ezl^p`VIKBCVTJPvN3U(`S)R8% z`6OIz;VHS!QtEVFt-ksTcFJv*3elt>!<7e~oC$7rGBG>|nSrh)y^T09=7Ft$%*5Rw zk(2UZz7G?)=x@UnZ-c5pAk$OZCfLA%2?;Cd7$wjZ?bTbb%w-||t^tonjN4q}hZx|} zfV7)3>d;T;eE~6ERX`=3Zk|Dd3_Q3;lXPg%lhK|FvJJR8W+`VaQZ>{udQ3cE<>et> z1%X$(_>J&XQ%LyGwoI9ac$)rL9G=Z#o8F9d#psq6(SFUF45G_jKc2nJ60;R)W?8L(jof(NYio@Rpy1x7fiQF##juVK}{ zlvcEIab?F6)1#zYDMK9oe7r;-(W9o#t>oXu;!GMM55SMhba91lLBh!&FgnY8^(tIP z+V`&*a5crNJ8fTtDF*%)2HgTA1Y)4C{zvBHCww=mk?~lkc7vBgA#KMyFX4pp2r7~^ zqWKB;>{gzIdQ*(s_SjZz$PO`KY6kfvN-C?ONP0it^#y(FSKVm7qbc`E;_r=W4r?Ou zC6K z6JB2&aDUG@@-%(9l*;;bZ?{yHu`oY+XOJo}frK^qTSo)hmohPJ*s=uLty@7SSDL{V zcM#z@mAMiWhLJSxMhT4fzD>kC(YDCII9HZu3W78b>+|oPz#2&QV6`t#URefN(Ypyz z7durA!$(p{`X+0y$v!51}%@5U&O*gi{>e zO!7<^D41!N>+_3rovJ5fY(62lPrghPQR4r7I$X2XvmDOdHgalRaz2R$1__V2?Yy=H zqpd@;0(kb2Do#teT)KQtqR^#>*w^8f<&cjxyc;?~&Z=(?3wRR8tCY}>I?Ji#LU3JE z)K-rAdkD~_b$}L3rMD(4;h|NcHHV>@>8r2C=f*ZObv^q+R3vWr!{}aJ6){Yu41(kD zlyBp}n3nI4cMZg^culi%+-q|}NJHU8&DT5!*nRr2TP1bqx2naTRR(dyeGhAcPqC9t zZOV8)PD!LYn-rU+ZEIJjEG_O7&u;YF^g%gwOgO90bk`NBPE9FO?t-7Uiae}JE28e2 z&m=k9!g#RhQ&U=7fkCWleYR{X)?_=zeKs@O zb_KrHWJ;WXlAVnZ_gO&W^Z%&Q@K3voS@<29^xP{{+|)E{b2foh)@?;$KFBF3C_EzM zp4@Wu)sx$FW9ACQ$CFO|?c|alU-FLT~MZD%Kq9WbcKfbwS2nM!p4fxunFhxS3*n zX1^JTgYAZ3ZrH4DmtYdjm8W^m=7gvC9`?t@<|^XO@iIuKZFGEG3xi(WR_yS~K!o&d zOOFy{fA{EK9fMKKas2}lA+H4e*Ow%mJ~Nm=8_CN+`>oB1G5#8!!^(>)7RFAt=*$@> zEF8SZMgNK@VJb~@T$PyYgM`|~9nTiSysN77jiEtp_O)HfrN*yfbyK3yA7`rCX*3o0 zf}HjRd=I9K%#{krgex>~SL~zr3SW{W2}-=rRf;-zXJR<*G8*Q328%-0iPA{+l9eW1 zEtHbx_MG)~!x;y_LoO7#;rjFnx%$lJ8UcIbb)dR$X%PZi{mGsR@dIyB{xo9$@#&l$ zs8up^O^S*7an)uMC-tuSSe*6%B0Ll`GN%4{ z0WaR;nB;v;o65$zI;ntL3QrY3SWSSHv}c^jQOh-FIzY3Or$mg)v7fVn#lA(s*(mltpMx|oH` z&wC}Dx=N}_wl*}k<2A~*;#MbKHJp4h$Gq@UIt2tMo?Jk6rV**ddY;Q-E6B4Gx4)ty?*BHSqlhEHw7%i?e9sXU7~iC!#e z5$O<4xVu)6WST5Wy9-1SF<;e69qkZd0gb1mw*8|#{ukU%A)cM$ zTQySecttw#$tgg!u?ei9%dVy+Mv|J6mp@m)e4!~`^>!l=pC8qneyspFtTHK;zczm% zY1x>;`j7Ld0ox$w%Sk**O^wmc$gD}HP3_W{xJ0e2kr8=C#h7ebhHjv%jh2b?GhWs~ z37cDq2z{AorRMrNDJ>n%7`EMb@eGfKYm|GnId&!a6=ANVmDm1wRBy+l~uX{%1^n<2>@n;D9|z$nm++)Xw(Q_ zBIB3VnW3~@a=ZBCv-i=+h^J%Lgf}LzJP!}?7J*ha2hJ5f%g^cjKG`$A1FXyXBR$j1 znq4iI`(bu7m3ls2S6`eE;VpC|Hz63#LX?uS@kPuVi#z?oMGZkK@gfhydJgDln%(k9 zW{oa;h%-rGhf|49rqQlc2A=4gZ!Fe(-hH(4JhGk6tA7zuqeki0o}6(M)h!$ptmrlp z7Hs1cCCt`c^}XT^gnr_JqM(p9ets>lGo^x9zS+8p%eLlq<-)BKkB*icXoYfI+8&Q= zI?FNrUCNT9Wh^X$8H$IaF3NA-O48CllISi9&bDp=fnQuVnf(FLf97eG71aP3-D5J0 zJJ|>>>)}`?zTY)Z(_!9IE8=uC+dfFu)aTbIbl0l{Ys8+i&_Dy2RQ~`r17e2jdwzT z;a0eo<_cy~^*|T@wAsYq9Tkldd-mq$r?4xll46}E4WK{qCBY8t{{1reb$UO|*E#?w z4D0$}lDG%-rRg0I09^?ysa4OH2U6+XXZJC>xW;!x=vOb=&K%-LV%mugFKSG#;>dvb zs_2Bd`$H52WlQrgwj1RWZi&*ft~GqpvGZ47<~Wp4R^5y)&y_zYM;D)`;=6O!>z>ud zFQnEAgr6**$`%_V+ZY#?m~ZfK)Mi>>mCBbjIPJJe(M6N#X zzQkynKID?2?FxyO*nTL+Zv{Go!XOn3-9q_1Wf*)>Oo-ZXSPii9^)@D8id%V&x)}buA_ifbQn+MITh|wq_8b1okrF|5)p2gv>w6?N_Zme-d&CGu*W~t> zn9HT0{g7U?3o+^e(kl|cNLk-Z>pZjLIEUuf7gS}qT#wswVrH8RWlw(!_m=eI?a3e74U z1ZB*R=8s`6-?w=&@F<ElzXFVH>#&GCIUE9}cLJH#0; z->uU+UW@+u?Tf_9w?(F@l?@#-^m=LsF-os5E_11l4vtL>tLjuJ8ar)TmIlvMwTu>= z>UmsaRSh+0M{D}V^|L&!=I4S~D`9AzAc2EVWXu!Hhd4ECTQgdPHa$xo^P&PVO&Z*o zEtR<=kdJ|fG6GR`lDrh!)OvWnv?n>TN~tnw6o;(w^YU1gv?mvz=?aU!n{!Fi-FOTBg;ULM=KygKKIYcPt~>o? zgPGHFbH*eoiEQ3SJmz#jbD_hFJTZrfDh@qTm2Z7viM)fBZ)m*tN*WWhqUi)hKbtlk zP-8_U5V1-(5Js7=+Zy=BghU2u8edji1ndFzRg32jEswLNHP1ZOMv+QX&Tm7=(in|e zmOpE52qJ_d^&XeCoJ88eYv7($*JB1$)uI;PIIFlfgIjan1jg?7>pT{6BaZ;)IXq%- zJ}B+wz;ilo0zeYG24Rh6+*Lsy9+3OOdj^2$$tvpU?zwI2W{y1E7$8S!E5iQ*DAmGZ z{GL{L0@kzG<4@!St_csPTwnDT|MALpy0twr%>L-J3Bg>6`T5-NrV=aE6+ZotvIezH zPu+DUNfZ5Qo?L21 zyd96M6=n5S5>m3dF+9zjg#3^=EqH>=Yl&E# zxYMvTBda)Vy4RfqSJ1pvUa_gP8X6tz@HCZ}badADjl2+en93&1tNpEu4`Q0Pm1)LnEe7ntF76I}_NO&SI21+uHhI^;ct5X`RYP&)xS<0F( z{b!sy*v$hb5w;DRnOr4>7`Wuo#aT*;6JYxd1qc8X^hV!@s>JSeJ|__p`JxM0x}=L) zH4-uA;qC(?t!XM1*qQ$(58ewG*)ByA=J?(QwWtMjf%gh34=n75TiubWx|0WS{>S<1 zNQ1CL59Y^0ow{`!LT-Yrb`w{n!pPm5nXWRHy)lVdP}+N+U^g##=FSn6=VHtgBEsC= zXzl5bxD=B)NUCVJ%{0C8w#kD%>0}ohR4B^d%+~Z(TEip0MwdmlC!kcadqad9_Sp7Y zKd$V*bkEe8rPSLMVV(fL>gKndiP0VanGY5pdFhjGmiiw=zfWPaRB8H-{gIN-DvVYt zPr8GDEhTkzg+8x_Qnqs`NfAnYD);IVDduE_#i)0 zl9uLc72=d!Y1z7uqhA5Wlp z0cT~U0>a*H>!eBPGxPmVNLrpSfeX&xX94(>>x&{}qlm=X3*F}0EehC5A~G^^{XCoO zUF`#~bX(xvq-7Et@qHKm?NZzW^ZT=9NyU5NauFwDE7xXyz{e$h)S>MivsqV+EqRk= zsHoQE&Z$zAmREc4(#`MU&MG;%rSfT42l1I@j>mg%yv;Tp;Z22P+>;|UcPM$E zWj;y{>xi!aFc34I$g9Aa*9(N1;|9{w(XQ6k4YUk&owM*J35s*XwE60sKh$LhOx?fIo~WuDWuv92Dz*szgK-ZDwcx4dP`G^bM!!evz0K_cO7H0& zTOW|Qm5Ry(wsE$`vcBCdw<7lz7HL9(%q=37%RTE+X}I*A*H+gYy4860ByS8c^(%>deBu zkZJ`*W$`=ZPXtzqPw>f=T64i7w*t9S-!vw9c}J_j+uD>S^Bk zZVgk}tCI?{X~-x$bn{=f-JYJxpWU5p@C?vgSX?|3xt|d#lN7S)#^{diQCAmA#xY@d za3Vz4z<5`Huf^I>l+P~fM;eY2$`%Pt6q&?!lFRGOt~n$m=>ifvT++4+_j*;(D_~ju zE@9t5;{`K9v`HGMu1=j8mw2eQS~=U+MjZxyNUGN|wsp})Ki!m!o*#va}-00%swDb&yYir$IE=@5V+LL0x1ytf( zQoYgSH{H`Rvnt$3#zM~vsah7Ka(p)$c#;0%X0Dv}vv;0c5~=6IW;t-5MKz#EaJI*x z=jZ!Z{zokaiElk^+RNaMJ_4@mdNex9gP+^B-9z-uM&9{}jaC@>V=z$6XwD)QsWDT^ z*g+>P4}gGz$0gP^sStQSKFr2EKD9(jQ)pDrWl~C@eCypcYB;+T^G2djjBBib&&$|C zy(+w_^cP_Yb_{N$K?JCbckwY5^o;%c*lstSeP+9zY@j`Hx;G?giRFL8|G);LBgors zGOo$4tI`W$J_2{{x02z?BC$3bm{2_sISW~da~=>ua=FJWdHNv5z8>Nei4xhlt-DDF z+i#^VA0JPwGLx>9Zt-=-ZD`8t+UyaA5)eN$4FlO$^=*7acNWyv>K^YioSlW*&L`br zoN|33sOz1xt(u&@;(diHEfvt!hsP4FF}=4GkWM5QTiEP-Y8;Ez(y}s-gHP%=&>=by z1T%d^py4K_y>u9u(**kA4QVR-a)AjDjrti-tEjGt;NNh*@Z^jJBNw(kc-sJc-QB%kgrnoUAdpVXZd=%8|o6` z&%&N)K)`3~D&4`-Vox;I(r2zH>04Wb5i&XkJGkjgQ%&JrKUM2KtVH#U@J0%{n6}ug zb^_k-Y5lv#DDcWQl(cqp9E5kn0wXRwtI&F*+*?JZ>|Mb7r0#9&0y#CZr7gG!FJrg9 znYUW_!6EMH>oyLo+66B`yH9!`3^(_wqYnD1(+wYqQ(vBZUe2~Frw63v8t?hY8IENG z%WjWbBvCY7z4H3Z!SKN1v%#)ot)Hi**1)?9`su{@Wa=W#`|>hg-DU<1GoWs!@Iyy0~cF}db75pdF-7*dPDGDkO z&~-#(Wh3N~clfCHoPicE;^8XqesJjCIr7n?kstf#(~TQS@b(8-nl0V;G8c z5ytjqEnKB#MsAN zyd?~FF_!R_-4E3+hD`(Czqm~PV<^U7NBLW0ZsBLy3w&Ut>_qv~7sa#QB_k`JI5r>X z8ozl{b>2YB#dmE~Wa#@O-6z3KpJ^gFm3{q^$?+hl!C9X{5>p4f-YiYmUR?uLMSQ%R z&D^{(HZ><;RfJp<_f9TEElYL|K<+%A?hxgFVs_+tYMBAA9iXT_8tH)AZ-9fPF)B8g zr!;bq^wSn%qG&I#H2mT;5favC`la8zH&%t0k9Wth`zgt9SBjmj&O63)2%CA|kU$Q@ zpxhV6U+nQpB5rrAXG0of<-^B&DwPDFWTX+Ij!dmEbNk4+(h6HwvB-T<5Fuv?1u}-v1nNohLZMEh0V&1!=bH9?isc;NS@jtyzI4U(4KhQy+ zf7x$<@s&b3Ejs0KJWydir^ldg7^+l4!C^W5?ah)kKEBP_17*tMqm#Xrl4o4t4Yr!1 z!6w#`ZJ$?54Hjz@B{z)9g-0ud9(5nZY)TO>ZFT6pq#^6@)O*(dA=W(EUSd7^tgzX& zX>+SVU~O3&OnHbjI=iZH-ae<}N>8zyZe~0CoPsOtTisuwX*9{UU3MuteG?N$gM4Ug z^<>}e&RlcG$0&APP*JOqnwx!#^FG&DQetZ9Oc6{(?4DzzQ}`MIacm}2-im-xmpQB6 zqaS^avyikhNbzL?8H?xG0f}Rhnxa{h_GkM~$in5ScvlBsvil?yG!Kbp=+a@A2A*@L zzW88~i?@)yZ)*(a9KxpmoW1!^()&sYO>_D5a$|ek>`lu3-<`R~L+p2f?|UbTu%FFA zvYc5W^z`75zcMI%gXroBS+FFDF;ILeEGe6c1HBinZJM$5n7v5x3|@Zr(x!UywUbf6 z+4lFX*kzHrCps>VXJJ3o?5?sTw9JqrF6PHm!S)tfW9PIg2H)(PF4Lsx>&0@O9M!)N z22IpEG@R!6-K{7z!sYimp9%;++$^*q&8}>ODIT2mT^5{{PzvYsPg{LEpA!SF1>LFg z{sy^R7IK$=RW4svw5*Q*L6xqccd|kMcHoQ3%mO)Dw{S(Cl!=JwdI`EmVYR9?_5@sz>jQM;85wdRmg`k|KTgXVB0@GnHo4 zOS@YSzyFDgFq{4QGu{UVpkGR%2!4rWkiW@YG0DAIi)4udfF}tlSseTVelav^ar?2* z!#j953f|5G6ZElQL$E1S2Y&V0lQ6-7bUH7tpR6$Mhe&*Htp;De>!enBujUp6QXqTO z^881oN?G&Ch>n`H{($wi72Gj(hPRzT&+Jg?#6j<(ij=@Kl82c%vCYuKJp2w`INsy4 z6~*ZAy_wrhN_m^T>WrNON#{2xy<$@HwdQ}^t7w0xaD;m3ClMjoxkZ?Bw3LrQ?83}Q zdRu5i{+t1+(cNlw%VW50ExmBRkBJJj0lLz-kvFU5$^qk)T{bV~Sb4oXSeMxIyLZc{?WSFno$g$&%(AaWTj3a&dblax-+Ft%iXzCW(X+l~0mp{z zri;qU#bKc(W}`Fz*ZWQ3Jy&P2vI|c7w?CsOb8>UrJXmSGRXD#Zi8$2_)EDzyXC`0# zqz>V}S4TIVw}1mfK43>kXAp5{Ws&G27(~fbo*^*mPY4KEG$ju@3VMYd|R+9V< zU%veMQSCPQe)jt7;25%!ScVp`c$`r>bD}dr&JX>nlo>thLgQKii?wfdXVllq^!43R zIMfj6QSsDu$w4+K*i#<|=aDXM>W$)4++#xeIz$&tZ9DCtG3#wJ#r)u7lWU3JIYbLo zZrs>za)_x5OTjk)p9V1)MdCFh!sNnt-2-R6!#Zu7@DfcB&<*+)93xeA+iyuNOa=i} zu0ylVdgX$WY^m0&>7G>wZim6RZF)^-OAVBiky<{U`b5Rb@iE2xY9}pl!TiF5I{Dq? zc*O)mtrH{Xef@!(Mqf+ZOU^>hoyNryjn4**&fXOFw&?s|VRXv1X-O#q_o(~%B2Qb0 z$itAb3PC-*8sCGv4PUHGFvGnri=_fOp|nwObUOjLUXEf(?7F1nXLGfAk$7-e5Uy}G)bz-0bw_S(do9*VAqGr< z_|uX9=ci*OaV<}F(0a5%p3pfjJuuDccT*ce{NZ`*tfiByJ6IY8t2sRHWse!Ewdd~M zC*LW0-_tEQ0rzapBT@JMC7?OLxT5`ililqX)7uw4hkKjhVF@3%1Knc;jy7fvru48E zYXdbW3Il|W@^96E&H}aMtUNxD!Cu&ejS|jpDPa^KP7b`fI@713tBEx3`CQoVcl6DQ zZpStgvvtPnIZQnkawm_;OS_0>(dE|~D<-{tWz;nRCDVJM!60@zNvSxV6O6r>Te9(5 zz-~yi(aF~usPo9XxkXSDU~|=Pl>R*So9yD}T|pfvoz}q@{Izx1cRbbjM;S>R_S&dWPkzy5i9!}WIQL2?3L>r9 z5BXZLB~M(c=MjG2Xv!S*NYJdzsGn8HGjgW#hh$Wm_FVHMsAn9cOGnJE8RVrY^L~V# z@qRi#dopif3pMwjkl{Z+p;GPmD=}KAKSiLlnm_yfbK+R5R-?P4EYxre16Qh67!=G77RAH{$Auod zE|nCLdL&C}f2OrGsmwNO55wzHxtYGbZFthe4pt*g)}^DLdUSPC(-Ju%5QLJh11i&i z?!={hvG(@LFg zaQl$w23*)0?J3{3Glo2ChTa_V;Xk>)NI06AF>L-)oItCfJo~RknPpkcOU* zA{3kznqD9Fq(^=Ya4s|B5BrJgy`8t>THeVdbQ}Vccv(s<)JLg^7|V}SBkZMkiY;9n z*HgcYld#T@2MmJEYu%0%t4KJ>(e5VTqPDe3;1g2tE-*Juvtj{7)E?>gP?h@Z_d3TZ zV;fH`2t~tVkh4hKhJ{*IAj5+nanjO&$QM3JUdhR+`SNbFuYSJzn_`@(BS{$7g}owJ(@6JTaALpKFyi3-O1{o>bFr0 zqQkD+gQ(`{#ph;m-f5uSeL(mi5{Uh4c<^g~mXw6?O1PhOD9p{WwVj3Bv$EfaK%CEE zF^amvdIjhO<*|tud+h5RqH2nWjCNgP;xxL32M|$Jbi_F|CBq@{>G6!d7X=t}d<+X8 zJ1lRY(D&WLq$|A-&}h7X9008t@s*@ z(eb;dAm;VxR;|nVXs30>0^ySbWdSWGxiB&znlY;-NpRiSGsvQOL?gYo6(}Zy|U6ROX1}%-v1@zKikg#L*L&_XRA6| z{*EXi>#4GW|NOj3L4hs)MOt#I&sS$VE4#=viXt=19J%~c9Sl;`DhXp_!6znsG#NA>-S2BAl|5`DRN5oRLbHCgoFgMIWi^=HF$5%kq#DoOFR41G zqhZ{VQ#31YFG3h9nteFl!(jrg$ERIVAA+mMi9uMA<#&z3q<$Nh`%ACZYT(z})YQqX z4celJ5~Hw=rCFNItXvPPWg2*t-s~7=Iy?ON^0vX=d4-$x7KO{?MUK0ryynXUpl#)x z`BibItPi9`dT8Ox;{NpTxe$MrfrkIbWuKGnF!Xrm+;0J0BDMr(8l_*&o6fqUK{d~G zB-2fufl(cHNyMz~WlAv#ABy&~NDb^Y*S4Sgg9)qCqX}0MdZcdOWXkqE6_2eRah20E zt$X)A@R_Pt2yM>SXI?&UXme#$T#jRoLi6*SpeHl3<{oCxR2Q666q1upZ1u9Ppf z3bmB6_6oM(i7vfiFnR$;>pE_Cbp-^_9Ldld+naqWD#tMH!?9d=-dhAJ+;g5i8&ob! zF|kM2CHMcRd(W_@)@^NA0YyPUQLxZNDN47}n}||HO6VaVO{7T)Erf^&C@LUGZz4?+ z2u*5ef=UyR8X$y#bOHo{5J(8T({;|?Yn^@8-p94RU*8|Dc`;{_IiES6QSNb%G0dlF zAAnVt@zrNE|=~uY( z9&jrI78$*n{)&96HZdKlV}7~0#=JYit!FrD6Mu~J4LFwb((}t%c{hEA1PAdwgBCNT z^;%hu^kir=+2jCuCQ|NU)(& zMWa)qsok1;Z$W)0SOuwPnYUn6g&dE!xX(BUTD>K7ZHhP32s~=x^Yp2id6|F4r`F>a*Ei*ei!1U=XdJVQNatkXjt!)ZUbi{1cz9;HVYt=rW{yuZPIjYpD{EWH{$b>H&YQ1B{BL}A*Q{NiYqhKM%w2kBJZ2Xa=qCNWK3~d^|>i6>Hz7 zN_abvP^CrBz42V{*;&7_c=u;US-#*br5jh;FB`iWmzhVsTI2J_X3dLi?xenvIf-iY z6ezR(h_N?cIVyTA<1MlU+y0q)|B@)|^W|AxYyY3IZZ7Kf3So!6OcvI!+wkV_T(AK= zf$BY|2l24GlS?I;bw6#LPfwi6CMm#PyaK2R!0cF$=+ueva{kueY{;MJ*Z-lb|6zEV z200G_uuWy9!RCs}qL+|F(Xt`PNGiYkO~;Ugi^Jp-#YB4HFq04G1DIvT)ruHr(tK%W z*}Fp+-0^@rP3#QvIStZEhLIhZ&x;$pWQX~g5d+~><#&B^@X!{~Rle_?wu$)srCaq! z3f6}$+XX`?GMUOQ%`46|zeP5pS+;iToz^z2Z*i?_bFeyxDC6syoUnPbXg5d{_tEn( zc|!Np9&o)H^5zaB7NNyuU+C?l^HMAE$p=uG+d^oRo476_#Cwn#EL?zvAFjjjOix8N zkX$7+@1J*LuNWpN)GG~fRKtQdKGppmZ2iIL{OO_qi>GUF&Oef#KcJ*6X|m>ZCCA3S zvS1a>K9tp?M2ph)C@zZJeseJGKzf|rm*zYPaHvu3_vzEPb=EGtk%GInNY+(`a^trF z8?+=2g^IbSORXAD51<~-+7U>qmlq>fYR&IAcVW<*XjB8t1&WNsxa-_-#5~2QE2!J48O?=G$Mqp0_UfnjbXs`$Fd84g-PsSaxuyM(ExFyidFm?$ zwr@Q1Y8AmU;hF5=!gt{~a9@VT{jLSy%S`t2H9q$E^)Sra%cwZ6mqqfRRiwEi|=_^6- z1Kyl{&b;YPZ&KzS>{Vt6Tq-C}VcA;mKVP5W_W=VLM-Eh2KU_@ozaG8qd^}2Sl$o^1 zoiI6hyc|C=+CbO_oBrUxC%lsR!kZtGKwrpi?L*5C^A>Jp57JNMTGuX6N{(R~s8$1& zV)clP>d+2Uu8U^6-@WrULqWN-rR&2aok5M-0i|Qe?qZTNenaVOq5J60n^IDIa7m7_ z8zkAzvj*F>KYMS!^x>#00X5c3N?zZ6o%X z%A45%m0>Z)Q21i-p;Nq%hTQD!%_Og9#3po~J=P(sStILh3W)uCUA#2qK!rG8XOi=^Vj$#xZsPRNU+KklAE037( zuok#qG9chhGTrj86h9)%5osd68`kCgDE_+BCVP#~rIa`A{C^g5{#%3auP3VI832H! z^%k!A=}KZuM#6mtQXtI7=MBw$=+1#PKRI-d3=GVi73CtU4C53{hO0{>+>oiDA>#$%-JsWebHm6 zmXs-+(VfxhF7Na*s6nA(buU-apsgQGac})24`(D>tV-RWD6Gd%uDeKmg9OgJh#T+> zc_6Xq?eFSQo`&M3T@RJz4BT6H^R^FRX~3msU_bUrCM$^C+}-W=q0M@dQkGCX11T|- z7LsPXP;%lP?^zf4*`g(*! z>i$UT=KdMbg|IWP*Gx&8as2h;7e8|<&BiF0eCouQh-exFMDHxU680v2dCx4{5abu$ zD!LR{xSxDaBZj3@|9Z7MV&CUo)yRA~nv3P<8pqPjBbv_w582EN1<9?AYB;;iC#>J8 zXC6NVfPSG;keJwaXPrG(UT@j=AR6h{@6cq;wZh7PoFy6GUEyJ9yB<_7p_J8B>gH;D ztNWD+Lyr!4_E1sua;E=+zDTf8L^rUubK}A!i@lPxVkL1Yz5wH}T5c=0oo}!9gtrSi z!IcZ~EvKww!6FC;2BMupsQn8TXF}ahkFE{Ol{RdsV_LK%|D!q$Jvw#yTE^*g0R*|5 zKZP#v(~GTlJj9dc<320YcxOqd0L3E!s6d@|W4Z2Q+2B62@x zE?ae}UA0OG^tUlzF*)Injs7w(N^+TVqs$fX*cGMwVFKoxO4TF^+Zx-a=BCCX{=2f~ zUj_INF~=X|KE&n1v6v2@1^ffK2GjO>SIs5IH7RvPzWNj-VR>OJM}3VMv+VA&5^8FSV{$s_`w>uW*K>)?RRnTS@Uu8K-G z)rM{DdbvBdZzc(9M0ChOU)9F$QhaZ;HI64<8nvpzCAPK;keeQ7^qX@=L2?*IGb}tE zq7P$Sh@VZ5`TFtGyx`Vyy^=jAM{bt3cibbWOd^5S7nF^PYL$VB;PHYn6{=Z!IelS8 zST2|E$+wT*@XTpsgu2f$FmoSS>b$>8AUYozsDZnVjL;gd9nR(xe*QYMal~F3L9dyo zO`2&GkCl8QCtlh}(nGS;xoh? zNE9%fTAv<&g~l!MS{Orpz=y4>t__m3M|;b7*LEgJ$uZQOm(a!i&*i+n_qi`{e^5F$ zsa!cux!;?Oyb&1l6aOxY<7p@%Hl`oT}8t;%`}Xj)LeMuQVhSLu29Z$;e^YBzS{$KeMIF6l3A zrv%F8SRSC5wl#kx=atcWUnt~!Kx+o?j-Hz7$2Cq}e!J(@8$I)A;f13#c-h*t1dAd18#FZ<<1A;8IddFs8%(a7;NSYs6fRGK2Issim{9@ z^6rlZ2ErlU-H4~%iOyCL;q}GF533+WTcx^rFcGx_QfGHEMMRY{(Eak_3dWq&#%kv% zaS;2BpoR8_$Bhtyt8#4V0?6NjfO&Dyfel|m~voCws)!@-RRqN#lYGS=OL)!1w|u^6Eh1s*F9t#7=;VfTga zu1h9|W6ehwo)|JMrrcP%asVZO_TyxCS*rGT%8k7%E?| zn88iUWr9T<8zj^$Jf;^DwoFg>HU|Ho=dIPj_o&-`9aWI6r?nKZL2{$}6WS)6O4nS_ z5nkdu%OOd!q9uFM_NEFbsED_?ZRa^Hgh$snSKyP7Z7drr3L( zyxTj)TR(6?K_B|;E>$JS1v!m`Ft1h&e%S0}fvQMw7kyU|xnVq7TagdqtC8tfeE-^} z6uvpMAIErM#g4d0re^fAYx7)OPT(G-e8E(r-pZ8?Z8u#{GU#kSs-un1$w70|Ky(Z1l#~$^Z zH;1`|K-9a9YJ}$+!0^gOfj~=(poVqyB?&BYaq@ZZnYAqLM&aJqhvWD#Q(HZt`5@Jy zE=-Hi5}N(1K3KTapgnJG=XF`)%n&EP=S#|BX{MIL`Wf=$+p$3#vj|fH7)$z)o!x)a z)i`$N^D@E9b$jJSrs3eA%XB3OA^D~do7=;mOwNGX~wh_QpFhR?_yVI8hc`xCW z+!;@0T9iNie?rfHbVkmVFf=4yYIqrN%ly0pebk}s{>V)&V1RALxb+D6i@^5O)nY9K zVgkhr`SPZ?U7+?MnUB*1k@sHD$H5hL3@<0X?0kP&N!{ySm&evDW2 zH@CPhBdQk{h0-P#iLP>IA&nco9qOvwWq2`|NbA#%+nkb+@5XRU1N>f?v|D_+ z$HfhvlSBLIVGETH`{s;~jb!RYWD^?OP4w^qV*#R%-96+#E%#LF9eAg7pnrMJ)npgQ z=Uo~*-ZnHyz~fTqze>oQjx6^$c}*w~pGAwk6kXT5h%KK?&R06|*rfYn}^FyPFtq!6zSV z(Vw7qSLAv;Y8M~vKz3+FWuCO4!v?p9GWL)BAf8xTVvlZH{q_kfJ6L0VcQ58`>0J52 zaH^EkA#dG#_e#cK__@|FJZt%lj>x*yK_^A7C;Y~9KvM2%Yth%n&nVQ+^3%At-Fm_(uBW3*tSvJU+wIdw%bvJ8xhUBysikRq(I- z5&=y1URf*)m|=F49ulZx>fLq(oK)ZI$pQ{g5xRjZ#4-MeN*DiS9rqJT`KldK%4EAw zQbqL2O_QRF*DiQiHCnOph$fuK@7B?A!K4A@nDY*k@rLCHG^%6n~Gw#04F#l2>QeqI4>m#k$*36_lo?t5)VFYz&Um1f&IDOu}h?lII;vqC9o zev~jt5rUySMwY2aU;BPVie8ghxOn|wEwu)Hs5o^c9~DZh?CNA>bewb8y$a%|(aWts zlI%xKo-cN~HjJxKP1z*}a1H#Z^}J0KbKt{(OUGm9vd-`1ZQBh};5AJ2P9_BGPRb5# z9qOeCTEI%-8#Y#sw6jpGJ*`i`gDfKzxwr&rpl|ftUgonKQnJ;iYZM2*acUYi#CLFM z5Wh_4Lbu1f1D^u0T+>C#3a!8fN~6TjE?j`|wI8eu3Yg5-Fob4l0Q|HolN5?#o!ZS7 z`nuSm%^JNKe9c)HKyJ{|Pg00);f0@a@<>>+#~~7VxCftjLw#wRiwPVjn6Shi-d*%= zNQh?CfMPfEw_{ zq7stEE0&2DNoHJ90QQsHDKAI}uCP8UZ-t7$@H-VdD&OHn2uT=%o>6iu3Oa^r&Cfp( zDOBX=cINIGCnT1_7l6rNs{^BVP~Akh=iNy^eRzJEg!X|{^*W}H%h)^>CkpcWfkn0b zyvU)h?R61<(+1Ub;F`S1I9jH2~ol;EEe}QaJxpH4jPg%rwk>Z*| zRaC5C>KyojbX`d#ExSrLHkHU;)pob!^JqZ)hF2*qhGV{P8}`VOkn8$39hCo8BSH~ z4Gtf7((+Bq%c>tMRU8a^c8|cH^4_KXK{&g~;7q9Q7?_}gmI5DFmIy{uaY~ym%x-w{ zY;~J7T?Xz-GoF)=-vzS!@6<`PVNApx95f?PNnEh+E2sxM>H&L}hxjI{MCYBY{&X4( zYjr*HO=ZqyP>T7zG-lHqvCr0ENZ8wisG4Z?Q1;B*Gtxg(qW=zA{a+`VbdM)leD7~X zo#o?uZNnY{0gvFvZ>lRr#4OXC`f0T_cJX;6i}-VpUAqc^F{xK}qQxN$`EI#LsNms3 zmE3HKk|=7&QXi(oXI<`L0JeE^zupA$%nx=-}WS7A1-%&Mpgt1cU0W5ktEVH))_~ zr{Wlrvabu}6MH~4C3CSBUA8xcfAy|qmt@%3@K!|xf*X&O44~`gvuuX9U7$FoL|6nV z4Pk@lqN5IsWWqOAt6Rb&Tr(q9s>ltW0mk^~v7CmWDy0uMC3#SBo3nhEl&qyXZ_M~F z27)R-YvgKbyH)~@u@=~J8zh%6)Vxc9-ct4@B9KkhMdzvZB2}jF=;s^OdX3pmOISH! z?w&-toi}FXW@;}+J(wT$BQZV>-9Fm!O6zn&^%&8}eT zeQ!3eXrnfh_b>=FZAF^Yaa ze3C|dO9o~!(ig6r6R@Y8AfDSQ)v0$}M=JJ!@>mD0e1!b))`pqtAe}}l*QFESF!-xP zJKec`J5%i<#!7AXi@%Ovrapc`D?n5fo7XLSlZc(Q^x#3bf}-M>4ex0a_JA!J#U*7a z`l?!7pz2MPLeG}w(-iy(G_J9go8=v&Z)UoR#axm)+yPVFNTs>5hg~yIRc>G&&@Yy_+eXhor@!d z=;e1i3!m&9-}mxMt;)JS(5xO=(HT}0zM>^QS@}2^v~C_f6)<|5S8j7PJbydt<&n-f z+FqxD()g|mYsQx~Xe#;^#KP3RmcqWN4X1tfl%kn!+SI}E+i+3k?$*+OPTu%myZ29` zAn9@@2E$4Cqeq$@4^hCh_>Sz`H-pl|CDVwW{M;H|vCSG0_ORPx&a{WI$S2*fT zHc8f7uZzg5LM=|J_!p_&H70A59!q>~3{ZRdG+Y)^FJ&6A4HsV1iaHwqkQ|VXs)(cu zu+oyP74WtzU|KDD9+9g@DBjHLDL`yDjc?314)+%}m)WuVZ%w6b{#Yg{(JPz$@B6&p z-dV!I1F8_w>&6wksvjE0)d~PEa`^5~F0veJY-@U66$a8kA4$BmM-4}>HSAVyPf`7G z-v-@j3a`^9=^13-!p5rNR73=i{9f8Ta-ukM=T#ky4%w!il$^@_GN%Q^E47UsGY>}C z+V#OJWdxk|O`ntz2j2OF+Mz32`r?m#mX}FCBk9`g`_$EE6o^R4Q{3*2ZH^Tz=XTJ1 zb9r&qE%TLf5Bh3)lzXiOwTIvu%cS%EWX>q^CF;lwrwr(%CEyo4_%Z_I&!a}g%A%tR zQ6VaM$S1@~<1qXwr`u602Am0ZP%Xq`d%@7c`gG98IsTmjgC~Pbr*fjnRiw;$u!`;~ z9qYP(5@RaT7F+m(vUsaiADY=6qyo(WS<4PNiater|8lZ7ey6@-rsJHB(#Bg{SRktA zOOa8b=!%;wq*8yj+`bIm@Da?x8*Cl^;SVk;yTi@8f zWIBI%rIlAiA;$n@fh{ssI<}_6=__TzF6nB(&NSatJc1T&pkaif!&fZ7`nf(72&R=@ z&nCDadWwF_utHQz{)=ZV{oL^pOrroU7gl*LNUPWE`qoO6vRqBE;lbNtO_-jd#h`MQ zHXOCb(w5Z|L#at2{z#B3gSIoyzG;|GIEG z%#qkzX8O6FTC0rCqQ`a`j0yu}Z2DQXc$Ptgy3&LV>|RTakwgEP03h?7CevQGaov&b zzwL6rn5`I9LKNL#*3L-SUU1>XPI*l@podYFJvxx0<`t?(815))h^)Mf#?_>R&f@8r z1=MQ(o?j|~`iJ#u`g&|NBeLPicClr-@dgTG33^{?k=uy4_fFz92d|yMcA zxA;w`t5SPz^ILiGDbp;`3?dgm3@Uv+o(`>8RVmOOgCa#YN$eHR*s?4^nr0CJ630KT zX>qm%*HpK>%xziReIVxbZkifaT9%(<6kLZf@OfYn@eWrDGW(EcDi4}h61t%~UZr-x zH{IexN)M2~>9yTyrBt=4k

      uwdd>5{=0KH!)c!iP&e@**?N{rc5-pJYxREq;g3;G z<|U}5jEsdlgpcHNV^4gjg1zH{{$Lvq`P;|GEaxGHb4%PuZ5uu8V#PI672h_3yNLN6 zS~B1t%IyUmH3&z!8y&{*N~vfgif;bKdn7G-<>8y99BEKZa9dEg{20BRd#-K0b@UY! zGrAJ(TO4TfJyi;u+_U1+Go)#9vwD7CP4Kb%uWJ+e?lqo$RQpA=2p`&))#D6nXy(tq zVV8q~Ts&j|IS5v2FvP>wZ}T7eF~d}QzJB+5NTe{1GMZ?Y*O#C3e#j@YQ51iiO7Yow zGI+*oK{syx7|g@8asF5x2o#K1X}vQY58+EZfa(_#61&S`l$}eEzgTg~GIy&>M_4x# z)w~9Fc_s0O$7ca$U~AwmZd%iD?&o^xUEEE_B0;6476rfN9!$Vzg6?{#q<=}hBS zy$B?se1Qb2_)(mC59YZoc}de!$l!Qs->|_Y0PYrjIes1>5h-*#8F>FpXoA9aJ!=O1 z4I9Wit%K^4mkbFelJe&oq3xk%4_71%jW;8yxNj~DKQV;FQe3O57@ zb9YVU5%&(1L7`jYy^np9SmJ3YxQ$WlVHTBb6BJ7UB_)wh!AwsxqKCZOR`Nqde)Zd| z{et1-;#JXau1}U1Pt&EFXrQ(lo4ZdB*Xdttt;|s4Y^zLO41V65<+UDbHezyGq1QIC z-s4uhg2()6X{oEv&VL1Qc0lh10i3pcPt!SbV~rV`6Y~uY&T0CsR_^%))cHtaCLu#o z#n9Fdo*pmytypZC*t5DHx;Gzja)a?;Z9MJLbp1Jro61>FHlml^Zm>Jedy?zdy5kRf zwRZSJgI^m%?*e!Pfe~T4jAb{q7Y+^7eJ6%hBc7fp|c55l>T46C7r z{a$Kov*J)W>*7y$@;h4HxAnK_4Ib}1h(cbs!giJ=F3YQz#j!4 zP11qtJWoT9O%0zq%Oj~%R@J7>S?T9aO;W-9K&?f<_b#Q2)tlpfYQWq zM+OSXY}?>4Yx<4=@7xbziy zHMH1hu0Lx=7Ze868&*{z0%~tBf(~p&yXjq4bENqq>Sa(5*9MCiIf{|J#B-%mAE}bW zm^arqb>0cx@-l{QJx@V@-~CJ&VW@+^^b-yfHwzw4P=n-4mW%2=(MB1v-@dz5wJvAY z%7J_iz~=H$-~3Q9yCp1*#K-kg*twvc$rt#wa+wq$DROXcd)c`g!_(PKiL{#%WR;P6 z9!EjzUyJXPYHbbhk59cZ*bUWy(gOtF_XvF}(x=ymdMp{C&wI~3g$1dezvo?oXsnco zy#6s5(lfOqN5_WB&4%oQMAuu;0bCqOg=PBy#tq2y+&_^msQmdnK*QpQn`kU4Z!ErJ zs?!KKeqHIH#YFyEL8UC!D{)+!u5XA^8e7CVY7n%@VKMR2S;6yP&&yxTI31Vwgg8#3 zySt>aWMrBm{O${h1$=x87fH#7zQr+3F&`{iOk0qQ$Jg^>2MmO|z>AF{i=>zgmsolC zcdOKItB>XH6cj9FQex&hv^ zbi$*I!{zA*ypOQ+qTX8@I+1J6SLc;RAaxdtl(iPFItV^ZPF&wF{}wlFTYQCovaZvk zv;A_`JBX3<<<|mJPi7i;_|c*vt?!Xj=f~9xHa!9SSC{NhtCb?XwzbPlu5V-;)IV8R zMOoiamcDkrhu1|0vtm5hS$`c2wKA>E)LuWSof#RuUgHBIE7B)Ef_4af#}{b^NuFfJ zVRcbk$fym?dZf{*o9l!GkyPs3A@+$@&UNDG@m09|K!cCb-KL%?(uw)E+jSd*vooYp zrC0eq`HW=hjLVBC-J}n(HBxpO;Tk$>quP*Kd1}rlhZn)yqdp)?+8d1q-%Jxauz(ie zeQ|1kAQb$cl$uph>55OKSli)AsSrUPanauTVGi;ex43*%y|dca2lJNG`ADy=@S0x0(u&sbRqKI> z!9f1CK(_%vy9}osu@YrB277hTS-&$xoV=jE8jwrnY zu%l<ehvUnVnCx1!)ljl6% zg<}RFF&P?qfH>bXPXjs&XZb)g#`WT}8y~lsI)^WB((7oZZy`!ntBdWviE4?+jujFv zMlj(K`6R<~$|1loJ`bKyrI$SUbSqr5js=tdK7ylpfMQqXJJ;dAP{yX?{~$*0F2ZA5 zQZMgI@Gp?SAWRmisqlr{{C~K1+=M}m&KN4nrkDDPVOdnS81-DHzy==E0a%xtLNanz z?=Cn7f3t|#!O+6Lww^6w=!|Q9Q{2V-mfv31y7xl5=(!^G!83<#XF2CbzMjlfRghNx z6+ybH_7+v|CafDL_lHUL$BqH(z2Da1-XHGok2$yhy+L;_*s#}$2#e61RB!)b|Jocp z{B_50{OY09fy3x`b)goe}?t{zyJA=ZzzBC z8BbA{p2r_#$hz{_wt4C2`jxWOiW@#UjnHqU=u*q>ZUQEoSuS=FU zY^Sq2;9!Zen>A8P0keg571;w!Wt zpi(L2(aY1XA2AN0e!iSsbzbj@y476&_`rq1Qx<|Q!LfF_wC3D$y}rS5C&&!%U$y{0 zHBOQN1A1X$pDz4Xyad9Vbo|b+(!TtpadjlakJ>A=aNJyKKmr#Q^OZ8)z;b4uKNe^r zP%{(aAW6H$i=nrm1dYR1FbdS^onCn?J=-Op%^&?ec(l_uI<(|(R+>37>}RjbRD`Pm zg{+_lG~~&+OvgIAey#3jrA6 zJjYqC^YkILnn!ha?|;7_=w}d_EyembwgyP|H93%6KS1k#8C_!=YbNPp>*QIu6 zpwV;BBH0ofw^!2nD1&b*J6!bBe3lflMT>|wv`C`&%%+Ov!Z7+&?QKSqyfMG?VegT- zy8F+0SzCyuX^bRRlYE_9#_y3k$`^B6iMjW}7Ih*YYM6#Xpmq&R%*-F2HLhPX|9gdt zJEF&81gXKCzEzuKt&d}_?OpAw#HYoxHaap6sHUwg7Lx7c_y{0=w;I!MDXFs^%luwP zF+}=iX+(s^?c28nFFx3*@oAjQI!<@AD6#w;0Pd}SXof}X!=9wrwEBz4Azy+4UlkVw*|2?#6&httb~@mHQl@}R8U2`b=m!geXp zH&?!bW#K@lp+n2^y2hOWKSgVC2`Cu(J@D0-{~ibEIldwirhD^EjWMq;pbs^Tb*o!- zNDDmWFSMTVV4W87cux3BNuc9~!rd>a44%_+z8rg5#^9_dxP>ys=J=OTtAA<)X}tq^ z39}jBHH?jiI%?KuW^)sli*hUQuH5tdB_4sex>jM0b}P<6>_^ISHVBUyrA?DX^rJCf zhCh|A2Ku#{y~o$vMfW!h_r}zDXV!hb#DRLU8p_zRHWtm+2^e_stXj;~@u{_P)4u7)&Mm5=J z)%Y=T!T8pc`GV^*G!5EYtNR?#HMc0fAp2&#k_MRI+W{VlgXPTV?IuIy%j zg<08U%LKP}PVi*vds>HP=6>@87U-ewF0yT zIewk(_qH|v_6_{Wi6jXIQ;Ah&OVxU?lb2(mm0v4EIc@B<1)$lxd#`(VM%IzmQ-%6C zgh6wb)A6lQoqz^@LyhzW$|m2i2TcZQb-wc3aQe%=bbkwZlaBrt170Yfyy?_@J?cob zW;#oaY5X;m<|D8Sm?UHh!f}7^r$XNZ)7}v&^m8oZ?b8hi3Rmc7=sCg)$+I@lAE-m%T zk>>9o1{!B1upaZzoRQg=_?LLh{}fPN)1ON~j9J3e|L-}p zXrNU=K2fBl?vD@kCo=i3c*uWmU2`Bdh9?mAS^ZL^|37a1r$Lbh1FZ`5vHIZwf6u0t zTLI!A-nhRy=VjW6H81=faki=a`8-9LJAznzze{{nxBCK-J1Iv5^LM^% zUr5s-z;}tO`HT|3UG6m~^9snq(wF{R82-32e=beu&V^7uh6u>P^9E4v+Fs{F z{EFrO?w5W0S-q&xAO7^I=Dm9{>%xZ*ANDnO`pcbh|M4h(A&;5INws#UoNg^I6)7Sg zQ+Px~Zf%}HM+fSw`u+pkBeAbDuB?RYpHs)w2HHP*p!rV1fP>4CCJQTqdoB7DT&wz^ zb@OJLy~EenONH0wTE0kBRrqPc)yrSLeD>+q9WBIOQ?>F6H`O?^->EaFv{WOOW6Hr= ztx^!V9^eva4Y+?C$N7W}3|{A@HaIHXb_2)Vy8Tqg@iuaLHb(*dIY1ol>TDiggU+x< z<>U&d?s^+?2w(H!3;j#QasPNlNpe5q#vYzX7hqVy=ecQxXk~$AUa;her7_vDwj0UrQx4ii7b=QT4S^dw4&*AiqDs_b?kDh0d#?qXV%WZFL8;1zB;JYe%Per>oo^AxWH zq#`Iw+_F|R+<0))uC=ElIo4}?&9qS}bNds`9!GY;NAXw=wg!{#G{#{GisGf0xkkM3 z+J}!GjR)Ghy@YyMj{2=u?+{2k9j&&dkZN`-d-f8&fGN5osV3~7)_-`A>UH@ zHQ+H`Q%8yRAM1EPybVC(W4A^{`i|s@Cwl{#joALID7WJJU`;;yLY(MnenA%#NeyxB29#2vpHqwX}h_4ETTY3+!NUua0BI`RD&@Dk_~ zlPCBLfnK;?Ztmq$x*=H3sd+|UkzUK`yY~rR)wWz!2sIdk0&_8v4mZ0%*CY60 zA6ddFGn=!uMP5sv%xi+SgL+E>ULLMD#SW0q_^Y@*`QEs*3@P-+drif!wbN9@1q1}p z-g`8J%6SDp{wqX_s`@HkxdgGsD<1=oVh|);X8dPX$68-Wu%hLM?>pfX-wxiqK3Jed ztV<@Xd7)fm4So2#lS592%-+h0*!X0}W#va(Ifv^KldlG57`6Nu-LN9;b%_q&M-JS`Kn8#ps;Li3)45O+wl0DbiOyM z;D|A8Z<5026NaZPx%ys9alvx&^Sji;_OdgtQhJgo!9#z?uuL?cJfs=s7jeND4TdG_ zeoeMHP*B0(r)FE=I$qn#RFw))9kuVyadiw_GC!3!da;|@lodDhK*kDILoiUk`D7*q zWzuHU({PEIEzqRXPenC!76MyLGl%%p5=2)bB$YSqlQFfK0OmAzxnUwkZ+dYbr@n<9b5c{&K%WQ8s{`qQB~PSoW1U`a?KnQm|R%r znl;bJ^-E3s{?+1FZ!rbM_3y9ya;@r~pOKNyz8)XjBVcpTRLTRyM{gJe28$RNx?UaS z33(QI#1FFUSCdoNH>x5~q@YRgaH>kLQ5pomji8c(S@+${9mf?jtY^1TC_6$g3H`pF$#ug@e)&cAA_c_|``dbkPF3neWux z9^V81y0S8vmmd7Ym#pRhzud4_nk~rU`xQ9jt zyRU(Mw`1iR!Kjhw!5!Iu_7MM9)%}mV`!j#?WrM1!XdP*H;@NM55Lvs;KQ8pw99SFA z!+WjSXFw0A6iSd+Dx@zC57>kI87_?Z*2dKyq86Zq4vg(Wt$ zDTQgFK7!U+?$Lh9yQkLDV`k%do)@Mvs{5{70Fq|yOF4r>ICUl2hv5+9eo{NgRI=jk z?)WS|)=Amp?}>^(69C(IxVpyDnWHOEj7eYu&T;R-ziE%#mEW~@ARHnaOwGw05f~$hMdn_hWgqPD>0~& z7@oFt_)2fxhay}_OQ1^T-ltR+GGuE5%)v26zbtvFKsK{~a_sMT@X{SWoluca3PR@< z$DEM82CvI}$zJBAt{FWII?xt4C8*6TOiRu7`OZSSsnSgnFE8&JE+R92F-88l-WO*$-m5y*7rG_Zd z$1GPcg)>o6cSp+L#Uqr;o`y+R*+=tFcc$kM33ejgTS`H#=unf-0r=$f_}MCU?!T*| zkAC_v*Oe|zMWS3{@@BafmX&|v!Rb7~{$`Qf|UWBDs@2s@L-Yke-H=LhTN zx{`&@`VtVUPfwnVw+Pvig75M@f4K^OW+QtF(FN+9iO0%V*zNu3kuv9;CM(Csn`-I$ zya^(@WWJfR4$OC&KNoGJo0)Qfu(imzHkGM-KWvnMtFz=viKJh?Y+&+W?^A&yQ0owv zs}xUEV&nS~d2qgJW!R~{>`K3G*tU%(Sa1aa>dHf=!B4jPfX~xnO8y=Sr)r~k z=$Jo0yI+Xh?+f;qj<$f$Qv_`P9>o8+$^RIDOz^ERc>m(l{_7&G9zR4LX+FqQ$JESI z&mT8b=?nDK|9b?AkmGNgVK!E0IR6p6{Ue8!2Isdyld>vSz=Q4^u_1TysD%8ASJC{!nd{Ub(367H4M@} zRQc5o(IuX0JksGu+xx20j4jex}IlI$aI(znOAjGYDZplTl@|Pp*Z<$TW z<=es+`fZ^=>3ia*Pg}dSv?VcM0`};rybBC)!|fgKt}dK-c64SYer=JPm|Ii?Mq?Z+ zbW@V9i{=N=yN;H5?Af}AS8O#qsVL`o`jJMYJcw1e@q=1zZS8bIkL2qErnA+z5mXUe&d}58 zMtWnFmXlMy;!exap$3J94_1!FZ9Zggi2u%>dqQ5gNzG))fwGO!OK7nEo=>WA;`N`4 zW#6M2%iMq&wM&HGjeeyhW>9K-1p$gGtam~)G1G(z5wN?6x%=F|{Eiuc4tt)dOJfy1 zi+Roo#q{Mld+LXFMqbBd1OjUvu%X{mO&#}{8nol`-<$E^JAM@Bq7b-|v$LnNm3QmT zotoJzV`0E#@ph?;Wo#bK&b({VQ1VgqR1q-x?D;^qaNR?H0>9&C=0g3PqP=W^ zukYNEIV*7;=PdfAb(>ez^X5y!a_waoi+7*$Z|T4+Bd!g6(5xvqO)$fXDvZls$~{ow zMIl%VXW8y%j`OU@(bA3p^X&g*Z~WQ+Rxdo7>EJ{+Ve;IDJcbqLn`rV?+Orlro`am7 z^fcQInd{eX)HJWi2O4>opUf1CcQz7vwcCFBcltzAv1$_#VsXNInD0!7!tW?COghYp z1$*_JYy+${2iNSXLcw~eK?`y8TAO>7*9opF%l478FoQ*xl-%rkqwle|cXRSw?v+b> zJBM2Z(8MWvp%&IbUG~X-8kMNxgM|Ob*?WgIxoz9STg3thsE7&(SSSJ_D7~wQbWlp@ zU1}&&1B8G`Q&3QPN0cHhp@kMY(o1L|v;>ge5_*78zSq0=zUTbzcbE%9;Ssk?TjYDxl!4f>ki-PV>CWnggR z&E9*dQRe@+tTlk`@vws9&eU{tiOu9?-c{DitPcir)MNJDatwh?is!%!?D8Hr?Lnd< zS_OM#zeVZkOsH%DelzpBRe{4+|^W+P04v&)w>sRb5Uq zg{g(Rd%7zFs#Hu86|ukfH6;yo>~hJu+((F@A=_MT=d$M?R0y@%Pf{$pQS2J;V&Bro zf^7Y}HF_z38xXHwsdQ+u@SdI%1%g%2Sg9kKm7cx6GhdfzZ)k{Gov1}4pYWp4se*$@ znQPQ9vpdN>Y}MBH)my~>aitC~P_VE2i6Hctn34+y`Ao#R?yka_Q;YlkvR(Z|TR5NT z#ZI8At25!%`ae~7c3tVcB2^-yiY|mQc=7k-7oR4221C{a(+s^`QiW^FQi}JfayA?q z|Gn?{Ustua{_(3FqdHIEBTe69X^snZ(xvyMba3|XH#mDKiCklE4PVaXFvo&Hz((Y?{ zduOeVLi?_Et$y0yvH|GoYRt)x4x`+>yz)3p)eW?Gsmpye(Ww6?eoMqkl(M%U=$2P)EmF@b1!5$9&{~FE`@* zmC*ffoP5GBfn>yp+}8CLptB>%tADscL`>*KrbOGi6K~Kl&Q7J_#m#5n(& zCMn^urP@&gqAhV9g~N}$030;-g?IDXp!RXO1FW;fx#-xaQsK=3qGz(~7y01{VZ*N$ zs0AYNO}|7=eer+aUH=vxzNvT<(u%bAG@lj+$Afh07YKAJ&nj(Nvzo4sNI9Ke1K!>_ zPQmt&-yfzg6ok_q?40uV`zh|y+S+cU#W-OqsjJC@sH?*Rf#|60^nsZ{MsDkI*QAVn zUI2Dy^r*d`eiJ1tb$jxlHBbh#v=%5dbmT01oMr2UM+plFb)x-uiVlyktT9UTr8N*z z6+CvypG=m8QVd`!k%ekyQNEUz(F`Hj!$JcTBmTPgLy~w$7`0G z8gxgsI=3(cK_-$)+i}OqVQ&&j8eRwS^z0}_*K$&BxXdT9#f!Lo#24ZzrcTz|qc;PI zFuACxD@G{f>0{!_Ugk>1Io#!|S6{(clao;O#%3ptccZ{{3{x3InDKK>$4L*(Yk%z^ zGsRyl%?g{G=U@@a?XZB{NW zNlQ6f%i_wN0;|Gxcwu=>$KlJnKUKGnl+$r58eN1PP{r+&QX4t=VwWj-m*^DxLg8J# zv8xv}z_#7k5SqVVou+0}m?Mv<_piHOTYiFg#zYW5QV;s4K?VP2oi9E$+v#N391`T$ zmqvcwbJ`VAI0~%V|M>?JH?VDNQs%Hs$;$C|RHCu#h zxr7cL>8;g#kd7zKLuf^*cd)C3D0-}b0WG`;pWd<4;`D~>pwd!OUfJt;M&@JM5ViBl zi4ISf3^Ya!iM~D_|cab6Xk{)HrSx&uDmNk?ErUQ6Wu< z*M=`Z*X*)pqdjO)V6Wql6+~2`V0PHKU1U=&NEe$;7EKIW!WJ0MF4^Xg>?o`-;y)<-!?1!_QYZg7(oyuRiYau4 zW&cN;?ALtIc)4W-FL1~27@jKAtZBZ?Gsh4c_YKsJ4ckB`Qmqr(#w^$WF2)Y{<>hUB zhTs|Q*4kMpiul~#eqjqEW;0jYgDNm?Q%_;^4}btZipd}^;_@=>8dq`y)ZM6(GWooU zu}-PbFjDbj?m95P_V(?JMvysE9lmd@jEJMk^;PTkpx*Y}z`Cps1o!Oyw@KwaN>sFWIEZ z71HUBz5>nnF_i3<1(-_Ey#qo2t%v%RW)VmSB6By?%PYZmP}_&uvVVjh0h4J!&>H4_~>c;!54g+p@wsKs8i_y-F*5;g6%#TA$u>ETM15J z8amm9_|N9S;dECj&*K$l{FXWhH8Y&_UiAYK2vCiND2aS>IC)Y$ymN}OCs%r}>U=@y zIrncNN9dG}_@8cBp!8Djv%{$4Zo#^EALkd?G2)~XjzjgG9owU>! zI`ava@sC%)b;57{`@HA+b>6>vMZ{8D*<|VaKU?ImlPB?w%Y5?O3bk-_Z2kpH(XVtJ z5c&2|^C2Sd-+3xJXn2r-NnPB%g;9qy48wKZxyL8AiFLM5)1PcPB5o2z*JUi1D5^Gh z^#fBJoh!PWlO9CRXC~xrJN`N#R1}~&H%Fqd3sOFjR~ZT7xHhxjZdnS*xbW;*P;%HR zwOX8Qj)$I;#w~r`PvAl2Y2Y*-E;%l>pL?{Sn*k%FFv4XB)YV6cHqeTgn3#Q<8gQhc zbCvov{v_AJ($MPM)jIT;j;1C7*MdyD#I|tRvjS33W0A|d4j-oq z@2z^f;>qSu1QyxNF-_DtZqjldoob~ciH(rAp2#TM^UC?9F=G0TyBW1q1?tHYR#vzG zD9Hs_$E?cWRS$=w?jLR9g?XFRY0edwXVzD|NY)mA*766up`zeiXT3a~R5m!ud=ZPly^n~9V%lO5IdGr# z0t3+NPULM zNW%RX{jT%yO&M1B?=x{m2EULQ0YGN4&f|3|gz6b<>LEAAVeNZ>>H}{LJ}< zfCG#k&w7HvVES6w+w=HJ$)z(?k%vo+sN^=Nnpz>)xX`*cVcFon3kFZ~|GM2ZHHmB& zva(_yK|Dz(4WgnIz}VWIVV#!N=jV@?L%hz}Xp-0@F;*W3^ssjZuWP*i_(`OgoD`-S z3vqPmnBiI{BxUOB?N28HXJUqS+)!6F7j42V-=rXgbF(6-^tj(ITM1$R6rIW~KFSys zZ~BUbblh9(N-h*tE~U&TO1>Tu9&S48mQ`Qy(!?YKkdL)o(X&ccI>?J6wrdiN_wEB# zIqeU$I$+qeBTW+%JF2(CNiRIG?-U|Lrq`yXZejIwFts{FGE+@PMt}2{a=6Jh#&qzH zJw4>c>-tqN25Kc*c;MF?GP6aNB%h`Y560P-P-Jwnah71L_uEDAW=0nZOgs{$j)%5}jQ|il3qUwc=hNeB zYb@}6<0{u+@F*-}OdEHMBeKNE)Ga_Umxk8C&y#l&gsq zj|^#@dg5^_ZdS*6HLGx< zSeVR!_d*H%(|SMikSPa?^#i#wHxI(RwfOOX%3 z!$k(~jhpwwuk}V36i|M}jGFq)IeKrcK|*0;c|7Pa;C+?OL}W4MY?oe`ht{|AOGmXK zV!KFEZ#2+$$NS~v;2Sh6zaF8u38^C(om@gIL;j_D@voB4bNpXMzs_}CtD+SHxX7E* zo&!j~xx6{hXJu?iTJRB>4%I{eko#t;v!6Z)VQ`zfL+J|Bm7h3ivz3)$XV;HMpCz3? zN8;R)yHg%o4LuzscY9PCwmg-fC8Q;gfr(Ol?@G(A@L85+4xCadEW~ZnN28|9Y8?{Y3QlPR9BzN&3BI3tJHfR7FGm_?1JRvPMGLx@&lyM z`wtrzS90clsK~q23KJ_c`{`<&eWt$ypq)DWLag)gLG!WaJ}w)xj5uC2@?MK%Yp)W- zWDk(-^gWNX)9b!@tEV@P{ywkw$7v?*$ujRyOn!EGFGf;G=-C6);vYyt-3xd447sE>S&dBvl!(Z+t-J$)B}U_0cshg zopeO(Luvbtxs0%=0fyQJUuIlp1u zh;Mj8Ht2`IGfKGM{?*63=03hFWjc({EKyHayT4t8RQE%p%ogF`Y znYyKACG&EVI&5~$gE_0Lz~V)Yvy{H%@^D$E z;myLuE8bJ6d>ow%A23}CeoF6OrvZPHssHqR(u73h`g-fn;W9 zqwX9gJJ)j^l#BzBPDxRqg-`91_@}jHB=1~H{A7vxOKqb&{(Cdg@WHcZ&%P&2t~)u$ zdScZP!3EuvoHtD$NJ7@O#_ncs`V>vTu%Xg<^P~+J72oiqHVh~7> zfE2dNSh+?FC0yD$Po~}R9yZfrFbUjX8t`9Uif8Aq?^|ZRc8!zX?U8)o%3zKfVQa6> zQ|u&*Ve&tP16(#kkEbB?(`3acLKm|Es8&)%csDoP$ciV0D zLF%1gS`8U@+p@maXjc13ga(TjkiFM1x=B>~g9l7+*Z#UHmmUXv0fbeufASeGrjWW% zX91}dEuVny3ijph{>}c@$|;Iva9*J}7dwaXYd5xVN>LFJB_OCgd;UyOQ}Zo@7+d&O zb^5o`(!nG-FgTh0N1Kwib|#r{n-4oQtlxMt6vIwQOUpV?eB?n`UXJR_v+oygZEbxA z@|0zBl$t;Uz)?sfM!Oji1K@`hKcHIsqWguv2btY^11#&AchKUCYEwrRRnbQ0e@j3! zdI$U){|{7a%0HO==PG8~tfy`kGCrjJt@rrvp!1L5^!!bOB-@$aJ`Mk$+b+O``;x>1 zo0iPh*vDW)a%B?Te`X=_*LDq1k$Xc$jBka_^Zetd{XZY{FZTC8ft>(qb)XL7ETk(z z;Qw?LUfTgx1NA}#LEYc1;rJhy(dhNBm8mpr4f?-*eczleGQ8&5mqi$`P#*E1a>(%qV zJ-;zyVle(-ZpZP8y~GOfx`(d+e_U=TU_zl79uY4&EfSd*LhJ1WiCvW$yv3PMun*^a z-f?|6yAlwe9VGSn5vzrt^Fll$ag+6Ya*yb5vX1L9LIc#=R_5mD@_No(nBJVi98Go= zr{hM_iwAw{OmVt=3RKA)=pdY=hn$9?pdg4)E7fn}QHxDF|CrSW-X}#dz%g0PZJeDM zgxdAyuPH(qlqaQA5t^ z|6^ORAlI{YTo-*eF+6|`z9IIB;XhrqTYvlt0B}t30=-liA@5A9_&#RmWsZi|=xT znZ6`%dF0&|pY^8z%Q%8mOLhHTq_jWqkCYxHGfCS^FF>|f75&6bt;1=ooL1?!X(~47=g>lW|%laDs@b|rsp2w z&6;psT%?mNm$m_~{&<|PeGwZjXFOqp<&M`q;0C*Q)ueA?Wb!6>+!nqRExlK_LL0 zb9dHcAL_T;*OYC5(;t_jH{)0(oR3$VQ8pXT^#RL3?!PAiBTZA!p7Cynlb8xGwlhF6QLS`9PNN--e)np9T%Kzm|ga%FX*3oP7kG zgrr1PX})9(%lvCEqBZUUdrMH|O`er;4xWeINSVH;nyMAv@^a+I#-ou9-VBRE`pZpu zATTYkKT@z&MjyBk0`-z*9Bl{3tOTNu;W(Qmd^EQu(y+yc~1C9`<18BXD;rc}QfIm8)&?8ghUy1d!e<;imTv!w9!FUfj=T zmMqx9B#^enLSJ!;u|K*$VsoKz-v~Qo?ieW?`z6pP?6t12d;3z!H9Om-Pp{}}(25tL z_rBxT>qw7VFpipLr_oGBJtEiy^WN(c?IqhgJuI3glfPPrfH~p!`{%O;FHqB5*>x_}6lEQPc;{@=NBu zT39-#Ra?*1=&-A<5&6k^B4J*l*Q9TqcsIFoPS2&Zw!=r`;q4PNLM`q-eGD;w=^;Pt zg<~-KXh&aM`Z=p!;;b{asN9ZWGpAg)vpjldAcI$$Zz5=UM@ofDel*z^zhizjbtU61 zXF4okOkh~%ZdJrJdb0{cy~TzA5?2qb51jxZH?lAe%U!^aw>2NUmXW=Cv|oZ4r-d&h zOmfKC9aLceJ+@Ki&7+u&rSRXY*ZfELx~OB;eVV8cxllbX0&abUeMDV%I+1g`R*R{i zbE*zX#z!q*WC+c5#ariPgFi`2)SMKp;A@`K%OC_|OC>q*LE|=R?>;GU-ZI2aaLZ>O z95gm@azBinC)+di9<@}v0%bPCIa$Ff!Q#XXw={E4vRC2!asE!$SB6EvM>;IG|B882 zuS8@tN6+SrF1kam!bVZKfY`PfGWo)D@ZLG5Ly*Km7_{x=HG4sc|zQITEWMOVCw|jD01@4-=Sz(bpU|L#?bI zbd)sRT)~w|oM=qmzr54`x+ZCPXF2c!)4gGygKxOrQ1lDL6XFS$4ZS7aJz4IIk9nY_ z1?Xcn!Ue1Rj`nl+4?-V2WLnsP)xJ0W+QRy6%v22ox?)zy;0bvi(hhM_ zivN)&1Ga8WdR!-Gg41<05iW6XE%U(bZZK&c??_sKMqnYit|z1UQ5+(7e&G3tH{sFs zgaY@%$kwL)b;jPBz;2onq7rI9C2rfdSFrmGYc;yo+uzSQg?JTaH;5k4Ws_XN!-nF~ z*oC&Ery-kLbABlxYdR5x`WYS2IN@NmnzRJgXG`b@*++c)kHhlJlLpZx<~RCwBejKv zl0T$j1`(8&=gv>vzuxxgBd0*^g6cPqhtzIgL)>2`MMb6zaSaPn_-A~mLo+;*X{ z$!U|EZOqs5Z6b_`HfeLA-x0|scE~MM97nr{8!E7!Fazah1K{VGvual?-d6g%S(W_K zGKE%a+%?M>ys*nlY{s9>QVmIo7WhqO`dipA40Xx3Ly!g555G1n59m0Kl4=)DBAL4i zc~&OtJ>Eie(|4|Ey+6#7#tiR5LF@+>3692& z)!a)r=cSPtn@n?Roy?ROIX>C>^j@P|@bHVtDskM*sgUUi*`&5q1Uix|d~t4}>qrb% zWa;!gXlJW@Loapb&3p3kaomE9d2qtvd+x+?w8GUlYrgcnua9}-y?_WK9+ z?FN?#8!u}a&}%N&Unz9bkE`xD35pl;IG zOi3^N>S`iu(Z1AATdFnpryRZ=l9D+dwNXs%j8k#u1SO}dO*)GgMW)Bxv}UzKBNl^Qg-)x=Y7x0mTqdqa`SJh>2EaiZ{z!iXAOd}Qc<4|#L7$Zo-23p z6xJ@;bzEV)KCXaPfoy@v_Rr)>Jjs1;#i|@P8m0+fmqonY-Kt;-Kb{4(pFmWqeu+z{p9lx7qcvgINS=;CDFk=p~jPo zTHYq(bu|RDI?z`l|97wlYnK0Nm8W~yA(?mKFv7r*RiqDu>0|bqM3_SaPm21?5@$d= zIN~4Q$~JuWJ`4=;kC}&%_czWlcB11+#Ro6mA3xZu&<&gWQDwc71>0t(K6fBq?HQqE zq1s^VUs2;$Im{%{DRuZ{3TK$;@gJruH>iL0hy#UHGu09Lg5L>*rq_m*KAr{LqL=|> z6PZ=(^M2tOBtUtyizZJ&{rP&dP3pRWdRLMp3mXnQqOA8v4LN``Ef=ISUl+j#$ybJ3 zUaXK8dwU*c3nZQxU4+WPci*(cOV&F}0vOC1$Vs&<>j$lW+OA$84AP^+kBF?|Bz1EQ z6@EbBWgT~Az#I)HDRk+7m=2tkJ$x-Ii@z=tlg>}HWHykP11ge~ioNe~HXj=GJen-{ zLf53KvIV=*LLOnsVVdn&i@jnYGp?elL(BN}OY1ndyo zrt4FUmOJ~5d`!_g@pRpy^0ojMVBKd9S*yq1%rPf*{}5;*P(A%e8SXzZ$N$7E{f{^t zu=U_lUjw;+rV37-B5YX#P7FRiTcS3iZTKzsolH#Jvb&<5Es1Z9IMQBZrawZTH~BhK z{eUW(Zf@et4yKbZ<_Z)Z7v&KJ>PTWr*cjKDS3Re!R%9MDVEDG)crSw^>we{=>ch7@#UnQP%*Zr^-gv zBXB2o$NQ+58`s|~nWo5H(}kRGiiS4f18bFObSlarId##NsKB2v7AR?xqQ9st#PVco z$IT*ru(m!TCu6hUmb&!YtBoJ`@+}VdvGE5KO*=Q|Jk~a`sXDA~iP4PasdexwIg{fr zW5Tg=!D^eyG*+BbZ0ssrkkF;%9^@Vv;IcsS(Ar@LE%v~@KW~fh(7iCpk5odDKdCj& zTiCgZKQEjZdU-gxcp`rtopkAT;}hJIeH%Q&J$MD3q`XnDr^}-@e;EFu(YAbRS}ap!`&(D5a{X-C)C@H$U&@3za@ct9 zx`?vw3(GKbR$iw#wYKHi(bU*YGDKyrxMyy28E>B}C=U$2c4jNsc&%eY{F!vbf|mL7 za~{YC9BcL8z4YF#wS7VM==0?dua{VT%D+m!N*mQ$f)!oy=F}_f0Z2WjF#@7RA-Emu ztQwtO^U~sM&&gcY9i<2tMeDb65&-=lHRj1(=ol?rYGLKt*_Zc>EQ#m{=*rRMQZaVR zO}TFu$0ntFZ*bsF_lP+t*qdf#J`QQX&=*hA4#c|5TR-nqrDw;=Uc$2E#UAae4X;ax zhEk&ZkMphyT8FOoI$kQAA|UMcNOD^#HT4^A zxHlp;uhr9=48UCwTHRf5%T_c;%;xxutQAl1O7mIB4#mt)C6JOAq_Exv@{o@6Hq3Ku zCkFRkW>?pQLFyL{9wI-XHpLew4fGkRav)*Wc_kv{HXQdn@wF%7Urnb#0^p zox^q??SYrXZ*^xiwA_ASQ6i2Y6mC`~aOYkI#kE_`aFl;N`%HMMZp$5(u3IO-rEH<* zmygJn7vWv5rv5qxD|?qcUuF9j8ksV^WflNA$+28{e7bPWnDYhB$)ih&iupUL?O2d= zBG0j?%}&^crWUNT6L?mQa}RG_>;Be=IllxLkTwM zW8^iD`hsK5QmLN9m%jT$wjBbER;1m1B==@}wktS-$sH@gAv{6RPA?x=%cWAycIn=C zhgeVg;fgbT1j~t%d%aZY^{?`NfIYl`RAFVPbBh4Xn6H$K7+`|_BS zllYo!rIqrNwHLcaDp-VHL}ZZc=@SqlqnJ*M;cfLUluLn}`1KmeOe^tKd*;K;`6B#Yxb>BVQt+7O$tN>}eNblRmMo*SK;G%|)J${l9T^5JHo3?Ae4Qh78eFtB9(`y8j^R%9q{M=i%LsRXk2-f=h*t(_8PZQ zovX1yJ!zdSt(TO$eta}8XcZ+sjI!%pnkID`$*Z!}aH?5nDtJLG|0-AuHv!b1nbm8d z!N9z|$YiRX@NV6Si{;{~XFVL-RFcj^-{q$d`hJY4Yt3s(L`?N#Ul`;G4h7*9c0Xg3 z2}{`$sJe6GLYHKvdq{Mh#}U}azE8KO2*zKRlEr^0j~ytKK$xl17uPe;!cEhXy2L8e zdn>=fL2g^|Pr~G>j3e2uX*VX=1^H&e*fulc-y8IQhkuv!0u)5!RXpTSE9}}2JYHV3 zHwVbBQI|YCM)%D6HyjfHK0m9?$uwIhJq^O5!=t@NUjh@N?*!a?a8Qza&%e4%lzLd? zv4?lMQpumau>s-F%w8=`hf|nK8Ha!*(IV3ehn=8bq`$a!A3LRWa`T~l4AXTU>K-;l z7*d}8ZlUZHRZsEB&VhKMeOlg!M>>PT8+X6xEC5j)$vN~2#{4AzCeNy$y?6f~3}YH`Wr|Mv;qD1fwhdW#Q|!uG-#NZa2bLsD~yP|D3rH(0>(ZvQ0|*CJ+}g2;`*tX=5+B4YItu-s8D03D=C70xcc5 zVxcE^sTX&1lno2wrL)8nKU3fxFXAs(zN3&((>vP7>9Fc%Vn%h*?_yULB&5rsh?^p& z3p=gHOp!eY+Zzh}DlzRvx8p)dH-djpow=bn^`naL*7MAcrT^q!1&d}XW$k~_sG?Ypi;qK?;Lri+T|k7D?C%Jh-}t^vs>AgekLs;LgY8G#Geqg5 zKU>hhaI#&C>ENEeVt?%X^9Z@y`+ytnR7#~p%b7gmd|x_e-WP!6s?WK!HB)IHo-7=m z8n@LUf=VSU<5`I}Ko?NB*{EJnS%PJt+T7;!$A?obw0#*_#zeXN*w3AhS`N->eMbxg zH40y4T?D;YVg@La#})ktz8_j`CXNgW(bXNi1<#|v$RyM|Irz77sR@Ui$Y3l$jAQ$XUr|L&JP_73g`;gui?Vdy7{Z z+1)POK}_?mO_$-EkyMF&A)Da~ga%()wC|M)Ag51K^x6=J%0sLK zm!KxWDCyqI>7(mi<5m&=;>JnN=ommI z8?N=W(}?wOJP^!Chmht4=-viZN~^gL=afq9pBF%{gT2|)H~gVl?FXZM0Zkv~V7lxb zolC_7wlZ7(6WW|mw20oq1(83}YkA~Bs_%=3_s{=VA{FqM%IjF3p#UZ>5CzSl1ADFatl&d|eaVM=c&#ANY0!nLJbU*P9KqUBv_f;7Vw$tT+% zEpovGn#UDMMX!Ce-?i--Y7BKmkMm}ZYQG^lsacQzNlPres-oQR^R+5@1`Tc%POsYl z?AD#1VriTfT-j8biDb2RCweXc4CN-)PqChoR&U3~HHOFYWr%!^X>FOW>LioG-tGG%e{8Bdkq>vI0`K_ zvYsamMNoBpN6a8y$>|j_h8f2Qqj=7PTW@f~fT#>Taj!o|T3fG!L(jK*jGHA%2tjew zq?rk}*RLl5MSIAZr_cU~$Wpk&+KPlD9eXUVz;|fTk>N;KX8MM@VD^#Vu!B@Z+V^;? zXv$X``5!s%|MK*K-6@(^CxcsO{hA4Qfi=#u z5{CA=NQXZ(7>9ID8oZt1gsDp(*Rj)iL%QxsVl|YT#543F(e&e;g||FS z%^@Tgp_=3GlsUR~JDX|OoOlB1D(osxLR))GM{rQp!h_>+nk-P(Ya$F?V>&ImO6W(3 zYONJ}XYw9=X{Jl(T?GE*7jai!ZS!lc7Xkm=Vo^rjzl*z=_PscrIpMWdBaGcqNM;7V zzz^VEQw0CU1=Kifq8`?WZz6-bncq`n}W~BdLe(e9iSBF$mj(Je9um|bd)vN4) z#HpyRSt(TRsTW{N;|Mksmj+#%e^vz{=?&+t9vfI&B!JyaVfs4W(ukIbV^ZG zqlrJ5S0D8(QCCk{VNuD?1PAZ8&_nYxO@+I-f!t9)wr{P`HL988u1t4c0m0;yAqgD2 z4kWNK{6?wv9;PB32Fr#LnHgDHc!?=P^CLNGAKuZGQv?Q}YXmf{rQ`QiyrP$z^NwC` zTt%nh`F#2OH{e04iAbjh(ZtC(?nY^G`@)ptUh_$+pGurlwL?I<7dES))?UM}1)jQm z7=44Dhq}9VB6WO85ouZ&#!HR+w z;fM#SYT=(4t?#3(xI)Im<$QEQ0YPv)DN^S3^l{%?+OlrnGmn)EY_`>9<&sr*PCl2F ziG@lP@#t^MIEtHa?V{gEXZvkEE*bZBi+X+{=#<{&=PUpWgrd_IyDP^&T=N$?`w;wQ z;bb|Yg;D(XYNh^5v@?o2&6I+RU(hd<{*hTMe5vjS1$-?#7B?wvz$^Tb#dSQ20_s*z zWJ*a(X5awG1x@V4?Rd41#RrhYLy~23m-N%+>KS@Yy#jL|l->6OF2r@HcACFABvxTc zx+`c=*6K8tnHH;gj@~q|Vs=lVjy#_a!B05>!vDvwH(LNI;kHrc+0| zS(I1oa|YK=b)%ACW~cWEd@U&_P$zRwn)wyEGd?t)UA)f45rz^~7J` zye5>246A4HN>66wJ{UO9Rda^O|i!qD^h9l<;-0rz}MkRV-N3zyAV&ZpxNs_;-MA3ww4$%g;4&gnu7 zVDj;};JtFD4RDZ9=Xv>lc zC|KE8mZ^S>FZ8ACV@gw514wQd$FI}S)JUArY5~8$qrH8Qsw!=?pi^uc(xU2IHhs5v z=y-YBx(5m$v{qZXQ7U+cqnTnv*w?WFK-T>YsF1IaG}i*EpS->wbjD& zKMI{p0T%SPNKT#{p2Rgd{gcj}B_N1OJP)Asg^Jp|dRJqcmkO-_e9`c=b{;ONZl0P6 z{^0r8P~>pM<1ex^5QHN8Dqd6;`d`tk^>G6U5%^GyJLk99&Ogs=6_qcgr7Fr` z*coES!-&grnc`&DX44yDXl-9C*3962VrhK?3ZyD)G{jzI)e~jf&x2HB0ni!u+)f?# zd*lAJ2u)G^KBX^0R$K72DLb;{mJwLWd;i_I_KZd}L4BXLj*YKux_puy9E_ zUiw#GGX>ON_9gl<2hapH!m0M|^9u!%@3^64=FgM`EdAMJS);pOZ(g~~GVfw6!^Juu z5;Arz7vbc|Qixp;@D~UL{A4o4bLv6581|1IIE|5A$VVRsee**1B(4{hKkt5kRMtQVYkuB+`t5|N>@0_Hoe*lP0I zb2D6MmDpq%q~ceLqtIfKb1ywhGtg5^hnK#a!Fj`PL07lEEO?0^r#zjj?7b{oVK9D7 z@ON4koIP5n6V-#sko@7FV^njHMnH$cu4m*EC`hw3wZv=fmA-4wD}Pid(s2@MGh4e5 zu_rAea{K9gVfW{JnMa0i-}Me&m2MhioLOjm`}thfQ9AOZ zkbe~(rAq?sOuny`yK4}nDVF>Sgy5iOx9)>nDo!57Gj@TYd0TNpW?a=_@LBPHn`3rp(2 ztGsC4*kKhl`RJRXIzLsmz_WPg!jgkZv;%@Nuzq9Fgx>Qyy-+&)mhPM);8=^YygHz) z2~D`!hbcvcE6{o_a%znp)lc5rr9^3{zyFjK{f(n5g-b@_+3|s2*3J92H&=@Smvdy= z!jg?(!h(X*d{0ZFeVY&A>L%13#k2^%JIHzSGq6LmHxo5zmuB2LJU5KU;)$i&?&54~ zU;Ut{^nvnoYn(cuVJ?I~!&Eja`wu>tMtKVvm9LT7A-wQ@pEnhd@CH4pvL% z>{Tv4uv5V7*HX z(zrRlSQjea64FsanVmo214XFD6s+sLgnokHYvj(f$@_YN z_5QD%xlRu8d*2(|a)43>B_*}wHlg99zQZ5m&+a$eHq!(!P3O2g+JkdFO=wYz zqixRw9NMA0R9VWoJ^#)9F^=`!Ztt`~q-QZ3R7RT~yyjnRt}U9FyVCjeLXh@= zq?5}{(iKU9d>ltUNrs1XIN2|m^w~O-(T?4)pS0e-6}OePRhP~Bzo&686JRc znj|Waq*sn*(<^vVRz^|B_QAR%xGk#CTy54Dg8udPR=csu)_OQJD>tcnb#eT9i(S*! zhEl()WxYVfgVdTG`tX+N3l({YbQ!S&-s_h1UkhGTg{&ZV>P->JbS)9yt#hJk*F*Pb zbjDkvbxgi3pAM8?F%BTZtcxETTa}V)N^4chrC}3errs+Tl?14-{vIC+u%)_)hM!G) zr$iy&zsv8YfHx)Jm?3{MDAt#_ugRUa3BN$ZJbaV7xAup2p;tQ8 zmbm&^Gy>CAFQs)Sa67_cCqN*X1v62R-} zj8`5OVk|M+L8p!;#fAkM)Fi=YkJ68-p4M$Syief)yP?0t4!LQa0|og{o281O4o(wV zFf5yGkUShV*!~+X!4$qlTblDj-YXdA0jEAyH~ErN3sXPpm;FbbPF3B>{ze&_mCW6v z$&xYOD2!g0elRMmtXE z;O3TuR@Ko6TxFmi&uz#m%SrMz&%zK><26*YjFZ{f6}s|z1Yss!Pkx8O1z=%7zJl3k zjF-Luw|az$z00I_q!O2G4e}{o2FD&f_^sg5!RK(kfstXWo&AoLxlJ{#vqsJR&5mq_ z$+u6ohdBDbpm1d+`=aUh<3_Wqz3pq{002{Hzra+E^~}vSzN4Cb(1?Lk5pp-qEcg!w z^&*vP&PDJiJU-kCUCyk2_@)8XL21Pv?>l!{GNh4CqtBoKeqxWH~u}J1!zV)zw z8=L?9!k6v@oX5UW%=~7$BTru>WBqiUpA8lsK_i3 z6oL?Dubr#)S-}W?C`_d@vHhHlKkP13CE62wj*aA#52so*_ZM>bJN${?FWy^)W9^bH z-|ik6h9|C+<#xguu>O{AA4^e59R*%kDrPpi565s z8?uwF$WoH*WzD`+_I+o}Oxje4NOnTVGRDqeW|Zv9*vC4uFJorxgTef+&Z*DmeD3?4 z`_}pW^?f|<|9Eg+*L!)rUhmiTem(~*5&kbmyq&ONh_Zx@P%h zdh7ZbA95=cA#(I{eMw%>i|{yy<Dm~Y0p#TvXwC>Qx+KB*=o%*WQKe7m9b{^M-Q{P z#*TC5XXp1KlVW8SneI~_TF2uPi__HyO@ht$Iao+XV$)9O_f6RkWM0{+K{KdaS$*tS zF7K~V*~&GiJN-xvSAwEFp3Gs0lTkXZYYJUNZT8IQX2lhi=-7YIT)cv4MfknRzKuS09e1$~Yw^TuMR8t4CVX890!=2@iFb zw(-8xsy9n=(FR5qvW|mMCXyvS#>?=hOyzE#0j>3wz?DMy$DA9Z`9;09}o zUb9%}aQ(13&HmeU5@OVzoNv&GUW-TBdZsM)`vv-jmHO38bW{wO+OzVuww|s~tbzPy zYa4#Ou)H2uYOb<%ntUdd;}5%*e_N+RfYB*||Jx3ZGJBxL|D>s-0k)PuazYxErh?USQZ)S)38EO$lqVrT$ zJ%%iVmq2C@^`7OSU6ZRfS`O$0sgg$=KU|p#J~MDzvA(WY_zv8 z>N>QbPtU;hZBanh>S}D)I8rk=LWD0=I%xW#>MI7bcDoGv5Ru04C|jnU=A|wJK36xj zaut@f%PJKbm^bgkJR|cqYqwZlZ^ve9r9_?O6Nyt>P44}+R+*tYuB^1+L%Y`CYpAYk z60>vXfcXi{MRP_-d9m7?=#q6gbey>KwdR0zN6p!RV*C5l^Ct!^X~Jdt#U%PJ=c zt5zIbisEX?s&65L=-xW8JyAGk2KCp?zg`T#T_!&;vhouPAjvL5OZRS%%ht7iOZjwZ zp;PyJyg#P6gN~a2k*KPOr@2YSTB5V~W8VoC+nj8Eo1T?7Ph6kN25|G;Jo1qseWb%> zGm~oilm?z7$R|D6wwPoX3rx|ae4Z!|cZg-;yN99Cqxb_s!^> z!1YxIH@P2!C=mnNYEzP>(s*Bo9E}Oj(<-l@m9Qcg$z;W$hjPl2ALYCVX3`0~r!;n^ z8TSz4kRX$hiO{u9|H9ou^HuI?@0mN;lvLwN`gLHL-{?O#CDrzv<`8`k7h`4p`fArM z*Od^dc48PCQT_sb;=m_ic*r4?m--tP9<(0*-63(;7YH`kUDtA!?r}}YO+S$ILpb0; zOy(wd!ajhNm9l0*5!SdBz3`lsdzpu~6^4_gClk*c#(pc`?J12Vr)ReaUVSN=az0r9 zgLmV;{j-Y-t>cds;}5PM*mQzWcWW3T9Q2{E*YN1AHMu@z)-9uM%%Y_;P>E7Z@h#ZA z7X15Rr}&BXHuoaVo*#i;oj1`jzb9m66E`ubdaVy%H-6=s|9o{%PfwF`LcVw}ZYQ`} zY3D;wD4Wafx!&nq>kSkZ(~L($v2q$?iAVewxv&T_A*?y_U?&%*Y;`NUXilUWIB9UZ z6ZZ|3<`3(aF85Z-8O#ijXLA7qhpbvjV1!dOs+6Rl9)*({OH@gv`C?-JwdGYPu`m-!OuqJ6 zOB=dpH}03mq<@L=sy+Se?6=nj-bVCwT>CwXk2jXY*Q8fC+6oUqH;8h`j-lQ*O zOrlN1{x`YUJ_mkOOph0h=PQ;k7^&V7xr7(^U`lK9ME}s4aq^n;ZjkwAW!ir- z&HZE{q=~g$B{QtzUQkXmc?E9$(SIY#`u+Gs>*-iMA6eVyQn_m!r!#9j<&*u<)Eq(( z%FfG)P8)Bz;<+_h=vV)ErUU4NjK>eYULT2jh&=0V7Mp20}clp^BB(&2WAgOlhcV3mgz!rc^io0F)H{ahjobo3mMjU@& zcA`T8JZe2rP9Yk$`z5KXg+A4%)Y8qs^>%?&1FLvBpz2^`~cC>q=<+XSeb` zYCfy74!=HaA*(9C2FJGKWgyHOD5Tj_x|*|QPf6wL2HrsC zCI+UB!lH98Wv)LjPhj7=N!XDs^Gj4;U~B^EKb8LMZUHMUZUOiE68u)8<;m^QRaA%P z*Eg8(lc`YjJ=7vs!oynd%5C7zAu0~X2!2s*pS`@~njf=$+P>DOGY4oqUDpDLF$NpzPM;^f}8Zs8GLPnPc(QL9_jp9)piK&YHsULB{p3j15z2RF<0gOM_B%d<~)#G)D#3v*%eIhbG$ zPmUg&I1Z-6A%!cR$TppJ?^`gQGlyB9$R|>ePxLgx_80>^u36rfG9r;Zl*mBV4Pceucm7Myn1n2%6~TlrekWI?~TJV4=XVC-W%Hh(9!N2g`|kgN-6TS5xYF+D4}q!;x|I~b-#HN z9R}xsHvA!x#K@;6?Iz_JyZ?wyMp2RWY$9?`$Z`1KhpMdF zq!bh3aH?I5-Sbsj%|kmM=;O7MlguOZIKtc4WBq^qb14Fe?nl8N;%} z#a&LyXRU0w!&?<%#uc=ALT#vVb{O*pYQkAz;U7Mk{B$#oUx;z9eOTHm6D6Lms zskCeS8A3=Z9>Fvm{0BRFNW&@U9z*p|Ugy1gk#X+c2A<`lLaJjPeXPPpIR4>K6sc*9 zpzJY*RKsUM(U$AoE61k>+r%Hutnf}v?zVVLyT!HMpUin|aaCH0NNqlIA^@r)oRnV( zStvZAYdu+OVRjLq2wYGiVx3O7P-n65s0K)d?mT}2tdJ08Wo2~*WRx8EOODJf+JVgaw@R`W3`EUH$VSwOYGof?i*W>D8<_E z(hM3W>O9;}^3Hr+S&ZyHY@0R1qZXj`^oRil}fXQGFd$<=hF2HriX1F#eM*# z+4+GxY;d1}q%tB9)tfJk0VqmsrX_WSxjT1pq7X)>B$__te$> z-z?+AcN~!lP)mi?zlQYh3I6XtSy}@)A}Oax;@bZVM-@qS!WaRTTICE~8QociCF z`aivl-^cO)fAed^h(y2rBW^0T;XS2Zs$j>Mt5ucUd{Q@gGHx^Sb#!0s>YuL6&xV-< zv{Ex|>+Y0XbZT^*12ptP8(~C8Z$x;^$|{oigmBZeugH0xoBKBzEARH67veCRCbxN; zd6+)Cb(_Y6d->N_X9u7QCbJ<9uRA7GP0sC<7Ex~&$L3X52?>Wr1xwjflEKakGToO% z&gR4nPHVxtM=Qj&mvt{9-xQuO4pL$>nIu;^T;jc^gYt0nv7@ss5o4*iKXRVB8SosN zXr%hqgIshHi0Rw$e$*sha$h6jwGVj=04_3;lQSn8zvrj#49tGP{(|vWmEzoQfIROz z7v>#f;S7%~W^q1l^`vNJ`N1X0&sO>`+qu#zDNQZT%Z=?0cpq`itG)p?C12wn!}xTB zUS+CDI(yN|R0Vu&((7}r5AaHDuv}ezb_ih)iS$aKu&6>plP&9C`;x z(b1(kdVxmscy?}KVS_7IbRIfbp{|}iHgVWq(A6Nf3b-jg)X?{_gP(>bB^%gUjd zA@usMw2}UPkTSnhbZct+Em%HaA#^pCYG1YXzBDo>!QL6Yxa@;4HQ?jUU;)S>F3{7v z_qp!^v^`>}{dphnWZSu^xoZY%sD;eSUi)fbRhjGR?%lvFN0$t=R!8R4YvIj8LJr4l z*kO$iA-P~K&eC8*c1;WCGdM=Poc_=-_YD6~1_G&mMPpH3L{d#>JTMp}D+BuYv8;Cc zD)+!DpD1P)?rLioZr4kBxhP7OGl~LjcTX>{a_EwDNrnlKLd6FrByfE^Wr1LU?c&aA z9?Uzu0VKS)+lPkaE{Vjn7PIPm-zh?bpC0HWf=cLI9Z2tqL{5A~Rw)>_qMy4V8>UJn z*A;7@8%ka6EbP&LIx_Y`0T&3dZVQ(JhlLibwNb3!gsrZmPxzdH$7c$QyJp>z{la}d z)0LCrXf!9J&6H3mSTH$4tJpeIE8_zB0;6A!4qUF7iYQG9| zHINcwhk`?0R(7#i$Z3bqNVx5kHi#IFpeU)TJboNJ&|xzH5JpnHoF@e|)S7r|b4YVw zJ%267cJ%7tISfZ$l&~f%Q$3IsfFW;UUZdJc@&t z{n1Y1Eq_b>cyH5M;yQR2PIp-2vW!OZpoxI2wlrd#Jg$QF>>k+H=oD1n<3i{py;&$O;LucC~w1j4F7`6`)Sj=U7t*(u*V@`( zwVc!)h!raPO}?f;K3#WF z=n^byTNDBj!-pNScx4{0wbH~rdV)vA*AG!s=<^kd(S0&Vhkz%;=qs8o<`IH%nQ1%r zy52ig7_%~dG^G-9sX^k@4j25L$$5Ji4XQ(LxzDZm1(8}&bsL8~xrG^@lF16BKEEQc zkeqOwZ)N2HOl`tgm73+M_YyVe-2LT}z#TA7@3g|$u{Y(IA-KwGle~hefHsaB{Ue+h z2uD69m(wbPRwuv{LeX2G^5a3n6F-GF`2!6{!-(zhum~+o3#~@|<6n*4)H6 z@ayBlJAJQi>~=Pj2Ny>1H!3|2|FYZkAw|(*KXUZd+lBgu1~pyJkdo3;b!X?NA2WH3 zYR!amJ(z|D2Z=bFT9Xg0dQp9>z3k>>c|276X=%H#;glE5PX2y(PPZ}GbZE^pY7#fa zXMTPvCC;r?P@KEvB&Hf_#v%*x=~cCbi{QK~KDm`I|; zw!_>GDQiS;Kh|N~IBdB1%O>EnYF`43XZhxtJBFzolUt|2V2g|?%{I5tyaZkHfq-Q727}ZX53-wd$PGb zdv!~mL!5=`UHHW!zIn-WWh*hhRr<_!?Sne`EJr82)cMVWo5O2yS4OKbqkctSt4Uh^ z4i>Od=CSjhrU#ZV2{YNQOUTAc&4D&0bN9DU^)v)}-+LxB zyd8!RxeEM2Lekshd3ow|A3$~6Lpy-Le>iC-=*{ISY2`Pl7{sb8x$`)?I^X$ib_J)# zkb5&tnkG(ei00E;gGIMu*}+yxKLA7{Ezs^!4$y5f>b(>0_?Uv5%J#rZ<`;mdE9;P~ z?2o%yJKlZyFG?wfLE&MCW9T$DWCaB^fI3Ya|4{x+Ih<<_58}B5h5^^xQV@m!pGEiU z_43&H<-ukR(W*{8@=^UlPc>It=vM$b}@zgncy<~=9*J3AlEuH;QUx*;>c?7EBlmRY4z-R%wFsu8b`wPNKpM{J~j0 zYXlr*dGF zklBntVYd=%or53{uWcA_>qj3zPs%QQD~x^% zw6@sC?{BRQGyUWgv)_}8zVldGkdIl(7<@!jL{(VN`##GydS&>Lk-VfPP&}I?QFy}x7K>aKH6_A{75vSx0QBZD-{u;e8I{1E^R4HVaKySrPopzSE^qm3gH zyz4KLysO`@6D@<+hAh}P0^RBq*^xEtKJok%EnUKpxE+jCbr2`H2=B#|UZ|ELWc7Y7 zbzUsCtdY6a3VpIxsGz{0*)epCm=mjzn0;Vpd$yc2klKn(u0std6I6m=|DgU6< z$_CzhXZV(pT~3B$^wI%kq2<9U#&J>oPp&JU)Clt za7vYYOAaRie?~5I#jZsH8~(8__V7|riHzb&kFfK=pdz~;E7QC|t2 zaLN6kK(jj^^y`#Ho~*e;A+7tLzb#QzP>`Hn8SI|eBHgyJUQ8J{wF232;B)^Rrf)iO zUSZVO9(IRT-0Vq)h#ehVt?n&{@tl; zd7XhKX5(yq)NSS4uXpWa-It%NYgtNiMPZwF5~+AM+(4@G2~|lynXGVg(Uzax zte3b$TP~fTeDsVT6#h{kP}|0Lp_d0BMV;|>wTWN9@t*z6f(n#rqhKBQ^Bq^p?|i7$ zgJa1udTqPa^L{?hw|5_4rK)f(yA4XEaQ$^IoPoU%E21`#@&u(FRF;$#544ipeii;E z0*d0*_9{H^vy!rRLwrsYNaCA2NKTjI|xuZ(} z*A;CVUTcX)BA=98?u>9!cjYE1l6YEZ>eA1Sb#)HN&6b|dyb@SQU+2iZv`e_-o?9LG z5k)FU;a>uCyufu)y0{p}9BH@c@;NH{Z#*5b6)-(dp^e(g8B~!qmHxm|D~Tcc%WfSB zC+2W&9SmIUuvG}`q?u}aEZxSQ&^!m{aukhTkyWn6=VnouG)EnBf~nX9mStjwfxUO7 z&bFfs&&!KnR_4Ih^$syHPDdrrMjT&(BvlXdtY2UN%}b9u7RXnvqYPHL00g|;5ihNs z=>t`Bv(z1f(*6+cRlm#AB@N{kCNid@7b4D(3UCS(zjN?)l6z`)pZ4BwB>z4$Qj2%K+D!6|QN=?!2{N#Ps`WO})Q3=K zmt=vv`72J>aI?hB-YzKM=<9@>gd|1d7N<^LlHz z#PmOxwn@32%S4>kH zu;Eg7GO|nZVZDNfHevKtTw)AteetyWtdLxN2D(dfJwixnFN+5|Z)n-Z%i%(V9puq9 zq!{O~29=8t*2R?9oS$_a7gr~^5K1{Yjv3k6%4zB8w`z%EVtQAPJ}dn+s6RJ+RF2Lg zY#m|8pX{jqIxOOruJW)&x5F4zD!QU&K56-D@|jNNfCPGa$5?4$8B@+HK?{a&B<{yJ z-j_Q`h<|e5NLt_?PNw%VlWXotMoq`dmH7zuH_>Hk>GVk3OShYM1dzGth6IYyH6e3} zQ0i>{nE?R6aW;=-taN-cOZs6Wh}+r2IJcLAz>?&BjjlwUP3s-+y>noF@V$0ej3z^r z(vqL~gLl2Y%?b*-{Bbs&LB+W$uUiud$ny(8OI=gzLh6C7@_5QthI>~g3#t2hP9jK? z^+}Q?*u^aNp}crlmvs)2>ZG0l!#g0Fj>iL{bo}T+#l#z1IlpL85-tel*w`gD__nmt8Ww=y~}I`Ib9ME zSh%^MNit(T-biEo)*P+*%{m%SmWgnjefkU0${)$gZ^utX*Hj(laQTvI6ldSZ)E~s) z<+UDrt}^#YsTsFyN3Mt-Vn0dAEbIKb$Vj9RS~O_hlZBvTjIY!ZNK&xeKVZy(%a7!+ zzd4oaz?835{N#%^5hi(l%>b{`(1&^b0<#vVFvhvio zi#(Ipg~SIBS2Ov9dkZD;L=dj@Lb8{RBCO2QoMMx%_CKnX$3AFIGL*Oq<8owHx;mhD z8T(;lyvcoESk*^St+caa1|KN(o2vWF#D}#$Z`swY!H457Do9)Tg4?Z6%wp9jTbz*o zK#14dC&Ho~KIdFk2+?`ClJ-y>edm3g?g7#kh<$wgB-|=qo&m;*s$10q144^XuI(P_V5k{QI^ZKcqd6kau$`yPl-ah_%&mYDmedVmpj9Fkt0r`V znv!lw+6RVq2iK#*miuKTceN122-lh*{6@3D|p6ScUN4OK@ z#omHRabOK40N@EvfS}Bi%;c80Qv>il&Y1xSbf$hoX%|?u&G53^DJ~46BqtzM`1+|@ zstAWOM8RgJ-VawF>*O2vY-ivwmK41MVx9fE1#*&{U>SqLlt0vV{xYIy?A`sJx!>@f zY>W2qmpHLsMD+ahc>Ga+Ky1%e_3&p;-~Xt}X3H)6@ZOEYQFas4QviaXl)+{8iuiKqTN-9(UraAwdyTK8o*P331PVD35q!@ z;v5yQQk9C<2;pJc-RyVFS;0#BssqYE(>%)N#vd|>=`7rb+D$?fm6CV$%D zf7jDRt!Q`*;{DH7!vOH!o~)*%Dwfp=s$q8@n96 zNi%!%MJ=1j$4;7$l6pxA$L)7Q*GEFxQaXJs1NSn7`lpJz;3V$^z;aBC`5;vO^vq3u z#cy&S6OZimw(ny_JD{)|-1ldKpZb`Z4Us81R5ilnPjCJ&R{wwcHRw0sopgtkrT^jM zg)Bf7z6{s8=Slphon`(2Gy(jUI{ObF7cB!iI2!sA2L7ih{&c^b zj{L*N>kWVgkp2L1_Fr{L|1c|xzcc$hOZ$h91B`*peq1K5HoqQ){Js>2?gHBW_^#JK zeEgINP_BP~Z*%%ZL;BOC?gK{8#QfUjA3pv-0O($ELdN}iD&Y5KkaLRPn+&D zodC57he;Rjxqa#9wEvhc&1FFM6)#u*!^cBmfZ7zU*+~6Et^Gfx|39VwAI#$4o5TO- zm0soX&MzG{M@+umyjKX2NE%@QQt&&*#%gyT=mTUjN=oV8nob%elQT01y?5MX4fT5) zL*UhXTDDokUbWs=GTge{f|o0aQ-a_S3&-$Ln zL_Z8lX*oe9*^N9>J+~#sPz}(wQiZTJnr%cpECdwrg!3uG&yNNzonw~gbcqDr`ipM5zaDJRl2Cz5n;Q9modl&#$Q3~j z9`vhCkMsvP((}xa)}PdGdY}*)y#Rv3K9ixrNe?6CJN2CKr`I=ELzdII6a*CGXxE>QDn%E|EgE?dB27%gwLWH?E8PIOR>h!#NrrO19r~ z+hwfXeyqQqKZ!_uKLR>>M702)v||p=H<1Ny&=6G78=KnAgap@jCN9PzP;z-n3{a1v z^gILgKBqHIO8NH+WPD$N9vk7kuRuXfPPF=^D_6RNfKPrtKmw$50f4O;u>hj86zL(P z0xP?FW;4aP9Cyxlq)@d>N4MU(IoIb+WMqpW0qOqW$JxBN%i>lIhCt9njK z>h^mfqsydK10VROyhw3dkw#!c0&&v-Yvae#(l)RQVV>nUE9*248@8U}%F$% zX%nWU@J))mr@4b8K9BJ1nO~f=@B7jbYD#@Q58~nev5aYXue{Ju3BK5Ow$rhF=-g2- zECBw%^m64TZ*NAOtJg-0UWJFRfZFcz_M~?WV=~k;`uevxC#P&$dibK0Yqx{SDk}r7 z`EMmwfgb1e?>P2!R2||6hFbL4gpz_jm*SF`)#at-Eh{3`!b3jQ51tpo-f&V|lf-r9cfTR!Yss7=8kdpAkfmIO`>9@- zi8DUbg)Gi@apIW)oJZ}d%F4_kl-Z~>%rM%%f9ENASlHMb`e}X56{3AcLvf@y>8k(j z)dm-?O45PIr0DbL&5@|}^PLaav2Y&}$YmRCah-og^QGC)at5~I07?7$+LIn>iPyr8 z8!@ibq^YHZQMvO#S;xSFlJZ0qvAh|)ds8P+(BV+8=aA>p&-?9$1~uemgaAmp^%pom zNV@wN!)9ixa(_G=qdPx6fzc9UELJf##6yZi~$$Rd`8bmTg}& z)c6h3w~N!d#?i?CdG*F}f;qq_@R6nCfIWBS847xr5`If*$@t!|p)6#)WP3XXO$M36 z?M3&INK|;r(L+^u#Pl@lW)pQMT7S)qe8AZ_Zg-SA6OQ~s6zl9HzQzj)!3<9AMjMtN zx%QF7%kCHVg5v2>G|XG(Ohz736j&MpK3DBtdxk8z{-S;JrP0ep;HEwYvkz9jE=IV8 z3A!q-%ZTbmeGOoo@&qxq{v-u872C&OZ6OxGv*!$grS)Oca+{3n>t8+lYJI)D8g~z< zJOq^6{1j>7+PUN#j<6%7fh*!&c_Todux>_RcHaH6em#oTyL6s!yE8D^jQsr1GSsiS zBF6dywO>kXDtrYh?_Zc{ugVE^tn*~7#A2nJL+y2|Ww!=e8t(w)G-eYvk8B#lr1PS( zpGSSnM(E=P5krSp@EL5cUq2$Dl!`o_lN{#HY=pl&6r(Ba`VQe~^AgtrT;ZHrlP)t6 z_x1K}Y2k_8HDm&~)spDCFAd|dX_+-3j<-xDyxI*vGkGtpI z#aIkoP=7C2l2Z%{?n|fXzD& z`=VgGe#BQ{#BV6wgF5*nuv3{C75@UOs~a^n&5lhVf4pnlcHy9Rfk2BRH`%O;+_L4J zo7bYWGmIj>`e}Ye*S|-(xWvU4W!~$V zl&!D9k2)n+hI=t`lp|#TNjta2&Jd<)s)dE8M{Xn@OH=?D;IFNPk>VFYA>Omk=pht_ zYL(l!n`aa#VsJ}8i1`}{>C#xY4SD=ldV|&-f92i}pS?gt>GEpst>Hn5H`GEplBWgR z>A8qrtZ=c0dB7B=YhZxeqzoy<6gaB|(6K{%w4iBeX~S73#wRrIf{Q?-xcjBng#gEV zZW_yEDWM;ZoOjwy|JB}%+8nFlml`Su;Va(tJSr@eGdqHz%FQ5hRl8~gbmptPDND4WM@U*RD zijFZvlv7+kW?lk4|3X-CG!QA4hG8SSuE4=iS(Wf4uN30~%QvzMM0qb~*y0nXHciHX6H4JM zqXgDt$AohYh01+{1D&0nqt<;4r~IlsJzY!PL8B|)JC%-dzDh+SBO}hwt2sE&Z@gzU z%phCxG`6-b&YSC+;Y&%bS*sohir&3W?#*`cZaA>tvr@eT!Zf14MqVn?5LU6fl^}bI zW7T$M2sE|cCT*-V$b$E_CB#RMyU}o2wam}xnCbE&t{Hh`q<}8jnEv4KOYJ>u@DmGQ z|1Rwls^e$s{lq_@J$}lFHB7F#%D9(@~>+IAO{<$9pi{o0kS>;jVU~ zH%Q6HFzj4xj{KNlL_-b?pBq4Ob%P}n?K?X9FKvn6@4g#w+2nQheYpM#nVreGvcPI3 z6Au{98(Q)6JA+?pYai`YM)&y?P*LHof^H*&`pdHqF!$4?q$FFGPGn^?(Ui%`QgXuK;`%k<(#oxao0}q>(P<$u)mp)E z$c>Gwj%VQ~(o0qVt3I{KHX8BfC@E+8ZKj9+GoX9GYGbU-M?BNkP5%66=;CPd#r9{D z>FMdi`b5`iNRptbXoEaqMZb1D)kWILbmD0Bcf0@AH(XuSKCZvzxA%haB7i?w8(&u1 zJEUip|9*zE?|}QUA8z>(Ae{=n%c-^ZyIeJP^nw;XVb|BPVuqs;OlM{0SpXRB)(9i< ztfR5!N=sBq13CgA>&Bb9XuWs3k2aoeO%~41=1WT@i-4zw4&*be1qlt|-e)EIH=QvM zD0I9ET}q?9Vy}~L=e<5-?q_BW2IC8|V6e6P+2rUr`N{jh-M`4Fq$%@59lgEW;=haGldx95JLB_(&tZ3s#=mMnQob|_W_-JdY zzK3qiTeNsP8migcuDq(DzgFnrT8*fc>jeYO8rN<|(iKpjgaBZF#GZuJPG6HVc|*TW z*R||H*+PO=pIuFAR}^OOPr*y)d53QjJ12C^%p3`98qHDm-G@hJo{U`es=#n_bE{gX zrNhnxTX=Nce>VI_QWyv}{kVpMi}yY&(bxOW=#`s*mC_{=<_Uvm-yA~tOzBYGVIA#_ z5FiB^8MU;u3nP?D_wBFt@SVGE44wMNdz39+{nWYaZ}qtA4XNWG{*V6StM& z-BVN1z-dCr)E`_~@mLtSVF8?!248B;It%9Gjs3T?*)*oMwcw5b?fqmafFb@MTtUE? zRz4z=;pBpW4H4raCnvX_iN#0OttcOu8?3CX9GTevB>SSslY=NwdR;VB?(MiNiRLd&VEt#6@6Dn|3l5CW=E4tg4bL1;7xww4Co}lCZMWqQp$Bf^%%i-!--D0$G3u%NUvYa6MSaqTneRw1KY$irOnX> z<|LRRbv+;Kv9;g1}L0>E?}9Ez%a1HA;07HIb{*;cav zgehbbuh3t94p8m1nQ|vWZWmF0!1aL+B%i*)un7karX(FZahWNG2}ju%C*{5T*z+kz z1>hz3BdED=8EpXc2kyxm!SkkENJa?ch&~j3%0%c90R_| z2^#nJt#cW_%i5fZ2dOb9jBAa?+FOZy2=dz4q;VbBf&&drCGqg)|soRa*De3q{loaf)LW^JEB5sJgNzaco zdV2yv!F-ngajb;GeyDEF=R~LV;Wa)AC6Bp;^ zvJD=s75dB)iDksp^jf}bzNX`BY_ba`pIq%qo=}bA=F;{p-7QT{=FHB9oj|HEhB-bW zk4bT;w@EIf#J!c81P8<~nXzP~z#TU18=mVB`1IN| z5Y?=f^xS}xpjX~uMxajXKU@JzCz?--@>1=sPyVwS_n$S2|15*2pZhSj{FbIw$zA=7 z2KMz_s$Em217i1CrTx^VW$pMb@kT@Q9qkq0L9l6V4SJ_tp1fPXmOC=^*<~YVnzQj# zY9LW@I-Tjqsy;J6=cWFe64W(xuQbIoNC4yM)W1?NUr)Mev^Gp!m-e8=1B z-)?qt`zn)LLnVw#JyaES+kni7v9SpZ<&PNHXQssa!_W4EGCcFXDhtAmhBtQaxe6o- zp^cx%=Ot(ZQUy5eNq?YS|FJY0L5o)A4Uhh2p8sXq|NYm{93Z=RZ|afTp0kVp;V}k{ zeJ@7lpT+KZF8?WP|M&U-Tm1iLMephh(D`2y{92aT`T5AQK7+Z1g_9#k*@=p#|L#Kj z#@+E?{lbL{UxCZ48cunogkGye0-#*BuBXcP%tBw|$7W~m@_xNciu{1t$5*!?=%>nu z-dCiS%}X&HmR-$4jvPid)Ypai4GTyD>My{Jsot~w&`=D@tiSE<<8@ygana&{cNt4lOk>-B>75u=Q~@HPLzRq&l0E z{(qk~@Zx^;52dA&0;;~Jy#Mw8t1v|(hag$2uUuQ9B#XY9D?X*~&tv%exvwgINTc)C zJO6XNFXt=rp`z%k*~q>(Nqc+6zeWKppZdNaviTSL+rRJj-qz=jvDL9K`-$YkaeG^X zKh5Vu%>Ml(fH*Ao9JKYRZ4<$R!3$sN3=wWq25c@dE(nf*xIi8g;4|DU${ zr@;Kh;@vd`q+on&KIzYI+tXVD_|7fj)UUSfePMpA!-on$3hLH+0bHLwedymGSk(cx zB*rcN*k4TKf0(1y_COz3+~|OiP6!TOpugDN@CBQLKdf!oDH4?lG*d!dbYW>6vsD#&C8x zbYfpa+WsE``Ry(Z4US1!+hlLjvK3uJhHkV};H8W+?Q<@`;zTSlpm^z`&rE8si&fs1c#AK=S4?pav)b_9_%6UysJTz>rc-AF7lQzeLO zEz=sm;&FX_lEJ;T^8^jh&@oH=A@#J!J_+6tk@?pt@IUK<;wy&gB1?N#AMLC{zqy=# zRC@MT+n%a1uAJHv+L$-!?Jo)qp2gE^F25Q7{{A4yIZ+Vt$p$=S#H{4)$tr3ZcUp*4&`x*^b5IM+{Gvqp? zgBZXb#k2?VO^e(=Zc^?d!g68a((ihfMAP+w5-#&>#I=IhtVL#8OM5`=*1jg3nQ~?A zZj~T@9fa#^4v6Pb*^{BHdCMbev-&bt6yg=0CHJuL!^XS&1dvYoXw!*-hywdb6tl3G%?E~k6aGTw|H_`J zgeod4D;qr@0advLj{_Fd#GCNlpnX6e`Y4+}+HYk@mRL;Gnf#(Gcb37~_b1RcWcvdtnO}_4oN|^NeA9Dw>z? z+=a9aGK!I=>h6hukjdnfy>>h7Y#-s&Yyb4DqoD9qBvP&~Z>Yj|X&+qLb%2$DO(=vQ z8-KiIX`p>OI@*jh6MsgM;PmFzM8hrpUZRYEA*^M%YbNV_U1$0WuEjY1-xWP*hko+O zEP?~)nSxl}DJ9G&7k~`;a9^_a;GS_wA=nK%tUlE2s7H6H`z|8On_pW5wV5LNh~kF0ZWJH{{Jq|CLF9b1cYAYj6+cAPTuvfpnwlM5B+c^{Y8(Clp10|1MV00p{R!~!I#|1{W z;ewatKcS?wPo~GgFH>2hEWb5Qj;RYV+gra zo3bm#kdq?1_9@n9x$vH$Av;545-ue$z-N0T2F*@F?S?JoJHls+s!E%*mdV?@OB;0} zB$5~PQ`3ZuS=Aq=DELAIL;1`XA_8N&8MMXfqY%*%L}IAs>c7LdH-mcUt8^4cOLqaN z^67@f4mrGT_FnA@KMB2*vtfO_147*NcW;6D*4t87TI`-LS?(|Zqvf$9Q4vvTDgr7^qyz{_L`G1miVD(#f`Ig16M|BrAib9)K!8va zdVnP4->9fFnsUnjI z>5Cs%m<~B%oFfu6GOKZgIdCDvT7S1mMh0+_-r@+kVHrMTpoDTlB{DG~pikJtC|F3Tqu z@kILIBU@SKca1Jm9VVM?+6FU9i?CP(`ZA*~2#?Q8H%6WKt;HMqN$ReDox?o>udMji zF%uU(bk9cbKPa?8@O8LuqXO?dgK+ zY_sG#NpG<Y!KQcIZ4S%mot7yXX>i@1T1^># zEU)^Hp7af-io$S91xN(x+?w-g;tm@as4JO7*tDjppiHRJ8>RiKq4sSP`{x{_KYF&P z#ufFoaA9i_V^IToYg4$1{8dmZ&dgrGFCHg?$}KXD(yqH&cjQF>rkIkN=znn9>7prc z;=7KcU)8?<(>^*nBV(J$&}1eh`0YdgM;}+lQ6>#GU<_`*OfVsVIBZOp%z` zNlWE^`V_wHhQB|gP_+NfvL^e!;hIV+VJ?y9YDqa2mP^Xd%&*kg^ilRa7Jh%oi)EwO z!$FTCA!}sPD5EdaSVR6CLMU^|Jr<2)dDP_8ntlgLs)U~%l0vCds3o+w3kRw#xVsPG zSP1ut8k~?}jxDXOGZoQ6)i8WK!=?%11Z2)9SG8y72X_NqZ(QuW*wOfdN+dXD#*fl8sHV4xOQU8eETtZCr{j(buYpwHXw@CFsj6Xp8eh;SO%&Y$cOYcblK*kXI1L}FiK z&PN{WQKoAMlgs`59PtzSR?QTcv!+e^_!(pUrsykT5c8{;=>%VLz_qx^BfbWuc+JUN z1^3p6*Kgho0G3_>ITAnX&7QOze_n&wIaB%u-Z*{b^*Li>0ZX*~?T=sqIa4|QCXBsn zb+JKtvkfFe%+8KUPRaEQN@D>2+MC%41GXZ7fI^E7;t0an#!o_dmy&J!<56dHb*@yp zn7Ui(mFK?RpDhaOFbKy{NuFmoQ>EG(?)uA&MY~%Kp=8arjpBR_f|Kq)eXrX)_-JJ( zRAsQ$rJ;|4zekC9bPoepjR+&sn?uy>trtb^YF~oWi7vR+spEG^f>2GFjEGwAwLT58 z5@_ys@ODaf5`8?-NDxvq;Tba7^A?0TI};ukGyF1jA85BL=$P#w*itq9f-B(dw{ z&H9t((pBf`i|-z(%uto|RxZs~jKz1P7VRrvg@N66IQTKF2-xT0(_2&eNZmqG(dM~-rNO24s! z`)sXAHVx{pWJ44V%eB^i%ZSc29^>DaQ(hjCZp(@l+8d+cwSTS3X(#$8KkDJRX-5-X z0fLd}J(S2{rpV)56d;I{`|lhP{1wDrzQ<7&UB?d(^K3LqO%xFdlJ=MNd>-~W`~}#h z;*fK!JV(?0i=8>W1LTqpofz`wP_e&$dCe}6-aD-u@!u0WFF>fyyZyDqe;)0Qc#zmR zsN%#~g!S!=?ri|+&nGcR&Yae_t|SU1zPS4u{||DJCxND&emu_^7WpP9_PD#4g?gfA z`E{*19QM!6{IOMw`nj1uOo?j!H_a>%xK5i15cwjei0!9+XrP%tV!ESS<;%N2dJ%Bh zBOxKddL~&`_E_58*GqBMy1-AzEzT}S>k8x6VCdC4GMpKUb%&w~3RDvbot^IMlh18m zn(dB1KmFkO`x=Y{eh+%l;~7zoe(+eDmW{Eo5+k;}{N3mtw-pW{s!JL1nici1)X#@j zh?y}iwc}mbU+x!tV>`al>A$C$F0;Ax_4O6fa+DIYY&w))&{+=o+MoY^$9*l3m>^;6 zCHV^DXxCmjk1RkAzEZkL{xY2(J|n7k#Sjml55P#RO`W2KN_N$U4EFEee@0)n{M>Ed z8^xdYLkqVVV4$k^5CdCF`ZDm3F#>@TcYt|L#}7UiW+zO~GM7Y~mO0>@#3$y*NW;VsPl zy)Y2W|uzKgDQAgr(Qsf{sJ2SPA@l_ZJzh?!1|GDo!a?>Bb z@m=8)R?GVhG5F`wXrkP?cU8h}TKsqK@@hA5g%ydGBb+_`tC8Aa2E6ZH6C=Itv3E0YzT~p~`#F=U zuj6@=0sQ^W)X4ND!|?T^uWR@{Wr*?vXGfJT_Bx!#D_=J5=TCF3S?6`M+Xd{zb&h4CKAbK_(U&k43gG)*MjPL zfj6t}bXDjZcyC|UCwR2;UZHZ@%5o25D`9x;2?5wOhNYR~NG6x4% zfn0)T@!6+8vSeSD%A-VjY$#D1qVC@Pa(hII_V~*ilt2 zVaIa?&4tp;@z#wsrBMf`$J6<7ao5UiqCU>5>o|z)H6I(0I+v0&-<#}`gsc)h>Jb{c z%zo-j&=qXGdh#KJ@5#sci4KBn#Ibq1J98Z61`eF!lJw&Dt#KccR7cKd>FM5w5}6($ ziZJA<=X+Hw!VzwP9WyOHmCsT~QV+`%+Gl5Hm-#$Rth6WJB(wFveEb82+ofXx zP3z{}$>mk)x9WOaoW?Wa6BGU42TA==Fv)x)K4?p}YO%Rrrv0ohEahURhRMaTn+x;t z?>9!rT4*h(!XB^84NkovAoCdQ(xPG6 zCm2X%bNF@Z&gWIbt!4ogk&lM=5Vj(Kex*AN=LkKz5Nmd7c!buPpQ-Xp8qyYLV~}!b zqvy&dOS1Z047o7e)YfSE&6_=0gVIMpelN!h9HGA(QMPH{pcfFiNm^8Mzt`F=S-4{q znhmM0br2Sp{VF?X8WcfX?QE@^o6irLf=P?feFWaO8l*nhdIG!pJ*__G!A3Xch>_{1 zliy!Fh^qn5o8xry{DsTpa-DIk1amjL5sGAbGFA{9#4sp(ydBxYTfC;FGUD9%^W`FP zg?ot1@)rD^WjqoQ1r!*6X#@_V+}_dQU~GW~gBNXT(vPT^fj#nSVpFwED-U&w4YR2H z{72@4AVp(y(6T>&{}2gLvS}C9WR8!X=yFG<#5Yj3#6f*UQgBkMukusR5ea3U59%6f zsw-?!V=S7V{s|!#6)y3vhDL?c0`1A=r4)A0#)}aW+iQ>$gU=a`u;%A+<%Oi_oDtq% z#Oz{q`PC<`b-K2w*R?h_j-Pkdu$X%1!iJ{?n#G=?I;N8Ih;*uz*~#1NFjCR}`aMXz zBwsaZq=fc>9IHEc0aG&vE25KK`U59F5IS=Z$K2;kaS?@njnrsmECdx1x!cX@MCW`- z$JObf?1+j6--LvUydFM5yhti$UqX;pk>@9?v?H?k4K7>2ZnxVP%eka8U(Cc`UTCF) zLKHlX`4mOlbXwPQ;6^PL5FKI)6G)SVJVC}y!T2~$*M@`Y6duh2S#db?xm*XPz~x48 zA3-2?*`On3%u}U4f`nU0rXAC3sJ0EOa!2Z7m=!N)8>Ka#jH;1r%H(XBy_T@DfNO$N z*uZ@&PDw9lB{nCMaWMNf?#a>>5*6;Dzv!KS_i~D_e2%(}q2% zMPqG3s*cBlo9gA|m{Sy-Uu*=U8V=uZiQR%?=(R%`E_R!ko*pRbiG-l? z*pKo?XGpyzY&dm9!^+0Sm(+n!y7OhJj#T0DWg+sOCDcK`4N zkMu*YcnS`a)^XIV+|TC<-{C?mj_$uND!jwL@Wqwm809uGX3WOeqk!VN8|ZHlY#3^G zI76EWyj{<@G}^x<(xI7X?C6T!bE89HM8mayHgBOl(X6M`J{`#_pJgHV@f)EUE#@65 zYw!VLVrv zDgt??%Y#S4*AdEC*3>lKoS5nt1l0hozcf4P$CHe6;VsknNEg+VJmyQG{kQ*^i3tr2 zy)KjiDK!CX$Y2w9WH|6MZMw5ib(VWfVIJ*d|I?MTG-eZaoG3!7>suAP+c;94US)^b zt$V6@Zv?!+nNDC|Kd;H^DJIZ6B|v8hf8!h|ubm6UkX)}_4eg)2zPTD&xl+2Ygv3mz zzlv)EoNzS6AMlaOMq$JV{=zspJ6ym2#du_8bMm7Ab`g)WrY0eoZGc-q7%^s)DIJi{ z$HHqCi)1c9v7DWv*BguK1(-5J~7VC&c@gG=I0l~FU`K8;}rX`nBM@$dHc$y7W3(PwiGmU{jjpNpX0Il zsSstmgEMVSsMnLy3%$!9rI=FlsG|nkO*gl0u2F-?$hgT3O0%|=5F_*Fr{8DlwRm|6 z-ac~X=?Ihb)alYz!l*{>a#R6P%-D9|6~nZ2e4+O3TGrf zsn+QW9u;q$OiZkpq#_ZyYYKmisp|B%htJkQT&1VH=h_ySkIGA*jAIWr( zC|z%+=hEOQ#P`x-!H_DA2C-&{xO9Yz(Pn1#(>`Z-jd9$S>4sQz=gyJHLS@;uQFWO0 zskcLex)a7?W=8`@HaXWcsj#yxDY}^vtp+JZ5jc$}z)4<3Zm6#j6AV{2lL($7ng^Ra zBpuY`W8kLhW%8w#93>ZTYd5wys^AO0{GpwWvgF#oe|ZKWqcD+ByC70!!?unVFes&9OO_m6P2! z90Pf$44OL5Gin>mK7^c!NJt^2y>4)_ldm@(Z6Nt~0@S(DAudA0dpj=du=l!vs<2#( zKCzZ~y(5C3Fl+HvaH1x$_rdyQD`EJ%8LTl-giHnCF|za5R{S zTu}t^N}2Sht6t2Eb?8F0rd4kp!zKtaZx1)yq?;WxD{>X!@+qZ1Nt z(rzN$2+vk@Sk^=c25K%?Cmnab0?6We6R$j*4~v&PeB%k3PQTI6uiJvfUdX;l7hHLJ zlum!;I|cZr#f+i-5gmQ)j89b&uTrg zj)6%5=~sONgJV! zfwG1<&Y0cvb9a_4zuNn*JKYvMV?>#1DLttZHnXBqFR;XQ5wN(k3`v3g{REHk8*$<5 zQ`PAsA#Nje3Xbo(LX=Sl-TSO^r`+y~C_5AD5FZB4V5x~_C9BD*g`;+q*#IjA+f-*U zhU4ecP|;AWz8CvjLjNWv|F-(xrkCH&rq3NrGRjuPb-;_#f~6&ouBA2ZC1hg~qg^#2 z9x#3Ov!?9ECvd&~Z-*!e%(F9Q5fGhiWRy z*v=6H%}UC3)P={R<_iwYghT^ozPpiOgu{Zw`cc!vq$7C7;2dzQVmdmIOt+^`1?=A+q4af#1_V8op$qYC zQM-=bikYpiWIS=wPeYc(UdXuS8fRE(kmSQ7f!t>Lj4G}PA{M3-OnSN1&57I`TY`88 zY@bDom~6w{0Ai*|NEo|vS$;X>u`{gG2}a$!=p*(u(mpSPkK}3NaNFsVe~rQZ%}jU{ zZ4}ybSqn23D@q>dXN(T<%dPCnrB4h20?PQjg`4 zaND*>L9}W~sj1L(YbeZ=!b`wTg+s_6TzXzpGKS$u`sEmiA5`7>4G>a2GrEKFU;Qx_Y;GtK9enu%Px8sER@-0hFA~veecv)NOaKB?vaH(mn4MZQG{JIugj2Sdif6hS8XCH*48kUQ zS6_@`HJ~v&rKHVH13d-3&S*a1)P6$2z9+A>z{&7~t349Xl~qVB z(=-?DM#ohR6uSdU2x%KYNb8SA{Ky)A71&#O-1QMfsc?qAJzk#n07TqJgr6ZNUO#87 zl_4x+y`8k2+A$KTq+2qoSgoNR2@)V*?#(R1{NOwQIP# z;JLEB(`Bh}8#U$0d%O1#vm7j$1NdCnkOtvb#0}tl5zAgQRIL*PLGGi1-nR>4wnv`vL*CO0?8a*SK(v}I{BQ#&%{wLmfA@2vB9yv9W2ER~LW zd~c>ftjn?rslXU)rQL}k8m71%4o9}{6!VSvoEYI=WMAxwr~aG3{xzC7;La6navOO{ z+t~@HzWR|ou#(m%oO`RqJbCzi22Z%C6W%}w9+;Cf*& z?48acKRkI)$RRL}4!KR@iGsNcl$y!mC)D+tt`ns$!%YT%6jbM%G4m8I{<1(MX>O{K zdc)FBY?d0%gopF-9ezw0k}m5=DVm5v2Hr+|ak#osFF|43{JO5MQurh18zr&Ex&yOQ zq-pGtB%^y^p8YV#rXzB6Ks~-l&Wq1#$Gbbq+db%xE#uuK-bb7=mb-2Zc=r1#tn=vn z@xyH;UVNjQil`}UK9R>H|KFq4w{1Cw(f~$agJF=o_}VRd4*=e=de>Qlb*FJt^CNYJ{m`lC>c0in>g>N>i_1q4N>zi>U}9yt6NrT+7q|Nc%? z*J9#8y6Foc@8AFQ%LaaWvFQ-VOs@Bt=U~zPIxmmA07MIhpY#4JQuy1?|MfecL$1Z_ z^`RX@pYufj;mKWpE zTMvx!pD#7O`7zF>`g1dXyiQ;<6L{+$aJsO!_Hcm|d0k_xkgTliqeuhMQ)W(IYz^Qw zL#gNV^?_4%0u7nXDTMQK9wJ<{?Pn9SEI+ohI65d_e92owg7nXYR1+{tDBkKYiKlYkQqON-FaY15@4Cc3yZ{^-Kq2`S*v zHCcJ=8;KMLTl$u2ym99emwMBY-#SLsU3s(vJ0Ta(h@Xqm^W;Yhc>-KJVY z;F5?HH#lop@$FQOEH+!(m0JD9qI~+s-}yMas9fN(u}>QU{_)8-Gy3j!`7Bmr zoikYi{hUu$%MNS_TqaKJyFdG*fp5|WQV@?({qN0|h>OjZ&g()rvpwI8VMhXxf-|m8 z|CNHij0-CePqjJxv5m+7T1xP|(`&e@stT_%X3DQ$7ZQE?RJ}ve(Lh@}?zR5*QMdXW zfRrx|`tv%Bl|f@mQ(5nO^3}1Z`PQr(+DV4Eofg%hg1#ok z;=#u5x*&Id6DRo`Ibr|amh$vHbOR@Wnud zG*wA32M6sWQrb@5CpGZ7rVzIeF)jpd%kAXEs+KlJ%$4gD4OL=lDy@hBt^xU@r1njl zEe%v#FBY_pe{gUBj1lhfYM40Q%&iA$|L9SIhDn4S}?&cgF9j zeSsPa?jUt?uycBtr^joU6f)XQe0|p27i1##uWVlXE_k2P=!du6iRV*&FJ_tsDCz=^ zMJoAyUV3!TV$UM8GtQAzH8z8R_T%<_R_5hz`1qH3fs0W{w9koy!sWQBmk7o{f-OEH z2&xv_ux{c;6bp(*+QjVeYHkzeDPA8DV~LGI8nSXs&YYU<#4d1VbrdL;50e|$=Sue=(hT9ws%{f3P{ zNa;z*Qpe92K=xRKtIHF7<{Hi`+9S5A%Q7oQaGM|oTfFR*e?5A;}W zwT-VRH!JHX91f4ezv>%Icb&}9?UP#?0_z~K51L7L6@F|OmX`F^J1$U{{$c(=_iQwO zYs+GV|47}&OgF3MQCnE?QB=}H-gklG>X5N7~)*RcCR#Y-lPyt_t(rbjvKfCrm=h{UomcCL*gy)p}G9GW?-(nuGIP^~E_6a$U z^=_-zhb}YlQ;@q&JCb8`O~3Nyd763S(E_;5oM_E)#ZZ;#=j5HV2}KRY2zF){O=D7R z5>In)7m}|I#nsGR0c|sCw=SovkXj$SsytuT2$u--8Nuo4s@_K1>Pbm#nCzDi09+Y- z1WZ$yUvtJ<)cIWq=)iGk?H0Am=mp)St*QX6_Dpnb95`E{S_>`_Wt(a|wIR+Rvwwhb z6UQe)?`)~n$tBK!oZtD<>IjG#%d09K!I%+JyRK#A);(C4Xb|XSdt)X)w%;_zT|Wkm z?YJQ=fh83)%%Ex#HEPO`)PW*<^0U^ndK=Z@Q}?yyRn^M_w&c@qxt7r@NiMpWu^#Pl zreA)##prxUBms?-x~4x?17XB0Ck|@_sV?pH^;qC^6<;`V2EC#Xyi>FmW!_hIemY?} zf22n0c-JXgu+ECq;-JwYi76>QNqgLqOfscMkV7Yql|8^iZ)Bl%3W5}tB8q*qUqaK? zG2HQOkw6>o!MXDOgro#N+qQz1l#Y$g63Wi!FoTa3K{Jhvbi;{S#u>eJ{!^LGqh2BE zu!G`v(74MdtO*6ODHtXb1C3sux8ypnO9CLLba(%5&LB>ofRI`qO5DXX*Vb&Uh-&=% z_bth!5c&y$4iPIrCOA4ZK$Jb7Y$Dh~QrjP^uBf=~`5vW}d?PKbvQ-*5B}2=bhlQWx zEH}4HXe13HM%26COP_kMn#^C3P)EB@>U1&KZIrdI|AXNsZ>X9JErqX0VqZKeJXHS? zdhguBJh_g^`lJeG=9os(qgz7w7+un6W?!*L+}a)YD}bI z*hBk=dtMxi6Vwf67QpFLm$B|RNo=Ge^U3k2ogE3UPSWEdZl4-y1+}O{nxWj&u&4W) znv**w7nZLSbveQSSGPa^j6KExh%5|TY8<#^JpW~=5r?7-ot(lQ`d81HQ1cjdE<=NY zlc!w?RW_AiMOJaAY@F*;R2dYp%VRjhOB?##{sR zoUDB-r)Yx9xrxJVE{8vj^a(Voz+Lb80}g?djm(~ft~&eo+;Mmozm6|H(p@exQbUpV z8UOtv1pL^VuvFthjhnDhpEsT>|5%e6H~A_nQoRs=gn|~vu~-QEn&r^)v@4#`rpwJR z8IInohH&NJ4sGJv#ZHis z_XBtDD43Xxo&11uJuy;IwElF2ex-z>#UJ5L?e+@SPqV$Ab%CaNpW?pVTmo&%Jg{JM zsh}kXvIGLYAIhE1D2|;To`A39+j4dSJ38o&8H`gq!I&(~wbi;*#i z|2Vzcn_N5pG`YTWmKge!IP67e5Ur^SF$k#`HUTj{+{1-4Nc?rE9_Q>?#!d+Zx#tHE zv^02Vbao;h78@r$MtmL_i~TGv5NWp|6M@7e(9UP(GvXiy6xfuIBBeJN>=nc^JQc| zeobX1EtM5#2h_8zQVX#}t8Pphyt;lDd!vh;z)?@mq@h-v`)nS| zi$oM##I&F*Z~3#(;a+_b4drr4ZFJ?|ro6cpcX9HSisinq3QtDnv*0E|d=Ca4S6viEt-{T%kSVzlqFbPL7j}BL|EHRYAM1(Mo#Nr$dr)s= z>>Fs*DuYLFsqE=KoL{6md<3SC7gyg|4?SiLI6i~-D^qg&kN5`T{gO^1Zd#&|?rTMB zmH9F9Nb@5g#K9bxxPN$fn#8E`c`8P_OjCD-E+Q#0y{PqWnr;;@>>HnysP;>>cPDTY zJGu|2|IV2mx+FDLMPuy((5b?1p@AQp{XUJcU~%H$P;y5O{$RA%F@1e=qSIi8zJgWt z-Bv6dw)q-lpBJB4W7i_3)h8HeT$N!?`K*2P;vSy4m~ZK~(#~bNH$V(x*4<;Ce!07T zpd}S5x)Z>jClgZ1PFyNE60Gh_l%!gUFyJCo0fR3 z^*IcBHWwk>1mtpOr)OTn6AI(@ha<|z>!Oe43V|35WW7{uYj)w31zZfev1L=Xi$~TT zO6zz0N$j{hAP0#lh6f|2lsL+;MmemGxicT`>N}wm0f6{{@jS_O*F8xrv`EkUILlIR zBJ7CKT>oSbUXx+d={SsVZB^$}n~C~$+&`76gH?${D}d&_EK|IUwm~yQ^OhEF_Fa>m zucEGcEOG8_ShkgNX)emeSWU&|s6v`)p7S_&T$#7#*t4rHDAv5rc(xsDTRl?m7tL(A zgv(xW)X>~pS^LG960gCW>0vmg-EL~1rO}K;0QSty^L8vMDA+|DKPHIRH!wN3b|!Ap zsY8P5egHW&Nh$}Cf^VG6u3Z^$IX~Mb*}xYzHCzkyPWB%f{ma`lQc5pyr&r`&^=C03E~P8?VkaK1(a|mIxCkF^Q>W4gI0J8;R-x z&-ZOz$v=cP(1R{pfY6Zpl&%So*;M(|YMORazo7g@afmb3&-mi2xyBi$rl$263aUPN z)xB?6vr49#zb2s`?fCXd(rxA)wGi~7z8i#{N$gjs+3PXC!3i@FyYHh6H@iS>S|55S z%#E$COSPl9o3;@4?Js~?xvm}UJ{Ct|=$e^2F1#MxZYLN4yD9Dhg<~iS(qx~?YFVRQ zMJbmu<(iX8La!&>50C1HddaDLK7(=m&EpySRh@^@jn|xkJV&HQ@G!WcIABZNO%Y^w znX5g+I1o%#8qZCM+<+Hza1qy%KPL&@SQVQ28*+TOW1?%WiH6&j;?j^meV5!2`FsnT zNh1Yr^3j~kGBZ1MUaY7V&~<(_%(V&pm_iv&&;|jl$vy4y#9`XIl7T>TkGU<16#SF- z8(-ROR$?zGYoO`*^JeT#i7hFClQkMUHIOIgQr-sVGLf+6WSaPi1i$^C<&$ z(eUou7;>^8UekTh@M0fb#l8g_h%a-xOMybs7uOb|Va*T59|U4DO^Vf%Ww-|o+ih`H z(1*yz`!D7MSF9n&P++sAo(?ULjAGPb54t>(D(OmRGs|mwig@D6-dX$Ep{5<~ZN+>( z3yk<9DkEs5MCpH7;!iMepofchGxmHp!boN%ks|N1T}nq(5X}y=+Qwb3_ZtG3F$JK* zFK6jU$HU^znti2`WZB>d1No6i)rg1p`t+J6BC@mXSyeDWnl=vw?QoVkFKrsY&mMm| z{gyh|zUaBfJ2Pu)bmLCi?%apo^@4xPzTY(F;%G^N&QQ-+QL{Y6$$s}vQ%l5f4%%|- zLgUeO5*yG9vxUR=2n}<3P}N-v13tXDt>U8yA1J!1%yKS&7(;~`!G(k&&N|@yXW;xf?v~2}(YN$<7Gy8^i6)`x}9ftr% zEk(C=h<3J{P1r-qNaBF{&T4d#^uuQ5!8A|u(^rW;2>vaa1umV!JRPtRKR6Y&S7NA? z9B}{5#pyY$;Tj71xqc(sjYiHNjODilz6(wxRKY))$*3SeD1uG!Si?Ee_X3~dymU!l zL*uM#N6w!?+#W|5itjd_xwMB_);39pG~HQ1TTFk! z7@AG7%RMkg#F?T8T5@3~I_k;EPn6tSt@H_c>ruV;U%cuhUMDT4;QgM<_q7C8M%KhU z;8AW@HolN{>jt=gWAfs?d3CzZbN6>hM&W0|j-wpN0as6}je33BiSLGVUp~?b761pk z_XCYs&9jB5c?;VymIO(NJ!gmZrxFVH-^g(4m{Ge$yoO(?>L;$U8<20VwxkdgSaWRv zO&%5*Xc~JB4mRF{qNgFjg_%%*K>JA@WA_=6V({AgAqrN=1@1dAW2eC)F<})&>jA45 zjH&H+o7aT4fZKShyothQNBQlpal>^}4RH#Q;YyN=2|CTr>061(X1Jh&&r`}0@u+al z+`!9WgVEw;YhsFL^DQGD20q?(7d7L+-Xd@QVxqhq%!piWNPR#zVbRCEAriJp9mpEk z@OiOd6BjokB{!ES2#S~Ove-GhFPP?5MHcQs8G`1o1TNfS05L@r)2x#zL2Vm*1}8*u3#)kna9 zOS^^S9OA@)-_a^&8^w5<%H9V%esKO!M^?U+?K}Z%KaDREVoykD?oKJ(#oLYRtD;Z{ z^}_X7!<>=T&353VW049l+ks-zE@a1!-$7jocsnc^s1xX)y0Te5zbotQpp>b+2D=dh zUGss&x_PRl}&xw-kVWrZBRN*3!&;1ahf~zf)`4rsNdT=K|#@b~$y;q8{D#oYF zbfG?u+@jq1E3Rm~8dP>GQ8AQsrX{+%?SY9py!4~lap;e%7~`A1F=RyAJ+h#TT6i-H z97Uve6?;LOv+GJ-za3GzqQB%89*Q9cJf=kW4>5-G|I*0jbOus9Aq_FxgOZR>z%&SMF_U($hlqRb-zjw1WPE{4mg62Cskf zN-%Qs&X~xA5)yl?VO(oQaW`*BYV{%NVC2R?&24h3v_{Z)8)ZZ*DkpB5smrvaA5i4& zQO2X9?#-6x?qaJ<;Dr!n~3SOO#5@E0W?ZY`NA1`gjYk|A^qq;)rPPPF}ND zyN2*$aF^Yeved$?^i8S|&Eec_>V}!8>G|W&198$`minEveA)vc1^46O@a6~i3@2O8 zy+;y299PdQOShs^ThC_hml9P|C980LqiGf1jCy-Wfl5X8BR7ebcX?Ob4ILowO^nKD`$X& zgQ|_yHq6ZdvwH)}@Lg`sH>=+w5;!EThZO$>9H^OR+? zZ!YT3R#a5DwTQrjW`deqz`1dG0mhcn5cw>Y(h+C5wz}wY)aNt2Y3}wClG(IDBL>Dr zt8%F4D63mM3~F>13ev)sxbC%sD^zcGVO>othaCeey*LXmzH!M>SOEKS>C)E_|03*v zQI2o_W&m7YK{K9u)1makgx$Aa`TX4WLf}&1s6);FmG9>v2e@~{BN7-J&XSv7bI3oZ z`9G2&KX>yBB>n!2|G$KGM_e)0K)M54cNn8Nbr1JOwa4@-&^bn?75zJE z^-tZe*ao^cKds3GWs4afEH^BPfJe)UH7HMk1u6LGNrvVI7dv*%yEPm|w2m$wLqkLE z{2jSA!(;IDCB@e|ws8lO@BD07l4P=J7gkbT)`}ydW$i(3x0#`*shHSUshd_-kO8^f zOE<^Wg8OetCWCfqjcZUrPBF$HHjRlhPv&Uas_|MNgq#{^Q{0s?ZP%W6W&rD{ajf!l z9~9MRT5Ag9aM*g%Wl+q&AT@m5rUtjMvF^MLmZM)^<#@n@h?p-;F)qA{pBYU@5();M z-b*Q<5B&P{>C-c39$mfgrB7C|$C?p<5kTUGkz?a(PMvRu?WccFDpn&In~LjTldhR`Q?+%=acO zt>ae{_#H#8#UpUM>4=^=eUlq0-@y_vQ@rM>VpCTxeKzT})D_N_GJv4s19pAjIm=gd zFi%n$Jb*cs#1V8|e88JT4Ftovw#o2|pU}!*v8!_bBiDZl?EiX4YbWqIudWaN*Av}k zT;>}AQCuYZ!T)-~Kh{2K69{L|W=(M<(BH1MM+Rts6zt#r2WL|C%|YU6AK)K%UYh?> zM)1vN-#+0V@}kuS7_XH_ZMJbFQQwYh#}SZ#*d&YK$O?QroG5FsBj(Xczy4z||5(Yt z3E-2(YGa>gMc)qN8({Lczy9W#r(`$F(C2 z>_}U@4rixn-;V3mDj)Kz&*LhY*fgMr0 zxp9eP#<8yaRLgHS;2&H4Q!W3oB;TsYil1uvLwo&GE&pN2zqL$1z2%RW=cl*)i?R7u zbb!_V=`H^qXe};h_`cFt5vulqfmC3w56CUg% z6(l9TVIzOoX?NNuT|8$^N_S9R`9o0fMHbuRKGM_g@d@vZLCDo6fDcaJ)moF!Uf_ov zBRqs3&czM#3HHXx!^!vfjGaH$I~P2>vxa6oaHV6{kAc~jhpbxfqP`+j#8Ey;_FfOK zP80p^pNp;I9Celn5DWVqayhxf*JItbsJCz)*VE5V+|i2W$|Wl8PaPtj_CEI>d%6sp z&k`2Kt1M1=0K>Hl10z~madsR`JKCgNpAO7CT-5Nz&+vDbep7ED;eq7P;$f(& zW}B+~)G1k*ro}Uu zl7`22+EA+7-RLci*0Oywj~OYKusH`zot#*g7dAq50!>X}+8X`5iWbLgY;25>ZDreQ z&QL{W1fA`yWxd5zi{2E&hvcV-A)%9toByBY2c*};zynT$|DIAf-rOU+D4m^<3F_ z6048;xWbD!SBg!&x%eer^+Wg&@cYBNRe*I&uzVk;WEUW7XabljJ9rPmKod$dQr*pw zLE&*SvM1Pn#i8AIjnr^P# z#u_2mV&-!4hN(QhaqQm1v;d$1n@Ny?RxYUKAa zo6xfZ5_qtG_}LLUAbtnR+T7Vox3#^cE-Q1dr2)Eg@tly`RiCJRreQJXAZ8GiL6##_ zaGFYrQs)K7%opuly-x{AkC-&>VEv}=iehvSJE7IB`SYYr&?(BNC>Eu_Ohv(0u;tQ`9*k0U^9%C{q#WA&B1W~1%X3ZUI$=j&V8SE-=4YxUY-{NoSyz!uKsd5hn^ z9m_H=Kt&Ub|S+4+!0Ud?HHapt);rb+p&-PW%d}_BY@8-eBNEv^hm|jT9VaRQ zfi+Vdiqbcd=Bd!DmCr)mg3-?x4#l8Z*)pkl`{ato!Vv{ovG#;F4Z*967@p`p)7|m# zMV@oD8mqS;E))@7j+s$b#``K#s18tYPHuFIxW&FKOn&EJW{&e{0k~`;MJ9m$AP{j2 zU8ALqIu==VcdEr0Wd#a!a}FT8FZbTRGERiC&WJwdo(}8i{}4gC)}oB#)%Ry3wzsrjivLf3(NLE0HURMLmLJ;N<_yTjWl(`C;cdf=MOBg{TD z>i2phzHAY@qU1V6%7y%0MJxi_Umm%TStpw~Z*u(x&2+9EHhHu6o`aLA1e`foU>Bw) zuI%h+qJViHpyPPmhFs9FotBCqdoxx{>Y+DLp{A<;AAA29)pXXq0mBaJprE27O%bq+ zB282Tls;nz5u^$TQ4r}MA_NE_qJxcQ1Ej_VNS9udAP7heJ=BEWNeF?2^yi?XaQ5xeC@=SnkpettBMngzIePP@eP*Wa-9n2JVM|xnW3k6nZYIanpo~)VqY+vm5h` z$*5yAm77_f%PZRK3z!PjNV)ln%gg;;8@r6$;(xu|)%>2mTnLh*Gc5I?R!SnuI{uLT9z}4pV2|q1^06@q5VA`!H|DqBHuo#2{ z@kf0q^59jfpM6}DAal20R#uiGL$QzZHWdCjE6k+3ON%=i>gxj?PHOZxZu$dA3)R&rV56yPeO)Dr|6x3Izp94JY&=45l%yDPR5_=IE5`c>qc?7(yx_S*4y^D=G%Qz8?T1q+cBiYNL&OZ;WIrrU!l z7OaYsx)0g0s!O@yka)8VTvOppNP){qyoSk8K>cXcjOVl&n$e$54XDh>51nqhahzIp z>sKMhLU#!(CwLf?l`I$dolM=qNh7e7TXSU-LqE#A!V!Cn)^q0`-1~6M9w`i%?LW>E zi)n*rexS4yi%Bn!GSiJfA*}{-)^N<>tvlFSx8lW2n=TC#HUdJ;;(ddY@5XF6I6FBG z2=)^m=;mTC=yFEy-0d_!8ujb!GUP<4NqaguMo^EO*ColPf3C;MLx2MXDmNtk(O19m zoe$bk!e`#kY^l6wr*+(RB5jbi=1D~rIBz7!P9vh2%QVBC=~g13IMk_m`t2U6ntNIc zMD<4rsv!+T$zwNs{K-hnPo>_o4=(AW#@{bBOJZ{0Gp7^InT)z~W@oF6q$ChG<6?ti z`Q_I}XB9Iv$UzEh%-h*4&Sf6R|SC+AvR#30KFKr#>oAM zH=1B(rU(c!C63t{`h$TN`_cL)h1?-U#C8NXoGTHlv+h>%_#>*ZLrMkvH}Wu_d#t}J z|8T_{>HQj>on;lhMMI5IAF4zWjQkM*ag8GLxlBodT!M4c`}f1uS3780F^GiLC|N#v zxVJ#vZ4!5Wl-s1A_;AW|9Np&x8X7ra?d+c_!G3QCJflrGTrxE4s2bDe48t*v%GBz! z+F{{*z$FZ4N^Xo!4Uqu?046e{ismJY5jmg4 zN9gES#2FWLnr6A$#dR`S{EET#=Y{&Qnw0h-X2maA2^#$O_M(!SVg2u5gJYn9=oYnII6l?Wb{-OjzF1ocg^DgE3WY+{hy*soF2etI}4Ka;1P|c?4>5?}j)Tl2i5^;<9 z@}Xw!>siT8Ea3hf+EB!b)Y;zLoj3H}OwBNz(@Zm@tpO~9%GFoQ=;aGuazEb- z0H8X3WWnb~PwwL}bIg_FU;#>x6&AeJ?{^}l{N#_^N5#K7YjNGkayxEgS@OfBjDA44 zFDanKxN3Sfz?5U&pXcc5tlu)=lgJ6X4%p#%MJyZZW5tP~$ru zClLklzQ9pfbL8li)lyQ|0_ivMZ#0=?YDC{#wnkLIbVk5^*tQ~1w5I2=cItgLn5Lr+ zeBUK^6QS-><3q5vvDUPBoVdeuCr-xI%+91e)@T+sHxO90t95%Our*b*jpA=)=7wV~ z99y1v^U%@_C2Kf`cAGY}5_fc!-azP)54ChC_3k*uH$5Uk@giGd zhA&uJifJ)NHt2=>TJ_w^?FGOTs+r`0^<_CFP(Fb1O;ohv7^-%Y&ciGn&w;+h6*Uq*K zPsMqUR?JV=mpP^$pO%mS1GAQ$VT~D@+7C#yDpn^X6Iby9psq=>M|wGNo(5nIFKWTb zuad4|MSe-}V-y$7%e&uy-%YagwB&nT=rw>Uc5eC96s(E{kzozuuJ?-KqZe&_>dcuC zn=W{B`440qf=re>+Luv8Fb-m9_bdazDs#`^<00u=uPP+C3|wyixMi{FeEqNQ?UBAZ zD9=Q6vGdgGDoZ@|bX1kE`8&)GSJF;TJ{jcoz6*;<_P2J_o_B#{RuqSEBV@nEGn4Rd-udjB0aVg-B>X6M_X#7K_{3r-OMIL1%`e&CtCG!S7|A1pfqTEtNAU?p=y4acgc^~BX_tl(_V z@g|$X<&20ta1!ZP;}66kh}){bkc~5elUs8QuD@hcq0kQi8S%LXXHg*5qFVHBcbjYR z25_=X{2gOG7?@sBrO0Mb z#*Qb_Ig9mN@mgCW;Ty=+sH)YA+m;s_Zs1F{8_uHIghDFj9N5%*Szu|J?J7 z0OV3Zwhx&5$>ouMGZB3~`_du)XPB8w!6uK?rMqex8 zvETx?x)32493>Zeh&S|ME>>0P)HT={tSVf%b+P?P+pQniy4KEs7v?$>Z_+c~1S{?a zrQUOskR5M(Tc3L!pZCf-wp{QP*aYaV@W+s8Rx2vgm=NRvlM0Mk9BQd8n-NM6aKomC zCnJ9qQ@Y`^Vf&Gt0tq5bN>sm(zj=V_@E~76c%jJ~F1D3~AoWr;Q3M*BNedQ$u!&2P z3Yp;`33~O1LC}3uyp4{jk%E=1lwT43GHmy<1=blzssmAEBN&&oy*6boYtuP|GE?rVR!}6m{d%>dREMYh zCACL5fF$J_HEqE@*Cn5SNrP~vlHie`V<3E~nHOJ-rH>_?iRdv(6Z6ymfoka<+cUCR zT9jbWg*tfc>FSA3_A>qyD7tA=*AZJ$r%y9|4TyWikxL&XYw|J0d->BarlA@^S=ffu zClEjKG2dHo4(p_E;$rn0Ls7aBvPjj9UD;1AUmaf6=?ar^6=;-sD+wPN@d4q|sY18J zniRvtIV^&x=sQXmv5pf@Gs}3;pLO6BjOO-O#u(zmG55`1sO~g9iXaD#FUPV)o>Oe! zprxCdYx~iHLJ zz#IA4EFBS0oo=ID*0Ims=0)d`Otp^R$hN~-n#}B_s(h8sw21_n7znjGcd_aR?;q^fN3A-8@*?r>jTZ(MSCjXQJ6@JPI}QLa^Io zp`k`~bg(fyo|$-Y?_t%8r4B2P`A~=3{GQ3P@e%OUzWynU7y7`@S0l+}s_gH;o%D-FD>a8L1wV`hpxg zT|JO$Q5M)JuF3&`bkb-tBAD4uwpit zr{-S<`T#@^`&@P_rp39E(E$8RMlUl!DZ6+7w3>Ir{Q$NFjkbH%tErFfTSYajBrcx< zNzZ7K->rB3<=VMV`JGkEspx@S=DSw_bhU8+Ad*V3_@?zYPXz+;j&V;*87O@Lv-f9E zLETzlBq&ELY-qIl?z(-k?sdz>dBWEKMbez=I>A)5NYeRTw02`ph5J6Ayu!~r=ZKyw zgBaq=4F<#aY#qPe*!6%x_n6}I?;bq={Tt_L1N~g<;I<<5{Pytz3jqI-JIwa~2j(Px zP)=ugYfN}$!26ptkpm2%)dCge)qnpkUzYltUwp|h{r8&R?%n?`-+#OL9pPF2O8fs0 zp$(iWKvrz{s;uAt@K(V9#C(>{PB!CB@sGn~ry$g?jM^`PcuI4bz>)&0X4U07f62n@ zZ@oQY%VDKH8-%}bUVf4JzkQ<@)9YNi%Z?Se_FMG5dk1@5@x$-JFmP*aE5Woh2lzRC zt=@vsmo#e>OmeO$3%81gloeIxyQ0&lo4*9=iK$eF&Gu5_lOMhYxIR2Jo$>Yy;o8n- zKc4(<%&S}tW~}UT@w*iG2hLn{My;<6gK_#wf$fTriWu^7#GOwAJ z%GVai)kl_*bd}Y#e_bUd`qMf~l?~@AH{_P9-)x(^Nozi$r?_#oMzc$Q^ZH%;Jg95c z)}Np0iWIL8meb9VGtbE<>84O+8tLaJtxY0Qbxaa1h#8D{gA#js6BJE?p4TWIq$3Oe zVoCyQ<(k{Op5N=2m65dtNaZ&1DgDYp=;ueiY`nIWKWMRA->>-H%a^;jn<6=NP3?|t zrxr_IxA;~$+)UN~+jslleYz=f#^j`tS4-ZyQfO567djhJjX*(veK1F$wY4wK%uf=P z7J44bLwdd9p>rkc1uKYNi;FU)P|xfyBf&&n0|ou`3GZ7Cm(DBq;C9q<*5Xea8bQ7< zrC($WczQfOfs~b!GD#_l|N5KPQU*(#Ou+^H%(l}LzyzZF2$c4fZs%} zNBv(r-fop21cw**){h@q;WmDKjLo7}z;U%KcBuWY<^7lc*Bf)Vsb3ZT}$Ce||nt zw|0X^TwJ`RrDYp9X1QQu;(K-&4D7DQW`PmsjMyhxNP<~3#P*%YQ5e-FFFzmBOt_3C zWm(zV+vgQRkuaK`_LD?U zc+<#`JaX}mN=h9XG1d(S`p0i#cuPV0_k`Uj-9CSALoy{TEzPFx=|D-}7cPKjnf4?b zwv~(9ByCr}JO8J}-md}-<&9F?YTXsZGTIm(tR_a<8a^A!S}G-$DrJ^>+hJUJRp&kw zCIru_;hSRpxyNbM4`qeNca15)7u7uG=33rnq&yJd&cSS{>DyL&J(YBJbPPSMMLQAK zRMFFxtQQ*2nV{LdAAbD6O(S=(W5^$jh*(mH zesVIZsvnvjzD+SnC`MqZm^lk4=S!j0F2~||5gdDoraR+~2)`)3!MoJ+aioooN0tT;CZ+3jIRJ%^1~%=NL7 z{p2QJ7_TkMG)aY47p+Weihd3p&zXbq#R_bKn!&UCj2)RAn0u3~TVY;7wGjcH z!W<01sg%uGNOL~T!9U4K#{Za6{BeMc(`**&L& znN^6@lFG!U#<;Q zybQpy_bN5#uto0Fxb!Lv=dSbJo{qN#lEkA%N{jBAbbnJ5l+x7n)KFM&X1MI($`qsN zSA*w_%5ulGUHpBW<5c@Mhw8~6PpEWN$qG%&vIuCQq^8{y$xTbk2)&1x&=8r$WEPCQ za=qI#K()*acg{q=s&TBPI8fD-rYLHJ9b_Sl5RZ~~O32UprgMdJ#I4OpwZ>jA<%S>dzp#IU@qb{bS9Og_@Q;kZJ??Azs zh=H~nK;&nR;r+7Pc6=tV8V30y%>y$BzToul!@Y6`zH_yz7)od6K~j?yEa&>t<6vvI zwrTh3l(vl*4khm9=gAU($5t|fYzY>T|JVz}Q8&)bVWtJ0fzn7gCX$C#@;ud77N8eC z995D{zvM+rP0wL$$ z&X#3G9=iCk5+&JB*1ABSSF&h)Y?_H`S8N}qA0dFayq}w z(|3GUWu#J{<~(i*tM`(r{zS01^G!-gMO;vSra(3)<7>amJtzKyw@ zWy!nib@%;=UByxs79~8h&Zb%WsnMMfe4aetFO(w%oD znA1KIry9K$A1kHTr7`&CG9tz^26p(2aP5b~lv$ zhdXcuQ1xF(aRbPu~7^eYK25Ragp_tZyHqw> zLdW#%8{@Y0SJp}2LeOvf(z9{c{B17C*DXZDn&KN(twm0w^ZpLLLhOxM9|)ZOs9`Z~ z-Y#zpN~=&J)Fa#&8E>yP{IO*#n-ixB2(Auzon@cP$O`U>i75+zT?2y6^=-AwUi6?0 zkF}n-km(8$_0ysv;>;<_Y`l#2C&*Y}-J5F`>b%{>ekIfuAG!%H_2xb9$9@J7>{deQS!U zcd8)96PLis>&-dH%5z*4nYKAo6E3MG#1z=kgf-7))bTgznc#sL-(I61_Ylq$pso7= zY4#C>hO{3g(1^XZZo(soL!NrHxA__JcppzFr_BqK`M?VY*(xMtbXPr=QaF60_g<6T`h%l+>fE6*mM6Zi+jp}XLG(R>FQPa3 zT=Y+AS;h0W6SA!H)eYBa$p;mP9NB(HJjfX`brksU-6k#E$#D2VSoT0t*=_c-3BE$4 zqsv44oKzB$U7_+SKi~CZu9J&X9c0591>S|lwnvKyY2EGidZwco407svtz44VpJ}r@Tcs{7c{fBT35lE-@yGU##3 zni1E?QG_<7pXq41SK0^MGns}w_RMUT{x9ReGWvc^)O=0t;cy8RWwrBU~Mqbph8QM`)-rR_h zLN$OMo@Xc)@WqJitK{1O*yv-!t(>0Y+bP%p)^Ro!qQiSWZo;p{zG)`fe86f5^^6#r zy{s(Szm=CJuK?E{T)(C#_ZBqO8V`#;25Wk=!8`dfw|zm;)dGl!U+^C8=J?1N2T6?<$5^=45jJ#EitO$N5-O$;q{M zjR!fw5V|)&aF2qRga-u$mV4H6cuSXI&86Pc5v=zKS{Hf}F+R;bohG{w_&)Qkb{1ow z60%#*T%P03Y6k9emHGFaRbcJD=If01wMGewhyYW1G4VG0sq1Mzl$ohXHF?izzjGSV zjR}f{HJW0h@{eSG!%!JvNBghuv-Wq?6@I4qRNtZY)mo3L`ICE8iZ94KLitWN4T&0+ ztFbS+_-d%xr>`d2Dm57gvKiB+Rf=NP4|46X)d20D8a;U@cv}>ctN|;vW}Klsmz}dF z7Pc*cjPJo+Amt@B;;JP5?_j&!H_*5rRh&&`g}KO^c#C*z=|7Qsa+an;s!fMipEJQ@ z6(iUdsSg8yoBgnr;CH}KXdZz5LwlK6U}hBP#o}5XGE~WQLW3er_{Y6fM*&GJ{>PGwRvBR^_O&hw#S@c}W zD)z0=oI87tHD&bTA1a3GnKvWMG|^%>tF6HzR-lEf>Av7yt?P4Vmi>rBolLjcHQJmN z4R5#u51{+7Cxl_DNpj9I-?9wUhqALTO{({9ySGWQbYgE?{ra|K8sKq9v+oVJrzo=!wLOIrRTKH-$s;MJ$Y<3skG*8f0+Qpdeh-jDK+RWb4K({E(xpVQk055a+S zqK{d~3T7f5yv-AD-j&ZZG~au;wf{BK&pj6J-QR1W;2ucqDA$GWi!GdKxOdUYN<7W< zfY`!yqad1bE&33D7$#w{#cTjh;2eJ(@S_Eui!Qb8c$m0asWv=xlbau)4@kTe`cW1zaqINA!gVq!M`l+K!g2GMfv_VbJmv z!Kt)N(Vi3gu209r#5|8ei5_$(&OBFfHTshF*#px3Wys#z-{5>*$|I7?}I!vwv-+>~wCl`}G2&Fz*VL43}*HM?VZ*1-=vPtU%%gb7cX(~M3q^jsl>l6Ev7 z*x?U-$8vvEV#LHuozeRJY~=+DSoeCaM9h~%z<+Vhc0a!xgk@D_+e+~&4fVR2i&4fK zC5$aYzr@^IFMx1wH{Qf^WfVIvuCCoAp}rkPlic3El!^-R^dVf^D4!oKf$k%KSSf-0cLSa(Wfe3fseRqo-=OmmYy zBI-%g*;z^7rT6%IF5evY9sFe()l7sc$^Sd5(N0TTHoyYs1&I637|FHU%{EV-QI&;FJM;;gD%5*h_ZbNsbvDj z>(R~O-<}oMK|qlXi}Z5a9~SW+S3}421Q7I8 zFo_4XdiwbK(&RuOs5j2lOxxH>UH6_jFsk$Q@7U{}4MPtL;hDwJ-rvaWKQ85^80}P| zX1m>NjEVWlB@R|MaH+l8Fn|ZpC$@CAY!RQGy1^c=4E&ff)purKF-XYJz|N zRV+h7!TTnFYbVadySQYkA2!?KBf0JLN+!weLw(xMA72ak=)Yu~mV~|X5tkj^V_%~^WKUaQ#-J2Io zuw)6eeDB6O(F_Cj{SBs4aK3Z#%JQmeYOgc$mCnbjN8ihIa&mf=qZ5*%e^BjzsQQCPiG6zXF&4n@&G3 z?@%j#GF_wvR){QU~*-|O^W zz;>e2RGD+fNf@>oqVu(mKMh^4U;VAG69rRhnFdvPD=@E{MGbbE_~=J;@z(=Ak&rIZ ze71M(r~;T4MDpAZcl_oUSewpg96@Rhjr;fa)&?h@d=XtnT^jPz<($VzR=)Z=$k9$* z7r)S8n>}ss+6i9OESTl=x68UCP&&hP)?TXVX2WkQxkF)jAPVL;V^MU~F?_bA&u1Z9 z>eXgHQb4@%T21-MTv!o`>GzU-@m_yTTiU^KB61n@$9j%6PNREOzsh^y*NARg&>6CW?>L?-us^I9E_XeOBs41@lem=)ONs4ESbW{xAZfh(JLX zg`n%qC0)_4Y7ZW1^?KtCH=7TABhM>@?gy8LnGWwImHh4PzN7Fv5555MeM^1Qzi--K zE?w>eO2)&Z%BKJCzq|z=cJ=(x-{+_Nu`J(v&QEw@crOq!>-o%YRO#P0^3yL@^Q|ir z_&B`ttGKT8Lr4@@AD`ON11tT(*VoywA3W^N@H>B5w|{@&|2FfV5$FGLGeK5BMn)EP z?$v7)s-_^6!h>@4>y3AJ4Ef8X{%55c!78M7XXN!8U7y~<7e3k8#|P;{cwH~L@wD~Lek zo>{Hn$nszq4=9M$$OMNhKZV*iEp*xMx$*RB8+_6g$A0eh%{5Pf5DdN$YV~sCA1r;x+@I!H`9_khrF|e7~2C>@R(KjJa%yV+T`O(3EWgBEqs$0REAKLm{ z({^kvPBmcUz78o`C)FD%=cfRVUUakl=6oI0ea`VsO)#cbKqqeS6HkgEy`kIlz+0Py z)EE^d5~Ni z-4caFlmlQpuS2r+Lft4mpE{Ee@-0~UKl!d}JSl#@0Jt8B(-dk94Yl>|H$)rsx2Kpl z!><{eJZO714?q01<_JWk17eJk((!96a9tno^yiK@gi_^3`uo}iGvwu4@Oa^Paq*|W zCcnx#toXL+4i`uvC?+4ujQ#nG&D1^y%x~1NmEyH;#PFMC`d0PI*R6l^aIDR~;r`d$ z-e+_0?78;I2cb3B|KWFkX!Mu6e*GWq1E3-4mv3+K^{elF2z(+47{P0MZ4CZyyS}@n z;C|cwyWd}S>c92;M``;{UjAlj{*#x#S(MMl?f)zC@>Zty!nVI2A{cn{%(}X^0GI-j zd3Gw^tM?r=LvVnc|t<8opn9)lvTpd z+57DRxvt5e@C73yGZCeHFFW;v*xjs3BKwU6O1am~o{%idD`M=L9GBf!E?<0&-};+*g|r^qr>g>g9)MPUx5sv%b#3bQ^9e-@)(ii0eejy)Yk4>b zcacY3-)ptIe1^y5xYHkLuRkyNm#6x=SqFZ(Jl@pb;!B-*0ehQ~@xV@3M5GtNOc}SK zO!p4e$wpQk7tq{n5)n~li)2>dY_;3gJk`gK)uc^U0q?Kay-tNu7@i(P9Sc z3&v`&DhZOfOQ@V8*DtGna669)NIi&!1}uKA%lvxxb?1HxEGQ^&IO^r}q@nZ3`VH2X z84c0k99v^)Yu@J*$8Y@j!k+7_iI#w{XX8XIP8(MOWPI;Puv+&952*yOqbO8`vLzjL z1{iEQ9ScG1QB_qP;?IvbJzfzkCkx^*s4d_ai4{t`Xa#oA@8mJlH5OcB9M_{^jd}=y$qaB!Uti`vIDaj&p|}39_du*xmJh2$3HRYC!MC6Y&hF`` zT6~`g>RpXMsfMCEzDK#3!;RiEsB&>U+l>~VtnvX=mV8JzSG?;rS_}niWbK(WV!y$QI@cN zC9*;QIoXyn?fwDO!UuyRUabjF{*APme#pi6n@F%)4;|vo^Esff(7LsGAH~z-?Dg}X z70z}ih}?htc;I`g@kfYS{&C$KnbAr6qI&$<9X|TkqNY?X(OT3=&4aI7Iy=43Mm?Xw zR_z@;7X3+kLUMp=?_WLr7vuFmy7YMg0v~U2aB>RM%W{?WE?~r%9CGe#7@}&+N^eFv z(-J_vR8rT>Y$2^W#VDCF3pfQXJ~jy@p>E#1Inq%{=+0FDXVO0bR+_M?-~-`8vXQ4v zyw8*N24z8K{nQK*K(S;%ML?v=u^S^7UHs|!6Ag^g!MjSJ60QQDT-{<@1E>nD=o|)v zaYm>c)EXXepk3=6Yks+BnaW8e6LSD#N;>7}#=A+P4ys_4vtQUACzcL@!C-GF&})>V z0j#TXbz?BsYZ_g9x0TVyEIlU92%m6w4L;_1&Cb(YJXrWZk%P$bMa{OZ_TlIW2h#l! zql-!UNMU{jO!_FE^kbFMvK}7E%-eC)=cqTaPaL#qe1vDB{p>(#TR=cM1`%UvVS`OzKTfE< z86Om-aDT6^aCJ^%FjK86;FHE0bb<)h4$j=LqRlBE*#chi1Sm1mG>V(UEF~hh84s{i zfNUpgQ4*KikjQ;`^8^mHt!fr@PYlx#G?n09$GvNlxyq&1e6MKMhCWOwO~%~XU38TK zQiwjBLGh)OlFF2vDSOBdFiaQq(kr&v!K?3Ws=@lR9uIkY>=m=7(cvsx$uKoiQL)d_ zj5pb=79`8=rnh(F=xHt1dmkJdy6E7^ScqQIM=aTcZmDPzceFuzEuMEc3XE@ERM2{S zk5vk_FfrLi>+`atS&5{ps1$y9jbs~^&7q=#hh>j2`hax-<#Zu+4=D=k{pWb`Vub{6 zqnEXhP+W$)rnrLe?TK+eM^Nm`rE}TAHb|9Bh?o}FQ&QFq3fWfYNsdoOh8O0DtZF^% zS-r3X<&NP%S@f0q&RMb)fuBevyc+5-%hOYBA<`DdX-yRYz+0xu7}< zv^0I>Jy4V!G^~%H(U)e%F~Yz;2U%5Ny>M9%Bw-`R55XQO1PbcseLf1+xinCLnZtcsMO615`7R~LKmW)F8NNnWF3Bn!>(d+AH|oGzHHdI#H1Q8MqC zdoKs05yJ`0J6zK3cQDmLjkGwR=}uIf0H+ecdV2I} z5J&#A(cQiN?VRRgVp8!xSfMY@=(GFZzb7yyRQ?~{ddi-C9U4O1X2ze7JGXjX;Q0_*{%EvO7{X>X6a2by7e zu_HA`N;Cu=!PYT0u@bH7VN>y4bW<~vIYHL>UuaLI^lMCHv*f~F(&`vqxT*v>pM*$P z_nD7bk8d{y0m`pZ1<=zJ5uO4QpHh7|HasDf)Y~) z)fprN8%qZ?&6swMc(F5%;k7HfbP zA9b&acdNJlc+x5_zDSWs;;x0pEcf81rp%oIv~r4bY@u+Bz3s8h$@OwiqGI~$W0 zT=S#FB>r^jL;yiU1npn|F~hlwr0n*;VqSFpmn->8#cz87#dXgR=P~tww>qEfvOlq& zMK>=((M0=;;Ln7TiVr;$nhu$}HX&NQ`_M<|xT zMLaVB#-CP&734tj=N}GH(QLNX)2dUZpHPr?^t!im*85cI4z5U!&m9RAOh*G;8j!36 z;8H+%XlLMRUV)RTPpmJZDeZTC#xB{-SD+WV+uM!%&W$e=_8~}goj!K{BudM~7x1tp zG(p|_sn^sO(3v{ZS!E1AbXHEz?yOCmzPq8zs_Zj+X|ra~lu9mY6X~98z~m>uihZaLWut^}r+Z4f z$otdZ7|_KF`vvvm`AaZ!74^P*7fX72&Il0&cBsce@(T*~5zB_hc7^ZkPg`h^)bLZ+ zqIG3wVu^!`g0HwF?yw|dhI!Rg2>otG>-v6ENN(!8$)}$z^|O4y_GnJfyz{-t_bY-n zK=XKxH-tgh5eRF;tw(PhaJeMf{`hqbUm82W+xw=86{+z3W`T4_VS%U*;Io2)9_!JL zib9uJzFY{rqwdV$w3kZy19z>(OGlKIM+2wROs%#BDNjC`&K+P~jv@xqx^wSwUcHYn zzpr7%Z4@sBX0MG*3ZR7#ffD|4q547>xMElWzdOXEs5j%6Kph$^wIj^k~MjuH`l-)4(E2v1#e_tj6MYSJ2VIInAt7%$Hx@xWxs91 z+QQc`U4~1#t3;f~KbJV|=Uwi}F4A2clAST^a`R>qa)Nwqa#ixtBfs)Yy4KFvb$PXY-G7OIf0RF{z&{9u1Tdtue)9C2oeogX zfB^JKvWm)!mwADWJEUv>0xffL1ImL^NmeRg?qg=>?ucP(&{k_x#TGBENLjevG>)>!E=Clvf2jeXxEr; zR;3>>Q)#}Atx+or2uO?Y}3WpejZ-{Ci5_g@jl_!{8@ zWpaj-mB#PYLGYqAw9<>bpokqe>*I`Ns%s}Gw|0R(qr5jBi8@0d z&?fgx_u4E@nfM;m6xZ$OG&<_{uD-0;(}sjz?MpE-526kN_%$02#dk*`OEkq0+k2m- zKOX_D4tB%lTV&1TFfV!meeGofk!~^(+HbU>jMR%bh@Q`PKjrLgpAiE5rnhlCZZMcZ=txSvap51OyZ$=xQ``-KaD(H?nYtApco$imax zZz5YapP{|F4$-kau}AA+1xp>e$6d|bFKz=y>glL;jMVon{JtD*Jw3gKc$MU%RU#^A zi%XLA5sTBMsYS`o!~mGSOB2tmWAWiMjwY~k{u(AG7=U~H+2w)9$*sCsqtlZ}F

      zrogpCm=O8Sy|53pn!l1VTwU4T9o^mA5Of@}4x3hQ{nJu6GT>)T&Q{4VBx|CQ+{~1i zP@G9nl@%fdNOjf(g0O08ixXmA4J&Agn&y-SPan7H&hdgBI*M$v@;NYpb{HJhDCt>h zr8~`QZ0h>#owgc-LYxLS7e4W1ncm1&!85dd{jVPs_z?H?h>H{G=h_KR$tGUk9!vf? zX3P>~+!bDd2&!K1{y{P9w!ARiGhrF+hc9FM|1(56;thT4)l}$mm zd&tF%sfY^@vnc4|Sgd;$d8<_f2A8EK`I|nk(cZ<1`3jnKlbMmw(&Bh(xk#AR3}x9@ zDxV!(R6s0>Y4F{UIOZqE8OqW$cWHwq0{!v`X_S{It8oXzhuyWv(LOU2NN837+mbv2 zO=vvM+-M#&kFQVk!(CI57L065#(n@i3I4e>xP0Cu`&ifbtLxUO<=jl(Cf;5()sp#N zL7BNc`j&x1FJZho3U;?sEcXzCTn}(HhYGK@~3K zmvsjbJ7;Vwce7<7%Dijzvw=UiE--cdq2RNJ9|-;=S=IeE^BlMBB})Wr zMJH4m#=Sqm)Q~=DYx_+V*B{A?KkON(?-!PPPOu%9(ptPIVSq1jJ*~ckW)253i4EZd z7|k_%kRD3z%!JO*>R+8r@Fl{shw4Tz0ODgNRWbxu=n^itLBBrkSnl0R7c{gyZXv*+ z14=e(Zb-JJ6L0NO9AJg5o5f`m?*onF;57bqmm7UP@equfK6LDkd9iYu1=_!RNbU?u z!JX5PO9%#>;59;Ka-qf=nn5XTN({?uO>tY6&6%L}?xX%A4sVd4K)rM{$%~vV$$k7b zllU;pDwTG-zKMXlsn4NEvVG<1$L4#+T*(+#FftgVB54w*Kmtuuq+h>exF9y?7GwDF z?Wv$q4wDGlW+WTtYxUs=tOI;K(=TSL^G~Q$r)9Z4cwG}Fq7UaDC)K49M7;e0@E*Zl zGV=5cXe4kEoFi@*OZN%OTWpq>&!Fd)I74xi634dArBDcW^f_);K}eAC1=C#sMYV@Z zoHJ%+N~7v$W6sc=b~h$oN@r;_J*Kc&Zb-Vo_yJT zKOhrAQ0xQxdi&z_?lKA7a*|fil!RW$&RS!l>V=BTGF2*yv=?1sItwqH=ujXEM{RJiUy~OhzMmK?-e%Euh(KPa~CZGrNEZRYqq% zq^M+;W@5cXdW(nZ?8wesra~2g%^vqNzNsHU&;lbD>LJ3%MUsDeU*NjjOfZe@3Vll=~`Tj+5J=$nZUM(m-<97 z5^CPWI+A4xMmI_>1a#yn5=$tNn)><*%B*R^Qb$>iKVQ9MqZ~hU*V?%(3opAeT0hNt zj^_k2{&(_(x-*w`gpbOxpw`64DHJJr{g4KWuLqYYUptn}s z+7Kh9`J3lc(={JQQK?jav|`RJ7+6I046Tn_Y9uT{_LvNi z+DHh5g zMHN7=b&YPoeVhhuesnXo)n9$>z6y=lb)KSF`|^B+0|VPiiyjOA(^~v)!VjwQNV}AQ z)a@_Ogo+O!h3e8gTaUV8Vrm}nVilA|7gxXevp{Jwe51Ju4fGBklIPE(Sr@p#a*L*? zOk^1wOOsDkE}l1Gl$uQ`SYLl6dk201y{J!+zuRvHLEUIJMcum)p8^-?`m*pFrtw>Mbu)wqzRB^65G^G z@(_$ttO)NyIU6d3%lKWf_b7k_{(O?(|D5{#z2cX@*|N;S0ih=%A80WY5aRYtN5+1j zB`4sU$60_}MS`srq5W-dY-RJTBG`Qe_R7`bkq{#)h{>+ z*E`vOw2oj4#I4sH-0~bhhSJOSLKxxOI-+n@C3Z&l`kbA|@SQD-H5xL9DI@MHXh;4k zBhOxe_*ohsacKMh!`XYsHPtR{qlyJl5fu@o+5n}hH0dBJO0&?Ui}WrvKnM|0uu`R$ zfJ!HXjt~eEkTa+aKQ4 ztPq+A0isAEL%*UmCcNr(@uc6dq0zTb<0D?!Sb6}}Px|w9p;8I%LyL-&kG9kEdvM3k z=ua`DU^k9~BP$7z-0D0iLo4B1(IO4^Z)bk~h1vc;mg|51bXgYgavvct+Fs3=cAS`| z!jyPC`J5=LF1bMSpV6G6w`-`Jv9Ao>;I+QMYmO;e+4sejSS1D~N6%UZ&EHa9b=Y{( zQWFiP#hGK2Y-uqG+r(__hvm}68gn^B4md8>e79Xs#1?#ds=;Su?W_r|t^uH)KrE_vD{=i!(Rg3|C zi8Zh%i%AvsvLJ_SZ*Q2ILv~8XGG6^OU{seC44!6b;ktpHJkda#WiIz@tlH2FO@n_F zEqvYTat@4Nsjzx{EY0ZyyAto=R3XL|8J_!8>vVuxLjA2rk~;M6WA%v@h$ztUAo+LR zY19L8CBKns`A^d1ve;gGWcPx<<-`*u#ePCO*1Sv`*Q+tX3j-YO)v z$#>sD1BXC)UzkwpyW_Gu&#pC%4ter0M87nPizV#TX3vrKpSPyB9&Fam8cfGvh^-Y9 zt5POkigBtFJl2x|%4TIQR5jn#G>r{a)!spCZ6_Bp-I51(;wZBKPIjDbwRBwJEELWC zwh~xby87Vsn5R?Jns>MC5fYtT!AHbU?fCxRoZ){K`2AhK>fF0|jAV1Hy+P}@HpRJH z^4ssF?QYd4ws#$<?YX+qd8SjPwxeCXRfQQVR&IR@sM$997X{ z=4gFoygOH~RYu#a!Dr)G@7RF95Vo}a1ylN8t(iy_M3GLTXG3W+Gmdz-Ggp^X6IS^T z+_d~%tpiAhy(n;;F-P7buSGvTy`gl=Zn*+utV@+%v~r7v7u6NXJwkH(%grE%wx~58 z4#S3i+2gxEJ2kx)b+w924Y>uo3cMP8iexh;y+!4y?r)R*;+Lgqy-}?`E-O9;PiU#* zTf1st+FnN^KMG_!8JBDmj#GMlH%9XAi6dj5N?o7IyY$G;0!)dkZgEWxHpxj>rVaP{ zX)DX?7lSd!9^DG!&ADFRKr(H?l{*r8dXiNgH{p!4eX7W!$_)@T%%=sard7?aEhPil zuhXFa!~6T(ermL8qJi%E{Qau*=&+pKmb0%;@}9VWDdo*>$(zHyeMm+RJiO`g}4yz!Y5A)LlcN7E-=gL?E0;K3slH*o)#6o$wZxnV2D_(jey zK55j3jg9P69YliFjaXAB!KFiT&Y=4KwG6>=rHSOXb0NGvD%rL-+{tK#GFm_=1k*Gr zkJi`rmKz5i+tL?GSNI;GyOFZ2KNEj9@mSV%uO~%wj`>;cttO_FEL+Cy)aT%jJ?5#B zbTUV3Zy1}xf$Wh2iu_D4R^zeyp1u2z|H%i>l_{mI@eX~3Ix-vIH4QKJN=3bvsT~=1 zhGHm4#ftI0i#ieM$kpw|d8)rdBB3+v>8#+psC&h1JrnM?vrnEl?UuNzdwbqdP08xY zISY$N7cjb;SYDngC6g`NN;ZiG8Fz zSKd6W4)f_{p89FA2jq@DvV(ICib9o3Y9>&We^~jDRmLZC>7Pdkh~%V8)AaVQVT4rh zdOiDDLe^`yD`JJ4@10nAHbNZcy*LN&KWo6MQ!$^Dvvt+X#+uTq8csVYUR zo>ys;al(l|Sqxz1LfZ}l#rTV!Jm-Vn_^kZCaA>5l)Ocbe*ICw${X=5L z(Qa2Y{VA-1Dt`Y2>~WfffWN%y@B)+_ zgYAlB{-Lwr)i$0!h`mt(yCli$B3P?433bhXH%hM+#GVU9N$VU0y(=;d#Uv*hx8XuA z^$Q?~MY#j3cCB0dS}WKRr14CKtg=;YvI|a2?{dJbiSVYI;{5mTY8M@qtqPCi<;vf} zF~309RhZ@m==zN}Y@ejC4*|+S8tqqvtvRx727`I zVRZHI@Ik+fAgTAVHk&W=9*lcmHu2||Hk$11&BS|L&GD@8{lFoOu_Ze`?QT*Ab1d|% z3-AqBZetF9YUvhS8(3$riIDcznaSq5LLuH{jI3TgKqOalIqktZbHVr=^?DIvy$Xu% zhOm_qBnrLMU<^X%Fbvu2(8OSOk?qhuEQiiL|AP;itUaML;csr;mi+osh@fI0-Rl~@ zal0FZ&JUEo?+-K3H%4r1Oq0*43TV!n`>ZnBSOSW_y z8w*67|B0^$j|GxYE=$aHS!X%7A~7jJ%y;7$kpGR|mq}1Y-}%n#To_{N!X&U>N~x1* zH%^aZ@)}#7diP>abM(7G$UjD=pnx=LE7u>D>hBpBH zptg9mDje5xq{^<=hL(l>JflRAo({GWIrcuDJ0ZKHwq603wO}EMz*%|qZ0;?kT+2=E zzvFwW1oEUcp9SCGvsHa#PJbr@fjNKV&z9ueb9GLjK*R-)X8rjBGMiJpe{QWGC zY0UZSIK!+BIkL4F$W=#<;nIjRK@Pr5sZ{j8^|*wcUCG9QXcT4IAZ7AM@4z$9!hw}y z`x+dJ)m@)Abt52!THAXnH!v{W4`n4U*b$fZ z;w183L!iy`{AW}dNZ#!Rg(hb@JFCo}Y5e2rnean~mqajK?~}C353Sw3%t3b{n)z93 z&hhxd3+F@T6=pR|v1nl49>bN%h5Tx!XRWH&7am_@wPpmN`8&nE@dWPp6c@@!VIwIB zqZ_Tb1(?k#vVh&`7rH?xmj}4y!{4`r`$QuKxTT&Bmtit!= za;$HbtUo9g$Hz+`BMC^n_7pZ3)eUIAdKh=Qqc5j&Ko*2@BZa6B?FBGJr(rN6-#LEU z59~8j)Z`^gZVvk6Ez-Il=uC6Qk92If*D!$N2)iT)C^cVvEcS{#3|rH8Z$3nSXu1+c zuSk0R_KBB9%xK>R!f*b;wY~vLj5o1Ia)b!+m zdqdd;quOt;wDI~U*5_g@3lBTRKZBcPINU@}0G+sP1TPI-1sPOJ@{8^$BA*$)=;6UN zA+@U zLL^uJnbE;y#J_4QtFJ@!-*;3tNGKk1Q<2YbU=#&wH-<&ixImoa9+} zc#pEN#S9EQc=P^kS$Al#Hy7J?b=4yTt6cRYw%)$8XQik`I@Ju1Ntmms8F9Q3q{m9y z&~s4BonM}~4>5bHdwUAYOMn+f6)$szg4jQ~9-ugM+{I|)%k`<}=suS|-?cJ}xe(D4 zU^Wth`Jv20^|QRJR%QL{P95aAI!Gnt)7{e^3g^pv>kSRMyToFi_>|gSSTL!?gZmeC zu5cjGGT|U5uj}As31c|R%R7dx+x3Ap<}|0jr_&TxNf1i4VIOBbaG(ZXkO@2MsfG(= zlo!ELM{+(PhwiMsP0%N39J7WGpX#u#oqmb^vZ|6~b-8|f^YkHWNa?ZP0GFY)`@Ma< zznoLUW8oohPSLKO{+HwhADW{YXA?r3Z!)i3F3FW0NT16V)( zHZNb_mCNu`c2>yT3-3u3r_(<_-~1B6h7pj`{iVYzoIoTBjCFLgJcv zEf1KtQ#=aLq%%^II;93|*P3k2rVq4nypHEWmf2G~kJGhMr7tNI-Yw>XUH<-qE6cw= zgS0XG`rv@po7uUb`oWcWLHFtN422nE9^;+b4N(IkYO(fvcH1w`X^x zdc)YOlDi?LY)G)$k*&&Lu}~UiX`Ork5Z?8yW9(lAdoS-+g&J8qc4ylv*5+oyU}P=* zKD4Fz>Wd6>2amwpAh-pT{N;-_tf4?l;3}+IrE_-IwprU?))Emjw4iA1sAlyW+xmE( z&N(G9owtX(cik<-BEushbYADHYHR*$V=IQ9T$NCKMF2@M@9;Cfdk(+(@Xob%uUUym zh=H5N;;4XjO9eW)k;M5f&i%DTVG`8kCK;A;HSm#Jl5Zq?{3(NnibBY{-(E(gpXNRL zG-_y?gz1~(mw1zdml^VWcrRJGYALUW57%T|inDovv^Hd`bDbM^HqpELQHz_e(kIXn zQhO9BB-Ke#?XR26lWpMEKYn@^;_TTi(Jq7B{T2u+G*=tKU~|Jbkfn zu}4L%@qIr0JZhZ2ZF$3~4ec(-qFgo@W}zz z!=HPiR4tOy)7_!0L!RSrBHuWFI$>6v`u3Yc_lM5A@XMJ-L(mW}jzFy8cifW#XN<$6 z^8B2iRXc|6pXs+SCEji?cjK$-Ax?L#G|T%_pVfp%Mx{Kbi-~o$)YZbmV`L|bn$`>8 z*13mj0(`Xsp|;^F#w|$P9z;1bFFEDlM-pd;b%~IH_hD_j@jh_|r(Hpf>)i=wz(ebr zDvs$hx8l7rFf<8LL*_-)J$*4r&kU1WAB{M(){eQU`NHiSWU%ou)ukapRvd*ljK%w& zL%*EU0m6T0MQZlr#s%q5TM4Fu4-8Y@Hq-}Z%_(6lcy5MNugg%u^h?=^y zjv5tRkV0JEb$Biju`-j(?U(q#M^kP_K)~@Pv0Lxu$A&gIBoK~!SV$7xiM;Vin=p=lk>V1UQO}B;~Wms11kmG`x>mF1zL`@7QiMQ z>X_@C?Z!TlW5x>BdA=jZN<;L3^BNZ!k9{0Pi z#Ju>lqA(xA_C3q{$K3v8=|_yBqzHuSwy8;6x>|eHD@e);>fO;J38lim@V4`W7hK7% z^M=7Dxi~_Ia=ppczSAw>TSkfyC{?!J!Is{37rnW(0w&Br;OV!Mmha0O^?4>u-dm$9 zxj)aJfms_`*;uLV3wk$S&C|mpAcaoxyw%Yq6(8n&yNZW77Q&U~h0Tr2f6zdBjADQ7 z3cW^XiZ1V!KR8!EKdH7}AF+OeJ=YOvSm0@KSs}3BHJ+B5;~y*CTLl+3M8JgDXJE#y zT?&Y7!fMUx4ABKp?==7nQ4(>46(H#2LnRE<$D0hAM%D6Af0Z1xzuE=1Q^&E^|3;12 zq55Av7j@hHY0&|OzO4-)`J9GPMdL!G>zvAUQSIi7T@5Prm4xQ6|9nPc{-xu578wU5 zB_*p4gjOzq&sCl?X#J|J!FRV@^#Cy?-FmRd5w5XPvH0|!OqL(K1Z$zES-U0tr1(dG z$QLVE>7dWs+wa@~63g#*_tfZ?IpId3tW;<5r9Pxc<+;My1O5jx~EjA)`>FZrIXf@f8$Oj zYhVpkzZF?E+pjR7CL$r#_WGYw`JWv8X9a8(iH+bCHj3-nHgygP%!MXMeD{yL$y(}A zgiK|C(6vT^FK)a-VVHhMWAg8_1*V@YLJ79a{M&^1NAPu8;HZ z?b#_|?kSv$_anty|6RHN+fQU-*^UQrWa<=*RADqnmiAom95BRS{9HVVLz(ZoH1s4J zAtN(id|&_B%py;nTM~GZD0@LXX#mWNa^U$n;yR4up;>~FpWt9s^19DpZNdAOvadlN7xY7yF2LqM0fYEFoLR`}A#1#Qth(CNj~8sz6af9P0LC zOM458tJNL*v!U!^**S7NfQB#7qs;G*#>~tl86vr+P_EU937mhnC4jY_`1m~kzTO}I z+dpJJlMJlCCm8+m?D_vyNdD{e0p--FlL!Bs68jI&c7FuKZ&T~Ubr1iB*Y>~M^1M-r z_Fv!dUz+LPuhdh4J&F^SIudvDj|ArLo6jxvsr-jw{kPc|5C#Ofy0g3a%fB@5A6*@) z^WpgS!TiA-RNMm=%zdTo>XrX$`~Dv4zv+uTp$`uI!K;RDTzK%@=s&ivI+kTWjwJV#kLMV@xq!1 zHxz_esP7VsVoq`fP(OZr;5r2vO0Zl>#qV}o^(he3g+N&UZ0p1gI88O)(K=WQ78;H5 ztksoFmhMGNkFot@FY|~TPsvD`_$qLN=YQGV|Lgn%_c?{JNY!1p&e7$OD82S@Jq24u zwno~}g80W?C?U*{x2>Q)F&5BXzO&NaPDdj7HZ?ye`Fz#A&T+L!CR|Y5LUJfKGJYt0 z1F`-s)?jcpyGC%V1iXtkCcaNdUs7K6RvyPS^6@)r{&E zBN!#7)&?@rQ%Z3E&;bCaRZ^Rbe}DCzWJA}6hmCoWDo3|>Ui9n9QmzcbT}2x7iK|?^ zc0>~fbD~-nq?phH`F>_sGF`Dt)+9};Kh<;ZW)SuKmecpc$q<~WDsr;IK2hAdzSBdA zmUi#D?=x!{qx9sjDavFXdVfZ>BTYAOz*3Vsky0>-1Xy#`N^AH9wWpivmS0BBHQGAJ zHkSOs4q!3K^rTW^hp$<^eWx=so`_o~-SWkA>+UhbB*kbl6>}>6FD&5#wz?%V&esR| zmh#tcPB3EKQ71B8#I9V4&&_}g6-U1NkdRu8%v+GG`^z14ieTYUZ=iG?nUr=d(54!- zP!#VN9GJ&;R<#^pp^}$Ad29bSwf46*Oj}@SYSLJNyGm6Y6*KlsaK|(h$IUPgbkF4F zrwN?o6GvOhBKw%>{D%)8wolAI+%U5$Wyk2NkA+!Jxvgxa1S{(SC)13b%>gyAxI@nr zx2)3NNP0WXgF@s3MP~1LYX|A2x>{O4di0dI(0`-S-%jo{7gsk$h1GsJR<_ImD|b(? zJ8wCgc#}`#;I_zpL1P zNEXZOCxi;G6$-1)tSjfaUD^@PZov@7KDNV$R}`3OY0Ak;o}pO(rkc2HVrLg#6{K2o zT~@+C0JCnRy~Uwp9n6 zlo_0b^dx@SzqL&B{Ai;|uOU^rF|=jGLE;L%?2)_E^YV)|3QAaCrqCy%Wu)DCD9onH!}k0ex|NBDMCgsu*7ufdmatTyeH3|eKU{ zw4~M}>Gi>F^I>-MkJ9#U0tcpAZg=;N#brbB0viGBr41`E4sw}Qgimi}!9UQJaxN;iINPsca zpLRarueEVv*_%tRH4Z=%>J&*#{ud?4hDRvck-z~NeCp$WdR@OE2ylsLSfXR@aV~!B zgn{$$ri7mWNjILHZcUDhWb?XCth+M!+1$~bso49n0+~7+BGS@hbpOsiH(q(_$IG0< zJFQV3F;5I;AvmRXWDlM}ijmMB#7G@&aYBe=6$dNF*e8VO{O%!=)#A z4MNDWhV@UDMLGSY5?;Jm83+n^ob>YLek3+Z)i#fJ%)gE82#4&*0J?KQs!BWe+e^iE zFQwJelHid$TkF(}k3ioWom;n((yj$Zr>VLd(Z!2HIqyq}oc#RG{HoS98ZUbHou)5^Rm%d3xUA=7heEUUziF?&ka8_4U05dqawy_9#h8 zwv8{MiUHHFn5<2K%ES{{ITogi@$^}b8Y(&pBT7N+5HD^ush~0LpY<|##-YlWwIXvm zEY$+Wijkx$G2H>WF72`P5v{1~QCB`|$PJQ=6U_R-<;0$3VKc0poN(9pB}9Fxx|JN) z_w~9ecl^bch;>l4!V#@F10iy`?$!<#J+8f`-wJ`_cBUCS7xD?~vjDDG`l{+XRRP^5 z`5Cb9y!_UBr@Oy*9~r?qIJ)s6bWYSto5iDk$tBe$pept#KWwTFY< zs{@+0?CU$5fLT7P6qJ-E4S6vK@oF~wjLuYH|4Sza?oWG5(SHRZjsUUjJohV$RzrOI zY#^)8?{CDpDV4^Nvm7m~SjtE|k&{ZO5YAl<5k0u9;Jif^XW?)Y*>Q-=yu zCA$c4G+Xj@5=fWq=7Go;x9X}ZC^deBMFD9nN4t(R( zd&PJ&tun6Pk zuU|g{nd=?t22vf|IrYYBkoo&5g+fAYm@eRm)K-BW%0K4Y%VSk3b%+mU@mA(8W;v%$ zpWd2irTXcq=-+)!9W!-udQI}$>{#X@%4b^Nhhf@afwf4h!Z9Us`7DY2G&tf+vZ`NE zdF^1KaTv$-UGzXsJ08L?s*0#*M0J!I&7wD}cpGf?t>Z%0o7mtug!|}wHk@93Li>9j z7d%zz*_Xi}$k3UVL#ylufM$a3mC=w&jmLlG^$g6g?1bakkn$1`ry+kW&)+aD|GY&V z!#VJLA{PcZ54cn-E0Y{E8B_~*k*&pd)Cp~@*~9v(r81v8uWq+~;_9eeN1XpkUMy^) z2z8I%y94OonVEaKx*yB)`_LYi-C=8Hx0OZYt()~aY81>2qByzEI_D;*rAMgl@{;QpM2>EH=<$$s|CCE&G3Psf&15etWmWjRnxLN z#=}eMnhwTQSn5=kZIv4H&K{_lWjF*3;wIK^4GA*-N6o^Y@91agiPeFv)7M{OC3NC; zG^XnBDa;@J{S7klNj*5?am`AZ&+L{7F77t0IQAVeO~Nc6JTz+QUn_43Ep>{g)=r!- zsHrQ`wVk_=uH;wbN7GL~IZ2L)ywn}70m0HjQJDvM<)|Omd8^Iahlh3V-Rq97SnCm1 zlg*s~TjKPtEzPhwjx{1TWWBb}sv>;}pLrW5YubsbecEts*l|H(IS*KeM{)JX{~$l- z{b|p@BLm0{O3~0PN%sbB+ypVn^f5U&*G%%1h}{x|cr=qm7SH-> zYe#?i7I1dBA#w4l@cdcRUT=rKu!FsWHBtJmq8%C015H>40=k*cUV#+bws4ZrRLgDm z_-mVm9J-<5FET}`Q;az254yy&I}sA{&ZX{v%I~ue>Pn{%aU6;Fvp96eZmiBm1O^xh{z4YKIjkbi966 z)B05}aCj5Kua>cH`ZSK{u&&rsBIi~{19_~A7iWpsqat_sOF^Z*+Ast z;}ch@jc3hhm_+4{PFK0_PI#aj{a>=ZW(~rW)1m>58>qarsx(vf&e8BNQXakKcP(V% z7@wkWHsSoMQI8;ISlIftgE1e>{YPCD;r5Ra_sXPyp$YZ+{ea5c3(7qK%y`C^IHSTVG&A!Yfa1lnZEv!g`!U-{QpL3QQa3b8LfaB8*f%kY;SOE&uoKA1duB$_NzRtWc8eEa=#_=M!3 zw0=jIta-3Mjc)#KGU7}yW#FY)OON~ki)Sk-C~4@Md}WxaE%m^GSMgPq2{zgHmJa@9 zeLD}N4KQ|hfix1Yf*{{$4`|_^O9~!zZs8da_{{GHJ1njMWN}Z}B z^v9OL7r-aph{o^iSpV|vvWtp($WObg5Hn2?yUutJDaB4K3(1@M%rgr)!;FJg}my%;|#-f(A=FBQu}AGb6n^(~4G&E*TieIn#$wMfvrEYsY(G|u3{nt0<}L~xaiipY1^3}n;z%LpnR_{-=1N}zct?P z*>#$S=Yp*kOc+4naljtz>;*Ba*&11OjQxw@qTqD4Nm(r=cPHpPw!Dz<>iJawa(X5! z+kE-f-rn`&;*~O+)noI{eW0rRkli1jxbzf*zb+$JM?Je>yBo18?W|DRm-SKCq?lx( z7{WSA5D&nH%EwjI3CtH;^ss3W8*+CsLcV)fWh3@d?w4*R2h;M?=L^~3YW+{~b3;S- zU#qfY`A{bnzLRq*k7C(M{)bvn-*Z@o?D=T#p~jDY5S0m~A6~oOL{(GSzWB>!F0v@6 z_VhRYvlf8qF#+uaEcn<&7m4SvpgcjQhEgy-nDhkV?o-Ry5EG&SDr;1#At7xtnC)69 zZQ1cyV)9Vii2viyRj(oiQ=YJeH-X&=k<&07Ax;_c<+PHSS?t zr`WFA|2FkCQLY~3QlL@~P-c4}DdbsYm)b+EtwON?`=aQ#;8YlduCO*hpbrxP(a+YZ z?$finhpMV^u%GQ%9zOc!P2}}ZO618?rwlO^y;^ul-k9+N>O}S@@1VG21C4zvD~B(& zCVgwYt#dQjBE7yM$0j|_mi5=Wh5BDPp4Sj{BEU1T`l8718p8pr{VcLch9eF2X<8$z zKUMyz4v$}E38gb0Kg--BegC&d{{MiTp$0lYy}x|FdIj_Us|TEW@+&aell}D5KY`gF z*p_q88}o(Krj_Ge6?RSjq@v8vgy^rwd+Qa{=x1Sn5c}S&FKe7CF=KO)d zq5EU{7cVpmDJquDvpRiNApj^5;Na3NA3x5!b>~h6U02?dsg0T})e?^6Jr7~{f{1a+ z$r6ZO^Cx(cU+p~o9oBu_)Tz%kJ<;S`M3g}F(ERx4cehdk>6pmeFFJ%bZu1xZDD zY$?uY<9&as!b22@D4Y9j9M;hlV@?Tq0Kl2Wt&M-MOJ?hn^6uk84RkW6|FPXb*O+Z` zlv+Fhd=?pLlgh~ePvfs3tXO~xr4i~z6{*}-=~7A!6I8mhZ}8kyh&Mwov2#iTGP#aB z!2V>Hu~lu?y3iXNlWZ^lDm=X7IZ9<#&S$dZJhKjIV&*ZI#FLUiqdX0yw)9_8YZxF) zD~djntaqxl@S0aRDIh>7_FQb%5=2BpRhi)*lN$Z2i|?)UYf%xUI_!SX?Rl5L^$!PP zpEhsmA7N*Uxe|A$Q%~Lk$Q4`eb7`=y1{k*8kRR^juFVuh4tIV|#g5_5&$A9gxhV{n z4>hVN`f4$f+SG1G%Lwx~diE?@nYp7A7^+?P*Pw+0o0HI?Rl!Jsx zZqF_!+M_A^{4Hbi7a>FI+}#|M8mqpP8(qaiQ^@evYU-pbUI{AW(4(eIujA9xue8jk zrmgnHf~lxcV>*x_H-W-|?^^BjNBGxdL1(y6by0WL-q)?;azjAZK)9QxHU96g)?z*P z(`C$1wDiK;V#%P_?@CFsA9soER%^)nkmo;P{XITm6i1lsosfWjcJFCF?&QN%uPQ;v zZ(QY&}r3NNvt=mAk!BcfU+GfabU!j-yWqui=7XA zW0{>F5T<;j9Ct#nV5)!~kGq={cJ{;xgQJHJ7nlrGsC;!20>S5s-RGuIWxI_JJG-T# z0ak3R#NXG~t}xAEH$-K2S#5XHxIw^cLj8@>SznJiyA+05|L&4cwaZ4Jv`80?QrDKg zP(xrsli$vCUYU=LOBEr>Q=$PBJ4WVt3KFP#O+9{*W0wvF!UM5bxz$ClmEm&FF0f#T z1HM1KT3ujs3#gI7t4KiY)3TdRSYcI`d9bq-hL01#Dq=z$^3DJS2Kq+mC-;k&YrO2YV=lEQKj*qT0)wzCGt`& z#?@@#c>NH{>$`8wItKp?*EPd-aW=OhXn04ZBxL9q!<{9Jb-fhB>jRnG>+<;WRgQh) zvZ#r*ACVgS7_SemMgdfp9)bQ|(e^I8ma#Sb{FbMMjAoFpR72zlZD3(Jd*x^0D#ZOM z|DTyw31OfX%<0b#nd;nQ%yo^e5zk#pI9ApoXjb0g0Nr^6yn{PDWFY(@w$xU?9O5)G zC)AC~13`n-@7;3_iyTrfuJ)Txb86}Mz>busRZ5DACiwAIWAc9ygVnglCvryPV@~|= zCd_%8KoIdm=^KC(m3CX9{bg@@39@`8MXZlI_a~j3w+i`Vx$S+8i(cTmFaPvG16eHK z#M)-qQ}*TZ-|vksD&ix;@rYN19Y9wJ`VkA!D-FsVdxwX=Cn{}d1GW|!IGOb07pqtX z1WV$9=GnL~S-;t0Gzp>M?{1To<-IQ752~Jj5&q3lpO;#k%5b=S1C@ntCl@8W`ip}- zw?Y>9++IUtDaq{RLNsA1_iW9pVgIFAP&3e#gmq<82Fx@ zQ;AgJvX-`*v$;sCls`Qty2QrDKa;3dkA3;6d=~h|tY1?rHXGDm?7d;?*cG4Hds5_M zAwQ(_hfW|R8zgi=*zeMNTw}xQAY=cl z@#KC!6f-;$j{mgn=9LR&7**Z8&y4A9wSkT`9$2u zpFd9mTCqIsDhJQpIs(ovFkn7-UH|Uez^gV}3wrSdL*OWbIKXao6hCTUv%Q~a79bMbw1QV_XfakE-LsrOmJou{uZTrfJ-m2O=h4%; zOW)e>0raYYy;8d|5m!&lWPfb34n%K1LRcdwU?9B*o8&E>$*##-1a@PBQ3k@>Y;|&Y z_;U1LJMW6kac{{WQ{@9{ zwNMffx@%~7OAk3(yA$q8=m_8}8l4Kdd-t_b63WqV5gpp}!k8DN@6RE2kLBAZnNCRWz(L9nZE8<5KQ0=V~5Y#a^{rR_VUKice zp=n#f&*Oz(7iZD#Cltp3n(TA9fT*!Gblq)>#EF>T>aX7}-rfiWi^^qK1pPvHvMNKU zR5|Pc)t~7cZ9a3Tf;+UM;}Fb-vf&-#mmX2wyw>A9O{VaKk9IBU zo6qInBo`IZ>DywfzHl+sOzTzU z;DMB1FaW#pW3LMB>zI>)CFG<1(!o;OPZ!-s{E=B*f^7Uxv9g`*LzA-;r(Jl;t8CNU zJ^OcuO+Oy#k#%<((*6nX%at~?@QsH+BD9C=84Jv1gA?_xiMK$B{7SUiZVV_PqSLR{ zt6!64ng8b`r0z)2ZlKsIsnWTRG|gPpOP1+^-%;}k+9Ez6=HN@F?klwi`=?LsI`|;w zt1kzns@kozVFWQoS%juA5+Y+7+w+HeTtXBeb8pw2JsR4`HPA(-f0np@-9lLJMvF=^ zKo8V(>m(+NE@g<$P!9ILFc#h&YEk=$^lZ?U%#t!0p83yym0-PO?xO7iR;P{za&F}>Ziv(scv z&f1m9WKOJm=M^pvwoBhkl$EC_&%B$Edg-Yo`bQH_Ytk_)v+e`0^rY&kEMAU)f<~kg zW<`_z8He=4okrPaM+S z>p8noF8n?gpm=Gw4zka=ht1Vq0D=(-@X0xk)yk`og~#)5&EIkUKMojRtC9YK&l2m8 zC=&XizUA-vu8kS)<)|_$maW5BnLT`1x=o4d@Ay7r2-c44)jR;iF9{hLGz*n2I}oz` zftlF}s||r^HyUbGHV1?+=r%jM4P-%76}H^eoXu6M%YQVoTEM8D0Yh&5gof-^m}8j< zo|d9vtQ+|_X;WF(%Pm!Kp zeCzpmGr0BO_qWWQ3Lxv|83-+&=bZ$?!Xx9e2*(DkSt&%G;$MHY2+{{eYH3 z8osQq57~*FS7|dHEn#TxGCrP4dQuUNXn@kzuRCv_?IRdNMoJh`f<|rkz(Z@)uEaLq`7XfbOl?j!honc*_2V^CkWZ0Uva{ zv7hB(qq&V45!(22oW_5{Y@V3J))Qn7DXcSLKMm5>Uh+qKB)Z4@ar#@^-)x^axJJ6d zfdeJp(zIZ7K^Eq`9V|lsOSIch~ zc8qAAoiu0Qh-WyKLr{VP*`IPvgHlWG3cBB9o^MI@v3AGr9A+fV-F+jcrsoH#n|9t) z-&1};L8yL^*tf+O)t)>7Xcicg=N{QUOntL}OAZfK~kW@NjXj&RnZb_SWbe(M@NhS;oL~ApK z*Bo}6fb+&cq~O-=+rt&ENK@+m{>tX6st`zRw{(j!K#2(|Z)q8PQ6tU=GjDxfreac#?8jx8G*+qyo zQ>6O^99uTcLQyF9;g0j4w44WmnQi0^%)y`2wqkze0rNaGX41nJH?I5<*y6IliD-(6@h$9RND9b?msGE!dHlcK6|I;2cnyC+~` z%_iNi>_;8>B*Xrs{jGc!a~% zF~^sTL4p86{*|O9t1m8vP)Cg|JqJSb_XuzJOlusO?-e?`*hnieXFU0Q1=PZu3)F_1B05;U2&@Rm@ZELPs}yuMHHRS#>ws z%iiH}!&Jpw#CvM$8b}pj49dFp*HzxW^|E_TG`YGAus3709gUCvZShU+nc@CU(i;88u00gZ*AcguJ90w zVS&_T@s9wyZ6O-UChbIM>5VaGn4gq{gxk8IyZvgH0Mj2w;%ZMmJnIqw@In|rCS(1h zmu-0W#5$%275G=yZ=moR?pjt@k!7`!oX5C5tz2W#(|CU=uQXvJ9js?hds_l_G}s#q zcr~9muFS2k%CRr*E@kk#4TNkJd{{|rXmFF4y3X}&cYSl;Nh_^rv%(?njH4rh%E6Ol zGepGd)?mDuk!6GPIcaIknWPd%%nHQM(!&b%i@+Q^hs1=M9+I`iKU;U3R%j~@S*WS* zsjnWCq>fdZ{KcAJ5!e0uS`L{pm4zfU+agu<9vMj6h1OX69d+k<4-&XBKm*9?Ah(g6 zEWg|j(zfXJtKW{UZuzoMb@ZP9LL4r;lHT;ZdD+fM@U9odB?FO%fz!(PxyNq0`$F#|c#OSFf$^N6se)>>C#j?kgrAoy@ zU}E2!_{gCf)#2IoMp(ZH01?!XbGpB{CU!AQ6u-X0$;_BJ+BwveGhAqUK{X4_hdEDM zm)36oIOLe>L%l(*M+k~PCLF~1F*&F;Rw28IM7OUhK(;uczI+Ucyp_T#iQ2`I+%_l1 z2a>J{LcNR4$1NF39yjsy>B9LiL6TgE^FHd?vs?l|kV>f4jRZtE5iOH`QOs#0PDv?* z3#C}*$b60z)sc#aLe*nWa?Xs%t9k=0ZbJyNk(<=8CSc|q*y%``Y-FIA5m{kf`dt<6IcWo}Q<|4QF$t#m;f(xi&ZBc(MCRv3MAO@K)o#uihS-x(sJg~nay_yHtV_2bHxfTIC9}AGIJq(OTo$gPikGw+3qI0s9 zGt=|3?khDYU1ctOuRv+(_mwFKsB0wWa3D3qQmDf)6n)xpG>TtEH)Iz>?FK@b<9>aD zAI?fE2=&glAxv`B>y7!)U=6BZy3Nz}Vq2=vKo+bz%<9Zp8nW z-i(Q$#9t#|c%FXh-ra}zKkU7EIMjXnK3<4aQb}%PX+cP`lPoPNds&iQVeBJ&ma(K# z$-eI*`!aUM7?T$J82ez1AzKVH_Q7DjZ}Hb?ZHOKTppZ+oiXE>A|`iXtw1O_J}!}pNZS@hMCow z;(atuy`5|a>1eda0hs=-;`XzbX`4(2=<>%-yM)=qf&&>tVrHK{kF>C9*$!+6D3IfK z_GIu0?}I5dtuNaR+VpAS=~nD;^Lv&2(1@se_YT1jR=uBK-a6QyEw!Z6K&*lTvP6;=fn8ZtY=29 zNV%(2lXLrXME@`gnI_7?#Qh!#c@@5iTd&fF>gocg?06Xa0zcUF9_Gy)sDOLe@lerq zW~kWyWBYX3l8P~%$6j1ALPDSRzPlPbh@y5szFLMNzCEvzmXgnS#KSrQ(X0|9+Z#73 zHg?7RbKOkY?Wk?Hkf;pi6;v{C`bAl?ugUhGbqFo}gS+u*-xCu96(BUEgT8Z#vcQ3s z3fiwn-M;gp13<2GOEgRLXDR`fUlO_N$=0Bho7GUHe~CB){SOf6ZBu9-^z@wKKKb}F z@oVn3t*Yu9x@uH`xbPnf#5+#c-udp<&6@!2NN+w!j4Dvu{-XSXk;9R9KR^TTesxIl87m7X_LWU*|6ksE9SYWB6!?J!)=5K#O z7k+?sjCR&YOqY(vh*wbT##+c|8s!O zf46@Bu>5!H|9`#pCyewS4Mk5@rlZ z!!Z40xb*jTKS0BD0uV_5_wE0;<^A`b?7xfu-=p{6i}#Zj=T}4Z|C!lYq7K8EmkQrj z1x-31QO&no8@qAhW(>bRo!)8TGmb^2^`%ZYeJ{)gY<|S_Yc;0Y>+%Lv}s;p3_3wwz2254Vbj%_iigRpEHti~{g9uy1dLN4*$ftoph@Zw4A8_nk3Fg{Yu@vSgvaK#>8{_vDxoT`jHfv$B!k1g^7ZO$sTUvay08 z63ke!PZvJ%6{~&S?b970-{eKFw?9JGt&?<>SmeD()svF;j||R#`b?8fww32kLPy0vmAG4Nf0ED4ES@3+UP3Uc zMn~71CrjD!>W6=W7>&&8jvB4GC;aLSJxTb)~Bypl?k= z`{!Kk`0XQlqxpR-1)oNd!a>!9+E!$SH=Gypo?AKP7$Pm%~oIxCwv zVKgAt)M4=Mn)<6_^K&)&ui9(4e5b;F(_Ngct6(i1SGZ@m6Z8yWKH1loz6GNP~dp)tMR=@BfRS8(D%+P+`Z{?G@?PL~^+MPSOzJ}F>C&gXAD8rsjv7Z9b#D)q9 zKXi)qQrvtfonk>=Xc(XUo^R9()n?oJ95<_KYkTiO!m#F%oHV!Lx9clSd6U+-S0%)u z`a>T~Q)X6L97H3fOH%3=txK$IY&wdZA%ZcvsLESRT%+n>_?9^GbNts{d?v@Gy)Ftq z5xwTBs-;?q>#w%1yyF@S!*4jHP~duM6u+J0iC*WW76VPZIz9tU9-NHbby4a7k!7fZ zUo%bExj}w#W50RFT_RHDnunw5g49@yxu1fn;?Ba|+PSYb#PT32n3nbDj<{CffdXUg z1J`sPo((c|i*KckXjq_!Csb90rPOqk1o*1)YiE#H7D_R8GekCXieCCNqG``UUtG1{ z`r>Jq3Ks^~hI8>a|6`=0|u zFdOW-m(eXYyh;o)xig>!a(cR~bt$>*OFcL?QEC=*ieeXnZq~Y7b?!pu(Yc@OG$wcS zMf~dKu?XdtEZqkN6U?X@xhNA`%$eBQPtmRw+E>{#Yf0~F5!fpG^V$loc`sf}5!vNR zeDA&?^grbGTVqXOq-3N0Bi{%6>eu-yJv`cLF}iy9SoABV`Asfy0fD=UJMInmRo02y zcKD+~rI3yq(+YPLu(DU;@QLNk&$X(bw_zZlXH9G~6JaFNlgoKVG}NiATB3%2LVkMZ zB<=Ke5!&l`jyAf>l@x4w(TRG)u)?vV7+|+sm(r)^PgJ#WkJ~DY?c&C8jcXvL0{;Xz#HHy*13eKiW0srqc0vIb1REktp zh-#Z%mQq}atwqHd)U~}Pfv*ge+Ue5fo(m%m6#0}R3pWlRD=I5#zw2*Y$$^N{U0ZE9 zBs^Mb5Pq!#cnk++qYHJuw8fVthEHTMP@&qT&y%yYltCY$q4b8n8upw`089RIeOz+( zz9RLSl5As@8@Dvxq710$%7ZlAMPPf$I|qE7-d)Xz0-I{N%=Q|Z>Tp{k*Fmsj)us6g(WAG2 zM}wG`LcT{Xg%P(Gk0?-(aJ}J%soQ9=G0b#l8{Riz=QUr^yixml=upZiAAko zqOHL^#{Q4Wm=zBFQuJgQw=K9hJHYtXP1!v&FPW^?y97(1Wah0 zz5Y>~lV~i-V)h8rdWP7jsm95;Gbm1uP*8X#aViZE0Zp++%n7 zS@zZpLqBLa#;#o}iIFeEI9VWxV7P99eq}x5inHh{TS=8B;P4|Kif|;%ZOK|vdfjg@beWHomy%>p|b zBU%v;`<6tDh0#nerZHkqNiaG`j-RkK2+&xinRrXzS+C{Tw1qcJ(`Nm8)gfQ8Y&1BbS53LYZJZkJ(Gt>Qpan-i~BRRJ9wkYHU9rhz605a$_ zI-lNau~4Y*MjJiJ5=@s=?Y{@IMt8&+(F+N}OC&XRaM{h!G z|Jsrt`3Z<(=`vc|k~o7{_%fU7?*btb!Eqof3T}cr0c9Ue%L>9~B)*&R)tqq?Nv?(8 zK#bIw4g05wjZ3;bPfLJ~TnhC!U33d&(2!n*Hl{rR8X@1b0(O&kw_19|Y@*`x9!etI)xvE~jMaqSKpYN;sblrie zYEY+-ZjijlI_tJ)dt9>bnd(98U5WIKbuaS}jr;J`lA|NesCv})c{Awz!1*tD`nY@} zDaQa`)EK13EFIl4-2I+~NjgJHgku4Zbe1v3n2(X`u#ax5$mHp@Q3ek%J=0blCiSUj z%w?HlhHCCG&A$epc>k}s*+0Q;_j~9LKZDw8zgX9M6m;@41$()p{-b1!CS?$*z~{9) zDYr#($Y@U^D+*^sq)n9~a@tI|*pqlJ5z_PN;`Wu@GjC54)BKj&p7nh6$g?ej(`P%d zOMj>Z+$teeXsvL#k?Kuecl|8I*6LtMjKPBI`{@g)>orAFZy(sec5P5w1B2Dn!`de( z5iuY*q^ja^pY(8Qf;BbPQ{;p7>W=0SMK0lwP0UKDQ%o}$om$T-G~}zm6#YX2EdR;a z-7&Xi@1`N2Fr?0C>RxHjM(`Z_286fe}aYv!ouMfwJfr3MH*RaP@vp5wbBat6;S{k5T z?EdwOxpy&h}^2`v54f!opi$lBIBRQ1|g6$-rHre5p(D zn8*7RX;Nfc-)u*`6Wni*>mJA@~a1~lTZ+P&wKERF+L&o{3L&8)%sx; z+v1=eK31mJJl%sgGu0_hNg{YV*v zst6bxrfo3QvQ>zr)KkKXrndyB{LT%Vf$pSaO5=);_b*3r>RMWRpyRU~v-mp_dBIY{6VFd22MgE9WGaGvt4F1A$|jTZpuRyDTc&Z%;Wgw96S30Uwb zC%C8heTvG6Q}K&92k3P)q9{U<`T&TGrYoWRs-T(2SVbUpjY+$%BwvGty?6@>!8ds1 zIbzFO7GcznH)_qYee{<>@V&?1L^o1F4TGH+qbHh6ei`X$PKc~sqjLM;>+2a*)%fKj zKsE`)Y(^th_VbmU^&U?~C#Pa1Yt71{qbu-ED`u0@Gx{`1mE%%A#pty;wy_v%VGOpf zzHOq^7<##oz-V`Ltx;0hv~stldCIx4yLekma8OnXk2C|0yAhkOQy}^-W&%Q;FDEOM zwiwZ`qfuJW^*6e+^XhMMK&W}wo>mD*B?ubgs941Df!dU(REIHh`w9c6{d6M6Ta_j9 zdY$)v&mqZipZ=G(aMr}D!!4vn>LK5=9H-9LQs-P584GrNRYz)_t{{9aUO;9=vUA9GX-9CSGMOWs{lvw5&ZE5& z$6=aUS8K4528`}q&oOpo6kRk@U^T4h42ouNTnQYz)UdF9h{8jf>>W#})Pj~@10`#0 zJk~!#6%ZTdtTL1Fy6~JlQlZFWqmW!~Dp4yx9p=?C!gR8$yb)w&RUcA>+2hBeawD6) z4e>Y@6}`1p@x44l09P9DH**huS^55AsjhKP*!9yt7v&2TDo;nWm*lS$7wH_f4P2i@ zH%`(UnfpI@9WeDrFMzhIb^}>1Id!$l;BWK7cj|7yNRTyzm9;gtFHEKZ-djDR$ zIMHGExKWpYA59g?q!#a&q}>cAt&J^A8rLjtq`MM~YlyCdfg+WAQmeXUXHltR4o)C1 zmIXz$Bd9xTxQC~aq54BG+A!ETMOFsv|?uJUS;6jKB`P3%&a} zrz-!@b$Nl7E?s$PwJ!ES(M-9#L|(FsQdb#7zRFo}zfY=c(-?zh4Iv}9b6LL2d-hnY z3bM3(RzM@&snV2i1KDVLvEm^U5|j3tWgptQo8coYQwcZxC?XRceJbDwkE5o zHMz;Ztye0`@XLh@5Rx4bCK1<7CtZW7IC@>V5xF#nGz%}(C{#s;_qr=J<2G_Q^L%XY zn85=F5(h?0va&wj4%BxWu$+GNe0+Ir(bf)5DT)!LY1rZI@@I-;Z`Pb!g<{Hag0siu zO+S4qlnqgY`hH_U$(*}f>(pm+CDuXXqYuzWN;@O#c-Pr}^~PQQ`h}rt%x>|1q-{E@mI=&zniE9FrL`jga#7cTowBNJ$Lz6-j0?4*p!7>NOZRswTHL zIR2fi#4c)F%a#Vg$$NkUH&UWqF7-*{-Ek^kK~RhqDp@kpOhK!9*W*GHLq<3o&SD}~ zGsUZQEh%*2J^d4NpNadku@Dhds?U2S&wvSt%X8cSIf?-sl`K_6d1t=FJ7&d=kQ{f1%OI_G(CyGBVPl$Jy$s z+UqT2j{)mh*^r-9quhUdh$d96q^!f{@!?o4i%DlJkY+Yro4#juzldAZtp1_>Kt4#j zTAV#Y%F??@JfP>u)>=o#=nN+met&)-%q1c~J8mfP9&C4}!)laS;)7EP$hG-nA5G&f zhtx{tE9!NJDEF&|D@FRD`wfNL2&8Zk7eLC)%?oW?<7e z^yv=tyDuPZy+BM7otSu;C9lg(hR)W)Pa@_ePB14;m$o5;-SRn3;b6bm%nb>&)EU*%oXWlZE=9b7}#p zBuKP;k>fHHeLgbl24!31bjQQun8!A2Q2^{k=gJQG5o7gN{v-Q-KRLbc&#&}=W*?Hx zO*ufwYFCE_%t$*NSjpVO;VerQhS){X$hGp62MyY2EpaOg?F>a^ZScW7FP2@ok=|N^ zRE@;zEoRbvbW3{x9F@Xn9vqmRZLbDobk^|Y4TH5|ThMaVE`w9TNt^Xm%z!fmKtQ8o z`bNujbja8+mOYvfbN@*zP@DOpSl^!xs;w7?OgGAQaT`^Zc(+Z zU}e*dRNpf8wrj4_7-?4Apg802TVF-a@r18D$9ZI;jJF5(}unESlLnJrg z1&Xs5G`e@w0vbQjxANcjPz#FiK|Jv_$f=KkizPQyr`s zbCV)*v91W55fm4sja<}RtDr}6#!a~qyg!sI!`Wc%(Q zL(;L)dN7mLU?*Ozr+TN0J);awf@Ntvi^(T!?PJQi5u@i!HRD(32V5&B7?KtMyVIZ0 zlid{^vgeYm2TjKk-x-X^O_FBH)DH{Md)X^7#6Ra1@ z&eutv)qR@!M%Puw?>ohAN{;rTxHzWVLW$&((B-t~dmk%FYV@Z)aOkIsdqM3&C)~fp zw)?n^0-KR~mS)?=7TWgIfAeX4e*u>W$A`1`w%V*h0;Wqu9SxWcU=D0eK9Ho{T@Tnx zsB-MN$Gta;YOz#%kgdQU;}y$zIpS&%mbK&^#pM;yOF?F3E!#^CE{zfzS-I$9{&raM z#DgqTpY3z1n)1Bs^YrmzI9SiyJ-<|smAC&?>=npU)_Ia;`pn&Nq0O7N_;3BLgTxPS zYNwgJx&b>4d~=`|I;zmLwyTHXmjDHDa@w8B24Uc>DNp7vy9i?D8Oon1t9^ZeYJzP+gY z(O1QXqZrr=nlqc$M4jPkfu;=-1|E7_W$@VMNQL|8Cf1Xkg42V|S5)Reurt=|g}o+} zZLGN}(8zq$bJaR-CcWs2RTfyo&*U2$;DzNG_C=doU_*W9Rk{MpA96_-#qn?H5r^sGVj16S9#4I48d;M&kDvc@Ad zc5~br#c^Vy2$8utcF!$@uSd)c+HlQpUom0&(PDkQe5Ki`QoulMo(S`45A7Dq#m?Wx z%qrgi(z>H>pT0XlBk(eiKFwjjOt*^WvLduh8g$HrP3`%XCZyxE6}bD-PP>^X+Sm0L z8=5}JqV34?*BLz>`UBHPF3AK@8@H9(Iy;X&+i4EtXjLL1P#flDwgrBB)3V0qF#ELq z+N1Y{SM`>B7x~+27UdVq{VlJ5HORcEgdckuQBhH0YOX+_d&5TbcCB{Am#ZJ=)~F3t z%z+RrYc|v1vJ}Sgwx6m z)jNgwtuE5FNiQ>COx+4@tL*xpYT!DGRDP#@I|H_QrX$rm^n=g3y=xznLHcXHs{+59 z(byP(A23bVQFfU3zW=^RoE`O8p8c!7Sp|Dg}Xb1RFIYv1`p1GI+F#AYrqMut;wt& zZ;Jn*&Z-Fl_dsx>?k5^@w)3B0;o=K`?M57A?k&G%3|rU6w72UMK6tP4yBd+}0-+w) z!1(fxf<2;H#7lFP+Z|%V+g`*G-IEE;$-g`G@m~%D+jQ&%`%iR=4UY%}31TvORLgtP3)u8W5AwYYt-cfaVyZcD+n_Fl1o8ZqW zlHM#7J3ipa>(75+I*%!uJR3jf0fl9x$&*{d)8N)fZ=M46qIlE-_s;S6f$kBp7IOoD9Y_!`%at%L;9jM;Q03uHj#0Ah*UH?yKRFFdtVq4Z%%;q}!o zw8Zj`(-+Go^L{my$%q^+$Dk??>mLpYdzZFw#x-cvapG9ktC zOPVFtSwf3riTia1{S0z%Fhsf)FK-Lvf2m`$lFqvCeE@dM)=rU2g~bGvxSgtH9w2`s zE6ZN>-qSt)AU8Doc?E64yt|w|$!m!#ta&_%W%AXRkU%g#^Vj)l8l+sh{6?3 z6-~w6Z^niQ(5?3!!Ox#hy}JRio`QY8C|R}nv_ZcJ)8@z>TTQP;kKW`SO; zBccAmtwsNIx!P_y+%cCK_T8z}%2%l zjSd!c!@^`KCo_=H4}s<6Iu;C3MZKR0;(WfJC$|i~(p-q$bj-`m_CbEq#67hYzZR zcvM=!5k#{G(SkN}{mY04=i=F9l~F;CC87wYv{Q}43jHM1sB&!4)xO0OAX#PT;}jm; zwqB@JYHtdj+t2_ywWZ2D$zS_^#)h_7s*GAG+86^QGH>g2tOn-SE1pan`Dz*X;;Iu= zXSMQ%VC(G2<&C=l!5{*hX8k>hc65BN*T>v{ZcBW~${^z!q~@|&#b{Rv`nxv2alLM# ze$kAc`nnO+jH|7ytp-yg!O1|sMiOD_bQ=Zyq=v*Qc(@*yp0cqj+KV*T2FPE!Q`ZFx z>}Ifs?c2N0(SGnKnsJp~E!(krK44I6Vo4Fm`_NuIyb5R{{fXBAu{a?XSX8thN1~+n(^LEloQT76Z&Wg~G?^0vveZ5_jH*r@y+A zn*n->aUK77LteX&Kg=~k^J;xpfeP(+DOm-1`4;*VFH*cb5_Hxa0SaEsMt-~I=!u%`AD@ct$5-Cz1jr*lG_=lpL-vXhtB_Ag~ z8%kT&xZ%cwAfdwIDxP_t@| zdxR@Ubz5P3a;O);p-?}qxUho1xjsqGB2XW2IfUcb(| z0$?L2#{}027>`1t1Fg34?b~%&|6&9#DB`h7@ED?r*wwvV+<;du^VM!}E9@=;fynf5 z2L_1t8Zj;-&a{$BLU&{$pA1~{dY3F!sE+0~#aZU{4qBx$Gc#9)a7bpv#Z9OFHag}& zkQ$%zE3(?UER6l16Nukq7cK6COvQs1PXhSFE8>y5(}SfqI+FQtf)b#vm|^dvwlryo zrna^hbLdfb?ru?~t2jg^P;l|ixb6|ZSPfdFXZM^rU~FFR7zbfuWQ>=fPrKqaD-!=< z>a<}L+hORz{-TFaue(ZLtsXKT?O=NC$+@fdjm%$fW8c#JTILd9PBc_zw;zAf!&)X8 z&cgUFcr&r&m#74fusy4Y^9^o^sIE<0lHKX`)uGG}6agcA3e%Ryo8D!o!^UNfT_mbk zfZ?9g&RM`%4!@f3o!eTGzFJ);-^k#lGjDAE4)qJA0I_l0;u}|`ABcm0`<2v-G-5pu zRuZt(NADk|L?%vEroZ?CQEXA+nzEV&nTpPv*p2MpAKEb)r;#T#&CKfe??)D!#c+0x z<$9mS2xwU|61fW{JHteJCQ3i{klBH_cNogMXbj~&+UlII#If-G+N3FlMR|92@ zVbmA1QK_KRBE!m8+O<n z<=ijzg%`1pSKBJX=^Gpj0S7AS)Z4u=V2Rooo9o{&V#)`4gV*g=sGs}@UB!8Jc&rS< zd9ayFyAkm8A_ss~}nr>QYQO|E*n}j85u^X63lU ztM%gI1sa1x{)y?t6jn2dW`{R#-bAN)8;)VCo%n2+c}x~E?MFVie11ZC`s*~U1N&x} zYJOaRz*PqR;hS+ndHff~eyI7~=bex4t~4KIW=@bUF+Q8!L(6%m66QthzX3v}JBvO- zKCVo8V1mg_!c~8-FMJqwf+^Xo+`gpB0n<+3Oprru5b3lDE~#$94wh5MEeHrH@H zbpK3i_Hg12s1&GyWIWWg1;SR zz0*K$F5Dht!S%!EpZDpfLz1uM_@#|bvBWGG0f8n+qJW3=^6S@Wh6d;1dQ(qQc&)lE zxB_|i&R~THs?fiXv2k!=(#O9onw2OH|Kj0J2-1_xuG8K4B5?05qfbP!exF?hG%19c za@LpG)zx*X#7nUpqmrmegE93j&@0gSip^>DQCYrX@8ZjH3W)9$0x*jKv48<)8>sGg zQcoyxhYkd88+p$#arV1my%xtTD-pif(HOnoLeovI!*tZ+#3;knFri6!^X{d-y~^BO`p4lIkwtPQ2)aDg+xy2 z9eyqTrMfOIznLD5c`d`TB?IGu%S$fahT~~&dvno+qdoB0i(|59NKx z;fkbX=v#d6wcE9o?TxDz_KFEI%Qhq*1$AoQ8xrtEY4chG-~k^W-#{J#s&3GpT+NBA zX`-dnuY*ms;~rHm-&6-I;udg&bgr&8j^RJ4bWGvMiYyQ%o!?e2znI4A8MIhCp7ImI zQ=XuD4+qNG0ITP(rEb;Jb1^Hp1s+?#W7A0(vSgA>K>1FMcZ$NG#pJLXn;H-#@Ljw( z1j3qC`yd!^ca_g(XJ44Ml_;cK{_r|DGBR>>VKFqmeWLhs?OhWaeCHyUmYpyF(gFo&mr)vKK)C24 zebUy`eOK^NKhzh~CBD6KRFi&lbg8<+2U8M5HCa!(t~A4B_k_4_N?lt@FzPYQOh>O= z$h1W8#mvM~>@B%MU5Aw3uAlO#QIt*p+v)}N--yJ5J!za=H)gbtUT;Nr4&^lCrF zvP3-1l&fUfJ=gUf6&^6mcVRjXgRgWlu5nDboAHY!o~7E-(s7A0FU1MqphTIIwh#Aw zsh**>g8{!+_~SGKsrC9b0`0p$P6twsq7mcoendN(77eP1Mkmz{f%vK5(c3b#wV>5T zVseLLAiU2&!d*K_TAg1j{V{DpnguymlS36q#Z$p8Yf@LbWa|4*D#>y2)yq zAJe&dw1I5mvJP|;@u;@f$6Yb5U5resoN4okd2B{IkLFga>)rv|=*m$?ACG-LPZ%DS z6USR+QKwd&M^~-a!$S$YQT*d$f^g54j-5lu_8T#CyOY|;T&Lh1N;#SnX;AYV=dS8Ky3zd+ErAD)E5W|KGpFU4(%b1Gr z_^rjE8lkidNg4bgiBDUzOqD@%iZNVYn|MlLdd>d3!A!lF%Os;hy@Kxb^3uJ@g3z)+xt6W_cxs2U$L~z zQ-?3|@sGe?hp(d+Oc}w8FUD>H;7H0jd7+AUJ*Zj9mulNGiWy6Bi6LU0gXu|WC!erz z#~2jEgZViBP0h#W)y`^=fTM+f_MP?VMqg*q3QDe~@f1wVdB`nUb#JbPMCN>FX5@^@ zDpjg>XiW`d`o6zq}w652OsN1n)8qDox07>-L62>Q>9q(-qF<6~Nq)p)LTR)TsqK0XmBt zKID0R0B_%8m^k*w8{St2LTwt}AF2TSsvEx_wNLH5ryX2G=3_ zpX1L5Sf2zGh?jj#enw0G=N|)A4e-7KkyC{B&jv?7_c?&CA4snF?(&~a%Lr74F`ig5 z16LjUv1-cy_-yyj?9(2zTB`rYEB}wB{@d67Kj5x@G!8T;dfAA6p%A#lJ% z|GWAB;p)K{U&Lcue`@bHPqub-#lKr~Z)EI@x!a zXm9~&XL{lv6Rq0ym1Ryplv1jPJ*DpLZs0ApMdSwx4MZ{C9hOVuE5F2w{qVN}Vi0H` zh;?8g%jmEtx&8j1Wuz&3&->o`vp&vgv&*)Mu$gd0a z+ZKo}@Bd^s#MTDVBM8W*Dp@MOFi9?AdK2(?>Y6{%>?i2_A)tco==S2O?m5l(TWo*E5v+j(P z(S0JLkUkAn*K9;C;;h{HebL>ybB6Q%;n5@I52iOpCB%=vDb-ci(?bQ$2rfccXVbi8 z)oUDw_jOPgrTGi%N?&%xZET(9xCA{1@a__)s7yzu+-j-H^=I4K%Kf*=-))uh#^lx& z&YV0+boQ?LImZV0!=SsW@z_(p{1P-Nn%M;J16_{QM((I?EZ}CZ@P47oCj-JS6R!bp zAjf-$ZG1LoMD^Z*_7+-CD%Yp$0cpe7ML+;p2%n)Mw##nc#kfWYtEn-Z|NGtv=^;8gpYDihoD}OZU#)YcZDjvcWPDmIL z9RTTt9EbRN#v`fg%qkl>C;v4K`M(a~|NYOPmDBltb9o)Qq2^3AX$sB-qyFf=3QHTmB%;jqouNYq6YS2J`1R8yvr{Ho@K1wr5k7%Wu55PEi4a~L zbS{H?Dn0QZEXH3ZUtfCOnOymy`|ulz&QxOvRai+Yc@d}!2%tV8z>^PQ)To5%JVCc3 zrg=;`X%Z+uN|QNti)U*kMNqMccx~oJjFXAXyPe(lY|~|oUzEg?kvjXb z=7nG7=Sj1b%e9L@@n%C?O)CzdR!35(>lLzwRK(=3+A_hyQuHI4@6S5E6u>ye8l1ik zB$Sx!O9wBNhN5Aj$h1>SZcDI8+CT644=r7I`Mz#e?9yj_zaZzvj4KkLS^Coso(tTj zT2WVA7WXBD;uxzg#iv(s^khZq%H5R(B&kBCzfk4E+`yz>Tj%u!GQFEd*^W*O%vc@8 zG4R13G2%~g&H8p^VJwC>;`&xDK%gckin@L+WLhEK#lt4;2N(DCIY5)qBtV?)I9$^~ z--uk9N$7nKQ3n(`?v%!*m6i>KLZqh|4%*s&Qbvm|AwSra>**XDMy!>Z{IRXWUb4MsFl*WCgX@mrg#Jb(n$6=F#2 zz;6}}I!0sgT!eHYzP4!X`^b$`WIn6~`NNbXT=0fW$8|qE3anHDa49#BeVer)KA(=Z zm*#oaQ87)h(%w-lFp#09TxysNEksh6pZO{^&7@p@E9`@u)V%Wtn)IXImh}b@4!>PG z{phm`>*ko1oo9O(#_W;})1m`2np;Rb-`pz&V$3Odz${q9VW1dH8$p6od}b@onqMpe-n8}Fpx>-ocBl$TZ*E}TdUh(<%5&?!L^MPJW{Q-09XseOV(PJ|=yoE(o5mn?k z8NVn|4tG*4pns1gKo#+Fv4DoK1Hl|#P6`8N8@F#W89OZ@Jud;$W`Rq&;x6+hWJgTb z;_X?34As7wcKw93$#mg@3a1wCr0rFj98rF*^I2*AU$afPLOq>L$zM1y44v4RW$6axEMaYbl+uKKqNp*AT_RXFv^_y8douzfOJ{ka^Qu< z1CW>NoXTgvdTGb|cj=jBQBIT{!p`_+uOg3E*%P7UucnnShaTtfI)Ic9CKdFtB{H3s zBbFoIg3mvdKIQjhPm7hUvk_v`pt0rM$kh&O#@GF%V|;oYP>uUvk4?({bhygC=h2w= z^ts_``3FWdwilC|u*PeTXa~ta5HJHU?@4yZb2{eFvTM4s;Jd!k7iEJT?(cjNbhDoLre9&V>ZvNlK9U0TyQvSl z5!|$%6t4$>ftQ?&Wn%Olq}zu13DmHFy4K>y_Nobo{2JBb?t2q*7*r}9F;F(+spJOd zyCfO9%fK9!G@Hz=GtZx^AYW!0Cu{%;12tcJ!0Kg@)+;)_%NaLF*rLh>rAV+z@|o0L zy89G=&zqW&&+OXE&LI|k`GpGOuRkR*_10Unc<)U|yyYsqOwOSdH7+-kb{-bYBfp6O z#stY@RvM0N`*h~yOL6qj zy_Gd=TWQ;74|JkvId$hGFbOus#q0_rMMqo?aoBRF$ZDqoHD zy`1N8qz2^TkH-v{2Y>Cz?w1Uj7 z`Kz3}O+i0dZv7h|NwIU3X4(`cNY6m40r|dO2?r7CP`+q7Inoh|9uw|~l2XBN*a873 z%DBvgJAh~^kE)%_>nO4$CS0v#Kc{#OU+glOMZyxI(p~NWtzuZ~hqErD^Xe!A3yZqB zvmj%Pzt$^nrUtKyO~RdsXqqu8i#S{o=T(*rgwJFTehtfFAGWi>|Jz!+Hk}qP~|L%+$V43BSJ5pCX-70UF=yD9NTZ zN&|T*rN&uPjw@9{0lNIjZVz`MBV}4|sUbuPZTMFXm^@Ax9{6mNj zs&C;?DMD>sf6n7<&_kr*8VzIssz$P_i-oD9i69 z%zsL&{)nz*yY|sio2R)&&uC)uP%+GkyG9AHoS4P8;+Pi~CnqU85A!8n4D(Z2L^hg_|Vvo-}iUr&2C=c|y^5{lJ0 z$r{J=f$QE!Ul+IfqszKm6Mz8IZ<^k>rgZDf3qadK?pxiINpLsMBZtQTE(u-+R7p-V zUBsNqh(xOL3iVQRSxIspSD>@m4#~0}rHw;bhPbp-c7u6I%hgj;XP4V(NNa)suPihK zPTm6=z+~ZD$4~Eih5~~`U&ha9a<+c-$EE82UU>LXgzV|fLx-O!z2DI=J4q*5>Hh2y ztCt|wb0JEJx~`g3`}8Gt2D{c*12+{WQ0emfPTF_-g7hWG0G}mQFlF~A6GC++G9f{puA2av1 z4w6PNoClP=M|PfI7T$3=Nvi;(kh-}+AnthW#zYH(50VtHg6PvMZS;GAhQI{!{~u7~ zzp(*NY3Oche@xYQqx|yJzK73JY7?{*AG0dm8>K6ExcXf}v_TY#e1`nee46V^qkw;g z#;$h|BB49-1nm3HIoA0`p}r>#Xysc`%+_b4%Y@!n0CP;p(nxL@&F0;uO5b8uZN~~n zY-7u;iHdBibP8X(|Ac~JjVr=bE5uV|3Xo*487717d%bPEyBinVzvH$(|7DZFAJjQV z`o>x$-KtC7%D_#Xbd=^FbrN5$wHxR+Cr^&}OOo|F99?^OoC_Q}{jn8&(yWBk3Oqss zy4=|I7IEd{?Bp>;>us78glUAf9bRXCU>%aH00^i7-EC`7FuP~vmkL$_AD}Ltbwxti z(q$g;Yb1*l*fChOqgPS2I>)5Rh|dV}aZo8YZbc?>lj}9hzgfcn$EiKLFPV>Ek?hm+ z3(9XzcAd_#=>Qs_Se3RB{Q>fge|q)*VedV|n%eR=&?6QEL{vls1XL6R1OzG4u^2dM!?Bc$#y)&FR7?qm;XnlV4(MZl*!-{x>rUq_y zohW}PJoyODmVur=e@(yGV}AnfD9@)4`v%ozDM_s+MO}!Ld)eH}zY4M!uOu@Kq|BkC zofv1319-9i>PL6i4?ST%91PhyB$d%ULe8os?47sHh{RtPy}6lK`X+if!+9AZ`FIV~ zgoV$Lj)4tbl1OC5@!QGXnog$Pq?P-9)8lWlP1TabJ0v6VQwBVQvS~|Ff96xONl(;E z4)p{ni4-rAl{VJ|a5QQ*Ai_-d&pCf=^t*>mI5!yw#MRDxKlk*s4tUo+h+ulGowLu| z;pDg01xqr+o_$bYLYmvkZShefb;7+nd<7i{9E}L<>kX*dRU;FJS|Se$s%+)yXHAcm z3-g`;oD(piMiv}hznhfa#rCxYdKfe1cA9fZ)Dl)&ztRc_v_T1Di23fP3QVNnQ-IKfoxfQu(O3yQToe&^3sHcRzC(73@>`ofIe-)qw_883)0fR=T?msV>3xZC z^PqS;Wt0yY?-jV&n5jc(q(Svs>S0$Gs-iW614W|tg9;qw6m^aI10`gBP}npHImQfj zcemaS@`)D<5AS~3R8YK*<}N1=mM3=HPmAqldGsag?edJK{iHcW;%({BHRU}c#00tb zNV9UJ4_(OoP@m`Zn&Xa7e${agb8%U3IK@kudP9fA5S1CmCDY?aBXu_|l?fx4WP93< zC92zM<^@5wS8~3DM_Axovl~ENf3$?mhP9iSnFUGQEa_;{;BcA` z=X8<*T1C>OjQOj`~;7=tb=~^EyKH2-aVPg78}`w;ktLP0<$&)l;-UaDHR0DDs?3Jy~V0SMf2xON1XfJ zDDRz$yFupkIJ>xf6Z)SkJP&J$?vX!=cTDWkJ4I|W(Q6LILVoJm08EE{h{{9zmqkJ_H z5eMJo?3aGcY0L~O<-JEUikw1vSN4oS!1V?lN>mrAEn^j3h&=J6KGE(=mDO_>i3m$* zep6%OyU6n{yE}U26Wiyy${rX2F!KJX%lf?CZBs8FMO1Dz!Extu^~D7t=$qVmWDHt$ zcCeG}7(1}aqY8_`&ezx1r>YpAa&Ge^9Dr~(x9;H>1u)v(uF+YGukRj_(88-8s;a5m zzv{DDKM@ZK&*L!}L59*>hSI8Z5tAq-%+Z49O?=%FMg;hT8H@XE`#ty+1TICU@%Ldp zEB1|d1ugH-ZxNaPi){R=2#}4lkj9U^kmG`Atf=f?CswQ}vptiC4r{oLMTOuqo4Ti( z420w_JWgt*w2KX6-d5Yj92lREdWPPRA8jIp!BN{^r-k-a^g7P8>F zmE^IKMt!kPMqS|Jo5Tn=c(@+4uIlOR@Z`z6s;c6(6Dt#s+zEcP^l$9VMOLKKiaHv~ zhsjy-2aj5q4Wu{f_kKZT)?+&|_v`@WIHj97?5-y3!t4%8e7FXyM8Rb0N7r{w z9H9RtSr{6Cg-7zV6k;C+@bT-~hi`JHR6L>)7KE40$z&Qx4^C@YGlmWUIry`0h0!Kc zg2nP`8GF_jz1DEYqajW6d&U$Es*g$z^;?&$=?-sw_*N!%ucnCcmf=il#yMU|?Y-lk zx{9as?6UI*dHp%y4TotMvY!V<7VwR;?JsKs^z~NZ+V752(}!B6rxTVEOo{U$jPMux zhl_U*21;1^1FS=c+U>Z`VFS@;8k zD?TbKDLKM*(Yc!bseONn+Jl&KTcCj-uv2}`CKCnhC|hN_QrvMxd%Kr;gSuG!weWC_ zy?zYjD2xJP=X#gFTPG_6w;sJGKKQi;11H}vz{7LQwqUJGCi#Z%yF>QT>p);Xh5s6~;WK#y*T(II#Dw_i@jk2{F9M^4(J9h0W)myf{ zsF);_Zo5<=5_qwU1tSLX#k|N20JEXM2t@Jha;OM$IiQJv7)Z0$Lh|XFcm@|)J@ELt z=z~eNX<+d`x_Md8H%t0m${NqEGb#b915b8ruQjnpbtO3#m|H`A-HR2moMqF8EW17> zb+5fc&s`;VFv25RgjnpRJ6n6zI*-g$vkI@IPrbYmFwg^MR?mN!mk}>bp=im#81vP5Q^gI(ace1?Hey)!|#=Iq-o{=qwE|2 z{sQd+zwsPrG|K*L9a3@=ti+36-K{HGb{PvWeIArstu!2X7*1v?5ke8%zHrbo!}Au~ z^`%z5;c$+Yc`DwjC6P?=NfYhJ7(E@AXjE8a-Ko01D`$ETiR!UIzu1kQH3-go`7>~a9e0rte9P7w7RE5F-#6C0voUnj|6;e+6efA|LtK@=OT0S$ zYheaaK+`_eyOs*8@_?(wU1s~&+TdTSv6|_FUEN&^XH3V(VV(%ZdyA^&!5N zNc+1_;HEkp^ah%mB%ez7zdIkKpOXI}zKW+P&&V?FRPPa5+9Lm%1dBE!E4mvcR-KKe z?}}tumIq?S@g?VcK`QTUXW8|_KgdiM8P6^ni}1Mb@z)O0qIY&NAI_0ccI?KZyUisp z>Op0-PR?||Ez+d|R4xj?T>c{_>zpUQJxA>tlWE6zqe*INaUCpxF@_fV0P^Gp#8GyY#ZZTL7jfXlAO%N-PPbWBC79W)uu4MSD z44FvF0n?zg?(*CPVPw^&eC!hT2FinCVjsCuQBvHpWlPz;+>oZy(05>%o#oVT6Xa4N zNI~jy>tq8}`{J>(xxnk|mP8QA8iJ2 zrZ}W7cbiYWnsUC98|S%lk6PLA6~&~Zl4nozM7;|!jh)tr+ozL@TW~S~{^LrcxPb?s z>t^Fzj%z;o-Qq)zM`08`IWG&KzDT^aoYW={zb zn{>L$czv2L>jGKz<+cXzLU%X==bn(hd`Z0Y254*S-H0FUFY<}pIJ7>mv5-$-Z?+yL zm=^p-3#*B}q%gXpiq1A<{9(RG)WgvrVaCKfXdCO&GDaE^7Tw0?_WJYJTgsIcVm8M- z!C7dzw^Y8xmdnp=b;&;}6=%77rR~Y|wb|)`67`l-Z!ZXPH){=T9z>wRHO$&71RNIng)MPe z0T;AF1fIWctt6X)gP6nUqY}{^lNOz$3`bhoKGy6HwwH05$+N*FT>zTd@W#fhuCm9r z0U<%WtD(52G~^-zQ#2rRI;Eix5p|Y+t~We1lIQhZ$5M`xZ zZ-lD!OuTjxS%GSQZ$Vlw(RX*!(gp#Y3fytc#4iVj)h*IiVdSHC^xe}d*SDOlmG2Vr z>6+u+I3*plO7M5WbFtwU1jU=trB*5+rT}qH*4WXJp{YIfWI%8ZcYZpuq~1TI5#Uc3 zB*l!t+mLEIpPm+1*g*5}cg5;Snq#i=ir*3r{SXB3>-)&3qp*Jtyf%eAv;9?3PR}p} zsyrTK-~46rhp6R-dBHFhp*b#2&#g)iX*)l9)O^j_Tu&&*#G_{XOpC5vsKhY4fV4}R zt4&BiaHN6KkqF>q<7(rQo0>t4DjnwJsunVwJ+N*>1}_jFyz22M#^H|EAt5AsvwUXF z>K7C2s)=We8(lQ&XqX_oK?@%E3+Z8Aon&;_?SNN@g2Re5CI##3>pRgbeGd-e6m{U%qOemIY*M@JX8La@zPhz1pkr# z_wsNGZ>GKv^)KjHmteO$k0aeE_hRMLds-`JZ&GbNSBi8~sH>cEV;$ql zPql1kU0=GZIn^j3uSPnZ?O7SeF%S0o=#J{RNA(lHs7NBJiA|-9hRs@W)va16#=>Ox zKBD|d-VshnRl|$IDZwy_VHN>0!_(ON(APzleT_QAzM6tV8$9ZXT+n-8HvD(x>Nqlb zr%H+a0{%xiqd%s1p-a$2NPdky-6>=^$V2$7lb|lDJu97rZPp47DXI0KkD5n|;8ehn#2XiD<7M$n%_isTunX!jf zXP@jRy1(r<-xZ8GGK(LaM5hy)Lf^E)K15B^Sv6SF4m#_XMnQ(}rk|ihbfEdMF5Fm> zQng*8joI$%n@W)pnX^kRIf_%mxiPv)JE$37rcG>Zj?LYBEurx04R57>BeJD4ob|WG zxk_+!$Aq=Y)2tPky8OUS^xMl3RbyUS0|jeyGk#DvXYec|Jjs^tYiX!wrL+n#JhJ@- zr~TGYy~rGQYSUxYl}(28#m+^CrdO4+KI7oD9Su}wx}qoH#+VWfjF!JkaYDk)a9ciC z6OZdc<#Wr|HQI8OH)2fG3m&hQb6=@;SmOrPl3`j`AFsHWz2T3@*2 zGPI!Ai4&_jlw<;(r(=U)tcG1iAW<*<{K_CLQ8Dz9N=dHWTAn66^6|9a_v3t~gQ9aF zbp)8ZQ>e5(JK^|qjGJZXFjjnN8hsX)%i4?IPlb4~x+`WsSW}@U;!W|PB64w}dm(^K zp>FmSNtc$+GM*d5=|n$Ph)hc)VTo{CkboLMMe$fXb@vLx<+4F~U4}4=R^OB0hr%8t zdkDc%^ZFRU5X`j6PQT2<=lA{Mp}0bF`3WX%?e%x+OqV*68ABKgekpbOtwngT%Cbd`?W^aicYNY86!el2awGA9scnCyqko~vLZqtD}b{!*r^mw5WifFygb(0E@Tzd30QFExmZ>so& zyN6BDkaNrPkUSJe_Vpz;MEM=#?T!qQ!BuAlG~E2gc8U5EbfV*ML~79Y3?T7nDx6<@!(&G;U`s)|8jGouU9_Y6^d6WTY&U3NwaUj?(X zYu`)SnofL0K)z8;d4I!*}`?tq9` zuCcNA2RX8}=Zi09qzCD|#6*Ktwa>N@h1e_Pck@vAr&R};kM+3V`R71{zyQSM(Icts^Hi_nKk1g%t7|!z)0OxEw@0%Cn z0*S@e7yDrbLvoWfl`AQ`IGH*Ef&B2dqPPZg@Y5n;-sSb??=qLauW-B+0uIdeW{$05 zOJwh6H8fnCH`9A|9~qtNW88n*T~Ie(+_b7SDV|vaV(VCGPQcnTm&V^;6OL#Ux~xE) zBf8Tw&=m%e8O+PYqc+4ONTCaA1Eyr8#MoMl2_@&7saQL*gJxzsF0oeuLQrItkqCTN@7 z%lZZSMOGgA`st})!IqtkRSeeaX$QPEHUvfv3%SsQz`fGt4H0pqqooahy@>YO5!4*R z^=8HMeV-gKZ__)E2!%xPX-}YDbkm*L?e9cu?68I=TXArgJ-tJuB1biR{rvLU>{eD)`o#2n(83=l)$Io$2vvSqZ0aYp8ay;T+0gTgRW_Sa z4k+KwC5pZ;nnm-(rn6QSEjJZW<#G%?v=rivNy838yXZ_^xn=j$8jlL zkTo@-0X)U@F?U_m_!NJtQt3LP_lb#^7g3aCX7Q0k$C%LyIhrKq5-_9t!nUhNl8Mz- zh_IbuT79UWM36oUgF1&}DIS}%@2IAKV|I@g(SgDZU+P8k6LqlLVNmY=T9680Ax*%G z@o7M2^e}M1o)mTpGwsPt99VR)uvMPQM8hxPE@1S@shZT_FPc`;jvrVF7)3qIS(pD{h0?{$icV*hqc?N>cnz+ z;Q4W>2ubKKaE@u+ft6?8Pj)fPKJ_+e0nUxj(d6$$Cr3POXvbM}nY|GBZJCNx_Nswq zmd*Uc5LNLVJ9g}BX>ge;hx<0Y^cN7Baoc!{RC(frMp{3w#q`8rjaxoD-OPQIxzB+^ zhZ;LSHau-wF7B$(j-Ya9LR)rEv5PMtpq%7}HU~&cIH$qlYaaVt-3-4R!@?%HU!M0) z`l=D`H%7mlhzQHL~5%l4^(le8W7nRFcavdAsU)+8IfAE$(fZ?4hX# z6L(=xEpQcLx26JY`ipMvwO4yv>*+*)t0(y46&{(P9w9(B_>a~X?S}gRwS@2jQK^u7 z*puih)O4GXPbi078lqaY`8du{`upS9D{eZEae+g|Y07y==0@7qH$8`r3`8X9J)@jq z%yF>?{_Mrswb!p7JX8*d>wK|L5{mPCe$I8MEp=gmYzYc^gk`83VKrmKpT^whz`%ZL z?RoJQw~djk;2p@qVS0GoqVKwu;o>F>5jgr^+TI}BWbHI+riT%1r4o9 zsGdXB_~s>hZ*Mo@vYebVq&B%~!*Dl-1x&A8-g^?MB|n0;lDpEryxgA_*Kzc>``^~v zdoxF5r-FZAE&lx@JT!00JU@xrYIN9PzL8-e=<~?xoix>Lw-NvqYeTrx8t01R73*hR zMo4InjR6LSjmF~xMQMwVw(s&Zm5x=6F)OELR^>*0=X6~a)2ni*RC1NEbjd3H3eJ2CR|*O zsg~yf=3s9Ya4t1G$f&!&ZGQJpd5;#HY0dxf)4rD%lIEG>qD69<((U-b{*TqMm-moQ z(C`^V`b@EMoZ@pC@_4l>C4?05xDE@%>a@MYac*GmEica}59DputD||3k3H7NHh1nk z3vu5v?i`#wm(GgjPequP*bLtR+w3{kR`}K{hE#)T@e}Mu_rR7I^`)inPNF`Ih^vA` z?4!D^gT>$o2-4_ocYfP?jpdB#@4vKH$~)?dg~4SZ8IFy(QWF88s;z(=<5In04Dig%QiQ(!w491)GcIe%MWBCd7nLNFOu%s&pXnSC#>r0$;Y2-`SO> zX}wwh1$J@CRU3jkenLZ$qr(0rdW~>eui{B!>xS)nJSQ6?Z;XkQf?sUj%6ejxi1Swu zlq{t*NNC2gZi)B9x##pL*8PRWO^wT}$6j{g|TeB&r*(rMyq(AbrmT;P9g;;C9sFb6RW$rDB zzhCXQvY(1-LPJwhuJw&k*QwK|pYbQc7n@wx$9`eY&<^^#zL4*pUt ze7`zdi1YH+Ss!Fcc)Niwe(y{KJN=}!R6d>z+|pvzk9VipG@JH@rRabd?b$0s{oD@sJs>r4g z^5)Gk`hI52dhDocAdR)P+4AR?57~|g5l&+~Wif%lZqsnxsk^qFq4w;IW%MJs)c$vPgGQx;jn^EVlP z-*A-AkJ7cAlsf{Jm}j4GQ@2MNDI74{u|C-R@GtX%28Ux8**KF_epe=6Lu${*#!J(nEFb+_^M4zx{vx!oP}a{&n|+ zpG>Ly*#hq`3!fI1_b8v%;oJkIu`2(N(fw;P=D%IUwmQi8-gW7CC;Y?D_b_Li`LWsIxT+aZa#q|+hP7Mwo~W-JE!MA z%|{AoJrUrfH!MHb4E^KrMBM;&Z(3QK;h*jVfBes1Zt>qgxV@(}3I|ueLrfAj{h^!v z*TGNGIDE_%d9pM%=zpH~H7E-1s`*cp?SHv1En094jruO`81|Qc{LeT0uTRE{0R>}F`YPZ{(9}_ciRMW zk;lJ3f1)0-3zWhNf+^0`j4Ca*SYuqUaBHd3dN0g znxtI6`5{HUCTSl>kpoU2`*Tv&(9UEm%=r564uZvUKGAgeho}5Trk4&gJq>;FV^V$k z)(i;Bxlp5yd}aCP9IWDg-l}>DxO@1tWz4*M<&QNpi8r;Jx;a`Ys{ea?@4szcf2?fY z4#&S8)9JP9Z8p377vq&{jt8kahE&Fz|M=XWxAY@_bl(AR#shn!2k9NOoNfW+SO>F9 zbMN!^*2uMT4QP;ey<%{bUCM^6E7ow3nmTIZA$&kc$wwFmE!z-S6sfthw3XJph9#C(s-tBTR+61gBIcJoA5!=1H_cPB!Ut%ubO zN){r^$}X86A7?G-#}p)JvV+rMzaxM>EFo5|wRT^=ZjJ&%jBG#CUzT*=Wh zmqDj;(w^e_pdgr9T}jRgP;v4q*hoRSSk01|Vs`P$aeV z2r4!C$aQC^vkt8BTeRv5P1ig?K5nQ7xxai@vY>7Jb&J1hxWYy8Xl835g@Hx zO0!Gpbex3kC3w}6hNZg>%mS*%yy_iLI?Toe^eDwQ=@+nygbHWZ_w~_}6|`(xzTY`L zwsTvPN>xQfNCS3rgJsv*HzUf2Pqne0f_!p?!fDwTH;(S$RvNHM&13aS3(@Y*R*myQ za`z`5M`W~zx!itR45Qk=eo`N`?rS^18Qgz26N+SK`|MKYn z%{Yzjr;2n~^Nz1MsfMfxPHbAP%jT4ROsbNVj=r{l(8eXhHgEDQc)BBB7RKBj#S8>Z zgz*eNuOp;MmVBxrt3KZxrZx!|9#LC5jG7k)$jT&W<4<}w7(2=xuYu(xbMNwn#QM{S z+YAz3;+(7H4lnL;ix$W2UuTO{kYAWdPLsyX`>9V4)f1%Fg;$E*apvX3Fx^|Z%^&d+ z3{-DCw%B*7Z0|GS7nO)0DNf|Y@ z%eD#Pj#Z2h3}A9BL<7#lO88kOvhK@W-5%oSybDn?W+Iq_;}>A{>3xr=w$Hj{FA`N|xqI=7`@++e(0ZN^ zq-r#FWoj${Ai>f$Hma$HSMpFpFtWDD)B6lGM`;VN5_ZGqlHp>t<2`^e8CiO-*iKiQ zl!U{!j1bT|c4h9bXRZy3dhKRyUhvs&!#WC@lpEiMtyf+(j4zCDPPQx4va6b9P)oC? zud3c8oCYY^?COg7IRNks+1IV8=;rV*jSU;?KHzbkeA@vc>upO^_WC)lZHj>#txJdD2C?$!lD*_r8l;(H^uLKI!I70HlNE)kah*r0syT6JnA^0NM2Y(Y{C}DUz#jzJ!3o! zU*IggcGC?CPuLgu@S8G0zthM7q~JZBFS$U@JYLMYwkjpEHqtwhHNgYD4nw=2dt_>dx#aSI@2yDm>Nnnb+-o2VZUNawrX| zAvUn%qUGLt`_|<)76GV&6J6(E$_}StYK1jHNZ9w6II+-O64WmA+qY1M_}-z-mc)ES z<&!){h>PvQuoyD143Uv))>s9jUO>>Zm157L5HrxF=9czStkH-SMme;qQmS0XY*m7% zZfQ7aB{b8n`gxO;w7H>8P@l?DPicQ$av{NMfSOcZvVqY7x8KlG+$m0$Wt89XFzi1x{K`UW8ICP+`SlRBXc5) z8PpPZ&jC9tQcXoLFnZQiE-Yk?e0GN(q<_yfI9%a3@S)m&@7b0+kdGP!1j}|y?+~+T zL;ztN8p~|*O$D$%=3X?(2U8Te@3lc2Q$jL7?LlTT>(eHk{z(agBmDLgRWXVZffA9>Tb6|0{%XPVb{6mVn7c8z zx0uA)C_>CY(=HH955BfQU+aH~Efz2c(`7P_kuI`6*PG=x|3PUUoBh#)(tQMF3p`EQ z9;re-Y|l5QPI30W@VVhmjN0_IX$O~i+(+L+T=6j`z22AG28|%beIb34 zA2^NPc5ZQk8=5k&XH_e$cAqb@d{zm%MeEmTFeOcz)2yW{w9-QZ!)d10v1GD?fh45` z$#WOH+!sI-cz~$iUu2fiDw-^qA}}m7%E-+8g($>)6#2uo<=ze{#|zK{9(%fotUKPO z4Z%%x>0K^5kYL$1MbMtD-zt6zY5|Q5$Ok|{JLR^;Ah+3`x$V&wb%Sd>QwG&`ZQCf7B93Pqw42lNcG2u84I5YV zE$Ub`uxsuGl8W}{;``){xtWj7Jk-**Y^>1LsvcKAbJ zs~woGfzyQ?d6_3fm=vo#K(GazLzc}|tcclH8B$v~U?J?Tj0oXNE@`rm?Olwx_U+rp z0ei@6vM=|j+-HH$a-PeVLl|d#>EcTX1z3G?`wKugu+&df;g`R+tsR~F&^{v)G-Spr z!ZlZXz{BI-x-}|A*~XE|>-smzWk_acHInCM41>8@JZX!$eQK<}-6gA2noWKD#sdr! zE9-esP!|@`fn2O%S*iZXlcjuHop$fnw_}cvuhTFHjt5rAZz*`szxT<@J2q>@vG`nU zM|8h#H?^#2qlux)6=F6Wb)p4oHshB!yXFNA=eBrh5D=U;Ge}YE{JBbG(Rp8&U6rT* zJCkzSXRl=)iTf;CYxh?)S$E)gk}F9}F2DkT>@1FPErW_L=#Y0Y z4u;h}!OUhGv#FC$wV&)9b%pUsA3)SebK9U+cUChFpChPEYohZWE%CWg#)%7h#Z;sn zII8obK8ozi*bvOl?*vi8t(S9Ze%tpYu`tEd3H$!0|Ky0!n{ZGiVimI&02vBdSCPDo zzgUi_9)VS&w_7Pq(n#68D2O6QCz6AyjODIUNYbJU`?z~=`=m46=`yJqkCQHS9-gis z=6qdCHBMx$xJ2Cwv|nv{Phx_|kS}TbZ}InA$3NmY_5#;Xz7o?E=WMXB4w?s1nNO=8gA8l9z>6DFMqBtz1#NL6|2O5 zLFi#ov*2FaLhYhCy^hP=^OCDa>6rNM=USDO>7sTmyX@Cr>M!Z@n^*@)FmO7}4}BFR z50--cqNPv>cF8~Fj4)I2{s|(p{qqF0kMAe5)CSy`p z^1dg>chZjQ=jvPAQ$(!8_BzL)hP9Pm-Iig9Af=Ummf1 zhjn&vHX*|A1%npKe-I}<6(_uU?uf4At9+w*1SUMGyLV(Q>oEy1C+|$L=-TQZ-0p-A zUEaDnM%RX&cWA@m9$yGRb@)LpkE*v5r_i7I=(9XWn(D3CoM~1hlEn@UjH}A*| z4Tm^fSKrHf9iOAiNw=b2&>vA!)XrUO$Vr_OrOfX%x% zTN6;|9j{GKu3lWwxT*Y)1A1q@yh8Q>=6tp~CqA8&q|9LS<8BBv94{Syky~mxm9b)d z{wV#f)#M_|9;K|4Gx%J?1apX<3n|Lfp>UK`xUyz%2?XP^i zqyOuwBgS})^lAzm9Yjg%w(&taIvDXb8PPEL#iXQs^-}^yrlk3uXTTxHNHBzKN-ed! zw^L4&UfESFZm%rd6eGY4TTpHLMM11^VRkos)5z|M_Zl!y!w_zmP_NFOAKAHP1X)l9 z$YjW%C$5c{%Kdi!l=~6spWKEN!4g{Ks{2m!6-|-Vz{7M(MNP2$R(w-efg2awGnd5Y z0LuE%TVHHBTD&%3F)#^Gfgn$&zP$y3ChsWVu+TK0>KidB<-w~(-PJUg?zZpDd0&`A zS8S!_(#I@ld{M#(nqTO-v3UFiQiHH?Y0SqjWX=0v?n}HeJ^6cWrSdf&5>E6??({-; zp>Ge;ps>+cK7G>vA_HI9KuJG^^U~M9>QdaORO>V6+)R z-%O{3ld5`2lTq-~&l(`Gm8k^x9C}psa=t7QkxgU_84?T&Q`E()s||25wvo@ClhZjw zKQq;;*>I@?3{F~V`gB`|mN{pCX%OHm4O$w#nEfTBhP=5`p}e1Q5d#5Ah0U22P8&rh zBjO%4E8E~Eb6O6m;pq4Ew#o`9I7v+Q9j_l+cNa7_n|wzt%TbtY6IxF4YK^T{b$7C! z9?0|(gWaFr%Jy%(Dg=8*I>h2T?`QH*L0$YOODybOiACPMf^s{13QCQNZCSR>m2jNw4QSuRm5PQi|uE*y*&8AG8`Lud|1KX~8H%AjY96 z<>z^Zk_#RT9I%v{-Vz&?@M+`CJMN^Jvw(N=7JsI5v?M#$<3%R+3-fBY#0a@r5~0}b zmxg$l%e1X|@9bc2FuSa9*ed`?XcZquWdoIZi3Vk_9FCHZFU5K$iR%tS$AxKLWIrXc zDw*gaaW;IYjUsrWkrBpXrD;Hx1I$JHSTd zqJY3n?pV?!pp661p>d;gwzyHeq}b@rb~g8d9aRtF6f?5`#bd78VKhZDhD=X;IPcs% z8?w9+0us**N*6D2WdGp>z%wwJFl5Lgl^SCGn##mcbpyV%)I2-*7`u*BtA6SzG{up8 z6QunVNgHe9u=5}gn~X6i0Q`ZZaj(r(?-s#Xix{@pb}BmP=b8=aqgbE(0byZb!mooPAEv$Sa_q3m{&J3;oY z@bxG3k5K-3Mm%%h5U++FWpU}Qmptjc9c$rJvl*`wR5e=>bg@(G8^qosHq@0QXsdYh z`=Doh;pfaxx%2uD;9y^@n9=U0o!8&-7}@n*-vET+NcRL{L)-JL?P>XqwbE)Qam&+2 z9Wi0~9RtzjF4goc%%{$Hjwg1inYqZ`88O|`zTcff0@}6&5HYs1Lztf|rg%Qib`ugA zgYG!kPnX!9a~bh0CUY;XClmr{nUWo1o~ zGCSV^$PT;SF)L-ir_Wl?X29YAo(L3a1I{uFi2b(172P{dQ|ElG7kp2%+F?kY{lpCS z1%|8d$>6c*i=H9=J}}FMnqN%#i>Kem*G>sG8A=5@e{YbMPe9*h-%n< z5%jEhwt2X~(Lv_0=#io3mwl9-4U?SYhW2s(xr~xQ4Cn-XvNPf=C#q{8)#x!(8r5_A z>1u1QuV2e;h5@}o8pp>X>Q!N;GNATq^@}K8b}_WkdVljm27%Yfa%b zeMkU*FKPuuT(5`zqG<$NL*g9Tn0(uSNIX+t%pPSeW8V>*;P9cj(mLmZaY$2u@&>$O zOau54n4=ov`PP{_(Uk}QZaUO%P7mpf*z zGVd$cu`|y>{^r+ky+IdUF2C6jD{5APOMOfNoGmkX*>mvZ?RkJr6cVrF5H8o{_j&ys z=(U%caLrubto$K@(c9<1QFAja->}$;@r##UTPQ5EWp*U3R*F9}uGfl!9DKP#YNqEePbe~ZnID|j>{_5vsicEAT|_2fM^UcV_De_=WFDfo@YVjr!f z((d(M`_jw_c2l3p$J}LjYrOx`)yc|`s;KECv=ZpGj9Pa`6v@U;z4y+0f-fj=cuK6= zufdi7l&RZ@d2XK6Af|5ocTMrp)?;_nRSKC;uyMl84Ug&m7To-6V?=@XfR9RN4B~J? z7!@GxeK0BVIf!2CeB^PG<>CA6q>5z#wnT-&-~HVrP1PJ1NQ!^cKsnY z2`^@)Op|*n$NYp!dWw#)$U+KoUlW2JyNCsa1PLBDa&`SQqiY#2G?Lt9Ot|ti5pTb&tQCN)6CO*0^JiVdfMNgsOTu-gaiZc{_M}G(;hf;wT;K(YbscWy~nAP zLO7y8DZQYtswDRNhQiFMs^W8~n5Rc3&K99A+!y&wjM&^v|F3rab|uL)Y_; z{I3}j|M&C%_wfIDO8sar>HntQ|F2&>@6ns(g%Z+~BsGEB~1xG=G* z?!)p|F#gZ=>OWxk846%Q&G;o&^Jl*F7aS+j_-q+1(+w5m*W-Wr*Pr=gOoE`PNy{^J z;D7x7FyH}_Zof7Cxw`+)x|Giluoz!4I#T^_FVjAIz#xTw{3`rEUOl+`(aO32$$t>( z{%*wn>4&@|zfJPPzH>!hgNr`(t42_!HhS{>HcH-{C|J#43^SKf7;hVW&h5@pZ0E4`9aNcd(UkUB}tUyd{! z)!LPb^3YlRl@xwS4Xo`iZY=y6iuAX)>+Qg}(P6-;Y-eW|Hm-QS`?Cg#|M$dHFzwt4w1+h_+dX^}zR>h+yOb+wca_Kir1n?6(s4HFvk|d`d)? zHkWd10i|Z&v}_9XtS^ly@qk)yM}$k^_@%wk@~#8>4KsH=!^FG&MDzZv&*-*HmtV`LG4rd6hfce+xH1v;TdT~m0;wamrHq9b?j zwS~T%6V{NGyG=z!rR+YavDVVwF3g!3Z5jd+xG#6Q0p#WbceFL%L7RaB&F|k=DVJaK zX3gIv19Xyy-pQjLusah%V!Q7Fw(rULf{|^xYvxHD7;3Lw0Fg&2kL1zi=lC2}y zVvEA%kFeX+4|{uiPreAG;0Pta^qs$ zbLx&ZHZ?`frn^`5wPTj}HM6bca#ODRR&X=t;fza$KY|qG#N!9pT5s~U=;oAQy2>?C zSHH)V9sYHujhwvX=FllI-H~(bQdA9>dKE95_~g#g!|?smiCAS|f!o1hL;{N8k8(T4 z<{bun)T&;?y(d&Jk>>ahsQ|j2QG9zprjmTLk<*@&msO)T-J1ezc1GV+4hL3U* zsjpIIE+I>Rxyhc$)%Kl9!}e%fL*S8kDAY)?&E=n1#M|RvpR_S9|4Ji9R6e97U#b91 zn-5bT$#T0RAp#6YZz5C3;vS{X1Z^9nU+#U!2{5yr^*Wb}7h4*V zgTpA~d4V*+&)Shgr!;ZfGfVJ7dJ(1xWVQJ_-q43tujT@!;CiIlAs50Re(egjlo)xz zblytB82+k>QPd$fx@A5%@viuSv7qnf*jX1GBtkV=a*x`6K^E#H{EC)NsAg6@rWDp7 z2#*tV{MB=7(R3fh^+0EccWecm?xmlrPVI2s3)Ijiyra3Jd)n6I~-*_6AvKBW3wx94W%H#tT8x8{BzNo}A( zG53}hk*g%$PbyK?qJh^=^+b_4`rmT4vQ;ZJUv8~`DPmK6eQ9t7PyS*JCl=@8MAxQ4z7&S3$ zsx9ssrp$6hhwThRJhI*g+HW8qg-r(Q=_W8m6~BWQ_|l%pQ@8y1@%u>*2*wTnX`*)K z@QP>E^XKv`?n`Go{bkxCOJGV}u@1b3)O)|}6+(A_ys`a`gKCoR8`6a*ATURN;vMj_ zY9vI;mZ%q|^JJM=D^3FQ(;k{%k^%eh2uHuslMh(|I)S^p87x4BduOWE#C-pfei~WT zHiGVOjaril#CTJJP~Z9U}NJpz)?2(>sfiC6DY9kCz3N}-?-dm#{R6Ala+#TP&axkD~;an67e z5eBSTSGy0|6GIx#zRH;)3hf-ACY3l1=no{Km8>p&Ew>kR*c|U@7?|fJeB4=e2W;Ej z-*u}0rKU)^;=Sko?l&(O(?D4ZpNKQ`D)phvsL!#_-FMR!X*D%SuXO}4bKR`Q zNTX~&QLBe0qD~9L;gF0*@BP#lB_(@dg*N?VU-WTP$Gt7{z!;F0}!+bwo*K;q=^ZI@7>wfOvzh8gZXU@-gp6~T|AII~Zi#H?s#=OQ? z%FIelOmwZVhP?=fjQl=& zH$n!#-wws0pjqxR6mQ&))$?yZnO#$;E};Fv1azQ<0&!RPIv7sSF7i$M1chRg7d({3&Tv^iYox=-IQ1+5r}c6RxfmJumpXdTUYrE>jzySsp)rJbYIGJ79Qv zpmIBS=(9It;40IHCnNGP)U!`|?OjtdM}qVA4q{UilO%?-BF3DMw~Avt2dFt{p)Hk0 zoc-%9O2UEFNKx~#G{d;;KYG}oeg&&bjf<-b47}{5>-#3=N&p6sB+WfpYx3cEd{{6_ z(MlxQ6@!D$2L~DbV$YcnA$`owZsgP+5Uga*6bRnXzmR*d(w)^)>Et+V1;9VGpdJA6 zYwR!HJu#*GKzGvo*Mz}*j01h|fz-l$Kz(dns%I++f3X=L=kni=pg0f?8|hzIj~~B= zF=YNtVa9CJ+s!{qHk;fAFp`q=d|p1GNBL)or0o$ycO@;V?(I{S+$rVOs3$cVNW@}M z$;Q?!^cPMHg-1Hw_ouXa{cN8-IyY!1(rHJpYaI9HV53)wmH*gx|jAV-@+OGy_$vVr$EdR_npK~G-F9NMZ*ncAKXj0(v0CnX# z?}LY!5&&Ixj}*FPLdBcc_kEg8|w@AUBd&9L? zPc(+E4JK9D%sh5-w;K0iph=;3;MFiIT=m@iY0NDmiH*rB)WV{n{f}Ggc7z&@^Yn%B z?Cnnr(d8pB%4)&E+o{{RU^t|$BI>hYxhLG@f(3mZ#X2@I@gnFBTRHn8rqx)N?4>c8 zIfyK8J{%1Cx~n><{3Tw9tdR0Hd}EnNPFwR&lRq0sI zp_A<$_er&!(sh&+I`wG`b!&hz^rK>}TLbhar)1eDD4yQq`3o}Yloc{A3CPdj{LAHB z&C9=hp>~ZDe};3SE5ZUOck=Rt@>Bee=N2JGl(*Kl$FtG}5rKq(fm6k%+jqkr9z5A? z4~8mQ{R&U=*T-!3s-+rT7^nIK9cLDb(c@AWMC1p<)gaXdDOp+L=JQH@^-@+!Sz;Kl zQjcG9JMmkmOnMe|JlT0^JO@?{7LeZy-61g;bh*-JcVj#gNhHr$PpxBj?%u5=*KU&K z%Ke%U)+iJsclhJacVbDv$9MW(#>8e%b+rsi2G#xb>%y+Zd`e*!rKe0riLj}35PH#B zN%n=ztjN~QmGS2Mt;LWq_R&bm7~jy5WYz*k?d@bvUsqh~*)dq8tyLhHVu znCWQQaw^~awg9%Ky2HfG+Evly6T8*7;6HM{E5{gIrmmRUoMu>v`=U^=yveaSb04I@ z^_~)mOcDoqED+VEq}+)SQ&T++wWSXtHu6`jV0~q3PIeb&*uEiLt-(O2&qd0p6c>|r zYxWbkYA12jI@d`9RO_hu&Ooy?QSGn?WesrR=vt0d8@=1%_RO;rR#)~hnC^vMGDNXa>DC)r^sNbT zK-KQ`+oQ~8jkSZre`2drGP{z%0b!w)OT8dt#Tt+0Ug}Je%`MgZm>6XB72%q9C{rIy zqLi0s{me2y9t*HVMlJglhRQzUV{Mih-Hks{?Z%S(Xtn@rSLe~lDE&`u;(ydq{@Z7- zkINRBiM3p0pW06|bqv{QQ{Z|%<&$ayyO3g`*?<0xz)t&bUe#6kx&gzT`tCQlr?LWe z=rkQ&o|%6XA)QOsTT&9=dOETAGHwH?F))~$}`M0(o{L( zg;}Z}NTe$4Soa$h_QpA7h6(|ENt8TX^m&;5+9PaTZt(pUc-; z{WN5kSb3;T=^@I0@{gwK6{*;YG|&dInwh}~_Ju>{Q@?`w}Y@MGPR85$8k>_<~S?2rPCX6kIhUTZ$A-7R8Zrr@D|0H_UnA!~_}MrY1dp$25`N0 zV%YxQIa!E3H)jh|ICV=`HeStZwpt;rZ3|luj4EH9`(CEwANU@=fRs&Gmr4LLvjpTs zg4D+R_gkiCkpjqsUESZ}Cz};|J;C!co2el;d_C~5Y&e%8Fh&e9amgb@rpGjoS zJriVy7SWymyiFQ`@zsf$z`Z^IrM5q(hiQJ#Pp3bFD8^Gxi&s2|tk%&+WgGcW8wWW3 zVpMhwiys%4HSQQ>oB4e{$p8MBavNg|2YZBw03rc|lf|ZA_#Lf-n1Y*z$IahRgNJfF zxXx|i>UOuoW3+Vy1WZl`k8fE|0<`FojGZr+nCm{f&QxAcWh z$fm`4*L#eMe%_H4X+cw=MG7Zc{PmYRelE2{bJ{A{2>)ebG|ZqC#ZyV(N0H^^UXrlu zv+Z+fJ zkP&-_?JZTF!Gc_~^IAUCFKEw%rh?@LQ`Fe<9@cfN=<-wpGaDn1r11bQL6rxDaIdD+ zR_%=*1n9DJUBslnV@9EOm+w#1yCKD&G-wDLW?Z-6Q??}1Th#|YPRsE>LbzwYbhzYm zamuhRvAxcu*m96~qq4&|+iO_yR!KcT@>z4m_PDiJ7*wwRQYfhATAe|7Kxb$>9LKL3 zbT?#wTcJGfb!L<*Vzkt>s@t(I)9Jp@E$_=gVGpLpB#dyXO;U({FTQn~H7_Ciu8}W3 zN>QvO1X_Q{={8cmQ+$s8Qu; zCAg*9c1$KsR%hJDJTMk+b%Az+ThTo(6nxGvfCdQfB}~?imK%*8dola@<=(T?Noq0Y z&Md!#?Z9Tt+0`Qv>}iP3d5JJiNvw}-&64y&X-fcxgI`&kQ+cPsSXN+(>4zMyR=#2+(t39NE>4C}({Dl}D$nZH^;!gIH z6zQ3A9ND`gsA39D&pxP#Pi+?|b{ipp^S&Ewn|gE4%e^3%>~ado-JbY@I<#GS*WHku zgW^f%Occ=)8v@%XrvGGJx>Do2cmBdV3?q+}#RElz*S+bfVW+9OkY`@{YbZr zrrn`53hjb|=ep?yImcJ-IR1_+&goAyht4}=3ijAxCt;VC2yZ?hE;+NOTMvrdSoXs= z`d>j`f3slWxXA};JMnu|?b7idl&QcdcWjM`t8uw|Gm(QQsnm4zSiV4T-)jOVc1m2{ zc4g~$<3e9Xccz=ArQiyjrT^(We1uXcG&l!2XpKf|_${i&HI&;z4mvYcP)G~Bvj5l2 zSsgCtELTOgx`Lct3%Qa8lyI!|9e8~SvT=P!1cE{_w8k^urVx$Oxt5*x+%A^!s(2Gah(jk zf9rDwtRFm;<%T3Y&$!LvFh)9OQpsoGJ3l?`nXk}7g>eE#`7K^DOc(? z=6Zo4Z`O(icAja|CtZH%p)7~b*G-7kU}B7*Pu_Mxh+-EqA@_=nD;vu!YrlKKxpA6| zWNc1Lt%Y3aJL?#?x$cCIRC3cO54O}ir!38*ys3t@S&jMw1j&RPGj9&^Yhc2M(p=tR z_SE|+I>X*ADv=`xRl2B&Xd$3{oG1Z8Mn#_)=r9yZ%IZt);W?mhPeVy@1=2 zr%G+-1! zrt`xOURU$UTFDGhUFX>;*E+StiooYA+RF_*X&;YRR`ZEKj=dt`f-;W%_@TDdussQ5 zo;^s|+pfHw5EEnSMW`1W*wYM!jux4=Wa@x6v3*Y!ot@KE19P5;4ESLC-mV!IpV87P zU2+>PIbdXt)~T6KB5#$Qt*(nW)y+JW#ER9Kb^7BZs zQ7aoQK&JQZ6jrVgbwPpo1b=``Zu-DWuT_iDGXU3v5lq!;_}FtR+|zsIg>8~ILT4U( zK8r__rX^UMb29ZmhZ-^vd)dR9|yia)mU%1Y;|vF4Qmeq`W%) zWrKjCSHwMOFx);vLZ%BbUgR+VdLG8g(I{7E^SNp5D ziF$2o`gq|4y@<`aI-6_bpx7{xny%{7t#lbD$grmTIO<`kI_J5a!ls6GE~hSbGs>E( z<>#Hag+8z&^yBE(`{o5iNT%CrYJ&YvV}8|?uk-+aO|X=Tnn}B|E8bT!syrYQW1M%0 zR@(O$c$lUD6NBQ1Fc-#j7@LyPW|u0H$}OGx4aK^NjWSIx+cYGeOwMp5;CWwg57*8{ zx_LK0M5QfwvYkENteVT(DB`Dw?0@PqPN(kGAawPNAiY~C|grE1xA@oh@7>37U&4ueb@&NPfX zEVj4cPrzH*_v|k1V7H-~(9OD~x2Ld`K3Cd&kyINix&96KBZgQ?G zapx5&idRZuX0r-%cgKH|F^p2>=pVItzPn<^ZWS(9hOhFU4%~@|3J(j0@d$X}5FU|8 z*ZQjb#wBNA-(%rj3Efeq*%*26A=&!1S33|3ddf|oOy?Jtpux)#T*;sFkt*u%=|DyI zehAI~t@8pyuy|o_vQUO%4I(f_&Z)VRk*QCq?`Pfe2%LWuzwMuAvQsPF+$>qkr~Kkp ziH8v?j+t2NT;euMPrn?hpE*McKt^&fmF^Xq{YFr_^-FnGotZ~)Ei+6&*+9kPnCt^Z z*A-)w3`{!6C5FQmTGrA}B{!Q|hivLz2*4zm!tpkt8VUo?7AD4M2{@2^snqS@Cbd#y zQ85Qy-Xy<*<%6S}!rniA-X5y7s^E2W6`zd!q`|ZqXbYXn+KGmnH-BQ!Al|S|`BD0? zaLe4H%_8!YqOIy%R})wEBjAC`2-YT+fR^QT>40H{?S3>Z#T|csH+$r(uSH#*8;D#* z!z>2US0$ia`=FPy5K^t@GN=l%yvW@8`%+;a*{)UhMe9U~q zmf!jyP_(#I1WAs*>Cni*6(U1t$r#vFTM9fy!z~6hYvrU(aE5t0E87O!w`{94 z)ovV;l^O4s332xBz8{?;nq)OJf#R{^hjYtjTn5I8MAT@?Um*|nNbR1!h8&Eh+`hCk`2B=9ZxjZ04~|}#8rU5bxWkU;L`Rd zMC<+Nj;$ph`~9B!s;RTexN4}^E3%7G0~o;-f0UIc)@Y&kk+0rB`h5!o^R}CR7)47r zu{**_v7^Mq4Jg4f?%Zf-eDG1@af!V*Zcrn9KK0T7!hO#*u#|rH!V7{^W@!Kn-qtn; zjekUNz3Q#9!#Z4Sw>EHEnAU8$wOu*&{w`XunW1U^sN~Y%)fQDlBoyI3p~p>UmL~Og z?lczYXRR{f3-vPQGD;yg2J{T;5Z(6thpEa|zMmp9P>}A!-S+E~4TS-j0n{`CMvb5r zym1$+8hSu=JP)9#Zs7m~LY7C&H4InvOJ?bqcFK>{aYS*khNa*SRe%atl-#`YmZlo? z3I>6z9MMg6CDiM+ZGzvtuf@3>M_CcSpQd~~&FgGv2%7|)f{iAKD*s`w^bkEUah?a@ zH3>Wj81;yJ4J+8+{pqrKw-n|Es)oeZEt3<(5dNDpjA(aE5LCKuH@yIh1 zH8p!dqvXY)h9@K!=Nz5loVR;!lUFi{7kn_;EHC5KcZEXm`CtsQlpI=KQdCPMc4bM$ zEXJU@WgJV#+-s`ieDPc~#`m7HhV>%#R-a;GlnNi&75aw;6+g*~JBO8;vBQ>W^K}BD z!fH=$#?>u9Gqk51(*GOInim>tD|9Fw`an@I@4G&C6WXCK%;YO%8lOf%;8;6nL&dS+#{oUY%18>}-+vkNgtIvR@q9@Rr=V}BY-Itm07#QJ- z;=V@o%7nv2Rl?3ixgxUYBGu5k`T{tVQmrSGVW<(sKHrm~S@UIneYWKh9}SmTvh>kpS{){SJFh&nw4K6_rPU63vVW6UDS^n#-cnN(_nGnQ>A}%Z%Solpg00 z;5Z40l<`PBxk}WprAQYn2fE_&RTR5cZtL1dE`8jiiDhX=Jin?HX=hOzkjJj+HgGV1 zK~jI!c4Y@i@U35&0_0I8IT~HY915%nwl5J;VtSKjl1-RfZye0vRd*Pj+V!v~-&(HNLTelF6}LjV0a zN)l~LH~Un!qp$_i-I3v&-)Fs)xPrIlk{99*?Y@oMb1u+H3KI$amE2q2BRW&qn#Yvl z7Z>A&Bpx*uT|aB~?frc7l&K!Tq~5p}_6604nZqt)VAosU#8eIk^qsGQNMM&q4b5)` z{XhyjEt&TBM4q*;5te;izxVh9&0i@mewUF7_+keO(}{1|>p!$UKMHSP?d$gl6n>E; zovG=NrZs2MRu8dX~QB5DCAb!+w z2ZgXbGi$oKX=)d(5}|jdN3(6;Lc;c4!SWbs(&uM~w?$@arL_$47yIEkEkT;Oz`41V z+lI#;Utc>g6#B;QF@i7=y8fu_nO>msi^U3M%0^)>5(}?eVJNn&)YGGO92bkZanvjn z+1%QE9p}kmjzvoRxBPWNsu}^P1E+SaJk{oBOkXzh*D${z-#r2Z( zJ*wCek$BB=`1DE3;RRdI&3Mz87+g8N4^&}U#_@J^?3!?yOgBwtIK$_sD4nBLL zG6_1CU%*Pd^<6u?=SLG$9X}oYFJ+^D0=)ju$T2qk%LaGpTzr4?rpD)n5Oj0Wm1`TO zCH6PH6gKCjc+6aIX(`NHLiZ1rR`a3don zd5P+p&mjuPXt4>^{vN6yj}|sWM&Xcd0LM6_a`KrKcxiM~1H?Ba@SQ@Q)m!&;C}~6? zo((?!g?|Ln6^mm@^(la?&KiJAA>&b=pV)exk65gNTS>((-rjqSy$bG=?qY3$GI1#b zcDx%An@-6K9Dfjo39cS1TFZnau3Qgi1!lMPzZ)EHoEXM8Cv7iZ9OibGYR2FX?~SFM zAY)}4Cs0ls+&}CTJI+;9SrasjDyM3rB%K`sA2(1BaT3C}lw6jTmE2achUc(iDBZEL zCo2al6IK4DBn6X^JP#0(T$M0YOPSTjP~t4)L?`gEKm{)${q|S1_UMT<_^R5o4*h$6 zrTr0awo7mVuqqfgUX283Pq0)Ed>%AzRXVG-y$H+AJA2oa zooL1jTP*hg(uUs^xmK`EhK}c0Jg}^HU^I!V?Y_8vaGgeG$oj0h15{=ck+z@AU)MYN zV>lo!m3TsBeSf>eUnRh)_lY<_ouCBT#VxLfeH8JvZrzt_)G7`RYUFD(q}_ClQ_xk? z9FfU*aJkl-%drbS73dMORykikmeL#WGr!$J-;|^Mo_^Jfr4xHTUq2ladYXl)$pLhPdeOi8%8q6f>ZN(y%Tm3r1R=!< zgq*(|tiPz>Hf9qty*QXB4WZdrldXmdq0r8_tFcZGD)Np)IZ`yrO`H*G$2IB6^owD9o6(~(c_-h~eX5*~1X4&UkVimr(cpH)N(MkC@hjQJ#4e?1=03w%*l) z0fdW@U}^s5_OAcNPlJlComHh?ySR#HPOrG*>WpffE6kSx_6Ge+Emwt+r-LS)`cg%F zX2lL8alLyPSRJ|mGgeEcr$NrmIDw~^izi?bsI$L6uX5*Ia(j^`HE{;gs{BWf^#(%= z)X$bjnk}sQ$u#w7>uQ=^(|6N_QC`>;eqHKe;S3-bz<|=0l&KkLf?8fpk;w`U7v3#J zxoz)*4hNMk59es!xBtE(a#yWmbpnt?G)xnLfn+O)N!P5+$KagC)tN3D&HCp@H+HJs zFxH!4K1e7*?dFj2J50$ib}UtAc&9lCPIk>pj}lG=w|SE6&ec8bcFc;Nas3y5ZMt(6(x7qy=W| z($e=D0P0a!c2AuNP`)q_a-i#NOR36_>IV4dg!eY)Sgqt*4pftT4Nkp4XWRK)_jojJ3F!rmh89hFZ_eRo z>z{8kpQA3E3~b(aM>S&h@b!iB>+6s+YB`}l2V7U-+eDunS&xgf*!g)BC|HHIws}0z z?EbU2!fS9bq}$Yk5I*Ver6hPv!uf%}tbQHk9$4GtqbQ%}z6YfEoesif{8*g?(Mv!& z9(Q`(WSpKVYXy`ougaB}$rIuiYQui+Z6Yh*e=A z%J`@!td^aZTMj}$x|jTHYs^FGG6}9dyAKr2iy`&Q0RsL%v|J`D;48RL^~B_d^gCP+ z4fVxLWs~Cv2Iy{HLDw9*69HZIGJrFeUU6q(WJOH^Az@us@v9z7(&@#AkY%{s`$R1| z0XQNF!A-4BdHOC`ig<|}vKC?G^`ZC;eQVR}K?Ziz!UbmJ8#6WolAa52H9&{|2LpPfsN+lG`69bg;C1WMttvc1@NmtauuXolE9p& zVB+8k_4GY>aEAM2T^n0MBrYaeb~+Orz|Y1j!G=sdEAJmK*3)qe-ul3`sa8`vM}x_o zg-K<4SFJEP`V!SX&0k`XmUcKOwc`J}Z$w#RSeV^?fv4AbF$OU|zs(P~)A8oQL-ni0 z37o%)1EcK7(WxZyCz3+<=q|0Bo*Cwz7skqk!rz=k?p>ZD0iElF5))CK6zQuDb6vH< zJ~gVHQ?>G=%RuV7WJ1FjT(Ag6KaF@kZy}9~X5ZgkBpQQ&nDb`L@z|fN6~E}KZ$$z4 z@~k#a$s`^?XEHHH=8mz)`D?2_E>22(t7=A0JxPa*hij(jr8m}(8_h3~4=1E^X4Y;t z>kRW@<+V44p3ik%>eY{h(!kX#0p}B;VHB*KSRmiAdmqwVTblref*W3I@*UZP?-MT@ zk(;}jSpn#`UPS`zfmE@_L_4#Z2X|cXW$>+=In%UtTatyGm_N$GPGjR&YRWn#FE8+7 zCt0C3UW>5}Uaz@yVVd5&mb28^WVXN4tbRVF1dHX`F2C+$uS<&@ay8lRb*hMjR^~EI zdD_!npUchJ0QzX!)xv)ISNGrHtDbRT*^I@$qY$14JPOw>Mnm2$iDyeh7C$8jHot2y zRfA?QM<-`4sGw?*#Mg&;m<_ao-ndGLKttohoLhVS)#Nnm$@x|k%Gt_Bk$ut5*9!fG zW$#@<7c~A&t^Iyk1frdiXV@gPkTwu_XBY?F?_rX53YpgYhy{nZ+<2RjYA0#kfHj72 zzL|>RkrWKo&kzd_6(9${954c)-odMuxpxAC-K|3@Af?cs$=5g5l?)$1z& zrDNTYSt6Do!r1hF`>^M>?v+rydO4vhp(}O4`Y1K*W`5#qkIxSinG>(&gYm&zJG1zr zW5Mq;i0^NFO{YSJXY#zmQvuF!&vU8)?=H%Y9<6b?f%m&LK)oIuKeJn4z>9_HBt zXptJN7Ad(6K|SN>M*qX#qZ%NeCVb|*LyRU3(|GnSc!^?A1t!_Z)HMX#bJX4-eykj< z`-6EwW+EyW!Ua16SHm{1(o5MRs8Rb9OiMIFqUl1X{pNU`*OFWv2|GZz-<6+aX-^)5 zo9IgtNA&@YmGw%yc6XP{(Y zJDpzXnimKb_mgG8$R-VS^{`>KCb#9PoxKHHrJYC`g94bXn=U~Am^~HcKZtjIh&GCp z-)MhZi5CWtt7i@d3o?$KmoM@tSz{5S2a2V#29qYAd4Ts;x&`!vU13%=&qpnWCxmXS zf{~UJLqIRvpDteT$1Fx1pxKdmj3cVgI*hDuZpGMut;zL{c%GlzJkBmGPRHU10bXA~ z$rXNukltLpsu1j!!+wy|+sroOaxYxfqpCtej)#%dnyM52@o>0*;aM?@2a*lh3G6q# z6vFU;f^k=@Z75b?$`**FKfh!BO$uBuIe4gqaC05IAa&l7(_{a*>#d*xuUUt_Mu(04 zD9QwY>FB*7M)@0F(6jSdRt3CkKIK6?j=v|nJ#h{7 z%`yE>pZ;)vH2}*tRy!wl22}45uV)@KG@@>U?;Q@l=ZfacT4cieWdxEJo!Dh3o4x3F z_WTDHkEPAaUZMqhqKDp;PrVwsxS7Ejx+aPu9wJf}-X6Yo+kerYUfscrhmtu0Rwhsc z<_X<|lRH1ykq6m1v-V}Ixsh&Op=(VFAkA%y-<9Psa{}7x_pc9pJgJj-JjiBbVetS8 z7V>H)5Tf5^_p4B7J|a08lBDKU9ViB+-#I($v640*x(ctoS?&?)#Gyb4Ek%r$e2UNS zW)%4PCXM6T;4!?P0C#s1092}LMJxTe$^R-E2&-T??<-;dZZ<*ki3Sh>NapKr?*KT( z*L+9uXh!y2>#1_2tgEqMh=BZe<2Jl|bCl{2*yEZ9wl408E^@2N!dv`qN@ydHk^lbZ z;>&8*H60o9z1+sdmUjYt(dwcm;v#{1JT_zLOus|;lGL(j)Ev}LqE~2Qez)oP!J-b6 z-g-SigQN}cGkF|2ECjy^$b*Yuwa>^rpYOPY#0Px{+U_+(ysCkhL_6qbBNp0t$2aw! zZu&kkZaG#}j@o&CZf*FK)NVO|8&SM`Sjzg?&3W8p48t}0>_vvf z=-jJ5k2dg<5=<&LqzP+1Z51<7VDi;xWOj+NvOj(xFCJSu&|a^xS9M*HdkSspOZOYN zG2yN#<}7?q^Ptw%G|5^;N_OvKZqZgDlhNwbO~n_B zvFty{_@;Jy`$XJJgriMO!2VMo0uz4Q-e?x+TJz=Dd@e45mjees$bG7$IM`$S+#{M% zfv>jFse#u!vtmVNFpJK!E#eowyNSI%OAFwT_~K!wzzO~f_sYQ_Nm59&L!a*<=hoWV&ac-eXbqDrlr(d21a)V!Xilb#Fhw@P=)Ss?|40y^mCB2 zY-Y9A6yW8qQ-c)CpS0RnpUjnIxONG+k(zt~PY)meaACxE(9bM*C7rH|~W< zx?dCQ3_trzQ>&2aL5!BzH)2|AfL}>hFx1Keuh)Kf=UVD)2Fb7H@~%7Ar?HB_m?&)5 z_9J7*u}jd*phHcm3Yf{4@`lFJrcW8Do$;4sOD+RUY#jo~pgYyzOSXh9RiJ8zDA^UF zObIT?!Q3Kw14wg*9wzJi-}m3R1z;6AS@aX0v)^)45BZr~Y@M)-v92=|O*t_K1aC@` zS)nrH;#of;igkIUE}QKvJr#3Nqh%rQmKuX6YhjZwrmjNLp7`)|ONF<0ywVbzdqG=! zfYn9V9xThBvi@%TjMKxSjoR8DA}{crp*6}SVGlsJ)lf$TLq8+@yCL;+nG2UCcIK&! zWIKBLrK}LS0qel>D5Z{VGpiNYLe{Qdhxy(L@y_8BZG(lL6su-BE#eq)adtOj={ISY zE=y_X`fJB-MfM0C;$Q;8x zR~j**_h%)g-}bpunV;MzO1OKnk*eSe%v4$?9m4&$ijf|LALr-y%Fu3GF?@#wdF(-Z ztEVnpR?Eh$fa|^+aF>k`c60W#(SR?-tFOMzCf~_TQUGo zpw}7|hQtUoOJlROm3gkP&cJ z)clL-reSBZ+zNc5NSNuzMj9q$=hMm?k6&mjAM2N2sJH27j~ofx;=SeibrFOl#R75F z)hyPx_g(Ya^*2ij+}gG_=FYq+^HYL#seFBnt!<*M(6vXq=2mK`_tma>NY89soYzcm zuKZBoV(1RLo7L-XH1awuK9CD8;8+_M4DWcHaa*p1nOT>+=ycMJ(OE;k;Zuj4YB4vsm)$;t#;wY)o53&cEEt2qIy>}UPBiYu zA$Jq%v;C$~^9NN-JR6Fry|`I(xAK$8(_8TZSwJdzr2yyC?mleh$pEnigB7&A*=NpIKl_`XzyCZx1}Kb9;lclc#TW zGg%;=1<@Sm#8`SC>I3G=oS80f4Y*p-C)JK0tx!8%skLc8z3j3n0yH!+@BF-|P<-%O zr=cUDGX!u_2Fq+Xe4eN;H?Or0;g_|5lW+iVt2EY;>Tv(BHtkO$3H5uY298jHadrD2 zpIziNtL>Lg3a$NwjHz8}phzH6hAD?QS$kb0t_~AB457tksS5K9L$Nvbf zxb&AvL+t5ekkxTp!)lwEPaiI3oQ8k&xqBq+6I+=T>dtq=WN{!u{$z!sbhLy=UNOv^ zd|c*id)=z!v+weN&O2_gxDCdNtAD;mAs|0XbqP6gOPS&LU6BeP>jMVqs@)0AAcIWh z>sNKpegq(ZX$o^~xwxZle?8uETrlViTi04d40G3OWlGtswnMu4%SKaAx+)moI!1voF>?-qIY{d?#5 z|1JNYTR#79_hYv&*4>l*%c1dq+_%0PVO$~x9W$DdKX=z>bB9yQyJWB}6gLIx15EIHa^iZ_>YgNbS|b!dW;vKDI_S$%w3w9^Lr+pv`9s zbpj|umhVK&a{osm`K?SbD9M;i@m&S1*HYX<-M{@3>ER4i%4)pb{g`*A{JjpM(T@Ee zHKm>U#8aeC2dc4TaajJ%rld23q3MUe%%DpvDYECSqGCyObWywlxY_7gjS*TG;JU{r z3;pxK`XATqe|-7!^ex}DY<84WUtAkAyeb*=kH(}r_Js3&jo_?&lc`#t9OAR0yp^AQ z@gg3ai5!95=^X9Tr~d8r2|kNvb2fPdlPm%HZ4K9KDLypTmbw4Z$y0AQz8EMOOwK2_ zL|;^O7i%i)4jWz*Jcb`W6>s(L82A5ji!Y9{quja^#CUBfYj=D8nB@Ou9Swd5(C(i2 za2FqPr$J|!!Jt7kzf!=~+133OJZ$IrpW~^&9$2BKVBpS5;cUf4uD=Bf|72bN2{09A z%z9BRWYRNB<$kpBYUGE1_>8B#0~DL{5Gc9xDWP=<_X;2%>(3PWyB^?QJ+Ehd#{t*$ z)!J>o=Wb$O3QGptf2|@+=H8bk7GME=$y`xC?p8VGX*i$ND|_`nHuGP6S$w+VEZVz3 z&r?(`&<^x>{}N_?Y%;Lo{jR}#Qe36-P}zUT*BI*wxQ^iusf_>rcKx^a`t7p%vJ z*xxtpZfR9gReSz*3_%x|XW$i?ITt406)mj!u%qf_ZzDfu71 z`vyRWz)-=JeQ3eQkgJy|-Gx z(Gj=!f7kv$+5P|j*WUhvgTw#I=1IqW0eG40SND74gaRQz?v!lbn|ig^FtojIYNMBe z#vMRV6(5Y@=EA)(-ty$NRnF$5co9P#ppo|3f4IRVq_~0H3xag)e*j$p3+4lep<*X#Y;*07K1kB}-ebWSEkI=C5Hf8Gri>0Cj=-2E-dSU^j zxy1=y(PsB=5h7C-xO|zgx1{stox7=n(Aw&Q(wq=;`vXyy2{PEcm=! z(dpq3gZ3`vkV4H2yI;O#hG|~PQgV|A9xEnAJQEUO+@~^1HJn?@IGx7zLQROD+2Duo z2|)JGcnpRU2k;+tv2l&!=4WzQCTKv=4ui>m*gZsMHv$22pD!gBw=d=m1au?d? z1j2&=Apb~78xFduoU4O$Dariy5w$pXTqOwMMeuktCu$RzT4+M1KQ!ihYS?cC3S-#I zEs>5L0w78Vdb4%);hirgDsSfkw*9MZhvl!^g*YvfCr1#o?S{X_x8glFQq>HuKvk)n z7vs>q0u{b0Dv>|OC=htY~%d(xksMyDbQt+}c+uvFipX>S* z3q<{0seWnp<8RUS0JzJc7yCh&@(dEPfDG(cO_BG>`6T*eOIGcCA!Y4Xffwl7o_!Z@ z2Cg&wu~F#pea6^|FNRPY=YR$djQR=#A!YEX@3-GDLyB7@LgC{g+DA~V$-}9xhp9oKy317>7k~>(nc+R_znZy zy7twtGWFwHo!efA6S9@qpbqNpCfI&3ZgeO7rFEJ$bp2^Wz8$Inl3Zxc@ZBk1zYJ65 zPvkha-+m1BgnhHI(>V;vP6Sk_3=tR<*s{BN92KGi2Hn?Rh%!XeMmav@3+&c7 z^rmWwCP+!pWy?FykBW}_&m3wm-Q-Lj*y<0z-wm|teu?xpS^dJj{u&Hu>aB3vr(S_! z;~d<6PSAs&w$d8<4GF=Qe~_Z-{QBZ2GY zH$p$_uWkl+kY}4_X11V_hmZ1|C_6*>Mp18ZSCP}*0i06Tlx$l`bW#i z%qOewdtr+bY1HNmXVQNUi7Zp&^>cARQ+v{w+ZxVXoIY7!?cW_O^Ha}&>>@6Io7ZDX z(mmc5V3}%G4k=OpHTuwZ@+f-_B}R>#H^{Jb0HwA9j~o!)IEHUkBMl~0aiAr9PIpu= zc!lnUE8Bg|Bg(s<=7nIQehC)oWy%|p8p&6mIBR6&c*L@rsvhRdL;Bf+(3J-@din5_o6#)H+E)}JI6>o{0J!_JcXzFPc!IyL(J z&87+$7pd&>g#KoJdyRfIY(=02|E2tL7@rcQ17M=NicZ5*B!Pl;zDZpY+*~Y1bvxQj zUu`SMD4-`8V4OoA9+aHi_4~w2gHTnSOFj@c*K$PgHQZ}cw2{eW@~8G5Kj*o9XA7Nj zvEpDU%f>G2&G!>gT$a_=%Ks_d77t;W6)R3{@S3?Q*7@qySw~;`qZ0F4`rL_q9TFFpF3^O|H|6ll4D3^@{Z{4 zBR{kL7H(Yn*cuq7IPdL$4_x7g>w6!&Kx+pD_DWgKAGdy`K2o`lGYx za`K_Wsn#{zecKcPX+djL>g`_#!%by|P;_Xk8C_PF4@ zAklMM`gL!nei-bjrIkpS=zZq1wITg_J*O%2ft1)p(Wxj(O-j zm*Ys()$Xxz15Gr0*0rRaMQ4id_*NXo;2K;dh`f!6kHvcpSLGO&Time@TJ=G_$Udi% z7l=W`$#kjRSiILdt0cMP+Zr(HFgAG=VfW?j&G@El{^#0T;QjMdU(A%&%g3~CtH3OqBN-U&2^}ueS93?CfE zif5GVn+*-%y#TlzzqiOT;e3yaqQL%u@Dz@o^WScqnC+!(0|8OT&!AU%AJ7}~W(5yH zH$=Rtvq< zB2S8j=)Krg^O`^zszE@x!F9lVZgDV;|A4F{uf~#&Dr04Zy2%VmBopH9mV)f$AF(B)19s zE@8Vy!(Nu}nEoI3-aDYFEnOe>fQk)J5erDM015(1@1Q6sRY5>XCR>wp(clH-^Ew1^p0EOXJf7PM2hMid#A>Hs^q3gY(KMPG(tSYEJc zIjN{RQ|XCJr=bO0xvGaL6!czgZK(FXgufWJnnq!dYn*<8kKvWP4B1f$xr_?)?Ka(* z;9Di#^`;3Jj@g80GpqrT^4-yGLYJ(wG`0MKe0zorxC!#Ily0-|%fl)OLqgvhuW>}V z_HBNUW9F#O^(_XPa*h&VeaLq<-W$U<76pF8?XdWr_!TQ5(-(LwQWu7 zV{q4LHs65*@R>9TDVaO{X?hAgDWm;6@B6~yg%1f~ngD4iQ);^|SrhpUyQ%sJzCfsl zve)&W@&Oc$&z9v{H-GtaFk+$TbB)2YtgsW!if;=S8e>0&&oiYb9!ym^^|{ByFK&?_ z%@fs^T1&lQJQycjfO)F;4vS9n0K`t;-ZX)VoShcK9r)dVsB+=cPnsq*xNT!ZU}0e) zPMulKiMA-UF$xawmS*-qsPpp0mqL1w?v+RijBh0~PGj$zVbg_ectsnNI9akDylfn9-}g-d05kNoA)97r9=PkIN3vCJv|> zO?*%7Z??5AQ1G0wqbipv$LnyqkB#)o9fho14I|f*>wdwTgC<&E$rdR>Sh>ye->9zq z4m8(~ClP0sYm$P_`5jjx?H?`2ErU#f`!u?-o*$e54Rtk7_`BxC5yNdZn-0$U&37%D zuX!=^CEVf&RUdakE=$X5>$!3FKbkntqbDFASQ7TLdHmSg$K07N-tG?Gu=>kKj*_C| zUcGnG2M%zvl^ou34%5sz_Rd3$2$!#gaFZJUC#L7>6FA4}r^~88S9|5RKLKRkEh?6)tvE`*toFn%Tw0t zm38S?q_U^Uyf9I^4J2lq$KXHmcq^n=CcXz2-t{@zq{=tPg7&+b=1x5SjM3Q4Af>v~ zv33EKGrgJHb%hS}>B99UYTl^Pxe$zUu_1oK?6x)`x3AB|mj1~9Zj}yT^0Fm*wygcE zl7E>&W@QW4y{(+Zs~`XeAf7uQw)HjMT%R@Yyc=0hYi0#RDo&dFz&{v&oI`%Rbfb2( zJit+L5x?YEDAcv7f&^B|Ne!BbUk^cDb=-DZB~1${KHK0}_sYQbxyto+qUt1^2SYxP znbuuU?Dx~|DC?KntjmLPnc4mfVDDrN*_hVZM*r{_$!k*F&EV2Uxp)g#BeFORM7H_? zyJks#6|832LjMy|j{=>Krl~=;Ry>UFAzx{Cm&{qFBe0|t}~YmPhXrkcE_EnI{Yv&`y@-?W4H@^IwU!@-{Vou@9;O- zO5LH5i5AQKQ5W_So!gtBz14KvDW+}_F@FiuvHZktL9WvoxPMa(T>ocPb#dy2Mw@6ev0QjC>8A)&PlhPN-lRPy%)ACrulJ{<3)LMip#bD#Y&uu&_R_QB`Wkb+Q6bI^ zLion4f&rPD7uU`=boD0eV0y_Qdvt8oZ&s*DDaM{6e^=NPs~lP7lBQK(KJU$ssj#8v z8>(KZO?u}yNGJ`q0jtQ3KD)!`%zX^{vAtioHeAcgQ+$_2d%@l4RNr(Ey5)i_)_~E# z7E5Kf!IVAr^^W)6-9Ma48=dGk^M7K1*03Bt|}LLl?iBVetl9k?`0M3j*wmxCGE*SD-152Mb zju7?f(W%8lXT}@`fD_Wuo{A7?DD2Y!XR?%?qxPB#oOj<}jG#a_T!Fdq|A-#{@OR04u;EAh|y@I;sw-5>y?V_GC@nd*?aT zsVw{iJIF!(B!=Gwg+Q-|d(WO@T)9jxCiZ zw5BGH`%DL(351}$!auP&(C#OUQCwofcxtqSe;)ZDt9^PgT^`IAIIK7|kv||0*IEf* zTWEME^1AlUJ;GAD6(_$(cd{a?cppf!b4zyc7Uxshf-1BOfY~xGr zG+WH{#4p}x{B}i1E89*_bZp>y_2ObM5c(B7J-j9;ukF>y>fFcknlmb%$=F#(=TghL zS_6gx8kac~QK8R@7s?Z{NTh6|_b>h{{3$sJt2i&S~jCQVQ`|X{JK=nEf5Q4#I}$Ig{PPSQ2U~}> zv%ww_SW2~9n+j5U@&!W);b#_PU_(n}mCM;R@8;s}soc)4sd3)q5TG03Hph=*R6>^h zO<1lk?S8pBX?{O;R!Mwd$u3;AEgjppYxD$R>@E7s<>jBfAi_R6M_d<}iSsLo^Lu{L zhi@xZLAlf)2$+Qdq8(p~HsbP?nvdP0=_m4#NF{`A8=H&QV^1c*s?=C_$fTZ_>UTQb ze*HqoOIvjn9luX<)?y|V*3Gg3P(F;>W$fOrM-oT`ASYUbG$-k)7)WF8r4mxG)tGnP zRo7zpd+4!C$f&JS+#NuT{<>Q4-Nq$Qsn?9kos8?sZzOSnm+P`+ou*&Rqdphq38=}v zKRHo7^|5BokQ6+A2GyJDoG^%uMGJZX0C$Ax)tu=-$=by!HGlY=+_0y;oHyc zyQtsH4`r;e@l7_BS-40K?~&pw*P{>ncu3!epN2;`!$uZ#3f&>ThMElxTj4NoWRqx6 z#$ZV=!KgRqFx)u|U=z*)f`#}?YnklTRZq=@utMZ-!Q&#CcS2U{6&vXhU$?H0+Hc7k zPhKczgQ)Z9AWSODCTSg|zT2x0_!pYU-!)#9Kf=P+6RZnd6SU0sRzSFp(!%J?+E=pV z`sQPN;1C-Rd$Z_c8?cUI)6&nJiFl>t}d}>Z4xb_qb1#8z0gr=XEx;+)ZT5g1Gm6MK=UzJ3fC) zRV~H*8)SqU5QGGX;6z!hM=$sp@z*)kJTY4d8oO}cGuKel$3w|hqLH+4kRA%rHhobZ zQcn@vnpls{XF8Dj{iN(wtZPpjPN^3=)-!L{k8lYC!V*+WOzJ#Xaj2VN;MNIB<{}l& zBl@BNk=wX%T^3riI;)^cy0$!VLS8L=Vf6%M{nCrsquaMOgJbJ6VOP|=IhqcK8P*mG z7}yLsx;lk2zYcf4hv760wiW}Ltk192cvGZgoOk_0$P@Q;L*~&5n*Ix_S!d9+F%v$;-b!eHMf3R_(9n-Nz2~*P&PqlA| z`iZp9<4+CVc^$BBwM(N;8`)MJPdo6)`^dOisfos9YYu=mqibRK0A!;E zylLgj+Ao#ymz9+t66soywI45>Hj)GsGRSib@2!+y9&4oQ`YV-I&Kfq~2M2#-=%x4t zIzZF|F-yF6*hwo^>1iHYisb9LjZR4LL<7FLBOP#l@&}LuDOY@6Zs_KYbj?Y06V$FM zFrT@~Og>zRF6@)VwzgnA@OcrO4J4*nsp50a29G!w&VF=~tZtwpR0l6gn^=b_$!D8g zQsC4;&k?_4Hi)7S16F+Zuv+KUv2nw5p9Yq%Z~m^1s7OK1wKA zat>no@rY9cH!D?^lx@f+d1Y~KzxNjR!SY3gRE*HuT?}eW6StS!s(Hy@l_iroT0;Ki z52@=)6g?Y+h4MXx{IY>^SN(aJR!cf`O1}0{9iW3ndduljjvjx&l6Ix;C9L z!h|b&O}Zx>J>4VZ_ef1rP+%(stisVFlQ@U$pNbW5Zd=Vn=kqGhPq}2&A-q-Pl7u2(?nI z6jv3N4NzLCx+x_6%Q+XOIrb=4i)u8rR2gtqnW7Na`fR79nRxR11jnM6{9cO_;rKh6 z%eURd42+3D*^pavQjeT1ik-gn(Fjk>3PxmicTX0ww@3n@ouVz|RgWTXT)Sb)1(;D9 zm_0A}3EyqXSb6b6Kga`nAY{y)cN<37Bi_a~hj`~e$SOlS!V`db#{+LO`0Yjr@wZOE za7j_R_?77sBNYRSriQxNj$UYb;&SRcBzoV#psVE-`b~_M&t=9D|sB!W3Ni|=H8_rX9 zE&$I1S!d}cdL5aGaG)?Kb)q*Z3wLoJ+jk$8>)Yw)B8u|vJaY~St|Zf%tDQtM<6R3usby!b8331@I~(+nsYm#;F$cS7nDgPR?tc}4@(Iv zeR%DXzJar|#Yy6YXjKbrs_^9JyBkMNbx*H!dIh;L)KVm&0HG77Z)u?Idf$ zz2)yx(vI>`2t59P(XD+>8`Apfp1C2?&3paLSY8;|?bC$3z{lxNJ3iU!)<0Muci2b1 z-TE@%#c+*V9HkN6$C$-uG(Pt|A&Z3fftkN}BztB?IDhx@?o9u+yr$R#O}*@1b?7aK zicj2ILj4J@-H0I6TY~7MRM0h+ikB5@`-X4NDF`-J{0WU+8cM^r0iu@4f@4DJ$|Wsm zb5QN%?oEBx)7*SE*XVb%5|R0LZ9<$By|WGeXzSGaex{%8|b61}6^5!*Ylt z6j@?Bf_VH>S=MQbv^1tWuNOGj$jVjPqFgI+rCJG5KwX<-Fr9|Siu3Zn6MX`>fm-CY z&z?Pw(`4EXM?l~}rj_z+z9}Gl(u&_4&yBf7!n52(JVDale#YEi)%!+ zioAq=&GxZpr-OT5MnIUoO%EdZWE@8?p3`uD$Jt7q1>RSn-`~Z9fB4%kQQJokJ-!<;oi7^0|5-Q0nGilSdjg@YT_BxW z!T7MaK~_oZsW3Oz@b!53_2HdKw}YVj0C&gDOJn%W^;{FM>JN!bhD4>^2<_q`zREGp z#=+IqJcL^pXEdUGCuH{#c7r1#=G0*um#Z5NA$^3F36K6(w50$D zUN!$R2UO@UqB=oEM^IVjC&%oQ>gGx)Bq2$gDUgs5Q&?bPv-Z;b~Q)y9`fqYoUZ!G+t>~3PQYrQ8}ONM0&?fRKW6TsNzQNG^$lg8as0&>=%2CK zWMZG59v;kdN|<=XBj%J@yab2e+8HFc|FV93Q8-4-fa>4*>gF~AoC#z;vPVGF<91@q z?+*E&O${Dd;#62JZx8))3RVXGLM(Qp16klI<1G!hrs$F0g99}tBCpf7WXHcaS%ozk z!G|;TYk!8bhE}!48jZ|$D3?%|cN*5b?Sx^rAr?n(dJ#V3A3m4 zV!0k(@5pwsCy!y0y-@O%#q0IZ9%NGiEd)ptc zOon(d2&pL-SQ|EAAR6VVnL~l!3XHpH#Qn(?GO9?){#wV6r9jcslgny z0#k(G#;>sABdY(+F`QtHM>`X89hTnQQ9i#(bt`!OMzs1CZLMxX=Ac5EH}9z!bMS%uTaP!}C7eSc^^NW&xM|q( z6M!9>Z$`-PTOG9+z%XF@(A1@k3@NogVgzd)KHlHIBIFG-I4#+^Lo=LTZ4Xnm-1Pb} zQJ-2uFaqo#v{Z|8Aw|dYs(KioU|8(^upG%|9C@(#?eLp2XUN9L_PuagYD&t7pZ7ED z>&&CL3*D5gtRK04@^{5vY%fuHB#b(LkIGx`v{Z}{II+3mwM6B>(SmGjSr2AN{^rMUoWFaCBdenkG z?m?*92w^r@uZ%Y~4)`9UFrIzPj(VI{QjPU>5D@%xGsbje5?ywsh^HsoOy`NKWeiZ0{ z`rW+g6=(U?75M3Lq4S#b&}Ra(@XSrB`&)h|uCpB!jR5OK2O8u~-veB>cS9TVDcEIu zr?7o{?F`R1RiCfM*w8+y4k#w2u}v^Lb}29|szq8*eHbck_cl9YHlRpo-?hzaW$_JsM&6m9=YMU4thyN(ccZI;l7d+~D^UYx$&AsK2 zn)vZ&-%33XcyYRUY;S$TY9vZG?Tuu;+Og`@cIDCc$X&LE%UlZnd!(Skkr1n5$mZ4+2N`N zRs)ObPq{UU1g2h+l-+ziS;mY=-0^7$rO)=6Xk6==7ezF#s});)e8=QxhH*FkuH8jw zJ!l02p>hur4O5o<`0FtKY~$`T`10}%+~$Gxu5`O?n?}=Ub095!2kklN?MKG9WyYeZ z=i`g)w)>mRGoY;+b2K`XmY=&*C42CgYl5;sUhaXpiE8&H@|@8;_6z=L++p}-M5+Lo z9z0lGw2q)l3@7S`S{*?oXbpW zJ0YGS7%rmgH4jj@ag=Zs?9J1b3SB(F&cHGdn<}N(82R=*qYRH>NfaYw)z|Tyz6_S_a}2femKPvXU@9y zK|g~asxHG}%FejqLh>6G{RtG-U#c^wjtOd07(}k})x|v|?c+^92vS zNiBvv51Ks2_5@%JoDA-L#!D44*mQY~TC`6=Q_ea@QvK$nlamSClTxFw$3c{>XpzY` zxBK8=LcM+-#?`SXQ;xz>Bx%`XTawDXIbl`f>M2orW~QMq9gB%UggK)W$M?4p!^jr~ zU`hjlH8%ukczL#Jw~jH(9=CG_-+U*uAix3zc*Y*?BAd7}GE46s;t&(wbpQ#KT)sqfIN1;T*-S z)O19%Qu`VKiUV+(?(8wPr``>UMuZ(=Q2Nz@W*#B6vn2D2*o=GEfqihKxes7cX@~DR z6<)gzJK9X0i(X!HP10gtepPrYAag?AFi^PaP==rdB};%zG~ANL#Hnr7z&GKR?3`}R zJ46QabkMM8^y!GgPqvM($1SR_S=ZU}jUps3MQ2}VPHEj2A;-k6Nh*Ra z0>|J~jDp(wrs^D}@OI80`%`CU4o$2&1@f-}ecJ`^Hle*Mu$xbJ`0JxS zNSKugZyCM_!0ftK0=1y=#^9gFJ%^sTdl=qFMxF&+860pl2TXu2H4t6oKhBdeCn&}Yw4d?rj zgoIXW{~`3--3CY!VsdKkSVlual_5rBL4L5t3FpP*uIcV~h7Oo&4d)>afYZJKN^0~b z1@}#3p8uEXp=FVGHCsxxvHct2gwiaVO8wBzoqO!VFct}^@QLKn?q`@2u=1=7b#Bn^ z%`P(AupcG2pMcEUPG#12mO;Chi`_p3tqmfTjjVNH1bTb-=N_QeY3m$2Hjq@)@MloqjTOC7y2gVv7v@I&`=hz+S4V6^82XT!s3qh{=*`}4YXLj&&W|kN9F|g!AuC~e zfWsTfiqAzT!|$^?$Fe7xr021#uqh$M*+Xk_8n6l`$7^p`hBHUAs~K&X{5dA7^T0XO zfu5!w=n8yLqXNc_dfiZ^#>fY%42|5*uqH3M(zVzq^#btKy|%BA$HdEhe?+9ud46cP zlt;u^bN$TDB6hsy^UfSx74K7Oegd24o8K$&;U{ISchSv>TqMMdf%k%Ao{}}}DemxY zc~?OG=>gDnScCRKe|c#=zX8UG*YNe#@~tF0Cmgj=!5+TziXPxG4mjjI6gMl0pY;Je zk1wKj*GzVZMLf&Ix-AOMs$+SnTjzCD2UA|sm)4@L*a;N90#_Xy!r;Fk7weN#RV(e> zkEFRd$ayEo!f?KG9(y;d_EXYY*{xCJN=PG?d29hY;$`Y57Hn%2+iuwh9d130(10N% z8)`kj9pt$kcY;&WBSz*9KO^n;*JtAR+#^}NDiIo7{FChuca56Sb%aKn=HZ&E;w}bE zRKH-PALWTBJG(UCMzA-L?q)MT`(V|%ZUUEc?o3v@&TKgX^+5CyP88v(Q|X)K=~(}8 zgdLTvlcriuBjYWr?`JoKb8s&tG{!I*gio*Ngc?+X@ei}0yG8?LUu(!Ap1l{p*s!FW zeOg84$~UZR9>nbKp!as5l+C4qo7J^0Hlfcj4}-W%-zp1Yl$UWrj^%#(8xv(KQstfp zWj2=ygt>h8RD(FvOai&(FV56JqCj{xd}3jIZShn;ZgU}70e%qP{J6%G&_TH%aQ%{h zq?_1=yn<|s`YA&@&ZEQ)lx9br$H9)`?;RM}2`H#hG$j}>FMW6D$ zo6Wg}5q<{SW9p>JLyDOPOkl+jaeLBTyccL*7t<-;FV5Wxru~y#@%4kEp5KPw4v13Sp9@=$oKEMt2YueCpeVgp{C^ zs^N7jLkGED+=tm~7T#{JWQ5*<)Zfnn=HgLH37eScqQe}LD6 z`SbZvEq2$Z_YS=gw3F^6Nh5mob&$(pIKeS_STKdh&G zg~>)obsg;$aBbf7UOyy@iZ5}}(V^4#ZGT7qoQyc+SgwQ(j~@_vz%Vp(WA=YUWp|aj zr93LVulqbYCe{Q4Kj3Rn2e(VFGjpe z&n1?k81%0r^W7iMa7mP5=IRBQ_e*)Zs$kc913q4~`oucqJ4B94TZL#tXZEaLyCNbe zI;;oNFL(Bp3r%jg1644IUxRV=_EzrhC1ILaxIp4;q{nq!j`Sbs7M&glD~Nv23Vi(V z;VTX1ps%0^{i4t6eUhw-EpfgH<#kBS-hgh ziRGA(dtQoqexzWQmclk3SP{1TgyTt8FEwC4G(RdJv*_F0gGdY|boH$OUc)ztby2na zHSeX{&95C9%ca@iv#b*RzN@j(E*u~BpA5uC_EDyeGEgk z)F17Re-AER0kb^}k_KCR*tiLN@H(QU|7PRIfNs&jTu{vKK5|8@<5qGWSGWm&?>866 z7dM5D>HcBF{C7kLt-~j;KnAN%`Zt^xXFK%a_lOkj=-GuzrI4ru`4TaEepf4tO=OF9L%d-g>b3~9@s7xG zv#O|tGk*xE{)g)GzYDE@<2@Ad+dtE2{oR-U9%zX8aYbvYQOTA!_VB-V1)zFW!@+;h zroX?zA^qFF|Mk(|&)I+6x`-cFfz}7vo{2s3PulqZzVww1K%L*ctG{pGzt{R8 zz>-Kh3;QDfUwYO5_AFfuKP)JC+xVTtk^P1A%L=ibNhZiWebk!6Epuz9_Pdjwp zyC1guN z-E08*Um;?IsaTE!go!WB7=ICk*Z)DWTcjOU3DEKUMY;LMJ^jBws9;MJw@9k4mK(U3 zsmmpl^jg%PSMbCI;LoHy<9o$_V}cyuRf4V;Ff%2t-WV_s#1cPurC&_vl`s=uC^YV- zI|Q%(SIhqQZT@F-a<1&J{u~l&lX1DN9c_1~(vJFHgMJ6F=plgu{ihu6fq@;i*dq3) z&Yyj?bDke@4R`?LXLD&EKAgH|Xvn*SPVSHCboi@{P$iF&TkI7%xrblAd?|QVmmh1C zJfj0lEj#sCfj@5ce>5ZFq4KzaHpc`uS@Ep!Eq4sxJNc$@kx%Kf)ex zDdEV!WA|_V{33AhwS7Fi{O?-4oCP|s)pg+C^jOL109t?MoV@D4w}l=5zoGxXq5rdM z+~0ri|K9rlUvGUxg}utqnTQ`!$N58s1%JPNyY^wp!wWfIfqM7Pm&Zfyi(8aj0m=cr ztElKdPXfRbJsX=_u{(8`Pd0UV&!2x-xgoOj*^d_9-CyefI?Rc2OHP0Aue_HRbC`fv`vJ*pds#JomeGzO!uVlR0z&O+m5F&Z|^)+s5F;r=#k= zGquZjAxX26hwlJ*HI=5{3e&ip>NwUE7B^gGX_)6edT2o@!)T{bqnAD|#B=ifW#y~m zy`$M-blK~uq@*NKF{3t)Ng}qUf$`?k@e9*88+t>*anQfUb$^YU{?Wi4U3;*-Gvxc&oOlo zkrBaWu2cQ}A*D%%Gq3e^?q*sgi2P_6EyG>pfn_?yA%Fk&@+5B%H#I=0=YVCUdw!@) zV4mk#^;eK#{!g&A;(JXHETP(Kq%D(@*}spk-~{wF39+WZkfmqvg#J? zQ&lO@Ui^%Fa@+?AX?0v!7Pf5(nLZ1oe=fMWiGhK#r9rPUV7;kO`1e1w-uSz%_@wA@ z`b#&F>ds@_PSSxs64hs(O&34HSS{pH*E%g@bepS1<^rhFA z^NYtJzx840V6*X=VsqqYPyz3hOONdj|Dy{}HldLPR>&4{O^)i;-}@J_SN&!e=QZO2 zeKGEO6_4DA_K+K=lJ|`W?A7MJWT4_rjBWInk_vbvPt#di>GPD5F-*F`6}h(`yRqXN z1Dt`b*jx31?xwCdjYR&gK9WZN&mD&!{?KWpvB+G1!uitMLMqpQl(N`czR?8HLSHn> zjis9%ZapV$C20l4xzQ(HzEZz9durY5%|r(=@K6CENMr)u-+_d>UcE<8P2PqS|qA>EMF2lHIMfvK|(7-}0oSO#Zd zC2ika8nthyS=NNj+d3)}4-!k$$onV4W!U9xuWNoC9#-Z8DPFiRaP0n=l!Uq02U|QY zhHGlI=9!HUB{0;`qaQ@fH!>AeF9OOVs8so?xo@$u#rmGilPbA|1{K?%panh~sxbz2 zEp7AFG0Lbl+2faRC2D^VFy^!!zT8$c&o6F%WY;@JWaYB5{eKIxb`L$@N$vC8ulKyA zi8-)71|uZmMdJls87u8>GLF3_I8doDZE4iDJ^(DiuSod-EfhyaO(FF*VRkHoEZDji z4&k&BHHh86@c!L9CQyAqSz6Jo66w}oWsA28XC$>9;G4|+dG2A(NE2!F)jMa=P}^R$ zad&Y;3Q_11AA77~D^8KXFV<~dmdw}-*UrsYd7ka^GO7U`D0MDk^OmxkCVyuiiO^T* z+hdD#ejmC$&b_iLC18y!p;=Xi40>;P-nB-o@dIfhjzd8bLCu@=d1_dJgl=jV;Y^0= z{fn1MJK1=iX3N6rI18HBR+QY_pRE)0C_oy(Pa1ZO!PPeQ^KID!GkU73oa@#OV0`w9 ztN-o|2yE;#7!|6qa;9!C?Wkw-Zs^dyX08u_pSoE~DJk>#oYN-u$VOPO{|6um(vdrs zU&F_Iz%z;!-i-mWIex~wk~!ohfy0D7p9UPnp0y%6Nod{Q%pKFD`#ZPL`v87aXSa9w zg*Y{z7@V=#dPvx3&$d1uf&B@MZYeAvv&W&fATqEUD!{-Xd~w-QeNDyZ`{sM>rkh56 zuRT8ak72&QEyjPha%&Zz1Onp{DVK4TRDhDzW!l#)-5%RM&V$waL2z&1lM9#2ySajWO)A#gC0$Rwf^X5f9ze46(J_vW($25WX#OeG3bDaxE5 zG`BkJ3T`$|1g2XJG$ug9RHj!`=eRg`I2(jy5{I*|LlXMM=O);8Eb}#EMAP(^jnF^m zBp!FPWc8YcaJ+6NvYsIc6>ibXKz+w!!o`bHG{xKt!9}2;J^Q-F`lFdezEO1&-x|3a zJz=6!@{xuLX=L|pJL{X}acFi;o>$J-pZamUSzUJ+EOFu)u;1H@j0V)b`%m=<^Ky3D z1??SoyRXSqp-+6|lA`-B-?ocMiT+a??SGE#{UZl%=}jv?(R0$$Dpl0nY~%MD1FEq7z0BUg)w-;U8ImODw{NjO<_3h1PLsG1Xgyi-79OO z#URtYrE~kIR)leF6I-~Mj)9+n<>vOZD13mkpP$Qqu?$2X%2S_vh*aHNh_#Dcp6H5x z(aD>fk@>MSsx6vpiQLOr!u9xsh9lz8l{TWzeb!zFwJwhd;#E+It?a?Ija%ga^F!cv zj^s!Kx5myz+I7Z<;-i!3-~t41hu}iwzcef+2R^OZnjmb>X|Bv+`0l2g8-jVK{S04F z)4gkNH)XDdWQj|rE573<1U;gz#3Y=?@J|3`?h@tvizBwQD|N|$%gjh)4AUr%5%}8m zx;YLye=J@+QG!mk9z4B!{YgFlBW%lhwt?Ah|9zIDlYc7JvT5D&-aSJkX-T2HajD^2 zk>HtZVPYsN-E*u~Tdu#Hw=!Mc4d7Oz;`K382RJPd#99#01%Hpyu-IK=KX}v0Vp6qelPkqAk)j2FwX8 z0RN+MgoS(jP=>aG%6R-%J32K!sKQX9-QxxQiD*Bu3G7$Lq9}F|m;+F+LT&WisEGs$ zp?Wc%{4H^D57)gg(r}JiXi~ z`y8dx2vKJ$mr{(uOV}b8-PGnQep8Vs>0eGye}2Y&)E3^}v|Cj2?#+9C^!fAW9nCCg z6{nnst3t}@Upbs)L`~bntkL+Ynm~B^J+f6oQ@vAa(QlZ}=04QMMT6@BKwMUJO?uH- z0gPYFx&=`2?v&o0AE`D57t7_YyPDW)lVavVDP@L02-G!;+ zV3kLo5Ky9rR&#P4Pm3DQZNN;F%cO2~_d<=a7qPtV_kxD?xktF!{64V`z$z;tpAk35 z6mVSmlnd^Ex)KgcntzmV?q8ZJBIW=*_o~tVe9(&{Cu(l_-xLAPOTSBe^SCp;BYFz% z;Kpg~C0ih`T_;GTkbDjVx z{jLbMu>-s$`mNv~?OD@8$@qt+=WHdaxCO_C4!%J?+bEP=Y-N;ZTIm;Y!IvF^By2p) zJUG9)4|V;#gh9HFR!5wdbD-UG*1A-Q+z#Ja3ULR{}Fx}o(ls52iI<%z9wm_6Skz6kQ-+3=#;KGzQSw;zXSut zY5K1ytH^He@rssDC8(W2e*R>e_I}X;0SD z3t6fH(2z#TXE}cd1Q)I5U>dTHFN+psUdLUqgL4rkxzC0cWyX z6!B8G*32PT)eA}^3(;xltAK(so$Jt%%d6p|IfQlmbGOfqSPe@zTaOsb)8s5sC5l{F z-y-Nj^&(!hyzYn1PC%E93sC6uUs^660(0PMV?~Df6q{*bZ!)n^+TX&}Q(T9|*wbXd zdzJ&`c=$v|wvdU65wkJ6oRvc#XK@cq>#QSx7#%IBN8?bok}iW@+9)&3LvA4;HU)wX z?Y1};N#WJYL#VJmnG53*Qpz|Zi*lO>ndF?d~ph1E~R9kvKBdZnGuiWZcdi7>E-WRde7 zti@LM>c+F9@JP;OB504&OIofDCk?V8y*Pr}QYx2gCqFFLTqst{!aa@Slb6w+h}ci?!@1a= z);vc`EL9x$3NZM%wV}(^>mE9{6T#R6*<=t#=%?EJ1c7dm#8~)1)vQJoO;spFol@<;6PItZf?cb zj)y+M`o;L*an^cMW89Q-MZLbpk5ZCD(G27EPz`ycS!^M;!NnaYO8l3gc)gEWcZ<~| zjE+PI?=ML^9{9Ytj4a3LLfE6R#@q?LYOuJU-;I+_nZC8bt>%V>Mx`;~)+gtppFd`v zNJvULz3Nc((aAh7;1quEcazVcJK9LA8#o*Q zFvUA)(`&2dByARrLd1I2^3(YPA#>Rf>OL0}1@Cc@*a*`d&>36**88Y9*&8jM`swCa zs(CFWiIgumG?E;53aH6Y8h>IJW&C;oH8XPxO5fpjB1W7IdFZmacn#nk&Islz7ErE= zu1G;d8xV&nD!slGM_a}w6{7)9Y$dX`LsYFf@+L!QTQy5iYIxDlIxgR!!O3$i#Vg@I zk@>%98J1kLlPB0`;K@Sq*sNyb?M-m53<(_Vl>A1W>U?O#_|y?Ao2uX#}|j%^_DS* zHx_w|8~OEQE<7nBPd4_Mhe5Jb8?4|&t+ zn__hn??%@EWHsk8Hs;v<1x%zCbk_NO8~4 z(j^u^>xMrGPUf6N-)Q=ms!x2l3#5fa);~Y#FS@10{=v!++8)~|<2@jL&*(J8e#=fO!ZUqNp?*;7q5fOjqDpAhK7DmmR3b1g|XS|Y%Au1QlYSr$&HgJ=T z@0s+Q8gE$e>=V5Cmb+P~*C2m?Ofphf2f38&9>`V81IE%_%dQWA6gtURZ$SI+QPvg>^)91Cekb5#Yi* za7^s?6SkedB&bhO@UMuqWiMK6Ve^*Xeg=#IT4l;*r;D@KG*!hh0lvM`+o6yPu}^U* zLB^dQ(8RsVFvg`uTxSLceAbNSPRTx}nbx&pT8Kdjl$sY`J`>jk)qRm+?ZEXfAsB8a zI#TamlXUqG6`s=7icD*d%|7n^&D$I6jNzNe`Pi#^R)7SWF{0qlNDdjan5LU2G%e>1 zTHx`@mj54nZy6Wmy0;B0f`AAr2nYxmgpx`MLxUnnNjDIJDm;!uZow+KGs*${ zLGu);rS!tH{b>vcfNc?AC!1!`!$3s^EL!%SF%xZLt;_i>NqDqpWAuGRFCH%rp&z`e=}Egt(tlVyUi^RTBR!9Ne{8#=l#s3V*x{ zM2LMm2mIJv9Z%r_C-|W&0|z(}+Aj}m4Pc**Lsnaig(AzSSA!jl;8l1<+i|`uQ6@a?P4@ z+8r~x*u27!f?xg83fXMvAJAvC2cluChAA_GzuIr`>$)s^K>vl80hv;p2#8?NNJb{;nQHqPTZAb&B5j!kC& zR80TIJn40SzHlbvd}18xmLA44-2jQUo;!4}1;7|x>}KrUym2cBVk+3}iMhiU%y6*C zVC%)`(+#0Q{pyNZgQ&G0-fll;>#Ruw8$%O@UmfDw8)MW1tHV#}g}ZON$IL?3Ylhk} z*h#yRf&G2Y{xAIQ0DAggFv_gENa~$(fYzVcw;i?#pd-NbyEVlXjhPS!ZQ>7p_yvK( zoiqj46S-x(3Y&$ap;{ewcz9^bergeH*!@CRRZ5CvT4|kENab@Na-05OuEb?rqw<>1 z7-?$y$#n&$)Aa!vg*)`vC8vE6R?~-4RyuMh1!W+=0`5%w*4B<=tzEAhqrJ?ZF-cgY;&j_4R{j_Jk?9u!}Z!Zo^a4aDJ@@C5kI zGa#Fs0LMW3wS&gGTc^O7N@-ktyynJ8y&0zsGS7yhvfSi+{WAD?e~n97Z1kI(I}a=W z(LTmr_G`0c2mm9ANIYit*5c597h|c+FkUnaoRSH32O(TmVn0j#g{C(%yitO*afK@qF>awy(@Udv%E|uIU=0=#k*AryKb?j~G-;69`JOrO_jHzD0z?qaHW8%3%iXkU10AyMu*KxaM%G#-|7RWlUISzof zd*VeXDb@SMmuK^N<0p0#r+7rq*EydxpgIg)O7&`b8>6DS0B?WkQ^)M1l^-Ub0g>iY zwpS7;!szPH-oZZAi-+vk#O?&nh7B6?dy)V&z#l^hr;3YRY}*Yx5F@Pi#aK{z;-^ou z@sa{T8O1=>FGO@eyRO2KLf8cnGVRV^wToSe8j#?uz?T3#qnZ7nKafY+ z8DfA=J^dAO;f(`y+jdFRH>#ERB;BgelW`()`Dp zH<7YDY;N<6Yp&9PO=y)3O0%DS8dRpG`%BgIzXq5VQg^t~IXO9bis27$CMNo*SG`I; zLyJ@z>UKRFY%aDlmEu03rPNnx>oo)5>V5q2oBRu_zZ;AKPk^@7fo4X#Ov{VpC6fDX zVG_}=0q5eg$>jRzhuB&Z|3MYI)xA#vGhFzy4GV_u(d*c2Y)UCjqX0$;KYd8NYkGG> z`FfS>L8QnF6eh`+;{lxi#oAZ2u!-YkimH#bGw1qIx5Z5d)Qe$deIyk=s_;}&+F1a9 z_Nxp#GvV2w0()-o)}S`~lR0_BMpCU7kZlmSj;#WSUc0SK&g>;~o-vEw<83~CYXp$m z+IlZd_}Y)I6!U^Qw5gG=Dwt-cnEe(?FcLx~CR3NKo2VC1Z!Kjm4NEGgIy5)#R-cob zJ)3yd#NQ0K7OqG%vXiXL?;cQl>FO3tLnl>Edyl+wiY47zF=j@sW#G;Hjq&<|vo>i$ zSa&uzv3^0*?Rqk8%M@&5bVYBk*G^@*D*;yYKLBZ?=D-ncr3VWtuiL;CI~+{vsl`AL zXZ<>k7GTtjG}X}Swp}yHd z$|y%^?FAWp!}QtYPx}QQOcBt#stVBsv+RO9;zz2~KYVJ1kZGBeptJvQ>@5_4G>2ZpWO_06pzT~)lXIEhVW0UA+jbQ#*V6}TQz7L8pcN&N zfJG@NHMIHBC~9B!DYXXd_~%R6T#Maj7K+sYv!z3YvYdzgno6@(9!d778iOdN7uTBY zo;P_9hXN%Xv-(cW>tz6p)FkbO?6E!^FL9(TlzO3t$`R?1{v$u4u;0IioE*e3$ZNQ!$)$GHfEWwQH*Z6K zWaO3cix0RBFx?5%tn?fMQAY=yv_IWxWuHw8ywJhg9ddM9eTmrYlzT@+^7!C@WBF)J za1h@$eaNZAx_1e8`WacRT+HU$L?E8yZx#Gcv{b((fsgx@5xZ|LuvmocKAT%@ zs6Zi|9(UG$@LCR-h9u9MTRsEy+}MACOhNG6%LQ;q2}s zv&a8B)#8}~UD+B9^f9X%KBZTz)N=?rlwKJGx6pe^qFNX4iEqnHPJ9}_&o;uvmSrq% zVldLOjW~V$c@*!#fCy^n53R-m@)^Cvwa)K*@8_i3N~|&p1g-*hA_!4R-x4j9&}Nt7 zT*su7rQCjgq?PTX1$uCAa6kO>EMO!$eVHNb0}}p803fjHf#*X2$2FGin34LlqWP8Q zXE1Hu8csg<>2B!GJGxc1=~Rl%=Yk!{Q!O{dEl*7j{C6`8Uc$mxv!Y+=yC5W5(~1AA zY4ZUYLHXmyIDz}wpS#=ECf$^tDfag@sO+mvPm+c46<3f5Vcw(@^0QN?1Z`nbG=vABiCe}q{>mu7ru zgGHY+FZjnF6hox!l_JIaI}1)w7aLg8&0njBe`RGO zaxc*D6XWXjdmEx?Z7o9j7~C-iGPfIUCe2SN8yNw5F%mf*KD7C)wa_C|Y#u)UG$btH zt;W*re;MDbNI;X2*NirO_)nTg{^&M*phu7^zQtrcF5c*uESFsNWiTd-CreveRe*Z1 zM~2#61}ohpu=-n7npN)2T?p%KRYX(=yJ)52Xf}OV(zUpl7!8xIv&F8s3hy3IBrgk# zoW6k5Pl*ACpG(M@q=N&(sa%s;CO-2)x_S>QJvz!{3AfA=<4WUHK?g3Y=v#&?lC<5| z%Wg+TeZ))N-pJfZNQ#bK?j!J>ZQy+T3kz`bBY^6;7i1~?XT$ODa_ODem`%w|O*=Q6>Nrti-|#8$tK#(wjFjPpimI4?{l~EF~ak2P#m+nB!srdo|u3F%wll?1>b|&mvt49iL2og^>)$l;DeAM zk%JC#X*M7_mm>>_U(H^b`|aBP`AW(9N@DGS|C)0X+QC3We~-GY=h)Db!)jf^V>Y+E zusRjGE@XviyA4m~2fvK+?v=Wu7U(eLX}Q*5u@S{J;Qdc@V-2C=ij%Fy2EA*|Umm7- zlEB4y&E^ih!nVRPIgHavzT50sRN?Bkfb70*20t3Hnj36Xmr5s_rkqoaT|MyVisKAa}L z3XEc$>}0Gp=KVD@KnCyyHq+?E)`auwKSlsRsdzMZ-Q4TcW&ZOy_NP+jjvNSHy@sLwG;#2aK(J2O`&UF& z-M%>|chdxHSOEL)d3+n>DI?@4#B+Qt^&(A|rR09j%j_e)qq+=;5|>epVr-w!$B%+J z9>vQw^5KO)n>|r%6LmHb0yfjn8{8e)=jZ43##97XzF1-Xf9&-ouq-ZbdH-kG+WwS9DYPb4@P4jV zkEQ42q4uDeOHFn(doLrscA4=?zb&#RL9k7*WXFapVLrv8n6A0rXvf*JKt1e#JD#1!cZAxpMXW9 zdF2xJyM*1zgvdgWczO;tR|i9j1jPyKhi2jX6l3bvCgj z-?q9vQ#;e|6D_s}E;QnFiwUH-dNA%)q=(aPHfE%A+h-kW)LYn$*xXgn$m_W#sgfAS zzHggXTe$qmF+-nkXY($`V<@Ipcn;EV|{PRf?#g;Y%2m%6fAn? zV9blStO4|ecaxn%3@9n79A@oG8#>7wX~)W+bmT;b_1b;g2v}hRI9wW;L7rkSppxe< zN>MFviv9!Kv5EOnulG#fl#Tf8yj8}-l@GVsmLgh>BwTOb0hFx(5Bw%{mL`IljQDRX zh_?@85>x4t_Z@|~Sn%sZGl+bjh9`_KOf!omkApU4gKHy_O5BBiZZO4%Q*%B~ z8{^*mOhlH{O{Lnr$-i03C?It*H8R0x`tzohhR_A9n22o>+Cryyu?Yb05W62Sl239Fnn1(cd;Fv1D@O@Y={{x2nI-pbvtZ(G#`vV%VwtuzG%JpGf|`t28N2#%YMu8NpUk zxV&7*i!vr7huStV8k1x0PBHSYlBd%fz{8JH!5p(2hbpOjvNL`w3qhNqfDU_BBnc28 zMH*VGQ2kX?6FB@ZE1?-uJ*WoLG7{5w5lw8nxou?<1L4wdlo7Dss6sTsL2*OKkXft# zR41t2sum{%yfOL1h^bQ!$-`)l#5C1x9FeCvtm?f~oP5Xa z*!tbXPQaO39E#|7J0|3Nj4Q^n0xqexuhVp0pi!=6-*eEG6m)YcKn=k^+MdzkbI$M6 z^)|czBhbyLSNvY`oJ}KtpuDH~UBxw@_gDJ z9xe@;RkJ=?++Dq_LXMuSswx}kTi)OQ!M?BdNgH0z&!idpYV6-pGPOX&5m+_hBBQ9(a2Ski~u z&Az&XMJdf0U7DCwNq-jyNS{8B`%XR#?f3>jVWu|Sa}}u_-tLZ!2Qg#Nc%e2;^IX zk5VoimU&Jj!lo<+G9g1*(&FILL$ahg>Loj5cr4&>ja$%*;VCGdfEV=uB3!a+`s0G# zF!&USrA#{ptxSDrS5_})t67$4HtI5avdW}tZthWk6i)VZ0FXDS=7lf%Z4@Qymm3k^ z*jvrS;F}7cVXHW_IC@avvk7uNVS$yCu*XSyV8&kOhN(jLEwH2T$@~?)W|zt;`yWai zz|0KO3){XbUgI@DO!n(H`&U*13d3*Cnouprt*f^t8XUqP*F-qw&Y&W-zX zAY8p>T@~{LVm~fY0j{iDZPwj0iskC{DsAqxE)O%Fgd`K++5S{}jwUKEu)CMsg^MNx zYv=f#>X5&Ke3H6Ln!Z=b=rrmmX%uen`D;Uq*#zJYQ5}vN-l)Q$(y7%c_R0o$WuHW5 zI9A_ATu7*iuc1<`OrAUzS)?_LuIZ<`ZQNwpL|U9b`}ozD!hTGZRxy7&60Us9sJO?D z(*)7zZV#oa8TF?3`PK8BDTFE$7DG6l2ksFqAHU)ENeiD`LahMZmCpGdZ3Z`tqI zwfN>;osPQ*4;PfIo3migKG=RXwZd+TPARFVlqXbXtmwa;CWV7`_sZS!Ju$;5U)e{aXjdoBTbz?l3t0E%f5B@3Y1oU((9s$6c+A^d3G6|aHa<5v0m^Gjiq^?*;@Dke* z&||~@`9nQCXtzPs`O)Mw?9Ml%uwSI3ci;dAM`gs;?Z0}O{<^NEti@i{0}mkOHME*u zL?M8hQ`~z=3xY6&1Xv~A_t4mv#QU_ikiLF6b&FIvjz>yPIE@Z zt;9n+zFdL!pcn~XeBQOpLBtW_XkfSO*szbZK0h}j{?angYXf3CFbqr~xua%D6m;Hf zo|60X>t7FF?=%xE^@bxjKG;1PE)2<-b)X&d@!iWP1>A&g;4;k@KzbjqnPINU3cst0{L+V^(S)SI)ew{YVm^Vy`6$7ZpAFL-@WNIryEeNnjia!)r>3x{J zEKT5y`PtgFWy!E2xc2LSQ&{wL(Qa2>>i&>L@n%x!7_UI<;n}H=NZNxfGj}EXLiD>@{mFb7mSi1uSAul$TbifkBNc8~ei=>5Vxn$)X=9auU& z+KVBj${z>Ora!sC4zwqKpG<29}rLVb&owyGQM57AZ#SUrO;))rP;%mjS{WRo9TeY`Dvab*B; zFqUqRdiC~TM}|qv`+`n-J?-YR$sQKIsYWiw-na%2+X+3Opsq)==8`a?eLZZt-@E-g z_YPonr$HB=K=$|Z%I-o;2#1TbifxGLSA0c9YF7+M#K_Rn;L7Vj zTrF~ase+q#E}-P5gt*bKlBR|7!A~Awz?7Zn13e%OoNxT5<+xDT^4jkq{j=I8NxXNU z8Wo{3zx2W;x8Nw@jBLe#xcI<6Fz_13ZMHyCpckKKIbd{CbIvIE$Ve0%qvu954yZm? z^}*UoWm&2!;5B2g)TujPE^k-=^qi{Uc6el*WK)gr&I@X&Z91RV)kC;`$jGJs8AeWb zhY?g$9f)<-NH}|&G(!Wsi7g`+JVll$m+_S)G_jwZq#1M}GA00drf~e|-jio0k7S-@ zNE+5SPCay6;Z5{j=H%u+^$hzHK~D}qfZg}(OvC!wmwH#AhstFc){wRNfax8f7}RYxt!zB{ z9(JaU2L(u-&-^5u(Mg3<00B?KfJZJr@m_y9rcg9-6LbYfKUQqeF(V>fn+;YO#6S2& zANAm!l&2B~5eE5t_pmX-KH`VcI zj*Bea@hHA#<5RLOmA`7G*4inIVb$*x?%G%I{Qcvpks7bAD+Z(h?$vHAvUfgGbIX9=!_z>!jIcCuAX%c$2>MxQM`kB9UE0m$G9n5 z?2LCm-!HzqKq;atPOHXQzB$bQ@ACfnzzpP#{7Vnh3lc1MSqMq4lQ8DsXNuq5yLW{~ z^9#6Kr=*~{iPpa09T7wLJ&uAqMn2f4uo=)@mU+opWlKKzgtDh_n#>Mrg%kvW%%tcE zZK3#YW?dk9Aa(JI+8cs@{tP5wzrLK??e+S#Yi4=pi(^Wqn@+eh$4k_c88D-%Ww!JW zE%mj~8d%y?1Pd!`&t^Rt8jrX-0)P$f-M`mcvVnAp4GyD7n+K98bzC!=oUH~9Gbi6H zuT%G@(bV8I5Mp~^3bwnC8o<6L?+$v}V?MS?g!8qVYiX6`+d)3&^H$WimQ*aBxgXU!5H&h=IDq85KnvEWmVbM~tduC|=j(0@u84kbF^nNlv9oim?%$woA`p%*BDS zFV@c2JXaOI8+W6w6zDFt8Q7nV6u~)n;MR)aX0JWbWTLrps~Q(eYRuQJ4BNE&1e_d@ z(uvqc?hB#pB9=d}JOdeK&68dR*wYoKp*PM9qe+dzcl~^6K8pr=mi4DW}zGJ36T~ zM}@q7Yx_XBE3*s;$nP0lYAd7X)&k+ z1j9zvs~QzX{WLc~D?MG0Tc(5GYCw2}TN7K$2m<$XYi%fLdH1RnX;vBCXqLyjS#++< zrY_BG<9wlt?Uy}>dSE8aBExT7ck@0(Uh5~Gq%}FaQ*Eb}1iWqM_YVd{qepH<7T;Qj zC4SOZi1N-A5+rcy#M^3db_HGvGoRd>sPO5#tQv7BP}+2PrsItNN61&0UGW#~?@q%F zDIH6dZYItdDo_!mJ=kuV!uzORILBi5yQ?O436N2#Gd#wCbn2W<>+_tP4i_t(dULq- z@1Er%FQ@s^G0I-|H>vh%DzuEI^V}G|&lIqS$?`mKo@GbmUm)st3``Gr);WRx)&%_P ze{8bGB)CpO`p{ekO_B(&)ySvv(62jQy$y+mbVidilD>kD*0>+qQn^=;EpWfF zQ?50>q3bmI`Mpw#P*3D!B^X*VtcWI&Jf2Jya(J*Su;o~NWyy?n?4|VW1wcwB$;ZR4 z%T=D$1<$dSTxMubS7=gJ6Y8K*7?hw=uwb5w}i{0)7j?Ubs248)#IhTT4{yiU%ojUCSiOOlUsr&ZRRa#pM zGeB=Ni=drmrTqQr8U0HGi69v)84XW$en&hH>yIC-?nVZiF8zT+`t@fgyP`dH0r}(E zE;HM~p;GR{KXFFGkEWqQW^3I`8$BR zd(fhh*Xh+{fvLD&0~hQFvTOMvr$8HpAE|IN;lWHO7a#B@nd$d2l53&zl~s#HqXCVi z%cD(11Y!7eo|g3-5JkM?Y+V({*W?ZXfiQZGe9hF^2$L~s(a#n!(4f1Q*6bqb}_ zh}x>v%kvYnOn0YCN~0Xin0L%}Eiu^g{&c|s=5FcJyNnT%4iOxHOaTnM|JsQ)h~QC0;f~QN)#^H4KD33GnCP2TFYObv?X~}Ycr~p z>HpKe{%1ud+bt*MU0nEuFQZ?$+IBMaJ8-b2kHpw`whtS2tcPtpm2&d5NfJr8m<}eU zth>$w_^=)Vf5iLu4_Tun-1AA9bc%G1Aw!u}Z?YZ-VUYW9!`gtPo4m%o#vuE-k>gm5 z{s#$|qQ9Kn4L1z*mRDK)4-c!6FZSof$InSSe9DzIHv@i_`!0q{h!Y{ze;ux3Xa>>C z(>`ti4~>d)dd%JP>gF3bmv9D0J>Ev3WOjM$X3S&FQ37%5O^#o0zZL z%Uc8#CyeA%%`w%llrj+EJ)be!&b{$1vRSyygSFWWnW%y!vlD_Fw1ckL_5`iiS&FT~>=*+i^@f!HSFD zB77*W`WoJOcRxDw9j$7@N^sqKLjx^$P4m#e5yPo+u`i~Y88dL~8`2*g)=ynSW*`n> z(YF&;jJ;k^QpNS&3(oXWQ}dRnOiYevA*Q$;JFLGg{tR?c?&ibTiF?u+nK@G(kM9o} zs~5k|=0otJ2S2svX^?Q#hUJDXHy?WD^kzWSKQWs65T-Q=dI9yJ>5#8Y9#^+&>^&o| zjkH2cC>SN~$wxEsXAsS$q;Z4rL`ZZd%6H%A;k~-c=^0N?L@W(2)zN&edJR#Km%kD) z*6RIGDlq8b^%EXbqT!G7%71NyelL9Udv6q5p0>3wYRVkhu9Kv9u%{=I)Lt1+DdFph zEAKm@_YCuRHkwo!39#8;xQLhHj8sh(Yo~xCVMguwUqE%&X`;E)d^2=_{H$Mng+H{u zBsA_N_iahTwp{QXY?3cZK(@bD9kg^3<=vV!F zudLRh8u;#Nku_AzLtiCdyBFtHeX%df!8Gl#+QK};BwB<$YGbj>D@DSrw5iYyUR4_= z^4k-V+9JB;bq(zn5S##jU`T zdm@wp>+yQtN^9x>RJ&<&;yP0CUk`b6gCzUX-?9`Bqyp1#zI&jqt711N_V}R)$}(;s z{o?{VRgSe>-AxKIWnuAK_thpCO~Lk@k~LojuLnLhz>(a3;;fb`P|9m+YWnLKLhGtM z+UVDYsdup+K*c8wIsf?zQaOWk4k7=ifA}Zkv6I)*dV1U!l@R{ED-CpO&X|>zz31b? zHXRRR;U_dO8?9D#Uy|N$ljbii77iQdEl2-g{d|w5>P_gE-443Nm%shcxtkA?je61v zZs+~6SAVa>-BcE3*?!q~ z_C!e!(U+8a?9H{GpSBUH*#CZ-+8s&Kttn-H(KIodzxBX$3xcO@8uygw-p;r@Cn;GV z9_?vw+hb?Zl#wMYO7{dvG(zqOBqUO;SY|MS4A zaP%LJ=K*U=3*5voJ>`%8`L6@|+ixMMxezqjS;8ERH(oDzW3~UzxSvFA-R&bfFdf^XYvSzQ!%RniY{|_@f}|c8rMA z0QYa>5mQM}vXxmmGfn^dYyOzT-?#Z+9~tvrO73G@P&jrwU$v(&d{?(@~vim=r=w|+l|@B#3V zZ=4My|K4Kj)Vmlm+b-M2B4#Dr1AF=JL0|kV^_<5sE$wff3cnZezYa4m>Q{3pPIC6Y zwDA8Q2cVSWl}B5dX-CsSzeoA^H~*cx{{L_Ce-E!0HOa2%TdD`nG*@nmd41jV_;_z# zy~;WSdH;zAhcqRnif={~>Bo;ZC~0WcJu*Xv-&a`lP&_nh2>BY%14w*VLS$TBD{f2r zt6u@u=F68Kmjx@$MDuo`Kb8i8GWq&2UkYs3J_BK~p+YC@k~nedTArJ$T2^X>`t++| zMrC84iIVc(k00NH8qVLpSE#VVOSB4V6w2s5G#2Y#**9yh!A^4~aDGp<8%7dUR`j)p zMR%#7Obn6K-3cED2RGM*X_x~PRWijaC<@KHeoCNZlLID4Uoc)&r=^ z_PFnInbb=oPH^Cf5>tH6h#I&smNiG?*wS^^BgyhstZHpVq9BQYfrM5S-#@^WE zGI?VkA(Ve|pO_f&@R;JZP^F*n9&58qFC7eTpI&1(;7hsU8s7Ai$Dr1PE>F zxWSTmY41bH{n;MmUu@mP%Aauaukd_aT;#`zn)SrTG92M!0ZOs)g=ykBk!7q6J!Zy= z?QW3K%k~`z&l-n#zY|shekw8O@Oil7>q9q-uVo7svuConBj6OwHG}85#?9a#=Vqg~ z^%!+49U~fd#vX|PxH-MiB&b-DX?`kznD45+|NR$h4qCZAr_|V~cGf**q*QB^3A=G2 zYB%naWKZ}g1FM8YE0?w==%Qeei3X;Af#ac8Q3z6t$j862^pQu~7IQ}@)+~RrlH70W z^69jLV>4dh(Oj#}Vu5F*l-7lDr+eVDC%2fMh7uHP zo{oY8tXI8rda5($Wh7MOvW^2gX81Bx(oMl!2&-9X@0E7!VkK{Ya;=bN%K59#=$%8I zY~b#eGKNeEGv#Fm(prvqnpL6st?zJ?9(m~bCZ%V`5mj||-v}Mq5<-49CZllP7mq$V z_CG3l%D4J08XenEs;+EAue;1u+2j3&TCdbOFxAzdQGR~?1zK5>+s!f~#8Bt9; zM)xd4TL%hvek)cotX+mmcTCU|kzCVW79v=2->Ev}G3!uOT$@|u;|mrBL`mc7$r7y| zg>B@R_(NBBy`7C>vHyn+`14cxPBP#HFexdQa&`~_?WpX$2#JvpBM9nAQLDkcre<8J z=HoGoA8l{jbIP>|9Ce#Rdkzxx*ADo}C-q@&Var2B-j^l<=3+?U%wp~%gi6GAckltK zvle}cSYvq`lBy`}NJnIY3j!p>q!uo9Qb_2nBfH|Ze9T0F8>P_dG4Wk_A(D}7O;e~} z-&o}|tlOQ)&F!|rEgWd8bYORK)h%GYkU*PZzk?;^iASb40}TxaghxWB2&$nl<`fwx zd7f$+bXf45*`OwVuW6IO?lF}~Jq1OY?HFKfP%bLA0l~4=xnOU^!K&W- zcMo1WNe=FsmE8#r1n`7(b}L*jl3)oaUyA4T<3s&F=qRq8o0im<%E<6xuweuHeeDoqIN;+oe9J@8K}9nm3&hBBok!Yn^Nrn!X=Y+Ctn@44hWYnnqh3sk~1nS}jdzxQ*^_j5#Gt(q9>fCT|OtJbYQysLo?#6?o#+ zNQ6$NxGh#k!SWkB`ZMeaI24P`U8H|PrVi=(y)p2;%v4X-F>k)6ZL@7afY}- z*)KD4G+$H~Jp(FDEX^>`cgj^Rex^@)%19mzeM~)eN^WAnDYL%=pvx85&Xd$z8`aiB zdL{b4pYfyY87kW`2zY6^_Cwm$*@?rhgbsF3RHVJ!13mQIqX&38Hu6e`gosltVv2kCDIn&Yf`098tR z)gJphj>nEEIT>toaW9Wu7M~~#vS0b~ACB9fZ?|7go)m`6-0-IW9v|&1bupTNLC7%< z0R4TXfCHpP@<%w4*@Z^T{o3#73VE$!{Z^)a>kCt|EtD{4-DE?^x3@f%IwfjjA=0pq zlIMvuQMKQf@^v%={Q+GxWlMF6LoA=fPK?O{QWkBo-V}5bSc* ztx8>(K4|aSG-`kXZm@wFFMTigfI--yHtam*Q4eC)4q5U#3RbFPX{((U({|U?v)zMzZvB+TC5cxzSQ%2u=MPZdz-VL_4GYXKBNtEHNmJ>&ZC?2CgaM6I1aVP zQTkT1Jwp;!^3f@;!`doc{Wr;d=%nNcG~MJmjY|rqT_H}s{R$e(DeJp965dOza<4pC z4qO%`asIxkj2WNVR5I+?^m@EfqZj_tHo7TraS@1a-wkY?8={nBw4MMAvVNql564vi z(6Jt>?OX9u@LkDNXig3bUU>^5M0Nu5jw(N2hganf9#?h&?2i_SP$9EVk`Wf(GeD2j z1hP+vJEmh9D&?3Ve2&}M%t(XUiMU}_)A{>FsuSWX8bqoE9m5EuDGU5no)&5prH4_6I$pNIf+nJCP>R~=5Wlm}) z8DU~s!wJFrhekssRLy&0$2-?WK2LE`GVy?CT@n~=JssWK^BnjVBR&STIHFUvmd-Ao zZg#y8cmQ(gHl+GFQ*G58AN}ED>L}-n=3<|^kc9FUK!bNN4SOC>`7PU>@pLI!yPWB4 z;g(*#W!&62sK$;>$HedJT$ZqvSP8b?t_K9^Mf zGC*mF;%0H5sA2-wT|l@yF|7=)8BX)TISs_BBQGXxc^N4aGpa-T-Fx5=Qp`hAP+^0jeZD;IF6E1qWl z8*Ai&j+N3)>pS1%2d)qxt8Fzs9lM#HInUafPSUZ(c+MZ9&Bvy5)z!=1N=MJ;O%>h4 zLQWu|#X-zCa=huG>*KZ3OI(}df-d^6Cx@0c%y$zRhsq%u$Np0d4oR0!qRlGmiBoM@ zJ@8`{dY7m~<=^7leN4Wu@zp^qT>YnO=g*k5reU^t#wkH+cg;2-msu>5osvtpio=MQ z1n)5ifeU>Y^-kFYIqQBu+l3nXuX$%$#$lgDR&%b@j&ht;uJGcYF#ol@@dIlDC`3e& zO*xGnh-zC*k3 zNNFVBJDa=?Ru&SPw?x|e{Olu)pjZG(bk6sf)hK-Au;C>k>LdRHeF60bcl-H`*Ls=Q z!TD^Q$FLSZYbWl@Ay16KN*`Wa48F3sqTin`DY_ErrsBZ*#obs1%~&gYk(c1^(YHeY zX&-|I;Zx_blP1KXqF%tZqIhSU&m>;ru#zkaU0vz`XI$Z@yWKeYaQ9H%@>ua>iph;4 z!-?G_=9Q$+ag*89rfaYDKRl7F=6jr*Q+9a>_>y9gk~R90Qt`YZLr(=A=ry;#2JW3- zjzTHw*eJ2p>qIF7p$2+n=qNMs*L9AtvZgf2Qo%F90Sd$GR1y*&uE_{I@3q2Y5GJ7^3giGq$f z`@VpspSEp4r-r|91&tj{G+My5d9cwh*Cs!jbu6u&Ls*KD4mJ6A)uNc)XS~)Xd~-Cr ze&VWviKCO}b}7l(K@35NgF~n9_q?^Smo({XC;iEHf8N@v^fybtdTd!$0_Y&8rrRXo zH%ixR+S*CH7HGe|BA$6!e>>38$sxncq*(i*(?AV)_M&f{dakbTxQN;}7bnb2novO2 z)Ypcd#D^CC=~LyQF3}*!79HhtyP2v?zb)K?I!8m@O=Ld}La28t%b2{ZvdjqTIg@c5 z8jdepr=lP9X9hhDz3Ttn{pWb4FxrhGVMA7SSd#Ga!j>G_bg{MX2p!&9yFXg*W0GX- zekC2Fc1frTtM%%u5Z?>rj52^ur*&x4Y2d&ce~51%;vc zNWYnhFYS>MqZ(>V=THnB9e*VeN2HQvwDF8>D=NJ&{(N~Ou7jVVk=F<@7J|AcC|w*f zJKn6*z}^bF@$pA;$;MOJ$5JaA$c$Z=wHd2zMl8iuP>-DAdAn>ef#wgzG8RDm3+^Pu4=YJ zC81XG7LUTw3mTc)TEkfbsF0eV$HR{bli8zmlQrzCEfnaiKpVzMp@b>NRWl!6gM`|b zg$#EMtr$w87b@B?qXH+8;p(JL&H>c@Q$TblIrPU%6n*q&oA>s}%;B5?XftXZZC&sg z`cjrXxS_guNzuvL{YeXNo%V){zptHI@Tkp7q51pQz$q-{zAn=C#A#(zL^70rGViz% zgLQ%EG2R1&HSaIIegPl&x$8?fbV>@hs(CHu-Et*_78xa6w_H*qDp(SQFYrV-1%$)+ ztC$$k6SsQgKqs()@0+5M1vCCqApb0_2RhHzM@2fWg4YJyG_SU#9Y*M^i-q+aM4q)s zhGeBmOg?TJ^Z!AiiXn$uX~S{rnQI&i2Ezxx>ly!B2>VBtEbGpdIfZ%cvsd%6qsF^e z68rY_B4EOt8I+xKSY0Y`sR$PaYlOgWc~~44*;eybRVKIxmV?{BGx)VpG5&X@;ZZ-#jB0 zHJW=*6g=yv^o$}v*8gbPqcBrp4h3NpIXufA2&jo}HY$Fm-t6d6=^YZcJwjOQO=bqd zN}haXKT_j7Mxw#~LVf9e^hnz<$CIePl17#aq;8=aOS6%FQk8wAxi@MjoMx&T z05mI+USasG_w9n!6N0VG#9uy>cmqs3&MNz#%hZc%yveG$R^c{O^;g`O&z=~zq<04Z z(S|nSmu*oH?9P2c*I6BsjTbqz#Zq*KhootEDhW|J`~T+8^Q>vhi2M#qHhXu&;MNgwSQ|E0T-^;YrM5bd{5L@(7ViYA2yOlop1U^bICE3(`~ zl$=faEi56yMd)4H+!M3Q5`l0}6|zP%W2+1PZHx6h$8Xm%=`(R}`q`}OX8ms;M$>&q zke@$>HGo7Lba^ZrPrFih7`AEr6{e@V5?Fl{MB2dkwJ)m zBQ$^b$7{u>WM@uk|0+7oDZdE>JMkTY{dCX71(@iF8p$*tn6RPb2$PTT=)3KRQ%J)>L=X`XT^dOQ(K``AqIc1W-lNxBjCah*QT{KZEbc%7!{E8&j znRchMJmaClw2D!!VAy=E1Z!_PM3HZ#SRy6kqa%E z7Za10$2*$|5NUFdunoSifj)z4_6)NR;b%en{!2~OeKl+LLK*~+?d*rxYG2e-gQcjn z)aL%QEcB4bc|Q(D;p?8kH>gCrx-*v_JLp3yfzYZ^n6Mn1mx4kN=J4ZIuwn}LfQBRd z)0sElf%yALi4fZ?<*Q{SBm}3sW&t_*u>`NC_1e{+o*#SU&=0|B6jOweqUIk*;CPA>nWnVS=X(nYnH=Y7yY_sodPx=Wk z`FC@^8JGY05dA2({x}lScnWjoJMXiE6Y@-M7*S7;WQ}^-Qn*;SufbAdjMyx`99snzI+~b~6st<$WKF|6z zl0}GoC{d0gAH`?57ZoI`RCbR}7CA)i#pczS~X(NAgeS7L0lbG9>9RL~KC zMB@9ML+MttzP(9nd$|PV;btq57F`y)`I)NP>uQ1xj7T(#dm zPGeKM+`$HAp8HWh+OxFZA`(_9UFn?@-9nzP83h12>g!`AIip=t?1cEy0>My(9ND2hsBHa{k7-iy-!rH zcdDTGjrD-pO@wfdWY!4u`)x$v&f3&*Z-1WBR#GCfnKZl7chN4Oj1wcASz&+YbxrWT z&16Hli`!ZtTruV8?783=2gf&>J9lB|oZh9j{mJZPrpI^gpRYGcR2@xBxoR$}s_Y>2 zO5RZyNPor-<<5@0_8~sD>Dp&eIUBN+NJP6kEH03U^b`vma2?-YISL8H*{JNdE6ZA` zHXd>)^UB^|T<>j^pY7!sJXQSG`+`L|mDLDzk!uWL@|h!4-?RrfB3^=YEaWs%s7Mc{ zDb9FOX>boQaplW`fPqi`K|`K;PAaKPc;X|VVII1dR2dfzjLx`8cn}}9m86^H3npEh z`oLzC9l$+%w$td^s(nw~&Ek8}@pUgZ7+KBltr(odd8@02Ao_zzP>teJtIvu2*Pw+M z9U+-TO(1cJRj1A@w72@pGu13Yz9s0@v)^Zoza2o>rDuty3<}%zXD?igZXeQ|J=L*OQBc zbt+OXt`@cBj=fpc=b0O0<2khhZb9}4yig%Ld}<6J$dVpKuO6B4>4%5Xjm1@%4+|&r z78$7<+f^Iu^Ym($#8bdRMwH&%{M|ze65iB4=C1DIstFk2HX{`S^eHvK zw?lY1BExS)-HqPNVpDBO5Zl}|Un**{ANYBF^`Qly1_L6mp^DE4>?!@p^(;^@vGLVY zD-i%~W0a~v1Wz6HvKWfo^jtSzJtdh%P42ZhY$?t$Sg7Z6ej;u{|M(am#%`x{;8{K4 zhSYzlja{>7?vE}-TyaYL13O@|!64gZ)e4X>Y#T@|SF2jI9;1VLP7n$kGx|NabK|5# z(j%D>mNurN z0~-_(>HewB3+A?QS!Ng5HybOY-dII7XB~@5a;l$Znw<@gRQ*OU?7EB;>{u~sv=Y~0Ai6EQM~nd- zG%E~Ek;TdGoPX0wl{I(!8nCNz;I)ohj78jR>NSf!1kh*(qoDzoY) zz6Z#j_s=tt?(C%Ctju!`_D8`5=e-BQUOT(Biy1y8hvSh1aG3L<45hCuh4iAeE}tVa z(Ga?69_qClnz45zCE#T+6K$du);)4^#}ND;cRkf=P=&q8;;?5~*8m_s8EsQUPyYDq z%}<6WyM%bnot4kr6eOHNDz0k?AfF09GX_sF)rqHrH?{iGO6J8=1l>xUUYktT6eA*~ zXqOF3kcgSHphcQ~V$kV!G@}S*UFmJyg`R)VB#L1Q+2u{ecK>-YpZYhS%~20%RM2*_ z7Gfhs{2N2pimn!B<#iYn{QJg@fTz1U<5f-!)-%6KgrEWI^{&zrVnG{JxNoCh-1_Hc zCTmPf4e6|flx^t}n+X@_i_Q>svx3tCR|#i8E(`iM-d=%7>K4l!%8mWxwO51R8<$Cc z;v4x|IeT@r>b0mv$}h3zqWkYk1#D53Th#y&x3>dAUb4KlFO0H+Qhhi@=+#}ne>|bg zez+YoXfstaz3e28KubG5J20-+UFxw8|C68DPFfYTBe#|KT^8DxSlb7Vp@P1amB|sy zycs@KJ^>K=MXjR8x7d7%t7*S%TX~9-d1qu68`Sd6-k6aUY1=-^M&Bsj4EtGA8|c$h zU?>i}ot;tHE7{3Zt>%T*JA?awX6)UhsmQM+MtT)FxB8r>D}o!_fsQ zPnj5qPVMU)f&QQuEM|Dh{n-$D1ixz8F4V%QYPA}nRxQ`ld_QC#Jw@iNu1kuPj+U`D z`dqv_w()0;r2p}x5-Us3J0Vc5bQ+b3BLP0p52k^LxL+HF&!9q0!gr z$PUl*e39yFP7~_r-FrL8S-kH4Yum*_$BS1q39fXb6nPWA-O{N`IU5{Q8d9=SNBh+t z&=?>JJ$Y`EN;hI?M18BjFCUU3NW;l=o5rMV8)!>M3RchbZ^>uwEdHdH;A$NrrY+e9 z8|tkrSUkAecm09^J2@Yr^(FiT?Q^8Th&sogb!1%Sz94uwc$Yc_*=ZUnrV%CUFc*-E ziL#(|uAXqO2C0hNGlqeWj+w*+itQiUGCG#}rP1B%$7`_pJU$K9Z{@k}$Rk8(D}n%3 zblyN8N)_*f2cOqkNkcY--^t01*{s8ERglr~+w&-MeY(GW`{049f@@j5mQqsBva*Ex zj~GtvPVtb-$p1n|h4G+myio~x8R5H0WH z9tl9Yb!O(^6St;%OI1;4V6M{ePs2mk!PM#Xn2{Y?=J;{sT&uAjm7LcAAzpD;i-M9K0~-yA2*5@ia=lBXA_sb+YQOV zEqr|3F%)#98|0AJ)Lzo~xSI1?Otm41$+( z@^UVCfD(Mmyf9LrU>MR5y>APoomDKBT9h+!hixd2EgYitn7{ z!`W_^K57bumaL*d9|Vd+6xMu(l?CyBADv>7{8I)d^)cFs=kcy-5b%Bemb^2?junlr z_Ry*5Wno?ALUVdoaZl(WPae$`8HdeO14C&VUj_-R+Shw+gt?+!ya~41HXlP@F7(P< zkhZ#rek36k3rL5obL4Ag$p!u}_z7#t@ZhEO7JqcGZCB@BWSF)pz3EF&woGD{`~mTG z`jGm4VTFjWw&*7hiFi)4gn{PyUd{q!mVlW%AEi44Quo2c%DULl1aZ>Yx*PYweOPivNKNS&Nmy4aGp zb*inQZIhiWK4voeToia~o20t#DeWy`;r8tZ)EV^wz{^&*jn^#PxXeXIp_cYq5y0Bk zGdOo1wbA;*FXFRIF0_k!M1#KAbpU9HqGSVpyQ%Z(X4oO~pf9>Q-dF`Z=GDvxVJJ(( z^XXsoTXH7lX6l)EgutB+kQd3aQro8JoGpv-Gjfdqh|XE+F;ky<{>P%`0l}K?urC4I z8=s&9J@qt)__xuul0WZ{c2nrP^KXuvT`zG8yVdimZPa7hJGmbTR#+cL_e&rj6+2Zmnga@Cut4rlZBMs{YfD=8w1Fq$E zSiSQF!3M1=qL0o!%(^Qv_T9aC#uE5p=lqdKwWGtEKc0@&`wdl5=`b%T2iO{Se3?kj zV^;^NANmcx#ns<>*-8>Uj6lDEzehuB1HZ}!tL{@RpE5UrC&!5P!z>g;`l&N1LwQz1 ziOZl{omEPA!#etn9i|5S=wX^o)soG$HIZ&FcVt)@s}z&6U1t_kW=Y#p0}hE5KC7;XN1$;kJWvoSkU z-ii}3{pCgLs`U3j+1ixJ?!#RfZEJElwhzIdw#2ud2C1BaL0`L%-n(p?Q-lC^|2Pue zb}sag0><|!6)7beuGt`+kZHN5U`_HjLo1R z@L6*Ht7dC?xk0+{GAC?ByYJB(kN#LO-a(O0SA_=$d#uhK+0zF@(xZx)Mon9R?mA)~ z#cD5KV(Ee26e~d2*1ccq%Mx!mrQ`F8I{InvSW-k?wf!c~8@SchBrk==b2z6#UftOo zrK7yj8MjuwTG4Tou(D6z0(J47Gd0`^3HiHz+SuYzvtzf&8Es;3NX9(HE3I}h%W3Tg zK?O5M=F4=X?&w{8tBu3R*8`&9WE$)N9H6HF(M*D2`5PV3pAp9sq73w!@b$U)aDc>i zP#9#xRu~#=neTo}q&oS)a{8u8k|`R2h&vQ0>of6eVXLB0TWGNplOHYZ=fX~ zHq3l3KE~hX>Vq@@MIL_%4I>(8-pj8a+mY{UEEW66SZUV3u|_54ixWz7_{4HZ?bX+) z;u9G^C|jN}`X}t_QQLPi0ndBGn|}s`6xfOxSkjPNjIt|4vO)CCk$u!X$!d^?X$8ps z#*=ScyrNL+RoQ`cu?G$_SvPTAvn&ZSjpMnjY510@tfLP4-g#jP1k!~8+dUSeR@e~BP;@n#4McA76eutXSs z_Sao&x*3ZUn;r`Pq>%?KF-yjAA zPDhAk#k2qPSpQ&{iYVl=cz8(|t zX~HZ}6p{Bha;wcP+`Zl+?wWPIlf+Hu)7-midur9T-W+zpx0#${S3l3&wL&dYHn5iC zMk`Gfv*+}t;B*0YiiFwl7$}27Rf!2FH@`%sc^_q5J2WMqVrKFcZab9@l%<)6qwc7HUo$0ZsL(OOE42#q9~*Dx zXUMYqifc&uK9mhNz!^3YWf;00-x!|SU43k8Kt!MAF_Qo}uaxmR%XC3KU0IKhW9OEK zsD2Aq-WmTfM6jOPYV1>t;!)A^?~$)wVFFLld9yZXKZW7L3Ky3I0@pdeH7bxVC_^8t zK@;vFnX9PClmxh1D45ocQMpFrQ*?}qOHC`#(?y|?`nd?g_Tn0)_LUjhI5--XLYiUY zND8Z)k2l?*M$9xL_?lB7BSvJO$k8NGJ{vx$<7JAEV@E}HE?>oSdXKZIjf|;Z>Y5h| zPjCFWxS!M_0{y)}O5O}X))$Z5M25|U~o{HiV-jt@U@`k>`=G_yev+hw`NxmZ_| z+JDmL5>^>_F-AtLHOBx;(IX8%687BrcGk;u&NUxkNx1sB6v~UF2Pa-=G3hPY9VviL z%JmGq*-X8eSK#%Aw&Ob4%`QRr-Ko568}MxBLm6RUlTJ(W2~W`51WrGXz8_>foDv?K zgnv;i*+PC*T4J+vR_W^y1KVt^_Yj|9i8{Ces`9;xM1l0N&5*<6`16uc|nC$yOm6oozKV0oEKKXSpM*9j|{V>Gv z&5wG9!3!S=@D$(T8kB62OvR6p^u`UIiS#$Z#Y`n+sVG+?J)O^nLDXAj0kEcF}@!&Vk|^^TlF241rmTi@r{Y1T?ARKR{n(+;2NKQg>Ez~>{z-8iRLYCkUR0`aQ~$<* z=RJwHB5|}bI7^+v_S@T%_tM^4^y^Kg>As`Hz1$0EwX1iN@DVv@A+<@|{Nv277Q8WK zhM~XNUsbz!U08daDw zcewJKaJ8y76O$Zg_tGE2y*CUdf8k%%xaR;O;bkt-cE|(Mw%DUDLFC&7C)6C!7^7m% zxoL^6Vsnz74R$0huKA?H4H#Il%*l^KZ~qk2*cdB$VPvyI6Yl&5exoWcli~}fF%q{C zYx03g?6?TnkqUL%3$-;thDple&OZp(sS}OjcBmt$-h};utMb{Z$(|UxOAf-UK1_N* zI^3LqVIs*xv!^?`j5t-EkTM4kP!m-_RHMKFGZvT!T0N}4nDr8PunL-svSKc zhVf(ECO!1~U#}mO$$Xwh-MI!?84X(Morm>S#BP|Ui+5ZjMVg{zs+Y#-PR7GQ&K%TT z$4(sKCK{Ht(3hD}V)P(u&)@e8#AbS3@cqK(8!1P_ow*zo-8Y9y#T>;f+ncQpVzRxOU2 zv3~ZoUgyWoaZ)YO!PMqdGbdlh!!HZbUfCTnFHA5!;{7SiJB&MAHs2bcF0&PaLUU#-^V_dBKGH2QEnZsV|sfsBk^ z!Dy2w;?T0DFO0#b?`8JEX;y`=Qtf6#x)_73NWb~n9{#PQ-w1hN$lyzT<$c_hTMl8P zFOj^Uy*Cv7P6opxd>G12+s+ZFIlQjY4OZFysI({=aF{u>)G>icezFc>9?u;5)VmaD z#mH{MW)ALj7}*i^EszklB|&+8kI!dEJQ6vnR^Mw^yyf~nc*PBDKU$!%(@P`9pYDAS zcU$Nq?-kLVR=R#s*+Wjz(~e|RJdbU_=mCZLc?u4ot&jnmEG_zdsJ`TC}a|CQ-uzT#=W63CxmoLToY;Dl7A0_k- znnL_2YB7I0OLKlVIyP>|$y=AxJ4(DjS;BMmd+iqEWZH7OY4NF$N7|U5)0mgsFx+pR z@ufDu45WMC_rk(F*`EBBSb$$&Y~(al z5xm{+7#8Uf5J;c+WaC>0wLQE0*B)X^@YR5p{3ev7Ah9z*^+i>zt>obOlq8 z-F`=1QRi|Y<%bUgs;L_<92@sJIWgli@=!D~h3V zbWSqsOJhRUHp%%x-HC^mp$$4W-ivY2|B4JyFNCF!6`Ts8D)3;e>&vbW&=VMb@zUP% z%X+_$9AWfkyD&JYLb!!~+M~ z8LMvtiQ{ly$ES4|w%Na;z5~qe7uTL$`_>{daVpKW#p<2)Dy8-%QJO_~OJhD^=|!!B z=GRj7#w6qdO>iur>a4 zpCxtmM4Ch@4GV{%sT{yB5 zyIf>v^l+4U(Db*^n@EMPEvXxau0><6uC%)XbOGzDdBI^?8E>#@0+kfx5RH<1wzmv3 zSF@rk5#Y0no35}CI-a3g5F9?FTrt`0)&cqqoeI0+gN@0@c^e2T^XQy@0TUb` z!`PeI2$vhmd`{KHquZHo-H4-)XwGl7Hu@n%=;Brw6t1M^W7i zsVbPd=^gSc=li1wz1poP%|Zcl&u?tnj=UqPM`hmvVQ1F1NXOWb@6Thq*|ZOei7YQ6 zN7#!scR)wP?&MtrXv-)yhzE-7Cz__ePIEEs$sN7yDGqFbj(#Go0=fwAWcyMSNWy2* zX=()nK1z*wM)6dcylM2_Z7hGOi*H#e%}PV1%aPqQW|Oyj%PnXTOZEx>HzfL#JIP$R z5hocfGayeFZzO;6&L`YR_-`_ot80R}pRNZ**4| zRn8!L?!`Q0rCB{96HNhZ_Hi}Ebg1@L`c;7A^y0>UkKWxI$=fy54wXaZ38zmNBc)UO zS?+kJXDNr_#_lSyTI5eO;JuM0vma$L+Wm6N@U2p^(gLf{gkHRQ?p=bgw24cO>8yit zg;TIJG*@Rhw6~}JlKs$`-Sp~J2(ZS*rfW%TM%UKJ77msEVHQFF^M*%@#HvGSTMVnr zLK9tg0~oe+0M*20hdAbc=Wx9`dCN`sCci!EAxV4@e-?+RggJP{^){0T_|4pW{=7Ab zmFM2;T(TLF0>SwH9xfrIDXGWS)G$G=Q~w2a#mv^VL0cc9C8ff|{*qS%a8{Xw)))c9 zLliw{7$ZZk11n77>iin7BVpQPppG~jSl=c z?pK%MK%3(%xI&~J<~;qW%-wRp~HZrKnIhUC!M0M_C-_XLkQgynt#i z-FI6`J#|)Bl#Aw)FmL z+3#KBsgK2(nEVXkqiOQy7s_WCDVn_w&NPc%VTZ0VBL(x_#YF%$y|uyFgss;hq)7sR z`ttaJ9H3iTjtl2msh01`z;a=FKha3#o z2kX&U1KMeKvTwP4?(*UE>Uk(E~ka^j&1Ue-Jl33vPmImx z4?+kV;0lNXAc5!U5V0PDbBYjPn842`*@5}~DB_>Cxp8~=@%)@y7wyVWc6&WOev_fl zhcvNSbK==1jmFvfBsbN9#6){uQNj`sEdX|pCl8b3!p^* zBbXa?u;x}G#G)Yt!)G8btp|6R(wSM&%I^c5%`azL#{@A#L<}OBM#qamG66@I#58i6 ziolp+_3X4zRV~|D2$i+6u@h-(aU3<&u>=T4-4Y>9h9AyIR{1g-ErIpc=1lYK6y@qOH3hbztkF_Eg942gtWJ|2y#T%S z8~|1$S64q)n68L#t(M8W$nTcceR#pNr4mKCHKoLE28hruU882(ZB))@3lCM2bbGa97%?Co zp88jG!2iUKy#9QR2*+=&A-l|}`#ghoPo-dMVsZ94)wu>2>z&^JlG+c=a=# zxZ|AL`-|O7gOod9IoG1PPivEAGpo)PopmDorV}-NCkeb2fLC~myDS50wtQUE)e2Op zLqj5RLTzoY)E5#T651NwsREr0=~cCzJ#*RAlExOq_Vzx;8L+O{FoQSi)+%iJSxS>P z2W!3qnxjf$pR5VNFU5If`pvr1Ys2LMmmVdxJQcYP^HMga;y? z#p?(s3oU{zI;*9PNrz2zc>_o*jACUgRhua?T{e{Z>%LR*hixL?S{p;76C=0CdqXeK zGrIK^T-+-D`{}nCp6AKHYzM4I%C8e%nppFCFpdCy;x%zU?bhyaC2rNS%`B1Et;7x) zA&4Ls9!c@vD3o$p%c9yW-e41LDiamk(W2o#pwgGKjOGBM`VU9l70=96J! z4JBS_{L}|d?g$JsdiI15zyBv0B>9l*qV@j;rxZf;dfeXqnT;&f-F$BY+g*);$kV8 zz?Q=6^b!<~=VUh1nSLqAY)$5%6{p0_amR4Fg?H%$x7KdNqekBO>QY!{{?qRH3x{7g z|CS>*tj5LFY9xew=XZ_eb6tw20o1ko?w1`q2YwA%ne1aCQg*=a`AAO+Cx`{+?b<$F zM(a{Ef6WhOTrJ0-JXGYYRA}%FML;Dk8M`*3E8Q4#ay&sOz7GXr2{gBxmV$3nOYWQi z!Z@CNQQRU!P66+XaWboNr@YQq%bYUsz$hoxXY)DeCNg(TCi1uZW9W@08KKBl>Mz(E zV90A|WixmooQDLifAvqHfD%sxqC%|H&sF0dxaR+jl}~&1fTFA&P1Fe z^x!8D2il*uOi#4T=d!w^s%`-NcwAwa?m9Q+t`+ECKdXZZ|I%RBneKfP%TuI z@WfP$b3}sq?MCbb&VJp76L^PwcwQ14Ox0sicOJr$WN+KCYg~KD?SWdOAHRs|4Fg&mk(3it_6`ZMdQTJB~J{zOv2oF1vet< z+V6d$1Z)*KG?i*>%@BbFPN5QI!B6}e;zo6z)lFiabu=L0Rf#gRpRNayQQy9*<;nSA zB~kWYPn)>+Z19@pV#vYfjAThelaHVKT&sEulb^R6B9ab|i<*}Ri;c`;?ONqh2bRbD zNyA$wAsQym%TDI8Y`FYGgS8H7_ZUFSa8&7ykiVJ^=yh@5zw`Xdrf}f)`@~NY6T-oP zv~u$>(u>^rl&{lVktkMR^{e#9(uprsPdpdiAYaX{1ViG%3?b4-t@v64F1(QA6$zbk zXMelddTl_S8C6!M@?5*7N~w@d8!K*9pjjLtL6#sJxdPnxSptDY3|5RmP9uft= z&Uh2>%X2sHXVDL~jL)3cHnrw|++E4|3s0wiKezw#T|at2m?;MDu9y6a9rAzq{ogCP z9cjQ8VH6`s{#P)n|EUOEth)@WQ9_XZBZKQNs-OPTasrETy9uB9`!Axq|9vmY48OGh zI5|5+{EJ1#e_9-03Zi{;7KGIQ^#A^stNTwWNL|){tLt$RXZHM)8<_~TO7EqVnHvt6 zm-hjcQWPLglmqM_mx3UAp(qIJKqP|oEF7niFgO(Cf%h? zYIIBAM_Xz*ObK|c(ar$Y1-tP&#fd7rXFxPkeT6L~G?`;Vpz}S7JNws#CiPN}_+oV^ z_f8rTL4*tXmscR9rQDR&eBqCmMV)=2%7Lv()^QOTigJ5>f8jMYCoDS{^LQ=qVwVoBO^F& zTgW5%FYe2^^p><{ox(>3m+4`o7H-pq+9^LM_t0GRE;2IrxU!10R}Q{>Iz^!SOXfqi zlPilW8qF6ss#Wt;9tKXcSBW0<+`@RRntjs#$By`?+w^}uT$H{_K(E{hmnSX;>osV& z1~z)0xMl+HA$XrU02WAk4x(OxHfjtifDkfCzG$@{YA>@0Ipd(R( z&QBGNWd;}{p6DKU=exHyDq|x}f}NzvHSg!!Ow@p8;W;JxLR<*h2!u0Ty5gU(rboKC zf|h#Xlq}~{Ao5d6#GLvcfLg{h+z^PsDi0nWbl+z=e8SEBbk%lX?tvg+N~9NceOpUu zI^c1z>ZAkUjF%B;z|^3Ze1~v#`M-OZ%xtGP#9&VsQwpefNPStJr10ZwOjitn>M5dd zUFh5M)ZJ=7d-#SBa0)@2GnGa!w4SjEdd$xUh;7ButjKFxIFg``a7?0hEZW8ThHu`y z(YNUDX)w@==}rcoQe9XEA2amwmRkNB!11Ij+156!okHHp$Ixf`=Jf+S{av+prSo!k z^>Q=v~c^`!kTw)KYHMfEbBsoz`AAM zF6FLwxaKP)49~Y_&EQu@xF=+6FH(so#5t5Dm8LfyHKEFFfh=PfTS_dFoJpJouw!wj zr;ZNfKgpK6k87}n8qyu%p9=}0(6b&o$0^vu56uiMfQ0Ra1dyD1BBaLO4pS}*vp-3U zPDprGe&V4#^bW%SX|m@m4JBvmyOrU!mGTMlFYle_en5BA3nYsr7_Y-I;?Ie~eQbfq zjOIQ7F|$DyJpzR3Wny$~O;UkpkM^lcVxEvv3hUt zTL!e3e+w?jqUHAB|2kIMT#ySis?qSD3uu4B$QrnSf}eayCn(m#Uc|A!?W=eyn(KBY6Zl+Yn(NVTA55yYe5&r~6m?|t#ML>#=(EaIOij>I z95{y?jrWL$#v3qaWLWzhTxK2tp;wdyKZo3{;Q`4vMIG5$hMop@18<25j2J11!FJ27azG*t0R z(63Yg1NDf|(;7S7D-r_Xv*s(JO_w1rzM=<~k}G#C*=P*(x77y7?2`p$C);(L4p&@S zW{lTA=i&)l_iz%&l7qx;4XnAR0!BcLr~~IrjppNeJhpHXM?-pqum5r9Bug2V>xaF& zHyW{WBh~K{0$qb~NA+D6-Iw`Q!W=r3r_KCn=d-fQ6R;{v>iV;s-lEY2#ykkN=P%1UaQ6-vi{b0%)Y48Q2-Y!?5sNsV}4i!D~{u-5n< z)D5|C#6Z!7dBcQZ5>*j*-eu!Bn4A5FvmZao8{c^GqoD!1(SWVSOlX<2+e%6o<$b#+ znZ(R2?Oi%7;-?}-it$q7Ztw3`baqkiQUtH;6MHQ8B__H+)epi~ME57}>ePE@H68D@ zXZqCx>6E+L$5y`|G)^213$q;6HIT*`RXS7_8Nj5^j~DRVr_(W4;{dNuBr+(pDzTVP z-cz13rW94rcjc(|xYzzuHQ@~j++zB4_m!Juos)K*N!BQBK(C0a7MgBI5v_6g*vvHJ zi6=?q@`-Fl@|EdfoJjwOdF@p-?JX14{(%?63ZhTR)jB1E@dhs!Ic1wenBuhrQ99J8b?@(OeY<-rrOmaJe z-x%WO1U?Q`?thzL$nB{TeowZm0GJx$caK%kQhL@@MB&phO*EG%*YSMgEBmLZ49)!J zhs}i;R=!b*v%Swyf8N4Is1G*D*q4+8i9b4j=s(S432z2Se6QAYoU0am9fXjHAFDAE z8@Gc-aBb%rN&DlQVLul(vnH#7NwqIK@RKOU5SX-o`N+ZFC*)ktH~Ytk;{WA{8Arg& z=GizFYJcaTiUu~Ru#|?XOHETq<(jo{BLYCL7L@ zF|3oHRY)rgn%ygT^R(Mh?6MF@%BvAVcWQywsteyuM#^uxy<+Kvxi*2eqy@g1ER5N> zZTP!)u{?mL{R9OjbHxv~5h#DjqS6Gk>_$~BmIYbPZ=Jt}Zbd72c+0*qu zxkCDN+f#?5Y=2pMkNXSX$bdM(d1jddMG!`Lu3HMiYcs-Ac zhz~eSu6d_s(kurx84%_FeSW^O zHDJEH*`Ws2xAww>!c*EU)&y9?w_Fu?VmB6pESZ=dDbg7&X!Ifs@QXq`L$6EM;L#{J*}4~TnmZY&aRH4+BSddWl9 zW^HC`Z~s^rE$QzIG#6}LfjYsyzv;3F)*=_8O`WA zEMp<(-sEvOJyoiGvwkawZQ4@Sf9m4!1YXgVpp;zynlK6H*s*7Bhpa%)>@a3YVAeJt z6ym%}H%Eq`${xv_hO1{InK~d0i$&%zi@-hzHp8H1Pd*k*q6{eu`wV{k9|PC_-$#pe zpQFnScs4ooQ(`)%_J7en5%)Ur)ywuPOrz;@1O53HzocAC`i^3=B$TggjQI0q_T$P! z7dsuEq3{!v3bFHke_&1Bk#eNENaO7us@`D2`-l^Jrv}h>3Ew}2+qRGU-)=E%mK=h7 z3^~Lasz;@1#I~u2Zudch3A@Q?2m1-5`0Z5m)K7Mm++ z^fm)D3=9vmO|z!vljfY(0jI-3N?4if@y$J0Kvb_xNb4_@s`-qlI*O-J>IC zyJ<@k>zd_LCo~m1aWRzlUElbh{FagJIm6vnaxz*yr|kl7gr03?$RySrXIp9QQKvNs zNS8H+6-U+QrtB8RH@}iLjUlS+Q7W#({vOy>VHT-lgIYs?II*4F^sGr2 zP%;pymUDtWaDi1>kE$q}@OX&eeinE6L9Q`CybX@$qKEj$4PcB;nzM-Kow;~EM_uKT z)u~RUyT|A7wdZ89n%a<=>(7-ENZ3$^Go#-hc+7&`g7GS|;o47>eCYK#*VD*-2w6d1U%mo=E?A zXgPoQY2vTz5VxD2J0R~?1Ek>A`wcZW)+$#|Ys+}r|4K|^i{Z4N1e9$OqhKM`@;?M) z>7rf}ggPzkql-Qvv(wnn`WST8Hm6jTYRd<>*MV7lyWv~z>a~bs z5MQ}lf6^24i`fRTLlKt35}M|l!}RO!{(}$wzap!Ii(Ko(WhrG9MzxGP*-v~#;qh}0e z>?>@=vT&|SVVbNlAOVYl6fqwq@QGL0nR75t$@ArAU+k0+UOE(O5v2-#LD004TiE^K zuUwdayPf>#?+x0mri1tll@ebs=fhq`wE9PJN7`zkZjflBcyN1>)6;8FgsvQXt;4jh zN@*g{3uL`lDFq=rgC@D}OHPGRkbzYBn5VtS93R9x%GWxbW+KX^o8z(fUNf3<|FpF@ zI*?l%e@3?nUmB?pR%^Z`k`VRFGN?#@s zPSAvrgEH~`fPvi}Rz58iolM-S9T6`?dxW7+g$EK!N_AkUeC%-{=0U2$0^7LQxPjQs z%>*-~4|0Fp%U*~TUVxJWo<-&-rLf+EM3Tkj*5;?YRdr_zfjqlK9^qIlC<&=wG0b#r zrZN)_{ma7~nLoe2dY6ctJeq7Pxf=io-|}=D3Y0aH4yW*&LQ~`wV!FOX4VP47iYk&K z-P;B#?Xd<=M_MrB3Gea^vMP#rXsr3H#A|~oTMVH3MNRwZvX#CQ5g$7?xe!TLPC|k$ zW=GZf%;I4mq~VaoRVRR1jlF#~!k4%%^EUsJ*Ft2Y84&2X*IP;g49KLqYsvERva&Yx zKBHVi7Wz+t@T1rS+JvLf@I+on@rsH z-6PYXft9+*NK4m^wi|+e6IL}+fjJg$Y7b;s;QnnHbKw&(Wm&o%Fd*#OZ&W!ss8awN zHBBfz8M%D|yeE5YpXh84bl^EH;u;ZG|AmcumB3l=HBX&w3mzPu0qU-B8!qa8%5nq( zOk`9B6GweyVw(`7UfxP&tKB>G=;d?%XHb3AgW3&cu?xcz!X{w!(^#6%z>MIKUAuJf zuk_gIEh}0Q#O?w*ybD#i;!C?)l2oiyIboZhGIg^ts`o;pKt-#@VfL{|G|$LQ=M&-T zg5Y!OPk8R=YRHkLL{ANX=bZl186G7VMi%Jk@CrgTy6-w4j1vQ~2u94g-L-i7cZf~H za^E#kE}0eZAKTc7PjYQ-!T8bACafKP)S4;u8Urj`3RNIS)mxW*FoR1uop*R=`4Cp; zO*Z7EZ1In6nG4s=@_uUl0Tx%JU-=%)P1(&m2U=JZij!o`UR$g@)vCZ6t)1qydj3mm zIZQRkyrRp())<%1Qi%`Nq`SP$lGmDZ!;2~aQo5>jd*Xae787^%O!$XoS>xDEwalpN zCx8Wl-3QCq_2(fVqOhE_tvS?WF@9B;?Yy^(NWNZd02AtOx7Iq~v5e-n(k_U(=bCPT zrk_%&cOE_xu%CGjSNQCrb%|&HvPR1<2IOwXwgr%&r0h>k8-3ovb^RBfzrW^#W2mB( zaqX}7a1~<1Rc)uos-e)}Kg_zoumQ2j^AwTBNdoTkgAL46vuNJVi|6&V7|VrAvE^iRFNO zCe?Md~X}G^4t_ zg2J!H{QuM5cZM~&ZR;u^iin`7h)7W>(xn8Xqk>9DK#&rmQi4>ep$HKyC?cXr30;ba zlqgjQMMUWkdI%k*8j{dLfDpKoea>Ec?R(Zfd%2$b?{0tjkdH9GS;idWecv&L2l}92 z0Hv~B7CE6?J{mN!f+|)=Uz+%$b1N#*R~7S2qp_dn4RWjxBhHD+)z$`g(k=%F$AWkX z6!knJE@t6#hp5opqDDOVHBCmzO$`ZLAaR+lLuJmdD@0ZXX=16^OJD(NItU(6_b82O z^`mmQe$*~`zc2bq{%47_#vZd5C@!d4<4=889m3YCE1@EJgbc;n(TY#bR!?9*Ru4@! z+^{bHWY!Y@yflYz3xB*zq^wQ|lJ&NEi)48iv~2uZxI(&sT@CO>-KSOsI?QtY>mH&1 z!}vyD*`sXJZ=?J0QG}yK8i@6Y4rD%^3k#!ADVUU~fKl;=GPhHTg6G~JQx!<0fOR?9 z@BQYM+dz8R!}xv0L=mGTaoQ@s4|U|DOWG!ZVr1X8#_gUm6UMB5u);gNV6Y@0T$Qqk z$*?R}Ydyi4P9JXNZ+VVTJ5`x%3#yoD0o8)okp0uqQUW zjcBBva1=Il)%Qda;ziZh>`NfLawIP5-GHt>VzT8~Q{jd}Da$hR@9g}gt*sXB(ZPEU z1}Ny2f{ip{CeoCCx-;m^gZho(WFEUdw95)1MgGmzF-5Dw`50vkP23|Yx-l*I%GTz% z9#D$grqS6Rw`A0H>TEpuxBZrXJL~%dq7h8;=gUC$*;3D>l0uVZaZU#`q5DA`q?wpg--CW`!gHE8U-z{CT;;J2eIxy zc_YY`Z92~>%6EQ^h4W-^FLS-dYPrhfnD7ErZY(ffkAQoH@xWMJzNchpo^W84s=5%S zbwxX&)gFLE#ERgNq@EwK{h+P@; z*@Lq~&Gr=cn63%0d$iA6PzN+h@SIx%LlCcs;d;9xYkymB(CW7e)CdpE>WaKdZ5+rj zZe9Y0AI0KMCxz#llpFfWEx!4*`OzVV-lK4dbX@S|AtB!`N%jNP7i^I(S)hWj_9%VU zdVRd73#d^ndG=Kyw@)d-WjS2Bl*!#K_A=(C)sL}ND>bu}Cvx~A-=g{;4^`o8-A6&> z@6<|-M%&t3d1|T5k_7sDTyL5Q#_{NoYZIgNp!${LoGAluE|9GT%bW!jp|~L_m2G=U zYX6TlIpLXmqqQkg9#WuSMa*K1WAje6@o7w25iZNA>$KmiI?)(nZ9a=%p=&B!Qi z`&-~7Aidwo&za31*PZEN%`-sEOFMPy+vH;Hm?$}TErlg+Q~=ZyDr=Yju$j2qqDg?$ zzknN`gWVj#k>>iLedWbY0v{dQ)t$nwK;Eg#p0*iGO5YfA|0y!n8XMQZMi|)T1_OcM zCj%Z_tWoW8k;J}1<~NC&W|DpHU&luY#{`e1@(Q*w`O-`a6?c;*lN6(|wd*=t=TJWo zLU1OW1QzoC`YWD7qA1(XzLgncrP0fbL;P#Y6hDS92)nl}ac&s<^5*je+Kj`cY1QqJ z{sY7lC1`CCC8rOQO=yv(4Yr|4fZVzUPkedgYEB*Us5Fsp>cKcUP9fETYTGB(d+r^& z+1L?0eNV@dPSM-FqXe&xJ26Xu{_K4(c8PRCFfBw~N>p={ssCrScRi$9i!q|uWK*eZ zG&Aj0GLc+0lE#dt(UgO7xPu6M#_n>(; zLB`-@F}fj1+9qES_UcJ7HH^f=!z=1$1vyg9<#RgJbSWdRN0DCLU8P77XWejMOUciu zBL%|P`FeYbEfZVu^ihLlEnA)Uq)NKpSE02*K(+HI;YU zyh+Z&3Ujo)fS$nAq%h}-XcT1HWy#8zEv)18pLJoPVS5gK`-Xp`-PkaVJ0)AlAb1zB zpm>k4GY}O7Ubah}F@$mI$quMRzb*k2?z}Y6w$NxKcr~(l#Wq9B>2sr}U+;mAr!$;F z3c@Y9EycAbbl-80mCmj~W)(6sLJPq~SH#IG&-$rWyExh9SODEbGqU+0k*PPQyp~iv zq%Qzs9|%qBEl$2?NLG0@Bim*2o5kbS1;qB92SmAGhT{4f#&E$e_L(>tnst$v5nNsv zxp9|dlTjh^J*%VwDObr47GO08J?iEav^hFsrIN{S)uLJeQjI_<2+T;xEOe0w}WtvOcCoC+a z?kng7vlS^+J_KN|pzx5hL&w-!YVLYkk0#14!7?nl4!P5%#GU)!|LI8>8^^`x@T*VP*TMGnzxr{#OjC;<#QSp#Xi z|EQFNP<_1#5j|955SaY|uQ=RTGe?YxFBcLPZdv@nqK-+3i@`SR`LIOe&(RyM^H*6? zSCftha6EJDm*$upL0}1p-ezW^qGs=m%P6q4Y`W*7*SKcYYf)Yy0IqMUZ_UZU9SHqU z5MZ48D03}@Dk?r>7QT~B;eA~eC(~PH=k?xxRV^;o6I4>)$uyZb)0kxyyWb=~VS5|H zF-y@wOK%+PM!Y;m1WKR9mBeSO6R#_fZnWszyP?up@1H8rG2)S5*&m_9Tnidul2lp) z_n`&r@!<;ZrBTpj;x%k~D7X@F=M0sdd!D*gD{U)TKT6XDlz}_7;>TNYhtIK46Jo75 zPQ8NcA)WJ{ntv81Wj=}|uwdV(+m66w6~jiQ}}VH@J~LLgu$$DfjJ=Ez!!Qd6g7PXw!U~-crX>U9Wg!aOiOPIGbtQ1%*MTIvDpwFdk5 zQdg(eo-$dMPP5afAadx=x(59lyL=Bn5cV}1-Jl#qIvhY4LA%Dy&z~H)#`$S;fzzWU zHP|!vV9-urPanY+-JH-3m|EX!>TqOxZU(>9^+d)!9piof(&82S;jb`<2P{{SE8Fhz zv$Ol)G4%EprAEU9(RzdX)d(dIv3~b~(@5l!LBLv_wf^T|IkGUy7P~XiKXmiFJ@>M= z*4l30P;ebg&3MY3h#o63NcAW2R?I|&b{AV?jtuzVAzPS z9XiE&H?gCPOT)DquTwD8y*^jl9XDH&&J5qAR+heRsixY*Pk$^Ue&Sdd1*!m(tg918 z+*(lrWZRLUoOi7r;%?RoubY}o{BAs*!M2W8dkQ~WH&hCoe^_8$cDq`2VL^NeM{|F* z>ULtLd}4;S741D4`fv~0mKI)>mRw*hu2SM5ESUs}{`6o`VSsMDd5!1(7DyqlmwUnPN$q*0 ziLC$yG1n)beI$Kc3BXCv6D990l>|60wYs~kkiy4w9t1*!gq6G9lJJi-N9{tR#H(wn z*E{0fKLq7-8-YuEo+%8#?ady`@%Z#*gvMsSqcXK^B{h~1V~b37Gkq%(Tv2a{gHqib^`A!se!FEd*dWvaJgz+F0{`b+oB|*pD3BgZKLwcY8k>b1@)@kXOW2L!(Z z!6+WtQs4YKr*PMitFrt07a0*y6`=s@j%U_yJcksX+u~PQK04|!f`u4Pl3QG`?Xo`IJn%J<_NtINAZQ2^`9`O~P zsgV8 zlxk3p z5Tk*oKHG|4dak$pmNMe)Y`&qXn@;|y*%)ifU&|xcH!|F(uX)y^#(ct(nf>P}?HI;y zT#`^1xwnMXd>el3kDO9fVA>Hq4%2*hx+I#RB7LBdVADw4Xqe&S?xMzf&u^PB*UiI1 zClilges{L;V@n)yE}Fig_4){e2;>yVRV z49KEf>Rl!$Dm^f)e?k;9Mq>9)nev8WKFwW1kGZzc?8S_>Gp>YUL+}#}=;3{wM(rR=5|x zofqXhd>Y9eSlymb*r5E;4o9LZh_9<54y^c|u*PLtTcbc_RV|b>uj+aebO+E0_>m&r z?V5&X3w%CUen&$2P=>n~vme&($kKjkDd(`E()=5-uaDZsTgw-S0LRZqW+xLcJCc6q zZNW~-b&O=E_c1wGz}hS^$JKFhY3g>i){UPM-bZvBufM@=0;B0x zppFJEi=&9{d0*4FSVi)7Yt^c5_265FOFO+%g5mc7kU7_%8w>iEg_tXPj0n{xqFJ4u zK972xkgyN`;ZD#`Mw17>vg4xjKol?|rYO=XwVUnY)=Va%)sV9(??OCEG%=P2iD_4! zm=wiWYjEDRsdnB2q;WB3?{AoAWa_S~4o5+0g5c^M0ZL?b?$uiKROg#Bhg}%12j zNI+|Bg$>pXgf~@()ZQ|)=U5~{az*NGgS0Zv=;`E6O3>#@vGZj+qWdY`sqSGn`dc@W z0$YQhFgs{`*HnPE!Be+V8~bLg9#rbZNt_BzH8pz23{WZ`EU`L0<`@Y5kpe=U)Enjv zlq}T1o6r%f#|bPP!GX5!#dB$@z7qlYuA>iXbdSmzii`)3ZDkQ&#S(rHPNw>9Bs&Wu zBn?jV13didQ&}q9Uh5Oe)oa)=p-V@Qo38jdWKa4fJ=7L~?DwiAVNq@ph}{BHTcloW zI#&r+PkhrKo)eA9fi_8{y_Y%qM~>0I{8@$YxQeVC&Jg<)Us`4)k z7^3bJ@xDltZ?!B%ecbk;^>w$2_pFr>F(V3w>7~}Uj>+Fx0^?`~V6cfjJJr>cBM$PU z+~k|A!n2Af#Ixpc(h)YBZ8Yj^`i1Oomm+kA`k!ZAqD^~Ew{gc*2Uk{0X&9uQd2Vpm z1t|Q8?jnZCueo5nQdgq*$_b#5QM6&aq9P}!JZ(t<<;>8GO;Lf%$+|GIZH7$5PAGgR zjkfe~EkYv{xbq;!ehvALWP9xI+G1`!ySLSDG~K$(V#qFVE0fM9bAbSGbLnh@@lwZo zqh)q4oHSR*__kl1jL;B^Pt0EeN$YXfgL-@ck2 zI+Qwd&}Y4oMQ#`xl&HgLh)+9tqk!=8P>o3D>~RPyhO-xKhr3UW)U}#vbJ9pTnHkz| zrHfhy{fPxLq20rLvq2K=jEQV_o)ccPI3vPFe38{y`SFnoixR0SEvLj7g^afNSC`9p1uTry(yNYC4TDDHfF_h$8CCFq5-S9wBBhdsTgX%n=N(g3zKqCT&6Hj3A{_6w1dm5o?8h7 zrmYk+*PAP+z_C%n!q>0))62omjd`w`cCf{g^KJnp4V6xPB~+gUFK6A2A?@DZ8Rpo6 zkiF@Fuk4Akkt1w-tRdW)r!ek3(O+@{dN!73_QFbbPo1ev9A~aV(&Td)_kRPC zzJI$kFN5)O7Q(U3--@rVub(H!j~NyLpsM>#u-y6(WBEWJJqKW$uK+iGOv2WoI1Q*7 z^S)|bsT}gXfF?fMt}+6ROdJX5pF=wCRm&_%DCmO`7qh&x(yG2_r<=8o4%+d(+xR z`-Pg45J{C&0tIc$sWfQ*RGPkUV7nhW+jY)q&ZVYu{B`hNDSOI`rG3VJWh%9m?QH&v zFot)Q)vt=1XFLLDRw^!eWv5;eaXas@kk03>5ST-{z4ca6D%f30kyG3e3l-CTc1(uz ziq$|NiQ1IGKX<5?q!xAd1sZmKH(ALy*ym!XT&{q;{8z&$&yAjJJ3Ym5s7ThZr#F&X z;Wg;L9VbJ*o|YPqYThMB#Hn4TpA-7_kSiFWGBr)04a^K#&T##TdpZ7nKgU9dCtWE> zid8?U;xp4F5r_RaQ>rW~3$k!tLAcxTH2*q7gU!6GZ=SfXvboZNU zdUDrORzZb$(cqkWt0S9zi}bPs@E|hq?;x5Ma&J@|KCrlh!;@0!^g_Uu4!p)V9S1=l zK{il6pmxd5zIPY44$+~F_S6Ig2Aq3)!u{P2qy?mGzPeW7_xY%7Ulq(JO~*7OM!fxD?2_a6?#(faCIHP4Nxsh4 zn@t)3kM-H_m%ybqR)84>$gS?X9m>WN6BgmSZ%01x23gt9Yf#Tz3ZRlL3HD9;b)L?| zyGySntcorNCZ_x6I4u+-re{sEzf9G=QEd8IiX51q1SG&f+t=q(1;lyt@et5+jT}`G zSi0XYfUr8^p5kc9?_5+7#Kor7mvO69`D41tBiX}<*$)LhNU2=w5$I~^-8OrI#u4OK z_wI9ZAiPX{k8=EuXaOaqT>BAlwSuwPcl!`ARISGev#ditHYm}f?Q6+JfKtR9e_~p2 zA~vOd0M`DH%!J7qh;B4DFC0B9y**<}d-U*&V@6#)`{-#fMFw51MGm)zpB`QefAMx; zy25L1K?ZT1s*|_oZ3v^K%E3JSr`it{-MilXHJmxVH#(ezX}0KjW->$mB(FI_<9!Qs zc&`c=yLqK83JBAo-? z2eyW=ABvjf|aA`Vxi7$~r12;AP=8P<% zTxhkrfb0VNuD)2nTYhSE_?6pGQ@~?iR+LjK4?Tlx-{h0~j!p<&SN*Kwgzt)jXY9%y zPppE zU3P?0J3f#qyw|-xDx6aQuKB}6oqaImhBS{p5icw)$-la9Lz27{&tJCM9H}59%;U|i{f`=KC z9*GLuVc?z&-D-rYct|TPrQBu;n&J!<5rHBNi~^|j9@=A^X^|&ghMdmR-Ru!YQ`&oe zMP$Rpw14K2A)rIN^wM>+y-2x!^TRVzK~k=RRrS!madTt~cg!KY98Xm(ZQXnRrgL!+ zb~iVr{z!Q%RJr7}6+~=^A{Hw>076e_M~a@$Pu6e-m+<4DTSVVlN!)mN9xNnkDf_g^9JdGcUQ4%WvhiT|Kzko8Iv_zTa<18dh;ZoqjL>D{mx%ko*W;lOlM6<9+t+ z_3jK*1FK1wrfGZ2ChiI>=0~$79@0urbLSbC1rAjN^8pv7dy}6c|x~EyZOQ5u>$AOk{ZnBHyo#FDeievIqB7d@Pinlm)*qL zBB!Wfrrl=1PY-wK@>`wI!BAj9TBi1}MQzRJu@t#A0zf?ZNILz^tUZ$?by&tY(9b2F z6tWXB0FA_;!ii+nB?60RVXk3Vf{e?{kwWaeuLZ)$vr4lgckhQfl1GTJ;RlRiTmY&0 zjmdj6|A-$!==mXJ=c;G->oJp+9t_kR$HL_6T{EmeUU5?vU13-nmcR<5v;` z9ounm_pk9kTrc~$^@1kJp2Cjyl#Nd!2DS@rq{0}7$HPijNuMfev9&vPuERoQB}Ep9 z^hU#%D{Ql_-l~{-Ttg~5{fM;{WPp4kNc>J4^uHn7{}sSZN`__xfsc@e%y`SiIT(9{4Xin_S>A+=O8>b z7}D=tz2_;rwMy)}kgQKU(MH=8=Wm|tfdk1YzPrZF4&-nTs3-i$2LQDiVut}iQ%3|J z?N?ID9g&(!dUOc(JluW-<;*wF&@4JQhiqDZe^SzChC>7~BOx)1V>_4tZxo&3l-8HJQRSMVB?!Y>LGrEwq4~PomTbWC zh_u^sZf#rqi_rk9i~4cFFb9D20-@`pn^f7#?XW4o?+*};?rdVnCenu*UYiMWha= zvZ@F)0Zw1?Gni8FPIK;>rx-45=l0}Gy{}1e3%1&3TH<5%u^9}{f%#+gIh1Z;0k$I=aA%O27nt`TE1V80Z+Fv>Hf%~@4g z*O16-wOysh8skPYe{tY*Wg7D=X}B8Jk*p>z2bV5GrqYhGiwYw~lr^PtP1}o=$0X4= zN@Yf5?tG|pBt=C?#J-0Dvd_SADrD(V^SJ^bBhl=W%PcOw)Rm#_x*FX6)uzm+L~V5Y zF%r&r8}bCYt*R%=`J`a?q7_K2D#fi)Zk?H${m5B#n<7k`!Q00Bo_^?PX`}%wr`m?1 z30V=KFkbx6T@ylIChOkdo<-qBL(ePG9H$WT4^gsqekNr;61HUxZ2o9BhI#&w@nbuX9MRYI zb{Lt0EtdB%G2%NO_y8Wu6xdNA%z-3@y~ck@q3T3%3ZiEPPk>mZ_Wby3kW`}b?9LYR z-*(1Ep_b6Pd>JboDz9>}y({qP#r$WwS1dg_^+H~ljeP^2;)(*sj7u@a)e=w|MdQkXN z3|zXm<*Gc+?XENQb7#9-;3CYrLhiXHPb-4Q-D_`yf!ryO6U;8mx$UR;3CcK9N~GXc z&T$WC4lgUnanr{F=-1Z2+P{Q3huws{8xReYr1)0{**HEJP1#7^>~md`R$Jx@AZL0w z0OvV_`)mEhXGyN)KDTp7kbY>AqRx?HwzqjAqC=RGs=9ojKt4v`a61!o@Ud<&8mJoX z5`zuI3jQ2SzeIC1X|}=aAW8&9_hQQ?3SX{OMe_P-P1A}FdtPc4+$RlCe;(V9B&dPO zku3qV_OL8-<+-UJAO>aG_0jQ_zTs=l#-q1|r)GnQYgGjT6PCcUH^$m zb0BR_t+E~nME~?QFZa8?lQx;17|M3lLn{!vY?hi*sFq@O{Jn*502CcXIy;e)NUuHIHZ_5+zfolY2 z;8j2xSY%Ri-pGLQEgbALM028ib;&pI6~uYGx7SQHRu{CUnM5@{wx4;^qZ+pbcR@E# z@*cfra?xPi&lVIx-EtO&N4~U3MV>PXSv*A=zr~^myV%qu1@s-k?k%wtX}d~q-lYwS z=SH*izj@y}V7jC_{1ky4D525-29!pBhe?`_?Ut>Av!2<@;us2)4H-z3sF41LcU#wr zq@wZpYmW?8XCjW8z_pCfB8RfSXm2lF?7C0W3?s=AUR&GIZ})2P90{hUr&jpts$5I2 zLZ!drY7PD5&kYHTC~>lqHe$x)p$v~K<~)3Kl#AZ#+V%8g0A<78Pom_P66QXwF>GZQ z*R0XA_Wtdl2I$}HndX%ZocF1itF$#iyHiyAG0%EZsNqQIH{UMpNXn!Q_nsI3H?#78 z9r|_sbfB|Z!Y3R*xbuskCiE;)9pvfgT9rE`u)45FA9u{pRV@4r>x6Oe_l7ZS8R{?gwMWjF(-Ahe?Q zz>&Xi#$Opc$37{5>^>j_c3JS%f0~rvzv2J(L6{y`j`2#{m1BQt z^k>fj28=5~uU+%6P2Tun5E^|dSZwgOFK z45v<=S`WG(xuZ4y*B0e-j;4=mJ~mM7cjvDO3r2;-TEu@m_3z`_-^TKfcfKHDTymWI z;)AuNu3v&be;cU4_WtMzkeq3K`SGvN>Aww@sT5fB3&HENs(*TQ{xN!x=!4u5K-J>n zUjD`Rmjo8w7^bfL;xCPU5(X^#GP%^j{`Z6W?dASp!vEU7!ts+g#9^S<}~|NpPbS^OvtK%kqhfw?@3m`L!9_YEylhE)zq)D`=cncyh(EUk$q5nd-P{X z&*YsacxF9aEWi1~M#nf`{1>iK-Bvdppq^RivC9PQDm zXL+$=SM%e=#xZqL^j+mu&;CB!cY5P%^^ZG6rRJwPJ(5R*N~b*;7p+6yU62??JBp3( zz3#qYRRdj|oo$99uRSG%$-?^8t~{KRFsXdA;LiuM7xX`S%paL3=Po2n(QXwPE2pGw z%W}D3ELxtAS;SieRMz$wg>ibk8C*`utQ3Oo`&D5al|S7@&7L-HKay5sj&@(4=scK6 z)`%C-H)#43nfRlof_S#tXEi29kV86gNd%E)6s_P7dga8j0!fa#^rA_FY zlz{7s?~1c4DT>Fd2E2Wv8ScOhrlY)oHHMvjVgI9e?S2JdqouC^E4j^7@lzQe)m}M6 z;**JQgg&SXvtIyl8A3jO=2sX+ImeD7Y-@>8F)6am+ByCyocah?;(N=;VE|j@hSvuS5E7#EbG>zDo9Glkj8F&6u}RAmVx>bP|Z7B5~~ zr9qvJX6JbNTCHDse8%{$8v=J)%ko57{5o^zEGBDVM;Gk_byGM&8tb&q-wNLclMGLu zlV@pdPKql;ez*&D`ZL?ZgmHC~IP|g!qaJs($v!abv+CiEkr5Q!IKel!@!1dESd2$Q@-(+rGd1( z*#;j6WueC`E+OiMshyIth%q+5VJT`Q_ zsoqW9h=pWkA-ic18&^O4dmfWS*gS6)YYnVJf6@C)9@|KjhXPqMC!9FSqfRp1HQUTCgO z#y*bJ2yT^%EZ4|xRVTcCcC|OZv!X)JpnJoWn33kpEqZh81DOdpC%ryZ+3HBA)27pl z=aG*$w44)t!ZPhpJkE?XqGuTsnnh$@At8!hW`sriQ`*UTXw1ubAWNi=A6k%9a7TLJ z=ve2GSARKJSD`j*w*3akZ^2(;4x%@sm$F)bbs?v<4neaBx zN<%Q>$llcCsvK0xW#N8_emLjNgXMJ0ieK|ouj^LeB2(6Qm(0T)0yCxiqDYe+V~r>q z?icJ@feFD~+fszFv8km&;eNxFQ{&|D`MXB^)4sJ+ zdHl-|7Yr0#4Fd9o6J$k`8}*H+H%|`rEPL%>*79kGKY=+L;Kj!uaS4sONq&*_V5*+d zEw47dQszoWg)g*Mb8|gDq;nt6@e(LB9NXLwXT^&RWQO-YH>dc$M|HSySt$~YVBr(r?s3yC$!}KQ|tId?76)I9WXs|Smoqu%xzi& z!#1QvQbiFO#|uu3a@h-S(3!o}n>V{1rmT^}nBOlCgAW<%U31%y-LYzz?}!%!BW8_* zFgO1?+U&?Js!rRoX}$*C9lsji%}&Y+G^XOsn-D#9 zVR2P1(9Q3MNsakzuDNl_3|RfKmAcK32ag z-34Rlg4|TVJYJ%_DShpz z=jpzlH50BChuO5-2R&Tq9J_r?_RtHf7qaxwPW%RMnM++)s>W((LgOLT9Kue(ZT=OnTgM_m?1Tn}Ld ze|6D-n763s)$AzNqpKRk*~tvFC{9-=tx0R#NBR;86?!4NT9f8Smm8HTM;-i46gH0v z$-rb?^L2k8l)Q7E@JSIqmk=~YZpb|o0A@IYqx(IYvdIWO{tt1r4CgoT|*tu%GEMZF*oe?IQwuOq4^EOaLlIo}Ws z#*Z;En+M_BKg=w;2J|)#GC?y-Et6WZRkju!Eb%=)yE}9CMs9kTDJYQZ1-fNaNcu+9uSNitpf4|DxmWhWgw$rKXOzeovHbS zk~EfM3ggyc?pbhte^shH7C@-T4xbY1b8M;?*4gKdLaDviW!MkkDEFJ&iXg!I|;6fyoaV#?=M+##&no5$d%7rNAkLp$G*+3 z(F}%%2#p4$<4O*Jea2sn+zUKlGp3rD2v^W{@tm+SYl*HXLoOFHi1gwYDJg#5)t`0$ zfZ$IyuI2keBBFw*wWAc#!}WMEKX^SvB55x?lTuq-bh4?R)q29ui~J%~BRV@Qjr8?# z2+qe6A^rar;mJWCduh4h0C=&`gdQCG!33ne|*l95ttUP0RBfAvdEiQDdf%iZ_W#PJK%l+8;Pp&t)&q5r)@<&^^#tRu^l39f|KBk1ex%Lw8yS|K^o>yhq&rLC#6xI{4pkAG)OH}ps`{&cxJEyFDj=r~lgZ!{*66c?@ zcgc#gP=HyDCswTUf6hzKC=FIxy2YG?9{>Bf$t5$3eG{s5+0hL-yhxq)EBnKo)SV$= zwUOFAcF8u7O7fs2;7+Z*{`=xtVWZL^(k~F`-Ki_bbYA9(n1i>=~1xKdy-Y} zLOu(QF3A3Ft##yV%k__{+r?0dN8A6$-vut_q(_gs7Zz?md6LEBb*81Qj9jYxhH~Sc zytH3W5kCUpKCZ%S8`s9;zNR3Qs3`USwxQ!Y*rCxJXAXNRuq-j@QM{O^GLtaNgoh8y-?7KX4+Iu8>`Lc&1p*YN$2c%D_Cx*-n9q0~39SLs z()#3zYuMGEen^b4PQChQMj9Wl@5xZ^jg~h+Adp=ri*=_z1XIj92L=p{j7D8q4e`tJ z65!eQF3G*BLu1Bgd2t@+D)WQZB5HW%R@g_@J76IT2*#&RXHlu&!TK2M7Zpp2x2HM(}-QqlYULg>GQN-p?ZG3x3%7GG1 zv5K?|Cy!Y^nM?Kcix^KIimHP~-bhc+;@k*DAW2z6Q@PW1OvCTQoE=TBS9QvjO3Gm0 zg|;tW#g$=RdlVZ%4yAqwe=P>$PcqxCBp=OQ8u{2Ri){NU&|3;@N!LC>jMo_lcei|u z)7}qtz8ukpO5O=043<>ndsm{(N&eJ0VFaJgZx>%4NB%5+wE4(g`!@ta*Wz)!Dr zY!%>o;-4EJFR)PYPq}qqQv3S)&kX=ERU2Fd38WZ77T1ErKi5kRCv(L}03aw9^G^={ zJ%51Iwp~xIWysj&f>h9FeqbXNyuLyI z$-X(&s=&Tyu}Y#~rF6E2)7*d|$7vCO+6?qGtI1@rPrFe~3^{=Lw^VfAQG_DU0aQT( z?pY56T7jQW3--0{N_a+FTl4buJy+}DmP@)ubX%wW{+fHTi+;98eYw6+8LDD}FbqG! z8Abiu{jw|Oq`F8=&4N56dHEO)d)YaCTq7^y2U4X~C-1@`pstO1<2wEU=dYkMCvPyu z+o71}>2w*AzIHCY##pGVkymx647maJPF=g5h;ACsw3wK&Lh5DR8QIhObA0}nhDGh~=F?I+{n zo7QnGJi0AV78(~}v!R*yzMjc0-(}Nm5N87m3dfe+#R?P)X~_=&D3KgD46`|2$Dlj3 za@eKQ$36MzgLNHVDRufao3>L1EHQ#tp0~-k-_~r}&vMW>B|E37Q+HO&Tc z$e>0h`DlrKpqtWBI_w8<|F>(hP?-;^28|L{Er3RxhxWB64DU^Iw0vS8c>5tv8lfF{ zjoJN(vSy9W5gQSc@}w+sBJ_SDj(OqGnkW&5^Nv|_ShP&uu+^RWp)#F-q^ovRCcLO< z*P5&dCY)n9!Oh+zo0IM&1=#uYmuUVqzxud+Akd(iqoQTS7Bdn(k95b=-!3RR8fK|v zh`GhH5A2tEvYamV0VhlM(bo;r!mheb%Z$Vgo}&eb+2Va^O?SI`+c?V5#36E`w_-X_ z&X0Isy#77jj}mawGNhbnkWv&s5JqH1$%D&4;vh$f)AY-zJTv~>(_ey_o@Wbx(NO?6+`mhE9>Ww)BJaU0}6 zDGb$(QCKW?{W5>kJprPjD5>PXZac2s{A<+iUArEOFaH}++J_JSx}7++?k<5Bg{8Fr zcTckKzNvid>svQjc_t>^xTd7yMP!bG49UODlf&Mn=DC>+0@KzB>~mZMMR?YC>W%B&dCY zi3>tM^tkL~oA0V7bHlR)ZGQPcB^KR53B4yHW%G#szo3r7Ea*jJ!_ z-wFF^^r64|R8)d>`(&W0si{yXG&VN=*PXzrGk}rb!dc&<#8$NB59mgX85|$t`NYS_ z|NZ{Ia`><9AfF`gj-L{_yn=M6*}$3M>l6i$~fLdIm#=>cr-C z@~~>2ec;U;Trnc&_F_IR(10|KyT!ipjjv%@Cw`qO&{N+>=L9;URC%5K8B5smkJu$?pIi zqM@*bJ9K$LsUzMRJGnAm9kiHT z3jD0r*j7I(XPe5%apvl31Id$pGHENja>kQiGK?T5XKeU%8r+a4x7)FZ92tJ0(g;rs z(77Dx-7s0BQLOJ)R{CtI;XI;w@$1Q`>1coX(2TV&C!0M}(xq&Sy27}7C^~L8M@QhF zkBheIDHaP@Umm|JGVUWmLlixeN{S2S!_ci(HWCv;tO5W$Fp6%Lk3EO#xo#6!`|1Qj#0 z*k9!Bh;IH5vUcUUDJsyduo-9*?DNoG=Ml!?$|+V|qF%78HDc-f*b|yfdKW=j6tt9D zL4Dk)Vp+VzCZ!}HLMq4;syp)f> z084pX)Y=<2SYV3PA9)>A&|Cg7BH6mU{0@7*V;*&(A`|UCVyBXTDnSY@22KVEzJQaK zd+Ha%PVDQ|xsjxV-<&%&;vpVk!CF~qH?9HXuLk*2$IT!CS14s%N1P~IJ}%{mNp-q{zu(#1E8<^hMM4YTm-{#9QL*D@bztE?3m@YJ-jc2o@W~nk*=n z-YS)m(XP5W^TaUJ)unqdWcA$A?c=d)do*{h)l4noXHRq<4|Y3)j7#sV-3t#>fR?~@ zS*4OT{L2vqD{gMb^=`VY{Y24&6pnuycSZpb0^v289|~o|niH4$?qgj>AgIwYz-CNw zT*uhs8VwBS0TG;fglzS0u@5Bm(+}NX!E9w+@&c)MeX5kRn1_rlZP`EE(6(%GtQPn)vgs<#B__+kfvY^K=Du1h2h?d+E>I;c zPaI$V_FV9%0y3C!g-;spD3lT&tFyv{3m7El>40RH@I@495`jk>M6H(2>|(l3+?CFg z1HMWr-Z4R?*|sUgdo(hn4UVhe@3N#~|xt;niQSkZ^UIwhGm6{gVJHw?_Z>h^JTe3YWhbT|bArmhq zBO&2Y0`||yX4RolS6M_6%UZayoDO_%u7RvAZ`AN#goKiV0iwJ5e?X@jG&uHe%7xbG z;V^XFhh^EiY47Bn3|4&>!p6wGs}ik%M!5=JmQz3Gyff_HCDzI5BYb<-uN^JSpi7B$ zgV!RGkLok6=!v*pnKG@N{ZYd0bl{UXyF+M8t25~R$0zD$f-Q(|wA1DirP^J3;J^R@Rw3x^YAGF&FvzH5rpwK;qF zO7b1MR0g`HgGj#{tbEs2m$*<}d2OtFTC#J$Ls~YiBF`;O>Wa~YiWgP`-#$reIeKb3g^Lod&AzBrNX5jDL!P%gMRp}sanQwy-jpsG6cg6zr#=e}vLjo;u$u^Yt z*`tYz|611(d>4N^Am+4hH@uCr*!ed(rH8Z_L6{XT=cr^XWHK`B?*-FW0Z*i|KQ?Kc z^~acP8IgH;NJRww3qQ*%{^*f3MkKsSJqXO$neQ z7~Yh=;w4bZlITy!1c!3XG`0KH z-^%!(r}SQo)vx#dh^tEfQ?nqcr4F80cZY#V;DSXl)Vi*hY<&D9JsCxx`z!y|FK@uvJb@ES|D8WeWcsiz}PQ3`AEU=wzvjC zQZ>j+tJaWrI=J@&H>weTcwG{mZ>v|zK&1QzL_R4CwT!-wH7I@GUQAPi)MajfBs^HO zCx!ODx+yX9kcruw>iJ)TP}d!?Nyz;c&;DZU3lq0aYM*OVYgLI|t;Z4E8%@F2Xvq6$ zVb^xEOQhQ&t4f9;D=^zjvPYuuXVNCfT1O-?t&6;kakc}G+SoA%=qvj$05pTEe2lvH znD+ieyL;XposqZfe%_%+x;7Nl{X0wJm3Ck=T}jTU1u4Tj35yqJxmR6`)-tqeez=JH zcJ^Un<_@JppqmVLgBfNa^(0xm@*ektFQRq&)PKX;s)nu;=DX)Dulg2@*m76?&~5Ai z*wsVW`T}fOO?L8soWIpU%kPk!!b=;uoeR9;I?-y|=c{6DeXd6Va#R+h5)gYPA@jZJ zYF);V*^!PE7nk#E8DH2?s6_t@^xXOGK>f}go$u7WrlQHmCKyT-)Q_kQrNIik;oibW zmSuE1`?~ic14^#)D`1lq%)!IL0)GPR;Oeel#YHZf(c9@Bm0U>vd4vx$=`_1*dvD@v zV4(6)D6mgOz)HZ!T}6yXTU3N6yZ9hV0EgfY z@DckB(7z}Kt~X}dWEZq}h>`98jy5R6kpK>!yvek1+t2I9x%s3l)OQCC7_oTsfj-3b z(f`#fHm7jplYjM20*w6Jf454&ikR08)&>77v%D9xx4up@i}X8UsfimdH{|y}@B$D` z){=6U(o60~)x%;54)6I(RqJcN!5or0kA5OBTV8$Sxhb4~vHgUl8s6#|yO!}5g!5)E zoQG$@DLq*#6N(UUZ}!1Py0DA=D>W)^o}?#`R>Y&hJc+Cb&(<#OnoOi$&Fq;z$HztH zAoGo=8m$1yU$BrVgB)YGdnbRKtH%ZLZ|Yp{?K?-D z6Uy2B)=O?6@5Kbnl~C+@o@BLMgHu;yTp6sBqEA8?nan)lrCB6OyKA87UYx^cVbJ2 z0z>IIbvWS#j2#T(cZ&hVsN!YD2)h*lLMNzhW9BipwZ=NoVH=O@d2alALDnY@-U(O( z93K&s>UY4YQGs7ztp%{iw?!Ba)m2|?l%9_`?57b0-stMw;0Hy%uS6mY1=g1<3WR)f9LQg`!Jf(nMv^%}I-Dm{Kq7%Qx&WXXJce;VL&bfe>Q>>qs5=9AdD#N17a5 z85qTKVy%w0-6d+qMTW&VP}N-zuA90fCfTKwaUV$ayCP#&iWJ9$H~a+B42ya_?dU4B zA=T)D_zRv3gg>qfl^Iu+O=xl(3pD2j5=@vlG8XK)jnet)ilv5FcdWYXO?f%GooKCv z6)sz^J;Tch>!7r0BFp!X_d_L>TDaW=m9%QL31@K(I6ERO`tdkUKJ8ZWPUKjG-w;Tf zyxV53n;}o=kI$T5-||&o%t_zw#pjXFk6;c7N27hG$8GB9KHSD&MDt9i$Sj-IAP-f$ zyjum40ED})HP8>2_hQatJ~z&Wk6S|w1oX$~6YI(+&8q}o2d5%$kzSdTKJja?vJg$# z#2C-+2T_TwjKSz&M>`$E8?Vo-dnB0=RoPoJ)dG-@wY1uIw$H;XpJ15yRB?%Iz3gsA zdhQ&xn8>_=4dtf#|9V`6SX~~1KUt_`)bt|n>1Cipddf}{32YT|Mi{iJlY@VZHs|V7 z>ULkilmcIjP~!7PMi}a0drO@DH zvhb|EXTDny*KVYx=vS5ukF#5qi`ki@J9Ev?|rPc_wC~?L1+u3J( zyeuPn31mmvN#vaLF?)*bZjK%66bK}#1_WwJLu@3(3UkVoF2CAA@+N+Q%tu~BABeiy zx;klINEiwUXr4CD+C`jj$fS6-u1Y0bK%QB6;UDWsw7O9ymg-}^>JaR+Q+Hq(K+Iab z2{v#&V&tD}m&W2x(YaAuH6LZ{?})!gtWz0~RiL|`&-S)0RdJkmX&ML#}k*o7|``*HU+vHuJnD+f8K4g}iR zJpBjF7jyS^uUG!d1?_yo^{zwP~yx zaVOH)g?+u!^927;_-=miI1tRJ9(Xn-{`#53fGyrue-qs+p40Jy>%IlRrE-zWE z;CE90Vme9E+s|ZarHS}-*G^QcY2l|La4{iUdP=$cvz_5iMrAsDQ-HGO+`g&@zl5Y@U`dFMFF z(QPfZ?=u^u=zdqbPR^c3b@pV!@iU3dz~Wm9qm_G#fCDAY+(egKUYKR3i+-G|TDGVS z>LLD;`<*xH7!Nm9-NJm@fZhpRcvwuQ3hB8?0>H;mw8`=v}pNzK(ZKRNI>*D7Tz)p5QdHqg$dC|ljOkZ1E2E)MTHmeU$`|F zc^|a`p2bPrnvY`BW5XUk+}*tP3LL&d#jvW?FS_Jyo--ARif4R@71)>FO6H^s5^LX+ zBi_!;e%AbI&3G9X&!5t_JVc&$K;JW^w+@C%y={R-^PhcrWl1XGN7g9S_9do#^m+90 z1~5w04!C#H#gTwepVtfehJ7JZsFGk+W%Z}_tT9*O)8$q{q4e6B;#z=fGLKsnuWjeo zVSO*35aoRY2c*nMZ-ps?A)4flao;b?yXfD#3?SxwjKeN-M0{pSt{ix0=rY_;FwJ#I z;w3COjC}#=T<=a#yh7NmiEkHrqD|jf;6MH_@SZ85u9Q)k_M#%^4&4_6UTnk@$^ZgR z$I5G58dOQZk-nkO);dv>OZny`zTXMU@|Dj`t6@0A*CP0C^MGE#kD#J)M0n(6lIYeU zM0b42^>)Q+xlj!YVa+f4SAK^qwo|eADZ3>AQDw&3Yb)d`@u-DKQPcOxZq>YWfMLdT z8PZYbD zIbH^)*11+t!@zG-F*#;{?;--{LK_;T=>JruCGwu0bzX}E^@AjxLKketm^(ls3Q5=Y zieL(^@7Vnd)m;0)%m+^z2O!zqs6Qvl`Xtu4^xJt2S4VI9RbCNEHeb+Ch*QD;JepI+ zHf$BOCCfWu1<@6)QonZ{pGzQmAQXh&`lH)h$&^drOoCRS!A{7l=ICXHtBue3FPRt$ ztn~+Xm}B~U^Cl({ifiTqNwdn1d?+*BAFi^OzdXOF!K@mgD5-KKX*(G&D=NtHCbsD9 z-M1+VVUZIh?cfztkMS`O(E>*{8oDqBYE5CQc@h|B{~e4)nb)+c8Or`+S7x2E3KN4G$J+}J z31#vJDugJm`}NXzTx$WbD!?Upxrz>}T!yQHgFl!{t$a~akSh%4HtGs)%ZsjLPCdd= ziUN9eF!Vci?Z%p^IFCp~D(%K9#8RJw$f?o(>jJOhW~BOsP zN_;1-oJw7soS~+xm%)#))~*C2X^~ETxWN7;IYZz%x&!6H{j-1_=05PEH)I5tJxRkS zwtYvOVA_)`)LJ0ds*Z;cKr5Fx_amKCfTp)_YW(jd6O0s^6X1I}VLTSE zQ!;>Ig}@YFbwtlBa1rM(=DMY`N-gkTquzw}Hrcayy)DEH?w5Lh5;!NBoe7aDQGZUb zL21Rf!^p&1yRPcq-EM9eDQvlR>QgT>sl`;lEomc7Qjph^#zR15%TN?Q%WE`XaL2z@ zsMcssAwLKjmv_d>!N*pXARh(bHQGYS){=@G?c`410(>t=hgD)8teCaMp!Z?hH zkJs5VYnD+UuKg^dANo((1e{9b5vF2*;}}5bKf1XD)<48C`9T^}%=LV6tBz$cT=a_o z^@?T}uOEkwyk!wck!cm_t$cao%E`m0ElzTW_hQ^NAGzl_!z>r7mc1eot}kEIfLG{m z1AP7g>O2=tPpM9?tdGuq#r>(~f&><^IDCh`-Dg5I{1vYSN(rOqRu}*)x%+lG=nrrj zOiZkFkg&Gw1n*XSf}-e8&9EJzmG#VT0c{H&{&cUS;lOJh0{u)M&so=!P&0db`Osbj z<=ES$h6fhd`Gz&TzNH)F4)SOo6VhzjOZ4zWKVddWkDbpE*&B@7Z!KZT;;#un-OZZ! zNKG{wjY&Utq&~*+nC$Kb-*qD7A#oZnZ6cfjtFkOy>npneu`C*)#yw=OPq- zLRU1&d~+tt)kLT&yIWkj%Dh$bYE~aL-v@79Yq4MSSPfhCc3wE62CbUbMFxtK)T8-~X#P?*=*s{wB zvY73Z@3eOZlS*Cn6YgWvkA&gcL3KGW9NpY#>e$~ry~hr1pGV_S)NB|5(hvnXYxK5@ z`e6@{yEsb<;E0HJ?^u3>Dn)&+eTbu*M<4X|K{sFo1Ket6-j7KA)mywa$IA(aQm{c2 zk3a4sMK3SUdu62i#sEr_t?D<6ws*)9DD3YzXCfF`b$3A_SSSf`+Q5*sbTXKVUEDsR3_9@;pd z-Iu-ki+n3SWEm95@^}mJ@(3QQfN8$-)gXrp8oGwFv8mi9!7|FVo;DCE%+O;NF)zq@ z8e6u+^2RIG&b8JhWu4DM4VNMF*7SbZO~Xl2lLC7wE@TDY zH9TLXL1@>VetCF56hOF|gz@$P6}Pmhe;)1KGhUcK%ZhO*X-T44N4!g0>CJE5>z6+D zZA(h+?`o;#1MeV*Iy0ROT^K`1FlqZ(2WasChkH& z38_~zVt?Mpu*!X1C5m>BmpT*h9W*x(Giri=7U0{S*x(HE%9%N2M%bI=N?%vQ3!Pl& zMqfj>GNxsFH`-+A(h}W~Is-~qCbv=&Cwc^pyXkUUEl)Me`ndk*Co)+V0`W!rYH6{o6#@j z8Br=GHX*z&{XRSn01G3_KyP7Q4gMpb!GbDIHMlYzAT!Yk8JP&dImB6CwnAN~9To=- zZdYfkP{@pZUg*=VM%f@~5393RG@ zOsAVu6LA4;J6m5$lhZ^nex{6xxGJl_Z%)J#0_;k&J-B{}v&6pLNa9b^q zc19&PP4Ma5Kbx12%0tebn6+oM^j1k(|49$5fa1*|Z!_a@IuY zy=ZxtS}O$Tjarrpvrfc;vIh=xy-s%gw{IOytcX5Vfk%I6%>}~eHc`A*-q3D)G08=s zn0|9&uO2>JE$ds)A56|^n-IhLp22O=tq$*CPlR`*lk>#L>3!^+2AO|GUtch8s)*DB zF3KoRV&alBBR=-$g%YmMxH)M#TP}}xEl(EONV$&Y_{TQ2bKKlyi7%fl6!gWm>>ieK zi~^wadcM_@?E#YCRICArWpc?CrAyb)H#iG%5Ib~q{_^4A8?3XH>7ZKsld?eQDY$yK zRWCy@{U%fD9`#FzIUZm6F1kI*e9wwhNao9-{US_A&P*YIEbn(|S=P<*97+80mGfQK z`!c!zq%F^ev{;}PfP^1pFd6qKk}fAiyr*TA+1kKCm(p+g9mIFVn)WQkN7{ZyS5O5k z?$flRGNg~804vV{!Gzy_c+_GnU&#tVnC{7Q$6lGQWz^^(6Yv4oTrCt0A5W>KD&3q& z{nL|`hNIxbahplon_}vm%|6nDE~-Zv{bM@lJ*Z&!=OSkP3+%Op-+##NL)a}H9w!Ui z@7qBWnoa*)j&sxiFVGhIfVPyIX^2cv((WFDueKir>Ci!`cmeG_vfmYkw(|AbEC6n zuB)x%tNX>Tq+2KcmUpY-=n#u)Q3Lv8OkS#I^&g75*wNA%C(au54+{^AK^N=_svSgX zCtB@Uz+=&h=-6sIr5_9eyhi{w+BA@yaqUuVz<5^Tim>`6f3f#lJDW1C1qdSgPFU`r z;j++Psh*6m*gYZU*Fi)!$O&VOg5C=U*;np53JOTJ1~7!Tpe35peY+xbR2r6YhZEr| z_;`SH_}2#f9%17c_#Z3@IJ%?Hs5k{NBTX%|ala9VHub4Bk}28DyA{jy`<~jCxyY5Y zMr_uUL(|ev>SL=*cjTpaZ=Wb&&*u;1LZDQgOchKuOA)*;zUq_a5LP0Gy+r0mDy7Zb z#fDs)ds#WbPmIeL1nJOBxpaQ-g%Y(eZ=Mg;#&vHQ|1@|Z^`Vs9E{1+zidKiJ?Amr3 z&p7;6Pu`2xX>}XH+$Qq+;<#mt`FGoxsk@VQ!}2A5MdL8_O*A9Ds?js7o+P2E>(;JD zVc1#{bGr-WClh0@x~ln3f1iLip+V>rv4x*R3!?YH?AXywMf2z9pU`mKqy7L25#y<@ zPBJD`R33teITLKoi#}e%OK;uQU))Zou-~bp#E~tx#tHr1`=*JXMsz;yBivgaFwqiK zyjj-QM`Y7LhHB`Cb#zeaIlPi!3D1EFuEpc$z9y_HLLF3o?t+E7?IiDvRU2T`)E-gL zUI&9zjJvKp$_SfW*2Ig^YxOC6ZNX4V#IXrMf+Qq2%RQic@l-N(+Ul@AGt)kh2a>5k zK~5iNj)P^*>3<$~t^lb$F*SsRlYGt3q{J@CV$|vONSZ zcE)0vTfe6UJ*O5byfP3>gQ5c0jgDx#FMai>Nzp-chPY_JdEY6i)*yrsOnWp{4Uzzd zpeRM!J3ht+-HoeZ;g#7F^E>g^`-!Rn$vaV}t?Vw;8WBFb^K_4c<4)Yg^L*03)=1DP zK8kJFzjB9H%0Pz~-$dcP-P%|8%|vR%$TH^JIMK6WT4*k!KZ50*kmyZ0Im6EjA4(QQ zNI4ec=Pt+$w5r{++q3)k#vcT$F=M7wmBIV5!!SiCh`!^ch6W=-hd{o~XWvhma4MH9 zFW;qt$ec>aEhHKUe@q3ZrZc+t%NeBp6XUbYq5Nuf${%V~uR(v#`I1O3WxRDlHUxBU zbRM4@M=*x~vdm=bHm-#u2kwH_CO0eyf~a{5RiR}m^XM!4Q0IB2&rdlceYvbg^SHG% zW6f+DfYc0_9)|h+T1{aIISBimzr7UZVGXSoehKJ3-x|OJlS9DgFRBcK-Iccd1IONU zpn2Ia27W9ar=tKZ9IipK&4>?^!hlIOt3m_7=J9&`A>X=Bu5odDRUVIAkAdaHnk3WZQ~AXC@t0BJX#rF z3C~STZb(@IX-b3Vn&1PXXANiEG5et9Dyj#x54vU?0{)^uBqOf%EoJ;WqQAIrarYkb zXs9Q8^kfjK`4!fFg5%8kFl6I7J{&|(TDC`3zAhxv#W}X}B4`n9tQc+SEg_~x2wyB; zlI06Nl+lr&al(zFc8)#kvbeZ1-YMMcol9gfnL)l1cty;Oo&jqB4HD5^%1K#Y3{CDw zJ{O}fyHmxRpK+QQy{EU~z%MRR)czG-KVCP1_zM1@Yz9*6eA zLe8bPAil$bw`ZI_H!8)|5!Sc$9Kdm&%5)^sfe@uOds~hMlRDy(D`UD_jI9zlK2Ym8<5b3OC5PhbF zy%{89V@u3i#{D~GI#8X-XKk8?qFR^p>%a#4E3l*6zX51Wpt5shfuwDc_R!T<(@g5L zjqTbayvbu5UUQzxN^>`{ALaJDl#;d5@$kjA;pGF})|~`l$9>0%SE0g3>Fo64x>q7a z&}#P7=zGnf;f7tdp{0v`(NglFB~Wc$1x5h+;4tMFPjv8AqpeqKzX1Uadsj$HA{joa zxSM`4r@Y;(zj3i5dGRz9VkAJCBN_o_jZB0Dk)MN&P#o=Eqkjri7eej9Mm@DFUngQZ zy;`kbG0KmibU4+hUpf3&agEvuRC~cm8v$x?L=z?pV6;@!X&wn7nLT1?8G{VV&Y``J z0PVscQjsU^ng^)H=qZ!Ir9#C45qE#q1b%@C@fkJpG(}x7d_1;MrQexD~~iF0UE4+5mGb zy7&Gcys60`?8y$&n3w0-{8r-d(uJBGJu&gEp#>f|6OFTN>k|n&xkaR8+Q}-R0_Msn zqTkp%m{dNq_tax)1(RUyisK66!+JIFmCbz>0k$cLCe+nSsGa>{sR(UYuW9%}7Z@R> zecJf!ivW1r(Ns*6cKtZ^i3ohSyduhhAxY~dV-hpXcPrM!$L^8}Zm2V=`Wqi2Jd?31 zE79(+`@Z^}6l@F=dEXc}Z=P*~l%&ZzC~2?T!2H_FxYU+V63Slw8wB2UwJo**C|Ua` z#kUrY222o$b@M_$2V&ra7cp=?8hd=HYnIe(2h9Jijh|oNSEl105p-_0~Y|&g@L1cu-G>24E7poFGd)4 zQ;#qGQ?1o>ymktb(&scGX&hfWlyDlacw zcYvhXj_y1Mq8&~{1|jfni=by27!zt-Lq~?weid9qhj`jJlhDIH+Ts z&wl)gYf_DrfT~Ozv!*y#cFRgPC?V8rApp7M_QU+KDYsv~N8BMMQyUYP#4*OVH>6CE ze-MECXae*3C4e#U2R)*_?Z>btb0C%|WOw9%gvAoPBr7EFmXN`U$G6WzU1|?XC12~# z^WO`9Hvw!)2w^~PGe)tljFINvcBrbYJ0)j_ANk+NClobiG6r&o5uhjYTTjJ z4h~x?hAXtF)m9M3_bI;ZpjO}hWW~X6#*B(%59xbMZ)srp;0 zi>0YlnY8Ea5|WPff;UQ3=}5Bb2jI<-7_=2ne)PFw9aFtg{WPY|>8rJ7eqTZlPdh5M z7DPrD4h(`bUG9Fez#rQ<9=iucYRffpYs0{{fxuvijcPZ-z?Rr#QfBGer!uw488l={ntE zYZ!!=Q9GZr4|jm9qbdGA?X7CYN0jo?jb(VwcU03wl0dfV$=3g0IHtcbSrKT3U0Q!t zv5jrwpcwx%q}5*?1<1)b5G;Uc`VKDR96`a~zP}4foyknb}ZaeLi8W_GNTAIx98BaV_VlM0Je}1-!FiX2$TH>ev7Y3qUx7i9>@AFtr*`P*VExEH>Q9lP!_h4fxH8@a1t54u9->cQ4 zar1o5d;*w*To(Y+&=~pvfE)N7LZ+9r3Bu^RH#USsnM*(a1rDsb1zH8v2(;=ZQzn&` zCkn*zc_N}J?_;gswoe=xa4l&C=9uyaHsCQqYvd#ceklFLQRAiru|m={OKLvo`torA zZ1b@YWFseY;78koA&{e+=W&J`sUHKk@pLUZ+T2cA1tcZ&2Qmi)T;KFR2Z+0b&bKBm zErXQGuYH#D$-i}73?V?eu#S%j8YAM{)w~DQoOdWsoVaG*k9yFNZO|vkTRH+EG&=#B?~!0IdyH`Sbhh=OyH^+p4 zAAjM6|NUtW2^*&*HYoBtUihB~VGg>O4YmSx{zq&v=UKq>@gmcXU>L^c3;B=8XMk_+ z{uAH)?jQJOf#XZ-Yz~pqvx2Bt(pc(W5OlTUg0mcUk^kfyaOHx{Sot4O+LNn(Fg#jJ zvbAAMlO~M+3nT7-41mSSTcY24C>CstS|jNv0n&T$$N{y_j6Gln{v9}u+8;^TR0iKv zRJ(tAd;S3VZ~S%(Kz64;&_a99@8c5So>lt$C1G$K5R;+LCL5VGJ90p-p}zUDO1swr zKxngpp((k1*FHxpl>?b8#$T%l-aT8Zq5kJ+;rsx|z2gcHaCP%b=B_Q$)^}ug1bVgE zxdLF${T!dys?_}5GwMQ;iYiK7#EP8&LSNJH@HeHD8){*Jf4{a7k+pTrRbuPb{{0BB zB&_rJY`9!Ti|L&e6nm@@;{M^_0fB~k4W-97Qn-TtdW(I7;lnFi4h_T(!1nMH`w#!` z=l`T1OcgRGvs>kJ+pV+_^o1#UXnbd9=b_rNojZd`(r_xp%gt@n2=m%q8yWa8T z>qCuPn}GT5ulo_rzKkJyjwkIzD=IdEF&_jaGd1URCi|evpWqWbn|5mzsCf1}FEYSm zc6KQ^X?{LjV)Tpbmw@d!h!L%s#%c-3Ale{FD}*{SYYBNqT@O`Z50@MnqM9N3MLzkB z8ONnV*hSoR4K=Y%lt!DkdcBEz;vFFR_G$eB*av(Ri{N$3cfNTWHJO_1;iwJLo$p-if$PaeYJ-zQT0jouwpeT$V5 zGbU8Aq}20uz<3!mmSkBjGE(X1W~!%ApS*kb?#7n=q)HcJ#*=h5v-|I*a)6Vr7oftEK_QL7Z^UAb+vj&$bT z*7acA(a=!MhM?04*xJd=C+UpLID(iPgS5$f(K^)tfur7uqF&n_N~Ps;+xRbn0Iq5f z)4QJNKeZMeqsZvD#_B=MDeD30;%@#6c?pb#4_FLFzCOpTfE-BX&XRb)lIBCtk0n2 zwi8!bfdrA53eEQqy>#AEOOq*7Yc5gVtraNC=M_b`LZVsyEWW+u1E+M z0%#L9jv7kra8>%G}c@>Hb|trLPUB34HO8gsoXx#YAsB>WzXQ)m{8C z%Zs29^u&$sKT$kM=T#%urW>>MW>+&HdHrbQnZzWd8k8ZtTM)pL!P=t2Q=yg@R&1f` z!wE4`TQnMCAKrV#(}$cRj-qON;^G&%Vsx0;pdckw{KJR!tbmpYTL%WzR~EAgB9cbw zuJchEE0Xxk%uHMef;HYThIThs+oZn5$)@ckCSuR&Nn5PU_M^1fR}qgLG9X}F0LF^B zmQ58%9_k_;(!{}`OsW=a8q3(|#~np^caTubWv|(#z~w~WeMys_K}WAl{nB4dNU}N( zZzZ=-nJ8~cv!es>@d2Jp(4#E6NOT1D!DQK$veIhQg2ixazspFe42?C984|`{R8gTf zil{%g^7L!id6_MQ1YF}3}-HmsghVGGsT-M$_B~CZ?-HNYW;3ytLgI-k}N>a zj*bR&huMTO7hAAVB=U5r{4SC6X_^5vadl zBgm8{tpcq&09G;$wBjvrI+1j9h-JSee~Mc;OBr0l+>7#n|R4EVD&4FmPupjCrPN8W_7J2TpyrU))8WrCPJ;cFkKHFkdZ6D22vo+Kh<| zghXD+=SdHGYu{x;uu2`D9R~b?>+8jKl&yZ2Z&pU0JdLG;w@Iv(N3B~2L^oOb%zc5t zia{fGaDUKqXeq@*_|_z7e!FBT(P&}CDEGXKr`1mKfBp% z5XnI-TuH8f{@OgLP&+;8H1hEikq2GuQ7$gdP-axw_}cr?i&|l{GmJhB&GwCqU7%29ad(|kaQo<)UY()+qc{$7&%BNYf{8U4^Qt;z*9Nq z@sh>H!&hiWKU)a7CtBd1?$;#>=xy&}|l(BiXU$Wg@Xnfr@GuCx_YBb-`Z5_ugwe1P)w# z28$EIJi(1ar}3g{skqom+9CGr&C+WJczG)-%IV*e7C5`P2nh>Iw^^6=04~AKP7HpV z=nD`I)RmQ$R3N;)K@y9{lef{LqN3KRsoM!LB(wvZoy{GHpFUmN3%$X9b!==bs=WNH zCO}v}e;QwJQpV6M@XsE$+<@*UM2-b?xn%#bh_;KK_$Kz;hv}ZOPN;p1n({K^9$lO zo2SaT31MS37mx<02`OVWJ%Q}?|BE5;a#N`Z--01Jfw2qo^R2gHBf{;Rqq#DTp5FAo zy1*tUV%JbqQqm!zY=ZNu2n!AM_xE>Q1D6z36##WX1pRKdT?naTQlNLW64>eA6R(+- zrKP0-azEpM-3YB{bZ~Gme*_vgf34g%LJU%}MxTH*A_{BR^;hO8X~%zS)sCmLt#+V} zCJuBS-w7^cvhgu=e*)zen-K0>4yeDTW*F2DZmk?W7i^=AmPM=GkVO)zrNH;U&jMPq z_(9;CMhsV#OY)5c^vZ2Za$ft`xpzjg%3gnvj6VP2b`v~&>vRPAik$YN?GMubD?Uio z7z0KCn@toJJT$N-sj-P(4*<{oK&t(rRe zRNUMQyX?a#ULCEnlsf^%Vx(zSA`4EEA*$Q_k6#`emEN0@*N&PbW4GSOw%f@dO-RX@ z8@(cA3Q+?OnP62icNPyF<{HkQQoTFHA5#mN4zZM`lV$PW*oMDkF zF(QY!&Bb)iHMup%mw{|0o1pMUsb*oPA=MYj(@q{iR#n(@fiys1?2#~n$a6TRc&no+ z4S-UXcLtQ^kU%D*C;uog)2K8%V6r{Czqybr!Mv|LT778gd2~T3O#Ji3bdS>x_o^Zt zJor!G#Hqs_1gtDW9?)C_!-`VLdUCWA69td-1tAV}J=Ng(FRiKfIVZQf4H6dbWlun0 zu%0w1_vh}3?t!=Y7~fPd-dMQFVY)9#4F2h(;vwj$7rZZo*AsBm6N1d% zG4Hi}G^w|8JpppKglaJRRshQE26+)i<(vb_bPI41 zZuBr3tCI0BFq`m0Lq}ZaKqjKJjra6)0RfQkMIS!aOF97;40`QYnJVLQ?^?c7>XJM} zTsj(%!Rz~|Bn2k;H&`~N0$S*&Ak_tuHXKUf)&$Jb0(c1Y`s$#}99m#`G_QSfUjgrX z2=>y-h$`SX9)mSTDw__&0IxR41r;MzK(e{H0@C@6g)c4$oSV~cXC@y5bMVG~Fzuug zjARqA{w|Ky(7O-=5(DI)A*ZuO1`d|=$tn4hfO|s6ap8o1(Bshdu}N|ZEKeJA;Y<=& z`nA-@D(fJ1)hwUoR$IPvzu&iDsmRnuUTLgHQfmCt^JR~Qwn`R5>M-mR0h4bKwCSQc zEZ^p5d%3OO&BcK*19A=+Am>Fz%$s<;(W>GJta}E|7E&5Y)yih zcUF9!()}X9-=C0d1!hjwR%>RzG)dsIdaRnA+icl8UlQhPAW-qe6)NLiN95+1;)KA+ zMEZ3|KNc7Tkg5ueg~l<*=*ABS0p@tZU@6Vpd}9wx0Dc9LA`o!T#<}B@dcT{KZwW{} za=q*TI|CH;D>l#+3sMu2i%!6$R;kWT4e}kmypKyx`4MtqC8=}#I05~L#dl*#A|#hl zKa6T^e@V0Ah&k3-x7chLdZZ+A1U4W2;Bk_;s>N4urr3D6j}&JmjG1g_3LrK!R=f_X z*Oe=bG{S}EHx}pK@~rer6=+^98Kr)1Jro)GP$#L*y;hNz8iG3uA9`1ukS_kQ7< zz6>Y8Wlm>`SFc|nY4fCd#Oj9DPL57I$xW`&#HjWr+FW6il`|!p=#yw)rvysO=LvpW zGm+z#j014~;k5=mJ=kWz1nw=wgEgh4f3~|%)sqll%iF7Ff|$4vy;vuTJsxD`V8z%S z=C$I?FPys6A_|ONpar$}t#kJnSItdSMb7CoDsp(R_z_|-FhiAboxThi0eQ$M!Is=h z9ZyOmmBGys3i)BHA||LjZT2bE)Cl1jPk0X$<-@7lVDn)Sfd(nl5HdyA;`8Er8tDh3 zU@9cg)^2Q%$NE#tfy8R&Bcgu`*CDfVBtG z7>|11vh2q#+{rIqA)@gF77 zM3j2VAV@PO@JnD@dD?R&v(xZT`$>~uFl=s`-#lhQ1R_Us_-)@A?Qnhq#&hjl%6y1}!; z;I3;NQ-UAGGaR|mRaXdf%0XyPgh^$2w&Gs^xE-`g#UU`E&25E0-k2#a#X~0 z3^ABM#m6P1Vsv5JsM-p7d?*ZQ_Rh{^0w^MwSLP+DAEyJvb5ZVoQ|2uyU9I1|;8Ce5 z)vx^Ar>PxbHI}E<_11fPx`$cs%N45Z0QSFk-ayA72mk2s50Dcop&~XH6!M`Usn~Lp z^e}!47&x$XO&q}uBD>jpxbUZ7!;uZs#wbH&pbWo7kSh&v+#ldicMp`8x5w0ED*K%s zv(}Ls@^@7uZQxcM3qd9Yy1@CiKgylAeDA<9^csLmH) zvo$?bWdTwbjw(XA_2smi9h|UL*^*W;BsR5pF}mLXW=wv*66TdtL#mS+Gs$%u&=EK> zK3TDNzaL~eS?)t1E)w1qj)Me>M^Yrzw1rQ;7}2q8_YRS<1KCS=r;6)vYOoeuBH6fu|g;W6+kvo#H*!h@pL14-7iBAAtrL~wnoUAJ!f z)^HYSU=&7gFQ0~I3*V;p%q4+z7TpdBY0TdgRoi`9>{r3|?d&jqWDr(OGVTDA9^9h> z89Nyy_}+wtI^RXdrd;PuFiGC2sYACIUbePdzl&CFfgDr@#f4GCHwP3+nd(JCfuh|6 zbJY$6Yh`t4a&T!ZFx|?uj(*9qo~#5Qd>}(nHV+T3EnspYfAVBDSk7dE0&I^nfI-@s z5a3mXB+CQsTQ=c`-bGg0S5A*f*%FR>fkRexjN7c@IWXtn46qLZbn$B3)s7GMG+NvV zw_MGrV`Z933f>0{R8~X6(>5qWg;jO{meU7i&c(Ru6>@P z(7ZhRMSfNe?{Ao3vgaq;d$L8@wmUw8gklq ze@Vbr(=QG0?1!((T36bEq>ICA*PRii+w;r@wD4~1moMM0F|WI@+E+)xHf9eiAmjF} zTS~;R@>r7H_F~OG65WmcY5N1oP(&WFj&zZ;6V1eB6ZRB7Cp&59IpXje-3BU z@fschht*OMNQq65FoH}+8|NLx$f-NCY1|~(>p+EltnT}@sO#_d-xN1JWeKiNT-0PQ z67K+C{g8_w$6a;n2XHQL+jio3amMx#cw)yiI9XlX_SSp}0YzhF$E?ggSLR0JtmV{HQy_^ch=YMCKGhSRYRfV)fg0 zFas@|En7Z113vFMGQEYxjDfcpP`Wpnm5%c$EPEh7><7l?Zfw>?24jkMT>Hfmi#fA0 zRGl+Rpr*T_RAx7s!_h&3AUsNum$5Fcnph&}`A<2pFojttE_SE@kh!zu9&lkSYaLM{RtaopsF3NpE+s^naQOxE+p>4 z4pyq#_-;*xY@BZ{Uc%>L(pjsySgqoBtgkrA6xNSkHc93oENV$xQG3@bJ)@%VzMZ(k zxzfzmwbmdIMA>3HsdgyZv(*u8?3MTG^x(d9e}65ygVGjDgs{0esRv>eiIhO+xg@mI z2qPTESL;ZqkHIC!*Vf5aO_s>iflRj`{`E)-wlP3JD}sp8=23R14ecI(N8`xY4_Ceuhw zRY$SQ|5MD5bs%8si%L$1ZH-(v7>R=3EISFvC1C#JA?ES0RZuH6s%0XCt2w=JbZ~GL zj!-`evLa3d1%c41i0@>{3L3cQ>lwVD$dTA>%^Cp`fnccmv9Jaf10KDo>g$;_A00K# zq(@UH*0`&Qd>xaXiu&&ZfhJI-Ext~>aE-9Q`yceS+kDpB`vC|yuu53S_utk|iK}>S zjez(Cy{)@Mo!U@S(C><&CUl%8)dUb$9)X#%Ub1z60&a6-eHeDmg1nxONGQ=MrhT&w z5)f*uBC?NU$+Dc;$nUrArW4cT-d5cv7gW-ZznNIu58hK?$UDy`u_Iy!`q{CfN#iS# zs)9fuj?s@m$G&XNDGyI55VsMA%gCk`PUm1oFFxp66d7Hu0cz}6JlGF&2jNMr;#%^% zNEACx^*jG|jd?(xft>bL-Sto^j z%nvOkPpq`uVlHbMTvRBdnSxSw+->K~!0fyC?rkh_F;jFOvrP(il}U8&cMGJgMNilY z2Z2yJPL#i5Q7zVr4N-7n2U~uSg&Q<;gWHJ)>`(FYA&y}C{MKE@1xnbcKc z%XRp>5i2W0Nc#ntrf`Eyo4nwjQ7&xrPV3j@Yqk2o%m$6FUH6@T7X*)IIuhPE8X$k% zh!^6@rJY@wRA4Lr*4Ut8fIod?6%=^sEyrDLJYHQB;Or#8g=H-)+`H#1#;9fo0(K07 zjluusW%Yl)>gWkVbmnZ>%f;`;@g2lS^t-D5aS%J`I<$m&{`_ZxE?e^Rhe5z(v8c%9 z+_|f`Q%JYiTFfj+p|Ek6y}MVBN(F8IEIT7`njN*a#w4;|x^=p`rW$lec&43! zfx-Nmk?axa6$S@o)GZ(+q__V5Wo|A=%VPq#9WP!yvQ$=HULHR^?JmB)woZ@dlsvn( zwq9OQUVc%rqO5FFKq#wOLzRgCq!` zfmv{~(xRdw5FshchKyv?sgGhRI4ydGPg`=9fedzaef|1O4N>zG+>q=9QjZWoAjQN) zBQVhOv}+A}8@A)fwPU#QzP?a8Jtrpz9k{gK3)0bOUcCxnC)G7ImW_3TUk%O86Bf`w z02?@GUsG%oB!ru^7nasvVaxOVRjy|25S@B3Ia5(-MJgK_-_xQ7oP;_>+Q_I99k(?IK@`@z4y z)6qsnS_<0i5xntie2*EB8V)B63=E8njP&*ODWits?4F+;6n9PN25jKIxcd5f3+BalJn9=B9tQ0o5MbxepTBtVqMDkTtStKM-E5d<{5*L1lO6dr z&MsAV_vd?@Fzm5sl=Zm6+hBI%GDTaben3yDYv<(RD)pNqIXZdl4dui!@lx{5b#QGz z#rq{^7k}jyvcGoMcMjyKhW{ek`@cKe+5fALy`}o^&oY+}oQu=NW2-znwSq-yRmc=X zxjaY!{q~jL`QYTh_obxSvNA13qcQ=>7U!(Ky)wATmAlrCkQO&BJJ3d-P^-#Uq5T3P zZrKj*6f?pC$XPtmwj{8fg6z#Tz*t&}IL`;WHiK;ZP=py=mDgUvd}V-??)?h#^mTTm z=B41dIZbWoyJ7{}FCg2uy!(8*fjYPrn_fa#a8C~0WY2uVsAC`muJ~dT1iF%fU0l>f z`9~JO)nzYQ0q_@XEA1uP&7MrV=4t!bLelZ5=q1V`+Y5b3`6hriJFsSONf_Y#=@+~| z9Pl=`+C?HEc~WeYD6pHI8Z|_!gN>SP#5D+F` zZoFh1*y3IS(0oXvVF~}dAydviM6ReCR--$D?Vt6R+-iF>R%2gTs&emR-AnlBq|r; zZ`+Jw=jZ!YZfTfl*YRN{hCn#jJz7_Ihe%tZv?QWpk?wx>5ZAK0sJp=AE%siIR#)&kojD0|vBClnpAG8fE&(1uP%_BuvP)i@?aOAp zLx_y%SveD$2?iVP`uh5ZE-PhyJ#=%XF2V5f9`%bRx}+Rie=ghn*>5&er&{CfeQ0%y z=UjGc#ml45>X6qgsh{^{DhMwo4sMo6swk?hRA#@z_1>pKi)LQ)HD=E_fAnrWWmJ{SB|6ris!6HLd+UOLZHsd~|Ir zdPE^pqjsMk2TtuWD9k>VuysXKq-^HC2X*o4+C{%7Uz%YV_sCSnQL=&QTKTux;i*Vz z`IsP^*8#@(liebyQW@@$G})bzi#8|J*^S<@W4GDTW3-4sivKu`Skz3c@S&rI534Er z5Br3t;TGH&R?_UOnYg18odSzssx5gi@G#s+*G3=UJY31@k`o(FfyUFne zd1xdz@+R97W^!sf?bT*2dv1)p`;om6#jr!oSHzu9!O6-K!xs6Zmo5si$m>r1yk*|M!Fc_*@ZU}* z%EsL0ZQ|G7U0pq-8mLGpztZlWKr`%`;J*0Y?^tS~S;L)~FDO}ZQ<|+!-jxW64 zJKg`7>hvWPE$fz>ej_2RII$LcYN2Qk$JGV4w%g4XF&=w$+-wwHJQs_!?9VeO=~LX7{sR8|lEmyP*8}|h{WVnT zM&OjnjMz4Qe8-31TR$6m`pksNVHYL)4^v0>;{5~KJM%v!Sozt9*ZyXUO~KU3_|n%O zZjPL8e0#j>if46yi5>BVZ1CxQE>WTumX!`p&CzUGN|rj? zYwnKU_dgHJunQkmJuTxqLTHHT^{-yR_sN?f1_~&V?;M0^f)?wVfb`dUt$CMtexq>p zdi6QbS`Sg*p4=}HE4aOn(eVlfZaTjka#nkg(Lhx7vQ~+V?|s|A0?qWCbEY@$ba%Y1 zL1M$CGb-2bq_#d2KhgNnxn!6^VeWw#KwUdKs#u-Hxe3=*n?sf!+U|$&rSHQRsj`;% zJjOaT&lzcG1;(s&`q>MqyS*ZPVHBS79sOcd^EpDs@&2l=vf;0PH)L0ao&CE2N^z-2 zK3NZU1iG@k+~3xKG{a%rvv5WA)9q-`3ibBM+}i^_a@e zyQD|Qjv&j%^jsYBntYZl3OuTQ-UhMlxb?yQR|&_6AAR&-*J-%%{Q-Ah7R-M!DS%d~ z7RK}S+#FJCCQ>yeBwaBs+~L1uqeiVCY+A=UYoqSDN8yj!huY)s3g-;p{wVn|dV9tkcegmGjrSwCe%S!840+{tj;&MIx8{yf>8)$@ z$5U@>TH{mlt0-O5ypLh;(l2YRy!!kWG~<)CI?;l3X4vosyniS)jCoi^y33ckI8KgA z41*CPyrNAlFV)h0Ce$D69k6q)DDCrI^Bda7lSgL@D*R5p`}E$Ul2KOV>VRAwnOinf zsF}igVEim|OPc5U5Qh}W8$Xf_tqWQvxW9g6AJ9RjI7g;P_;y=&TvGY7gLhn$y3BSm zu>Uz;`K|{$e)(%+?#Mct!8uBS6XyF<-)Gg1XJ&tP+m5cMe`@WeoBxLkHSG&SKfLr| zf?H_>RnzJ=Pthtfq0PW@^2+_m&y{SVwZPi4(O*?&B8g$kzLlT})cYWMxq z5>H=AJk@@g#dk9BNqygH=H_plXGX;jYM;*T)(A=hU%z^7r{jMlICof+`h@*aqT1k> zSltxZS9?Tfb`JXwXXGJ_rztF4`qE)e#op_Sf`3%KFX3)3`^$W+REzY8{=Z7~ zv_s^UI_JwXJaKZlCp!Z<5RT;+=yo+G&;IV@Px*#jORvoJ*d2PEu1yyn#5ew< ze_Q)zZP&K@&jk_~eV;V;uhPz%nsEB6BP}}%> z-R+N;Osoqw=bVSv1>!@*3&a1eqK?3`_z$}u1F4n{gId40Xb`)W zQ|`6N!(A_!tuqw-exHIUD9<~6$6r<8PtS7Ic+j}jMh5p;9{~jrKQd6KfHCz!$IKbCf*P{`WXFZZLiEzF-zUaL;4N! zXU5R$jphITnqzS};mxx`qrD05Mas{8Zz>Kt2hww{yqY#8I*F4?UUF&KU)M^Gjh9?B zxhYwrZswPtK4)#6dtITO_ByTTt7X8#ImSOjFZq8Xifa?qnZFX@_ki{gQ{r5%(_BZhr zc^}IwlyaQ@O|)$n!cwEEOY>{)WS?DhcRBz(p_xYe(m(b2gn zQ*+78@2R2eRUsLtyG7!$x~0d`3hz!_f>?At-LQWSj|CmO`O`sd&kskMR?vc?T1LT; zSV7zh8gy|#SpMz{z82HD`SZV)E~C$Q8GUW)l83^<0<|j={F`d7#WGqFiMns?Um6>4 zm41@>eB=r+T6-WczKW`sp3@k`g*_HPXsz-?l>EJrJi!AHuZ4swC?hbP+1k(LBSFJp z0OwGgT$8mB`$-&h_lNtCJrMBl{qGM;ag>AeuwU)#MEuF7y0g0t-hMU-R*SU*9ib(m zW$z}D81t8;mn4*ZHE>|yW`&HEO}f$s`AR>VJVsw|TB}ki-}x9c@OpeGTA9{*3VW2J zn2*uHiXi6;_7PhU$YNsPNp|yaW{+&-GsNOzGVJu3f3+=R@*59i_JlEIjmxz2^6OuP zwWBzru^#hzC`z0CpxYHrCuE3ah+XOI7mv+)J;Dna)IO+P%E&539R4Vq0cHWPm0Ili z1lN(!`dPa)?j^^hJVxJ-2g9-l0$N23eKph15&S-6#`LhZ@%Jw|)(IGfnf^nZzioec zBttCuPo<%}k)+ev6NXbXBWn+2@GLNr?A3%LQwb!N{WtBe1*c=PW?pmb#ou2>7K%>^ z83(20J(oqj-dg?CcsFm7@T;(WT<#tSKckEN&cIJUvu(`Z@2usET}b0MT)7ieyOYy( zGYRaj1AX|fjXiOMF(k^Hd^q{A&{?P?=^9yxt4UpvtK() zB3T2?cy0X2G2M6Ro?18efc8Wu8lo4)LAiGmziS0}^Nhx3*yCLqS5Zx-HsD)M;pP^O~Z7%E=ye2 z^8W(*8wSKvXyr^|U>|{ng=O~?u{ z1UCG|UdSK{jO1JAHd?iuLDApC4GN!~??3J5ko;-n>+!Q!r{nH=;eNtDG)+4dYexZE zlJMkIYy`Gltt@}-UK>q?BNp4reVH-zoSjYTB|1fx%~>s`WSZKNKg+%mRdRKsO(m4` znMQ$~qj$Io+UmMOP1XUtTl+%{3TCY>i_;Kl#ESu(gGtT%#&Yx9!TeW5oPJ)zdGyWH zmcChx=s}yvV~OT(ASc-Zl&DZI z>g=PL>J{{|U~s99l@ZwY{PUMtZ#=5MnCQM3qT)ZMWfs<2a%?(;SS0xS!Sz`q(e{rA zd@c%O6DRA@7ALfs80@Qx$gEa@*G>;eb=@!8MJ{`ybS|?s`M@m+znNdXemS_MQEuh( z^4)V=?i53G+n=Tn#S4)yfjv`xVj6kdl{@Xm>>pIPgx^}+qDI}S_Yj}wwBTueB5ibU zVLndqY+^u0R^NT9G}NLkUab2vE-_5X#Pi2n`S`F-nGCzr#9uQJad_YEyIUH2AYN_{ zf$msvOcvO$(G9zZylT?(&(28CZw!2UuNv44v+G!F)}0BoL3ZZzPFk56Y9MOUFXO-| zsrLdGFKqA~BvyB^SIqXelqW)SFDA<*y(DAr`)u^&Ghv{OCQ z_JGuDt}r-qG=2cztGqM#Y;4M#iY-$ghXIkx5{Uu-=%=1A^nnV3QlPHQ;22k%|8HZI zja<7AKF_a`&a`2Ny{F<_rUq|TPcZnjnI7fkQp1;VJt*&mKja>22u(pGm2b#$UB=}e zg`a)8tEHed*^1st5ll&5wM1VJLCf))=byijXk{#p#)TzEpt`>ntZ)1XJT4LVqbTK& zE8+!G$=0_G(){13+6&jz6xL5Gliw&Wn9j@ehcP}RHfCfMo|W&^S3ep1rEZu0_9U-1 z*pXp}4MXP_W0^?fFVj-qg&Nw=4Or1__^6!kioonA*{{$W#%9v^S;EEYKfBZ6T zYL~oAYWhUKrQ7fx$Y$B@2mcuM97A$RxX*LV^F?ZwHS;<4t8t-kYigpO94~w4-ISQb z-C@Z);+FJaIXqKxDnnVbfLYb&&h(pKc@@8wFfTqG1Xc7RGxzz4NcuHAzDKHE3YQT zm^7Ue;GS<3ZksbK?Lg=(Y&qNZB`))iDD!J;%a{B0WUeU~OlCUb(UdA}?cfByrCP@) zBMqPA?CS;say{ywEYI5lC!91%Qf9Bd6zZ|F`p?0WvHYlw7jX#wTqMEuj!=I=(O<`=$*npX1*5Uj$`qpC@^rWJ&;{u`sf zsniBzRxvb%;b2Nm=1B3-l}rXzJJhVSBnC_5-~2;!FNUCX4EkrV*>67PoQBfv%uODw zM=Td4!P23k8Y>-|FroZdBaeX}XWeP`AB)qL=a*!Kp0W?vnI^qmV?v{c1qEvfg#_)8 zz-Ea>`#4dul&>-V=Lh4o=V9ptJ4%Az$FyO8%2*?evGLRAwA2c+kWVp>Yz7==Cq4nk+Udht+n$%h`d0np|V-i@CX2dG}$L5dkIt*oL*++<9J5 zO6q86nULb;fSI*2F;4v>SEO#M>n>8F%@VBy(-+ASjo>=l>Mw37z<72)A;Rm^q zorL4a4?Zm2Dc;wa=o%^<4vj6y$a-6PD%J{_f3v(|rH34W6&U!oAJT~W^fqL)e@0{$5Q8KEA=#OBVE!Ac-rY^(NA~UJu3+# z$Oit};b=v64RBTTul-@I!B5@12pvY*B-J`zK+%V|ef*J7QSZ0;uZV)bU&#-qCik>Fd3rhls?~knSKPoo1V34?S>uhgA72nPC8k-x6qFpAJ+kb`I+E>v z*R&)gN$V|%H`Q%RoK&XL^K;e(-K)pH5Vx*DJ&aLR$oPmGOBlDHo1GU_+-^n1>beA} zsIO{C@PBr2UaJ}whTlpWyZ@EqrZv8$lsIz$$S8bKKu&MsR5gXXYWlNXNN+chl0pd_ z_Xwxw*7jD1`;ceJ<-mBr&6M|{F~bHykI^fdk&L8kvh+o)&DykK(z_Wuy~#{4n*}gG z!WRsUzwlTmdsf`$`b{EHxr`ACX(u)K`g3L2g+4~#4w(DsZps5TdF+n8YbY@|yKXRI zj<=>waqC|vRo=dE8ZE0I6*2s{tg&X}y3gd3=K3Qq3!L!@319l_UJJMl^&AOYA1_Ff z3H?fi4T-{3oMKbw?0jZdwn4M(0Jhy>1-w9Nk~T4nZQ!N z$w*hQ_t{tG0-vU=?S;IPh`nDPK&o|1@HfWau0`a-z8-zh`{>~i`s1pH>?-}xKDuKF zL}AU-C)OgcK%6{nL>3RL(+C>T&j%~J?~g4^{q0%lZ!>fGSr9xw8rf61yN*YQX&{kU zmoZ6xbfQdh>77}S-&aMT=@%~#R-cAl(;BNs-}jV!3VdZ?D{fbsVYmN5u3P?CX@rXF z>gGOj|GW<@NLz5Ba<^(mX^rXnRJ|Ory`m97tf1bk+tBX*Wj+ zbwB$)>QCj$E|8<{G#=9>)Px$!258`{^6UNR4WEy`7p&2o=2ukMX9EPb#R zch2*!aOkudRORh*aq-&f&zZvTmz9MR>CQa26EpuKOAtM4q9U;hvv)Q zDE1(*>eRxuRk(4Y~pL-<6i+Um-QPB-Sdn8-r{p5!OBjPTLfZUj^7m)MIn zvEzwhl*i~ZGb{9+x8+26BN|gG>vnOZr3P>{`D{tNX+2mvIX`5b-4`II>hFE$IkV`4sys z{oUCj7OOioT5heL|x4R)ZGpE_g2A;of?4LjEvc%Ih@0N@Iu(neZm~qG;x0 zI3i&-pzms(>f?4v@1$p!e5nDbCJg}?^)dR#D$T7(iG2Qio+H(S<5p7a(yG3q`;x4*r9okR|OuXhZ z_6PZDg34#(Q4<|&vxa^z-a8gvjnVSly@Z50xG5quWGh~wW20`0UsyYI3hk(~J@7+I zWL*AzcRk$^HCy0E1~*oaQ96lXMZg z=rU10^8iETu7 z0e8b^I_AI`iiD3kkNv`(`IR*|<4rvC4$~cC)$tuN`YLpsEIwk$dTYN*G@mwU_Mv~k zIF33>zd+zCC9_z8VJx^6oo&-NF7ILBa>3|foovcO&S+gB@Fi_e4%5UQe3nTX>us1tosC8_C`JiK;gV^ z!!`GqawbxbIAvP9`txDShsGmT_QAxcpxk0=OB8g_TP99ef=<&CyQopG{ko0* z;K!MA@h`LwUlEQul^alhmJ9MvmLD)prcrQ=YPw;Se&6AXrh}WUf+QKgGhl>( zFj=mmEwQ0ck(yXU4aZ{cWIa#cLh+rRV(|E$DMo06%w(d=0JF!|n1cG8fpF~*jpvjR z*AWmW42Lt^i5_++4@3AGkTE0149%<)MQwFXTPh$wH>0KDOUHKr?qlcicDQPuR?0h% z&Sbr{-!PkYYszBSG$}S#V18=tS-O5j3SP=~5Ks^l+0W%4qmD zH;W>%h5`N@R!@!!E$xM>yo26O5T87_rI%u2` zH4E1>0AZq$r$x?l`?(KI!L+qGC1tqvh(#Lfgoeu_3o*(CEB>pI=T^*ao#nn?(M4*f;w_I(MI>>DqDDa9FXT+LbZZ*Q&fdQfT0-sJ-%9UUvGu z-+R8AWr?MR@eT(|KtEO#?7h^Lvtw`pF26$D^rYH9<-=X4|>|Hol)?iYov0eT|P-}f5ANrMjqDQ zr}`Kw8;mFA$-Z&q!vnVFNkvsWhUPG5ctpiLv1iZ+LS^o5q6lYqdtZ4_3KZ_j>8w(< zpBfq-M1(e9zbW4y_%AthI>@2HuGt;@;YhRm!@^=c&fSb4UVnSD*4T|!dFvW;=CFO~ z&#<3Zk+FRWTqjx7g8M>e>qLHv(2jmDpHoFvqp0gNNUF<)o^0#EoBj2k89Q;85)-5M z2P=M;pwOj?r$wS(F8Ixz6DqBuy_K(0oFkU2EOuZo=cPs_5tg~jEp3}*kLm?WwIeV1 zUkOuT3agBPEsw!P7fTkRG|A&LeaEzKb?9GKXK)eZ-vk@Yo3MS)(tK_g|0Cj}AGDDN zBl6U42bi{rbHf$>Wd|_j`LnH$@X!PP)<{njE-bB|5 z`!65nC$_XxXDFwzW?x<26qCBQT~EwTaQn1EO&hB%IP<*kS6Cl*E0Uu3u^)o|*Fp8O zj_&;KA-U{nx*R_@K8BsM(IY#}IZZM33MvOUD|Js(d6UAAu-nl{qunR;Z_`~BkY&NK z_MasCwRUm`%fB4f%-GPND!i$rI&8Mq-m@|05pYzjIw~b@fOhOr{O%uNllNlf6Dm45 zR4zez@yy|{U1C9)SZ?~ONZdN=X)}4tPu|GjF>}CbsvlV0>+9i4&{hS!tj;x4VF8wa73$AlY&a?fdcyLc>Z&0=XfX)7eIdJskH>uuO;7s0!?ktfPm{$i5&6)tcr^J|56~9l#e6@m>dyv1=}6e zl5^RKHDR49@CX8GWC&% z3(NVCco{5gG(eR8S?vCM^&Dg}|0u+!I!JvVFn4Jo8WIJNpno^ypK8C^qriVc2Cb8X ztCi&sCWD`aDI86Xyjzu*RaB_=6BoXe2of>rle+Z*%p%_hnbX-fJ$^h?!cU2t2>1Y? zFX6}H6nXWW@m=o<@v8}~iSD?~2_3_HXCg&KN%kD>LK+`lMTcC_-7 zPbiojvi@Z(3dFI5<&f^S9-(c?;U!I!!TKn;T1(>R$jHBtg!cGOGJ)s*o?M5x1i@xj zbIWDR;wRctkX!@FocDg>`VJSs5{P9+rZXyPHy8l|mb<30?2AmfFN;*=l>tetci@Q# zm^>$R38#Zv7WvNGXkh1i^cC2$qiyCF4|CchQ^6SYN%I*2B9>f*A8u-T14X4?O{+1j zD_9XT>a79Qd0_159qqON^dcI(P0;JFGv>_SmJPOuy`4r~0MTYuin$L4P^vjF{|B}k ztU20$sxjOg!?oLsm)qq(oMO{Z6RT;5B~RGK-6^310%|x zG!YNv+nzT58#-GEkV2McDT)y#)MXrhAWVQ&5r0||{dK{{a0cLmCv7z1nDbp}{SC@icG;R!vYFYWy~cYV8dY+};;Oamf1MOT-zjf7r@&^!P6te2+CI$dcSGn} zZCg2y%>%vTv={%&F#imf=uf(Hi0+on&q!d5mH01MtbbAfz!UgqVod)7UQc{X59jeO z@Uzl?#Owbz^n-ueAHcv>hs=q8Av7d0)mk1+L$l`(vEz2Qbf*upOqpRp@NhB~oOA9l zK#lkZY2u%(gTE6QV47?eE<3ul0F(s$7ybXh_YfZa@A)1?Hpnq8yThS$Yjtn6Y|_*J zZGm}p-;n$nXt(yiT}7&g9NOg9B;!BV3dI$^v9nW}NVHL=WB7)MeM;EBa9-XhQ`B!B zGD7<5nF)ag^D}=Zi>QBIPBuAWnjj)J`2QsyJXc?j%56k-*FL|K79tEEKM968;5rW-IPc0KS?P7IifMBh(8?oq?M{+ zO#I)LKKeKW@%d-E-ORcQ;aL(f zQEwa;9IKpXuHVtE#5OHGqd9C(OhTfVl~sJ@YW;lu3`IpQDRZ-mAr3L29F&V7i|4i9 z>voEz;MdXPHMbSA5lx=?z0f-_J z#`GoeSKLz5&J87fZcXG2_3c%Mk}s0i_xpNvHCm`txU(qH+fwa{A@HP0?FkkAQrqC( z*80tMgTkM_q3Z$PCnFXp_@3Hs-MF7aF}e3U3+Z$yY#^~SoG=E@vx)Vn#D&-dIZ(fK#dGDjes z=?2ayK<>E7=Mc37fbU=Ce@WEL>Gn_rU(#gp^_ANNKezEVL%5M(hHJGOuWHsX4{rWm zmijjCHPdNa)$^>B+L)W7uU}}q^1yl`$$|A;{#6OM$;xbR@bK{B8szcXNx2NZwVo-$ zinvEo0``TYL{fTx@;*DW9sTCsAOkD?)u@*9cB9-tLwn9WPi!5Z*X%t&uc0;ID?aI1 zH7P#jEwpk)&XetE>?q~l-}gqq*yBid9mVgP5C|IDXyEpWs=qDD1vk z=E-^WL({>_Un?DF`Zhwbk?-LBK6$>qQjKyQ+KFjPgAPz}ev@&xeqygrz``88cG)mjP zTemZzn9*jlHwzXM452UOOt9f&O84{3*u4thV1I-_}{gD)w_>h%!eu47r4{B2A zZHdmM&AoDSzuuwqKcenFO`?h_V4!RFn$7HVT zj0G3>QOXAB-nDIongqs|7)-pC6(3sKoNarU0CAC0>K#Dsy7 zXC=cspKd5VQ%j@o6lS=ShplE`m4NuNqrVn{nb~#zdPg9Q|JQ5P!+Ddycx)Z{LLAwI zC#%^Rn|UH=1U%>3Ptop=d;D(s(6Gh8dE5B1Xt=fA%ItcVLe`3BT%IwCYejmHc7FHy z32*@Hv5o+#B!KI)K9%Il#Y(tA8X6@ zp5;AbkG@g4>#R{Eg$6sgV%mos%d6tde7&ti=9Nlzu4ecyY|Oc+B99l zK_s1AUkbiw1@bC?X1*_0qO7PW3SbK1%9aWAqS9&q0SOH&SNG z?F!0M1HJ3@`%m346OfVZlckEiQuE@vCPyociqFdYzC9TuqENOM=p_<<#hpB^Z|>*E z4{ha(_nm*wek-M2_uc2OE?3VhUluc~5eTf2njDcOBmVF(UKVSfHx^>&!GG}E6`S%+ zWumbAXjx&^F(Uq1UJOp$(K2Tg$TwBH!Hz7>W?TU0%{csQeSwRvYoKRCh#l)dpO8$Q zja?G#ID^pBVGhE(!u78bky>-Ub#(XIwjUntz!oE!Zv~2Uo6kWp%C^uK+1fK>XU;wN zd+EJyQzO+DLuJ?a_$Ay9K2pFT$~p-DZd?+560-a`^!&VVn0cO4)o7FN@i(92WPsWx z=U}{T{^+TCo%{Ph=cL}vi-r7U;4mo1A!W>P%}47(LjCstH(dAsZG7?{ss4Wm^h@?m zgG)gFoX5r0KW%mx+8>7LAh2!yX=!6&VP&&aI5Nhqee)t9!*V7LaQY``Jp#GiKmL+U z&lirsjd=bFOi4EWCzU`1T@oyET;{OlFbN42Tl9@ALVd1|$6q>w*X+@8*~I^GrZ0~* zJBnpUzGAS>=GNTNr;<`9R_yGoQmFqJYSqflYJHdR4w;@M-Hlz~F*Y=`V$nuw3jY;0|dhiZ)M zPSf9so=Zw?##-1|+zMZm;G!Exu?*zIbec!dT@ff`UQ*RdDUsJ=_KQ>mNvD=;zl-0q zt7d`eIs-ZxNFFN(2P*{yGeGP8o|KB20Zo-r+kn1dQTt3z#&nUM)8AP;7ph@f0@D+a zA?wskz{Mw{-~}BtN=5la$~eI1sWiyHAm$}11puXwFmrR(Bp4#ItV(lXuj>cEyA8)l z+D@KO9!@HewFt|83FS1^JkAxZMON5aTz4Y3A@}3?1b2JlTP&63>LOO@AXe$=LX z1pFmsR?kUetRQ{vg4dyG(dmY0N_7mH?CM5@&=T)^fj9-amd#p0D}Lev{7QW+P(8Nn zT+O$1VL5=D*^v8s609}r{B8c#6EwU=4j8-V-OqF*9w?-1p2%IxT_MT2d-TQ2pQO+i zYI0$q$PLu$?~v@NYx@*r%GXYz-d0UNI=%n8Df`{%b94#lS&U0R5#^IRg=h7 ziHPjd@^VUOlfNn|F3g_Ola%i)UuyX6R0?dF$6dnV`iwc3*eMrx9lQ0ocYeXh;c?{YJ$|I(jDlV!7@ zNn*0P{yFGe32ge}lL&M8867zt;_wWZy@)>{-_QM;?&@=N`>oF$7(97lP@$}sQ(z_Z zbW*CtJ7lgQi6}=GGFs|rsB}+>Lv@I_ASvH-mRYxbALGoLRB(Nv#B8feJ+1*SQu z59fh$KDLp2iyX~7os^6pN^?bt)@8%3k{0RB$U?W+FuyPDf74%Bzaeh?H8^vPZ=wb`yxx` z-(0QSqq99A=?q?cNIq&8nO#(+JEc1T-tgxRS6N@flo;I(l}0*<-ZUX=45?q(m)iwg z`6cCv9|kGZ3-|gJMvOr9>R%^wBjH%F}d)VJQ@& z>ya%h@vv`j%+w)BE3a17WeZ+ik8oxJ#nx=huuJ&|I?dLZd0lVDMbQX69PzEYN5FlB zU!cSl@BRXEuU-;9oAP+~rojp#o!Wq5O~EalzJ4n*^F-Y|y74%M@viJ* zCk(yKPVj_&-7Ks_Vt_00PA5MGF@4nr2B$;nIqo*Q*sUZ zDki8^r#MKXuZ-o@4Zp?7GNa;Li1Br2CjZ4<*_Csh9|JlD)zZx6(iE=k10f(mXk=v} z9$#$lc|X)c^3t_c14PfYmP+8KI{QKzbh>MLb~xc~lJc(WK;If9W^D#GsySR`WDWD# z=+~14M7oFVu3hdWilKl749bbT$&2|PX81E)hA1bGBIhLz8_O+}wGv>U7;)8(mD9%4 zBN9ck0sWGdzWfmyyb8PkAT5UD(t>Q7T(&rJ2AT$nWQf;D{zFym6%2@ME5Sr6neMI=Ib}fX`Z_by)^m;zD|CH`G#{nfM z-kH=_)C=&-H7TqgB}E@9fnX@$%gjNyM5;F>>3~IcZyHbZRPON= zM%^F8C$cAw?9*C(#ZHe1;@A;JRH@Ascl%9pqsnTT4xhv5n$Ch+sy(%Z0{<_tC5@s8 zQ>)hS6JMm1L=E;|Icq$v&m09bXdz1q31)kIHz9a)+*t$lh9k>4^&p`BVMU5P_1g35 zp7L2(X$)lMxx~ILphrpM%|2?RHnLDRaVq}`Pc}^?{RVgojYhXQ=OmKGW5YMN?44do z<#cvyjg72rZ66o46P!<^uVbzBEE@y+5>{X!Jn6)X0sv_y~`0rfw>A{Yn-Xq)B1BPd^vjRIX|p^ zSX~@E{bFWj^K`F0ZF#v^5nY6iTh)N?uN_*P=0ipojn(|rmtw5U=Uqb_ zN%{2!KpOVRGaSx(ma}^Ml!9bz+e}1aGktKI2q1?=ifr6$z3%eEv)E0;SVpa1-gN}* zXqH9J#Bk#xP^2#%uz8w;_Gxf){V>d?&0py}S{N{)51G-?)KvK06|Ci}4Y36rX;(^W z$va}Y@MT@A$*DIAT={|CxE^w?*0Lv~n4=Oszj8|0}dYMgKvDTWN@S-MD2L8}(uYY+1En#W~ zRPt^fZ-B%AIJLlWO+oC7w7nuhUrev0nOxsU5Hw?N?0Wx>eO8l^T&io!^%6kigU#OL z3EyN1=H|>)W4+ZHo4HaxKK>E*Htb|{K^Ya1ooayb${wf1&6N;9ZMb!~$(N3XYh0=~+kZ9LSw;m@O2zj)Hw z5W!geJTHqwx`chm6c2ZGwX?i3A z#&a(r_>t#M^N?^9B)bOMuUjC|H9i-X^rb{9qMKUz2MhqmR3?E!rSYhhk1jRt47Uy< z4hDQp1xnrfT(~AAVT-qozb1!`1p_?*%fX#xcsmuA@oP|mczDU1!bSpp#PAG5fzgX( zk;VQ-R3w+MCL>Sf2JiiGb~{J;oLF$o)E)pT1WHyLT6ccvYOAC_Ulc62S%=5Q{SdRh zLCT!wFj0$}(+%x~JSelBPeeWKRw=IbFp=^#dq*dHXTc{1vi>4X?-K0H-L@B$mWHTf z0?X*s`rDMITsDQSEK`WOj-bVzNjOX}HJECL1*J@*Ed>9G9M3K?w>70L+LSb$OzF}+u3SeUwM}tLzi}t@aW(bGxcu)}eZw#c4XW~NI5*5$qjo7X)%Q}(mxelf z>;`1u5}`QOv8Qp92fr}r%C}8WCd+GRY8su9Yf)AK?FIfZaB`(XMNzr z^gH8j(A}Z?+Oid8wg|<$ND9P-#lTClF|^YxajNgzc)Vgohk)j&JDV>orua34_%B+UVhmiDL+)7$^O)}(C?36$}aHSqBH%0^c8qu_DP ze#=35 zF&}=<>CNf6<;B__$0euO8ZXFGr4{lt3jTC+ttm~wqyidn7+wEDz4e4?eWsQYJWtVS zyQx|vWAEyGDPU1-IEUlYx@Kh(*sHsN+nUmJOZl`_Dxg*FnXU%`Q5sZ0wpv%UmoCEk z!K9{T)gHRZz3-~;@86n*yVHLw&9jeuN+dCd$JuqX*SR9w_cQy*bsEAU8maZ+1@f8bB|lYxYUlotJS7; zH)-557y(|%_(t`yaXB9J0zrkC4qX!~QWn)=UuQJ5+&N)7gTlqgOhjueHKZmdbP!{3 z$fN$P@koT&n4Wr@ge4ob3Pw13iUBbL)D3)63fKYhF-(@F^USzW^#RelkPQXo%ysXl zrJ)mK@SF1k1wb04?{?XoP9R@Id-of6RyyBenINcdzJfHoBD+Uuh$Jt#m)gVmUMT#7 zN_)ZY-4m#9ss}f~7Se)6bLwUd7-lm}tm_-voo`)U`&KE-b8j>~9bI`0VE#M~fgjp|cNY8Q39`ky6K1VAf;bgIUa5wzEET#vB-JUwrmt*KnE`qxW zJ>@z-g*StNb|*vGH0o+YP@ka1v&)+sQ=WmWXJ>QHF02nHypz@C&1ovGKdTOyaH z#w~cq{UPCe;i{~5cX1q*2)WD(DQrFUAaam(f0nMVwRlXMHI(^Id>*F0Z-pab?7^S{ zOv+3w!f5~G&^H^r(m|@Ae>QL_o=uRm9WEjb5CQ zah)-CDfpLx+&M{j)L6O1!L!k>>F+MfJ(M8Ycz9|wh|DN&z6el}_FS;44Uw0eECA|4C?mq_)S?mn( zMb05wsW$!hZcV?{GrRx0U&HWyv;yy6p(x;$bH78PAOYi=>1A3?Ne$R89zl==P{)>y zUzuM@89y`YP>T~$|Gx1}Q;hyynG1g36h9WQ@bm)y41XyiF0LL%Ju5y1%&{Am+0D?TrzrNv!S_w^`GgCb?\O+T(nZb%<8QJg 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 XTDGpiTBX~>gMD~k{$8fUlh^+bJ$A#D literal 0 HcmV?d00001 diff --git a/_docs/master/questions/images/multiple-values.png b/_docs/master/questions/images/multiple-values.png new file mode 100644 index 0000000000000000000000000000000000000000..604c5ed4b10345a75bbdf2acc9e36ddd0fcc2b44 GIT binary patch literal 425001 zcmb?@1z20l)+kWgBE<`o;zf&=(&Fy!?(Qyu;O_1eE$;4KC~n0ixTSc};Joz6m2=Pk z{(IheA^9?UX4alP%h#F}Lgi#cQIK9E!N9Hm+z`!6kz`#6HKzIi2X`W6$f`NG< zWiBWvCoU*RBIjUhVs2#&10xoisQO$@aS$g{Q-Ks7A>a+gIc10#A_+wR4xbx_5Cu7` zKqwPw(fow)(>aDWY7@%nxZ2vV>Q?iK!qt#ozpxqxoP(h>biQQIZTB-zM{wt3`ZYM+ z5xmm;1g71eF>xp76U>(Qsc|(aY}v`+TRH_?5*Y4mlr~=;U6N#noLn*(I{(AfVUQ(^ zd_yu}qQ>LFW2LYpbsRDbUk<4Z?$A>p`Xds|3SG?5DJ+QusVx(|Zpl|mlG#}P=cE-X z8&cRdDjQDN9rLzW#KVDC7%)c8Ji1AUJ|bva>QDWoiUflv;7mj1=zQmi4OZLQ-U@_( z`K^$x*V3Kxc{uMmGe$bi3((9@uTurpuqC}opNDNvYCS|eG7~0o5UtE#s{=+9}b^&Y-C*z+(F8F+@23ZG^-!KUTbysh>>(;1GjXMb|1 z*ip9nJpVyeSO!isKib?h)b+_tilV-X2j*9$kSEArLu1h``3T;QhawYKiPMj4h@dVG zysRElqa#fUB`1ZY@hqbg#3A6+>!g+CdBq9%AUP6F(3N~zyCJCD+)addb^p+#Rz(yW z5dW@-EG|0wRfI4#(hG&&sCePH05 zdGimQiAr+3QxXg=zlbYhq7!}Wu2&BF%9oGsUNQH5b|hF#UDVG^jV7Mchw^{rGoWTl zF$>1u=xAakf~|b0YFV>da(owMdl}Fl0O)?wtt{|-eaFZ?)+!}=lkfR78qt944dnVu z`R4+BBA;76=b{K^d%?Ak)@~qM6LIuXY@tsn^v2Y!B$m~sgccw z5h`qa#)cGm_o9s9fR1HRr|~*WI=I!1DYwV!$F#??ls&I=cCUw$V>yL61S!WxhD`0( zqDT!+$l(fO>2OVPSz!`xqxa4(ISRaW`BTbQo1S{ZtU2aYRvtInYRzN7c%ArU1^BPB zX|gP7OvA7_%4Nr37qMvpNxK-I6Lxq$>w;H<(R>w+Y!`f+&Wix2PlEK--{>8pTh`OL z<`+^=YP&q-UPydFs=`t78P&rtddBPTnGO5F-*D|E8ybUO=^Bd`cg7m~cUapmRPg*_ z2q^j_&qCfB1hSDZAmE<}`^6xTexeqs0Gp?(BE!gh+>Pb{~i`LQHZLCj^{GTVBwMmVR3{<92(&9jznG z`3-Ew`0U-sh|pC1s8{%#2J&i1Nxp+s>}rTALCX5hYFHj)$huI;S z5zr{~CRV(T)UC^fDK$kpU0h3INo+}wOTvnZhx{^5jQmO5lfmGZ!W;3Y;=OqndCPfZ zd6IcDlkPRI7ZMHxP$>&zD7M}>-~n;3-(6!~BVJ<(#~TQrDbp0CkbH)g>- zLusyQ`P>}29@oNlil^c}#+Qlil~#~XwNG`1ecVK`;B@uG`mWJ_!rookRKZkkY59Ih zS`nvqqXHzx<~f$31~YI(YsX=SXXoRND7PVZRHm41s7}TTMZ3!l+4=p2@D0U{`+4P_ z_Xj;Zc)YDwWgpDmHCcw>FXH#Tl3`vla-FPl4;Vu@#_+?SAiIogG7fmXfZzLi^uwab zw8gZgl>vbP-A5f;kEJG1fcb`PoOMm#R+V`2+n(t;C99Uc^N?NUB!=*wA>+hanJTxD zh!KI&mnNE{iz7U#pcJYU+|*;HPD}oJJxwFEvTC#H@6{jb2~63CYi3WAuzSO-6OHS~ z_UdLhE%Eos_l0LsW@W9v0Q^IS#oSAqOZCgd zOI!lE=Pu8ydqjdSV*_F{$tcK5MRZ)0T(;P7*k(CaTnspb*|6C^vbDc5W~VWp9+EE< z^>hX}jybO!dAQeIey^Gk&P@~Pbf|X0Xi{p?!V|>D;xai(>0@HlCe#wHNYk=yVp{5J zrgyNkzuh=mXK<`^JU*>D7dx9@v(G5+i85g{&N?A?edaoLVRd=8wtbX%TtB|gXe)Y5 zaIC!|+rJor9l6YN`8m27ZPm0?Hkfgkb<`!?HaIJlc(roq*tavV^P6|@BUTh4Ra$M@ z*_$qQJ{&ueHNv@Y&NTNA=*TY+=@6}uCs8F3N)TFbt%%a`wD6a(HgMiEZ<$e(e&BL4 z{_dQ~B->TGeh~l+7)9m8s30Q3)xmfm>E;o@nfQQ8h|6Mg(Zm_65*s%VM2+4Xu0iO` zx=86}ac;}>HRXHCP)dJwuAymfW|ZMq=_n93goTI13wU=34}upKkbJ|<^s$=qL|Z{` zvLr9+B)4yz$eU;3oqGCGihzW;)I#heC#hNYB4S3dO>uAW9Oa@^I?u@gd5?H=JgRho z?2hb8mWY_71Ss(`mAJQZ15$7{$(jd2X!3LR0}FVszt&G45UrCqC-0#$RPLLS${LwT z)mHaXH&$OZsAv+nd(Zj7-SM(Dy(m3{-LqM|+5L0?XbyZ%u^2}%82Xk{u|U>5nL{i* zpHQ*Apdw?D3_1BQhU_%-w9kX^DtEP{O8G9kNq0?CPW^|M#zx)!RDFSDLE~6eR<%)I zeD_*+mdOV5Q)W$*)X`78`wv!Q2jz}2?7NN{I~pU}Y>kdO18sZP)7R{0-i!_m8p`J; z{F8nKfqlqedXFo?0krzw*S$3x`{8Z4);bZ4IE*%$?@b18D0C$QD8LdKlEV_bjM#MC zkj?MJ!`=s)N!4Z6&9|r0v>~+Qv=!y&n(FNmmdfiT!KMA>6}mkdiZwf{`VKW=n(Tsk&;51H zYmV3P_#m_(LM!uA8;&1oQ?{IGqn~Kec8N5+QrukE*E`4pMctw$q5;IiT$feG4#S6= zo6)-L7>+rIMpuK(g?_Sxyrb-%TM^@_JGDBdXqkptmTbpf9UU{}7hT6Toy2C2wxykG z_McC3z`X^R)rY~1*V-Ha_8+Ikv~9HDN)a9F&Lq3TzKiL7Le>D*%$1S$>r<64<+6?7 zWzwa$&85J`gUpHc65fM{`Kk34`|n;Q| z7niV?oKF@4Of$yw$9bJ`AB!)*LAVW!UiZU~m9v>A+!>6YG`}2ye_Aj@4Xa{J8yp*0Er{;^Mli*WEfbOS`An*36kaHCPC*PbaUQEN;q%0@U2p>D7YC3@6vKO;=RC-A2`&?+FyQL>Sl5J3k1Vp z97Ds4Bx5yk6KQD}8fY5<<|!;D%oAt}7WxMR`x@ryFKrkY30VApv=v~ff13jb0~2fx z1OM9`4e0mJR}Az6h5qgPNn8-jbLbT&^b?Q`_xo(*hU_Q5x1T`+9vB#YML}_K=(nPw zgR!xVqnWJ}b)3W`v;)yjOx+O%28ZJ32Uc8x{09sS+=981nv6W_&~P%M>R|?l)@EawLMb4#p%b z4DT4;z2QM3AtB*%Ff!p#5EA(f9D2q5#>~mdj)RfW#l?leg_*(D!IY7Sot>TW-FwFO z@9Cj4=pBJJPWrC&HjZS!-sJcD2pKyXI+)uzncLcs{JgKefvvL>_nS9A7y8HR*XJ~L zHUH;IHjck-3%WtZpCgP+4DT5K49v;g{5>Jzmbu^fD^@kdw#2Ot>GnBKlply%PF(*feL`h8AS-u zfx*XZf%TVuKIJZofE^Pfgh2wk%54kGU6`oY3wtwmUp+FCruxXt$yv&MEY*y)z+M>0 z4@b`T7vFX|m~82>HaE&-lsjz)#GJza2LG8vj^|}!6)GkP?B9J;Gr%H&!X=}&#eCrZ z=379(r~5KS&xqnL@Af~i(@Vjp?`}U>O@J5!^Y`9-VhD2cM3@m}0e^RUV%bgb)K-iP z>`7#Q8|w&&P^=63#U}pU?ZF_vOoj|G7!-(@Ni-wn*{s`jQW zwWz<1brNzY*3l3}R0RG_1pZ%kE2jnbvH>@lU^w<~G8GJBKmZi$q+bRk{-(@8!NVk> zVzUuv$o}`S9)q4;#ZCT79r5qU3=}(j_K0%xI$92NqJJCf=$KHf2g8%mlKyS6`Twe{ zvJJ#6^ncM+c0?G|suk%8bGS)2(f?4^axlJAg~BrX-i7CZ6#jpikH=V`B0kPy-vGs+ zTnRi)0wd%0u;QprNsK!CFXZ7%CG!c@Gcia>h*vC>86H$D99nwCPVyJI!1pW-%86je ziT?3VUgFC(2s{-@Fb%f~<)tAWl}QNPXEu@@Vye%ncW)y9od9wutshFXg>UMk2K3;bU&JI3zYgST6N_R+v#45&N*`xbt+eAM)C z+mfXQvywl#)HIy0*JAaDd<7ta`-&p%cXJEv@wdmEFcNb zpyZVFr`d-hk*ySdsI+SNS^8ojqjY_mR^0FEAMbAB+<JK!=89yJ}js>x+ny{MU!HlTz5>>iq`)I;BPc>Y^;Nm#3r#nw!dq|<$K-k$0e3w}Z zEStyqWk+4jq;`ALZwChlV-K*Xw!WTh7GM?1hSM!4(c4N%COLCPvl03`-ZpvF=PCDC z+$^MW0!IeBu>T^@!D3QBg;R1$f>Tlvhdw9(QEhZtv=;0Bbx_fLM!$yGaT1R_C;XxO zM+-4mp#UWneNN#+ucoG7B}*;{ag7-*%k%2RS5s0Rtdr}|aWM~-4dyArOXeA`z7~jm z#{a?*|EY2%{Gl?C&!6ZFr9?Uw9P*s$RXuXy<-umZlt%pzJF=bJlw~vw)?Wb`1mLdd z0=fvZA`yOFcV%1&!c!6dI}!g|lgwuh)wb;)ifUvqNqijz^kl-6A z=IF`%4J%zhF`ukN@H)SK@_&-y|JJkihMZ6TR@n6$yAfuS8bX(Eg9lJ&haqWm)c#lT zc^M7ELwk}s_}?PrABw=&QQRkN+)+Hs8cMoAPd!! z7VtyKV2X&75|CB)2iyJKY8Ro4QyL6T-u7Doo50$9Cfa8nZ>KSPLI7$+ z@seUN3#k~hmFA#SR549SNU~QpvI0}jt;AJ6IEvI*O|bLz0=2=;v zc_70#_Ul)FP$ol^P_hm0*l!p8Vc>td6p+d$k>~v6kATA{L?Z8||MjHcN9yA@6LoAO zcXc04>i)2s!|JO3qlLmFG>-MI(R%@{;B3#K5~sp_^z2{-kEk1YD!4lfLjriQBuc>>5eqvd_s?|F|>>F_dWFC&8^h2f8Hn_8T(%RErEpiX;WKDfa)D zsL}TgMit!J1-?rH`P_Tm4fs&hVxf+k~ZUeTWCY4ELOe?i>VsBegw7ZpEFRJod z+r_h}FSW9P6)3j%UDa2F#8Z61R1l<Y8?rO?0Yshro%0Pr>U(QIaov24u;Q0}tNz`oLJE3%?MdeM6csY`h-j67hSsjj zFn$tFPE7{~nNQi#Cry0jw`*h!aA~Da)$vCu3 zW4(>gBJA>_zWJ@pqs<;Z*{G%Nt7yBYo0TdBk_I=3yEAkGH+3O)eP6JNeMdw4rw6Ge z8ICn_)x;z;I@BU-(Em(zb_w%$(GQ&?HMWCbFb90^a$vCaV$jRngewM~+1LPVP8!?^ zf&MeTo-1u)w8ODkFilOHA{kh`t}6)9^sIs#0?jHkEW{vonmp}5v4_O04>*m? zZO(RR=7L~xSwQ)BD*2wpbOA}NfbxT#nUb+{UkXYLpy)J(i#d%T*P+nztcx^BS2 z&{2N0f2aZEf62JgH3%KRJ|N?Ka`H{d#tRvy8EO7Y|}tcUmpk~QLQGzt}a@`7(l z)4dJHcz_z01V5zNx=z>t-H(~yJ$OX27{ud`SxrANR7CR9$j{J-f!vhG!3G@-vfyKLV9%t{EQy%-aQB{>>9bX_xCJS2T8#y^O)jPiHwz2sl)*sc#N;lnN zpif)OGPUi2McfHChYdP(?PG^#t#ykIjqWUShs~y-7fxQ!+;l;AEBTcj>nldJo=oXk zu+PVY{+*(*mBu0(%fdm$@eaD@Q)o}WXCjbmTh7_W>++nSH3RQn;jx;?b$Lk9 zX~P9a8x00YbBI3zD1SK$u=tk*GmF} z;Z~XiB-RZrX|P%*MK2*kN*g!gL4Ksys1cy_By zvMy1qPWD08N=%xY`nZjkp95edc84h?x00Qp&ut8A8@!oYs-=Y zr~_5nM!%=97?;<-;w_*Uic07Lvr>-pd$hZaV_YvQql{TXE;rI~^Obkvdy8wRE}H5} zb(Io+p`t;h_jP*3!asumjR z3d6t+n`XLyG*fR}o1;Cd3#7JdB!^@4d^2yt&km-tK-1dnP5rbA+@tVw#MZ)t22=>H zm61pL1=gz>{p~goM`-Nw2PY&Zxr-gUK~V2Ou-Itn>YK6SIvPm7g=5jeMBwqUC`48(497d|Y?t@68Cnr#;O4Nv$A?;W?$;sJKd^0<+~@ z&d+~3jZdpgG#Pz;Yh13wtw2>W&EmH!oz^%Qp?+p`=e&7$nqaiaXQ3e;R$CU_)%DO0 z-wl9I3dCqAB$RR)^9NXK>;(jM9f2|n7(zy;d)RC2ERUvi-9ARgv_79paxiuC&R-F@ za{<(pEqZ>iNZki`E8OvdWXX* z4go9aQYV-{GSbLSr3!xR^sqEP%fV!`9@=}6T0^7#)1#}-$b~bx0Y?~lx@|F;W2*`i z;i*&U5mDkub?M++%V=?e8m&#nRMYy52N9&Qm{e)IXze0ivkQqtzQS~+Qv8F!k4eIT zl}78GZ;75uBvuUpg%0NziUlRl9Ns%@r=y326j6G*yTqX$ei}w*^wtwP`aZB@-Dvbhdga0XU{Jj$uTk1wctBFfZ+7Q)+U-{ijL!1 zI7_)Eg3jlN>1qGZWk)%cr5zlHtk#oq%Zr=a{fYZqEv1a{CCa5+!^RUE*gK)r10U@8 zjy=wF%s5puG0JjRXG&FK@NfIrasYXWs)4sDV-rzTgyyYi1cg#A8=$%C~ASI%#I+03`kX!!!Hos{6`e{s^0phg_&ezhgKQw(bvGTF#L! zQ>;=~iW|{IhfTM<^q{3?gy2R&l?npg`p^+}g{C~`Dc_O|7!WhS`>whhAMie0y1zl1 z_Nabtw%2$ak?(3H2dL=z@vR5x&L46SY=!V+#Z{hAMbPZze$98TC_+w# z)=P4UyA|@Yun@VzZz9h5j)k+BD$NR+NLb2j?ZQtN5^0qcOgB&!J_`VS$*#L8N-5YW zq&4cT=(Ovtj8)Z}5*XDRWFUnSMn)gar%7a5%rcR%X|{^JCni5SYzQ@Qtcw(*FHyZ1 z9pa!&YdlJl)&$_m>+dH?M~E#gi)4l&iLn7s^Xyqxt7-W!DUNWP%5!zUd-sL`Zy9IHi0}!5w|Q;sN(LvGTD0#cyrAAv#yx=I z?X}N=N-~7|Bs4A+DD;}8C^u)RASifL@f)V+as!#pyY-E&LB&Z8_6GAAB^qU<2bQ;c zS60OD-=mdUo}!A2Nil&Xa)azA^X%_^3~P;LvUupl2a9VQUHqU*Sr*DD7Jb29LBXo^ z3r%#waOgSFgxpG1F9NB#r!Su3-vnn#&F=5Nt-ZamWMGt=CMqMcb(4{aBB#t3>+T>A zMX01iQ8FVWB%EJ(VjR9X@3rw2aUm^+ym;?Yrxj2(U8*U%8V{`8U+Ks{kWEZTxOe#e z4I?xxY#O2}c$RsxgIpK659#=7w9xtJ^Y!a=!p+6Tsd3ULz_+&OeY3{{EYVBiZ;%qC zG1+~v#&D7}MVrP)X0MrtPxeY>ukKp>cnG;tNJVRFUd$C0tr@KQ-n*v(YMkGHi!-J* z{z2jS1Z6O9oj|S0tXaMCbAPdCs|xIyiIEY_nNSaE+x|>xZq{4hTV$Cgk=d|F`@QZa ztoXQmi$t2q25ZS;%$?&U&#eJ@$CbRdtUrYDpCX=S44tWmMi!CZYYI#BO~k*i^K=eH z7`|m!BU|z&cpkmArI`Czk#}yjP%LnjcaEjdYydQutF8GEg%bbW0tl+6klj0xWlN!V zSEx_tNbMo)@QNIoECZw{1z@(p$HwMEU>38uX}HEG0CKj9&f<&_Pq<(87G4i!4zSas zIMbmR&`4(NJsi{jSV&0OK0p0d9l!JZMVg%C8R*2&gA+pB*qRs3v6GDa{_EC=)j}FT z0P{SMOK*YiHu?rmSmp9(`x>q^?Wi#aJ{a*d}2N@<6RG_9HH1S zJ8*GJcDAE{*1xGpqTo=3;}VI2i|EVZiv%0t1C?o;WR{GaOTOupKed_YNN_e79DBpE zYS$xj+yv@SRk|RCk0q%AZ4_9wKR1`|r-(hvOC|b-SFu*%Ef^~xD z@tq3@2KIfH>qnDl+M}MPaYtR>5F+cqF)tHXDs+cFFMH(?w!>{cR-BU37GJnTxHsAKX)RGVkMI(= zW=>w;k>CFO>)UH5`x3fEz&v|FgB0*S9dDMO7prwfuDZ1|3?G%nc5IcgIQW#uH!m}+ z$@_hF5=IlK1*vsJ#r`rN-~7Fcph)JM6mqs2!vsDO?P5P~?-;x{m$J!uLwC|0XI+~7 zjg;#Sl8ayG?^~_K>>7MhWjEt4Ywx&9ig~lkFFE2t&(mmD9K@&JbcuT z4}MQ-SXQVMT;6A?^WU;U!aqjc9(ktH2zXoSgo$@Exm#Ir12q>aR`-iVgSlE1>$Dcy z3+%tU%vHOM%U`QS8)k3Hv$oVMv5=@}OtZW5j;Ud^LLEPfn*$xFY%C#_}E8ces4d-Nm2tBK%9kaZToTrs>#>Y3_A*q;5hmiIKa?g9Ya0nmTyw;-nJ;hu8`B{@NWjCiO|@?s&oV#pgHr z4O#TcyZx?U4H56VW+AHej5U|cYz2s%)8&Z8*xG-FjLhhJ{*!|OjM~nNF{%Q(%)E&r zea~XW)+7Qs@Wrw_rV%uAO2gtkh|oqVh4#{%W<|HkEY*V({JeA7j=cXO*EZ|uy~~P# zdb^1~()~<%n~C0MmVi}PKg3IygKvG649CxSIB(APC>=XA^|W?e4wej~LRpC$yyez8 z;pT*-_^M!aj=kP}u@lf(Zd&ZiCz2iM`s#OnE(P38Y>aem*Y|g8NLj^1J#$nVImW3c zd(vmK*^Wl}se1G6TkaO;I5ul=OxX81+a-fZ(lPI?^;T;@Du-v(nunmCK+m$v()R<} zqoJYY=J@2bZ_8|ySDr!EPvG{HD;(Isc8lw;GP>bg>v#JomXX@zZDw0uknuEvxh6|g z7#P)Q;zSQPT?HOaM|rMiQd)L`VdK?89!WlUds*bzM>Z~y5(RfX2#vj+Dl{*hdMdNi z`AU1vgh`Su;n8!C$5#_rb!9(?u~0a6-r3p0Uq#m|6a4LQwKi^R9`BhijlgZ%$5lp= zUh!O#{%7}(o5_fAL<82kwq)-fib}Aj>v>%!NnC$Mm0l)0E2cj91WOp9d)<$V=`XL( zE>O-wPM%yaE19cQ*#sT{%=Zh6mgCmq{v`4 z1Cd?|akDIIqBV-cz{6!E`wq;Xz5Uj4H%apHGSgqI*1+gC^T*C$<=7c;HDLzty|MDq z)MP*4gmvQdk~^kpIfDv%!%;B6tI<08F#WbsJ?&UP3&+W8@oXTf+|y@u%igAWobfo1 zRCAVL`1IPm|J4x1)BVqRgDnE$B+xiS@8w*X_!CbWzz-^3+(v1xeD{gTdavGF$nHU- z_IzY|dVGyh^D#s%!8cT8RVM>UGyOV@A125rt>FM5F)J6}46y#h0n++M8OslhB3A}} zr^6)?4i~exrE}KKE!EH%^~=8ZUeQXuq^57K8#t=`?rZqKiwOg#I@vN*d5D_x&e3FX zeV8BZ5CmCu=v*B+VhvB`2RbIN>-dEX{t@;;rOHPsn>L$-6}k_q_M52J8ib4M0Ud^_ zes_=yM9SL`$=jl}jx6&0yrF44UN-OZ`Bp|@(5?J4v=MB?mi_)@jV4=NCO}o)Oj<0R zwQUa4)nUr|S8mb3i=x(dzLzVHMqy;=ge*KiDOC(mp5_m_3pdxL=fq zo<{TD=ZNK8cb~%o_xfhuN1dy@X|NpUDKxW>9&LBgA~O_4O|VtEYquM;P}FrMoU`?^ z4_0&$5~{$ry?3iuPS|mbKb)@!Obz%}#h-4q+B}Ca(3p{W{$up~dXI8dRJepmhWiM+ zX@71yO}Ob>qve!TRH@!wcqRB%EcIEJz?+s`W6>?wP%a!YXWn@|!M-%# zcsx%(n)WftZuv2I^?J!O)9t3RkEzXNoMG>qSH9v{yMq)JcKhQ5Ihn~%qj^#Heqa4VBwBMw$*fMWeS@GH( zm(wJTV@DWr5qlI_mvrF^ScRM#8aieyOieLw)wA*>aGxNau2boXNjlr2%~4Uf8bXgB zX^3=7P#MefWRGno3!IV3PAfI)!v;C7;yO;3?}T@5xE^mQ9A>a{+mv55NG6xR-%WmT zkkPNqEek9C>RV?rMuQ>oV!zQ7TRztg{Y{hjrD8+PjEES{h0?gwz%-up?aJ1j_fxi- zL>0Ss#=J!@I<6dA?xd)&;KS5w!D)yvPo@z&L?L5tktMV#W-zf_aNsBK_aRw4cENQP zshqn=S*mQNZ8^Y@1#2aza!_3k1GCaR_xQHbN~Lk0Pzel2=X|WglI*mX=kY6k_K;~8 zVm6yS|J>U(mS!$2YvWoxvQL=n_EOtLgjFswgO#&mp3nJAKQs9hmR{Jc`bnH zqy87>-IGe9zoadfc&d`>%5`Tvh-{^KOteN7XA-?OJLuG#E@E~|%Pl8slz8QD(VaDp zL2ncc$Y>6nWyd?wP{ z32a8yscV?uwhpZj*`c;*B>(f$A%v%}v}?lJ*P)BmtF*I18v1Y>(h2q369t;z)KfT8 zz#F7%*eHfuU&e5yil}AQv;yYm4+A1uGJy<`-2pb)c3{}lY%{|qc6}~yAV!LN?;(I7 z5ThQ%vV?kk1+psT(8q0abk`q~txV%|o!=*(T?P|2w1b%{dRM4R!G$jAOO&wauHc?Z zinj|8a=kms`A%8f8IG6QawyE=uLK2X{e8a7k)f?@L2hdn?2{h+&3E!DcT#5edV7az zA0a-|Q7Bdbl_ds#s?$dAj(t^+)BeYS+~U(=bfYJo(XIO>Wd#;kE03BnOH!y$eIwIc z2G1XlhbM*_hPngpf{r6yI^TiNZ5map&)QvdHV>fwQs~nCT5VJhEBy4AfJ2nJaamsbtQJ&N*6owk z_~>N{H0~Q*_H5=8bY0mDT{Hb#5HwpHPvsd^i9WKLYhc&3`i6w0eRGx;p7j|0`?2H_ zO?bk6%L4-$SMN*^DPx5;l>G~GSSXs20!UFbD(yp$`*qkg$pG<`gi=G>Z#cTJeRLAie6^t)Cz0Lu^ ztrM_uR?7of$AqC#;Nd*O*wwqY>nTWP)>T@ zdp~ElGuua9j-uoP-WUegMOdxXbp-EmLe;dpyJ&bmk}uoyHo|=rq*JY`s=Euhj(lG( z?66~c*a^l!X^mE_-IqBHPm^t$Tt!8dlhbV4XvT>NN!U6!PGe8U+_MJjb{+2n4mp*$ zB7KV56ezsE&|?TDc_^F5TOU7n5X-fVWrj}tCzRf1pJ?M@t;twz3a-D|a2OD39P7)wxaN6<9WEeNt56HmGU=F!K_yc@orjcdZ>^SW%nqF=z{fz)a+qv8m(X$ z(6fN?L;Ninx-V!bjk*ew51*rsLUt|R6XbbUw{pN>5kaQ;#?laLl)6Y!Kt&fmLO-oG3yg%cvPg&zB|jCcExN zQ$^B=io6Jd_nqQ=qf5m6KPAr8>x|^VZt>=ATqTTH6{|vjn}5U;CAg^Kvb5IIGnB?c z;%EAY`jy`sM-j;s$V2;a>*jXJ2YM*PNdyl%+tTT1j!GeghVgH8A4jhyVLp$ zpoT7Fu+WtwqLY8~xFa9WcW*V$qiq^QKg#s^s5?Dtg-d7s2Abz`X+iwlcB_TT@};OO zGYb`=BE~12Pw4{TBYygRUf0!+{LV*>?8>)RYc9jQ+>ZrJ<#onx&bC=#h;eIWU9$Tn zB|G%Q@@e_c_$OYJsHM0r&E)Ej#O|wOQ+_ZvU z&4hd`&0WXb(g;7Fjj+TKO=F4OU8t#!0{;fTON~-7CM9=kJp`*B^kSK#v7yv~Z}>|f zr`mM+=J6Ivu&axc)#_w>u}mYzUI?g5T#|##3xKIbYZvPhzF3XSEb|=Y;AqPanTx<5 z8EK?VYZG&~Cx0buaoLzDcf2ptHLGjXCfETHY=V#8(n_Y(-=}Sw?HmGH&HXr1>-Mn%9bHxD^)t*&Z(9y zezyY5ZN46eytg8>EhN)w)_?XK#nEJQJM>%; zS*^wzfAu5#p$H+p_X>>%qkCZ+&8g!=PakXE7HRJ6nF|{i-WUum9!k-t5IaEaC-$*u^73 zpBH@kk!bYm4G_W)?+a$slUJ-?ZvzpvnERpGAbUvTHnJjvTqYV0K};l~Y5ME)t0m^V z2EHO4Ild5^Cr8`0O4-&Koz^YxspZ{2B5$ME#d{V-q1-|xugbwXgk5tiO?!1lY&_RT z>|El5-Yy%CU<#_JE7nx*rn$a(LCPMmhY$ijv}%*sL*<3$g6KCI>v8~{U(v0aZdcl5 zu%XdQd52<;1t#txRt}l<^2%CPbh&f-ii^4^{c%*n2!ZL8C&BswYVge&MTZXX8^%`a zExf7sf#ILa79TZ2Q-&{TMZiD}8-|#Z`931~Qr#`obzp=|mpnSdynT|9%tCx>&`w=x zn$^M^joj84sRw6h>pc#!Mi}V_40CS~M4Tf}Ht>?{=#LpfR|k1@ZeD+TgPUGyz3*!}&@$ww&*5IQn2f3) zSmBy%_baDCQ%BUy7HXZ{FXB7r0L)>sPs86#}( zz2`Z;#jXK@Yzi-OZxGVwRv(s{GB`tFRb)yXn9sgp^v@8elkEHX%+q$D$}N!t1HZ4Y z15IoDi!`q+|Ns~4kXegs^i#XEfD?o?34BMFE0$)8p%3zn`&qkTa6+)V7k7SjlHW+*cQB>~p~#iF%-;R^os zPvrp?pN^3qZJe*XAoqx0YF^9JRs@N26i`Ouzt#tY<47AV-;C~Qbu6>xwjzVSW1+0k zMA;#)+P7C(vzW=vX_Jq0Trz4_FR~47R$J+)p105(1<|^DO+YKNigkHqFfrq{T90wX zJ3F}34?r{aUb;EQXubZ=FPtZlYbToxHH(SxK4*Cc8-M9G?lWFa0zs=t2&5qQuf|_~V&-P(aCNTS9bN>-}rl4@k49UN3ym3H+SDno24dFYY<*R-o>4rwJoyO)kf# zWFA7;xlIKN8axLwddo~ResBYy;)m`AVl_|^j9?p@g42_DrDO&a88ORJ?h{rR$xAJP zp3d~LLj%^iGD;MoMRB*m-9Cu{Z1!0W)f40_KLW51YzcBbxqA$CNt@^0ECX)6y-bY3 z?`?EDOFRnc&`S10zu>-9>tQ6tWu4Q57P-ko<> zT??INR<5)?wFWiBRF;J-9;TFMdkoR6V)Z;hoVAA59_0XTAvT(0VIZhIzk^tUaQ0|v za{v)f^~X8g$F9a?A05BRj8y?WDAuozu-e@#Bj=+nt*Y$i6lcd|At{a4tJ^CtTA~Wc znTHsB_hQ#4D^;mdD?cIPJAxULK{f=I5pS$DyoPN%&+vj4xawy{sx*^X0B2>4pgM~j z%GC9nydPvTAW!FrU*sDG)@-Olk)HfK8sQc4`(NuIvjtmmK7HsR@2Mw*y8vf;eM_TX zwNBty$5%W4HU=T=Ezm}g^v3=M{AL(3B>LjeQfJtEiR963o2SQovOtjr?g;aF2f z^2?_-Ev(inl=!U0W;c34NQKN4+PzbFsiyE>d(B{M){1ar6B2Tc!PD9G0sCLExvHV1 zj9U8kojlw|_d)dUZ66GZF$gK<`=+o_^9lxW;|uX&-LS}#CD5xV&}SK z9CL@{?8coK)6Wm}csLmdr*&5z&EhZ`H=|uH(Hze@b*&`$;g5K1u9dbAy5sps;<9+o zILV?`s~w|x)bnB&&^~kKDD;MjNZGLX-6hAyzNJ;ENc{TsC0S5E^d~}BB*I9E1VlR0 zL~V~$CN%;%M4)mI;1h0?zNqsMG4q~6u`XkUoHI5Bme3*d+|5Hsw8N%*|A3E5Y+%J3 z%AA~~NnVwe+jXDKX|M0|;@2|TohK!QIVYOV-pJ0Rq6fSQv}=8ru;VO~ZT2-WtE$V+ zgo+aYefX1xqpgUg+njE;8TVVYxWkdMc!zV>BU44E`n8-J>g4bTSZA$ZPOrdI9ox$s z$j)BoM`Q5AX3cF^>bO$-h?V%rdqydhS0!UNs(?y;N~V|Xmm7%)JthZ&b(>`hHUULM|wn4DJ3uO%CQ{l+8Aa&=mo9e}^SuDp%b=_$u^ zn&`rXIZ8?1kzby+Z?*bt{nj>SK1J)ZarWuO3~Ad3gPTU=`x5I7 zdn;c2{%11Vm2EuyJB(Ko7zK+m%2S(J8J;yl@dQys7mxlg0>CU`oE-(yd&A-0?ou6@ z9I_o#c>U%y&l+I)AG}vnvSsnv%qamv-*JhXbT`{XBk-BUT3oCxYoBY0h+^wh;Z?y= zCb7fW_;y1_J-@=-Rcq+0B~Q_WMjH>cmf?@dC_7o3H8&9!>Mr^NC&qCidd zcZrkjnqR!@s;;XKmWnf$>_M(T@csDK+2GU&a&*=3;7O>(dV<&7A*;mp5RWP_p;)aL z6Ngep1G`H42c2vSWt5UqtgC&lC`9J{b?Gh#a62UI2QHreEve^YrB?fj68lx$24U`l zr#n&<3gz>=D!pQ8eOIZR=W>vA!AgZT2Lk+#@0+*4PN};){Dn5-*0C2nD(UMmu5>q*NoN<0-@Rw_u zK`77;CRN|_b6r@#(%F;%0Y|peq#HKo%S}vI^>w|fJN)6URKQmik_9sbK6O2 zGUI%2Cd8-5`Tx*q{xigr*g)Vaaf=WvUmpz@nmfdgp3Qxo!&h&uR#p`g&!X$^E1!@@pH7TAmqocMuoKPA zbI)zztDF~p#)%cXlrOk7%e+zsJus8`<>O$3w{4pAgz;*@J_{+eaMoh$1_4-6J4bF@ zrcdnkiDe?Tp)U#%6~~Vx9w2G@Q(*mHUXKheJGKb5d8A`$HW9J*l8do+Ey)=XOZF^l z{nho?W)$EUHgR4j1wqvgtjd#4@*`~i=OZ?urCMz}738@M+HS z{EG`*69fe1L@dnIQngt4^darPEMBEu=hrA4iq*0eU5{saX5KTJP(W8TgP_G2Aj@9r zPnI$BW019RM9jn%!{f;wcZA`Ch+AN%3Vti0cOBR{9>M0lx&>Ouv1t#j>@|#?}C_ojzX_h!yIa;dVrkcTAJx|jSfbD z^s^bNIy#UptN-|RsI9O1W;v@?PknsuZlHX_4yJX6%3Ol%s4AAx+`jbqyIv3vu-P}gZS7Z@#{mqOHU#jBi^f3o~EdhIFJNBcsF$}UFB3A zVf4h#>!tJy*QdS36H%VJ>hYJlY=O$#LHS*$_M*X-l=jYXscPdsFqw2`^Wi?>+gpavt+AcD)ZOLVs(<>K-@zy6Io*P)krtYJSeo%>jveF){Ms5v z4Ry$dL1oMB!?U@DzCv?KZDZ51->5D}^!*K}{Z?=$T1=w;X!&;i>YZPaLOm_N3Lh<*Q_6jNd$KC_Zk3=-nXo>k!K)LAac>=ZxJXwI;2 zGg%XOhQ$o2_}~wZX9SsPSUbeqj#hXVVdiH{OL^OFk$m^wUAmlZxddkA5hNf1BbIG> zj>~`;sXRbIi>3XwPz<#_lcUl5MwIhiT#bl3tKC(c-55=hU8!$RS_1Kes$2DfaNk~Lu z-(r4Ck6aLW;`VhfQanzS$R_F1sW2*R`#n)Glsr3JX3br_b52L%qx`^%i0(N%2$YoD zyV8wR%(hPt0^!|~c(qEqSsg+5^x)AOYX&9bBRx#_zrN;B$D0Ffi=bY=Ut)GzWb@`~ zo$I~M9Ua1DuSEsCW4W%a{&Mzug68ubq*2|{mmXV>#9i1auN|ZcYf|Uz=vg=o3QVN$ zLemOsricnq&iVEL%9lziF!*ALH{?xq<{XH2koaQY;)uPzYciX(# zw5?H(92K1!<`?inEIH$#CSZu2{E|wx4y)GB@hS41u$kB5cgY`gb}^* zT|18Ig;T-g>^Ys#A0D@PD?+~nVAIo>Yedr_$(2NC{Xo#_LUa=um!V*HNb?h~y~+NY z^uN4pgNUf$HVB)@hcC{iIJJSfnK}?p2)02?AiVbN)x+;N8G<5Lg~EK#sOu_!ye*jR zmfP7Ay4h+#kK;wRDd@be>hc|8JOe+$_7GteDk)}gwe_*?(zjz>haYE?-;TSLs${yn z(yg_qZo>V(Sq)ajFrBQlLy8{hUJ;2$3S#|^Ys++NdzcvNY(`$~=rk)=KR8rDtzDdC z-YZG$>>A>1QlDSsco_Ho{X~vmRkkB^DV|IsmTE>(UPNYlswL#f{(x54Xb#A=VW(u_{mVne`%%l^g;UPwZcMibz3|wcDeZDjIYl}| z3Oi`(czf9Lv}@uMvZijW#xd{=X_IzKh2GEH0m2;YHCiDT@kiNu}$cWz|F)i+jW}&Y%-dUQ>H{&BRYOJ`&FVthO<0&%9U*FPOBF0}c5IG*- zo^s>gdWs+)KeX_NXeM6NzYw*b%V!XImhb(sUR=qE?aht&mUMpVTX??<>_~0-({TmR zI<_s}_FxM8Eg1CZMlq(=dP1Qqnk`!~BJ4ORn=RAP@skK!WZiFP8Hx3l zK8*c+dQOf7b`VIfu9Ozi}yCF?;#?=2tSl_OibmxQ+Uziz+ySQM%0* z5rBjWNg*p)&yCH7>%1FPfdOdpDRyFc@9y{t z8>kAMRl1KA7HY2wY#=I&pb#3Cmx1{`A(84}BP4dS=nbjz}xC_BQ)+?m6f2@~cJ1 zjI@(p9mTK9IhHYlKkZIzUcW&J`g;*%T=4dYx9#MFwH$U4lr52V4xuDa)i+QvC>H7+pF`z2O z$(q=im-E<>smQt`n&e0s>rL!8x%U$`Q2h0i_+NUFPs<2<^_5|w(Gv;97;8E8C z8F$3enHkpYSC*k%iOv7mEooG>UcItW>}q|yf89MTKhbBZciUY0cHYX|5kgpW@6xI- z-s+bxbL4*7&NBtD-|%nnv5WrIcbz@AMy4c@XZ7cJ%iAFMA-LIgdl z0WQ>&IgH30zMFjgdiZy3bm^vNlWnlhlj`Z;O79iYsdnG;h4cQQ>fUp3%wKvKZU!rl z_@}gwKgIGgr#XHHxHQy0X{WHeF(kE)1L}KJj2G00+hqyuKaObA)AvZMt!}R-sc`Zc zi~$#RzpS+uUj?kUE%$)WIvc@H1hzwZT&wn6Va*evsHh1L^FWU~Xt+5JPLLszk^jz>w$N&-Sgh{VQIVv?@FG8GX+ z1XL$qKVLyfRt)a5ZkRHL$k&Jeayi)bBjFz8$pY#1tr9$_%D0VzoVZ!-@UFDy+DOqs_rnRyXQ) z@X!VB7mG0T08ng4Mo*6ADu{s&DlgVEs3k zl4q_Bqvx-TV3iq9FAh*!`5P%;Nkr8u?;j{Q!Y&f}wFXiET(826s0G&te~qT<%`~Bw zX7y?GZa>!J-}gHnA>!%QzmC#6d}HJTFkSy`4*;%0&<-XptwcOG@4ja6HZ284r+n^i z>EXmrFC+fXl8$~`!w%E?E^9kv4evw7v;4)C9w-wg!Avs-C0!|fwJ=;!OLw{FPiA>% z4!JV>Lk(k<498#$r=P?CSVl~dJ^)GK4h6S}s4H&7a~gS>eSXSVgP8|~-qP8`fXd zS-aKhQ<3BVbm8eQdyiR^F+S-ACREd2Z;|9G!%-ohdMz7+{p>n^?=($|i?23E;c!G6 zX@6d%vl;nHLt?`av$A4qt@~jk{~jFHZ2I6vj;hmCjd>EcO_&kI+S9HjJfjq3g?K=W z65lFoc)J|u2V8NGg8le$*G0%Fib#fACZoCmNzzi6lszr2k&71n6k%PTz)4P`}p4>I^0)0Mt61WfOC`e8TNztO0 zmhSraRRZmBqd^;byeDQag2w zzuvaXc#NjH6xk}VkR`1wc0AyCaX+~;EX9fRK%T>x&56PC;#H(5F^zFddnRy@yc?+J z^u_V8%QS-!TdfhMZSj*VeM_fo*2;qIgG_Ksa%?x(Wx+t(3O4RXry(x5%x1;yvomV& zW^GRCpkIX`4eR6>TwQD8^*yD7Mixi15&E0lM>_-Od#tQmX#s(07g1@D*HBUZ42w}B zknB808j&*55U-k^VX6JWW^z~$$t!W&4 z^I~i!N=oLTp+;|6Hhr2)$HBKPJ*j8MZa+4(I3@JjVtX(UBOc65oy%s({P}>V^wX18 zll5TJ~h8pR{MT0la@rU2Rh5heiTO99_R75m;yHS3h z%j@L5P?qAL--%&)I>ij|5HQ-y^_BQtnr%)EC3V1Q6b>X_Z@>CFZIVCzgZOC(HT=d% zy|X-wx&IHj04JSpbp-T0G=KK#opCkCHmtaG>|6n3^3>C;z&I6Rmvt-F1(7{F#D*m> zLZiD&tK+ZSJ-%FC`qqcBSf||3sIGMBWc!d=^++Jf)$+aZXhGxSS#MpByyG1+F4+sy zzB|@N(C~R{f1fec?$hAMYY`t*82deK7iGlzil=HnOV7>`$vwEFEa){--2=zigD zUi?L@WLoAFewJ-{(&mwDD*YRpbQauOXN0}Mk_JF!JcgZ4m!p7wNWrEv(-yXoq1T%V zsABoP=c?-_yGWTc#FwaZ-iaueQ#rk+`2x=H0B3|_CINz0pmJ>P-k(8cl?puSRRd_V zteJ*OJI@<1O8UG!TGz-8m9|&3u8DA6&DW7}9=szMB-oOfyK@*NGE{hy$@fI<9LvhE z(qPH4r+vrit^aQs&eIH7{b~m<;vlk}Bvzb+_R#+rxwVIrk+v~hj=ja4Qp)|yL!Csi z73TE-D^8nn=YhH|@P6=y;|5ub%Svw=k2;wx=^E(+$zQ=!EU@XOC_}ZxW5Xe5tFc-2 z9AB^86|o=Q?5z8T`jNJlnwk}a_MIgnf}E>{?DJRT2vw&3hg@Q-@N<*-ecsH{z+Wr) zLJ1A5eMYRMVBI=3$J39TLLc#=N_x-thE@CoCX%l=SZ&z2R)yfPwvH-4rw4BA?9eAH zSzryxgS)IHmKdt(nlFd#!Z{m&T#b+I=G%YAhB+kqZ(NOX2f-h|YibIFQ`I_5bfg(B z+COhwZjl6w0Bi$!`8KLr?**`ADM}bqZC_KVIZQ=8xmdx;2njv^{gA8QMqz&SmLTiG zL`nBM_n+{xk?-foS%uxR9QR2!ziyF^>sW0ZPOc}0^;#er(ak- z=jk$;Q88vj22aakfQ#o2*E_AK%?$qzf$9rwH_X7}PbckLwl*o(~( z{KuKdhG(Ev!==xE@NJ-HU3&rNMZ`V?AQC3$?Sb9i4twikn4z!8bOA#UL3oItID>KJ+9iGWYL5$;L4H}Yq`3@NRKKbV{@T7$T4zOGE zE$mc-!RnwvQS{-Gdx70mjg}@%Zj=i8=0?-*Pz2`Qis^>>J;x9@sV;4>Qw!$=S~M_;jn|vQz8UkiU-} zkwR=SOIl}#yi+Vea89BDtkE#t0wnSq=Od=sS3_Q3IoyKxSf4M}*uw>crY~m&K~TO? z#)n$~JC8a<1^PR$K@}FnO+V)vFeP4n7aU%MCwm)GMu*~OJneU`Mt}l(w^tD`XsgSP+XhgzC@Yh zYiWmTigHq^<)?XLk4jw!jNic^n0F8_fzAC)?$$vy<;q<}bp_1rzLO2}4twH>Wu~Yg zzbc$}&SA-k^r+=(tp7rsNc0A0T@IXCqW-pah840PMRWKd{xr{oV(2Q(x`UCEp-c&R z+L&fPt)&wy*8f@O`s20J>^0?UMR#<@Ur#*x#^%+|*ZGP0`)8#mhP}bRA%MGU15prdL+mDTa zA5|#HTpiSXXhaU0E-GyEbZ|$#kR~>b=E>V=U!E-0RBL4wx;*plt68cEJ`S*6QGQO9 zgM{|W02DOF;bvsYv zpUe&}XMui~XAuVx4z_Db?a+rJzm#w|xM>#`Gq27ncw5)lUYQww^Mack=ak&J*hBk? z)8ry6)4%U*9H@@=uP@w27gnbnf2I^MUdQ*5KaedO=Mg7%WV#*{uP%Q%Q{%Zh<>55Y z@LB|z6w}gSbc!c7B<5q`cF0;a0Ux8b0?bfPBq8a9U$_Jh=_G?(DTf10b6g?n#pAq`iMz^ zm?Rm=SL7Ujl8Cxwm-eybW58GXa=OU~0Rgvq=V19dcM|~n7#->JObgj80hdnmpndp3Wy%Z)fT;>aKq0 zC|T6%jyHbz!ve#USA`03!a(JYxy z@lCmK&g!M@Ys0+>ystUWvs*S!M^@$Cml88J+tPJ9EO;j_oZ@lA%}eH`gW+fE)z+WW z_{kI&>vNjV6P>#{=k8^mfa{mqX>3W|Q!iXLpX=p*_U%utz6|hxPOv0S#PDMftKju*80N7Dn@2pBi9orUbm3Jkl$MCo53R;?@|Cl6Y5t1v^D|N62XH z?rx{c_Ii%@xwUzE{nA7f$oNBC!&gOrF2As;M$@3iQHUBHqYIu|n{NZZ)#BrjpeCJR zN7mb?T_)OIRI#F1!hri?n#44MkIN^-O#U$YX9xCK2I1`4mlDfR+f7Dz%ATYY4dtWai|CEGx(NQKQbPl zx5dTA76XoaKBjV%UK@}EULj~tMN4p{`=9C1r5;S!iY7a6e??morUF4lj@#>|FH^sK z#3vGIe!F5yGevl*2jszbOLSt!;h5SnrQUL(37U261)R;173A$XCa9;BFksluyy)kf zNE{)eyiCR*f42OGmHd8!`}1gizMk)!;%!-50zLc(lx|rb)s4Gvl0l# zmGda#?ML&cs9c{yU*zWiDW%S}oM*$+Nu1ZGENzp)&y zsQn#nsI6vE%H$W=Sj$sj$qH~gp!?xkA1nWa$fyZ!tY2cN*nL_C`tGKA=e#4|T9GNU zSQR5W-yaRim3;X&{b-2YYITxOr5GIZ`VzgbfrV3$qZXtja)YhBZHss3!)T3m@@zSq zv|c)ISj@?cT$UuD#G-3HNjxjchL;0&F*@_}gHCl7+(UPcti=;>mi21JyTAsV%KpskH(?Sau!OfiNO3K6-d({ZFla zv{{lyZoo3D$#}8?&3o?cIf-uBs`q5YTnWx*1z?3Y=%d?SvaY7LlE}R~^YbpW@g+aN z*aYWy+xkmh(-wGlngIb?2N%+Rp<@{yP#YuVe^)R4^~@TvHW{A4N`13VUU097<)fUN zEh%}7IB%mnbV1(n{mp8HFCNAqA;ia~KW zcm{Os%vbzGtB9PD=W8{%C3)<(~#stgweloHz^CO;QVxY5WH%l39 z2X*@~cO4qn(d^nr?4WI=;&v`2!7D@grD0&j#)dIE7q$g(c{3SNYVHP%A)I0-A^iuQ z1C8Z=tNA(7bk6C{Een$EDu^iUL6xXV)(tU7yWmFPc*H)I95fw3X$M>}p>Zh>zmzq! z1ZFm^?!oZh2z#-i3c4E)oGO( zkEVvG0Y^PvKaGFr2I5)r?uW(K5CQuP*C~tHTFWeMUnQ1`98$b{Ei^wgG2{V*AUWl? zU(-DEL}nJpcVh3N%R@B;vwq2;_sJ5i;1{|vHxD{#%_l-5sBSLf>;OJVBWnqRr}CWG zz!aV2SWD8orcF&x&qk#`>r_&VrO`c~6o7p?8$s?PG2887Jw%dYKcCdnH>y{znvXXH zQLaR)zt>u=W%FyVI(0BRr$gM0iB8rJ;=Y$w*80;5@2VWn53G^gPkLBh5APDCx{jwN z64s^bR=$1Q3=WX+mj2Xv5bGU(w0jOnPJ`v$WQU=Y7vF{xiBjkx8HdsXgO;)wTbHX3 z6bwgUX(_+M4H0SNp`81d|lFL#1YZxx1To6pPo>kK!0d0u0GCW{{)Qohzb zA}GWJ7^GzNobwBsUx~V%b>V-sLnd1OalnKILI$okQ(su{(x8-eEoHE^8S5+ zwlz`j+*YXvp?NNun z5rN_3{p2FmjQC$ioB z2JdUI<#+%sAX^oBi&S;C1uM(NzI?EJ#xfC3GXOtDsfm%n4uhj4%GNQy%rK z^9kuh&D|!SqPZO%cz#wc@Ik)=;2f0Ow|y&eC}(woF!6EYy>gWf)Qb>Fwp6bVL{~Rt zl{TxwET5YY+al`YtB{|zC|-D7NX^Z?5oRn6vm ze#KJa5AEqo(p)B^Uv~_wh*vm&&O$R1wb_}J6FNOdiaCF72ctuzZEh3XDooYO$vDEx z!3f2HM%OVes5D6tSmh#nQ($<m z18Hl0qSb@Y;stlT)Y8~*VK@95L3YZKUc$*2GSw_%ScgcZn2egxIC}J<26eA8lQHtx z*-M&qqR}WOg*}^Ub0!ON)N7kocJT#~cEv&&Tfc=w)}2==%TTvUTS~=b`mUZeO#hIv zJ798t5XoWrd9B%6f5A6c>B=GMV9B1de6#|bDat<9&5<4xx+gNs*_}9|k}dTOKH4Iz z0ETa4m&i|_uhS95AbaV*UQC=QrUKoK7d+%J7{o~POs)P#ll|>4d~+zYjgHnQj6o93 zgy^)U9fAtOVu1+9=(hsfcLHr@VC2)70O(P9U#QL4Q24EmYDZ1V)iu{5f6=f_%iw*g zNLgRsGOaJW_aWiiTYx4EMIG#H^A@~SF=a7CKc@!3FEyuER=g{x^l;k1U*Gv;&;U9_ z`Uwds>=UMoOH93YTRBI;UZmE&VBIj|(ekaeYQCY}%H|yMbdhf*#BMS0$z{88jvX~g z&;xW;3V9v+*~CF}EjeTuQXyj&J~|*0XuxkJ@jwvq9M~-7RC;B#Wp`dpA!t_zSoMpM z7B^{WoMb&b)7%g?G?(NFC=c1K5nCe!!GURs-@ik<`~)sO+cv1KtK5*{f3>;(YlxZO zZ?kj*%ZD?;hx|AiiU(t)l5nf8$CMheD5-Jcpk|r4UPmIGjscj&n3k$@kwq+S*>KF!hkq!ZC;k#}{+@eLw7g{V&0m6oIO zFmo&+H=_<=-l)pgNSA+WDtPo=+=3xd-GLkwhW_j^GaHw6egP&}$!Xc1-(@udX}An9 zaMV1jM;({}nycOR6ES~A+tvSS zJb$+(u1XRQS)|acYSG+A*+Qx8)zG<^VL$dzHAXv{RD;V0m&j-4q=@X0Z>JtIst;AR zEV~I_vv@jzEf)G_!_VV%YyA^xxoY*5<)jz^UA z>AN2?n7L%gM5a&sTR53xJO`tyY+E9?|nCjMwGX=PMP37T~0|f1xaJCNfa~#r7 zI6*wer>^q>c;vNH1Mr&(Noj>3$)NQL_Oo;`#}fOjX9&HR^2=s4Sx`uen2jvDdAijY zxawCSkrn%NcL80aS(s0r3$+P6X0!Nsa7HN*C{_X4-@A2!I}+MH`MxK*QU5a&;IWPy zq4PiTN6{jzQ`QD(Gep-v1g5Tg2F@K=eB-=mT3Uk}?O>WKT3+<_mX@WNHI)x-KS-_s zFavE{46=-2Beg!UC*q?#HfLF08yYkfEiO5R4ZfLH*Y#OQC=Rj$EQ{t^8ir^a={lVx zTaO5MU*~&&wtpZOWto0M|Jl_G>*;D-_HzOr)*J6{z?Z_j@nMe9me39>s@G&;WgXx| zjJO~&06hoR>@m|+qu(00kIGfB$?&EL15X>{7AuD&M@Zn`tD-~QmGt0@i~AY< zrgx;^^HDD&_4Yth%i8Um!~vR)aWr82*zn%yZ$*eGyqBq~Yeex`lai4x?Df&Mh1DZn6%)9 zAwJx_9Q^b$F0*EHQ-6B*RNHIBa7$>7%IBx;uR8vwcZ=(MbKIIcy3=YxnT!NJ-cm{S z1{s;KovWNhON}wDSsT42`u?K(jVj)N%PwF^prP(W*iu)QLRz74huZ`QvL$^Qn3g{| zd+Fe`i#^(2WY2%M`}Ni#PDHS8jkDgMz)Q2qbNkmd5(+ZqUj{{U6@xo14n-kI%DSuD z+~Xr7Z2P**_}_O=U$GO_$`v5%bfrcD563nu9bsfX^5($!*ZOk@1~dDT>gq(lKJ{<1 zv^4LoDP}OA=;gcj=+T|}px?Q;TqU(srHZJy{D`%;cFJf%ds|F<73F_Ri~b`^`gMtl zta@huQs%8NMdA)85pbHbp{a@C8Ru}CZXH>0M?8)V<2)&~t#q`T6=3=4i_d7TFqf$M zIFcWi%!Jjo7+QzX$?P4=48%8~4_KIDVj>bAGDPBT9n|6}R-xKA{nve9qFM=jlI)75 zN`?9N49v!O2Li1a83$!uwJlQ7bI}|rn5iRqEKFVdaoU>hs{MoKkCkiQH~B!%R})-L zK2PtJH3)!VwR7sR`jD|VW3V$cEcranymgj&2YQj5(sQF9Hj1s_+u$A+}WA2w1494#faqD z=H2_^BVbIEz3^Rt#sM_Dwzk>Z*XB*!*?~;Uy#1JJ-vM4_|0&42@#413{$-5@P}OtX zqQTx^9Vo-Ei>iNs4SllUxGV#^c)8Kz`Np`bvxVZC&Sl(uBa2nOhvaz0z67Ra;2jl& z!4AR4Hc!OPV5yv9+`|5(tHT)q(h@e4{nnFjArnept+fuwVlKXIS7Z@%{V$q5ad1;H z@_(hi|44U(-UPhC1Z}!pajWD@987@wUDPnTOh)(hmM;IwVfbl=cma17zJx73$C_PK zwk02(&Zb|}b6>fe;yLZcEPl7|CVNDpj&cY#OX@7R`8BLLOWfcg`gpLtf@;rnwOi+L zn(dXALN#W`kk&(V6ZYc3Gq19!W@u^j8_Xx)2jdj{bQiJ`<#B88F|R;;q_pM_?F+oL zZ<Mx5j2{QYU|BLXEVKxdgPK7NFuv_jc~ zm3=JsH#c#Zmx5|RdY|A=k4FGCy7e(pODA&o@8NR;SRG6=lkw- z;>P`l)5SmjNq;F&mqB$he0~UwUf;CGxPtqxFubcnPBj^(NV_*lZG95tFLer@;fZ9u zj|Q!4{LqS&&nXAu8u`X6h+X|cl%NiO7H3TkX4+FTHBFKiX3Mx=cFl5Sr-C*UAOWxP zMr5{+j*jwPzrGN?B9$@X56_ZvjXP|#SXtSdm%qSlE_M{VR%}!}ARH&H0U689e&jCm zpz%$Sdqq#s6NEs+q>O}}^_|@jjp&oWC%kjV$$v>S%L13bG%&6=Cn2r8Dq4>vFfksq@5SuEqp(q0n$yG3L z1*(rnox|CXMjji&;GCn>h!^_pk+xR9j!RSYG~4}hr1bhTfzj`oDx zjB07^g&Bq%?m|3nYQmFr?2X)xhIGgATD5y^rg5PiF*#txjyt@1J={xx0Q#RNwL4)V;+6-y- zc|;7MT?8whBjf5V^c7{YR2~v0>3>wS*Z^MjGn`xXRC~@{TYK0dniO9+)JF-i-EnP~ zuBdl8d9Fma0s8bgD3{xUUiR0W;jwqn=IT&nZ3%SlC>17I18$w6sH2boz* zBYAp(it*<&fM6kmIz!k51f&<{x3uO$96<;70HvJ3$5@v={k^rfSw#*CzCc8=ahzud z&Posjuv+uks3h;<)h*X`v7)3DqO(cLIc{Dj#X{BJ$1wnrj&oJU1hgjs-smiwWt6RQ z4rn@x_C4a0i39uNO;0vq7j0TAbG5lC-Gd(5NB%pVfS3N-F&r}7L$LAR->K#-PvZKP zf4(hf^biyQxcU-GWrzeP+E?wJS$CQP6&ybtPttKbg%hfLPqr@ZD@A8|V8+rY&r=A~ zf?3~&WR4lU%$8{3LsdtGYa6KNj+;)#aA9H!s5(#VPrnfU<^Z56u{D`Pi+*pz#1b-v zk^ihD@{dmIZv~Uq8}&P>_g$uf6Qq#O7>>q?m4bqt<1f2T)(uR%lO?FE<5}Ft!R<#6 z4(5zh#9@_Fh@BV4($i!|bnN0Q5`)Aa$j)op>(cIFP2fJc()rUBXKHP81eMl38f=u-Uhg!hH zhmT|3AJhGKuN*GrvQf*2k7 zZSUN#euJgToqo8XL_g0nLeJW=fiXU~G$vEE%-=oYFe4AYG4NFXkzd>iDm)^hink3a zLuq1XRPoro)CxUjRwYG3@#*%|($PUmX6OutLu7Wx=n!-i`Sqye#i45F(F^wmrpH7R zQux)v-N1vd%Hz&4@He znjmSIUp!;~tlXe*zh<>`^JQoDdRs7f!1H*fLjoAme zDyns*T7Mq);1eicziETmy@+Yq7Y~Cua1x7OQqdJCq749}da~Sg9%t~;`7N|ZX94Hb z9PjR4tF>J}TipUb0Wg$pjvv|sjP84z1%Z#Iu!wp;4!5+~bY<6bY1=D{bGVVA?B~xU@JdXYs8xECK#P4&zmbuV%R31>e=QF& zd6S$<#)tm*y6NAY#I>3L?d2Ai6JNeOyBPDcsn};;qf9=NYtYbo29<?1t9`5F5AMFI+l$4EDo&7MGXerggG)^6v5U;y6yfYqc5%ZSSa*a-u(cp5g=R znvm@9YkxZ!j;$z-wsk*UdEf@!EP1&XTs(f()|Uoc%bgf6WCDAZ8}UZmHd^#6;!smk z2sSWX@4G#iD3e;U1&_|UUVa0MQcRO=tbm=IGDdUN8dZl~?7tAIQ`zg?G9Z>h_oHPU z$d;7=9gV)5!WQ;I+N;tdX<+Ei3 z4)jN;UQVr_FqEMIU-bAM9X!YIT+PdW(6^ZoQC3;4J%RYOxa4oRrH@9oquu6Qm}Ao( zU09abY>iP0ua~thkE~K&VyS_xRcw{NL1vy`J#}55hJjCrAqD*V;9~>f+JIy!taSnun3!cr9c2Q8JexB!Mw<<)@{2hZs(&vSv1p=gv{br0E$l>Z=R zXb-d6LshjpB}~lFq65fB(5wL!q!VhFLPtvl+WOf8G6BC2O1M4bh#49A8?N5xi%Q5E zItRCFrpWfBS8^YIm@y0ehc_73%PwftUj?~9%sN}qwK`S97gu@z)L#Epnn$jk-S|UF zIXyA>rnfVzAswpUJW?K?hUW_}cxnK){xRes6X z~^Nz~w)F z&ZK*Obq7^fkKVs?rveN-^128ORTOuv7%mwuPnc*QP@w?X!%i{ik8^L?Q<7t5LGeWR znU*%>aP<>Q-QdQ;$<-y-^&v0Xap!a9G#R9D$`Dp>{{(?e`Myln^9oy(i5((LtWuJ$ zQHS@pypGFASj7#MaHzomHYHpALxxS$04c64eq%F%NBl{nqi?=GNhyn6eL&T=-IAyK zr#?cT{lVvn<_5!MGC8^Is+<>#i%UVLVTP~L9|rwZe%W*+<>lo+U_#da+WT?^{CY<} z{0^dRfzWwaS6|PR^29+?HtZHV<3_cP#iF@KFa*R(Fj@K~o5?&>mHv2JdKZ8EzW{Z$+XuVwv} zY-&BuGd8R^U>fXO$uIu#5b>`}k&A+a3>g&gCW(UU$rBQ@pJwb=Q7$z-so?VB>unfX z7GhrgXQ@g*z$W&U{Sj6 z&}Dqz&8r{0){t+uasoFr=n<8E|9QHP_bGnH>G@yEb;H-K?Clfg4ZU*yHVdF}M!)nu zG@6(9fwo`uPMKN2sbs>xb=H3bNh(-rf>M61wsnkyZj3#+c9zX_`L99!#SIEuI~xb; z_h`2WqB;&DWIrkd2ZwxRlh)t^_}dpQC0BRxbT?yrV?*M9l-awPyD3L1yi|Jo@#DQa zo?*BCy7}d`WZSpBgLE{^a`}c)76d+7zS^xQ6Cbr29S6wJ#RhgT_L0}`A4p+H%~Zr+ zPtpI}DFj}=QB?5|68*;~$a2qD{wGr>GY&BE*^Lq>A(qPYxY{&L=;#1F9%FuI%a2Y5 zs@FdIDm4D(crI(QPBrV({_tcJXjaZ(XKx>Wiy^%5-z2@ieo@ieaq9X<6Sv`iJa1Tr zWZ~SEDf%<<9Wu3St-c;3JC+Wp!yV5eBu5kXU$Wz2hRf&dHeoaFGB|XV)JB;7|M+;d zUVN$bC^P&|78aZ?n?_k@`%({jz8zTnW5VKZn|mG>K-d{a=Xi{v%TFZ}|9=(yH$lnz zQv{2Mio|Pg&{;O2Ktn>bbEc>yZ=&n zp~=K`?s&WqXaD=>0F%TTCH?%f4pSZpONXsJb-a^C1F#eVWpv`qv+St+>uMA&0gr|S z^z)l1nhrAl7ZRkVx5GL*M-xkNFK!RZ8d2voWlOqV`upSmXRo;4kt_sme)0R)()*WU z{mYH@DB>4K6;;vw%_#qNCi|PJ|Bto)(;KqC$SCTrM#e?|Uq0WPTeh+pV6z?c?;rE8 z?$SRY`s~ZOdEEaqVf~}44n$E9l@P^(|9cepU%etzCOV5>4>u_OVr&2FOE!QQ5qxsH zr2l8K{%=CK%)m9p@#KxfpRDQsLjM0x_5V-x|JS?zZYf_c=_E7zzlnJN&0hbrnGb7R z=B>kNMq>V@OaAv3O~Ol`k{rh}OuKRIe{TFFJnw+&9QFSnXRJb{mri)b7Vrrph``%UO=V)%{71Z1L{j)^rX&u__$Z11ZGV@{9{Jb^*E7T zdd9!5GAXT4F~2C&o#v~FFmHe0@S3yD;FiD2+=U*C-b4latbWvcb)~Iqw7LIyTtKss zeZ}|JIbHf$UfICt@6|EiLI0~A`t9+J&xjP-yd?T}=8mf65h$K(IJTzFtv2;|iGyKq zaum1vgOMRH=EiGie7hxRLFCcOBRtEo&#rmQ(cL4)r2+yzSdR!u2VQ<)BNG6?=&pix z3EY<^77;0-8&Gp_w4|B+UI-799LgV4U6sFHM^jv0B^KA6SC}d}um2fEt1(g6#obN+ z>EEEmO60S$98u2ABAXsIKo9-b+V?wN$EX?`=8^(b%a*q1@VaKVb<*18pk}?l!y?hw zQXTMaV*jz9LNAaBrNrT z+nYREkYMqJ7k>=z8WL^)_!QReJ!FW;85WDsrTNu6sIg<-JJpUg;U|=USpr#IU0uX2 z{qH|Z$Vqlp75x#<Y^gu03b{+qL|DpKgV8MWEZ$~S1b z&XcvX0U0xHG^|Gp2!)DR%=Ll9o3_g~z7bm4p7Kds9<3GcVd_8J4t8iVsmxAEL6 zq-nd>YlDoAzrM8HXrQ;r&ttR>5hro}R?-dW9*ocG#Ho;V%y&NOb6M;MyTR$masm>Qmh5YWeEf{27kCS zTSO+=yu*j(!U)Cly&%(Xuz>r%te`p5SXM_bb`EywvkqGtK4nJ9oHtr`T~4|!^46;= z0&RB{Y8kfnO4Wc4d9XP((wUi^{?WbN{h|sfJG(slLPFiK*ZYA7Jqi}NecNt(5p_8& z)X)7ZO7N0$ioud{!Qqu&reiRk(6A-<1E;p2?*DU^UxGgxi?LAEi%)$U^1~<9O}_0d zrniJ(f*XDeKcgE?VxtlhI6R=EV5R+f;DOK2-OMpP(lQvIDK(>X4u1O5=pzyBdc!y|~ot|A_0@nLy+ISG1?Oam__cXQI1o)C&! z?$f@5#2FBMUN&}nr;SRq<59BqB5HXJ2?c94`S^Byg4vbc2^hD}^2Pl3vB)N@3XiiC)PK~@mq!}xrAAUd8ndSKkN*kxNV&3>r$QUMar zDD0L@&WoO2PymVvUnxtrZpVzfeie;V@mW3U ziDQwJOX6YLwt!F@JYR{+U7y>9@w!mZv1u_T@>8ayCAm(ZI?bv^b}@mv82H{zb|3s`W0J23oR4 zbsWhYJl{$Z2(Coix{r}jWQ(<$7wMw|NF9ac~re;g+{Y zhj7&n4SABV0;Wgd$CFe}Yrg!pTd!iL-p*>G1@CCBxt`=(NXo2fPV;ln?Tk!9?c(d$ z`;y+)t^~;1cW(sn!x`y~pgEUS;20 zw61kbn$@DFsPNfhN+{TIA>q8V26fFNl`iA~9x0IFVI=xGLTR+T{iyUgO}<6c=qP70 zbz;;#8Z}9N|CB@~^RRVqm}dgbkNaWaL`z@Jw^SlV$|PPYhl`4PcT{%wew3(z%xde* z4pU`G6K<+)fZjTnwTL@D5ad^Q#guv1JS)=}jb(1oB0&z9Ljq4T2t>WyBIVTqGNa2j zE$xP^oFHZ&)M*$Gj9hu33(by|7pB#2cf9 z`p$B9Mx+H9les~k6Zq`40UgN@VA@mL#r-MKs+HNOE@}5Ea)`D7V;lTIXOrcM(Ww5m z@*u+K1?Z`Sf^$N-qu84Q_F)cbnW+>6{{GzN1kO+9`fm*PZ{JyXSYXqiHxA0ga+dNd z8ZwPJVwhX=X;Pk#tJ88|Jo1oriT{X=wb=WSpYGam*TKiqJ*B{rZ$<{#i(8bj4vze8 zIt@j_NmH6+1iqoWOAnvJ-nqN@uu%r?7G(8Kei=o$F!hDxkn_k0937&Wyu5TP2D^-grI5o@@ZQRp-Y<(W}22satcq)i>6W%!w0!7B{8J5_ky$s$ z>6BO`<-Zb`JrTA)>%VCiy1*!}1eCiFQQHmF+Pm z1>Y?^iM6s4+QEH2_ThOf){X(I{$g|2mqlr+)uIu2UAc@R&N0wcyCZUl7YI|h$S$qD zA+EM8%TG$2FF=pF@DC*-Ps%(|PEId@8YZ5YYL(ZF$G%Mext%IGd$d>P{ANNL1Ll2I%wPuqjht{fFRTNJv?8J8P z6^)*9)RU`bBHrcU>nM-SMEgE-f{Jfsz7}(?;ovl1E!}g9P;w;xP$w@xJNxB{h+O>b z9dYyxm+HJRD2LbC(uTNHb&k~b#Bh3JjClNam#B%}!fQnk*^aMPx4wLg zztK&IWAI4WpI$X~`|NYB@tEUtf2a92x?8U)hFl#P@Mo)TgP7Z%&wkKI*|V;>mLM+z zO52=)+_$Kxv9Nf{*zgt>p$+7vouSOvRewIk3<5On8*dKZ6R}Y-DlF&YQ(p)cUL9T< zbQSrCvQ4k|`?A!38h`)m)4gM)Jd>W{)D@!RW5CQOSp%O6-$^>%`bx{VzPQMM7b37GUfwqBF*vajCufLSN> zr=+HZj|ue?LmrtcziQ}KnjeEEjlY^&>;Do6HN@2m808UgeX-#R?Q_1aJ@oS`@3adll2y-v$Yyt(_b9*HoM$VBC5^bHwCQ=W157K=GXn!0Nn&(2f zVpw77pxH07?dz3W7@3}RCfQmQf;RPXclkiQcB;#O81rDfS>|`LOY=iPKWQiRx}znA zY=LcVx}>po{??4qt$fi&RAkEWq_{W=IAH8NyQQf!^u(NGf{N+HDq5zVUX@jxQX{e( zCI!@5z!Nmz0@a`N?)e9sQoF zY{*ne&ftqNif=1L#@@!GC4Kby zs1`Y)g?^E)g?#*k*-j~+ZoE)yNfiijk*^g`)-4o;>)B7v$g4EZR2e9y@4WrE32_Av zJ-;71SGrp5Te`oTgJtZNiV2G{=sozLqeJ>IX^PGVyws&(j>#=YGnioQs!;YP5a;Lc zf3HF^AKttz+t19O$}hkPGEC?ue8l9^2UZ<_bYjBAY*KviuG}<*pQC>IU_F+`wl@12 zm?&@S$9pQnZ&IFU6%fm|9KyWPdj466W8Id6f8g!tjg|DyNvP51RM(3%m3ycjm8K^3 z;KESr7@^9$(E_O88m+aK;a5lP4LXz~O9!^=LZN_DMPsBZd~hD{%xK%Trhl?pD4;ZH z=};x98G+vRur|r^7^Lr4ts;vD=y|#cfmHtMub;(=(sL zkoEYDn7S(q&x*8EhV}xh&;Mo6t#+KvSiyg z-5be$<9pHus7J88ZqR-&V1;u`Cyt_{L<^4{Hbot>*TZ1B+j)H@@F}^XFYT?tciHf7 zSw`79dcFTGHTB=L*k3kv=U%p%X{1iQ(qp(zBzdf4FTR?-g_kBb|Aez8tH-{eHDjo{ zpzwsEtpR_~Ad5?Wv0M8s2=ogGs+%Fx9u!Ks+yc{%(zxZdsA?M@KM z*i0~h0a~Rm{vlzx^6|QQDMF^MFG;0WVl`Q}=14!6O+KesT_av;w4(E9*I2EgNZl`& z2MICsyrn(6>`C&1(M_Zzq}~PzzA@HIyKpaDS&-v(7<)ovQ6vHW~Gwcpu zn4qsRkIW_9}vlL@nilw z^SguXfr2gPswZD{Fi1P6UgGj&QM5y99knW$jdVqsO)=lHT7RG)mg>44>9yyhwq%Ww zDp*_pqW;Z>>3~fZSYtV}1CYQIE?|UIuZi?SBLz9}n=rPjEVP7b+^WyXeT*6Av1dP{dbc@4eeEPv6@BSTp14Fz zN5%REK%`3$`NYW4AkR&0qh5SzcvL*$65IIMXeg~J2fRC7LN)Ro{In*H5y+n$yQ`wk zR6t*35KxC7m&i)iOXwI6*Z-kq-^GLMT`u%o--|-KHs>3js6La(EOzPV8YpCp%q1Ca5ZTi1J-i#X0^L zePw4!chZIWxu0QqG)!^yy_DWXIe6AFu`n`_>Pds`b3dT>iD3*{-gBup%67pB{aXN9 zs2Yi7c{#dhrXR5#mrBPK8BY{vS>uo^oUo6w81W8%t)5pcES`NKuvTN8<a7GAFSydF%v}NET}tX4y!$zD);oYx>?4Fu-2)0j7Q6B z^?2>#POUhM*lE0k8Q{17p0(HIkr$!V+a-ZJj4Nbxsj2_y+Eiv0=}h zW;EkBm}JX2<^B9an6w3jIXCk{00Q<_u&Ld2 zxZy%5t&^Gc#{?$pGT1;d!V?XR)!J2@%O;sbKoHoUmo2?d8c$RZb75R|}dqUl5^MGvN zA^ueS*2cwi&Wbo6sCziVEn_dzkb&vMASqd3W-@~Q3BSCAk_%iyN|oXPYpB&CD9JFf!uYCMZ=dLYVB&(!Lb{ornJ>AoCWnoAT6Wgfdz9xhoO6} zdSc4{4$|Xn1|ItkWCcVCwGKyer;|x8k-@*$?u~i!riA4>uSaVCfb>I7>9)OyH&jN(ql(AQ8mUZcE=g4$!hMW$>Wlno=KtR^V-TP3Zuv>ba}a+ABpnS z!q&DMHun5d5`0GY=2!*v>0_ODJ8grbqf{U9q!zn$5b|`x0?vluDbUyfmJ!l6kofUm zrvJab)6GUh&d_(6S=EeXvGh#Wyz_-_@}!Dw(U*EmQVUdfKuc2)lCZg-x;(M4H?Y2$ zSENl(r%E4jQNf|@yjTTrfoD`__U2ByZTnbK?(c+cG{tPCKDbnl@`eFMtD z+X6+8KB8h`Mh~QwYEfZeU=*&+2@Fh5(#C@~qgJ$Cr3vHXG>Mc)%6Ge~xeO7#HwumZ zg@FFuvj1+QL}VX7!GVBCaiSw?R5G%%Dl>idyy9H<1l<^bL`U3a4poM*vDryRHMO;{ z$WYpgsut&m9R{p!n-WK(Tmm!z6*tHF+x@N6^*)h8zc=~ufBDBnxYqm zHg63zq5U0c`mfDl=0iTt&<9H4C^)%vSxK`qGO94@*mUglAMDW!p8CQirEER3Wi2i1 z%3@D*fo8XLMVbOSK!i_h@-69KJ&V*QiV0fIY83y z-DjOM$qH6--sUTl)z0SCxz(fP^b8ym96f(SF#WR2%)`i@gce1)xuGlC?-U6M2`QyS zpn1`f#?RMZu-#cbqM&U3htM7|iKiJN#>K_$Kf658(Zk~bDwk7?O1S^8g~`4%0$2(c zV7+i&7ZntQ1Nn)03NCUE)rgW<7}-5+Yz8~V*mWZe|KG3Ae=soq2~rN)eFgPtzC(F0 zwx2(ugub8A#9wFN!@n_n8@i$Gsz{rcOQ~=%Jt-@>=gfD-k}uDG%%6~3jau(~9$;1a zLxAX-qKb+lQ*si&NJvq#&^hmfD5$IGVX)JY%gQD8R%maLCo{X185(6)G3gUtK7!?4 z*_dH4Z-nTGBXx^PApS#m-cv^!2)&=m@t7$M4LCDOa~ClCPQH>2M4L!U%TkSR`F`d5 z8l5dq>=r3I7Z|X0iA?Y8=VEbdr zzjIRjT=RSQrXGMnim`w1ANiL57zwil@&&5yTNMhW^Er@T$n``n>DlE$2}0-SrXw)L zZ-J$H?qcU83FJR-ZI*c4s`Q%V&dB6J*ozVnK8TrH`O+g57W)qJXER(1h zC}M;Vy0^>e@Z9g;{qEx}a%oY-JasclMh**P$)`YBBRAIBF^@u1WEMIK2G7YgAN_oc z8@g!>KN*?kXL53iNnl+981hSUVjHgAT8K30{$GRtgJznAfh5H#p1!hx0KGT$2^2qR zs&VH5DoIjSkJ``oUG|axyw1xHFf(3MVFlc{JS+Sn0q`?{6a}BPk1J(=!-o9xO&%`* zh%7O!s^^#3@)9fce=iZr z29jGaBk7u+{yL{i&%r~F_8zxPA7sUBY>ZP9fCls(!2HI&o=A3lsxZme6b@t`<*He> zCnICk)Sv%MLCUTEmAtyaCj~%F%8}59vH?IO&|aotdyH9ZSOo6MYDIautY5E+dY8hN z`2vHdoHp?}MJy|d3UqpUWD`y_R^~C6$AbJxU_c(L2;dWHvwvCw_vAYe+NIN zFs)j`-qWH>a(U~6mVsBZJWc)iGr1uEm2n#LS&?v62tWW$KDM~z{b2*6qs!{xg^_S9 zv#&oY_={gqX~k`*YpYH_2^QG*<7im)rYW88B`CB{!nQ8tezINrw)-|%@Nl&tDKGXa zdKCaP(|r7-2?hkcx!>$2XjZ-;8yT@5>>q#f<4s8z5Y}SLl#hs5Y`HG@#vLVP?qJ78 zaeYeqAva4;mqKXSCNcpBi`Io+TbMhbWLw0EGqka|19Ppi$rPSJWMqtTZt-rrLeu%q z-FaoRwH8b1+B!Bf4AQG|#MsB(bi25Z+L*xYmdTor!+|Cq_3<2a+t4opAE1_*r3eoO z6JBUD(v?`{aRjm_mPKD5Q&0D^ABUa`&_P1o*5n-}&5P>=;1Ms-3qG(+$__9*C+P z)CbucWErVJ%ql?u>eOhSk{gS7jz}J$%LHC^+BB++n&UERxkvO->wYLMQJ2q|{gpQ! zQ`}6TS-XbGLdh-Jx*QmSwji#711U#vDn_031oEaA778?qqYrG!G&vTO)$dG7j$R9f zGQPd@cDr?GaCn>yt%Jq(KXBYaoG}X_JkRv2%`K1!(KLw zi=+9fP`k%~vW;a?AzxZhAPZnP(=#*Wf`Ga>w=ffnRWf3vwqgm)V8$Y6bpV8WvvU)G zv)LtD+dCzi^U(A-_6yR~fwTZrIF5=VbeM|O%^1v4W4)&~rk^-|?tnN+m$rM<1!PP7 zDw2MsslWO`SoSe%%ne$)yoiP(wQU~JSFd7Z5<;l=7~|*EaXYc`dR3%EMPFr+dIR|I zg!4hnARJBx?N_+j+Ir0s?>un2HS0c^AFTU8H=%oac@KT_V+;$^wo$>bFx^x^|FX@vmqA)UeV z;E=_1Iy1$)V&PaY!5G?;&Zpr2r{*YoB8|r2FoYoE;%MsbzOzz z-wOpJAG41W6Jb$Y)K96dcJAozj0_vJRXggSnkd4^&w}u!0#)sk3{he8XX7yr+kZfq~&O4z#X(ITKg4LO%ZXu6inH zvzua~ic`UeO;b>bV_m9!8W z6|_6K)}|KRd4;R!t}F~a3}NQ9WhRg4ACTyfNIt?gM}p3=n%>KpY-nVnQ@kW~$VsP^ z<_{AKKBZbNYn{{mMO8lj0@&GSC+o~yzkK;uih##;CLnXSvEk;mpZkg8^}g?Yr4-|( zGxz>o=}4Ic%+>7*CJgK=Cct>VpKYv^DZKRSJ($2kk}n7F5J)jVk&&PKpNRURqz;>i z^YT!mf0Oq6b=Pnph?y9+pAY==(f|FE%_PzX1ARG{J19Sw5(p_Z+y;ixP|w}Nr9Dyq#u=x|fbs7RGK#_bWoiEV`2X#`e_g^Xbdgydf*03yHM96Q?}8qW zJDHg-Nss?dOS{@Z%g*Ihkj2HB4BeiZHUFgzLGNT z(@200CVBc+^R~YfR4qJw-sqJ&R?&4N6H#5D^6l=5Pf~Q*u;|f(yP(bU-VVvX;_QE4 z$v+K%lno>kig9fvO)7K2X~rIg9tUH$`g&wY%^6_{^_7UkMg{$F|6ruNtgJmwzM@(f z3IYkVUQ(3(=L`<@(e|Cb!KPg>rJw2f9v&S@8W=3#Nw3`L24{lh*4Ni5nVE$=KOjK~ z4vgRPy97(fX{V-BQMa$Y6!|tbhTunyj2sypAErnpZJOWSe#dPu!(R^+c?UXTQ#eT^ zq{qCeEni+X?httSSUlKd!Y%+micAE{z^Fgv*^Gnrn5wcCxzo`%1r0@N;IL58TV5z| ziqAs0IrjjeComl=S^m%-UUWo9$-;z!rh-)w9RtUJb_3#FU3q>{PiUIjXlZq(3f8;< zg_%Tc%eUwDJZ&>Pf(w7r_IY=7ggtvC|1oM+d{(KsIBgxRdX^j#3sf5qW)8J0uNGqJwO9i!QU3 z%DCO}KrQh)g_(CQAC=-$s$5)_CT44jCYSmgh(j9qcI8!5rm93VH+7HBDy*Yfs9wyz z9MU~PXL5fGaoB{{`=jO7R3x7->vgnuM{a}mIMqy-C%|Uer%BeQgARf}`k5%m$jYFM zVdkD^JhL}^1|gRIfk9z;QH)_-(e$Pj1zC@P*6+Txuw~mKz0+%U*iG;TJD=_(mXfSy zJEE(QUc!UbAzj3zJ;X8+22{SClp4!+WGrrdcRGSxq0#NW&~_J(Wo`#_E4ZtvnP3+o z$WPgDy5z{4k5$OBdy51lsZuaOHm66*dOno{mO5K6*QiU{FMzA~d#@ir{Yn_lp$nDd!9b=!p$2EW{t3DNNA_ANnCCc*NKQs zws=#p;fbllz)rwF1L+^C(gi`CJlClD=Z)ny&6x(4IRp}6CrfvY8$)p2vI?rw>qPY%# zQsV97n$@E0tKBIi;*O%+ko|^mT9G;6IX5CH`V!gQm&mWSg;>YHGX4t9Fv6K<7*C2< zrRZzeug55#b=pvH;lEz{f}O#D{+A85GqH z^}D5ei>H`^kQRjJ)JP(A#Zo_;uW#z42KIBqk!AJv;81Cw`5&1CIunXVM4ZQ3E3a=S6G2D|D$aS8J=(9U!Wy zH;0p|HmLB=*4hVaHSCSj^-5%G(WO~W*N-Lbo$MJ)+Sr7c3xKMaO-3nrPjcnK;63T{_~TE$K!tLjA2ZYo??fi~2`aw) zNU#~%USA@uU0>{cBpEAfHw>t({%*Q3aZCpk>gA2>Vu6W<7PdX*=r6A0nfmoAJ<05EB7h?5T`D~*il~!*B|l3lT>21sFVuJQm|}b@ zLGHP6klnySRb{%&K1+{R8XB0_^lP&Sf54QglvF45wUSb$OGTTlgw2@My%&xq{sA_~ z%ZVFXeZ7{>cESMaM^wz)|I2G9VNde?t$KGIhLxoXl^l6OtXb78Gp<7Ib0&9~tXjn! zo73L3vMnFEc-df`K$6qhqpIc3J)^Y@^o!#a8kBLR*k3huKXsFX$&*PCZD3%Jf-*Gw z0Wto)$IqT!2j8wl2++IW_2;fldcRfBn?{5}T^96j)$mA5bx~4sHT{1AZ8#ZVPv5IP5^XRTWFGj(r_)ez>^Y4fsa~i$CSVWj-|u-CGUU zMaYgZnVDpb)X%z_WI#!HjbjqnTx@GVtENmgQ(jqYY<5s@J7f9R4I*4F!Xh6m0pYhk zL4DhBw`D+Eyj>vF8WHZ@Qk@$no{&$gqrQwH3C>2kWpJ9;DOhaV~b(yCp zG>Qb81~UfYn2{`L-muODW0{B6ZAaf1>_4xVLfEg>yN*ynpi`=<^9!FXbsXgCA4Eq? z7_CH~cw!w5=_K#*ByFYP9G6E%t4^4}nK1c}Kc|~4S2|Wji3ocd_R5H-oYxtdXQaKT z+qlMrKBpIyyG=>CG&nrGX%t-OC?@9JHCAt%c$kzglpL)(eDGo7N+qjm0V5aQxqIZO zqNLPOnFJQghHMP5FdbsI+v?;@}P3#zj#v`~>Q&YWbdz zmQ1FwZXIcC?Lr|C5cpv6^n|3ZcImb+33r^)^08x1VIi~_%iY%2^O4E7by)>#+A{OJ zoSaB;Viz@m>0%LMIY%!j)SFXhtNK*xVQx`QL3r}niVn0EvPpLAd+ioxRs|Hi(dpsbYCN^$)AJGhuI?fci_{G+6?Lgr_-2| zs-j~z*uBoCt*6#=Q5rxi*U@(1;dzWY6cy8NV=-cD~Z3jJ?C=)MPP%#wV! zzQ#y$r3W0=0$Ek=Gey@{uI5ufsccL+_HK>3ZnaaT?IvrP$PScb6MCPFeDkJTq21i# zWskH|`HQ`gdu<~la~@B`_Dik6lxXA=XEP%2wN#;Ev@aVU{!U`hp9kn2rR&Ka&U2bq zLQDg>_UHE=kIx8d-!i^hH1*Caz*lwyma+2nDgmBr9%rOL4PE!zyWK!PsVfLK{Nf8o z=caVu$E*0|t|6TQ034U|caLI#l$Sr(^wOW0b#I=aY(`d8?Ua6godbloi?bi21){#S zWN2rM24bHC3HNBPdlYDXbBer3v;IMIpVhSgaYq;Zmp0K>Z;2P58aCd+Z?3$$KhSg$ zXPi`e`&k$W@@s9(;39dR7}~gIw`JDeY2!{zG$x#1*{1VYK1rQhChT?=FUVTiH03+K z+M*}jE~6@U;rXg&JLT<&*#VAhGlWr+FMZaahUC4@w+?G_2P<4uU|CZ&X^*&RR+tA` z3*N|>@|ttshv%gOMc9)LgCiXv7vYtK6^a^|ozA1{*rcfJgz0@XF``z)o74F0j$@D#;W^{h$npsTUImM|C(Dtq;96CUFT|>09 z$89ciw_3&An&tf9xxaiMGtPJNy1O|16y4?x4w(UdQQ4I*%q&d9a!Yw=*m1t+(XAUT z-14Cm%+s_w?B$-v`@V5-n3OcMq5Jk~9(Mio(l zYSzj73XVnN+96tcw59$9ok_`No=|G^FTBm$_v?r(;4%GX`G-e{&Xc@Wsm@hX-pP5h(BK_`Nwz#|dE8kCO;E~BhoC$k5!q=F-Hpnx3tWr?+F8@5}7Zp2e2rDM8q@to7 z#Hwayczm&Zc0x^Ah59HqD0inc{q&~eJ{ITGb{2Rz4x|g+yn9NF?DGdmqW#8hTB*HL%@(7* zg@%*N{#?Q7>HyuhzS%Jd)kF=cG<$bpK}o%&L!o3v0MLw3%O0_3j7Lbs4W zSQeP5JJI)>HAFVlt1i5gR6!&(@!&1+5IsHZntKy09A}(P>UBCe_nD{gDdmY_Ijk~5 zqJvw7EcTZFCU`MaPrFK7{^6irit8!wEnW<8a4fedt|ou)MrERX5)hsz;3Sn>e@(bp zAYLJ*Xz*q8m_4o8sWN!v|4$r3rGt`tO|zbIl9G;=i_6L;npZW@i;DV;=O{&uO1-hl zXrU}uk(Zb7FM|Xnf z7k9j+wR!#l3fSp2RMT{OjVEe%79b2Kmn zE%AhP+ph#G@q0Ga`H#IC865a?cn|#*l_j|gL=ey&Fg!5cQPNnY@Bv${B^?EG2rnh^;=0FqQ@y;UB+3?!KKloIp_Dpt zuWM*!mX74LAsh9vMpvV$S+v80ZvnY^=7#4@20-t;XGP6G+nwk0`nO!BVNMR-Ubp;` z8-m$6*&${vlocu#!CXxa7>gCA^V4PR;Um*fDM19Qg>ZsQTr@3!8|fTfYP--(B#CfG z`iwi?UO^!REHu-_R5^Ih+gW z_{!a}xAgyHIo&rh@en;O9u8Yw9><$umGl(3VR7&LG)o{n%2@pI><05p?^wr{c3aAo z+)npaQ!mDJ;Tv8}`}|qz_3MrF39nr8uOgHb6xlvQe0Dx!F;bg=mWoAq|4EbHbz*8c z3IDLq2~rR|f+0i`jKg{p5A@Fb`ZKrP#%9%bki~NOyuM`jAyKDo5(p*yT~5xFo072> zU+Hvxol~#FhoP$(6K|iT$kT#(`yN_--Td)p0PuP2eMBwas3rgW0lL2srjb|9TSQID zFvy7V@z@`w2jLQ5ZIhiIf-J6t_JA7=5hTA0J6DOzp8mPJ+40)Kw-eM zR6kVx$ANyye{Z}1@>j084pbRljW-3+07Q>`5sKZFFb&8kDF6uM`r&80j;pBv?pT0f zo2-qoe9@ukl2iWWx;sJ_hV72nO4!v7?=uR(uobK$?EYs*ufJ>E;=jKzY`^>WUY;8N z?NB+Dyg=|cbHt!uW%7@iuK|YbcaDp-w?RP$!le{Xp1kv3>*|SVNl_%u;#C^qkgnpEBavlb2*Y1v8c01c-M}K|P2@m228C!VQ44%Pk$e>r zEQ*4NGtnV<>qlq70)Z!Hvmh|SLay0qeku};F#yTgr*Ib*)<5&}lQxnN&cDODlJWPT zSb+7CE+{V^Y;b>-(j#}5Cx^a(f627oO#mzY!PcaF@PNSwK(kbDw?-G=+gOZbptP+`={4Aswfk)J<4}b>I57XQP1J3}2P0iNf}QZn>O)lb zDr4ga8R@;VFV7sUIJqLr_~mYF;mP`iP==Gq>P{O-1V;+n?RCQ4PF&D#-wDwZ316H? z?~UAB?t8qrmD+Oqe{EzXI+1)|L~AP*1c(2r)aSIcDXwH&?uHbJ&Mvx5x2DW-ZQI=t zMdG1{ybo}3yJ|@2qk;B*RjZyKmuDpuoef?&xlc$hZoz$%i;Bz>Z~h?*zWY-N6`%UU{0??qFDfhB+aGX7;1k>*?Mh?QRK4ktFTj|m z199w}CN~gSjBjXYDW4r(5;vOWy+uhuFSLc2ro_UZI@92Rzsli*3z}1oZ`z&fFgiYh z#G@0aRqa-^=>V;32cgA;Zxi|6M6|StJ37a~9iuu*wTv8+@Bi>%rRdc0JONQO7KO7H zOw^QuC5hFOm_`nIz@7VEi@IoBBRL?M4ES)&d$~R*DlTG{ImB@*uB0!lVvjd`Wm)rv z^kb@SRmM1cQmQN~!EfJntqK;Sx!Mi#ZZA=*QpCYi;M?d0Wrb~KOEAK{(+D+9rdTS9 z^HHz@qOS6tW*e8Ump4jR_u2x0N`5;aD82vVSc7gciAjepoGO6u71K4oVCLW@D;>)md~L0j~SA@8t4+-s|PiS@&0G zdn=d{rlxITt(xI{--Jt!A~w78u^pItw%=ALE2&fkRkX#)SO1Bt*D>^f(Tr=?$4&h| z_TDqBsW$BbeJxl}L`6iY3L**$D$<)B=_*ZWQIH~42t6bb3%p7dq&JaXLrW-uL`9?% zseyzLsR2R=5FmuK6TcbfJ9Aw#@67l6oPS)fL-xM+Q|^1+YpthQy0fb<>C@Del9H0d zs;a{Vro7bDDdPSxJf#A3W&Bkf>Kw1Xyp~4=8}y~=G|Jt4ZmhKLTfwc4UpT{i{+cdX zrCQ^iJHgI9(Pylo&l~8^-27!y3B)u*hvx%4j zSKW&>lT)xPDeSZ1CGUfsmHUE)e=IIxdqtOUg=!WoX4%;0+4zg?Wm*Rj%v7%V3?%c= z%FlL2jU4ihs#HZn-%HB<_mgWd!SRb1=b+J^OwSx`#yCD9KpFsHBim=fspIE)N(cYm z$bXFHe}zE*&+o4B@#s&}{0NWTAVwG5{tyDXWR*7F&T=BL8f!88+${rQc!$u-m6ueg zJjw_=sp2)u+Q^vpqlKkvc6YTY^81?%+>4BBp9cqMa%_VUQlqen&;AT5oTWt8#kM!~}&Bupv+r#Jzw1+__{opvY3kk@Hv7ODl4aLsQoD1XY~GnG z2s(g@ps}AbLN)x)v<4D`Failr#gX`k@4F3M?zcQWjtwIJs2lwQiMIMMa=21?ej@4m z`UxF?L!*Y`kafbIy>~6{GU>MX>P1o8{HjmaOBd5+&wSSZ`ZBC7tR`(MT`4!b1sWF* z>1*o`qv_aBoZ5kUbw)+=+LR2tK%t&bCF7Nm@jQA|o7G#L8;&~aCLioE*tnS40(W#O zQ4NhbKNn_DD2>X|K;;!ORnijq!~}KX5V!~zjSseRvcoY)k1Q$dKf*!Opn$e5zC)LX zt7=Dn3^^)91UVC9zh9<1+`U~fUHJAekN}aetEUBneda@6vB0-@T3(MNm*yKlnLBx7 zX6+Vc1amredfYY$JRUdf3^!D|l5A-*V!3N^@ub9}D`Xi?zys}xyW|Wdh}O?8$5KTw zI+_mM7rd*)Hkh@@i#;qBzy3(Z}-&U799MYRkfh6DsfKKYL>ZR$~ceQC<}JT7P2 z)vM|pFF$sK*V#*`;#LK3H#gpS2|*1AkAls&Lf@N4FyC(c*-5d3EbzHbS!Di$hI8V_ zFC52=MMey)Y^eRTd@qx*t%V_4_QK>T`x zh=apfvKl4c#Y7qL?Ct91HLM;d--NnQp~z#xYLND--lB>d0F$i&zNqoQ!Gfvj>60t| z%Y#Eh7ktq5HWLu85bgehq(1LB5|_0AzT(Te8;9aCP^(nE;`+Nj6S+yUYA=R7v(`sFcMB6XeVnH2Udsxj=j*mo;eW zvoCn1Uu1SrKx+o4fJwpopvJ)s$|&upw?6ECv)%nRPqt<*2JF|Sqs;U_#Pd!bR!hMH z?Lzyt)1b?Bl3AFO4HWMxoq^qjGA1Wl%9{+X7+*pu@W2K;baUga5h+zFQk8gC^j`J{ z@e2Tl6ZmCKetFSZ3Z5hSp4F6KlABPE zINEV;^nSbpnyoisuGrn%dU8Hck{pJD8oZ1)IOtc2b8Y$FZY46Bad2F1_ZFkW1h}WW zx&O&Bp>kI5Vt3+FLMT}kbgMY5q0Bg$B42;n6Km=+nTr%B=HLg*X4A}~&ivT@843pb zMPhT?b-gz6q2-2(Y2xRxJ%9R1Rg$~sA_t`OIugTxz|XRYJ?hF@lKQ*0(V@!vh9;-D z$dof34X3m3?Dcb>y-3qlxBA(#vr&|AS?RlzH(|q9FPJgm$9U}8*x31zU3AiIl$(9q z_lhihS}c3LW$^LK)zIlU8nXw?>PxOQop76K4$rRzw|I%ENLwy9Q4B*^3u;ft+Q~ED zJ(QN$T}$dO&;KWhNO-OFDRuR`E~Ysb#7wQ+F-qq?wCcxp7r$?9c35}SqL1Eq(-%V{ z^?6(GuI@ah)6?6VvXrT<;VW%@6&s(aed~LyZ?PM<`qOr`eA+>X+B zSGaH?*(-;V?4mp|(>X1xalU_3N;AyZ(9n?LmwJ9p;|c2oa(vV1_U(eF&ZLh0%7PLK zs;V{*%oCnQr|DZ~9ES{DjxBOEc=oLEpotMeH8)pB$*)+F&qepqBe|u~ZP7CV2Jw@v z1GjE6?Y;D43ytpIuf81fq1s6tn}7RE&=O9eF@*2vPpZ=S^EaQ4r@lXW_=oQi#4^gk zW(ioN5sBD8R~T{0Dff+H&@xW$WZKwKF`oJg?#!KLg`G)u;uxn3|#ZoZsEJdHY}7)f6OOvXIGbN~``AlYr%; zt7_=xGvD-)rB3wag0O0Re1mg6Yj#p3AJO;PKTpQFE5HAW`>k{VsB7xuO$25$15n40 zvwzCd)w8D5pourk!P=iK&PZv9AkVh$IJ#n?D{w`*NWn>kC~}F3TUO zOWEp{;Ne{l$v73FC9KpHsV>mqnkl8RmlgS4$2lvLriIo2djmx2?Q> zt`0*V$`yAAU8D|_5tCp=O~m@IG)3o%J_Q-4&J)>4)=$gTX+cbj)-;uZ+ zcLXTK9^&uJq}mf!qC661b-&WupI7cbqt`4=v{I1rnA12fJ8HG;5LEnN(*@hXMdc`P zApr>$$BCP_l)U7V%{Hw^mv@^Jz{Mp)6+}QNyZr#U1p<}mDoct?7P*_XpX0F+Dqs|u z;l8eK@&ZI&l@AHbVstlaY$6)_z063}oF1I?*z^2>*TZ1vxs`ji65zZ?K|Vm^EjB^I z`ID*WILf_={;{zM>T+X6lTP~{EI5pe!}r&q^hDwWQ&LoqcjImf*ZAAym(_&foe=3_ zB3Fkh_jui;xUXa5XkG!KE&CmVJwF~)wH(~oz`k1?F7#uU*jR^UI(e!;kcFjZT&fd@ zJMiKD{&0jL^X

      wKqpH}$ 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

      aNT9-ZTDZVO5ozQjliK+jY?pxz} zGx@`Di;a=^O5b13Sso)^DLTx!hZ)&cU1l+XuiuuL%q}fotvHqCxs%L0MWvF=8U^Y{ z;2tyIvuwr^?PY`#&Fr7)srIbq-B$>8O+SnTW^1;W{*Nv3Sio@5POeeZ3b^{|O~=2iP1cg*bN3=s(Zg~1Af4P_1q0u(pe>m*m<RP2j2!Ez>r#7d!&#EEh&8Ngp`0lYt(wD4{K9O>bZlp zPXoIzr)`7CeBwK1_edvl1*6XXkb3o5*vzMQdJU_|TdNm?nwRk26L$8w;GX&Sk)VdfiCFy#EM%G$C?#%8AaS<3Raam zFPsS5CadF|#rhD^l2GAo?$z2W^-7S9z10dPr#ifb7dKW(IShJ7JBfdqhuV%EcfY7= z!OF8Z%_$1fJ`5ioqJ?x@m6xb%PPIyfxvrCK0k6~18-yGSO1A>Yyool!6!}(<0vQdX zlua`%%SrLuz^LTo-5MV_ydM2I@2!4&-?@canY}-Ox|V)5D``Ndz=}vFeKv_ zrEHod%&^|I7X35B8^v@cI$1iAjb|UkH!F+S5JtEA;za#c7#bvuxVT)=A3@%L2B(`B z9*)?=G_5&kJmmWGx1`uq#uI#?#VjqFntnIuFcW7n#>#;-DXMzog=m}BZ+%R!|KxEF z*k68%f2yq5&cfKjp$7|S#OK>pCzR`S*T9^M8}MV76e$>@QhxkKiuv$rSKz=mPTL|I z;}h4$vvb2|AN$7P$i(=1ltyH?vI0NA?zlQZK^y9hssVf+m7aLO|V_Bg?JhOKY=)5&v(_6SMuAjfMy|5ti z2hKwlE8dKL0)4{?v&%lU%DCE?>thc~P5ipnD6yn-?vQ#9R2$jUSX`CUx=w+!ILR(k zW+xojL|9UL$_++HbOF8I531kYm;m9-SZ&kB`m6Wiv*l1TT+>c2CgH$bwr|xoUV0&AtpFiQn6InHt7gE$YtQjF@blqU&-zd?%ZM zPV2?*@28aJqirZf^@!QC6TTFcRT?$as7LcjXv&*BDWmCf&uRIWqe*y=6uD@h1D<-T zGhatr(AQijzOa$)>a}L~b}fkA1}t80&CTOTJ#M=E_auq^{6#1iRwXFclbPURZ2GpM zq-$fu;rJK5mQ4Xbi6@jZpgw6vtz@qMQ!hj-Uf+#lt=tA zrjN%%)}Fa;hh+P%ib;h8v9{YeH4SFjEjI2lq7mQs5}{sU96gkf-qvK+>NoQ!X|wc> z+|BkJJKkzgq41I_#rT2j`m#09XurW8@lbr5Gad@KET$gWNXiD;Slc&+W$^_mzK!&; zw{sx&4~e=HMjDhk({VluK2ighPC=HPfZgOsn^bz?qtz{YqdZwl+H%)Okr}mPc!~Dy zHI?ujlz9~t`r)jS|D0~ODq;^_jshEpG?2WFEC+#))#?pO{Fq;C>_c-PvkCpHu=>iV zH|MXie9p&fpRq*sS&jmKgaAvoQI53bW9MK|dJ}+N9qR_v+J{_UCw^rm!{I*e{B~0R zrDC&keTPW#Krf`*$j?vP+uMbNRcp11w|1w&&$$!l z8&F02^Z|iW@u|;U@Mbmwrot0kQj*h@vYwsL0c%RM-quK0stO7kEoLP`u3tW1+72^# zvV{t0nHC|zdp|>rn!e{51?5AQqA(N9sx_`C*F#HYZu4SP^mB_a`Iyu7@AMqnme%Q+ zdRI6aZ#IA*w=vKvP1E!r=;D>EU27prjE`#Bsuv1l7u9dsYc2PcyONOE1e@37TIM4a zVUiZGqE%ya>e0=qWVwuYKcTvugt42Y#`3WDa=V{$J!ykiub;9;V7%;WD$Fp2i8ZXEB=r=JR=gdU1<42Qv#bN{sbGZoSm#zZB+1IX$xf zueQ)r_hjRDEd&v1*Q&jY21nLVO-;J1O+bu1%v!PBrWVnRQxc9`vQ3N%ahd$I#*u-? zN8M5NekKoqbo?A~^e7OxcwUb7bxO8i_!UI0z*h<4`-q3nHHMAj;A9!=*Gh1^0I*}} zIfy!imoT>NqKV{ZwxUKGo&m$i+hWrsB4e(&%!3)!%R8RHx80uJURcMqrv{s^YrGWN z8T*DboQ?nUNUOQS;!tof^doz(8t05N;%uSz;J4CNfL+anWkc$G2q`lSBK-Kyu&%=2 zvV?2c{dH`U0&-=@=cI`IOV2rO5(lDB5)MPxIsqobSf4*5MYM%@S>Od-Ml>sB{d{{& z+%t1I3;UlGpOy=O)G;9O>Ggh?El)x+*d#eyz`P2=K7Ed7qTE z{i%v*({^rKk)9}&DF}FX8>6JKbG*Rmd%<&d5BvJ|0D=YHd?eTA1DR>s>QeKOf4QaC zNa3t4i?blpWKx@RN~Y~ZvWVa9Z8PYU^%PZ?K0G=!dJI#<87e}b0|YR}x7x@P7Oc3a zIs1y!r0wm+k883b*%Iw0;vzXrmfBQXLD@UAg{gM4jALkq2e$3?YMxO>6HCiXTb=Q3 zdb(OJJ4!9TdKeqTmdX%+3aD?UK<7W~saCTjRF0!OTs=~eb=-SAd)Lhge%3}5L->t<5oEO-F8*1yUOPZ?6z#x8cg@?D_XrN}DqglRBkI4F#Jen*Y zNHVK@$wp`hTy|ajd^cp$?|JYu{&|cz=<#!P>s?%eTC~wH7TX?Gf(hbn|0OY^52Oa~ zNClgs+Vx>4goq73<`)b|GcSN8!v(&XDgpPJ6)kOGo{UUl7<<%W0R;9Ot5&Nq)7|`Z zYzo306S(~XZ2{M^wLplka9h>l;$ZpmD`qhFSUY>vP=vse5Vlw1(e5=PeA6~4xT$@A zCnxRL4CXX#oGLT6mfB~C@!?ESZVNL*N>bGXu_!W^=XY9y1fzLT2tTaMgzWf?hj!Qwk-{(8EOL?>9q#;Lz;Nqxz<90K>= zFg*5K*NYu&^BtXE&eslZQ*l0=PD;N58#LXYcjw!haM@IH&V(>|#F{G)(r3F(z!f+g zAmGp12OXN$M~Dr+K<%2JZ#yO#4?x`+4geeN8T#v|p^O6BR5Dw578*#rS?$&zb^Zf5 ztjkwGv6P_4n5nI@de@ zGfOHBy%$5BO(>|K&Iy@ah&E$Q=sV4HM8qn(YW=MySmEE@q?^m+*QD9#1&oj0U)?Lk zoxPd}^e8tL_NgzBr!!o`{oJ(n4tdy8Ct75zZ(yE~#qBVbgRaIocDkxmE=-9XKzX*e zoK!jwWyo=r5k=_Kma5>}t0FbkPWs%cf^`)AW*OsasX*DKaX)7+E|9fuuu9Ki5I${l zr(_kPK*kxGtMPjHbts4KgLNn!{DtMl7G;N=-cxuPwOV>W6U>>+e9p;mz0L7Q*t232 zrJ;vL6hoPB-|N{E*0>)T9eatwIh-hrNTNJv83=f*$DYyG6lM{t(2Lu}uPm~?VMH+_ zQo%L);w>JR6gg=iNOG%cQKWwr->+%}gynk_#?(w+Ii_=1xoUg11O3VHx4o4I!U_vvQg6eDv!W-N}%#=dj(yROgl zs3&ot(tMkE4|JydCp*Qs;*m8ubRI*5&rfAbJXI^56qLlC_9c`I)X< zx)f&%F`95iu93Z!tQBRpkh(hk{npLaD(NaaT;Lg$Qp*fa*ealRUa`e}1Gg2&rN^v! zg%$uveM}#8Ud3W)h->fH{I}EQ`ye-ap!3z~IwdO(T>`v$<5OBX2l;%R;@L1KkW$3z z-)x|U>%VK^jiw7bDe%Zcripv|vVozLIYoOtt88n~D^X4VyJ0K4sIjmx_O_cbpB6A; zfwxmA>cZP|e76lQk1M5MYaYt|Psw0^mZ#Tt{$L-JE578dG*0N3SgQv1X$Lnn<^dJz z1x3|QnQA$^%oe^+y%a6?#x?FjQTC7i zWtkeb7!jqhxilu`(=wNEbI(HD-Mz7sQQ4P(hO94CmS5N$6?Fnr@Q#aSzvT*1p_mLo zCisG-AfV30I`eWP`{W2k0PR14DC;Gsm;wD z=TGT?!U8O}Zf0pKTIOMLTD=+#gDTHD;3aKQwWA+yZZZb%cjqz|C>HOj^IMgpoLBl{ zPCnaGudTDMT&=m!8{VBkb^haY9PLn10+gb$*H%ioPVo&6K;U-u2pu@2()ck?*L6^2 z1m0Jw#12`QAH`8HmEJnA%IWs|Aj1oxPad&IDQG|#iQC>2$!*t~`bxuS|5O+IOF-k) zkN2N5ElOBg#Fi4f+%P--LX0}ZT|ZJJX&lP7hMq?;C}NJQQAXYE0w=Z4%@tf@Sz0?B z({STVMRj*uc6RR#nEaZQ0yqYuFB>KGQ{~?o%o&lOKIu%}EHuke)j;G|t>?wTU7T>p z0IJ2(1zuHuf}26yzJ9?LRij?+LquJ6Ui;RuV$I; z#95Y&3onPZ#(_%O5 zxUBdlg;{jf3(WtJWVj#!x9i+CL)FV$o*;@e;+W6c1)@*0K}GJ1EsmS7Ik(}fv3-u z7WUwK=n4HY1p)`fus$gHs3vbqY8W3xiE*`3X@6&Oae-@lbal0?U09fn7kjEW!yPP2 ze`l{1M2(tV$Sktr>DZnzZ3mcs8`mdNDi*A7qqbu*q`3@0W2n7vjCTJbG~bW{#AsEt z;K%O#ThxrVOnvS?Hi{^yR(7f(3OY=|!0J zXNiuup|_W38+@z5`oQh|B}uD~OGmQfG(tAl8|F$6#Fl=mM+X@lG_jnlzv>lNB!W6@ zrpvxDG`#UPjyuPEjT2mZ>XLIwg~L%siv>;4?v8KeAsrcAD!z1#WDKuD4*c<$nbCLR zc<*^*5cdFny1zh6deiKqWa`eoy$28^`4Oq+V2hc@tR@S%PUN%^g|r1G>Z}xOD(#|f0lk@<}?Hh4MW=mVx!-f$3HD+X-*V`}8c77e1 z16RA50JT$e!2|gbg7#Moi`l|oVIDXkA}AO*Y#EUc5DTWAY}GmlC%vK<1m$fu+cCIb zg(AKs$w{%m&kPgad$-WOWM;+r@-h*!Qihl{AOtd#wkY~<@X)_Qr4AuZ(s z9)~{ic3=Dc2muM6>GJSJ>jWu{Pq}4E_ysaA_afiR>Kk5@Gd&Sh+`9DlchmInTHB`L zo`A+(e1X&nAvN|^cEfZfquSBZ!;;vQ=NHd)2+ldtosx&aT?7l89GTrt6#clrr@epTSs5uNI1%4|7ddU{G#dsqkkQh-?8`?H}(A3?%nvf zolUk!|HU8w;&aztT+84Yr)0d5{rw1kJ^24$fl%k?y%GH#go}TTfc%Ru=RIXrOYhgC z|Mge>ekO4~UcmBREGPe;h|wL)IWMC{V!tvmv<4K#~ZegV?PK9|Mcv?Z|JY0 zjpL0w{Dlige!rssX59a}=JWl-hduT9=e-U7^3MKM2)uaX&g*#ce{*;Lbj{Cm`}QHE z`26e7{Ga2a${Tn8|FryfZ|eUm)AHl;x$(jOcDZ{##Fx&?EMXJK)7g*Uwe#Jxa)ME6 z*}AM^y3yX>;}Uk8H?Xi%=4vkg-SXnd!^&1aAHa7V)tImR$D9+F2%pd=A(jpQ-3$8X zNg1A}uri)LmxtdG^!Kb}-{Ery_90TvU-;(>|JCICwHB<{9DP{lLh^Xl@cs8!su%Jt z#x6`Oi2u9K{PUE9?GG=^0_FL(Pn=LI*WDi3SR6{FFN4mHs8V7J!#FFb%VCdmZf2u- z`}Amo7v^-F*3b^6f?XqCV-gHd&yVeSLStn+YKSgSA{Da4%UELHzgqkRV0V{Urz;AR z6K`@Pwdxc@gAmG;gMrLSaJ3)MC|cA`L}s9%E%jS4!!LilUV_n(WH2^!{ z_m$MqAN8XS%(&qgvL+*%c~ePVBw*6f_B=4gu}szt?`QvS<;dAt^t6R)!LC5+#{T$A+}%7eMl&H3X+xeEkl1+N&SdO_5< zM0;`+T}vvSq6?mYIo)i`8BYk&%c@~HIEdY+#U!d z{?ESnQSJcm^Z0OvBpmu0&$+Pw&v$hSN7S3WKnuS(<8?^`X*Q795fK};!qF%BWgv9V-&df)yjh% zDL1B)+EJ-5=efS5rccl$Jk9UW3sO9%UUF2Jj;^|>`@Da?6eQA~4+>kB^O#yl+8e7w z#W;n!x5Z8+VioW&{vY<LaBz5Z~mtVr&1 z&feE<*WSnPRn~2a`UEGDPfg!NS10)iHh*8pEX|%f>@uI@VNk!Z;I8D>A8^l^kL}FM z)U0XcW&1}6ljXg6Zw06DGKyL@r`Q0KW9$e5B%`TQ?rD&acyN7ZF)N8ACSU=MT1uGI z(~xq+;aj!~qTNXK?sEaq@)gb`QyjN@*U@@lir22 zlg!9}^?qBCcr$gSeNoZjPoW+x+S5i?OT@ps5%FkEE@AL1xw&jU)!&6KTNFc3{&h23 zHViLi{tC~L19|EuF94DxbiYGJ_;5EoH3;Hv>vgEyhYC@4V&7`O0`(^-D7WyTUUiwA zPbSA5`I39LBNSWsfpaFlk%Uc0lKh~P9`&Qe{G;kU33_cTIn#y7=7MzLNMXpY2SJ{b z&t3|Tg{Ou@Wd0hMvkBs;-Wf!CIrW3@EKSo?Wl6`E_J=PaVVkn^73;~l1xA8HHsiR{ znXH<(5eja!?Ogzar+VdbuMGr=1Zjk1I1xpL-UHo7Dqzuwrm70+ac245!oXwZ6*%WDA;?3 zN^am#-MIyGG;+in)KjlNrL=ATMj^K4xhToB6Kk|Og&Tn?+Wy^HnK=V88#{syguKJW z^@;7nMfXuJ_J~+|&qS0Ybe-#>NIK(!=T}X`bJ=@brfF#19LHwPszy7s1VbCFM|vb( zL?3m(r(W_zM(7Yo{R(fGIrWgSWrT?(;C7$)a&;JEMLC1^lqTwps^7D6B&R)u>+v5V z6{aXOBY+NAHzWQg;nVBJBz<#S`~p1ee^OMHPJY+96zHEi=jp}E)w*_LG_Y*!?HO4@V})2x4wx%QN0wPSRU}mc#YfA1q~lH%h8Fo=%s>M$Cw(pWU@}CCqPq zb?H#H%}Rf)mU2ovHPw@{3OTT|b_zu+;iiL?X?fhH>~2W;b;P(`XqN@J1t+>_p*9;i z&tkc1;VlKpKPjseQfU)CmQiMb-9~d`8tt*2H)zC5x2w5C2lm&H_+q3DQd?c z*JZo55Q7-`v9>sH9*BE2K`Ma<|LP6>eSFm>xN#OyTz=Va_dE3tK5$4Mt+-sI6+Jv^ z<2QdRMz5QymCl*-BlX(#*#<&#CgwVYiqebL%%h0Nq-z*hy+0#or()<7vhl9WmC%)S2VM*_@Vz8x-vm;5Ly~&-8BwRCR`SE4!Y@9 zbV-PlT!vvHy6z`hy&6{XR@

      cyE+Rl@{e?D>&-6yS04`tVl=oOntAbiu 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

      Qg+jT0`Ym^ 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%0D7|I{VA_FSzSalL=`Q!EfWs>L?( z^${`F>AsL`h~V}Us$FjQ*tjz&!a&(Be|6yO8BS|k*aE+m^8OQ35twWy@kqVEN6*J2 zV40gb=JsM)#wXwHpoO^S$kkt->S0f3GEBDlMPPfnb~#c;i=pu~^BGlcm3cWZ!QpSF zaX-?U#80JB)kaB-grK~-W$y80<$z8ZD)1z|#isx2-B5m+7G}YYzJ|^Xd|0#_9uu0x z*laH7-P+f3^TPXye`>Y*X4u6Zq5b68w9n(Qj$JzS@39M4eyuBbM*Y3gekWyXGI>pn2^;e)>pE=v}F#&6z91XYlc<$)I-;81MSDv}4X` zMAb@`^e~oGlkQh_UN@rS3Ds57;fOv&rv-lEAZ1zLY8|GKq@Zwp8SgQ<)iM{SeS{IN z-n>Rj*LJU1AR|f3lw>iD5&Zw0=K1zuM4RJUq6!vJd zr4neo3TTph=5A0iYVVtIZ`cu~b7-G`{swpN^h_$#G|=P>04YvoW2x_n70VD(z@?w>d2}u?3xOAGY zfJ+R~RmxYw=Cvqp!)t~yvHd2uE$Y79zt0}+aKCADG0M9OZ3%lb!qW;OVcb#vMbkQF z6~VGhbtLTfA3=K&1lr@N_wCNF~CnQj&Pg1?=bP6+qDOh?1-#cFnpHR+Y7 z)To%P4j~Q>U;j*%&>w?EzTD-|AH{X7UE%ita}><0jOV(5E7mG>wBcx91G$k;UpGW} zn8K8dXNDhbeAv|u)vgjeXW~gK6LcSK3==+~ zWt_Mo@Jp=2dFS}rnGCUe#pNrbF%@7uH1aA4fjOBP{H~*TKP9JhYtlGhWDSBW+t<#Z zrY^K}!o7~Z$McgrR1C&qC+`J65}PjyHha<8ayOrgJVOQ%L{K?{gMo#tm=JeFp|vt_ zeQbSGv^ExzYkuLjJc{2FW`zH(Mk1?1H#;sEMBwXk3{igJlKlM4LW6u&!QK-4Mbu3w zxhgErt!f*COe3q`f-UL(i2SeA**dLX95!gFnW(?9F=>+P_)qxlwBzo(I9yV#4R2IG z2;R-Equf74D?e`#`*$+eZU-gZ1E%RJ_192oUt zlomRA;*X{GV;4HIGWF5de`N{DN~5ZTVGoEHON2AYnqI$jJK8K_&<3fsO=HJ!hULwr zG3nEU4ZGN}!HaaxF(r+f-;AC)vQa$-E_8o0+#{0cW9}s3^zgcN_z?!(d|MWadD1qKzpLr&3W_RL&&=JKH8hrKem^-E zwn|}d9GTd*@gUrvPlg5$+}z@S#NVR$1Z6rZOimDHO-i{}The`Xor@$h$fm+4v{}gD z0Nul`$K1LxC*Z%VG@Mh=4V}&>m@4Lwv#13@%|&witQvXNCjzAGZ|l-CEab34`Sf<| zZi~l6ioLPy@hd&uyTu)ghge=Lr3}>G;F#samS67Z-UuIFo8&Z4+L^r{#PsH)6=-WI zZX-kDgL3dn1UPij4qba)Bx5CvMj`MjTNE?3bNz8u zwY+~HR2`uUs`js{mgJA=z8J)u=$>_Ux}h8u8L#@RNYx^>9>Lfj-*WzknBOZ|_Wm4- z5}CAnBvc#8U`0Zo185rcHr)frB-kpKO)~)oMvw&wE_x z?Z^)(s74YAR8`)`mY!&vA;dxbYVtO*?-t$m$L3Ez(YX%qB1FgAB#2aF0od8o?XlcY zmt{F*`>3;gF_|2tw)so^0?CvoR3E(LDb7Ud&$4$2ZE>X(#h#h=Pr1E|Tn5-~TQl+) zzvD1_36b#Ok~=@x_w=RqiB*eP&tpE72Un%Q4u{Kje4tg5LIEl9vYXeF+yemLgvcuvWPH6{)NnC?J|M9Tr^s5iYEQm=QyI=zc$dr%cTF+n0P6F#_}|tTj=j``2&b* z;YEpf&Wyd-(+S;8wZ18=h9eBULMEkh;00(aVsd^XihxxojxObJw(S(yA&3xkvFP%3 zXq=E?%;A}Tjr$9=68!mxC7$~w$&gT9IkU(;F!XKR+ap#e8HAm|qvrj0zZ|OK3m~bq z=s`R5Z=DhmYYjb0j4CjK3Xy4CbyD_ZzixHeiVcdT1d!s z;;O%LbYbXRKhc2A+;J|Qc^u+*uyn!X=YL4bV#W!}m2tYSSAIXt&!>RXr%#ItP_F79 zEuJ$?FNEP@YFcmYNuuwP&TMnOVlhXBdO&vkZA%^b(8bt6D9NVC7l@M+_jMvD2Bw9!y>+k@a1J}1> zoIpw>ys45z@Fk6V?_tYFNy?^%D$`o+ga7Dq2NQg!es{x9TU@;zlzVlo!7wncxpVKA z5X2KXxE|+VMMoKeeTm#Lg6)a*M>6N#fRBQ>vv2={tWUkQD*C4G0t@4Sa`o(AvR3?- zxnP~k&B+h78n^r)^2y25cNeH3i_z=>4@Cdc38dNCaEc)7#lmY*o52~z@VEJEYY_7x zeYA*wTV8$Sa29t9b47x(ZN~(&l476ohk~~lx_XlD*!3K9{c-iR>NDVC+unRSAD?zBD8a z<++Q`Nv{hA$}8Eqj0iq#HZD|rRzj>zFFvklXzm%ethJ97LY!>6llNLg z{L9}OZI-2DFhk0IkLh#a;rlxGWWWmpUl3am5(&eEbMX}{UF)Na+vb_=#TGW_w)bs4 zbqahN2fS8VyDE#?vKEe{tL9Hj>$ImQ!Tk=KXP_#`>Uw_j(04Vh6oaSHbZN*bh2FX_xqNmTS_?{Kvks|5kr9Js+n*MeP zfUTczfl)KWY%iZTwI$|tUVepH>nCsw;>j=x9;@68?;~xQNToT_a|cDHAU2Kk@NX+! zEy0IdA5(-t!3KJf?tND*PX2-mqEIQbs;sMPpW&w6;I6nO$~EBV@Ka*(FnlH|MWAKyC?JfHJ%sFjnW zlj!l3%IYu&gesA9IN@7r29{wLsB@Qw(eLtEpQ6G4K#i3>t})ZhxN_dw040U4bf>j)J^S8Y4C+cjd2 znk|qDhJ#y?`6X+4lgHinCo#f-@+eJ&<5be5C@`aqBWrPvP989zR)WXg^=PD}?ETE6 zS%UI%R}TWFpxp$;{h5e==jJcBsA~NZZXlLEPKaOCIOR5Huc9Qm$Inr$7Pk59So4CZ zQJ)H)7~f&z;q_YjJUsr3TMepvuxb7@KHEQwRN`l-$IF8~g1&e7MK)=Sf#wSF!6)_|)-ZsH^e#!6tPd#^pC1btGNK3JF6MZ4gfg9#TBXIu3~S z<$VK7?l~*_Os4KWHHz*y+oo~yU?TdgrHs!e+!f)bqJA6=u=wyV&3*8Czluir@hO-A zI2E-`YgNtlaR>B=9uJS{H&zg5I(A!ao_EWQVaFQ5l&RPll(<@E)=}ywOVr9;af!AT zIn;z;#fb{zf2du^B$mwNvjg?F5>EFJ$x%kVa+%u8*?-tiSe)*aAr@=lvB>X9O`ypt zS6q}yion8kae9^k0>??a9LK?oF+`IR^-ZZ7ZF)V`mYiVbcl$0zu=jD7S9qW|tLE;g zs1|hr#IQQyGOd%6qtR=cmh;fvH=GU{3YMi{5hahBntgwZO(gfjq9_T!#n6bah*ZZe zafBa0mtes?nZK_S+b~>8R82YmE!GJ=PtPPJTWHBoqVFn=VfGIt?uh5iwz2>+@9Tma z&`oEHRKFT;bS<`zCsY`TN+{#%@gRM zl1GnCUS0i*Eb$ZUV0b?+K9ZSIN@XFGksbTHM|KY!PY@}pqfof}n)hnT#bNPNzRch$ zF;a2(azAU{4?asQ&~<&?LBC|S{~y7~()>5yI>j%S(Jb#^Zhv4WoPF2eGBy$maMNv^@}U7}L-0O;xko@+tlQBVj{!+J(+>Va z83UI4Plkm#EuMa`u+84(eum6(UtHxUo}8kZyI=e8S9rws4dyzK8bQ+#ZV%@blYrWf!p@dJI~$$F0MOBPts#h1d;(p*NW zcBVo0D0YQz*_MRfsLz761bBB!lth9cyZ_4oyP;H_bp-ORBrCkcU!egOhM?NBcKnv6 z9xw9WLb)1$?rurRvwvqz8RCwo5SNqRwjw+tCnb`7n$KkZFIhTdegUnT^CPpXoLV9U z^N0R=CYPz$?d~!om|2=ne}|*(k*W9JxVHGgE3L+Bjd58X8TFFQ>|p~& zZG00fr7}O3Z9J>}>wBKaeq@%J?~XXn_SR_?UfuYop?zEsSYB#=f9oQIe`{!}b4FX~ zDNpP3r&IajiW9`QrDRn@mKoh=3ObW=6cftr!`3 z!~jjUCA#tc&HEHZbO1R%RHk!6r2LFp4Hi>!catez+!%$c_xq292YdUEfV;7`(_<$H z<5hR7U^s7Hlo$ZkbYSFdbQQgN6nUu3G-`*=93At0E zOx}JB(*P3iw1EI`77K#Z8k#fNeeP)-IPgN$N*4W;$pviPFRn6_q`SmFPajMcoWxnzLl1XM zM4!!UBp_QRgF1U51*CCk;Uch`n7eb^;ECzqA@76vPH5omMp>xNNre4F3NZb%*F2Gc zrW3AF7V0~F8?k$wVAp5t5 zn>h;K(m39g4Jjm6CVppJGx@-`wKJx3J$~l}D4j^tVXW}mj(LdaT`8u=7nNv8&x!BW zuEmXlxwUE2xR_s^FpUV;wqA^T`svheN%0c#ah)@re#&SZ4997aqd^i8IOc`@)$*Jj z;TYbZ-}$|8tnaoIN?b;tHN+se10WNYA?}s%hbU1p zRX#PAdjs`8SQp+6%WVw}4;0@FRB9cxs9_!EJbkqDei)UNn-pruj6=5_#3!Y5;Bmf8 zaZ&eeEkED?8~s+D7eS`*>etgH2-Uw-5e_TytG-LOYA0(1L~9k~EcRU=-bZAwP%?T| zMFOWi+a_E)m?ljsVqbIJORPK%Kb+@GTni)^5Dp9$&|GP!Fd ztS0?iP9WX&7cB)>)B}*=vZw|(MtC(c+P$9!0OK|+0QQjhevd`Wep;2_<>gkKc_X(& zh!E~s;fL9vl{V__?%Knc$K#je{DS8VDhf_uNqhqu$BuA5VYLNC>idwyE;AX z&X-7vpa>IlzXZz?=45?UD$ueWS!6LJ;IJ{w{>CVn1b|e``?e_21_%`=ar}>heue*^ zr=$uP?)rE(-YCW(R>>Vm4kHinXZv#hFL$lZ<)Ts5byKj3bdEHU}sn z)wOBCDT7pg3Vlp3l~!v(pibMEsPE>_8Teb!W8DDL9ssr6Pz7Fe2Ydo8ji~!-hHX7` zU6vBt7?FhFjp6?$(Jez*Uc#*B_uf*DvEgeE{Lun}(qETwx>tZ5%R`5mhF|)Sc({2`Xd->9&oX?mH}fXfo7Fo9%MD+L`kc;*EqBD zc_;t93qESEjGNnO1~SL3zmS0o(-A$2kDTz*Mlo3MM+=P%7$=M_d&18DjWL(}(5SmF zHmypNKXo@bI^U#2Hzq~N9)+?6`S=J6Salqy4f~pofpxtVw?tnZjekP-`AWj6AJ)eP zEc(r5cMOti28eSvx_6x|4cDtXJq(M*qgZ^h)WB-;10v`7hp^ZWLy1S-~;KF+|kh?oC}zI2jx>2zb54C#F2acp_C78^K7)#&gf@@JoolQ)eX zyMPR4$RjbZZ?J=bHPKg+kD9OFAHYDE^tcYAan9-lmL93Kx8s*)+oB1ulIh%1-ZegRrqh+4P=}Y zWB(9zqF=CvHJ&OK7~B6Jdv6^U*OILd2Mq)d3GO67La^XY&?I?JLk-~cfL9I{QG;J`eXOrPj~NHwQAL>RqK6Mx{xCYTVil@ zFcG=CS>n{QVX+32E4IY3a|t3zf#g-)J0M3OD%)m~x-HQnp16a6PFx>XQlEHr9XRl# zUH*iwNS*G6w{5G*Ma7Wf z4hK1cKvAF1Jat4>S0XXN@wcG_NReu>z_2rE)si5BKtcD!3<9^#oF5o4n+PX%9nH1X>u z8t{LMm_t?@y^x|c12>=ui~M317fWe7e!LV+kM{Gu{g=9>3!bY+9WlY5UHbsm}g`8QMvt`F4fykg{gQ@>dX6!CQ3(*vi@X#iFs)Gb0% z$E+l)YvE=WNM20tZ6$8%o=~8LPaa+yz)|edn6?Qxu{~ah)ih2uwUL&SEgd3zC|emt zi>|MXKE9s|!p|OzyoAQxK*J%=nf0VbDCRV{v~nVU6jaPT5Tx9Y3&C}n4Y>-CHrL^f zi7!Bcc|Lngob7=cxuwaQYCF!b;q?4Q16{S^ICxxEo<;G%PuIWMJU^vb{eB z`d#yx6wyH}I-Fuq((0VqCKJ~Ypl7vRH^xW4B@yJU<3^CEkmO+y_&i1p+T9)mc@pE3 zlHw^nWxRa`@>k1#6YWl;Y`daY;WFtMfF5fnh*x)gKK_HDwyTp-yZ$|!5Q_g{@)+{d zU><`KzXx!XmFC$QJH80P{L=+Of5L7?W4FEX9zU&$;S*~ZSLbrPDN(mT-=fj=5rz2q zr^2I;?pF)J3>@z}Ay2as)!QYo}^M81YV&=|2uX z^zs){lj{5FdcGdE6zKdG>qYurZBHWe1L9Gd#ZpZnB<)jQ^Ug52=*EYBoQvaux&t@H z;TUbD_`3HVjCSRl;sx3Jbut-!#-U3jB$`8)9*fs*}hD*6-oO+i3L&ndAa0yMO*tYVHct9i#|dB z;~;kMzQ>0|{j;Qjh5?E=vdTq|Q;$-@DAiDrqGyNW!FWeadC847g6iDd#gn!agM+fY z_v`%Mn@MJV{{Ud}?)FHmR z#>2}LN>qXKG`Gzx-Ln}(GMr&$4T67s^S5ehY>vny!@K>Xs`EZYK2q2g-XrJPBvaNZ z(f9nrF0ebEDu@y2l_u(|24Ye-SArCi7~(3Pscb7_^kbu_CBHxs$MveN{P(e2|tt{YMMYu|t~~N9}^@-rEUn zHk;@F{mZ|(C<$saP+OqLaXkR{#+Pj6zU28TFHA{rP`?#Yz7TH)WWymyLH?Gr_s{i_UvktHL^$eF>LXNO~qP=BviPuxofM;wyN2MNpqo+fC$a*F#~ z=F0Co1N5z07ZI(2KBGw~(K5MkmNlRv{}!l67NGX9nJ`|{y}bg1^KU015#pJ%f@TD6 z$t4>Cp@JZbzuo-%%l(qfobA_tT&p%mp7RHRiD2NJALYlaj1LC}tPn_EPl3EJ#%1T8 z5AbwWZ+`R0V;vR8uT?0uSO3=z{dQ<^eM||dp1K8S_PacBYnhe1=QH_x`yL@ulh8Y> zLdv=!_0PNi^*GZ2%|7Y7-FBt(Ry=QgK_L4Uv%}~e5@8gK%djPC1H5@ zuRZ@aLiryb0g`$8Vk0U=bw;E3X(F3_8 z|Kn@_$2XbeMLN#nTT%Ob{?!!x8}a^+kE%`X6=A2p>?@FS{4YxK=RW$x(^KiX^@ET$ z{-lKeI1sZOfFjJDY)t*UPi*@uO{D)`J2%RFZ2x1~{%=ELkqjt;#pUtd`hEQGue8jK zd+j`)65;)G68_@=`EbbsiooS@;c)!Fz4rfle?$P8F4Z{OIn(R*7VLsukn>wXe@1S? z+%%{(mv}k|#G51t#We8#`0xMz&OJ=W_>uFd3qL4i_Fd0JV`=q}uMRP{fjn3}u@$c;dXmCq%*4A;f_N*%~6f`-vw zmAUr27fZ?0-;6Iq!h`hLqE8b;4JHNp4QlFFe_EE_Xt5Fxbbob`^Z5&V-U(ixPJvcH zuvO-NI%L4AB!Gx7$DwGv)Z($t`tzACO$sGtF}dZ2!T+kn|7KQ?q$1<0%gz=m*-?Dx zef*og6zC!1tJ*Baa{f~v|I?BB&9B^l#fMAee)?I*IE4OR-tf0CuP_KK4rQA~IZgiu z$^N%K-d~82QUP|DwEhR5#9!@Tfg!LssKI_IF8(EZ2dHEw7A|0iu|9rI%l?yd@DCGK znH^XhiY|5;tp2LZM^J%a`XVZGrJUkFX4jvYJ-?O7_atC(_~q^p%l%hnZj5yAB_I)M z173pmpqiA+ zZ%yR?#Zvu0Gxgi4`tPp)pPBkk%@<&%W@~)xCSKH1`2c%!+Uv79O16hea=b2yI=<+~ zo13k7w-`B6cgap^EUDHV=wkVDAQ?W}wjL>?Kwoo4}D zjPLinJMYGY_2zXTa%WQUP)n-%7_WRS+TJuD3{paRC zuj-Z}f~O2n!RcxI^6?ubElKYq-!%e<%xu@jQ+Dx5jRZHvDy{>ULq_f&xeW)bR)8)> zXjm<^d`kTMr2_uz+*t?+k6nD4xhpmQB?sWU>C)>x&cIAVheIwWKNC7~&q}qwO?^4T zX1;D=j+4)V<1HyIdIYo-eWS>)u@JVM*ghPr6ZS71cSKi`<&-ev7fh3nd;GQ);j2bc zan{yXTTHL+*bL8`!9FgpsaT7qrn6J-&Q2IhGx6p&mz}!%=tXGW@$McpfP3+l!LoG( z(JsIsVOQ~_WmW-M^UDJR-1I6vi?Mh71fN)F2J^1d2~)OA7Z03@>TXrEtSo*u@}4d} zr0`_UPHyav)ddKF3JuNwzDRIjAnZomLt8x0SGHIo97=&EdFhplmBv}FhRHMUmrmnq z3G-ZlEUIc`pUc^FEgE527n#}Y7y63A-##TedTN*;2V&mP30$9t+2ogwJD`)6fSDXs<8lX7vYnJ|*V*yP2Qk2&2qi7^WBminzH|sNQ2`@(5Bg z?7^EnJq4g1|GV287K+-e+i$HU%^{v0qpC~HH5ug!N!io2d%}=rSkNi0KBOcnE7pzn z;Pc%#h)s2ZQeey<{iyIe^dGVYbE>sS_Y@lS+y;^_^_v~HlV_5ln znRbtUHce(u>zqs}d#d`$q_An~+ZX-U<;wsp0G*}f*pWzo^<$k$3I0UXPXCz6^In;8 z6Is}NKR?t#FO!-mhjzQ8D#}KZr5s25)|SPk|aUOrPOF zd^T$V<5?oQ8%3{LxQpyhc>=xK*>4u~^PqHNYIRn(X$V|eaKSf4!MLCkI_{EQ=}uU} z24UXtU7x^MW;7hqvz4~F_QG{fRpQYZPd;*Jl@j9t5mZ8LPc!G0jXJ%`*uo*GoqC#& z-OkaXCw$EsfQqaw_r$5G(~#8bHFI*IwV%Uh6HTc18-aIPz7l0_g=T zm$&zneU)$?KWbn@=%*$8J+UnTPUD*#)+=>(AWjILMr6DBR><>KKsKFh$a zI=&pwoBG}CHL-+3K5n;2yjo`sdm!o?Ti!fV=8X+_X$rE)xV8&6Q2dpapmZ$2@EOH( zqJFX}w=65)K`mM@DN`Feh$GK!llcY-K>6}Z56@T?5vxX!+srWeP^UWMqYET$#V@Mm z$0eGz^n^oWVa{5h>^}L2(CB*fD$Ub(URO84#o>I=`Gp<~UH%&<06Xk-ZhT0XC3#DR zIMoXNl?9|yb&hx(%)HzLK$xf8OO&WyuQ{X{DLRQDwQG{P2MvaU@%ik*X=N=3%zIVN z^w$EFc@a^LBfN$wFZNBZeyI&J!V@<h;P3o`j$3FW@JH{1@14Qn`#Ef;11jA7ANAri`2|d5)_4*%jS9<~FsY9?oiPff7Py@$8>6n)ccaByDM@gv`Re zfp#mg@uyBjl@4yy(dUL+&R_03Z6~c1ZfTd%nr?mcJh%DWL z<7uU`3A`FRTmg?$AaT$7a%M_A>T<`2k=HO;&Md|2I7y9Nk$)@jd>1$lwX(=Bg#D!U zhEJdHwZazZd9^qeEtEEMtex(?`}sdnB3`I{WkJ zhoXLm)?|#MYU^I-j?pKMj}%Wk?BIPj0ZLt{lG79+@~{`f})Pk|G)B&Hqcl{V)&NZz!ZRN=%vK3 zvQoXej&3TAgG}W5E#U9Re{h3L+;m$wYGja;Q$&=i1-aq8PwblR6A8)O*Lhdc;KGCA zko}=+@>4`;=ZBfO7Vr}LS6T`ZB)X+W zA339In4PA#yemqgQO(Xm@5JbkAqZsS6v%${S%4tXD$?G@xyOHx`B|dgvD}ImzlHhS z0CB)764d<_m*h%e;c&wZ62&8d6AE9f_y)rKjf79n%xgzYeK;1cmdCe=R|sLtva?~Y zIOMgXF#Vqi00+yJhp`T?Rl9JSEKYcbk9DY-D_k~HIrp2d2qgA3s(z|$7OnyLtyAEe zm(B6vTgpq4!EYAEZv^b7PBA|W0cx)$;DEcZ93^}gs*#?x#{pz5Vg$XQOX1M&j}pFl z&D=}M=3CoMn8tEjx}Nwk$d0**+KepSEK*~YoonOCR}>P?BTQ*eZP(K@??dvaYxU>7 z;po+?cN8Akbgpk)L!$(4KO~l2?eEYG*1bk-0wrh}#)#yiU=Hudn)J_rbpvW3Q9>m$dDL>>1`GERf z0%|{f)cnb=#-Mj5-iMtcD=>~ZJ;Q8B193FG<;GIn*l3s^nsqdIPal4`$?sQ^8rsU0 zgcd8OLrf|&)&N^aaZ0uA>)5k(GChF092^zhIPtahz~0X!G(Mx={I6)$pnPT-Z@7qi zsI0+~z--u|dln%5U%i){T*f|;`sDhn zt)Be!sDxXq|I){lhD-={O?m`=!;dmIQVM}YW6`CWw=G|pq0WD0${M!%*-aRH>NVSM zb0&Vb(yfMx34oWR(%vd;eX`d-yp1ko5}j~0E5psJygIzke^xxkm0p|I16cM8)*70> z=&K&f4$4*fByIAbBH3-bNzcU`8?;cJqdG-FP8WL!hfN3$vn2kOJxtuN> z_GQ9Xj~`OF2)(Md<)q>lxv}h>gGTdW{OFmNhft}N!X$q zM;2wo3X<62?u#N?5CAI}j933#a6&3t1ZyAf`5##l;~>!sDTE z>g%rXaRG=XKLb>#k;FKY@9)H%w}%OIHG`7rKaoUdcZ@764-&~!mp z6vV`(T@qQI0iC#~DJ}&cwUob&a(QMde-OB`>GR_BGOc*boEVvIZ-Nb*!~Lo`YHhL5 zSy1+%<_**cUc%x9IBds{=0bifPj>U!;#KR%;tvVlM7LEKrWstauAPiu8m}|I^&gbGZK}NE!kQ!s^l0;goE)U?xqxz75Lge$#=;I^I?g-}suZ z6o_(a(Rouv7bs76ah1cX@!^AgegG1`5A{Nh5IAs-tiRQ83yPvOw_10c?lEQwPx|FW zGtz+^YT;(NVy^1$JR32;GthxCM1Ie%RUGBrh1arVGyJvUCigixeZgS%s&pE+k6MXr z2l@Wt;B?3A*nHyM5UT9TcA&+yqo0H7$u9|csMmG_505Xobz&8iLd)=~)UXv^)k56l z8+CD7cL*>x2dJoNzAWw4YN{)=2Yg!|NUn#z7dm6erCY!$6ObETWizKGJK=sE1MYRX z1w61gPo*l%3HEWa-sQu4Cr?L#R26hb4CRAr>Ff0K=2MbAtSzUU+LN)1l;D4QR_yW% zep^tV>2pVt1Gz-qi`s3lkK%)X8-fh1DUmKd|Erq?5PT$vM1)qHre_Ql6QieEXzP8N zkjwAOdbp3vHxX(_+J}n8KV7_Oki|s2s>a>aPhb`twy>GucL2K!mK+Xdeyl$Zqv*%Bo09%;+nHoS!ybHK@lM+^ZCjV(lJVB3f0r* z4rLPv`DpJVi`HGb$*Y&+p!U+Ru4xVvfEW(AK^y73ho6!s*a@q4oEgA;S8A8iwG6Ty zLA75vXB!)WygY&V5cO(4f6mpcBoW~8n-Rqrc-lC~rGNd7HlN#G)mBCx%qgeD67T%{ zs7IUcLAvMdsUg3Cz%F;d4NQJKcTPcDnw&?>RlLL4+>C(|^H>9baVCG9(B5vstr*S_ zM?F9Pniaqmp-4!=mm$i}z2%`W(CiNQW}m4mh-I8Q6u~J8g`B-RC(D4bXDi_Ik zw#iR@2xvzVEryvKA4^c2f1TaVG?!Bb&kOnPFePs<-pvV|u#UPZX^I&%#T!=@K;3(T zj@2#6>6b1ri7y>$om)~{o~sUIh~oei^c+ofP|H??MlujC!TaU9X@W!rt%)@`jSaXd zOGr@H0m2{^8T%;w%!%50`v{_%NCO_kw)TgBbIo{@*MrG%2(lydb0r;;FHe^~MRWei z@|i_zLL{8;5XcIT1IGVqBYtP4YNcwJ(Te|7EhPC`N1Wch0AchpqD~-@7prK7vA@#r zk8YbLy3gwTv$`)|f0=MF`2eIVbjvQT?_nJt0Msq8VKec0s@teHD$e_yaqdkNyyjo&T`_xsV*k|&Pyy5Na7q{=$B zdq2aHeYH1(T^{?Z%xjzJHi3KgpO?0-A*r? zjn>e2hTJm3BaSd%Ch3L#T)ndPb8t-x+BtAw#lx<@^L7&p3Zcio(&%JQpPo+ep#^!d z3oM@+!qd15s{p8V>tk)#jWnY6d&f(^>z?w7Xi~%O!dK6nPxKy>y`2<Iv(621#wTy>nYS!>!ETk-g*QYRtbZ3mPm=h1mgd;gvKFF)nUX>H|oB_oQG1*h{lb*UV zKjxaz`DKG@adKd1aPD~?l{IxN?T3x<5#D52EGv-zI!l{S5fy}O_>Ifhl!jiShppB0CJ>|6WnL4$)} z=L7zxp&^Oe#LltfAJ_tAg&rqI(a!EIyv2T;euZ4M!MOdJQc|X#UNt}wDM#}G9qr7A zix~y57;s{kaq*q-4Q|SDM-4VrQUpnmpKT*3; zoVN7kj)Bs!lm4Pq-Tdv_@M8s~$l1Xz`kYPxPEXPb26@0d*6T%wyE_2xH4*^Bodoba z34~qRjI_)}bneY#Je&qM<>7}~aZmZW`366>nsIP&1NN|;L4Lwf!XX76B1IF)mx6H= zX71@A(-4%Lhit+@Z_b9~S|Q>@))jnN>07D#o98XGrbGQ@%_%M~^u79CnP}J~iE|8J z>O&TI`xdjN@y?0|J}>!AI4{i`rgcyz^;S`OQ5ZmPcREZrQ6i#`1Hz3Gp@bA8&YN(7%MRmVEjZ!sCYT28x zIb<-v-BoSqal5dAMFxu?;n<_`GO(D}TqLgr6WpW-cCV-Hr!_kmPg!uvq|=ziKVB=f$4hT;Va&H*?Z=F1t(I@gw2QX}dzwSo0IG2N(L4Occ+1{n0@LorAzyq;D%-`z3B{q)iN=-CSLWB0>}lJm0aW3 zIGREIF9@gJ$p`}$P?OU~c5oCqUFJp6Ap2DDTIwEhR%usJ8gGI%W8FeOd^k;YRy#2z z-7`!?8rOKBb}RmeS7Gl-LE3(h9kKvNg5E}K&3ltQhWx?oSb>drCF0MX3$pNTN6x;~ zex|CofM--5tSZj`3y5ZuEdn(O81HV$=g3U_G`%2CcdG~2kHxCx7vK?fvhEfpBSRe` zK54}e_NkxPR|H!5XKT)2F#1HnG0oeVa%YKJKhu$F&9TjL3qVqaJOEI z@A*Dd`#&SJ3n{H6!Ot(w%WN~fpw7b75~y%FIlZwlaO_e=j+l4CaK&hqj^Xu=mTi3 zCcm<}rf`(22PV>NregLrEq9U{0Nch2F-EAW2 zZ9Y5*nSfJKv$YBvpsYBzIu;R5O_%RL}Lr)^) zzjDZ$nxr&hIJ_$)<;*m;aZ=ZbL5crFKrk)b*qd$u*7W9QksInV@?ORg`<*27*EJgh{D^B=z5^4fiA!xPlsfPQu9 zOXRf>STe-h`MRFDS3b2QVD!#?pSfYEC|TtcOo}yYUAk`_>2N7}>UB&}Av|Zm=s#`mi>yO3QQIv%;-+YE3D*$EaA@GE_{~uSG>fwulprO66hh-qR#= zb^1Xk;l9GiFDW2sTXubm@*Lq)C7+Zq2qM;|5nUp45XX^Uj>slJJ)UJag$nSGMn7cx z)K!~zWpS-dwP2GXB2k{7h<~w(M58W6mVhehD3W?RJD0%=r5~7kDS8?+#`>sv(-}jc z?9j4&Em%2wRU<$czhIxc!||r{Xl?OMA^kMn2c8zilDc1~FPMXFJP6I|#*jDpw;XWp$@Lv}0f7S_`{#6LSA zLV@Y^b%S)ZHig+y9F}MWD!W||8?5DhhVYm{82Ru()X&mNSGbqTT3V)f{S}FELqZio zRE$m^h9FmW#xv_NH2=!|i(GPlN`A|io1&~BkxVC*;Begug)++$y}HNd+Wk|N*nmfX z`0i_(ya()t#a`_Fx)~k=;Tu}13Cc{T9{O*1wMju2=aaolbZofw@S!5M!nb7cmF-gL z&SE8+;GaoBk}>CEe!cm3&{EM;Y99c4Wc$Lae>|FMPJAN)o!uVkJU6%LxLGVHGW5j= zCjA0y9ojR6t+Do9@@YF#v*JZMMZ!RlPE{ps-z8Q%n=racfxbOlw=)WB0`$)r>b!|g z->YDcC4FZe%3y_Gj8JwDph|K&X6g>X%GQ%ayMu|_K?e=mF6^&g?`7p%5PfyQ;27cZ z*^*%BDA}L20~@DCSS>DXkm5&pwi0u{OZWs7QH_apO0l{u`iAG6DH!5nnb7*q8~N?; zTOR=e^m|}soLnBAC|aT@gVz_Z#LE)dSNPmq*E2q%p+(I6T94F%kd=w8tcr>wNVAB$ z_LuHBy5CWB#Rb=vr0gJm7#3~HTCELv{}OGGiUBzK+N$AyEnbbAmYwy$zXnIMgS+ae zb-~Gxd0X_&7_EF$A-N@W+ou}CuLLFfy!9^FPq*-fz4?8)ZA!N)&#daN-#pXNtK^Xp zi8e*-bt+Qc1wW1LP#g_5Sb1U^);Vz5f(;KnpWwk3jkX!R@Cz#@88{`v)Z(XRXuJ6| z1fh7xBL0~nGf=AMX+o-ozhdT<`LFC40+3ECZeJVcm~yCS)6q;qD?_jp?z9t9k()J)-_dk5-SCMFlp1^;~k_Hs3C8MdFelJU7CIl$eHXKh9nTi4(;# z(R_z`re>3Ot|(iser55rofK=dF3VI4fzWjM5>0Yow;xOH`=K)8ims^>gb?A&u{q{E zQw|?U%h)o-W;^k2`80TtN{u{%R*%)LLV~zRT$QkWlf~**%~Lb)Vn!jg@8pYCOl>+f z)V{jvhsthT&aO1+^8=q*SbcLK%Olkz5pN)(td zk#$52C7s;aQdc{#p6O2BKkE)YQevpojSX_yW0#u1R?DgqZ(1l&{KRB?sqzvBr{4}N zXFI4@r#L2)>yY)_8|5K#mqn{=deJam<88n=9*OoqQr*Yt;$K_4(l#-IvO@t4cMy-8 zXAyMEeSUT*b+-$vWMOvUP6S<_3O?2!CBxEGw4dUY;ML?jjBo#dhX5BzeaP`rbnO9} z1;};tRut>S@mO*e#hqGu0r@Z)&!bh|Pj!*}r1j~^Z)2U5-o=#}Y7DP9+2SN!J?V8l zBfhErdZ3M0bN8~DNrWT3Z?SHPGKa!*nPB+WsRKde9$E)zp57>9R4sLOZx0p#7t~AU zDZ%+Pp`=z$@Gd$EAN5@sBCZontM1~kapHJk=L=U1M-=t?3?(5t-fRND!*R5^b{won z;bO#O-m;ly#vF&8?3lv@>nkHv-Su@$>h)u zuX`L5P2F5mCSDNG*L)O#E3IIBwytE*dnB3qL0YO7N-Atey6a~6-LoNGV;y8TAM$|< z&-;{e($+*1!2FXU)Pr*Bi0Z8E96E36t&d*b+=hKM(m4qExR5w);W2D-tG$KW-^8z1 zyhwN;SZ^mbZKJR_^EH1sA^izgQLLOr>O$MExu&R*Z9*(5*VNfJVIZNKRilNfNq*WE z<+Rzl4-U^*wuqh6X<2wa>)`yv;hca&Uc21UfKZPxU3WyvL~jGrh9OJz60Io}5!9=x zMvKzhX+LDAEusAxC)82!F*8d3>@(Lfe&XY#ZBA4gw{`g@iE=W~m!4_4Ma}d<=Yyp5 zfkk&HhSY?R0tqQjv~ccI?2B{5Jrm9+J$83XED`o3lr<*5luz+JaifxC?Kt}ak|4(Gvm0nY@iU7M);QaofS+ z*3NbF>EO%4Oe9ZgVs;H?H>9MajPy_`Ow9}*jofM(HT!~o(zhe+JeSY1M*x>QHShq% zAJyUzsS_#k*ZNs$%Iks`ShxD51AjUhVSpTW9EjcfvjrBA`zrmgtPG|s=K?C8wv;K{ zc~=@GDkTLHs#9!@#hP(GrWWWcU@&*0{b}+{1o3wb_X2s9<_^~xIYy3(on2b3BZul~ zN4)FU0-tym7`{K1EiDtYX8!AYh$b%4POsS*j@166)l3~4YHIDUpp}EL4l(4^d4PJz zr?;@au)n5G$;=f*QEqg6VaiNN!DcEp7(7o#+~$RPF;fcn}74$2tM z#zNy>4z%Jo%z-}uAF_^kxaJ9xc#_hal3^U^qK(UDj&-8NQW5ww@^!tUqw@C=LHDIa zeu=T~yK1@m$iCO(ZVb_khpQ2NPH`FMXa(|t*awD~K%=xBg^B@#NyHd89j~%`sn+CX z_aJwz0W^|6x9C%L!D&>vq5%))lVt>M4qM;=dKyk9t&tv!Na##@Mx- zSEP-$L~(ZoG2JR{HjP$(zq;TfLK~RhW%DTR0T2B)!uoMoSmVtb*4toK$<9ak+bGDE zs%Xl-+Apvysr1@T4d+`-!)TZLhlMhiHq^28Oq7E=LJ0Ig^%Jwr@;b!GrCUY0MMgYz zV%|}bLW@LJ^G$+Q&o83fsG>!3vW9!E_lqy5#p-r?v<(rFso=K|6o)5JO+3sYt@7-* zPy%%>vMIcm#2L=(QIXC^?mHR?aW#Y&lDZ33m(TRlX(w$q<1>-d#aSDS2-;GNONh`##4Gn!n zJr~d#tYVGa2QmGVb7YD(?@%=JCiOfAqN7{Nrb~dy)F+41-LFgC4n^@1&odgNz!>@z z;*huOG|_I93-g^ZLwL2)p3|_|andc}#|%DgIr7aLjmRWE;Wy_2G_b=(ndqiz5VS!~ z{0I4SkgDRr=sZooiyYcIUvJe@ELB`*ZIBt~q6h`vuo^6~v+6votY^<4hVXJr---Xg z-}zz2Sa!(e9_`&|wrQ}=LDQ*ibMXz1phK1u6YS%g&RD{(8k~qMTo^&|tJv1csZ*{< zqc1y(i2YOxbX1K&Xedi~vrn~=w~QIKnXcbaieqkSJ!8RfYwf6`LiF`QgD+j`$i#dK z@TEPbIj4}6XPw45rl~hnpsV0oQh6NFI`S2RB$)cJ_~hDCa&h*gz^7-%89Sxt-FC!| z7o}Hz3qcGjNp34sudhJ1(X!?tCuqNc+3V{A^jIrI;rCIN#vj8)tVFlotx^5mly}-Z z4n{@HVs?vsLdVK2a*Kimmq~wW;9`s$B22{h(Q%Y`RtNQzBUoX*#+_;Jux5bfiHRs} z-`1T=hLZfqr{f0eACjKr4jjfhCgR&a^zSaR2x~@&n&RI^1z2`C#=a1;zmxqAj{Ta< zBhgZH2kW7~q$i2e_PCgtRpF1e!m5&GKgkyuEJm{7XbBjB;YZ?c0R61f=bEOM~n&*Cf4)_ek?w2$08vW8F zR0J9_48?*+?U$WVt<)&FMmwU$RhWUeV(wgbR)4PGh=*vw zZCf*U0U_vWgjX0hl_W@`$^%o;+e#|)s=5x3Y0X-Xd$dd~l%OSXX?qCYS1Z_KIo;1_ zM!}|z!^drjr&Od`e|~Y$J=mCvgoFkAh4rP6SQt}yudO=jl)ud!SDb8OP$(Wg?xVSE zM;Rz}=@;uDe;!J>Fmi-5K@OwZ_=8+OU};FKLyCynXB}pe0gE7yOUekpIjA!$6_~

      C_$r9$wi2W-oH@qVb2@-xGmFB)jh64wlxk?ylT}ZqJ}== z*&wXn;OCEtN%^*l9)T%i|2W_9+69$Fj>w6W=Ln24KWU-JAMaCO(IvHHY(rj3de~iK z304r}u>ysuWAhhGv-|ALX(^9bl{Gb3N8>zOo;7=EP2JPUTZ^odu$YKZuCJR2hIF&;TTWg*9sh-NLrkLYZ62_i9ZA* zq1g6V3s)|=O<=thw?4u8R;^^FV2M02&`5r<3b*w=wz7G$h&*?CoV!EG!3M-Jd~+ts zAwsNT2HO=WNr0(LHvrE_Pn+SuqY4N6T_y+GJhkAq2$=!(z-Jws@21~WU z?=Ub&Nh8qt?>M|h-*0*N!!ePC9W!m-HM{=21dlM4MH-}VmFB~k&s?YD0i*9?iP(WY zP8**TNWHjFCUnPb^mx(joZ`(yoRtdNbD3pcZzr&gyi|HUk1kkvrz%6&=$-sa$qCCd z3*pWI4otDmik8N^1G6-Nx}RZGccDfvj>&LcM8Y}DjY0IS`Wf=MD9sO(>i4t9$rZs# zfkrU+m>+RE*f~EZA8XkCTkC~hmBsxO?&C%fz*uPu^WN$9gD-8LkbVAvtaM;d+fI!x zj^v||ASgwG@9vacrylFFtTjwTx6GrU>bpo*_bzD@l&i=<^Tee@A;H0)M)vf1hDFK} zmAsj&N~g_S^YJow-?)rRXBAIQind>Q^YsdV)}PptvnwfUnr=7;7ElV zZVhaL0e(VYOlI1l-78ZS^c*s-J!v+OAa#8SBr9K5@5M zlG~Zr^p6j6XdmBZ@%oj04w$Th<u`V^L}htio9%ZYI$V{Z$%CtDel#S@=O(X zH%q`z&W(Ar;iJzpd*p>48eYHA7`uAug`vB5LLH`q#mhm zLm91?z#*Tm3bt-rw4|ESXPC+MKJJ94KZZj-;?0z*Q39bdFhK_vvEG94qHUp^W%-rA z&S^;kCEnDA$>pLi*b~X-NcPE=4G$U()sWaXzYra`Ni9B>7~0@U7qFyNaEwzu;f9kT zv(}a`@F?odoSeuwvrmte!e-5~*c7qf>X53*L`c5D#0igU}yN97tRuqC#8m{Cr-hv-I6 zU%H|&9B70%;85^=KMR?jtPj>hx@8rOdf;F-WxM#sm;)KGjHGlUSSN7d&5-s%4zQ@{ zUhRURZPp60pBv%jr}-#4nq_tbdJ{6OcX1kqF6c~W_kqvBn4L(?cNe+Ev)%NFqJbtN6OpZW5Id|H3#nm9tH$_Q z#G|4;DEs_ZYY%b1-dh^f-n!t0>A|6@l{q+$lc2`47Z1BFC|35sX#KM;1t;N60?+f- zZhQh0(sj8t+XcV~Tev^RU0aMEN?Wl?PGdi8*RpD?4|X22qdc>++L^1U67h!)v%h*m zHhMTzMg3wd-0aa5sjKyyOm1p-JNVv$gcsw?g@C)#xA#bI@g220WW+Qcl88WlSXq}# z980EmI93%4Rwu>9veZtk@t{YGTu_ypck`Xjd)?;uw;T?MmEkzH4Cdj!ZAfSq>U~E= zg67}2&-*xOg77PKEc?>S=C{mR723!LuwTkQr`|Y6h^)EB8mwxuJ#k^;mTZr8@TZmi zfuCcPEwiJG=R-jRDTnE|#9}2o#ANtu1Yc-Ni8)V9BOjOO)|v#~@1B7pQsW=N2}cpO zg&bY`3!hv=iZUn6e?lW~Ho0$_y$yCJO0)V=2U-xxvlB+QK*Zk^h6B8l9+AY(>ZZIR z7qIV2S24aGS@CsY4Lc@i*&m;4ylqlyw#dodX*obz(oJ8IXw)6*&mj}@2V1p%Xn*xG zQKZau`-sS=hayVY7W|#Y*TsuAvC^!H#hvAoZM(v!GGD%C`EOZRrG!euz8jYHm+n-Wna1DR;k~CU;>0bh_nRae( z7UZS#P|{6kaiAS0LOYSo7bzVVwC7&9^l$KS7jjbM`LU%5ljs&NmZh0^0u;K1=-4S2 z`fi1I<)cyR1fNWzKJNY$wW1S-XcauX60R3XSqiILat|Sh_t(p?hSguMvXhfpTY4^! zs-0K`PaWXpyK9j>3H9LP4?D!;DJNaw#olO+0fjJzPCQVLiLsf#KuI8-@0SdYMCGTe z6dy1~mNrZ#&K5=4>Nqjf%}d~zZ#HVJdizCyalYfA@oBRdmE#t8Q)k}sRfiP_5&NZ8 zv#=z~<@ouIrUWJj9lX z?|EA=(RLxW#$Z2+NvLwA&AFHDGth+6|7*AdEl#T79F6O6o)sZWV0AgG)9{OL`Q&S5 zr##a3j}ALoRMW;|^(|HC^G5ZSiqw1ZiDndg&U>rVLRLMBeHkA9wi+q?wQg^xgS4h8 z4z`pTE@EpePIqR2G;rwGM>Z$QtVW*NLYQz?S8-N^QP+gXlA1(vL|+sde-ITjl+HEm z?c!8<#!da!_xAx!We9cE==fTN24e*WV9NXgja8bAS5I@aY7gueoxJK-Iz*v4V=ZtG zK>}tqA+(PkGc(_799RPO3IKa?v~YL`vQixmo7O2i;qhy$+XvPt#f+#M6?m}!6*|-o zTtU2OlE;lVyw)yg(V8Hzb#+PVoBZUW=P;b;;*8bD2)(6UMke*OJp7}cryF+6=8M%6 zm)d@K`c~!ho5f~s7WvQ((@6$nd-XBbl}+a<3$=pIFTHQpkdRxFR@|dnOUL#w=4E0s z%3&BhMvGlkJPDH1E&Rfi+GA|CLg>*C(4A=?*vu=9RneyRI@irRZE-%jQ1r^Fw`K9F z>)v>mS&WZnFk`17Jo#mekZ~h&yBph!LCfo;keeKVtB;-997j!?F|jhz`di^MZJ(ha zoyD%KYugo(7R~`KMDp2+MF;+vdBqbz-JYybc1k=vvC;25Wy!?zLs5eaS6~WLzRaiv#ov$4+k7&$fnNBWSVuL%QdAaHWs=tU01Cc2p}?Gc|P{ZG)74&#RYBN)u?Tw5(DC!c}U=>V2#%W99qbt6>lNLiq5wUuaq;hgu z!1J_l(yG_#EWzF*b|O;JF(}iIB0UlbePY|ty`|r~XSv2^rE_Q5I44@S;hwY!am5T| zYU~mxJdsVAP)iTEc&h}Zg4mn)28*?|3}(eK*hCXTf;!G zK(G)XxFtZ)5Fof)2<{F6f@|UK8lZ4@cMI+$gg|iD!U}hH`w#ba_wBFy{jXo%8-u|p zimG$YUVHB)bIrB3<&fP5tCc`H;UwJZZHU9MwzdV<=O!)edqi3RzUy5iZP>ta!R1Nx z4M%v0;c%XHAzUkdhw?Q1KF*7#&WW{zMWf_j)RxEvM4k6?ZDVGYA%X}w#_T-{bxGuL z0rk;{`>LE<0hLmMhqa9FlyP4u9M4Fjgt3?XY<$*4pUBe?^V8_a6207+=L$ zi>Yu~8vFX0^WdUWg4g`Ytc=)#*3Q6{@b}#{4;d3=Jpagf@aP9w0JT3q5}D&5NLfll zuebX#wL--OJ>;Vx3tH+y2Q-w{tnr`@)ZP+o=z4LgJ#EF`ITG2WDO%ZT%>qt;L-wO} zhiRzy&Ryx7Ai5W_7V4B1sBWKco<2g)bn)iAjZ+3LPn2wUhv?vYy^g1v78Bm~m&@0Z zQ`^?hSGS_PiWppKLjy6QZVJg{o%iB4KC+((cer0o76OB0oI zZG|)J_GNlSx_tcc%XHHf>*r)XJrr^uh^QsnHzHJNPf74hoaru5?A^2?;CpF( zzi*dqn>vvPpN;eHD>A~gN7gdeeVqMhO??mADanJ3Msime@ z&fgjF1qS5fm6|a@r#PCbS@*H#>JC5-_^c;YdZ`8t=!3P>CL$mMtEOyW6P3B#|liqP+ZP)|8a+HEJ6BjyH-l)4IF9CR6)S$Sf6j4>?$uskO4O+Jol8^fe1q z?AtFbuMfA4o!2`*Us@r-QEw$dT|*OD9n$xyu=m5I38w6Db=yHDzSVUpD|OY88I&e8 zdOyxJ>-TJNgj24jYe3QU%{H}ZULNzjw1`7oIThCmO=Y4jR||N9XD;_M1y@Z;&l7|X z5X8pOVc!r1N+r}{3dSMmaT9^1y5JzmcOY#>EN=|dmXpOQaN%7`HDcjTIoDJXhfsh5 z*>}g_>hm>J?I?f5D}5fGon>f%TD7C(bim%(_T+PU9oe&+*p>wjs$NWrRw%^vkgt#q zN2lQdvu=lbAFIC7P3jwSdjGV39u{LoK3>q}7X-AP-Ji5sAIyOroAtp!eI7A=gSXj1 z345(ELV$^s>iTS7Uo4G09mCq=tyud(RjJD&g|#=LR~zE7aL+;F*+ma`56`0HteBNm zx$Ac0MQx!+BrCi~`Wr<^&d!9S<1tD49L=8FqTR!-G+dq_S>g`SRrVOt*{B!hUfAU! zA)7kn46`~<^&RqDlUN}+<>WF>xqfDIFYL6Ae%MRd}g1Ub_x{pgAKh1nO+uqvX>#;LSc)j1UXX|jiq*LB^{jLhIrn-|G z?_Oa_zzZp#6G?PijDA5Jep`KLL{Z~lE{Gp;mHtdsr%zKoNWvV{3E0vG4@54E{_sqq zIqytjtp57I1@DXpDRo#CVI7jSk^Izt3zV_9L;kJcr1idG)~tB*`+`X&mDP_P7f+K^q~e@Khnf(Yf?l~z~=U7gP+!(a8sQl*a|M3=0*2htGU}orDn$HIKFPHQT10;uYqSP zg}#ernmF{<5p#WsXO#>VWB#p7ECY*rLFWkjN4o9|gImXXrbt9-%g#X^-RcG4g3Y6` z>$Kwi%T7a`2gDwC?2QmL+`cAGc(41lirEp^zVm~$Yy$RvI@b3)uINu%NuC(aHR$o~ zdHdQ6JUjk{$B*;zxifzEvwi`+a*zv}eMW#|(upS{O0NPHZ;_;Utng_?zHokf(ulYn2?r3nmeDW9ukvyfm7 zJG5xMFFqlX=XTsgrEG|FZOicdSsUxc3r!1iV#(H=a&!&$()GA-i!$i4Z*aH#sulN^ zA+h0T_5_Dk8-Myerx30VvIt&_!dL|R(5U1b?R>DW5o-~)GN$yIb@hs0<>-x zSls!`yl5Bd*l)CF6GtjB=80DKj792W;T9YhdN@2&;7KCWr69+uMr|$`OYBW9=V3Pd z1w0pcmhEmKYV-a@F9N5r!a+PwWIBjvYlmZ`4T(KZ0WaTfMBhtTZgKqi2boAQ0mr2z zaIbW|00P~yAu^=G1oA?aS!PirGxLHEWkotOJ4;TOhs96$ISnN|T34(HX zt=4*UOW;dlH%u2AvPeC|5R2!tNisj&ENW^ea(|zFf>eTdc6==4T#)>+t31AAy_u96 zPh$Tvq&jVb;IUUe1c8?wU*5B@jm@1GoueY*MbwR zsoP1o6IDK?N87@m+A-2+1Oi=&BIJu;)^$R9;CpGrJ+507r~J|nEQA9EE<*N@u4P0C z_+!&0rLXEGO6Gv%Y(uLT$XW~ZD@kW(P)^kdbv#PE;p}H9N|KD=IN!U)BH}Z_2>#n{ z3bdyXa1LuhR@lyU$&j66h%IC%H-QE5Q5s8Wk>r6-#Bq<9epEpdLA#%p)PuT9{Qe?HWrx5J&*f}c#QPZdyq$8i1)^zq5rc^m zl}Uch5Dq+WG|i#Q^%X|Vk}YItEVtGJ?~RRV>C&gb{TAspUfSRXdLhl`w__GSv-AV^ z!@L#fRhR0D@&E3gY z$;5r?^2_N*hke6PlEB4j^$9}rCe^UgdIo21{k25uE?KrV{l=+}xUR|*Q3y)Z&g_|H zuIAW`jNlviZAYJ!8OKcF1~Wo&k)8s^_T0=*9(lb@c zW^(7nI^4h^p~+FBLb;xZN#*))Ccm@28>6qw!yQRcwDmvd0T0q5s*-f>(a! z6 z+-RTVlHjY@;(cE3w*~2pALRcG-`;i_({hQIjy{1`4KdDWVShEqWyA2$iH29izHr0S z{)tJP*3c_RWB`CL(%+f(AsbGzVcB)BAnNkv_me~;eG_3Em1bDAmyckAa&U%((aqdaeXTDVtpPCvvJOzoG+t*cq2t zuswDGGtY&T0VWaEbQ2p_$51jTr#t^((RcQE08yTsN?GSED#@dxsz& zw^5I8%k%Cjylq;J-iUB?w;wk94}23MR~|aa1x{>Y*2Yt8daoFjC@S&sHXx=~K9ACGzQIG5NBTsK#IO6cbGwJm&YYl%)cJ7sEuwd>dj zz*PdDpL=%@>RSa*_qhrDh-g3Ur&pHfEqtC^I{%U}*6BTu=ihxwpG|U1t^oDZx64uR zf-nIwnB|RKgjaBc{lWpgOJhyudKk32!*N&tMQ(UemJQf#?)81C0`=B*)NIM1_jseH}4RfF`0IF zGp>#B^4|00GzSChaR?r8Ldo%s9hSKtQ?~I1m_mh~e*6MLHA=Ag$d0u~Xw+MAWY8B& zUJCQ$=eFUK?;z|w3E8v8BR}i2cHc%$y*b}5l_6bio!kBd9^*^@K+?@?;Gb>t6o0zn zGu|=z6F08!ju7h2xU6yjIPI=zzji+hX-NO}6bWiDhqhoNWQYX08NvKM)p3Vf@64f; zbBvD`q2qeDLQ%4^&^aVLs9BE`s4|u6Ki_tR6X>R8zJtJ&0J}$l_fK)nN5HnmsPf)tJG&=`rRilpTsU+5~NM3fA@ zim8eDr^nsCSNCkm=8>2}qg@0m-=RA-uKHVl?89}T*D-se;DMY^#~9Gc&+L4@9aw#W z{u$&}#4DcZ#SfJ{>BO5`oti^1&g`DYSF+bSi`3}z6>WF;DvH&4sD%ZFBAgY?Y3~+;)8m*7!?-oz)W%pbY9Zj9%@tY>BKChcXB*iEdy-yE#@Ta~cE8VbccE-(OE^|T3 z&SJWk%48<<$8YRrX^;KesAhZK%3CGgVmAWgMoY7xJT zuv9js@x$^Eda2h{m+>azz_~pbAPYr$Gr|AK90jk*F9h<}dt-I^cG1;V@($ZFxwG&0 z(2)nEMHGC4MfoQ$OI#ES~yZHCWIHSxFg+S@lf9iAR< zs*&GIpC1L75uKq*=0?HX^E_EgqUrnExoC~%HZSl~FW$Qe`E)$wc=M6F{lHT{QKH!` z^b-XMgV+IAT~i7pmL)F>r_Fr#?U~p)D+{{fD@u#*nwx_*G4dfaEbdYr8l9Ve)~D|jJWeC7=AOGYo5@gCIGOU;&k>A7B-`?2I>EueYFvepd3ALof zD%JiF-ki+~w~F-^a#w zC7RK}0c{(P_87z~(e6UhiYpjSQhj#7#)c^GgFeQ0-=}9T0JMr(QIavT4}3deZL{+B zzQ~x1F)r&|UG762d{U>lRaB`^VSJO%pbJY?6DLI_+m0e~Ms(i+tEMU#t$YhXPnwIp zp*k{J&%J>5A`E}LA7dZr;D)9LZHKg9muKW_8hh34^nIOnOh)eaB;glEoh82vlstAh z4htF^2*zlSx;S`Nks>riY$G9LP4a;~y#O;R!$FMSL)*1H*y+sc{!W!mOlzJxl#WL$ zYk&>T`1L6dj4D6Jb}gIGUSo5h?Qk_i?m<0!bMYRm^P+=@LSIQ=Fca*=)ihU2 z$f4&Eyrpxw;jztzHN=1=?mDK;O4PLM9xldgvmkC*Yn-`bu7ub|-Aa^bl{=Et`xeys zHG^~6UB)H<&8%l9XdYk{0c`|p7qY<+Vdtq7lrEjGR%Ec>`;L_hszb zrC^{?C78x$AP+es-gfBShs;u}!waq;wcLF7q3^KR6fh@zKkQ&!D(IN-srKiO2KAtx zHvs7j_vl1ui}-bgINnM_sMT^*LW@-DVpIjPu~ekB?Fq>@cI0E&*P=LE6Khb^KpOX{ zY*^xSoNvf;RqdL2Sa`>%Cb3VdUcrSIEcXTnGHq=ofnQ1v^*`V-f}I`tj}G^m*zrzF z^$1WX+C$xW{5it&rm(pIgp(qCEBPZ6=i=6Zl^sz7;wiT_K`JFi=OYouM*w+urhc(v zLaMn?ps)3C00d?&3{YfRkTmXNCkLWdvUg9(Fs|$Q7c&RdM|4vg3%0+~o(u$k{eWy2 zr7J4?DIJmUPrV1Dt=miQE3H^KMA2q04~}?wwsmn$NU*Z>1u@yt8ZQxic%eyYUDokH z8E&H)l*8p35wPsXoF#CNi?%xggB^ab*C3Q{iSy(|?CWuvbDg?+V{4uHh*m4m3N=r1 zsY={Clh}zY9=H5h(@Y+?MMatvE4z=14mqdb@lpvrZ0}F!_?z4~ys87yP34B8$heFf zg+r&fKKqnJ2a9+57J6-0EqV1l_Vp@VqPS4_N3RSS19sdxR{~?hhT8arEX?-@dgg~> z`YYZccda9HTgJyY|IeRTX*ir*0q=}l!xKnspOT<={X+*i!t#5R%3jH(oM+wPa3T$M z-vxhV^hB#P*mMUJ!tCCL2t#W?r)tTL5rHh`rttpFHZ_IR-5T-yrM{0KT?(Zy=8KVX|;zL zYtGnAuZjO+C$z$2m7|XTVwv% zymsFZ!BvH+?^*+#xzpc_;c=87VG7b$GXOQ3WX_qzR@>WSPzvl3ONr8Wa) zRO|%kbLOgUZ=HIq4xJzJEznV5As>NS^6(#%>-Ys0tnNO}7*p(nX`UpPhhRSNtv4%; zz>`2T3b_k5IoKd~k-SUij6r3N48^wmq`oULn5kh#({cZutcDxBjfZo$`=XKtSRA3Y@O1^w zmp{t;+$CZvy76{xx#nr`uqi3LdQEPxCXwHVt1ZTs=@Yq3K#%J;?~aBrS_|D40!+nB z;R$L<;#+Fw-SkX%rxH9enU5Kqc#AaZOkSbsJ#6;T!ZLJTSPM)yJbx;}=JTYe==#!( zidy^(l-;(HxGMkh9=k9aQ+GR1`o19A{2%KuQs4;wqj;BwI{`-mJP}-6o-MrB8iSlX zsT2ach=9!q+N-7ad!Z}#WOL_r=vr$>s*{w{JIr!*Hp!-P?T!M@aP!6j+z2*aNjNM%&8gBJ(^j+myi_#~6pfd^~< z4^lsPiV$!9DNX{5n>iE014`@pY4PU;a=C1Y2dg$VBA#54)&~N|<5^4HmXE>_0Kwlf zT%eqCmo%{2ko@7vc;716mUXzQKVz*}vsMq{H^lYHe?w#}STGmyju?1yfDXX*?U@II zW&r+>+XFEjnoLQ8*${C^NZgD2Uj0nf&%yf@O{b-mR1pV@mC&`Hk3>rvpJ!XYaM4%W z;9b)MBL+dtRSMmTf?XeyI2NptS(kd_+EY`pX}Q_O4UIRh7wrO=LTC*7G6iA4+~hwH z%?x+nCK3H37^I;FJgL}>Pb9$O{-I`K-}_j%Wzc9>u1mZcvIE^Q?48^>%-w z$ZYSrY`dy`@#oJi+ukW_NPgS(zLUdz+(x0JWpYA9sJFPpBl{pvq(fDnJIoU}IyaSd z`~(-Xp&KfT8=^YO5?&M68&6{XF0XVh*2ztieY7AY5cWmA_;u3f>%Vcyf%2)$%GTR- zHxkajjmtl^BTHC(!a8PsbB}6DO2O~i3H6GvLGTYr_zXW6ux6HhSdlr~@2N7IOwB_< z-=kBprmu-X99`)K+{ZG+<3^oeRIh&>)8nkyV847LnOT^L3F;8QFS!Uhk7lg-T$V18AV!Axr6s6~3N#?Sa(2hzWyl+2MLyh&09 z8*fu7P6_i*5)>iuK^eURZ#nRdjt-ti|0ztMx_}wZ)D++BVj;)3S?uq<0PeVyf&8Qb z;J@~&p(Le3k%_qD%g=YYGw~#1eZO5(d^U_l_Zh!K%DaKGwpJ&z6&DdmOnfx%hM+!m z#+>$AiqvS=OPNh^mCMV^D*<4!qCm9mU`aR1tzNduUbqPDL+ZcG(cfetz)9Be6>Mu0 z?GpUwI?0n+5-=-XFdkT4RakW5a7v_vJLy#DR?~W=QcUA}`lX8jdcmVh482>h!Pm%Y zI_>ZMdiTy=DDlPLS0!u)vfT7OHr3z6_6P0k&rAQu-_$_@H7Iit!G-fFZd_X3%cDBX zjPL1(tH0XSxVc%yy83?4YfBEE!~g3-Kw%*@QihN1a`2T(B`4+H;? zvO~k6r(5&VXe8714PBfSL|BPD4)Gdo`n6^Yr6B~4>zN8JjIoq0W(RFbZ2GGv8<7<) z?hR%mkoucR^$^NOL1F5{y{HR%Ny9GwZ?vHQI5$ga0w5V^NF1#hyTgHbkRy8PT-6ZN z|2%8nV9N@vlzaihsZ_mLzV&=PSg6@$HOoyYC-4ka+U};x@Yl!Tw%HUU0+o%Q#Hk5eFR(YW<99Cssr?KbHoBpZ$%Z zj?4z@EfixMKJf0ZD^15Hg+i^S8}f#&@Bh48ungQt5@qP1T~`jpf4bklKA%r8)spl$ z*pC*?7-W4Yv)HXp5;CA?>+5IiZ{=xeOodf5-bTJ%M=5W>V)7e(b}M+TPW9-Fh|v+d!mPFL5l z{BY$vSBF$XFcD||WI52&@#3TK7y21lkBJ75pHLqMYI7L9R*jV5FIP76Nx3pv)2xJ^ z!9f)|)iOo%DN8x&6jl{&u6o6zqoaVy!6<|2D!ckwU<=N+x@8nAmjv?t#AQhCy;F@% zX+8FN5;Ptdo-*-sK=W)BcObbiHWuv4%TY|q?I@*Oo?6J|V6jnJr!siw^91Sapm?IV z7=2HJ`=q}o5G`e*ZT#-KVB>mg3*T((Yn+k%M4dEUT&&XkmB%{{4(@ufcPtSldvi`^ zbq#ocv`Ptnu}$iL+4!?n^TTM*e2XF#2SUO^{?dWzqFzFZ~pZ6X0JbQXoz7lW2Z(o{l!TV z{{38Q&F|;rr$ZMG4{T|O zAhdpvWkQO$eQ-PVRrYpK7bwC<2!A>Z1N8WLYLq^b>8b4ioL60lJCNc$INI)&_Ez14-KvEP z1ZT{`MAe(AGe5h%tLK+?0?%B}VDVrHWyQ+hc$zaJ*C9R4=WtELX1qYrDnE2a{-wUc zr+E!B^Zk5uJ<@A)5QZo6{-EtaInVer$JhWefgQwVeodz_d95yF_-5z8bCQ3=c?Hy{ z10j(9{P}Znf{v%E;b)_5!-~dj3h`-@;+jNOy$0QKoRo)Fr$q&kY0uT35urZFeUN!5 zfaV~t>{xrL#1ssEWv}Q4wHQAm&K%^uu~)8ob~-En$|n_2p*9N0v1wY%5}fY)vA@46 zfa)-3JE4fsHwz3+tfNNf^6{hkqc6T>v7djlAcUK{LXGE2*_@~@@g*bLUz~4t0Ob!Q zSIcp;a$~!{l#nSeS}M2Fzv^W(8pmf;ZyLp_HGoFHrb~4(`aH2+3ohhkW)`e9omUu2 zW^u~8-e}i#z^OHWMGo*v;n4PY=!CC+!(h+Oj~<$d2VS;fwiNT3Zcl4)6ovsOa+n4p z|L|gXWfl=i*KnQ?!hJqn;blLUyTjVkuUe*F0Gt`nDU|Kl;6Ek9XcP0`F=~I-yF>co zd97c-(}uA2)81z2dE1DTZ6K-FdEB*%|6E<+d_ROi=Bn;+Mv7@q&(!9SCx4|oq6AOJ zQ{01Zof`-N;>BeVtXp_TK?WC)z^nOYRrW1YGTEO=bm2lqeYIP-n+V^6XX%u`sPZ=D zZFUJI;nv?FvY>sx@M=FaBA4ebcUk!yv2y3|{l(e28!2KnVYwt=7Y*Szr%4Q{V}pc$ z+ods#5-4B0v?ySDkGn8tNZG5PAtdpG@aEGwv-SOR1o^U%1zuUUoZ|XmNP$dBnU^pG zWn;hm4RP94TUf6BR%V^$ViBHpt5GYiDp0iu_uY|u(sDX?bc`jIVOEEHe~SuGhIDXH z9&(pfSBD?!eBwi9bov)Q1!wY)x?Qu*Y6|XjK(lVk1)Ew{wE%51F97<%Yk)vvyW^X% z>q2Z%werxu3sk=vgX0I2wn`-93K<6MffIiiduWjkZ&UHf5U;RcM>~^4doriFk4Ckl zU(;!}-J=o0zw4@}<>nS|u4gwLm8(!FQIVeSfZ=!CTPSJ6Vz;4`I+&^tYO=XhFE)$o zO`gEuzsskRNzdBwI=^DyjtbfzK|fP->I@u+F28y?F_H^<0_q|yCtxeCP*B7OKJ-dX zW(dda74nbqn>*_2?k>qSn>eM{vKB@>QzV|P$8xMP+i&SI`_d3&Y-mi^P`c8hOAWqU z$kwQ(rOmTLswHdBf}i9+NF58M=QAIKGbRw(!>p$SX4@EvoZxCZC1c#G5fMv5Vq)B3 z^hBunec9<*qfU8+JZZT6O;-}>1v|JRBKY=Cw_K0A;&=Tq;PXC}*c?%))@#{V1|e~w zgADU;4Bs$h@z`4L`ptBQC7q;Bq_CT3Z?AL580d$tODoTF{hF;MXs;@5|9)OhVG(pl z0NPbcel(G0v$^sM2Q~J!R(DjqI*qp3j`Tyneks$bl;hN24!UyvfB;5zY~?axG*3Wn zvDDPytmDqfr27KUk{o><+O1K@kO!duo-09Jqt!eWgGEG0h`b--Iabyslk38xodpv& zD|H5*rJWfMX)kg7m?}yu<#II1*%16>#SX`@v74na4o?+VEZ1 zY2bCSn8F!F2^gPyP(pSfSz>#ej!}sN9UgurLEAQc9VOo8lemG8Rl)kvjS6HK1XYF?E2TDtOfHtVIx7XQe-L3>S6gh?UmKKq6nIFFH}>;Zuk^MrKtn zx|bN(;b|FlSw8P}Y}E5`@8R}E*im%jB6iCz6%;m&zVRWUF`YIv7y>30t<0c;-hRpv z3*Sb`HsWqIN>NvznSDBU8(7kSRhwe^(s6%$@T$?H+ln_mDrt+AsKXzYqUAmM^5FM( z(TQ@G4ZALRoFt6sUBpkE?YG9;A`9o~7v&*y(nOfz$1B~{{jyVfnjmKJCrH?K>$u3@ znJv#DaK^Vk!wELcr|3iVXvXxd*%OZp=_WZ!RAU0MT3ugwh}A?bJnwg?H9p|m@*ta2 z4|)s|*Af6SS>Hk9M$}_2^LKx|7vb|Yt@f&_s-V#ec|Gr4&o+yJLqU9f3rY63Sd52M zH@+w~^21J@KW&#CD=F1zl|kb+$RyEi`5Zv<^XJdPEWeu)^=iDrCrB7YhF88$$PLR2 zR@okNiXxFD)}F4!LeIc^N<|9lK;4`gQ$l?FGChXVk+u0IM+Ly`RRw|WC9j$s_DYLC zYRtp=y4$cb8*W>$8BDqZeNXZW@Q`=IgS`$Gl#KbrmV|WTDYb}hd5sSFTv?^pR@s|6 zt~s83vS1HBgfJ2abOhYZ9h_(#Z!l>U&!2*<^-}68iTC&0L^4f}4CmVDtL=<+D4)`Y z-fYj{E!t}j1kc#ziAV5`ntRVb@!dfILakSrXYjXPgkrqUNyvU*_yUDbl_Jq_dn{1v z&|&jIb&QFwwm&1|O`cU^D1SCIEaE&tA<83%lCYe+O%15NV7@w9={{@0uU;>*8zg{E zHOg#_j$qYUPgknLe^qzAi-W>Mn0S1YM5yBQUj}@nQN~To#EjA6#&><68ed@bG$UxO zMwJ`(sg~S9OFd3End`eyr2S5=Sb#ymN9VE$}Ij=gDxQ{$weFSrBp~1`!WU`3mRjvURR@*$S)e8&ayxbYw8Gq+*|H`3U%MXRS$g zfIk7V`(ig8+T=+y25ox6Pdz(DxF4h4jN;07SofwGNV^z5wrC=|ekwOja<`Ev4otw` zgXaI?3+gn1fJBsS|Au2%vGU+w23=JR^zft4!(q>}z63y7)6;d9^wRNbr2Dia{oZMVS-sj@JBbTm|;|p%9takDW%w^gT{a3X6!NuL^Hu#Wb>+JNT5C zJ$^#G+1WhSdD{K=Y>p2`8~u{s8-N!!W*t(9R2_)0QfILq<6wk#Oh~6-v*nzM226yD zjdcYDc+)ZLC8q|1PLq(V@5;>+HP}O@Zvn&R>RUQ%LIUB$pLmy`BB|fuQIW>f9t+n%=ed?)@k=7Mi5*7QVw7N z>#OmML#CLo=RlV>KFEvdIuK`s){BU9b?5IVnUY5;gc_JZeuFz1H4YZRDx zwvey2xkQB_Wh?My$yBLoMLXN*+_p}^#le&!zTS<(mM9q|<=9nt9OCJL`saC@ye>QO z`}9sg@olGLRuZ53d%MN{5$3jGW>(JQebfs4{eXsy2CfSFIdun2R939ld2LiD+j(v&I|4n^Zob%Fqn1uuE@gNA#BU6lLx#U$&}5zP0=AAqPWz<_ zQxpH0cQC}Rwy&k$!6Oab$FpoTnO3q5Yg5q!7_o8i&Q6_X`B7b=?ifh>HR=t3!z;yC zK87X*PW}MUUIaLJxHCEpqY9J{3-7ogH7+S;)LSQPkviDiPJ5I4djJO~LiiCaJA8$i zOcc7Ia+UJ?Q{fFy4+qk*n5nL|E6bDFH&Op6Nh9HGaB#r4)LoMLl0iZx1;N$LA&n=vTk;(71*^?X zDK6Yj>rYpX2;uBx*)M?e$xB*~Rkc2~e)B_t-{oKw*<01n_;gUmC~^oCqS3#jo3RzI zP^9L3mF-v^!y-#+A~tawAUV;mev-Cm^!dTZ&#ZqMWCqQJ19{?rs)7y|eh@7;va}2O zB%PlyVWT#Nq-+@l8!$&DxoCa!fq)UB(_fDcXR%Vqp)ZUY=?YI2tGxL--K*?kbuVfZ z`xbUext(u5EiYdtV=wIDKy$o|n58ogmz7TfGr1eX3p^S5MFp|@KT8huIL8oc5+t{*kpw?(rLwIxBMN7v$my|Y|SBdQg0K-aJ zTBX6(cByO0?=4Hs#y{9je)|9fn5m1Hlb-i$7iPnz9xu`t0moc%#Ve!u-Me>bhArU& zl@Id`y2=_FP1QXeW3J{^EiB|-@Y(YlI_{EMZ4o7mX|p9H^NLCX1QQeKtwq~G8J>2y z2lOXG_)o6S#y2ch^2=PSG4X~H*<>^7)l5yk8f;kA>aS_+J&!;zo0PI8+8^Swi*yB! zwmEfOI)e5c6aw0cwzS@AKL2?@PeH!@sJjgxCh6^k;>2|$Al)G8e6` zjt<)Vsixl?xGaAXwJtJfIu(kOxXC#1*H&{;TpVw+?VxJkq=%HKRb@9Fe?=YFJOGbY zzYkrx8GGLJ0`X4K-8JOwT_sfU@~LdQ7(yj$%@OaU5I<3tYOJO@Yk@ zAv{hV##wK};5)xDaGD@j*^DSK@D26!D`j}xOJ{X8^`12;`!5yUV7y4)@56YzH(r&d z@wKL7;C{S3P00{6;uLC=zXq`j{6hEe&Or$>gJoly@vf{xl;mQB1S{8#d+^Z~0)?!y z9&~5|U%!5>!CcsLU%B%CiL`m<^M{24;mjx`s>1#+eCRirg~;NTczQP=tT^f)-9^(e zuPpo(xkoX>Vb`;Qf$hnaVmh6fPQZ~_f6|;Al_h*#Vo0Y_0;tCwQRDv9jfBe9oQAf} zS_1GMX8U((2m>OFeW5jnrD4M0ySluQQS==9 z`8bgIs|l^yK|H1w+BDBrjVMRScCO!CtS>0mttd|>vpOvKfpdR(L~mS`n`;I@!k%V5 znV!*s!#Cqp)Kf}ccPD#hqpL|~>$_KGQ~RyJ217>vLdb4b2zYvuXZsGt4OMtrbeMjA zihhU=6XT|K<34^tr(92;#=QWaxnnJRaXO}|>T%Lg`2&55`$*t+dT{etY% z`VE(V&m3-D4s1X@vav>Vv8o~lzkS5@6Ux&EU3SM$}E_hBX!>+#E-&4d zI-FoqH6j>!R?~Y5um~cXI-TZEV61ln4O}ycc*blGhxHspL~bUEl_z+3HxkwlZ1NGN z_DD=$$V-%~YCZAcQ?x-_(kP@rKLvu`I4Y9;P$0q)LiTS9QS~R{i1~w(@jnc1{`N7s zCU~;I(pTlZ6{>N2)urn)pZ5*{?e%~eQkc9&hmrDAt z56X8<@w>YOd2gYPyH9SuOu`sc8u_Pp#F|zsiy7rF*w~gO7uyv$W-UIg|9jNA7Ac^` z$zw$F?)SA;hr}xwYEVO-@y05ygy?<<_O{wJNSTvdM>#B%;T``A>`H5(8l}P{49J0t z)}J4y&D`B!6f&mGl>kX1HX8wJQvo@?JD?q%snUlfQa&i;&u0*DA(vbB7jfZKBl&l_ z$bW){0JaOjL*x3z7866su+^2%E-tbcH1_U`He&fo7Osgg(U8Jcl6u!Z`>3%>MQWzL zC}i-ji#c5d2-v0_xP5s*~6~r&0fDO#hCDiBS7oegV;5{0PzSTA#6TKW~2YtcLiQO|HMf3e28F7>bC(0c_A|LwrsxW=+tp?scu~h zsjx4hG3|+JAgYQ?eOe_soK*~vkjOD+@5XAX+)N`UkO*LZWp&`XVt7j`vKMHGFH0Nq zPwbC!pc#x)*Y}X$(+GcTlRQxvUkl{%2ty(!Py%Nog$h3-<1Xzr@wB9WRJ%Z&zcW|u z4N7R=KV%xK4vYq4dfBpNPuK8cQDF6$LTu(>+gN`Fc7?K{Bmh;ul78RF9+yDgq ztjo-(A~>#-1&6S=wmE(x_jj(H78by@(@L`z>vo>A`lGdKSBI{z2*iD~)R6snG;cjd3*oPT-l|KXoL$dAMG zPkT$1@P8G0cKBoSU`H_*p8xak^d5&-iT!i+e-Y6AKSCF%0rm**>>y3V|9MSOgb8T* z=Oz3Ke+!3?pG3>ct60z^7H(E76oBGM{OxE(otEXKL5CUudW+SVo0w*vaZZ+LIu+3> zKL_YOzi6p`KGad)zvFgaO`HXK9~CQb%Ci;fYIb#XUE6~nDRn^8Bxy&OkNJ0%h${f?|(AXjAPN$(t3^Eqq#PZgJ{*eRt6~xi@?Y(InCK>+9>q z7-AkP7CZUoK_$-1-W|0--ywI0r4GHvRxz|iuHR1dcI(?q0L1Lfb|allfXzxxH6r2E zdLmictoIbbwQ60Ouvo9);*BXz`v&PyuS(MK!tt|~W?EGltKF#YS#qb3Q67<8@F3nZk^)^jkSL?T8?9QkW`^xMAc~`gKB43% zWhsL9<|pgK#VTdnD2o@%!N93L#c2xdK0B~y{8d$L6UyX^{~uv*71Uuvs8$3=d5ZcY*02XeF=0NaV+d*2C6GQ4e4!Z@)@ z=i^BY-4!H^2J91G?vY+F$9Zx6$=o4wxV6ihpy)~P6aF|`Z@eIBzPJ3Kk<7PyPglcn zXEwU^f4`_Ic>swPxmJPPF?O%Yie(4Q7a!xWuWgX67BX;KBBsgT_XaSPDg9b8bn26( zvR?*1`vEls^yZhBFuA$)hl#~f*7yvk)nkVvDh9KSns>OFLDiriua9_zvXHaMtu zK+ZkqqWgz81^FwoYe=el*O@&oR%_tbLTEYNhsA!R7+%Hh*(}ScX&DAIzpG1A*FL&v z!aWo+^!07b;<8Nw8S~7a_dvgK-Z!34JI30jgPq_97#P1yfl-OcI-$pfc_~dsp71T@ z3vi3CMzcn*ma>kzNaY>-3s_wv5e2APj${k~K^YQoAHKP{VVH}nJ{H(iqN&^>@Z zTODGk8A3h@z)qnyL&tG^LzY-aRnIpgj8t^DeYBk1kg!KeLyD*>eb2qNmzmAXURzH0 zK)-DB$WP*`QPFg0k_9T6U%wP$P?}06(TkhO$Rz)q6qneiH{BPbj226g!(;a~ta%Ca zhjg7Z0$pb~axD)%Kquff2=A^C^l7>gvet8}i%^&AIpIa=X;h>5+#3sDF1p22;lOk1cm=wwdMGT3n0fMrK=Go*ZXb zR>oY~10h6WiDqA*J2yHOE4QAK4!W`^(i_^fXZnA&fmMk z!SpF^@ViXM_x_I0P-QgUC>3RtZ?@>Fks`V8t_>I)*__HQ&d!b(ZU*nfkj^Jqc@VcI z1gF5ai_7RtWia4ekof3aBFJ;4yZOjRoxkC`fUWA?24o`CGUTqFwpsdTYL7W`Cxp*k zMrC{G;Fiso%l7SL2R`ynY{v_I;qsUAnSF&C6)Ct2F-EVJFFq_nqtHb`O8>9;)%+=&rauUSOxaJ=ZRt z;W|rUo%*pHr>Lp-_nIU;*R;8&Me#3R&n%US0nX?i5fke{qN1P>@HVdP?>Ji@3naE} z5Njx?kij{?@}H z;oRg-GwTNI^5E>+BV085KsUbfyu?q=2@Jf7dyronTao(6&^Vz4%AQv~Prk_;-^;jR z%k#T)2j74li9?hYaq@Ye68#m^Crj z_C;W&sw9@ygTLMXGtl7=SjR9sCSsETp^nD1v?RwVl~*CmwbL6}0FewKAxOHHY8&?w z;PpQrMTR7L@j;CH?)rO{aPimt)Tk~w7mxg(6;g3-}(58dtaiLo#Vff z-L>t-OJgGS8HbiWKcjL?mH?;N(sQ;(zO2<5c%_6r*nRFWUO?Jcq%4lWv^?ziD#SJ~ zlxa?AC8j#SDWek_v2OPquOj-gGeTgoaF#$Qb7Gk@x46M<%m?zNN;ee?Q?y*H_@VJ7 zlePTes8VV$fG!E6{l2)@`6NyBRbN~o`4?b-&`8ckOGn4J(ukl%W{4RAA!C`KO&80= zUdBVaV-w4BiwR{=iVkMP?M%VtSIK&h%IWZd9LR^j(h*^H=VT&}qf85seY0M!vh9y0 z(qt4-tS8*Cg?ev%j_pa)kXKO}s=OiW7Jkn^tQmvRp%)z^<)tCQ7OzEvf>%rOvhB#S zE=|nt2*bB2_O2m2H<@WG(?NRb9YrA`csVEx1yoWSjw&Yb3#SVPU86C5QTI_A(Y^9D zotEbT+ebl{2bw7CZkPT^LNjP19<>P6M`yo4;@ebc(S?o`2wSAzZ*Z|B;&u67 zo}*&)_MyKm_E#k`C{irr9s5j`yRse-p3=yIIbR{D8`X4O<&8S(wa?EikiXTKb~!pR z5d6c!ad7e-t>U42I*p<}rkch~?#h7ZEw`b9PhkM%|%iJ&ipzT{~pp=Lq1BRb&LZ+~4BQU_2C+zK_smUoX> z%Qq7QAIcw8j`^R;5qK+nzRviP`ANy#I37}}JztX%ad?DyYakoy4ZII?fmV4ceKrgP zSHY?+@MCcxWOT#aWU*;KvseQ;s9)_q$U0_oD4pAUx7Wj1KN|T(KKmTh#oldsWJy=H z!91eu`~P^>e_4LFA&cImVFRyf?I}7Z(*GuT9U4#q`2t@=KG~hWXoQ^_d#mSc`8FPX?0DuSE5$qU`XM8rpsp5eT>H%Wn)miy3vC5Bnmi z@iWlpO5%nEVaRmTSvc#f3RthT2Cq5-EzqDNycS{zzc_Nhhy0%;su&uW&e_23TWMv9 zhAPH5BEN7@xrR9!`I6U`b>W8p8EaBKe6?XbD-Kd6}iDI|YoNH9> zlJx#xt@&YeNHYxwOtoh$&6yvOMs6kb+vQ7|&shjuvhGkb?Q6HpDgJ#^7nwr$a!RFe zMh2R5ATRNUsm%XqZm(Hb4rj4SjPCw^o^|R$?D|r(8<%2Y2!Pff{xcsuaH$;}xwB z7?5g-{6{Es?;*!;V;mdNdBoxpxWTfEZqwLsw^EffMHa()QUVO*G@Q(|l#2IWN!+7~ zhoA5(@~B7Sc5H62UMmWIxGFK6Y+&s+_x~BIvEejrB?oo7?7=C|7X7Db&I{@t~%`^nto{^=4)qde7HieQb{Pj9pU)6#Tp#85j) zI6h+K4_~s*uU8=4$*mT@gE2#*u0*ZG5hQ)Gm#UIzkC3} zf@JLenAsIsbJ2aGGrR(l_S~hJb8_I!f;IghBxk`K>qowru0@G!6tw$J^)vuhg?;uQ z`ngvwyhy%y9!Bd9wvyE;?w;ZVBMO+rFQm&(4`38@cgag+8f}z_BNkx zge5I}=|n6R7xf#n<6_hx!PS^Xf`?vskub}@AA92>r#2U1YgI$E|ZS$109_VOr$^50~P(PEZOf{L_XxL z43pSfg&VkhL-8f#FuW7ZB(9)2qMi{v(QbejgCK9>Jsw793KNX$2$Eyxcx!am=by+f z@GIAAjoFDV&LS1!tE)^Iv96PT8!e(VPZHlHf_f83o41zuYO`gxCy%WJgh$+kD-{-1 zhkplCqbPUd{)xvrPG4PNr3)3oeyHxC4;njlsW4;t-8|sRt}@(GeaEHyW3^=#Jq_(Q znOX;Tf=D$$fLZR0rOcn75|kYG3NO(Xd8g~@PI`Yw+OV-KE8)1dr=z`JDTRIGKd-tU ztDc&#zqKO<&u#|0Xk|=~u7$&g+kB0TJ?+zhZXptBy}#%^TU%m;Z9ecVXfNO2-XTG6 z-#n^6lm^4!SfruJaj)&9gDO_q#qB?yTddq>hL`*Bx};L#Rp4)Q)*jpUI22g)O!yN^ zxeuaGEuh3hg-l(V?_vMxW4L$YT+0{LrPi%h)>^C#h zKaL3pl`va4wDcC1ykz))r1j>ci z`HMD$_C;|w)h0&)1nDc!yUL7ViNe!3tx-uykv=8tk>8L>N-@ct{PMpkiHHq6y4zd4 zTS_^)a3boMbLQHhJ=U6ua9@SL!97>1?f_O>>H<~c7hVXt2{tmah=jz^bLVr{KnDt# zwTDY`x+JcQ-qdC+mLdvuSUBCT$?*KYwO<7w7<7?kW#9`&YKXt2WD%-KuwHT-N#&$W zF?j*ka08Sn?!44$ew<~R@o#dS*X1V&>=&aeOjX%ryoUEQ2xk7u$EQ(eW4(;CE;46k zzbK(jA58c|avRaP*Gkohx)p-U?P6f?a=p)gUg`<{{O6IbRUEgQYfUVA+P)YtPB(#h z-lHD)k^c&F&%99c_qL@*q;lvMrYIH#nBioNjwxWekQC`@oQU0aK!2ZcZ1^{Uu*9h2 zxMD?p(-)@MbIfq+7rQgH{s_!_2Q&;}pnfQO#ipJ*An^e2I*iJriBpJ+yqoCBE7gm5 zDjXr~(_F+sHsz_+VCR3yw#{fqZt<3{2|vp0Ta8%{_?LLtA{Op!vi;1p_b=$@I9D~< zvq@9_3+);+v1joRY~38w@CgbPL`mz@uwA}Ua5`U?YmVvuZa3z#uVS|H!PE46G9Ev$ zJr5~+6X~(N?Va6HX+Q5-&N9_8PX&lw{ljCPn_K>V@9gXcSy$jB z1>#7P+sx+r1I@)u>mC#)fJo81eJqY|fYEE!d=k%vq?EBRjgkn%vfEf+r;j$r=r8{G zQYUzk~>83-xEn-He6R{B@ zQGa}*Rz}h|%d_IeuE!VZZ&ANb_@9nxg-D{xK-Fc>+H14#Eti=!`k*okSE<`2Cn+#7 zfM0E+eW&U#OlEJ^)#iXUX(J7)#0iep@)Lv8-I1eg8`7AEs%WSpb1F9L`O4(-mY*#} zrD^1_7caVv;o0ft@jsjBd)=J;volv`pE#0vhO1}yjo;Izpy%82UXnp^HW zt5!8L|Lu`w19Mp}XHDcWH^N#O#*PHR(3<8#(?+vQIqZq=zo}Onj6*T7lpo{p=5gAV z43Pi=ze?U(vOiO~0%#O=Vh!!T+t1cYE1gWiC>kb_7S3?yJaKYp+kzCrO$*dr5?J#c6u@+Ne-wk(hyYLn#H}eK?A-nUb%BMZ|Iuul9wV60| z@zG4n+)@4EusdgW*E{BNPJnM_hE79)+C%uoviLqLqE(XvSatDx)kA_7Lg%_IWCZSy zNh7ploDVAt1SKyzB_1tUmvDmc@lCg(?(K8?b-eiEQ!m#P6{X13->VV>PI!5l`1WrM zQ&OG7Sr!UGYGH!FX8_Z~;jYfUfvVuD5$twKr^KBbw6NYUKxt#;coK=G@xQwOy7)J6 zGUhy9-tDL2$G?g1+x}gowUwS)$w347qYI8fUf#x_DE%I6llM}~mLaaM()VC-{!tZV zu!Z9IVR?7?mITkoko$Bl5p|15?%RoX=n(Ejj-^`bwwE~y+Q&GLCZV5 z_0%eVcGG6>+qklKj-$UYhQXUBn|t}4yaG!GzRdD=BR@mzsWV9z>buBJA;*8q_F-il zcD)lWL^rg%NXw5Z-rII@L22#lXsdw{qD;780fQuj$fe4Ec5^vXh#kSaaF3dcByIIkEcjk4B|*&p66~? zovX5~T^Ji7HwWpYR-7TTo8&IGM0AoYabXK{jrm>vJ_tW}Cno1gDR^`0BlFjnYW@K8 zm+FFBo%-45xrhKRFk{EYYRPRa%+rFx$!QY~hMHh^*Fr&qzs=Ggi#=xs?6Y(_zLLE- z>u;uBFrug;7>cOhy?a!r6EZn@Q+5zuF;h4Hhdd*=O(tw-P{ z4Eec`qS0}pxWK{NDAQL+38aEeT#{P@{RFkAw8_g6CY)p8uf5GfTlI14X-n=x`bA!u z)d+;+Zl=CCba(em!?lJRSBq$dw+J|aF9*V0_;37et7V(YvuRI}*iP_NqyKiSLNloB z@_C^>&-)P;NA-Jm8D-Uq&C8TK+w4fI$G^0;8V-=(soJ}F0>xT9H%uRnuA^QFW$jR1 zG>jLQZeX5z>Wy3W3&z;NM9;hV6iF1Tn#55S%sXdPwz3(vm|`zbF9zMh$-^$*cpQpC zknrUryrO&1r~Fi6y}QC3x3DV>{mxdA%sgN57o<*v~LOuneXJLpiWXmxj$mqO#J~Xr>)2eaT!=e&-qj0cW zyz3Csang~`9RIVm{ZIPV*_W+oxY%#a8nSh+NRp|@y*e5#@LNik4jLr6ZmP!B9lG&7 zNLhINHu%_?+XK;TgN;icIL3iyKPECdcH4K-cxt4$$(@4yAW{Xjh8u!{{Fq}3^AdpqyYiGr z)7UxX+u-|@8WiZ44bIB(mOZZx$s<64Y6b|6`&Uta%5L-S9eUwq5vQTzm%qi=|w`V#?avv>iVgudFx3Qufynq)dNO*tXhyy>3 z<}DpZ>73K~$`bBOj6UTH#ZU3$=Ng>h1*hh~Pl2>|$8=?fnif^Fx2in?rk)!wjltXc z*EeZ)L;lm`MThgsM>eQb1$Q$RL>IE|MW5*!eCKmRHX6FgT7=Y5q`Mp`JV~8LySd`B zPXJ=M;rZXM61uEH@%5x}mcwmtA0}(6#>9W`9EXm^iDa`?P@_E*x74-)55F%_E}$ zKOC3r$P<{dm1j}i+FC<{c*6J6u}}F5L9OamXo}jZ&@Nkax#SVHo6s}q&z_&K#ynGN zi}R+sZHH{W3*Nm)Jhh>qC4X5(?k!EKif}RT-$l|_--poX%z*caFZedc&MD|lNVwNF z@jwl*>RHVvza{Q-N;^Im{cR-iw`ecf7ziOO3xHOcALV*24Q9?n6qJWpt`oEN1p#dr z(wmR9XTtf>Uc>YoOl7(D5AWbMLN*a{uB9W-W&4=6voL481z4tEP2kJ!jFBf|=0i4( zeV;LWA^xn^*uFPN18~S47ckmfQ#xXd+QNXpEe%u##p=ocm7(7A<|0SU&Iuqc8x^)p zZH9}~bV=DG@rUP4r`w=T6qjJ6qoYNy78-P?BL9LFsn?iS?F+Z5B^NVxo5H2&TNL(J zL~5+dAzTfOzo*llH7DM6v{y{M$dbEU{wl=VwCxN`AG-raeq0>2Mg2wH@^#tr7c(>; z`4cYB0rAD%LjqIX+5OM=z%(bvL2D8ByKY#-fE zC`C(=w?1)n`*N>ei(IZBc`zL$a1jPKq5`4}&I~DEA9V#GQj3;tmo{IoO(xlLd~W4( zt_e+>U=1FDldc1nXuHA&(Ymz`v>#U-dw2+Mm%V3<1Uty=V6tT)f;ZHE?nB)SVdlLD ztOveQy?&|oj6!TQ&4E3qC8dgZX)ub5-gLuklXQCuAxX6)Kr}dmPigRBsOjPZ2RVgu`okK%EjIz?yD(>j{y^Qv2_%l0;3!0 z*LrF#C_me`kkr)+5fgNzNRm8A!h6J^u&3-NZICB$u#Q1LZ|s8Y zBU#8FKC{63(>6kCP~a*yBaE%dh6Y+(-Dz;sv;ar`*5FBW8uyXqnm!We3xu`i@At#D z{wc6(?JM0{o835uACyfea%%$I2}F*T7ygGtu6v0bZW@>J_+h_o(`c1paZBhSks&mtSkn&>nlmjA*2 z{~h$a5B}BPajnUQTk2)E6YZU=ncbikp~*!cg=>B)sEpE)Pt4^tI@L!(JNQ?8?ZVW@ zgLegQBNS5$jHW)QO8g{Ee2sCKT#p-4QT|!POM?bcX^}>151-@h%)L0SaWoyP>U$YK zm?RDBj~yIeMVT_5MU|Q%gxGen=%x-yI@iHA?*5UP{fy(k;gi+VBI924xevM@!(?J!ESsRL!`m$ZfiacnGQov8P zIcy;kgz*}8g{FwnnNF`p9o)&ULMLtgnqZ=33$}vy?2WwvnQgGx>dHo;PEp^>?~Y6% zq3Sggrc6oZO79DgAoKq%l+qICJ9%0^e}}MCHg3A{@(eS~H+ds#^SyK|6LD^We3u?jAQm7Wcqg@^jjz>#ws##YM(#Zvle-W(g|1_~(n7vp~jr_(K z{Ei6=(1hW&vu*M@Rs=UPa6PbPVJ?-5Lew9W2+_wAyigEZ$4^pz-S=-XELLekSl z24jDw@~Rpo7D^PbLSe>Ci~UZE{8Z60g((cE0czoY2!x}aPE`H591^BvW{O1pwk^7p zd`|TyKv2%(&cU_bWZfC(!lJkG@hdJ+e5<#)(L&nwGmjp-ksZs$5WKy|43Qad-vI@? za0~}gWr}8TSsQ`EOHocJ7*_=W2J33|#zw0FTJ5s!ZYcHEV4H8}9@m&*>M{0OS<#^B z`#`c_0P?6(fhK>~HKr-kIf@R~o{tfCBmlc~hJo40XUMf0z| z=qyFBe`D}rcG5%1;wB>+;i`aRwp>1sXlHqlkWP2DU=iyXagiw}`%~%T$1usqpEoCW zsZ1*T^3C}`2^xJ6p>R|I8TE~;M46D5@7K3i56#`z!>O;}O&n*FPM8Zbe`g@q1u&aB zUsU!Cd4rsqnifEh%%p(#`rNRnN~7@GnD2xj)^fb(hiG6YE1Fs$9K<(wi9zi;OVfc% zB@G?&{a-Ge)-rLDtUNDhFZ|aekQI7p_h#=3H>SBd`3KSzL5cq8tJ4wrV*J2n;=w!d zwKG#LkX=gtI5LMHbzcFYKSI4W4OR2}Oc$KhhWldMQe;Yelk17@`-;d%^wvCEwI!j2 zNHLY#oSOw!VzzT=3)by#8oT9ll94&fZ2Z02tbL{*zgPA2v6ov;Hbs$o0L#8kfvH-U zPOte9SG&8;j9UH^OTG8rkC{3W2_hEd165lsV4tYHZgimC-gA50%Pk-k^*>?%=lM{n zcusejZjBwN>%4na;b1NvrvFrzZlED%Q$iX`9>+$EY;gEBWh|n3a|Gx|Z{JUjC*eqO z8E~nJb`%ZKV;pHolZ9~*W$WxC5q^ue=cNWXd8)+>l#Kd22n7JuZhtCWHX05&n)*1-?)!3|t(+2)*z!t|i-eEB=i zp4{_b?i4n}CUd3j{&X>b`n*E&WJiX%EB0)&#>4@)!9?uiUPjHteZ)5&P%+Cvx^q1( z(0hR4Wge9ZB(5!i@|z*HPQ5;Rha2*bcmJEi@1Y_LN`HBkb;>^$d4_BU`($Es8Gx1c zOu6NKHvp96|1>`862%tY9%}aZA4dM4*?q7Xz{|v!-Awak?{`($;!EcfQKb|haZ?qI zLp@un3SL54t+QLnmOIk~bbu=3=fBMH%a7a9)NpLad_@WQi0m-Etnt-qzZCHRp95w1 zM=5H2k#^5b$k(}K;Xqu;5|F&C%4x)WdTK75lV`1lXcv!A^O#gMm8nMAx9&V@auVMP zD#oE5867rxW~mO$$hVd}KSO((ktC&~@hBWci>NVa%~aD0^V`Qh{a_jsP3XIr7R!

      )Dxe?h9?K%7W#B3SBj6up#9;Xq0>2stQ#072f!LDOK6e0CziJ%$X4>HOHu& zYFR#q|D8(eN4l6ty1Lwh5c6u>)1oESZg*m*-k{B$g6bJwdN!37aF6Xf#PtN^%u<@K z`yZRWluZsu`I-)3a@WSFGIzLL(p!vqPAJ&UDW~&!wp~=W?qkUViuAAZ%(~#-bcrK$ zyq|a{@|(;^A&%Gx!ikmx<)GTeGx-H$mBY-?W*!)XX1p=zB}mXZ|EmS z%8|3P#7Vi?-4sAP!pZk98q{o_lBm+3s5~-L%EuTFsr_J1SBu^8T%9ktB>8BodbCz} zH)TPDpq8FYU-BhCbh~c{ukx`OXRQvqWa>@i85~82uAP(OfY1Q0QD=TN+Tm5q{-5k4 z*tg(}f;zuFoTjk@*%)wu#M&LD$Tar&GCc~*E*bRIEqw|-or7i!pkFgj-M|Kdi0oZs zMSv$Y#5jo_+8ztIP>_PHDun!OHW(I&3T!^|hkQ z(|s)*nibV#$N`a?rIj)=eOs67p4p6vzA=43@{eDvh-gPXCJ0^CYp9pR6T+;UOgqSl zkr$8IA?eMvLQtH5qmr~!35aJ6P z2H*ry@E$iy+kL<1!sKbN9KPslea^pJ?Fi#b_afYkHoe&Ehnob{N6_?(OZ%>pKHis5QK3u0rjhuTg%t<<+9#Ni6*S4|#$@j@kD- zH_{nN_FbZr#of=YzW^{Jvv2*Z)z2C-XM6?&7JP`s*AISJox5C*;_|O4Pg_x@P$n-cL zO4ZBEDu-5!CaFz1(ck;iehk~v38oxYNq&v`EIl0XZo*6P7EZOr}uU@y5I^);Yv+pM@R# zj-^@5K@Xzgy;1sgrS}jtBtP}^TD~&KOy9dXCGPC78z6d#WlSy+bi7!V`Q=3UEsN6> ze9Z<^rf*NnIte@BehB)=_Ug92j@D<*I@T)3@-3c=CcC@?zg%I&@b!dL)cwv-T*t{l z7jLXazjO1)8)s(t(7x1j{ju5_>TLqe@)(*}eYg%0CD4pZzef|B1L;KO2R`4X<1h&~ zNhk}|C*GXnk4OPGN!`JV&n*?Dl75WSWHg^=gMduqc*Y=~iDOOukiCcDSZwrYC%HjH z%h7VA86g%5-tdzF0o*2@0jnZa+7BH?auV*?1iR{(C8gKwI%!92M6qP9yRVyfu=+@c z)ZD{ynH6ljKZN7Vs(f_+TDVJLOLg2uXA|1t;UhC8AoUhV2{VBRMP}VNpxI0%T9D^m zs%=kNydwRukcswCx#c}DHFN;XnKg>?RnSre;JMAPM69%%U$dUG(eqFHXUpa?9CMj{ zb|P6>k3lZ)WH>&_$nJkTL^?U|{I1(iBym(E@W$A&xy zIQhOG+K+UsrM`RG8Z{8|bk&sGI|cT6Rwc2m`Sw=`_?$*Es!`8!9(Fn$|VYGKKX<6mu@*#QFk;sS;@r8!z+++A_+%1BaY+ zzG21FEwmquZzC+Jp=gYjY5*#_rqVp}2bi-jdhXC4!YhWnHvzLIm!@@QaRvG!3`Q`` zf=9*A@0+FPrMO7K$YSo~Bg7%|tJ|ItXDv+^Zyy7YA8ju6YDLLD5yn!MUOrYlmQd^e z-BFQ^nHA;Y%I_(XOKnFwTcT6rKRNPjXMi$Mg(k8ka9F3I@0Y2Uu7rE&zI`rz$55xw zAzbIb!fsFUt}u7&m#MD2jU)mA;tH;dp>x1j3FF*gn#%5VEu4<8L^iiJ$bgQmk71Uv7{%<%e_MbFR%J*a0rQs~Q{UGW8PXlI& z&Y`08%2lEFtQz?tc3FZQq{PU;9=)v9-xj24Oq{FVKACcy^QSv!nBCPhOmEPx-eodH zd~jNH-$f+9LK8c#VHLfwN#s~aUamA#kZ*B?{5C&#Y&UHOwa?#A1wJ`TUc!t&957mw z8+h!L$$~D=pC2*|bf2E9dD92=?MCL;U$>KI#$Q@KLwa5~KypCUsjfWdi(oVN9l}+= z-6o|cq1#guE=KZs2ck*S##_kyx^Q(AO1!`og{vRG-vgiSzMP;+7e#vr4TDz{5taW} z^D6Qn9>fM1EdQqh-n-t8z(|l6W6xz+Wn>%Vpb+>dQLp_3jMb3B1#wbgL8(b1%t^y# zNcvP6iU-(7w`n2gW-#B$2u!ulo$rQ^ua?_}33)%d>|7B<*2iMvw|YY|>O z2WRIAI7kI%3_=Ih@?46&52c{tY~``TBfrM0(7uU7rhw+l`}vdPD~Q8brL6zX?RKEJ z2)40clN-p`Gcjc>&3ab123)9Wd%01LYcHNN9Q7M!(yuw(fac&+1-haAv)H?Q2IEwmibk2-JH*-rK|L#QjBX~5Xk z`KPi~0)5{EfTDacu{Sap=JR@&v0Y%}0?gWF|4%&I-x1|MI=2BCEd1IH`qR1mM_{Hc zPdHc*k`SmA=2r6Q2DO!(Bt}Lt?wB!DZksr`?wip0KasZi_pmCNs(YO}(6As&X9-?4 zF1T|7$33Q=hv%ShQ`P-yBAIF%E=Z}nvW*UU6{Zx|N^5fdMwNE6U0oHM6X`9LY!d2E zLSNkiUj1u*+;Z(%@!40T3q9%9P-}Gl-U*7^ViHF)51a!E`c=x0Ms)8O5vaB@c4Ge~ z(3Kzj-HpCx!+iY~$+7350J$I(9c7#bvf=za_*KZO{l7{_5ixnC^UewFO& z1x*Xt7d>A$Av%ibfX9a%WD|bS+$c6<*0z}xZ^li&8$f2@%~9$XFrn&bX^2q~>~yoO z%Y9u``+Mr+sl1~O>b+l-dWV!+S&DyelU;)BNa8f!@YS^7Nh>=kam!QbkzGQW`Cyx) zyWxv&$SX+w8Za=ev^C$RUhhM*4JOIL;#h0|nuCg(uNUe$KW9i(o_9d~^qOHwg53`d z?L)lsW3;O_?fvBM>t8Cy;+1boh-VIDOAMXT5JXMg zfadxCaK~$WE3Id%IuJizw0(Y2!YG6&0i1Wxke>aB)}FtC+dRu->E-@c0IM80BzhUj z!=urbh8YNjB^W`6I^*DFkFw_#GiGprTA;Ln_v78zl*Ym5Z zhKPrqKAmeCdm=EIqWj0K%N8^<6?c(~Ns1r%3|1w@s`WP;t-=<33?XtFW)lTwwnL7S z_&D&7*&SZ!7|y*WMoUNh~^Rw0IUC|4k>rLeO%~jYW4z zD_57EiVz-U-qMKf=gyeae5!XLMZ_D6?W2Y*<)8YdBIkR-X}t7*u*{WSv`&e_WAV}P zZa@SsH$#{?DBd1aEIDWMg#buEgo2A4^7%F%rc!ITYv0;_O4T;dXUrW@W{nMY-r_X; z=Pm~;Vfpi)X9^yp5Ssktpmke^){)pw2P4%-4>L)3n3!HoDHQP~p151*?kh-cFs=U` zl*}pTnf@XdqvvYJ=l6(cC$-&88}1qJO}^%iMiSUek0)?+%3~vR&T*y1{402Lmu5GW z>69XqgWFU6g$n%&UGRS#5=K8LYnRF5nCo)i_}%}WWIy|U1Pm}9Q2-#X%h!WUBRLXr zQ4kqA-}0bW`}3T+@=tg+$JN;^TvWtJ-ZjSK57!1)e#FJ9Tb;s8!U>;f7%gY9Eb{$)~capcW3iY^RZ{vP0k+ggw zfvXr7`FG_WF_{tbR?Z#6G@@UXDK5b0G=zR$ZbUt(G7HmZp27~o>NwHPz3N|RQCPj6 z7aY1=#YAkjbcyeoB?&aER5F6;qr=eunm%^>nY}<~gbU&?lSpHiOr>FBE)Mnb{_;#y)R$Kr4?@;D!2AHq0#nr7R9u)V~!1c6G-l%*`r4b_F} zlgzJS$YU^cN+CH}r54Y?6jJc-5!%;-yu@#`5?UuVrj+JOhh#{9E$^=}PAjR5Hj{)s z)9_nZarn+y_-utkZo%fbPV=?w_au_-3>{h)@&N`{^0hmT?5|7#DHxgM@R!?WC#2*U92%l4)W7als->Zok2&+lf4NRL%>3r z{yblJ=?{4+xD?*-10gN>))=3is-E-}^EgGzPOtyf4@f0a5S9;vZoA!H2jXI)LY(E5 z3=y^8aoZS*WQ>p{R#ULr)8R30u=ti5LiKeGGNEsg;?;^t6j~ zRO3$3&j(w9AsPZbiLKzw;xBXp6H%=*Bn-1Sd|sZNR7e7yp3g}_c^2_yEJ)NH^1?KB zbZeIz-&0GyB3i~q1d!y-UWI-@@`grPZq*Jcy>H5lQtojGT?aeo*o_;_iZW+=6rQIf zY^@qjy>H5aoVw46l=-Eeq^VYV2(4xU05H`B7s9titW`*OJndIhMeHAjY#R4cUgNq{ zrLJ^;Q9j!@(L)t%xn9^@kR{R$~-(kDC7{`V-fw|kiRioCNV0!88_DVS^sTyQpzNH5COUq%yLWLmWf zT#s_YaJ_)WtK<&Ddh1c<_vqf@9C2h!2z7~<1I^}f41EPaQWv+{TDSh&tM-Fkhx8-1 z4gdc6dskIHVXf3p%DlFv1axAO__NH4l$y(tNR`Lt!m0d4RPNOCHDTcX=E-M}fDv|{1f_m*c;kIJ<4 zp7tV5;Q#=XATo1BTtJ&v!$p_LyW|{gMi;%K!@d05kuiRWwjp5AdA6IPpR3?-`DLM< zY*A^=tYz(rayV(!hm7mVQni;}72dT#n~7)9@D=6hM3X+fwc%@09zT zmxl3T+V|5pa&|F(n8fX-zwm6gdF5`z9wT1scet#^5GvG1zM(Inw9$M>)nD-^^ZN`Z zIHs-mcRc6^@0Sxo^!8`DzM&&-96HyXy~49D&VYXTv{(a+gIPpB%yCjG(4q4Nwqh?{ z<<{FeazwuZrfFa1h%yKg|!G$M~)-dgRDuifWF zn}U#ak4%EoQ&3=rpx;(Xypq>`qteb6y#J`!+-bjmSok-PvGIFaL!=Thi~pt}-KU*? zB~KM3^`jWOAXqoaey-vI6b@fq?M6$@x9l>6A+}f319K=?nC4N^w>}lM8&TQ+T8JzE zMfc3UMa~Lv_}Jdm(o9Z8jE^I4Eh45qI`qbU@`ZP>c0AicOS(XLaUDz*tyq;L5fmP$ zH2TlAluNYa&*QH-j9acc;n`OophOrz@0qj6WX{Xn^qc5SH$S!R6p%!C?&clHxjU{=y0P7CNSecgOi3jxq;t*Gk6rB@(ucVx571DG`k|`Nilg-lT;RAz5 z7wjrJ;uZa+ia_t^mj%U;jehGFE6|^tK`UViT#&PxzQ-+Tn$@%ivOv-tz6s7MVR0Hm zTCGxCrEnHmf};$Vl#POn8aaAdGz1UXGZsN&lYlfQNHA^Wp}H0b_qwnEF8$bMgB5X0 z9y(vgD6$u{lSSBnq5EN;iffKBjD6~v({>PSSvjB7jS-DGmg-b6PPb4GkL3OYZ&Os5 z|Fq@ZjWL0t7lAsctnT)VTaBNsqZ~=zh-Q_iaE-zdZf3a#Bl>TjaCf`+e*_Zn_Z${f zWP}q0>B9UFL%~0@@)Z58eQiLK_9+%$rC2}(mvEJcBZ}ngh{dZ|QNWzZ{zUZRbP4t( ze3i)O5NSf3!N|I^T&b$uGd*{Cl;V4?WL0WApDFD;*%!*rK(B7?<>1}45%_2TTiB2g zd6Y>c2%GwgLa0zOsUnh~#}APtKWHdL0h^2>5Ji^)xt9*O3lijg*vGFGSN&=K)m9&Mmvm(y(>zZliz`x8_Lcf>{zaOQ7_ zb`TKorGnT-Ic}CY>Uc~!9D-EpU-@unynoSQ5i%b&N?hY~N_4w|+eAKi`*4O0R)v?- z*>e#n|K5weVq%z5m}H0exnOTa7^tD8sxT6iQm+MCL1ujZIXGxn?!O&dA$^viLe}X@ z_EckTnQ132|Escxr@EHb>1N%S*%>@=W}?XdVePGh;)=TTT`agX5+t}w0wfUJgS)#W zXmEFzAi>=s!QCaegy7J)L*w2w-Z-~&znQr+^P5|D=9~KuRi}z74(F`1_S$Q&_jwIp zu!3fevfN~|S7aZoY=+f70m%D}(|)0U$cDfZa)lk{PEE=yv2Tl1>X~ycIS^H3$Ci?b zsmsAhCHQ5Q8kxq=-`Tf^fza$Hte(Pj5#ARNp7VhB46JqJ zeXOQG<_ae)bEjE@W|cN)+qHqe$0Jm6h$V0eBEYt3tk@?msqqKOM0nhv%&Myx!KD<2 z*v#jN2a+odz&_q8tx1K#Cfm_ zzARV+P6Xe2rzG30=-NSiNBFwG0RLzJvzOjcvQLaCy4wQ=BxJeXuA!4Dx;t%8UJ~h` zN^?O^`y)7VpBzd47MSs1|CwYTWDQwMS9l++k4l9K0@@I=`owBfOI%`U*z z_a|fxOBRuDNSFXBvKgc_HIsebp z$WnZT+Yh`FgKBGh?~aSxC~*Qe?3|YERL7;t#f>eS_h4Dwpch9~We4?RAL;(Y+L6E{cqtLEo7ZvJUF?Q8r(DxMkZ zmF7!I_Dru>&pp+t?A{M5VJ+*NpXcglcF(8h7Gv50#^f*5!%AgWW7rg0L=@cNAT@Ma zYb(bG)^Qv+&oAFDU;JhM!U{iy_lUhTG*|J`M;$EIo~LnD&u z&*l$zyQga{WXtxTuczF1*%P~7rju|c0yobnc_ajJ?{jUC_5Mzs)(6gFYr)3GlpHTU zZ8*s)pLVq>UHVbNT70Fi<7x*3bpkpIk2_?Og$>+NuE|bRyQwEj)QajQ_J3Xf#44mC zAggBWzcYA8`&CI6%o{>tppJmiD|biNOw^DAYF5O!oNaK>;YdPOXe7|AKKr3fFmYwf zlVq#*R!*~m$iKZ2lR9#L_4rJi5c>t zBBK8RC&y4|`5H_jwYx^yxKfQ}x54K26GY6=%t~T%E^RJ5*(96)TbdyF? z>eI<)f0*vdu2V%!!?+u{x}?H!wJyUj>tk(D5GJDn5e?z@wJ&{tY#jUnWb5P2gzv^2 z5rX+>@a3$-Cj;io*6>czT9}rBfV!a@p&u3Wk zj4hjC$5~Uf$Z6EjD> z(;K{6xLNYiUTHQlz33yBZm3J6O&^$!`xVgZ3JTmG^2<%zEZ zRtKlSXT#^hRKE#U-`$4|NB59`A6$t2aD3MiA`$fkrnj0dRTGpW#*tetHkBmNjX8D&h5!#L$>ChcH+sLnV{qnUP}&`& z^LrgT=cj*~>Iej+RA7HC$3F$&zT#D!RhMO#Gb^yckvA(S_nl210BY%LVQArNmSB&j z(PNeQP&VMkA*RE94s|41i!-+j}ViB^`PF7X|!2EFOh@{xcdF<8p34ijvv^f zKj7$o8pI^a0R@=1x8u{P;eXJ5>%1EA(P~`+BTWrIDRhMs=TtF;2N`Dk5m^_*{PD$L z@G?{|wK7E8R-r&?dqq;dDiiPcXuix!CES@+pUc_f5SU*I6R}g^_;Po0{K%kWH|0y)KD&F4wXaWni8YA+E-bhbeW^vc--I+rh6gZJD z9J)bPOFlO`xj#b+)uGv>%vbNlU1@vcN`#l;%@yq ze~}wtMlCOltGY=6;O4)x7vL_h)EK2&6h6N?ZXU0Ef?qCqkXzxyj}qVxfkXz%*Pl!q zbq74UXu*AY(zz7`dD`qg5EV&s4SYh4r&DJNrCF0+Xzxz_%(f*ZXT49t_t1FC4DEGT zD*OHXDbQ=0@EiY^q?}_Ey92yGeX_k@zV5emHSi9a1q^+S-yhPGF0P^uQErAI>8QGX zGBui%wuDeiwc~cP^$GjxuTkl>i%~q|iawSid4GuQhY~sqfDE{nYgoR160JMFECfo5 zgc`T_!w?mBuwnT%jHf96cTXQ)yBslJmJYxm9RC=8yoiG{`OYL~TDr_qM_!E(7RMnt z5g06xjWyu0gyLq*%ZPOGrIC3HUC*{@P7XUf>)NQhH^O{Xhrikqhw#2cV(b-7eQgOK zl9TH()lB45I=vt=1zQLtr&;^!eld(~;xsgHn^;ehrW7Xri*54`iyng(EcFO4H;v_x zWK9w9Ip!!U3qqD)RXv%Y%xXh8KndR@i(Pe2izyG6PM)XiuJdL z6S(zkVCDe|5)7)}s>Q`nb{g8z)TiVrdnX{X?xvjJAf&LDZMb>d!m9|2r!nh=p_gze z^G4kZIe-ZMP1+1DoBUvbr^WAl+)cZN9AizOOZ}w-&FXkuF_0q<4Vd&GxVoTGEw7U! z41y{&^A@iNlT7S(t{+a=xEVowLMtxk-iEt{UpiqDsJOWnD@@nSFto_|+t z8UFD`i5qpzJExS=y6DU3&0jfJON`$bKV})?gvPX@=2B&S;hm8+%AXYC+Clpm+s4BA z*Wp)_#{+tUOE6}No!;r3gj%G%De&Bs+FLZYSEgk3CE65Ec!H^6@^Gs_(G-`FIUzl3 zMCc_(kSGrARAS#G=G*(a8~|6H0gR{-an5c$IJVanqdLyzoVHDuLmWcj+9#vQtstX` z$#2UNLf5eKoJ9ps%DWzJyd*+wHi5)MhFaP!+Vx4SBrm>)f7GQ-v5NJb)j6V97$|<9 zvL48lmS;y>8Ce}p{7E|U{>S{xc?5U;`0^*3`#xd$)4En@LsQmZbeh8e&_Y^vq5TuT z4)1#nyL8lB_lJ_WetNi~l_`{r2MYgr;Q*NTXa(O<1fnha=hG?OhJC$y!JPL)j!0PM zCK4GO@AGersXaLs2YWJe--g(%#TxPH6s{CMmz{zDh## zY>AJu7aztW>9>x81H)kZ$z*8Mhhr|)O}Zw{N&B`liahnPirFcc{Zb?$6_{I>Y*e35 zRaEW5vnM`Z8$v~1H%0xWqE(@zK}whKb~sP&+ii;xBbp%!cXVF|Lt#SN%s{^EDv=1p z_=i=l>~y3Za%yO&#Y5z!;S`6>P=geUcr;Wvhy`i&ryL}a(A5XFFgfCif_Hx)La}En zs0|Gqmzczj6GWNF!s1aHJ8K@A@q=@*OAqSJx|tG01p@;`Ne>v%G+J-I`-_PZA2M?N zxSkt^HOb&E_|QQB2TjA}RLTNBf@*CxSnr2(C=zf*-Bj8{g!#KU@)ErJcsnoVFHN5X zjm0xqeOgcP7*%W$HY4h!L5is>2-n$)XjkN(QFJeJh&}YK_1Z`vIK|D{uO&N zz%x^I7xWLdFJ-~hN-EEQKui}%2yj`LYROkP6~espIr^QHVVr%Q${|eE6^c-w{zXBe zp=mO<{bIRp4{*LcWl4X#_k?31kxE!XPO7Vt`HhJx(Q5$fjpaLxEmsCY58JSMlB{0K z=*{q8vXB6W*4rY6PHy^x7tz3l9=c|77Gf4OO5^>6@TMW>paGc=806NYQI0mD0jOq=Rd`3Ro+t1)Yw@WzloE*O(r0?NGd9*HT0vp4$M5*~aj%^$qxMbS0}r zo)%5?f9CF&UM|Wbg>Upsp@d$#D71*5c);cEyCkBK7z=MDM;o@MLVN~T+v8^{Y&tO_ zW$Q*J#*>ys9usHhadlX4*le|RdR!5Zdau5qYa`~hcj?sNw z*xZi>AGDzM{>?!XR65X@p_$P;O?4^5Jdp+BjU(3nRYOu9N1~NOUZ~Wn=_e&K(X23x ze#Dqu=eOVP$8`PLTcb|yrZl|_T^H~yTLc$H+UdF$_ z#UPc~{5v&;c>0+Pn!Z`jnFCz-(9r3?Sp~}MAcyeIN;tse%2*s?%sC76^c#CX3==1dzI8}|T0MjSQhbgD8Eksvxc8wsgvcn( zKDX^kpsFNZX;3$j80-0cLNbRtQDSyQee&P6MmA>0h%v(Z@mrP8e#i+G#wbRR)vagQ zo)e+iK`>xUlsLr1_xII0<1Nc0mYk*$!?B8?r%Hrtsj=88IWtS$A^|mY&3BEef?Lco z+8sUMK4+?)T1<`IfdU@zgS90~@V6PoC)`kvx9HQ4k|bt9H+VyZ&2hX=XcNB&(0&rA zv4G8%xskj8Dy6`XQ*myb<=J@A4-sW@u)$h9hW?pS9%}d$RS5OXZ`{61DOVvoVzM!v zX3*>Qq{omAUPA<<4`g$1c!zviV6y)c=NBMtJUTqV9L%`k^NPG24dcwfyE}`}m}caR zD4E`jn4EX;bMY2vw^V=_Ta`6ASz)B%^XyIHZ%7g%sUp$M7;HOX1!wCMnTgnZoCNLf=}q6oKq1jtS;P(sdt4?E_YjAgYD5o zF&(G;(Yr~(P!QTi9KTYwIjjB&iys(zQXOBk?)752Lb1Ol(~g>-mKeO13^`SgcJJ~L zEcS`CZvXITZi!i(?Wc#sdDMKKYVd73t=!K_)*y*39}`@zd)#Il5amU#CF#SXFZg)# z8V7#5v|_4-8ZL2z+&0jRxb3vqhcz&l~luaV~$hmukfNhOZgCRr-n(G7h7T zGKrwZ@4h{;DRei}?8PCb2!QDjVtkr!{o0~Dzad|bKYIsd2w8}!tj1m+>(x8_QYMA1 z1O%D85-7tL<^AsO1qux<5Z;h6q}7q!6Pxk0=`Ks$A{?mObn7X@tKu&!R!m`tTQ1jpM=fhtTT=ryPL0#8<57H&J+(D_dD( zf0*z`lcOmgmU(j!EjiN4_sxxk0?;co-oyi-WDEKM^i}HLJ|<~iz&83=TDZTmtE?tn zdTaC(zgq>s=Xo{{5MyU#5zq9ZHd8w~qo8%%sSRjbbrUVmCkeBLshEGLngqJcw)QZS zxi4i{45gU9D?v8GT8P^)#iVZFR65j?x}`aF0ceJsu<08f8!AMjyH%cm%)XUJvU|ix z!EM1=;{itYA}^&xt}qq0(E}wjz_za-tlSCB9g3r;)A5yhg)cPw2ZmVIK?ih z4`G*<{AJU~9|Ru+PkD;}%)GRDi-d#RV~CiQ6`sdSAkdrBIK{8FvtlC4qL07w6g>H3M+G zP$n}%Ws3SGBc$S;+C1zjd50T%BOY#GT$iSDNRs6FLJZRW8sa8K3h|p;Yk)u)=KAC+ zbH4)pv+@KXT%3`ODPZ^HL=XLuBc>=iOfbt^PBpNN z#H+B3Te=>LpJFnt9$uvkiMfk|aA( z7QSq|lSAlNk+)PqD5(169{QJ`$g-P|K&4MB$=JIH>v6VdqUFDYjI7;UH`j$GZ))E( z6ecQLj@2RAj4;{^Mh?2wGP}U2K}w`D*?;5ej;Qspox;7`gDhjiV&rbq0HV<1OY9-4mz%U4nY-P~rClswyW7>i zw97heOMqsQ*6=N0hl-Z=f05hhKt4Txrn$|cA}0t-Y*Oa*dYLrp@VccUO%LUVE#!W` z2J)GJ4}4k4-5FbAKdwj^J(_eQco`srZVQI`>ucj%2eNYyLv z2@4UIBdr@H+1t-FR;2wLMoQ*UMDxNS)`-LFGy1*_Zp~|YJj%C4#-q(hHtzf;FC7oa z_}F`vFyeGjHsJOcf+x~S7;KyeIXs_^rHSCTb$Te?bmqtz^oR|G^9lL zT4735e^e<|kzi8Kb(IO6g_!Lv9I4HxfGrf7D9gpIRm9|kQ66Cf6cNb3f)`*a-JWaJ zbDa91G7z>H6GxIXi772$h2-TyC3#(QGiQwa+XnI+4Ddecq}%9erQ!CyE&5z~x%C!) zm_S#-^wDxivqiVae4tBJk3nXdyuiC;kg=EdYjzuTU~n(WQ2&+@DTizM6ESXd>GAic z<7PKa6{=G{=a>!V9zVy?7=A`WV0u6^!pB=Tz-4dqdRy(nI0fAn<#v)hy-sSkZ8Y5H zTf-{{652p@L=ky#;!o4>pJ45Q@N)xB3jMNaWW8^}PlVfEN?Km^Pk5M92BFF2vM=cH zG39++`6Bbha}){tlu$kyt#A`oV_1rR=Zo%@-L$i-k&BRq?p57&GKU0jFDtA;D!-#w zFLi3|%pzG~!IqxjOfbk$=swHE!Ifp z3RnN29-<6eqwg4_2)y<+#hyj3Ao@% zk58ThhdGe_XgC`Fl+psrEwT;6^YD*7B(=JhIb(SR{hZ%(Lj+~-Fw6J14f|ZWHPn73 zylH9c$gB4{EwItKEh?<}R;XU!J=d|F6}Ma?r+|i+PuqDoKx*zoj0~{RsK8rd9&N(*fB7B-2PIU}BX|>Wss!~9){tvY?{yiMNn+;bt@Si6aL*e1 zDxT|oqj^JIS`45gXx>dMhV;+W)JA!L>=-$B9+Q4&E#BF7zm))oNNb{1FUt%?!nCoi zG@|X~kTBB1G@FdWn-*wYBOj_DvjvE2WuJA;D|DftQsRdwmsf!3g|a#Ctg_&fGqv3; zN1CCdb-ChYSL}%xjOZnAOjzPpoI3u1;>Ns;{5ioYk8Q?V!fwzf1IhylxIef;M7R59 zyHAvV3QM6>hDU1#v4;Q118j@8e%b*@o+#DvP~SGo2zcJESEr&IM*%m_n16BdfQ|N$ z@8mnE^-&gEQKLl;Z;0IP^Iz_OBJ(Y|W$YYT?zY+9hV1B@<%_~6)0~w6rEF(c%4II6 z0Si~buP%q-woLgHWzn|krVzhr1D-}>v$Id-e%sX{lY!l|O7TwFurCyP1$w!QTb-Fx zyVt_yJc13uau)#l;QzcIXgUKIR*<^&DnE-Hniltnpmpa2)wV=yo_K)tl$k3$M={KHb zXBdN4x85FNR`UBri5JYV!X}1!3{!&lRp9Tj|8h+pH&8@A{wsF-V%U~p;OKdO$5Z8r zM;27qVt~gdJX1H=nz|SZ#|(dB%_HA@tj!qk`3_-Q3TNsMS~m?D+xMLBIkvSZG?a+AWH}6{YZ$HR`mOM=gF*V)yTm}BOTrA5 z*Q(afj`Oknxs7)-EqZ3(kYk!nJh12~=xyH0Cxe#IkhF>DBvD<7IzR@=TPV>s+acyu z!E=c8;&|fq6jgHoOW%jh4-*QG88B)(O+U1h^(A+Ot;Mu`_~_$x0dP$7H>AFT9mbqB zo3Kl^oeABoIP#jzTNr0^P$R5ChClH-{t#0uez^-t9s z>07IUWkS(~d2z6`Kc%eYl4#@;xrm_|z-CX3zOIw#1ka+_r+vU0QOh~V{ zb272Ya`-JSpMMHP2GC>)8?y19RqyMIiPRGpx*zGm>H{_%x)m6$kamY*g=c2>PZ#zd zdx*vN5Ky%VO^?9)B+H1dSjHypF`u5i6zM<+w%>ZxSDQyUP?6^LpDIf33kEUnSl}hwL5pAZ2HmcO?x8eP4&Zgy!Tf~fUL;B*eiQfV z#ny)q6hED$u~U}S(MB`t8Vx%C_%E%tHmg@>NtVHe#n8aiIAl!F&hW-O4inigHsKJ(|{15VCca1ZWa6U?$v z41o%q<&0}gIB&59JdO276nbq&!t>}^6X4vAlG(FZbvZt83`xfTAFmpsNs9O=g6%el z&CR-tyKX6$PeFp#NgSijt=#QgR$oVbUP4H;KJXjxinYx$XHeU6z{XK^O%>i-CMUpq z-7^|5YntV%jqZ}+u#CTXUaG7aCu-QYNvHF zSQci1q?-Y&^j{2)Q{wjdl*sp3b!<6fFUbTi`}Aq%@5H4bfV!M_$n|8O9w zEv5-iK;L4OD|!_B zH~SKmAi!5uIg(gJzXkYoX?0+0X` zl|kX{Y@5n-Y3ie&=6~&7tU4~S-Q7dYki8F6pqO+9TpX=}cPFHK5~@Mn*0;alXbmZ$ zX_!aEU54@|9_YazgPTtS5K2x!1%g|KcMwaj>-n5;?9m!+_j55Wh<^WfeVpZ3te~(ps3daw@>N<4hv|SYVXI>OH`4(j z3nM?%^6{Ipm9fVy(hwM_ST|TlwOAV#GSov0OYS!MvoLoXE=t9`6h{$X7-ZCCsdfeI zUF|UVd*$E@zCTe^{WZOItSl-VRm3(-go+mYmY>`yaNIh+)-*8#rl={G31(exW=0G9 z@p4@ot$blnj{6H{ZRVFqZW58v{W;RG63V&ovaQ@bs|aS-?IDI_ch{P&gr>Yo7Yi)$ z0MgnH15U#uy&oJdDoYc-UBS@2B=wjb7x!|i9}Fq?wSgjOu=!~xk5npzU}rDwXqZxT zc>4XA>!Dj0-~FQ4&3(2@FV@~3Ob8n%oSUNJ+XW#(XU9#_AEgNY?0RZdf7S)Vx{Ak3 z2v-8GC!{;)LpkOR@s+0Y3jV8*JVQ;E+?d6W<1WnZU%G`IYb=QwdAyx>3Fs_=XaPr_EiWR$CF+Rs*_)6raF0(ky&hJu}xOJO3KULHV?kwhLieMf#DU z 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≷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 If you want to filter on a database field in your query, you should prefer using [field filter variables](./sql-parameters), which require a different syntax. + +Text, number, and date variables let you plug basic values into your SQL code. + +To add a basic variable to a SQL query, enclose the variable in double braces: `{% raw %}{{variable_name}}{% endraw %}`. + +This example defines a **Text** variable called `category_filter` (but you can call the variable whatever you want): + +```sql +{% raw %} +SELECT + count(*) +FROM + products +WHERE + category = {{category_filter}}; +{% endraw %} +``` + +These basic variabless simply plug in the values set by the widget into the placeholder in the code. Basic variables have a different syntax than [field filters](./sql-parameters). + +Here's the [field filter](./field-filters) syntax: + +```sql +{% raw %} +WHERE + {{category}} +{% endraw %} +``` + +Whereas the basic variable syntax includes an `=` operator: + +```sql +{% raw %} +WHERE + category = {{category}}; +{% endraw %} +``` + +Here, we don't connect the variable to a database field; we merely insert the value into the variable. + +Metabase will read the variable and attach a filter widget to the query, which people can use to change the value inserted into the `category` variable. So if someone enters "Gizmo" into the filter widget, the query Metabase would run would be: + +```sql +SELECT + count(*) +FROM + products +WHERE + category = 'Gizmo'; +``` + +If you're writing a native MongoDB query, your query would look more like this, with the `category` variable being defined inside the `match` clause: + +``` +{% raw %}[{ $match: { category: {{category}} } }]{% endraw %} +``` + +## Basic variable that allows people to select multiple values + +![Basic variable with multiple values](../images/multiple-values.png) + +To let people plug multiple values into your variable, you'll need to write the code in such a way that multiple values will make sense when interpolated into your code. The most common way to do this would be to use an `WHERE` clause with `IN`: + +```sql +{% raw %} +SELECT + * +FROM + products +WHERE + category IN ({{category_vars}}); +{% endraw %} +``` + +With your code in place, you'll need to set the **People can pick** setting to multiple values. In this case, however, you're probably better off using a [field filter](./field-filters). + +## Basic SQL variables offer limited options for filter types + +- **Text**: a plain input box +- **Number**: a plain input box +- **Date**: a simple date picker +- **Boolean**: a this or that picker. + +If you want a more expressive filter widget, like a dynamic date picker, you should use a [field filter variable](./field-filters). + +## Making a variable optional + +See [optional variables](./optional-variables). diff --git a/_docs/master/questions/native-editor/field-filters.md b/_docs/master/questions/native-editor/field-filters.md new file mode 100644 index 0000000000..a50557b236 --- /dev/null +++ b/_docs/master/questions/native-editor/field-filters.md @@ -0,0 +1,153 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Questions +title: 'Field filters' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/field-filters.md' +layout: new-docs +summary: 'Field filters let you create smart filter widgets for your SQL questions by connecting variables to database fields. Where possible, prefer field filters to basic variables.' +--- + +# Field filters + +## When to use a field filter variable vs a basic variable + +In general, prefer using field filter variables. They offer "smart" filter widgets with dropdown menus and dynamic date pickers. + +If your query lacks a database field for the filter to connect to, however, then you'll instead need to use a [basic variable](./basic-sql-parameters). For example, if you want to filter by a custom column you created, you'd need to use a basic variable. + +## Field filter variables + +To add a field filter: + +1. [Add a variable to a `WHERE` clause](#field-filter-syntax). +2. [Connect the field filter to a database field](#connect-the-field-filter-to-a-database-field). +3. [Configure your filter widget](./sql-parameters#configure-your-filter-widget). + +### Field filter syntax + +Let's say you want to create a field filter variable that filters the `People` table by the `state` field. + +Here's the field filter syntax: + +```sql +{% raw %} +SELECT + * +FROM + PEOPLE +WHERE + {{state}} +{% endraw %} +``` + +Note the lack of the column and operator (it's not `{% raw %}WHERE state = {{state}}{% endraw %}`, it's just `{% raw %}WHERE {{state}}{% endraw %}`). The reason you need to structure field filter variables in this way is to handle cases where Metabase generates the code for you. For example, for handling cases where someone selects _multiple_ values in the filter widget, or a _range_ of dates, Metabase will have to interpolate the SQL code to handle those inputs into the variable. + +In a MongoDB native query, you'll need to put the field filter in a `$match` clause. + +``` +{% raw %}[ {$match: {{date_var}} } ]{% endraw %} +``` + +### Connect the field filter to a database field + +In order for a field filter variable to work, you'll need to associate the variable with a database field. + +1. Go to the variables and parameters side panel. +2. Under **Variable type**, select the "Field filter" variable type. +3. Choose which **Field to map to** your variable (in this case, we'll map the `Category` field in the products table). + +You can only map a field filter to a database field. If you can't use a field filter, you can fall back to using a [basic variable](./basic-sql-parameters). + +## Specifying the table and field alias + +If you map a filter to a field from an aliased table, you'll need to tell Metabase about that alias, or the filter won't work. + +For example, let's say you want to map a field filter to the `category` field from the `products` table, but in your query you use the alias `p` for the `products` table, like so: + +```sql +{% raw %} +SELECT + * +FROM + products AS p +WHERE + {{category_filter}} +{% endraw %} +``` + +If you map to the `category` field from the products table, you'll also need to fill out the **Table and field alias** input to let Metabase know about the alias. In this case, you input `p.category`. + +Setting this **Table and field alias** is only required if your query uses an alias to refer to a table that contains the field you want to map the filter to. + +Here's another example, this time with a CTE + +```sql +{% raw %} +WITH + expensive_products AS ( + SELECT + * + FROM + products + WHERE + price > 50 + ) +SELECT + * +FROM + expensive_products +WHERE + {{category_filter}} +{% endraw %} +``` + +Here, we again map the field filter to the`category` field in the `products` table. But since we use a CTE, aliased as `expensive_products`, we'd need to put `expensive_products.category` in the **Table and field alias** input for the mapping to work correctly. + +## Field filters must be connected to database fields included in the query + +Your main query should be aware of all the tables that your Field Filter variable is pointing to, otherwise you'll get a SQL syntax error. For example, let's say that your main query includes a field filter like this: + +```sql +{% raw %} +SELECT + * +FROM + ORDERS +WHERE + {{ product_category }} +{% endraw %} +``` + +Let's say the `{% raw %}{{ product_category }}{% endraw %}` variable refers to another question that uses the `Products` table. For the field filter to work, you'll need to include a join to `Products` in your main query. + +```sql +{% raw %} +SELECT + * +FROM + ORDERS + JOIN PRODUCTS ON ORDERS.product_id = PRODUCTS.id +WHERE + {{ product_category }} +{% endraw %} +``` + +If you can't use a field filter, you can instead fall back to using a [basic variable](./basic-sql-parameters). + +## Field filters in BigQuery and Oracle + +Make sure your SQL dialect matches the database you've selected. Common issues involving how tables are quoted in the query: + +| Database | Dialect quirk | Example | +| -------- | --------------------------------------------------- | -------------------------- | +| BigQuery | Schemas and tables must be quoted with backticks. | `` FROM `dataset.table` `` | +| Oracle | Schemas and tables must be quoted in double quotes. | `FROM "schema.table"` | + +For more help, see [Troubleshooting SQL error messages](../../troubleshooting-guide/error-message#sql-editor). + +## Making a field filter optional + +See [optional variables](./optional-variables). diff --git a/_docs/master/questions/native-editor/filter-widgets.md b/_docs/master/questions/native-editor/filter-widgets.md new file mode 100644 index 0000000000..b3466c2096 --- /dev/null +++ b/_docs/master/questions/native-editor/filter-widgets.md @@ -0,0 +1,123 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Questions +title: 'Filter and parameter widgets for native code' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/filter-widgets.md' +layout: new-docs +--- + +# Filter and parameter widgets for native code + +When you add a [SQL variable or parameter](./sql-parameters) to your native/SQL query, Metabase will add a widget to the top of the query that people can use to set the variable's value. + +## How to create different types of filter and parameter widgets + +The kind of filter widget that Metabase displays when you create a field filter widget depends on a setting for that field in Metabase called **Filtering on this field**. Admins can set this field option to: + +- [Input box](#input-box) +- [Search box](#search-box) +- [Dropdown list](#dropdown-menu-and-search) + +Date fields will either have a simple date filter (for date variables) or a dynamic date picker (for field filters mapped to a date field). + +If you want to change the default filter widget for a particular field, you'll need to ask an admin to update that field in [the Table Metadata](../../data-modeling/metadata-editing) and set the desired "Filtering on this field" option. + +For dropdown lists and search boxes, you can also customize values available in the list. See below. + +### Input box + +1. Include a SQL variable in your query. +2. Set the **Variable type** to **Field filter**. If the query lacks a database field, you could use a Text or Number type as well, depending on what you're filtering. +3. Set **Field to map to** to the appropriate field (only if you selected the field filter variable type). +4. Set **Filter widget operator** to whatever [operator](#filter-widget-operators) you want. +5. Set **How should users filter on this variable** to "Input box". + +### Search box + +1. Include a SQL variable in your query. +2. Set the **Variable type** to **Field filter**. If the query lacks a database field, you could use a Text or Number type as well, depending on what you're filtering. +3. Set **Field to map to** to a field of type "Category" (only if you selected the field filter variable type). +4. Set **Filter widget operator** to whatever [operator](#filter-widget-operators) you want. +5. Set **How should users filter on this variable** to "Search box". If you're not using a field filter, you'll need to edit the search box settings to [tell Metabase where to get the values to search](#customizing-values-for-dropdown-lists-and-search-boxes). + +To guard against SQL injection attacks, Metabase converts whatever is in the search box to a string. If you want to use wildcards, check out [our Learn article][sql-variables]. + +### Dropdown menu and search + +To create a dropdown menu with search and a list of all values: + +1. Include a variable in your query. +2. Set the **Variable type** to **Field filter**. If the query lacks a database field, you could use a Text or Number type as well, depending on what you're filtering. +3. Set **Field to map to** to the appropriate field (only if you selected the field filter variable type). +4. Set **Filter widget operator** to whatever [operator](#filter-widget-operators) you want. +5. Set **How should users filter on this variable** to "Dropdown list". If you're not using a field filter, you'll need to edit the dropdown list settings to [tell Metabase where to get the values to list in the dropdown](#customizing-values-for-dropdown-lists-and-search-boxes). + +If there are too many different values in that column to display in a dropdown menu, Metabase will simply display a search box instead. So if you have a lot of email addresses, you may just get a search box anyway. The dropdown menu widgets work better when there's a small set of values to choose from (like the fifty U.S. states). + +## Customizing values for dropdown lists and search boxes + +When you add a dropdown menu or search box, you can tell Metabase which values people can choose from when using a filter with a dropdown list or search box. + +1. Add a dropdown list or search box. +2. Next to the option you chose, click **Edit**. +3. Metabase will pop up a modal where you can select **Where the values should come from**. + +You can choose: + +- **From connected fields**. If you selected the Field filter variable type, you'll also have the option to use the connected field. +- **From another model or question**. If you select this option, you'll need to pick a model or question, then a field from that model or question that Metabase will use to supply the values for that dropdown or search box. For example, if you want the dropdown to list the different plans an account could be on, you could select an "Account" model you created, and select the field "Plan" to power that dropdown. The dropdown would then list all of the distinct plan options that appear in the "Plan" column in the Accounts model. +- **Custom list**. Enter each item on a line. You can enter any string values you like. + +You can also [change a dashboard filter's selectable values](../../dashboards/filters#change-a-filters-selectable-values). + +## Setting a default value in the filter widget + +In the variables sidebar, you can set a default value for your variable. This value will be inserted into the corresponding filter widget by default (even if the filter widget is empty). + +To override the default value, insert a new value into the filter widget. + +## Requiring a value for a filter widget + +In the **Variable** settings sidebar, you can toggle the **Always require a value** option. If you turn this on: + +- You must enter a default value. +- The default value will override any [optional syntax](./optional-variables) in your code (like an optional `WHERE` clause). If no value is passed to the filter, Metabase will run the query using the default value. Click on the **Eye** icon in the editor to preview the SQL Metabase will run. + +## Filter widget operators + +For text, number, and date filter widgets, you'll need to select a filter operator. + +### Text + +Filter operator options include: + +- String +- String is not +- String contains +- String does not contain +- String starts with +- String ends with + +### Number + +Filter operator options include: + +- Equal to +- Not equal to +- Between +- Greater than or equal to +- Less than or equal to + +### Dates + +Filter operator options include: + +- Month and year +- Quarter and year +- Single date +- Date range +- Relative date +- All options. Metabase will give you a menu where you can choose how they filter dates: by range, relative dates, etc. diff --git a/_docs/master/questions/native-editor/optional-variables.md b/_docs/master/questions/native-editor/optional-variables.md new file mode 100644 index 0000000000..f9a349d3f3 --- /dev/null +++ b/_docs/master/questions/native-editor/optional-variables.md @@ -0,0 +1,158 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Questions +title: 'Optional variables' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/optional-variables.md' +layout: new-docs +summary: 'Make parts of your SQL query optional by wrapping clauses in double brackets.' +--- + +# Optional variables + +You can make a clause optional in a query. For example, you can create an optional `WHERE` clause that contains a [SQL variable](./sql-parameters), so that if no value is supplied to the variable (either in the filter or via the URL), the query will still run as if there were no `WHERE` clause. + +To make a variable optional in your native query, put `[[ .. ]]` brackets around the entire clause containing the `{% raw %}{{variable}}{% endraw %}`. If someone inputs a value in the filter widget for the `variable`, Metabase will place the clause in the template; otherwise Metabase will ignore the clause and run the query as though the clause didn't exist. + +In this example, if no value is given to `cat`, then the query will just select all the rows from the `products` table. But if `cat` does have a value, like "Widget", then the query will only grab the products with a category type of Widget: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +[[WHERE category = {{cat}}]] +{% endraw %} +``` + +### Your SQL must also be able to run without the optional clause in `[[ ]]` + +You need to make sure that your SQL is still valid when no value is passed to the variable in the bracketed clause. + +For example, excluding the `WHERE` keyword from the bracketed clause will cause an error if there's no value given for `cat`: + +```sql +-- this will cause an error: +{% raw %} +SELECT + count(*) +FROM + products +WHERE + [[category = {{cat}}]] +{% endraw %} +``` + +That's because when no value is given for `cat`, Metabase will try to execute SQL as if the clause in `[[ ]]` didn't exist: + +```sql +SELECT + count(*) +FROM + products +WHERE +``` + +Which is not a valid SQL query. Instead, put the entire `WHERE` clause in `[[ ]]`: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +[[WHERE + category = {{cat}}]] +{% endraw %} +``` + +When there's no value given for `cat`, Metabase will still execute a valid query: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +{% endraw %} +``` + +### You need at least one `WHERE` when using multiple optional clauses + +To use multiple optional clauses, you must include at least one regular `WHERE` clause followed by optional clauses, each starting with `AND`: + +```sql +{% raw %} +SELECT + count(*) +FROM + products +WHERE + TRUE + [[AND id = {{id}}]] + [[AND {{category}}]] +{% endraw %} +``` + +That last clause uses a [field filter](./field-filters) (note the lack of a column in the `AND` clause). When using a field filter, you _must_ exclude the column in the query; you need to map the variable in the side panel. + +### Optional variables in MongoDB + +If you're using MongoDB, you can make a clause optional like so: + +``` +{% raw %} +[ + [[{ + $match: {category: {{cat}}} + },]] + { + $count: "Total" + } +] +{% endraw %} +``` + +Or with multiple optional filters: + +``` +{% raw %} +[ + [[{ $match: {{cat}} },]] + [[{ $match: { price: { "$gt": {{minprice}} } } },]] + { + $count: "Total" + } +] +{% endraw %} +``` + +## Setting complex default values in the query + +You can also define default values directly in your query by enclosing comment syntax inside the end brackets of an optional parameter. + +```sql +WHERE column = [[ {% raw %}{{ your_parameter }}{% endraw %} --]] your_default_value +``` + +The comment will "activate" whenever you pass a value to `your_parameter`. + +This is useful when defining complex default values (for example, if your default value is a function like `CURRENT_DATE`). Here's a PostgreSQL example that sets the default value of a Date filter to the current date using `CURRENT_DATE`: + +```sql +{% raw %} +SELECT + * +FROM + orders +WHERE + DATE(created_at) = [[ {{dateOfCreation}} --]] CURRENT_DATE +{% endraw %} +``` + +If you pass a value to the variable, the `WHERE` clause runs, including the comment syntax that comments out the default `CURRENT_DATE` function. + +Note that the hash (`--`) used to comment the text might need to be replaced by the comment syntax specific to the database you're using. diff --git a/_docs/master/questions/native-editor/sql-parameters.md b/_docs/master/questions/native-editor/sql-parameters.md index e3413f60f7..3f93e22909 100644 --- a/_docs/master/questions/native-editor/sql-parameters.md +++ b/_docs/master/questions/native-editor/sql-parameters.md @@ -7,442 +7,93 @@ category: Questions title: 'SQL parameters' source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/sql-parameters.md' layout: new-docs +summary: 'Create SQL templates by adding filters and parameters to your SQL questions in the native code editor.' redirect_from: - /docs/master/users-guide/13-sql-parameters --- # SQL parameters -You can create SQL templates by adding variables to your SQL queries in the [Native/SQL editor][sql-editor]. These variables will create filter widgets that you can use to change the variable's value in the query. You can also add parameters to your question's URL to set the filters' values, so that when the question loads, those values are inserted into the variables. +![Variables](../images/filter-and-parameter.png) -![Variables](../images/02-widget.png) +You can create SQL templates by adding parameters (a.k.a. variables) to your SQL queries in the [Native/SQL editor](./writing-sql). -## Defining variables +These variables create widgets that people can use to plug in values for those variables. You can also connect [dashboard widgets to these parameters](../../dashboards/filters). -Typing `{% raw %}{{variable_name}}{% endraw %}` in your native query creates a variable called `variable_name`. +## SQL variable types -Field Filters, a special type of filter, have a [slightly different syntax](#field-filter-syntax). +When you define a variable, the **variables and parameters** side panel will appear. You can set a type for a variable, which changes the kind of filter widget that Metabase presents. -This example defines a **Text** variable called `category`: +Variable types include: -```sql -{% raw %} -SELECT - count(*) -FROM - products -WHERE - category = {{category}} -{% endraw %} -``` +- **[Field filter variables](./field-filters)**: create "smart" filter widgets with date pickers or dropdown menus. To use a field filter, you'll need to connect to a database field included in your query. +- **[Basic variables](./basic-sql-parameters)**: text, number, and date variables. You'll almost always want to use field filters instead of these basic variables, as field filters create "smart" filter widgets, but Metabase provides these basic variables for situations where you can't use field filters. +- **[Time grouping parameters](./time-grouping-parameters)**: allows people to change how the results are grouped by a date column: by month, week, day, etc. -Metabase will read the variable and attach a filter widget to the query, which people can use to change the value inserted into the `cat` variable with quotes. So if someone entered "Gizmo" into the filter widget, the query Metabase would run would be: +You can include multiple variables in a single query, and Metabase will add multiple widgets to the question. To rearrange the order of the widgets, enter edit mode and click on any widget and drag it around. -```sql -SELECT - count(*) -FROM - products -WHERE - category = 'Gizmo' -``` +### Configure your filter widget -If you're writing a native MongoDB query, your query would look more like this, with the `cat` variable being defined inside of the `match` clause. +When you add a field filter variable or basic variable to your SQL code, you'll need to configure it in the sidebar. -``` -{% raw %}[{ $match: { category: {{cat}} } }]{% endraw %} -``` +1. Set the **Filter widget type**. Options will differ depending on whether you used a [field filter](./field-filters) (preferred) or a [basic variable](./basic-sql-parameters) (if you can't use a field filter). +2. Set the **Filter widget** label. +3. Set **How should users filter on this variable?**: + - [Dropdown list](../../dashboards/filters#dropdown-list). A dropdown list shows all available values for the field in a selectable list. + - [Search box](../../dashboards/filters#search-box). A search box allows people to type to search for specific values. + - [Input box](../../dashboards/filters#plain-input-box). An input box provides a simple text field for entering values. +4. If the filter is mapped to a field in an aliased table, you'll need to [specify the table and field alias](./field-filters#specifying-the-table-and-field-alias). +5. Optionally, set a **Default filter widget value**. + +Check out [filter widgets](./filter-widgets). -## Setting SQL variables +## Setting values for SQL variables To set a SQL variable to a value, you can either: -- Enter a value into the filter widget, and re-run the question, or +- Enter a value into the [filter widget](./filter-widgets), and re-run the question. - Add a parameter to the URL and load the page. +### Setting a parameter via URL + To add a value to the URL, follow this syntax: ``` ?variable_name=value ``` -For example, to set the `{% raw %}{{cat}}{%endraw%}` variable on a question to the value "Gizmo", your URL would look something like: +For example, to set the `{% raw %}{{category}}{%endraw%}` variable on a question to the value "Gizmo", your URL would look something like: ``` -https://metabase.example.com/question/42-eg-question?cat=Gizmo +https://metabase.example.com/question/42-eg-question?category=Gizmo ``` To set multiple variables, separate parameters with an ampersand (`&`): ``` -https://metabase.example.com/question/42-eg-question?cat=Gizmo&maxprice=50 -``` - -## SQL variable types - -When you define a variable, the **Variables** side panel will appear. You can set a type for a variable, which changes the kind of filter widget that Metabase presents. - -There are four types of variables: - -- **Text**: a plain input box. -- **Number**: a plain input box. -- **Date**: a simple date picker. If you want a more expressive date picker, like specifying a range, you'll want to use a Field Filter. -- **[Field Filter](#the-field-filter-variable-type)**: different filter widgets, depending on the mapped field. - -That last variable type, [Field Filter](#the-field-filter-variable-type), is special; it lets you create "smart" filter widgets, like a search box, or a dropdown menu of values, or a dynamic date picker that allows you to specify a date range. - -You can include multiple variables in the query, and Metabase will add multiple filter widgets to the question. When you have multiple filter widgets, you can click on a filter widget and drag it around to rearrange the order. - -## The Field Filter variable type - -Setting a variable to the **Field Filter** type allows you to map the variable to a field in any table in the current database. Field filters let you create a "smart" filter widget that makes sense for that field. - -Field Filter variables should be used inside of a `WHERE` clause in SQL, or a `$match` clause in MongoDB. - -### Field Filter compatible types - -Field Filters ONLY work with the following field types: - -- Category -- Entity Name -- Entity Key -- Foreign Key -- City -- State -- ZIP or Postal Code - -The field can also be a date or timestamp, which can be left as "No semantic type" in the [Table Metadata](../../data-modeling/metadata-editing). - -When you set the **Variable type** to "Field Filter", Metabase will present an option to set the **Field to map to**, as well as the **Filter widget type**. The options available for the Filter widget type depend on the field's type. For example, if you map to a field of type Category, you'll see options for either "Category" or None. If you map to a Date Field, you'll see options for None, Month and year, Quarter and year, Single date, Date range, or Date filter. - -If you're not seeing the option to display a filter widget, make sure the mapped field is set to one of the above types, and then try manually syncing your database from the "Databases" section of the Admin Panel to force Metabase to scan and cache the field's values. - -If you want to map a Field Filter to a field that isn't one of the compatible types listed above, you'll need an Admin to change the field type for that column. See [metadata editing](../../data-modeling/metadata-editing). - -## Field Filter syntax - -Let's say you want to create a Field Filter that filters the `People` table by state, and you want people to be able to select multiple states at a time. Here's the query: - -The syntax for Field Filters differs from a Text, Number, or Date variable. - -```sql -{% raw %} -SELECT - * -FROM - PEOPLE -WHERE - {{state}} -{% endraw %} -``` - -Then, in the side panel, select the "Field Filter" variable type, and choose which field to map your variable to (in this case, `State`). - -Note the lack of the column and operator (like `=`). The reason you need to structure Field Filters this way is to handle cases where Metabase generates the code for you. For example, for handling cases where someone selects multiple values in the filter widget, or a range of dates. With Field Filters, you can't control the generated SQL, so if you need greater control, you should use one (or more) Text, Number, or Date variables. - -A MongoDB native query example might look like this: - -``` -{% raw %}[ {$match: {{date_var}} } ]{% endraw %} -``` - -For a more in-depth guide, check out [Field Filters: create smart filter widgets for SQL questions][field-filter]. - -### Field filters in BigQuery and Oracle - -Make sure your SQL dialect matches the database you've selected. Common issues involving how tables are quoted in the query: - -| Database | Dialect quirk | Example | -| -------- | --------------------------------------------------- | -------------------------- | -| BigQuery | Schemas and tables must be quoted with backticks. | `` FROM `dataset.table` `` | -| Oracle | Schemas and tables must be quoted in double quotes. | `FROM "schema.table"` | - -For more help, see [Troubleshooting SQL error messages](../../troubleshooting-guide/error-message#sql-editor). - -## How to create different types of filter widgets - -The kind of filter widget that Metabase displays when you create a Field Filter widget depends on a setting for that field in Metabase called **Filtering on this field**. Admins can set this field option to: - -- Plain input box -- Search box -- A list of all values (also known as a dropdown menu) - -Date fields will either have a simple date filter (for Date variables) or a dynamic date picker (for Field Filters mapped to a date field). - -If you want to change the filter widget for a particular field, you'll need to ask an Admin to update that field in [the Table Metadata](../../data-modeling/metadata-editing) and set the desired "Filtering on this field" option. - -### Filter widget with plain input box - -Create a simple **Text** or **Number** variable. Additionally, you can use a Field Filter with a field that has its **Filtering on this field** value set to "Plain input box". - -Note: to guard against SQL injection attacks, Metabase converts whatever is in the Search box to a string. If you want to use wildcards, check out [our Learn article][sql-variables]. - -### Filter widget with search box - -- Include a SQL variable in your query. -- Set the **Variable type** to **Field Filter**. -- Set the **Field to map to** to a field of type "Category" that has its **Filtering on this field** option set to "Search box" - -### Filter widget with dropdown menu and search - -To create a dropdown menu with search and a list of all values, you need to: - -- Include a SQL variable in your query. -- Set the **Variable type** to **Field Filter**. -- Set the **Field to map to** to a field of type "Category" that has its **Filtering on this field** option set to "A list of all values". -- Set the **Filter widget type** to "Category". - -If the field you want to create a dropdown for is not set to the type "Category" with **Filtering on this field** set to "A list of all values", an Admin will need to update the settings for that field. For example, if you want to create a dropdown menu for an incompatible field type like an Email field, an admin will need to change that field type to "Category", set the **Filtering on this field** option to **A list of all values**, then re-scan the values for that field. - -If however, there are too many different values in that column to display in a dropdown menu, Metabase will simply display a search box instead. So if you have a lot of email addresses, you may just get a search box anyway. The dropdown menu widgets work better when there's a small set of values to choose from (like the fifty U.S. states). - -## Field filter limitations - -Some things that could trip you up when trying to set up a Field Filter variable. - -### Field Filters don't work with table aliases - -You won't be able to select values from field filters in queries that use table aliases for joins or CTEs. - -The reason is that field filters generate SQL based on the mapped field; Metabase doesn't parse the SQL, so it can't tell what an alias refers to. You have three options for workarounds, depending on the complexity of your query. - -1. Use full table names. -2. Replace CTEs with subqueries. -3. Create a view in your database, and use the view as the basis of your query. - -### Field Filters must be connected to fields included in the query - -Your main query should be aware of all the tables that your Field Filter variable is pointing to, otherwise you'll get a SQL syntax error. For example, let's say that your main query includes a field filter like this: - -```sql -{% raw %} -SELECT - * -FROM - ORDERS -WHERE - {{ product_category }} -{% endraw %} -``` - -Let's say the `{% raw %}{{ product_category }}{% endraw %}` variable refers to another question that uses the `Products` table. For the field filter to work, you'll need to include a join to `Products` in your main query. - -```sql -{% raw %} -SELECT - * -FROM - ORDERS - JOIN PRODUCTS ON ORDERS.product_id = PRODUCTS.id -WHERE - {{ product_category }} -{% endraw %} -``` - -## Customizing dropdown lists and search box values - -With Text and Field filter variables, you can tell Metabase what values people can choose from when using a filter with a dropdown list or search box. - -1. In the native editor, add a {% raw %}{{variable}}{% endraw %} in double braces. -2. If the sidebar doesn't open, you can click on the **{x}** icon on the right to open the **Variables** sidebar. -3. In the **Settings** tab, set the **Variable type** to either "Text" or "Field Filter". -4. In the sidebar, go to **How should users filter on this variable?** Pick either **Dropdown list** or **Search box**. -5. Next to the option you chose, click **Edit**. -6. Metabase will pop up a modal where you can select **Where the values should come from**. - -You can choose: - -- **From connected fields** If you selected the Field filter variable type, you'll also have the option to use the connected field. -- **From another model or question**. If you select this option, you'll need to pick a model or question, then a field from that model or question that Metabase will use to supply the values for that dropdown or search box. For example, if you want the dropdown to list the different plans an account could be on, you could select an "Account" model you created, and select the field "Plan" to power that dropdown. The dropdown would then list all of the distinct plan options that appear in the "Plan" column in the Accounts model. -- **Custom list**. Enter each item on a line. You can enter any string values you like. - -You can also [change a dashboard filter's selectable values](../../dashboards/filters#change-a-filters-selectable-values). - -## Setting a default value in the filter widget - -In the variables sidebar, you can set a default value for your variable. This value will be inserted into the corresponding filter widget by default (even if the filter widget is empty). You'll need to insert a new value into the filter widget to override the default. - -## Setting complex default values in the query - -You can also define default values directly in your query by enclosing comment syntax inside the end brackets of an optional parameter. - -```sql -WHERE column = [[ {% raw %}{{ your_parameter }}{% endraw %} --]] your_default_value -``` - -The comment will "activate" whenever you pass a value to `your_parameter`. - -This is useful when defining complex default values (for example, if your default value is a function like `CURRENT_DATE`). Here's a PostgreSQL example that sets the default value of a Date filter to the current date using `CURRENT_DATE`: - -```sql -{% raw %} -SELECT - * -FROM - orders -WHERE - DATE(created_at) = [[ {{dateOfCreation}} --]] CURRENT_DATE -{% endraw %} -``` - -If you pass a value to the variable, the `WHERE` clause runs, including the comment syntax that comments out the default `CURRENT_DATE` function. - -Note that the hash (`--`) used to comment the text might need to be replaced by the comment syntax specific to the database you're using. - -## Requiring a value for a filter widget - -In the **Variable** settings sidebar, you can toggle the **Always require a value** option. If you turn this on: - -- You must enter a default value. -- The default value will override any optional syntax in your code (like an optional `WHERE` clause). If no value is passed to the filter, Metabase will run the query using the default value. Click on the **Eye** icon in the editor to preview the SQL Metabase will run. - -## Making variables optional - -You can make a clause optional in a query. For example, you can create an optional `WHERE` clause that contains a SQL variable, so that if no value is supplied to the variable (either in the filter or via the URL), the query will still run as if there were no `WHERE` clause. - -To make a variable optional in your native query, put `[[ .. ]]` brackets around the entire clause containing the `{% raw %}{{variable}}{% endraw %}`. If someone inputs a value in the filter widget for the `variable`, Metabase will place the clause in the template; otherwise Metabase will ignore the clause and run the query as though the clause didn't exist. - -In this example, if no value is given to `cat`, then the query will just select all the rows from the `products` table. But if `cat` does have a value, like "Widget", then the query will only grab the products with a category type of Widget: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -[[WHERE category = {{cat}}]] -{% endraw %} -``` - -### Your SQL must also be able to run without the optional clause in `[[ ]]` - -You need to make sure that your SQL is still valid when no value is passed to the variable in the bracketed clause. - -For example, excluding the `WHERE` keyword from the bracketed clause will cause an error if there's no value given for `cat`: - -```sql --- this will cause an error: -{% raw %} -SELECT - count(*) -FROM - products -WHERE - [[category = {{cat}}]] -{% endraw %} -``` - -That's because when no value is given for `cat`, Metabase will try to execute SQL as if the clause in `[[ ]]` didn't exist: - -```sql -SELECT - count(*) -FROM - products -WHERE -``` - -which is not a valid SQL query. - -Instead, put the entire `WHERE` clause in `[[ ]]`: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -[[WHERE - category = {{cat}}]] -{% endraw %} -``` - -When there's no value given for `cat`, Metabase will just execute: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -{% endraw %} -``` - -which is still a valid query. - -### You need at least one `WHERE` when using multiple optional clauses - -To use multiple optional clauses, you must include at least one regular `WHERE` clause followed by optional clauses, each starting with `AND`: - -```sql -{% raw %} -SELECT - count(*) -FROM - products -WHERE - TRUE - [[AND id = {{id}}] - [[AND {{category}}]] -{% endraw %} -``` - -That last clause uses a Field filter (note the lack of a column in the `AND` clause). When using a field filter, you must exclude the column in the query; you need to map the variable in the side panel. - -### Optional variables in MongoDB - -If you're using MongoDB, you can make an clause optional like so: - -``` -{% raw %} -[ - [[{ - $match: {category: {{cat}}} - },]] - { - $count: "Total" - } -] -{% endraw %} -``` - -Or with multiple optional filters: - -``` -{% raw %} -[ - [[{ $match: {{cat}} },]] - [[{ $match: { price: { "$gt": {{minprice}} } } },]] - { - $count: "Total" - } -] -{% endraw %} +https://metabase.example.com/question/42-eg-question?category=Gizmo&maxprice=50 ``` ## Connecting a SQL question to a dashboard filter -In order for a saved SQL/native question to be usable with a dashboard filter, the question must contain at least one variable. +In order for a SQL/native question to be usable with a [dashboard filter](../../dashboards/filters), the question must contain at least one variable or parameter. -The kind of dashboard filter that can be used with the SQL question depends on the field. For example, if you have a field filter called `{% raw %}{{var}}{% endraw %}` and you map it to a State field, you can map a Location dashboard filter to your SQL question. In this example, you'd create a new dashboard (or go to an existing dashboard), click the **Pencil icon** to enter **Dashboard edit mode**, add the SQL question that contains your State Field Filter variable, add a new dashboard filter (or edit an existing Location filter), then click the dropdown on the SQL question card to see the State Field Filter. +The kind of dashboard filter that can be used with the SQL question depends on the field. For example, if you have a field filter called `{% raw %}{{var}}{% endraw %}` and you map it to a field with State semantic type, you can map a location dashboard filter to your SQL question. In this example, you'd: -If you add a **Date** variable to the question, then it's only possible to use the dashboard filter option **Single Date**. So if you are trying to use one of the other Time options on the dashboard, you'll need to change the variable to a [Field Filter](#the-field-filter-variable-type) variable and map it to a date column. +1. Create a new dashboard (or go to an existing dashboard). +2. Click the **Pencil icon** to enter **Dashboard edit mode**. +3. Add the SQL question that contains your `State` field filter. +4. Add a new dashboard filter (or edit an existing Location filter). +5. Click the dropdown on the SQL question card to connect the widget to the `State` field filter. -![Field filter](../images/state-field-filter.png) +If you add a basic **Date** variable to the question (i.e., not a field filter), then it's only possible to use the dashboard filter option **Single Date**. So if you're trying to use one of the other Time options on the dashboard, you'll need to change the variable to a [field filter](./field-filters) and map it to a date field. -More on [Dashboard filters][dashboard-filters]. +![Field filter](../images/state-field-filter.png) ## Further reading -- [Create filter widgets for charts using SQL variables][sql-variables]. -- [Field Filters: create smart filter widgets for SQL questions][field-filter]. -- [Troubleshooting SQL][troubleshooting-sql]. -- [Troubleshooting filters][troubleshooting-filters]. -- [Dashboard filters][dashboard-filters]. - -[sql-editor]: ./writing-sql -[dashboard-filters]: ../../dashboards/filters -[field-filter]: /learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters -[sql-variables]: /learn/metabase-basics/querying-and-dashboards/sql-in-metabase/sql-variables -[troubleshooting-filters]: ../../troubleshooting-guide/filters -[troubleshooting-sql]: ../../troubleshooting-guide/sql +- [Create filter widgets for charts using SQL variables](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/sql-variables). +- [Field Filters: create smart filter widgets for SQL questions](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters). +- [Troubleshooting SQL](../../troubleshooting-guide/sql). +- [Troubleshooting filters](../../troubleshooting-guide/filters). +- [Dashboard filters](../../dashboards/filters). diff --git a/_docs/master/questions/native-editor/time-grouping-parameters.md b/_docs/master/questions/native-editor/time-grouping-parameters.md new file mode 100644 index 0000000000..b6f2b9af1d --- /dev/null +++ b/_docs/master/questions/native-editor/time-grouping-parameters.md @@ -0,0 +1,62 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Questions +title: 'Time grouping parameter' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/native-editor/time-grouping-parameters.md' +layout: new-docs +--- + +# Time grouping parameter + +You can add a parameter to SQL questions to change how results are grouped by time: by day, week, month, and so on. + +To add a time grouping parameter, you'll need: + +- An aggregation (like `COUNT`). +- A parameter in the `SELECT` clause +- That same parameter in the `GROUP BY` clause. + +## Time grouping parameter example + +Here's an example that counts the number of orders in the `orders` table and inserts a parameter to allow people to change how Metabase groups the results by the `created_at` column. + +```sql +{% raw %} +SELECT + COUNT(*) AS "Orders", + {{mb.time_grouping("Time grouping", "created_at")}} AS "Created At" +FROM + orders +GROUP BY + {{mb.time_grouping("Time grouping", "created_at")}} +{% endraw %} +``` + +Like in all SQL groupings, you must include the parameter in both the `SELECT` and `GROUP BY` clauses. You can also use the `mb.time_grouping` function on different columns in the same query, like this: + +```sql +SELECT + COUNT(*) AS "Count", + {{created_at_param}} AS "Created at", + {{trial_ends_at}} AS "Trial ends at" +FROM + accounts +GROUP BY + {{created_at_param}}, + {{trial_ends_at}} +``` + +Like with all parameters, you can set a default value (e.g., "month"). With time grouping parameters, you're limited to the options for the [time grouping parameter](../../dashboards/filters#time-grouping-parameter). + +If people don't set a value for the parameter, Metabase won't group to a date part (like day or week). It will just group by untruncated dates. + +## Handling aliases + +Just like with field filters, if you alias a table, then map a time grouping parameter to a field in that aliased table, you'll need to [tell Metabase about the table and field alias](./field-filters#specifying-the-table-and-field-alias). + +## Connecting to a dashboard filter + +See [dashboard filters and parameters](../../dashboards/filters). diff --git a/_docs/master/questions/native-editor/writing-sql.md b/_docs/master/questions/native-editor/writing-sql.md index fa19e2a2da..e1730755b2 100644 --- a/_docs/master/questions/native-editor/writing-sql.md +++ b/_docs/master/questions/native-editor/writing-sql.md @@ -129,7 +129,7 @@ See [Caching question policies](../../configuring-metabase/caching#question-cach [learn-sql]: /learn/sql/working-with-sql [ref-models]: ./referencing-saved-questions-in-queries -[sample-database-gloss]: /glossary/sample_database +[sample-database-gloss]: /glossary/sample-database [sql-gloss]: /glossary/sql [troubleshooting-sql]: ../../troubleshooting-guide/sql [variable-gloss]: /glossary/variable diff --git a/_docs/master/questions/query-builder/expressions/converttimezone.md b/_docs/master/questions/query-builder/expressions/converttimezone.md index 24d1478c71..30aed11ce7 100644 --- a/_docs/master/questions/query-builder/expressions/converttimezone.md +++ b/_docs/master/questions/query-builder/expressions/converttimezone.md @@ -194,7 +194,7 @@ This section covers functions and formulas that work the same way as the Metabas ### SQL -When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [timestamp sample data](#creating-custom-report-dates) is a `timestamp without time zone` stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/countif.md b/_docs/master/questions/query-builder/expressions/countif.md index f6ed404aa1..34e0d49b2f 100644 --- a/_docs/master/questions/query-builder/expressions/countif.md +++ b/_docs/master/questions/query-builder/expressions/countif.md @@ -172,7 +172,7 @@ You'll also need to set the **Group by** column to "Created Date: Month". ### SQL -When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. If our [sample data](#multiple-conditions) is stored in a PostgreSQL database, the SQL query: diff --git a/_docs/master/questions/query-builder/expressions/datetimeadd.md b/_docs/master/questions/query-builder/expressions/datetimeadd.md index fef76b5b36..6ebb99a2c0 100644 --- a/_docs/master/questions/query-builder/expressions/datetimeadd.md +++ b/_docs/master/questions/query-builder/expressions/datetimeadd.md @@ -128,7 +128,7 @@ datetimeAdd([Opened On], 14, "day") ### SQL -When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [coffee sample data](#calculating-an-end-date) is stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/datetimediff.md b/_docs/master/questions/query-builder/expressions/datetimediff.md index b1981a10c6..7a8578568b 100644 --- a/_docs/master/questions/query-builder/expressions/datetimediff.md +++ b/_docs/master/questions/query-builder/expressions/datetimediff.md @@ -95,7 +95,7 @@ This section covers functions and formulas that work the same way as the Metabas ### SQL -When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [cheese sample data](#calculating-age) is stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/datetimesubtract.md b/_docs/master/questions/query-builder/expressions/datetimesubtract.md index a5ae46dce0..798d29c4dd 100644 --- a/_docs/master/questions/query-builder/expressions/datetimesubtract.md +++ b/_docs/master/questions/query-builder/expressions/datetimesubtract.md @@ -128,7 +128,7 @@ datetimeSubtract([Arrive By], 30, "minute") ### SQL -When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your graphical query settings (filters, summaries, etc.) into a query, and run that query against your database to get your results. If our [events sample data](#calculating-a-start-date) is stored in a PostgreSQL database: diff --git a/_docs/master/questions/query-builder/expressions/isempty.md b/_docs/master/questions/query-builder/expressions/isempty.md index 441bb9e8a9..6ef177a4d8 100644 --- a/_docs/master/questions/query-builder/expressions/isempty.md +++ b/_docs/master/questions/query-builder/expressions/isempty.md @@ -140,6 +140,6 @@ case(isEmpty([Feedback]), "No feedback.", [Feedback]) [custom-expressions-doc]: ../expressions [custom-expressions-learn]: /learn/metabase-basics/querying-and-dashboards/questions/custom-expressions [data-types]: /learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types -[notebook-editor-def]: /glossary/query_builder +[notebook-editor-def]: /glossary/query-builder [numpy]: https://numpy.org/doc/ [pandas]: https://pandas.pydata.org/pandas-docs/stable/ diff --git a/_docs/master/questions/query-builder/expressions/isnull.md b/_docs/master/questions/query-builder/expressions/isnull.md index b8702b3c24..2fc4c27cd9 100644 --- a/_docs/master/questions/query-builder/expressions/isnull.md +++ b/_docs/master/questions/query-builder/expressions/isnull.md @@ -148,6 +148,6 @@ case(isNull([Feedback]), "Unknown feedback.", [Feedback]) [custom-expressions-doc]: ../expressions [custom-expressions-learn]: /learn/metabase-basics/querying-and-dashboards/questions/custom-expressions [data-types]: /learn/grow-your-data-skills/data-fundamentals/data-types-overview#examples-of-data-types -[notebook-editor-def]: /glossary/query_builder +[notebook-editor-def]: /glossary/query-builder [numpy]: https://numpy.org/doc/ [pandas]: https://pandas.pydata.org/pandas-docs/stable/ diff --git a/_docs/master/questions/query-builder/expressions/now.md b/_docs/master/questions/query-builder/expressions/now.md index af25882257..dfabb5647c 100644 --- a/_docs/master/questions/query-builder/expressions/now.md +++ b/_docs/master/questions/query-builder/expressions/now.md @@ -83,7 +83,7 @@ Different ways to do the same thing, because while you'd love to use custom expr ### SQL -When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. By default, `now` uses your Metabase's [report time zone](../../../configuring-metabase/localization#report-timezone). If your admin hasn't set a report time zone, `now` will use your database's time zone. diff --git a/_docs/master/questions/query-builder/expressions/sumif.md b/_docs/master/questions/query-builder/expressions/sumif.md index 51c3cd5d74..08a98f0056 100644 --- a/_docs/master/questions/query-builder/expressions/sumif.md +++ b/_docs/master/questions/query-builder/expressions/sumif.md @@ -185,7 +185,7 @@ Don't forget to set the **Group by** column to "Date Received: Month". ### SQL -When you run a question using the [query builder](/glossary/query_builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. +When you run a question using the [query builder](/glossary/query-builder), Metabase will convert your query builder settings (filters, summaries, etc.) into a SQL query, and run that query against your database to get your results. If our [payment sample data](#sumif) is stored in a PostgreSQL database, the SQL query: diff --git a/_docs/master/questions/query-builder/join.md b/_docs/master/questions/query-builder/join.md index df1e647967..9ea8487df5 100644 --- a/_docs/master/questions/query-builder/join.md +++ b/_docs/master/questions/query-builder/join.md @@ -7,6 +7,7 @@ category: Questions title: 'Joining data' source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/query-builder/join.md' layout: new-docs +summary: 'Learn how to combine data from different tables using joins. We''ll show you how to pick tables, match columns, and choose the right join type.' redirect_from: - /docs/master/users-guide/join --- @@ -17,26 +18,26 @@ redirect_from: You can [join data][join] to combine your current data with another table, or even with a saved question. -After you click on the Join Data button to add a join step, you'll need to pick the data (from the same database) that you want to join. You can only pick tables and saved questions that are from the same database as your starting data. +After you click the "Join Data" button to add a join step, you'll need to pick the data (from the same database) that you want to join. You can only pick tables and saved questions that are from the same database as your starting data. ![Picking the data to join](../images/join-pick-data.png) -Next, you'll need to pick the columns you want to join on. This means you pick a column from the first table, and a column from the second table, and the join will stitch rows together where the value from the first column is equal to the value in the second column. A very common example is to join on an ID column in each table, so if you happened to pick a table to join on where there is a foreign key relationship between the tables, Metabase will automatically pick those corresponding ID columns for you. At the end of your join step, there's a `Columns` button you can click to choose which columns you want to include from the joined data. +Next, you'll need to pick the columns you want to join on. This means you pick a column from the first table and a column from the second table, and the join will stitch rows together where the value from the first column equals the value in the second column. A very common example is joining on an ID column in each table. If you pick a table to join where there's a foreign key relationship between the tables, Metabase will automatically pick those corresponding ID columns for you. At the end of your join step, there's a "Columns" button you can click to choose which columns you want to include from the joined data. -By default, Metabase will do a left outer join, but you can click on the Venn diagram icon to select a different type of join. Not all databases support all types of joins, so Metabase will only display the options supported by the database you're using. +By default, Metabase will do a left outer join, but you can click the Venn diagram icon to select a different type of join. Not all databases support all types of joins, so Metabase will only display the options supported by the database you're using. Here are the basic types of joins: -- **Left outer join:** select all records from Table A, along with records from Table B that meet the join condition, if any. -- **Right outer join:** select all records from Table B, along with records from Table A that meet the join condition, if any. -- **Inner join:** only select the records from Table A and B where the join condition is met. -- **Full outer join:** select all records from both tables, whether or not the join condition is met. +- **Left outer join:** Select all records from Table A, along with records from Table B that meet the join condition, if any. +- **Right outer join:** Select all records from Table B, along with records from Table A that meet the join condition, if any. +- **Inner join:** Only select the records from Table A and B where the join condition is met. +- **Full outer join:** Select all records from both tables, whether or not the join condition is met. -**A left outer join example:** If Table A is Orders and Table B is Customers, and assuming you do a join where the `customer_id` column in Orders is equal to the `ID` column in Customers, when you do a left outer join your results will be a full list of all your orders, and each order row will also display the columns of the customer who placed that order. Since a single customer can place many orders, a given customer's information might be repeated many times for different order rows. If there isn't a corresponding customer for a given order, the order's information will be shown, but the customer columns will just be blank for that row. +**A left outer join example:** If Table A is Orders and Table B is Customers, and you do a join where the `customer_id` column in Orders equals the `ID` column in Customers, when you do a left outer join your results will be a full list of all your orders, and each order row will also display the columns of the customer who placed that order. Since a single customer can place many orders, a given customer's information might be repeated many times for different order rows. If there isn't a corresponding customer for a given order, the order's information will be shown, but the customer columns will just be blank for that row. ## Multiple stages of joins -In many cases you might have tables A, B, and C, where A and B have a connection, and B and C have a connection, but A and C don't. If you want to join A to B to C, all you have to do is add multiple join steps. Click on Join Data, join table A to table B, then click the Join Data step below that completed join block to add a second join step, and join the results of your last join to table C. +In many cases you might have tables A, B, and C, where A and B have a connection, and B and C have a connection, but A and C don't. If you want to join A to B to C, all you have to do is add multiple join steps. Click "Join Data," join table A to table B, then click the "Join Data" step below that completed join block to add a second join step, and join the results of your last join to table C. ![An A to B to C join](../images/join-a-b-c.png) @@ -59,10 +60,42 @@ You can join tables on comparison conditions like: ![Join operators](../images/join-operator.png) +## Joins with custom expressions + +Sometimes you want to join data using constant values, relative dates, or some other custom conditions. + +For example, let's say you have a table of reviews and want to add a column that includes the average rating for all products. + +You could first calculate the average rating, then join the result to the reviews table on `1=1`. + +![Join with custom expression](../images/join-with-custom-expression.png) + +To use a custom expression to define a join key: + +1. Click on one of the join keys. +2. Select **custom expression**. +3. Enter your expression (including a constant like `1`). +4. Click **Done**. + +Another example: Let's say you have: + + - A `customers` table that stores names under `first_name` and `last_name` + - An `accounts` table that stores first and last names in a single column, `full_name` + +You could join those tables using a custom expression. The join key for the `customers` table would look something like: + +``` +concat([first_name], " ", [last_name]) +``` + +And the join key for the `accounts` table would simply be the `full_name` column. + +Take a look at our [list of expressions](./expressions-list). + ## Further reading - [Joins in Metabase][join] -- [Type of joins][join-types] +- [Types of joins][join-types] [join]: /learn/metabase-basics/querying-and-dashboards/questions/joins-in-metabase [join-types]: /learn/sql/working-with-sql/sql-join-types diff --git a/_docs/master/questions/start.md b/_docs/master/questions/start.md index 9c0fc8bfa9..57009c77e1 100644 --- a/_docs/master/questions/start.md +++ b/_docs/master/questions/start.md @@ -49,6 +49,30 @@ Write native code (like SQL) to query your data source. Pass parameters into variables in your SQL templates. +### [Field filters](./native-editor/field-filters) + +Create smart filter widgets by connecting field filter variables to fields in your database. + +### [Basic SQL parameters](./native-editor/basic-sql-parameters) + +Learn the basics of using parameters in SQL queries. + +### [Optional variables](./native-editor/optional-variables) + +Use brackets to create parameters that can be left empty in your queries. + +### [Time grouping parameters](./native-editor/time-grouping-parameters) + +Group your data by time periods using parameters in native queries. + +### [Filter widgets](./native-editor/filter-widgets) + +Configure filter widgets connected to variables in your native queries. + +### [Referencing saved questions in queries](./native-editor/referencing-saved-questions-in-queries) + +Use saved questions as data sources in your native queries. + ### [Snippets](./native-editor/snippets) Reuse and share bits of SQL. diff --git a/_docs/master/troubleshooting-guide/filters.md b/_docs/master/troubleshooting-guide/filters.md index 097e5c8cea..92ed0eea69 100644 --- a/_docs/master/troubleshooting-guide/filters.md +++ b/_docs/master/troubleshooting-guide/filters.md @@ -47,7 +47,7 @@ If a question filter is giving you no results or the wrong results: If you're having trouble filtering on a: - [Custom column](../questions/query-builder/editor#custom-columns): check if the custom expression is working as expected. For example, your custom expression might be returning blank values when you expect numbers. -- [SQL field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type): make sure you're using the correct [field filter syntax](../questions/native-editor/sql-parameters#field-filter-syntax), then see [Troubleshooting SQL variables](./sql#sql-variables-and-field-filters). +- [SQL field filter](../questions/native-editor/field-filters): make sure you're using the correct [field filter syntax](../questions/native-editor/field-filters#field-filter-syntax), then see [Troubleshooting SQL variables](./sql#sql-variables-and-field-filters). **Explanation** @@ -85,7 +85,7 @@ Timestamps, in particular, are the root of all evil, so please be patient with y ## Field filters in BigQuery and Oracle -If you are getting an error when using field filters with BigQuery or Oracle, make sure you use the correct syntax for the `FROM` clause. See [Field filters in BigQuery and Oracle](../questions/native-editor/sql-parameters#field-filters-in-bigquery-and-oracle). +If you are getting an error when using field filters with BigQuery or Oracle, make sure you use the correct syntax for the `FROM` clause. See [Field filters in BigQuery and Oracle](../questions/native-editor/field-filters#field-filters-in-bigquery-and-oracle). ## Missing or incorrect filter values diff --git a/_docs/master/troubleshooting-guide/linked-filters.md b/_docs/master/troubleshooting-guide/linked-filters.md index 2313faf8a6..563d7fbd5c 100644 --- a/_docs/master/troubleshooting-guide/linked-filters.md +++ b/_docs/master/troubleshooting-guide/linked-filters.md @@ -21,11 +21,11 @@ If you are having problems with a regular [filter widget][filter-widget-gloss], ## Does a connected dashboard card use a SQL variable? -**Root cause**: Native/SQL questions must have a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type) variable in order to be linked. Regular SQL variables won't work. +**Root cause**: Native/SQL questions must have a [field filter](../questions/native-editor/field-filters) variable in order to be linked. Regular SQL variables won't work. **Steps to take**: -1. Update the card's query to change the regular variable to a [field filter](../questions/native-editor/sql-parameters#the-field-filter-variable-type) variable. +1. Update the card's query to change the regular variable to a [field filter](../questions/native-editor/field-filters) variable. See [Limitations of linking filters](../dashboards/linked-filters#limitations-of-linked-filters). diff --git a/_docs/master/troubleshooting-guide/sql.md b/_docs/master/troubleshooting-guide/sql.md index 6149dd0a04..53983e0683 100644 --- a/_docs/master/troubleshooting-guide/sql.md +++ b/_docs/master/troubleshooting-guide/sql.md @@ -22,9 +22,8 @@ layout: new-docs ## SQL variables and field filters - [Filter widget doesn't display a dropdown menu of values](../data-modeling/metadata-editing#changing-a-search-box-filter-to-a-dropdown-filter). -- [SQL query contains table aliases](../questions/native-editor/sql-parameters#field-filters-dont-work-with-table-aliases). -- [SQL syntax error: missing `FROM` clause](../questions/native-editor/sql-parameters#field-filters-must-be-connected-to-fields-included-in-the-query). -- [No option to display a filter widget](../questions/native-editor/sql-parameters#field-filter-compatible-types). +- [SQL query contains table aliases](../questions/native-editor/field-filters#specifying-the-table-and-field-alias). +- [SQL syntax error: missing `FROM` clause](../questions/native-editor/field-filters#field-filters-must-be-connected-to-database-fields-included-in-the-query). - [I don't know the SQL variable type](/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/sql-variables) ## SQL syntax errors diff --git a/_site/docs/master/CONTRIBUTING.html b/_site/docs/master/CONTRIBUTING.html index 22ddaace09..903a081dfe 100644 --- a/_site/docs/master/CONTRIBUTING.html +++ b/_site/docs/master/CONTRIBUTING.html @@ -5014,12 +5014,6 @@

      Resources
      Data and Business Intelligence Glossary
      Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5033,6 +5027,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset

      @@ -5049,24 +5044,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/actions/basic.html b/_site/docs/master/actions/basic.html index ca0e98e91e..a0126858b5 100644 --- a/_site/docs/master/actions/basic.html +++ b/_site/docs/master/actions/basic.html @@ -4989,12 +4989,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5008,6 +5002,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset
      @@ -5024,24 +5019,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/actions/custom.html b/_site/docs/master/actions/custom.html index f6626dd4eb..d455ed338a 100644 --- a/_site/docs/master/actions/custom.html +++ b/_site/docs/master/actions/custom.html @@ -5085,12 +5085,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5104,6 +5098,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset
      @@ -5120,24 +5115,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/actions/introduction.html b/_site/docs/master/actions/introduction.html index 2efb8496c7..8e47ea85cd 100644 --- a/_site/docs/master/actions/introduction.html +++ b/_site/docs/master/actions/introduction.html @@ -4995,12 +4995,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5014,6 +5008,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset
      @@ -5030,24 +5025,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/actions/start.html b/_site/docs/master/actions/start.html index 945e680abc..1f996cd154 100644 --- a/_site/docs/master/actions/start.html +++ b/_site/docs/master/actions/start.html @@ -4933,12 +4933,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -4952,6 +4946,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -4968,24 +4963,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/api.html b/_site/docs/master/api.html index 090c90c3e4..1cdcfe3110 100644 --- a/_site/docs/master/api.html +++ b/_site/docs/master/api.html @@ -190,6 +190,105 @@ }, "required" : [ "zoom", "x", "y", "lat-field", "lon-field" ] }, + "gsheets.response" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "error" : { + "type" : "boolean" + }, + "message" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "error", "message" ] + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { } + }, { + "type" : "object", + "properties" : { + "created_at" : { + "type" : "integer", + "minimum" : 1 + }, + "created_by_id" : { + "type" : "integer", + "minimum" : 1 + }, + "db_id" : { + "type" : "integer", + "minimum" : 1 + }, + "sync_started_at" : { + "type" : "integer", + "minimum" : 1 + }, + "url" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "url", "created_at", "sync_started_at", "created_by_id", "db_id" ] + }, { + "type" : "object", + "properties" : { + "created_at" : { + "type" : "integer", + "minimum" : 1 + }, + "created_by_id" : { + "type" : "integer", + "minimum" : 1 + }, + "db_id" : { + "type" : "integer", + "minimum" : 1 + }, + "last_sync_at" : { + "type" : "integer", + "minimum" : 1 + }, + "next_sync_at" : { + "type" : "integer", + "minimum" : 1 + }, + "url" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "url", "created_at", "last_sync_at", "next_sync_at", "created_by_id", "db_id" ] + }, { + "type" : "object", + "properties" : { + "created_at" : { + "type" : "integer", + "minimum" : 1 + }, + "created_by_id" : { + "type" : "integer", + "minimum" : 1 + }, + "db_id" : { + "type" : "integer", + "minimum" : 1 + }, + "error_message" : { + "type" : "string", + "minLength" : 1 + }, + "url" : { + "type" : "string", + "minLength" : 1 + } + }, + "required" : [ "url", "created_at", "error_message", "created_by_id", "db_id" ] + } ] + } ] + }, "metabase-enterprise.metabot-v3.client.schema.message" : { "allOf" : [ { "type" : "object", @@ -275,10 +374,126 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.answer-sources-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "metrics" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" + } + }, + "models" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" + } + } + }, + "required" : [ "metrics", "models" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.basic-metric" : { + "type" : "object", + "properties" : { + "default_time_dimension_field_id" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "type" : { + "const" : "metric" + } + }, + "required" : [ "id", "type", "name" ] + }, + "metabase-enterprise.metabot-v3.tools.api.basic-table" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "fields" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "id" : { + "type" : "integer" + }, + "metrics" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" + } + }, + "name" : { + "type" : "string" + }, + "type" : { + "type" : "string", + "enum" : [ "model", "table" ] + } + }, + "required" : [ "id", "type", "name", "fields" ] + }, "metabase-enterprise.metabot-v3.tools.api.bucket" : { "type" : "string", "enum" : [ "millisecond", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "second-of-minute", "minute-of-hour", "hour-of-day", "day-of-week", "day-of-month", "day-of-year", "week-of-year", "month-of-year", "quarter-of-year", "year-of-era" ] }, + "metabase-enterprise.metabot-v3.tools.api.column" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "field_id" : { + "type" : "string" + }, + "field_values" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "type" : "string" + }, + "type" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-type" + } + }, + "required" : [ "field_id", "name" ] + }, + "metabase-enterprise.metabot-v3.tools.api.columns" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + } + }, + "metabase-enterprise.metabot-v3.tools.api.count" : { + "type" : "integer" + }, "metabase-enterprise.metabot-v3.tools.api.create-dashboard-subscription-arguments" : { "allOf" : [ { "type" : "object", @@ -441,6 +656,28 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.field-type" : { + "type" : "string", + "enum" : [ "boolean", "date", "datetime", "time", "number", "string" ] + }, + "metabase-enterprise.metabot-v3.tools.api.field-values" : { + "anyOf" : [ { + "type" : "array", + "items" : { + "type" : "boolean" + } + }, { + "type" : "array", + "items" : { + "type" : "number" + } + }, { + "type" : "array", + "items" : { + "type" : "string" + } + } ] + }, "metabase-enterprise.metabot-v3.tools.api.field-values-arguments" : { "allOf" : [ { "type" : "object", @@ -465,6 +702,38 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.field-values-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "field_id" : { + "type" : "string" + }, + "statistics" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.statistics" + }, + "values" : { + "type" : "array", + "items" : { } + } + }, + "required" : [ "field_id" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.filter" : { "anyOf" : [ { "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.existence-filter" @@ -544,6 +813,86 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.filtering-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Query" + }, + "query_id" : { + "type" : "string" + }, + "result_columns" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + } + }, + "type" : { + "const" : "query" + } + }, + "required" : [ "type", "query_id", "query", "result_columns" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.find-metric-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "default_time_dimension_field_id" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + }, + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "queryable_dimensions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.column" + } + }, + "type" : { + "const" : "metric" + } + }, + "required" : [ "id", "type", "name", "queryable_dimensions" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.find-outliers-arguments" : { "allOf" : [ { "type" : "object", @@ -613,24 +962,115 @@ "properties" : { } } ] }, - "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { - "type" : "object", - "properties" : { - "for" : { - "anyOf" : [ { - "type" : "object", - "properties" : { - "metric_id" : { - "type" : "integer" - } - }, - "required" : [ "metric_id" ] - }, { - "type" : "object", - "properties" : { - "table_id" : { - "type" : "string" - } + "metabase-enterprise.metabot-v3.tools.api.find-outliers-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "dimension" : { }, + "value" : { + "anyOf" : [ { + "type" : "integer" + }, { + "type" : "number" + } ] + } + }, + "required" : [ "dimension", "value" ] + } + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.full-metric" : { + "type" : "object", + "properties" : { + "default_time_dimension_field_id" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "queryable_dimensions" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "type" : { + "const" : "metric" + } + }, + "required" : [ "id", "type", "name" ] + }, + "metabase-enterprise.metabot-v3.tools.api.full-table" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "fields" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "id" : { + "type" : "integer" + }, + "metrics" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-metric" + } + }, + "name" : { + "type" : "string" + }, + "queryable_foreign_key_tables" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.basic-table" + } + }, + "type" : { + "type" : "string", + "enum" : [ "model", "table" ] + } + }, + "required" : [ "id", "type", "name", "fields" ] + }, + "metabase-enterprise.metabot-v3.tools.api.generate-insights-arguments" : { + "type" : "object", + "properties" : { + "for" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "metric_id" : { + "type" : "integer" + } + }, + "required" : [ "metric_id" ] + }, { + "type" : "object", + "properties" : { + "table_id" : { + "type" : "string" + } }, "required" : [ "table_id" ] }, { @@ -655,6 +1095,74 @@ }, "required" : [ "for" ] }, + "metabase-enterprise.metabot-v3.tools.api.get-current-user-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "email_address" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "type" : { + "const" : "user" + } + }, + "required" : [ "id", "type", "name", "email_address" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.get-dashboard-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "type" : { + "const" : "dashboard" + } + }, + "required" : [ "id", "type", "name" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.get-metric-details-arguments" : { "allOf" : [ { "type" : "object", @@ -681,6 +1189,60 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.get-metric-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-metric" + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, + "metabase-enterprise.metabot-v3.tools.api.get-query-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "query" : { + "type" : "object", + "properties" : { } + }, + "query_id" : { + "type" : "string" + }, + "result_columns" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "type" : { + "const" : "query" + } + }, + "required" : [ "type", "query_id", "query", "result_columns" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.get-report-details-arguments" : { "allOf" : [ { "type" : "object", @@ -703,6 +1265,43 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.get-report-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer" + }, + "name" : { + "type" : "string" + }, + "result_columns" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.columns" + }, + "type" : { + "const" : "question" + } + }, + "required" : [ "id", "type", "name", "result_columns" ] + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.get-table-details-arguments" : { "allOf" : [ { "type" : "object", @@ -739,6 +1338,25 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.get-table-details-result" : { + "anyOf" : [ { + "type" : "object", + "properties" : { + "structured_output" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.full-table" + } + }, + "required" : [ "structured_output" ] + }, { + "type" : "object", + "properties" : { + "output" : { + "type" : "string" + } + }, + "required" : [ "output" ] + } ] + }, "metabase-enterprise.metabot-v3.tools.api.group-by" : { "allOf" : [ { "type" : "object", @@ -782,6 +1400,9 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.proportion" : { + "type" : "number" + }, "metabase-enterprise.metabot-v3.tools.api.query-metric-arguments" : { "allOf" : [ { "type" : "object", @@ -865,6 +1486,59 @@ "properties" : { } } ] }, + "metabase-enterprise.metabot-v3.tools.api.statistics" : { + "type" : "object", + "properties" : { + "values" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.field-values" + }, + "min" : { + "type" : "number" + }, + "percent_url" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "average_length" : { + "type" : "number" + }, + "earliest" : { + "type" : "string" + }, + "q1" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "distinct_count" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.count" + }, + "percent_state" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "percent_null" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "avg" : { + "type" : "number" + }, + "sd" : { + "type" : "number" + }, + "percent_email" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + }, + "latest" : { + "type" : "string" + }, + "q3" : { + "type" : "number" + }, + "percent_json" : { + "$ref" : "#/components/schemas/metabase-enterprise.metabot-v3.tools.api.proportion" + } + } + }, "metabase-enterprise.metabot-v3.tools.api.string-filter" : { "allOf" : [ { "type" : "object", @@ -1003,154 +1677,15 @@ }, "required" : [ "conversation_id" ] }, - "metabase.analyze.fingerprint.schema.Fingerprint" : { - "type" : "object", - "properties" : { - "experimental" : { - "type" : "object", - "properties" : { } - }, - "global" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.GlobalFingerprint" - }, - "type" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" - } - } - }, - "metabase.analyze.fingerprint.schema.GlobalFingerprint" : { - "type" : "object", - "properties" : { - "distinct-count" : { - "type" : "integer" - }, - "nil%" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - } - } - }, - "metabase.analyze.fingerprint.schema.NumberFingerprint" : { - "type" : "object", - "properties" : { - "avg" : { - "type" : "number" - }, - "max" : { - "type" : "number" - }, - "min" : { - "type" : "number" - }, - "q1" : { - "type" : "number" - }, - "q3" : { - "type" : "number" - }, - "sd" : { - "type" : "number" - } - } - }, - "metabase.analyze.fingerprint.schema.Percent" : { - "type" : "number" - }, - "metabase.analyze.fingerprint.schema.TemporalFingerprint" : { - "type" : "object", - "properties" : { - "earliest" : { - "type" : "string" - }, - "latest" : { - "type" : "string" - } - } - }, - "metabase.analyze.fingerprint.schema.TextFingerprint" : { - "type" : "object", - "properties" : { - "average-length" : { - "type" : "number" - }, - "percent-email" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-json" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-state" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - }, - "percent-url" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Percent" - } - } - }, - "metabase.analyze.fingerprint.schema.TypeSpecificFingerprint" : { - "type" : "object", - "properties" : { - "type/DateTime" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TemporalFingerprint" - }, - "type/Number" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.NumberFingerprint" - }, - "type/Text" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.TextFingerprint" - } - } - }, - "metabase.analyze.query-results.MaybeUnnormalizedReference" : { }, - "metabase.analyze.query-results.ResultColumnMetadata" : { - "type" : "object", - "properties" : { - "field_ref" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.MaybeUnnormalizedReference" - }, - "fingerprint" : { - "$ref" : "#/components/schemas/metabase.analyze.fingerprint.schema.Fingerprint" - }, - "base_type" : { - "description" : "value must be a valid field data type (keyword or string)." - }, - "id" : { - "$ref" : "#/components/schemas/metabase.lib.schema.id.field" - }, - "name" : { - "type" : "string" - }, - "semantic_type" : { - "description" : "value must be a valid field semantic or relation type (keyword or string)." - }, - "display_name" : { - "type" : "string" - }, - "converted_timezone" : { - "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" - }, - "unit" : { - "description" : "value must be a keyword or string.", - "anyOf" : [ { - "type" : "string" - }, { - "type" : "string" - } ] - }, - "description" : { - "type" : "string" - } - }, - "required" : [ "name", "display_name", "base_type" ] - }, - "metabase.analyze.query-results.ResultsMetadata" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.analyze.query-results.ResultColumnMetadata" - }, - "description" : "value must be an array of valid results column metadata maps.", - "optional" : true - }, - "metabase.cache.api..cache-strategy.base" : { + "metabase.analyze.query-results.ResultsMetadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + }, + "description" : "value must be an array of valid results column metadata maps.", + "optional" : true + }, + "metabase.cache.api..cache-strategy.base" : { "type" : "object", "properties" : { "type" : { @@ -1335,65 +1870,2653 @@ "required" : [ "type", "subject", "body" ] } ] }, - "metabase.lib.schema.common.non-blank-string" : { - "type" : "string", - "minLength" : 1 + "metabase.collections.api.DashboardQuestionCandidate" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "type" : "string" + }, + "sole_dashboard_info" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "id" : { + "type" : "integer", + "minimum" : 1 + }, + "name" : { + "type" : "string" + } + }, + "required" : [ "id", "name" ] + } + }, + "required" : [ "id", "name", "sole_dashboard_info" ] }, - "metabase.lib.schema.expression.temporal.timezone-id" : { - "allOf" : [ { - "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + "metabase.collections.api.DashboardQuestionCandidatesResponse" : { + "type" : "object", + "properties" : { + "data" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidate" + } + }, + "total" : { + "type" : "integer" + } + }, + "required" : [ "data", "total" ] + }, + "metabase.collections.api.MoveDashboardQuestionCandidatesResponse" : { + "type" : "object", + "properties" : { + "moved" : { + "type" : "array", + "items" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + } + }, + "required" : [ "moved" ] + }, + "metabase.legacy-mbql.schema.!=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.*" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.+" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.-" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema./" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.<" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.<=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.>" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.>=" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.Addable" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeExpressionArg" }, { - "anyOf" : [ { - "type" : "string", - "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] - }, { - "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" - } ] + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.interval" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpressionArg" } ] }, - "metabase.lib.schema.id.card" : { - "type" : "integer", - "minimum" : 1 + "metabase.legacy-mbql.schema.Aggregation" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation-options" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.UnnamedAggregation" + } ] }, - "metabase.lib.schema.id.field" : { - "type" : "integer", - "minimum" : 1 + "metabase.legacy-mbql.schema.BooleanExpression" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.and" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.or" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.!=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.<=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.>=" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.between" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.starts-with" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ends-with" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.contains" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.in" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-in" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.does-not-contain" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.inside" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-empty" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-empty" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.is-null" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.not-null" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-time-interval" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time-interval" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.during" + } ] }, - "metabase.lib.schema.literal..string.datetime" : { + "metabase.legacy-mbql.schema.Constraints" : { + "description" : "Additional constraints added to a query limiting the maximum number of rows that can be returned. Mostly useful\n because native queries don't support the MBQL `:limit` clause. For MBQL queries, if `:limit` is set, it will\n override these values.", + "type" : "object", + "properties" : { + "max-results" : { + "description" : "Maximum number of results to allow for a query with aggregations. If `max-results-bare-rows` is unset, this\n applies to all queries", + "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" + }, + "max-results-bare-rows" : { + "description" : "Maximum number of results to allow for a query with no aggregations. If set, this should be LOWER than\n `:max-results`.", + "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" + } + } + }, + "metabase.legacy-mbql.schema.DatabaseID" : { + "description" : "Schema for a valid `:database` ID, in the top-level 'outer' query. Either a positive integer (referring to an\n actual Database), or the saved questions virtual ID, which is a placeholder used for queries using the\n `:source-table \"card__id\"` shorthand for a source query resolved by middleware (since clients might not know the\n actual DB for that source query.)", "anyOf" : [ { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" + "$ref" : "#/components/schemas/metabase.lib.schema.id.saved-questions-virtual-database" }, { - "type" : "string", - "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" + "$ref" : "#/components/schemas/metabase.lib.schema.id.database" } ] }, - "metabase.lib.schema.literal..string.zone-offset" : { - "type" : "string", - "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" + "metabase.legacy-mbql.schema.DateOrDatetimeLiteral" : { + "description" : "Schema for a valid date or datetime literal.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.absolute-datetime" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal.datetime" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal.date" + } ] }, - "metabase.lib.schema.metadata..column.has-field-values" : { + "metabase.legacy-mbql.schema.DateTimeExpressionArg" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + } ] + }, + "metabase.legacy-mbql.schema.DateTimeUnit" : { + "description" : "Valid unit for *datetime* bucketing.", "type" : "string", - "enum" : [ "auto-list", "list", "none", "search" ] + "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] }, - "metabase.lib.schema.temporal-bucketing.unit" : { + "metabase.legacy-mbql.schema.DateUnit" : { + "description" : "Valid unit for date bucketing.", "type" : "string", - "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] + "enum" : [ "quarter", "day", "week", "default", "day-of-week", "month", "month-of-year", "day-of-month", "year", "day-of-year", "year-of-era", "week-of-year", "quarter-of-year" ] }, - "metabase.logger.api.time-unit" : { + "metabase.legacy-mbql.schema.DatetimeDiffUnit" : { + "description" : "Valid units for a datetime-diff clause.", "type" : "string", - "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] + "enum" : [ "second", "minute", "hour", "day", "week", "month", "quarter", "year" ] }, - "metabase.notification.models.FullyHydratedNotification" : { - "description" : "Fully hydrated notification.", + "metabase.legacy-mbql.schema.DatetimeExpression" : { "oneOf" : [ { - "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-add" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-subtract" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.convert-timezone" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.now" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.date" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.today" + } ] + }, + "metabase.legacy-mbql.schema.EqualityComparable" : { + "anyOf" : [ { + "type" : "boolean" + }, { + "type" : "number" + }, { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + } ], + "optional" : true + }, + "metabase.legacy-mbql.schema.ExpressionArg" : { + "oneOf" : [ { + "type" : "number" + }, { + "type" : "boolean" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.ExtractWeekMode" : { + "description" : "Valid modes to extract weeks.", + "type" : "string", + "enum" : [ "iso", "us", "instance" ] + }, + "metabase.legacy-mbql.schema.FieldOptions" : { + "allOf" : [ { + "type" : "object", + "properties" : { + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning", + "description" : "Replaces `binning-strategy`.\n\n Using binning requires the driver to support the `:binning` feature." + }, + "inherited-temporal-unit" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" + }, + "join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias", + "description" : "Replaces `joined-field`.\n\n `:join-alias` is used to refer to a FieldOrExpression from a different Table/nested query that you are EXPLICITLY\n JOINING against." + }, + "source-field" : { + "description" : "Replaces `fk->`.\n\n `:source-field` is used to refer to a FieldOrExpression from a different Table you would like IMPLICITLY JOINED to\n the source table.\n\n If both `:source-field` and `:join-alias` are supplied, `:join-alias` should be used to perform the join;\n `:source-field` should be for information purposes only.", + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "source-field-join-alias" : { + "description" : "The join alias of the source field used for an implicit join.", + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "source-field-name" : { + "description" : "The name or desired alias of the field used for an implicit join.", + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "temporal-unit" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit", + "description" : "`:temporal-unit` is used to specify DATE BUCKETING for a FieldOrExpression that represents a moment in time of\n some sort.\n\n There is no requirement that all `:type/Temporal` derived FieldOrExpressions specify a `:temporal-unit`, but for\n legacy reasons `:field` clauses that refer to `:type/DateTime` FieldOrExpressions will be automatically \"bucketed\"\n in the `:breakout` and `:filter` clauses, but nowhere else. Auto-bucketing only applies to `:filter` clauses when\n values for comparison are `yyyy-MM-dd` date strings. See the `auto-bucket-datetimes` middleware for more details.\n `:field` clauses elsewhere will not be automatically bucketed, so drivers still need to make sure they do any\n special datetime handling for plain `:field` clauses when their FieldOrExpression derives from `:type/DateTime`." + } + } + }, { + "description" : "If `:base-type` is specified, the `:temporal-unit` must make sense, e.g. no bucketing by `:year`for\n a `:type/Time` column.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.validate-temporal-unit" + }, { + "description" : "You cannot use `:binning` keys like `:strategy` in the top level.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.no-binning-options-at-top-level" + } ] + }, + "metabase.legacy-mbql.schema.FieldOrExpressionDef" : { + "description" : "Schema for anything that is accepted as a top-level expression definition, either an arithmetic expression such as a\n `:+` clause or a `:field` or `:value` clause.", + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.Fields" : { + "allOf" : [ { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, + "minItems" : 1 + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" + } ] + }, + "metabase.legacy-mbql.schema.Filter" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatetimeExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.BooleanExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.segment" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.Ident" : { + "description" : "Unique identifier string for new `:column` refs. The new refs aren't used in legacy MBQL (currently) but the\n idents for column-introducing new clauses (joins, aggregations, breakouts, expressions) are randomly generated when\n the clauses are created, so the idents must be preserved in legacy MBQL.\n\n These are opaque strings under the initial design; I've made them a separate schema for documentation and\n future-proofing.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, { + "type" : "string" + } ] + }, + "metabase.legacy-mbql.schema.IntGreaterThanZeroOrNumericExpression" : { + "oneOf" : [ { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + } ] + }, + "metabase.legacy-mbql.schema.Join" : { + "description" : "Perform the equivalent of a SQL `JOIN` with another Table or nested `:source-query`. JOINs are either explicitly\n specified in the incoming query, or implicitly generated when one uses a `:field` clause with `:source-field`.\n\n In the top-level query, you can reference Fields from the joined table or nested query by including `:source-field`\n in the `:field` options (known as implicit joins); for explicit joins, you *must* specify `:join-alias` yourself; in\n the `:field` options, e.g.\n\n ;; for joins against other Tables/MBQL source queries\n [:field 1 {:join-alias \"my_join_alias\"}]\n\n ;; for joins against native queries\n [:field \"my_field\" {:base-type :field/Integer, :join-alias \"my_join_alias\"}]", + "type" : "object", + "properties" : { + "ident" : { + "description" : "An opaque string used as a unique identifier for this join clause, even if it evolves. This string is randomly\n generated when a join clause is created, so it can never be confused with another join of the same table.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Ident" + }, + "strategy" : { + "description" : "Defaults to `:left-join`; used for all automatically-generated JOINs\n\n Driver implementations: this is guaranteed to be present after pre-processing.", + "type" : "string", + "enum" : [ "full-join", "right-join", "left-join", "inner-join" ] + }, + "source-metadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + }, + "description" : "Metadata about the source query being used, if pulled in from a Card via the\n `:source-table \"card__id\"` syntax. added automatically by the `resolve-card-id-source-tables` middleware." + }, + "condition" : { + "description" : "The condition on which to JOIN. Can be anything that is a valid `:filter` clause. For automatically-generated\n JOINs this is usually something like\n\n [:= [:field {:join-alias }]]", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" + }, + "source-query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" + }, + "fk-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field", + "description" : "Mostly used only internally. When a join is implicitly generated via a `:field` clause with\n `:source-field`, the ID of the foreign key field in the source Table will be recorded here. This information is used\n to add `fk_field_id` information to the `:cols` in the query results, and also for drill-thru. When generating\n explicit joins by hand you can usually omit this information, altho it doesn't hurt to include it if you know it.\n\n Don't set this information yourself. It will have no effect." + }, + "fields" : { + "description" : "The Fields from this join to include in parent-level results. This can be either `:none`, `:all`, or a sequence\n of `:field` clauses.\n\n * `:none`: no Fields from the joined table or nested query are included (unless indirectly included by breakouts or\n other clauses). This is the default, and what is used for automatically-generated joins.\n\n * `:all`: will include all of the Field from the joined table or query\n\n * a sequence of Field clauses: include only the Fields specified. Valid clauses are the same as the top-level\n `:fields` clause. This should be non-empty and all elements should be distinct. The normalizer will automatically\n remove duplicate fields for you, and replace empty clauses with `:none`.\n\n Driver implementations: you can ignore this clause. Relevant fields will be added to top-level `:fields` clause with\n appropriate aliases.", + "anyOf" : [ { + "type" : "string", + "enum" : [ "all", "none" ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" + } ] + }, + "source-table" : { + "description" : "*What* to JOIN. Self-joins can be done by using the same `:source-table` as in the query where\n this is specified. YOU MUST SUPPLY EITHER `:source-table` OR `:source-query`, BUT NOT BOTH!", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.id.table" + }, { + "description" : "`card__` string Table ID", + "type" : "string", + "pattern" : "^card__[1-9]\\d*$" + } ] + }, + "alias" : { + "description" : "The name used to alias the joined table or query. This is usually generated automatically and generally looks\n like `table__via__field`. You can specify this yourself if you need to reference a joined field with a `:join-alias`\n in the options.\n\n Driver implementations: This is guaranteed to be present after pre-processing.", + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + } + }, + "required" : [ "condition" ] + }, + "metabase.legacy-mbql.schema.Joins" : { + "description" : "Schema for a valid sequence of `Join`s. Must be a non-empty sequence, and `:alias`, if specified, must be unique.", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Join" + }, + "minItems" : 1 + }, + "metabase.legacy-mbql.schema.MBQLQuery" : { + "type" : "object", + "properties" : { + "breakout" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, + "minItems" : 1 + }, + "source-metadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + }, + "description" : "Info about the columns of the source query. Added in automatically by middleware. This metadata is\n primarily used to let power things like binning when used with Field Literals instead of normal Fields." + }, + "source-query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.SourceQuery" + }, + "limit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.int-greater-than-or-equal-to-zero" + }, + "filter" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Filter" + }, + "joins" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Joins" + }, + "aggregation" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, + "minItems" : 1 + }, + "fields" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Fields" + }, + "source-table" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.id.table" + }, { + "description" : "`card__` string Table ID", + "type" : "string", + "pattern" : "^card__[1-9]\\d*$" + } ] + }, + "order-by" : { + "allOf" : [ { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.OrderBy" + }, + "minItems" : 1 + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.helpers.distinct" + } ] + }, + "page" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Page" + }, + "expressions" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.FieldOrExpressionDef" + } + } + } + }, + "metabase.legacy-mbql.schema.MiddlewareOptions" : { + "description" : "Additional options that can be used to toggle middleware on or off.", + "type" : "object", + "properties" : { + "add-default-userland-constraints?" : { + "type" : "boolean", + "description" : "Whether to add some default `max-results` and `max-results-bare-rows` constraints. By default, none are added,\n although the functions that ultimately power most API endpoints tend to set this to `true`. See\n `add-constraints` middleware for more details." + }, + "disable-max-results?" : { + "description" : "Disable applying a default limit on the query results. Handled in the `add-default-limit` middleware. If true,\n this will override the `:max-results` and `:max-results-bare-rows` values in `Constraints`.", + "type" : "boolean" + }, + "disable-mbql->native?" : { + "description" : "Disable the MBQL->native middleware. If you do this, the query will not work at all, so there are no cases where\n you should set this yourself. This is only used by the `metabase.query-processor.preprocess/preprocess` function to\n get the fully pre-processed query without attempting to convert it to native.", + "type" : "boolean" + }, + "format-rows?" : { + "description" : "Should we skip converting datetime types to ISO-8601 strings with appropriate timezone when post-processing\n results? Used by `metabase.query-processor.middleware.format-rows`default `false`.", + "type" : "boolean" + }, + "process-viz-settings?" : { + "type" : "boolean", + "description" : "Whether to process a question's visualization settings and include them in the result metadata so that they can\n incorporated into an export. Used by `metabase.query-processor.middleware.visualization-settings`; default\n `false`." + }, + "skip-results-metadata?" : { + "description" : "Should we skip adding `results_metadata` to query results after running the query? Used by\n `metabase.query-processor.middleware.results-metadata`; default `false`. (Note: we may change the name of this\n column in the near future, to `result_metadata`, to fix inconsistencies in how we name things.)", + "type" : "boolean" + }, + "userland-query?" : { + "type" : "boolean", + "description" : "Userland queries are ones ran as a result of an API call, Pulse, or the like. Special handling is done in\n certain userland-only middleware for such queries -- results are returned in a slightly different format, and\n QueryExecution entries are normally saved, unless you pass `:no-save` as the option." + } + } + }, + "metabase.legacy-mbql.schema.NativeSourceQuery" : { + "type" : "object", + "properties" : { + "collection" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "native" : { }, + "template-tags" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" + } + }, + "required" : [ "native" ] + }, + "metabase.legacy-mbql.schema.NumericExpression" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.+" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.-" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.~1" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.*" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.length" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.floor" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ceil" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.round" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.abs" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.power" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sqrt" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.exp" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.log" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.datetime-diff" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.integer" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.float" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.temporal-extract" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-year" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-quarter" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-month" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-week" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-day-of-week" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-hour" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-minute" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.get-second" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" + } ] + }, + "metabase.legacy-mbql.schema.NumericExpressionArg" : { + "oneOf" : [ { + "type" : "number" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + } ] + }, + "metabase.legacy-mbql.schema.OrderBy" : { + "description" : "Schema for an `order-by` clause subclause.", + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.asc" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.desc" + } ] + }, + "metabase.legacy-mbql.schema.OrderComparable" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "anyOf" : [ { + "type" : "number" + }, { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemporalLiteral" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ExpressionArg" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.relative-datetime" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + } ] + } ] + }, + "metabase.legacy-mbql.schema.Page" : { + "description" : "`page` = page num, starting with 1. `items` = number of items per page.\n e.g.\n\n {:page 1, :items 10} = items 1-10\n {:page 2, :items 10} = items 11-20", + "type" : "object", + "properties" : { + "items" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "page" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "page", "items" ] + }, + "metabase.legacy-mbql.schema.Parameter" : { + "description" : "Schema for the *value* of a parameter (e.g. a Dashboard parameter or a native query template tag) as passed in as\n part of the `:parameters` list in a query.", + "type" : "object", + "properties" : { + "default" : { }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { }, + "slug" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "target" : { + "oneOf" : [ { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" + } ] + } ] + }, { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" + } ] + } ] + }, { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.dimension" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.variable" + } ] + } ] + } ] + }, + "type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" + }, + "value" : { } + }, + "required" : [ "type" ] + }, + "metabase.legacy-mbql.schema.ParameterList" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Parameter" + }, + "optional" : true + }, + "metabase.legacy-mbql.schema.Query" : { + "allOf" : [ { + "type" : "object", + "properties" : { + "update-row" : { + "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" + }, + "settings" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Settings" + }, + "constraints" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Constraints" + }, + "query" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" + }, + "native" : { + "type" : "object", + "properties" : { + "collection" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "query" : { }, + "template-tags" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTagMap" + } + }, + "required" : [ "query" ] + }, + "info" : { + "$ref" : "#/components/schemas/metabase.lib.schema.info.info", + "description" : "Used when recording info about this run in the QueryExecution log; things like context query was\n ran in and User who ran it." + }, + "middleware" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MiddlewareOptions" + }, + "database" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DatabaseID" + }, + "type" : { + "description" : "Type of query. `:query` = MBQL; `:native` = native.", + "type" : "string", + "enum" : [ "query", "native" ] + }, + "parameters" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ParameterList" + }, + "create-row" : { + "$ref" : "#/components/schemas/metabase.lib.schema.actions.row" + } + }, + "required" : [ "type" ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-keys-for-query-type" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" + } ] + }, + "metabase.legacy-mbql.schema.Reference" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + } ] + }, + "metabase.legacy-mbql.schema.RelativeDatetimeUnit" : { + "type" : "string", + "enum" : [ "default", "minute", "hour", "day", "week", "month", "quarter", "year" ] + }, + "metabase.legacy-mbql.schema.Settings" : { + "description" : "Options that tweak the behavior of the query processor.", + "type" : "object", + "properties" : { + "report-timezone" : { + "description" : "The timezone the query should be ran in, overriding the default report timezone for the instance.", + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" + } + } + }, + "metabase.legacy-mbql.schema.SourceQuery" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NativeSourceQuery" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.MBQLQuery" + } ] + }, + "metabase.legacy-mbql.schema.StringExpression" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.substring" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.trim" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ltrim" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.rtrim" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.replace" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.lower" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.upper" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.concat" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.regex-match-first" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.coalesce" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.host" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.domain" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.subdomain" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.path" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.month-name" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.quarter-name" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.day-name" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.text" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.split-part" + } ] + }, + "metabase.legacy-mbql.schema.StringExpressionArg" : { + "oneOf" : [ { + "type" : "string" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.StringExpression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.value" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field-or-expression-ref" + } ] + }, + "metabase.legacy-mbql.schema.TemplateTag" : { + "description" : "Schema for a template tag as specified in a native query. There are four types of template tags, differentiated by\n `:type`.\n\n Template tags are used to specify in native queries that are replaced with some sort of value when\n the query itself runs. There are four basic types of template tag for native queries:\n\n 1. Field filters, which are used like\n\n SELECT * FROM table WHERE \n\n These reference specific Fields and are replaced with entire conditions, e.g. `some_field > 1000`\n\n 2. Raw values, which are used like\n\n SELECT * FROM table WHERE my_field = \n\n These are replaced with raw values.\n\n 3. Native query snippets, which might be used like\n\n SELECT * FROM () source\n\n These are replaced with `NativeQuerySnippet`s from the application database.\n\n 4. Source query Card IDs, which are used like\n\n SELECT * FROM () source\n\n These are replaced with the query from the Card with that ID.\n\n Field filters and raw values usually have their value specified by `:parameters`.", + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:FieldFilter" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:Snippet" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:SourceQuery" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag:RawValue" + } ] + }, + "metabase.legacy-mbql.schema.TemplateTag:FieldFilter" : { + "description" : "Schema for a field filter template tag.", + "type" : "object", + "properties" : { + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { + "type" : "boolean" + }, + "type" : { + "const" : "dimension" + }, + "alias" : { + "type" : "string" + }, + "options" : { + "type" : "object", + "additionalProperties" : { }, + "description" : "optional map to be appended to filter clause" + }, + "dimension" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + }, + "default" : { }, + "widget-type" : { + "description" : "which type of widget the frontend should show for this Field Filter; this also affects which parameter types\n are allowed to be specified for it.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.WidgetType" + } + }, + "required" : [ "type", "name", "display-name", "dimension", "widget-type" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:RawValue" : { + "description" : "Schema for a raw value template tag.", + "type" : "object", + "properties" : { + "default" : { }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { + "type" : "boolean" + }, + "type" : { + "type" : "string", + "enum" : [ "date", "number", "boolean", "text" ] + } + }, + "required" : [ "type", "name", "display-name" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:Snippet" : { + "description" : "Schema for a native query snippet template tag.", + "type" : "object", + "properties" : { + "database" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "snippet-id" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "snippet-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "type" : { + "const" : "snippet" + } + }, + "required" : [ "type", "name", "display-name", "snippet-name", "snippet-id" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:SourceQuery" : { + "description" : "Schema for a source query template tag.", + "type" : "object", + "properties" : { + "card-id" : { + "description" : "Must be a positive integer.", + "type" : "integer", + "minimum" : 1 + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "type" : { + "const" : "card" + } + }, + "required" : [ "type", "name", "display-name", "card-id" ] + }, + "metabase.legacy-mbql.schema.TemplateTag:TemporalUnit" : { + "description" : "Schema for a temporal unit template tag.", + "type" : "object", + "properties" : { + "alias" : { + "type" : "string" + }, + "default" : { }, + "dimension" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { + "type" : "boolean" + }, + "type" : { + "const" : "temporal-unit" + } + }, + "required" : [ "type", "name", "display-name", "dimension" ] + }, + "metabase.legacy-mbql.schema.TemplateTagMap" : { + "description" : "Schema for the `:template-tags` map passed in as part of a native query.\n\n Map of template tag name -> template tag definition", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TemplateTag" + } + }, + "metabase.legacy-mbql.schema.TemporalExtractUnit" : { + "description" : "Valid units to extract from a temporal.", + "type" : "string", + "enum" : [ "year-of-era", "quarter-of-year", "month-of-year", "week-of-year-iso", "week-of-year-us", "week-of-year-instance", "day-of-month", "day-of-week", "day-of-week-iso", "hour-of-day", "minute-of-hour", "second-of-minute" ] + }, + "metabase.legacy-mbql.schema.TemporalLiteral" : { + "description" : "Schema for valid temporal literals.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateOrDatetimeLiteral" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.TimeLiteral" + } ] + }, + "metabase.legacy-mbql.schema.TimeLiteral" : { + "description" : "Schema for valid time literals.", + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.time" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal.time" + } ] + }, + "metabase.legacy-mbql.schema.TimeUnit" : { + "description" : "Valid unit for time bucketing.", + "type" : "string", + "enum" : [ "hour", "second", "default", "hour-of-day", "millisecond", "minute-of-hour", "minute" ] + }, + "metabase.legacy-mbql.schema.UnnamedAggregation" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.NumericExpression" + }, { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.aggregation" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.avg" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-sum" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.distinct-where" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.stddev" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.min" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.max" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.metric" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.share" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count-where" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.sum-where" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.case:if" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.median" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.percentile" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.ag:var" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.cum-count" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.count" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.offset" + } ] + } ] + }, + "metabase.legacy-mbql.schema.ValueTypeInfo" : { + "description" : "Type info about a value in a `:value` clause. Added automatically by `wrap-value-literals` middleware to values in filter clauses based on the Field in the clause.", + "type" : "object", + "properties" : { + "base_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "database_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "semantic_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "unit" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.DateTimeUnit" + } + } + }, + "metabase.legacy-mbql.schema.WidgetType" : { + "description" : "Schema for valid values of `:widget-type` for a [[::TemplateTag:FieldFilter]].", + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.widget-type" + }, + "metabase.legacy-mbql.schema.abs" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.absolute-datetime" : { + "oneOf" : [ { }, { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.ag:var" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.aggregation" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.aggregation-options" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.and" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.asc" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.avg" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.between" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.case" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.case:if" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.ceil" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.check-keys-for-query-type" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.check-query-does-not-have-source-metadata" : { + "description" : "`:source-metadata` is added to queries when `card__id` source queries are resolved. It contains info about the\n columns in the source query.\n\n Where this is added was changed in Metabase 0.33.0 -- previously, when `card__id` source queries were resolved, the\n middleware would add `:source-metadata` to the top-level; to support joins against source queries, this has been\n changed so it is always added at the same level the resolved `:source-query` is added.\n\n This should automatically be fixed by `normalize`; if we encounter it, it means some middleware is not functioning\n properly." + }, + "metabase.legacy-mbql.schema.coalesce" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.concat" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.contains" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.convert-timezone" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.count" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.count-where" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.cum-count" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.cum-sum" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.date" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime-add" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime-diff" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.datetime-subtract" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.day-name" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.desc" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.dimension" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.distinct" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.distinct-where" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.does-not-contain" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.domain" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.during" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.ends-with" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.exp" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.expression" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.field" : { + "allOf" : [ { + "allOf" : [ ] + }, { + "description" : "Fields using names rather than integer IDs are required to specify `:base-type`.", + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.require-base-type-for-field-name" + } ] + }, + "metabase.legacy-mbql.schema.field-or-expression-ref" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + } ] + }, + "metabase.legacy-mbql.schema.float" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.floor" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-day" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-day-of-week" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-hour" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-minute" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-month" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-quarter" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-second" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-week" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.get-year" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.helpers.distinct" : { + "description" : "values must be distinct" + }, + "metabase.legacy-mbql.schema.host" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.in" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.inside" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.integer" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.interval" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.is-empty" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.is-null" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.legacy-column-metadata" : { + "description" : "Schema for a single legacy metadata column. This is the pre-Lib equivalent of\n `:metabase.lib.schema.metadata/column`.", + "type" : "object", + "properties" : { + "field_ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" + }, + "visibility_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" + }, + "base_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "name" : { + "type" : "string" + }, + "semantic_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "display_name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "converted_timezone" : { + "$ref" : "#/components/schemas/metabase.lib.schema.expression.temporal.timezone-id" + }, + "source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" + }, + "effective_type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + } + }, + "required" : [ "base_type", "display_name", "name" ] + }, + "metabase.legacy-mbql.schema.length" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.log" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.lower" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.ltrim" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.max" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.median" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.metric" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.min" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.month-name" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.no-binning-options-at-top-level" : { }, + "metabase.legacy-mbql.schema.not" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.not-empty" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.not-in" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.not-null" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.now" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.offset" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.or" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.path" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.percentile" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.power" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.quarter-name" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.regex-match-first" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.relative-datetime" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.relative-time-interval" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.replace" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.require-base-type-for-field-name" : { }, + "metabase.legacy-mbql.schema.round" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.rtrim" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.segment" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.share" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.split-part" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.sqrt" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.starts-with" : { + "anyOf" : [ { + "allOf" : [ ] + }, { + "allOf" : [ ] + } ] + }, + "metabase.legacy-mbql.schema.stddev" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.subdomain" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.substring" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.sum" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.sum-where" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.template-tag" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.temporal-extract" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.text" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.time" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.time-interval" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.today" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.trim" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.upper" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.validate-temporal-unit" : { }, + "metabase.legacy-mbql.schema.value" : { + "allOf" : [ ] + }, + "metabase.legacy-mbql.schema.variable" : { + "allOf" : [ ] + }, + "metabase.lib.schema.actions.row" : { + "type" : "object", + "additionalProperties" : { } + }, + "metabase.lib.schema.binning.bin-width" : { + "description" : "Bin width (size of each bin).", + "$ref" : "#/components/schemas/metabase.lib.schema.common.positive-number" + }, + "metabase.lib.schema.binning.binning" : { + "description" : "Schema for `:binning` options passed to a `:field` clause.", + "allOf" : [ { + "type" : "object", + "properties" : { + "strategy" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.strategy" + } + }, + "required" : [ "strategy" ] + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { + "strategy" : { + "const" : "default" + } + }, + "required" : [ "strategy" ] + }, { + "type" : "object", + "properties" : { + "bin-width" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.bin-width" + }, + "strategy" : { + "const" : "bin-width" + } + }, + "required" : [ "strategy", "bin-width" ] + }, { + "type" : "object", + "properties" : { + "num-bins" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.num-bins" + }, + "strategy" : { + "const" : "num-bins" + } + }, + "required" : [ "strategy", "num-bins" ] + } ] + } ] + }, + "metabase.lib.schema.binning.num-bins" : { + "description" : "Number of bins to use.", + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.binning.strategy" : { + "type" : "string", + "enum" : [ "bin-width", "default", "num-bins" ] + }, + "metabase.lib.schema.common.base-type" : { + "type" : "string" + }, + "metabase.lib.schema.common.int-greater-than-or-equal-to-zero" : { + "description" : "Schema representing an integer than must also be greater than or equal to zero.", + "type" : "integer", + "minimum" : 0 + }, + "metabase.lib.schema.common.non-blank-string" : { + "type" : "string", + "minLength" : 1 + }, + "metabase.lib.schema.common.options" : { + "default" : { }, + "type" : "object", + "properties" : { + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "database-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "display-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "effective-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/uuid" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.uuid" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "semantic-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + } + }, + "required" : [ "lib/uuid" ] + }, + "metabase.lib.schema.common.positive-number" : { }, + "metabase.lib.schema.common.semantic-or-relation-type" : { + "description" : "valid semantic or relation type", + "type" : "string" + }, + "metabase.lib.schema.common.uuid" : { + "type" : "string", + "minLength" : 36, + "maxLength" : 36 + }, + "metabase.lib.schema.expression.temporal.timezone-id" : { + "allOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, { + "anyOf" : [ { + "type" : "string", + "enum" : [ "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Timbuktu", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/ComodRivadavia", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Atka", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Buenos_Aires", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Catamarca", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Ensenada", "America/Fort_Nelson", "America/Fort_Wayne", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indianapolis", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Jujuy", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Knox_IN", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Louisville", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Mendoza", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montreal", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Acre", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Rosario", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Shiprock", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Virgin", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/South_Pole", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Ashkhabad", "Asia/Atyrau", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Calcutta", "Asia/Chita", "Asia/Choibalsan", "Asia/Chongqing", "Asia/Chungking", "Asia/Colombo", "Asia/Dacca", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Harbin", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Istanbul", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kashgar", "Asia/Kathmandu", "Asia/Katmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macao", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Saigon", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimbu", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ujung_Pandang", "Asia/Ulaanbaatar", "Asia/Ulan_Bator", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faeroe", "Atlantic/Faroe", "Atlantic/Jan_Mayen", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/ACT", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Canberra", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/LHI", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/NSW", "Australia/North", "Australia/Perth", "Australia/Queensland", "Australia/South", "Australia/Sydney", "Australia/Tasmania", "Australia/Victoria", "Australia/West", "Australia/Yancowinna", "Brazil/Acre", "Brazil/DeNoronha", "Brazil/East", "Brazil/West", "CET", "CST6CDT", "Canada/Atlantic", "Canada/Central", "Canada/Eastern", "Canada/Mountain", "Canada/Newfoundland", "Canada/Pacific", "Canada/Saskatchewan", "Canada/Yukon", "Chile/Continental", "Chile/EasterIsland", "Cuba", "EET", "EST5EDT", "Egypt", "Eire", "Etc/GMT", "Etc/GMT+0", "Etc/GMT+1", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4", "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8", "Etc/GMT+9", "Etc/GMT-0", "Etc/GMT-1", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12", "Etc/GMT-13", "Etc/GMT-14", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4", "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8", "Etc/GMT-9", "Etc/GMT0", "Etc/Greenwich", "Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belfast", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Nicosia", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Saratov", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Tiraspol", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "GB", "GB-Eire", "GMT", "GMT0", "Greenwich", "Hongkong", "Iceland", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Iran", "Israel", "Jamaica", "Japan", "Kwajalein", "Libya", "MET", "MST7MDT", "Mexico/BajaNorte", "Mexico/BajaSur", "Mexico/General", "NZ", "NZ-CHAT", "Navajo", "PRC", "PST8PDT", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kanton", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Samoa", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis", "Pacific/Yap", "Poland", "Portugal", "ROK", "Singapore", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5", "SystemV/EST5EDT", "SystemV/HST10", "SystemV/MST7", "SystemV/MST7MDT", "SystemV/PST8", "SystemV/PST8PDT", "SystemV/YST9", "SystemV/YST9YDT", "Turkey", "UCT", "US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa", "UTC", "Universal", "W-SU", "WET", "Zulu" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.zone-offset" + } ] + } ] + }, + "metabase.lib.schema.expression.window..offset.n" : { + "type" : "integer" + }, + "metabase.lib.schema.id.action" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.card" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.dashboard" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.database" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.dimension" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.field" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.pulse" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.saved-questions-virtual-database" : { + "description" : "The ID used to signify that a database is 'virtual' rather than physical.\n\n A fake integer ID is used so as to minimize the number of changes that need to be made on the frontend -- by using\n something that would otherwise be a legal ID, *nothing* need change there, and the frontend can query against this\n 'database' none the wiser. (This integer ID is negative which means it will never conflict with a *real* database\n ID.)\n\n This ID acts as a sort of flag. The relevant places in the middleware can check whether the DB we're querying is\n this 'virtual' database and take the appropriate actions.", + "const" : -1337 + }, + "metabase.lib.schema.id.segment" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.table" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.id.user" : { + "type" : "integer", + "minimum" : 1 + }, + "metabase.lib.schema.info.context" : { + "type" : "string", + "enum" : [ "action", "ad-hoc", "cache-refresh", "collection", "map-tiles", "pulse", "dashboard-subscription", "dashboard", "question", "csv-download", "xlsx-download", "json-download", "public-dashboard", "public-question", "public-csv-download", "public-xlsx-download", "public-json-download", "embedded-dashboard", "embedded-question", "embedded-csv-download", "embedded-xlsx-download", "embedded-json-download", "table-grid" ] + }, + "metabase.lib.schema.info.hash" : { + "type" : "string", + "format" : "byte" + }, + "metabase.lib.schema.info.info" : { + "type" : "object", + "properties" : { + "query-hash" : { + "$ref" : "#/components/schemas/metabase.lib.schema.info.hash" + }, + "action-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.action" + }, + "pivot/original-query" : { + "type" : "object", + "additionalProperties" : { } + }, + "executed-by" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.user" + }, + "card-entity-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "card-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.card" + }, + "pivot/result-metadata" : { + "oneOf" : [ { + "const" : "none" + }, { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.column" + } + } ] + }, + "context" : { + "$ref" : "#/components/schemas/metabase.lib.schema.info.context" + }, + "dashboard-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.dashboard" + }, + "metadata/model-metadata" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.lib-or-legacy-column" + } + }, + "pulse-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.pulse" + }, + "card-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } + } + }, + "metabase.lib.schema.join.alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "metabase.lib.schema.literal..string.date" : { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}$" + }, + "metabase.lib.schema.literal..string.datetime" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" + }, { + "type" : "string", + "pattern" : "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" + } ] + }, + "metabase.lib.schema.literal..string.time" : { + "anyOf" : [ { + "type" : "string", + "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?$" + }, { + "type" : "string", + "pattern" : "^\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))$" + } ] + }, + "metabase.lib.schema.literal..string.zone-offset" : { + "type" : "string", + "pattern" : "(?:Z|(?:[+-]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,6})?)?))" + }, + "metabase.lib.schema.literal.date" : { + "anyOf" : [ { }, { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.date" + } ] + }, + "metabase.lib.schema.literal.datetime" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.datetime" + }, { }, { }, { } ] + }, + "metabase.lib.schema.literal.time" : { + "anyOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.literal..string.time" + }, { }, { } ] + }, + "metabase.lib.schema.metadata..column.has-field-values" : { + "type" : "string", + "enum" : [ "auto-list", "list", "none", "search" ] + }, + "metabase.lib.schema.metadata..column.legacy-source" : { + "description" : "Possible values for `column.source` -- this is added by [[metabase.lib.metadata.result-metadata]] for historical\n reasons (it is used in a few places in the FE). DO NOT use this in the backend for any purpose, use `:lib/source`\n instead.", + "type" : "string", + "enum" : [ "aggregation", "fields", "breakout", "native" ] + }, + "metabase.lib.schema.metadata..column.remapping.external" : { + "description" : "External remapping (Dimension) for a column. From the [[metabase.warehouse-schema.models.dimension]] with `type =\n external` associated with a `Field` in the application database.\n See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", + "type" : "object", + "properties" : { + "field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" + }, + "lib/type" : { + "const" : "metadata.column.remapping/external" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } + }, + "required" : [ "lib/type", "id", "name", "field-id" ] + }, + "metabase.lib.schema.metadata..column.remapping.internal" : { + "description" : "Internal remapping (FieldValues) for a column. From [[metabase.warehouse-schema.models.dimension]] with `type =\n internal` and the [[metabase.warehouse-schema.models.field-values]] associated with a `Field` in the application\n database. See [[metabase.query-processor.middleware.add-dimension-projections]] for what this means.", + "type" : "object", + "properties" : { + "human-readable-values" : { + "type" : "array", + "items" : { } + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.dimension" + }, + "lib/type" : { + "const" : "metadata.column.remapping/internal" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "values" : { + "type" : "array", + "items" : { } + } + }, + "required" : [ "lib/type", "id", "name", "values", "human-readable-values" ] + }, + "metabase.lib.schema.metadata..column.source" : { + "description" : "`:lib/source` -- where a column came from with respect to the current stage.\n\n Traditionally, `:lib/source` meant something slightly different -- it denoted what part of the current stage a\n column came from, and thus included two additional options -- `:source/fields`, for columns used by `:fields`, and\n `:source/breakouts`, for columns used in `:breakout`. This was not really useful information and made `:lib/source`\n itself useless for determining if a column was 'inherited' or not (i.e., whether it came from a previous stage,\n source card, or a join, and should get field name refs instead of field ID refs --\n see [[metabase.lib.field.util/inherited-column?]]).", + "type" : "string", + "enum" : [ "source/card", "source/native", "source/previous-stage", "source/table-defaults", "source/aggregations", "source/joins", "source/expressions", "source/implicitly-joinable" ] + }, + "metabase.lib.schema.metadata..column.validate-expression-source" : { + "description" : "Only allow `:lib/expression-name` when `:lib/source` is `:source/expressions`. If it's anything else, it probably\n means it's getting incorrectly propagated from a previous stage (QUE-1342)." + }, + "metabase.lib.schema.metadata..column.validate-native-column" : { + "description" : "Certain keys cannot possibly be set when a column comes from directly from native query results, for example\n `:lib/breakout?` or join aliases" + }, + "metabase.lib.schema.metadata..column.validate-table-defaults-column" : { + "description" : "A column with :lib/source :source/table-defaults cannot possibly have a join alias." + }, + "metabase.lib.schema.metadata..column.visibility-type" : { + "type" : "string", + "enum" : [ "retired", "sensitive", "normal", "hidden", "details-only" ] + }, + "metabase.lib.schema.metadata.column" : { + "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", + "allOf" : [ { + "type" : "object", + "properties" : { + "visibility-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" + }, + "fk-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/external-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" + }, + "inherited-temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "lib/source-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" + }, + "database-type" : { + "type" : "string" + }, + "lib/type" : { + "default" : "metadata/column", + "const" : "metadata/column" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" + }, + "display-name" : { + "type" : "string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "effective-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/deduplicated-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" + }, + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/original-expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "fk-field-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "type" : "string" + }, + "lib/card-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.card" + }, + "lib/expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/breakout?" : { + "type" : "boolean" + }, + "metabase.lib.field/temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "metabase.lib.field/binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/model-display-name" : { + "type" : "string" + }, + "has-field-values" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" + }, + "lib/internal-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" + }, + "selected?" : { + "type" : "boolean" + }, + "source-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" + }, + "metabase.lib.join/join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "fk-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "lib/original-binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/original-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "lib/original-display-name" : { + "type" : "string" + }, + "lib/source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" + }, + "active" : { + "type" : "boolean" + }, + "lib/ref-display-name" : { + "type" : "string" + }, + "lib/original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "lib/hack-original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "semantic-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "fk-target-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "field-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + }, + "lib/desired-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" + } + }, + "required" : [ "lib/type", "name", "base-type" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" + } ] + }, + "metabase.lib.schema.metadata.deduplicated-name" : { + "type" : "string", + "description" : "The simply-deduplicated name that was historically used in QP results metadata (originally calculated by\n the [[metabase.query-processor.middleware.annotate]] middleware, now calculated\n by [[metabase.lib.middleware.result-metadata]]). This just adds suffixes to column names e.g. `ID` and `ID` become\n `ID` and `ID_2`, respectively. Kept around because many old field refs use this column name.", + "optional" : true + }, + "metabase.lib.schema.metadata.desired-column-alias" : { + "type" : "string", + "minLength" : 1 + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.global" : { + "description" : "Fingerprint values that Fields of all types should have.", + "type" : "object", + "properties" : { + "distinct-count" : { + "type" : "integer" + }, + "nil%" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.number" : { + "description" : "Schema for fingerprint information for Fields deriving from `:type/Number`.", + "type" : "object", + "properties" : { + "avg" : { + "type" : "number" + }, + "max" : { + "type" : "number" + }, + "min" : { + "type" : "number" + }, + "q1" : { + "type" : "number" + }, + "q3" : { + "type" : "number" + }, + "sd" : { + "type" : "number" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" : { + "description" : "Schema for fingerprint information for Fields deriving from `:type/Temporal`.", + "type" : "object", + "properties" : { + "earliest" : { + "type" : "string" + }, + "latest" : { + "type" : "string" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.text" : { + "description" : "Schema for fingerprint information for Fields deriving from `:type/Text`.", + "type" : "object", + "properties" : { + "average-length" : { + "type" : "number" + }, + "percent-email" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + }, + "percent-json" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + }, + "percent-state" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + }, + "percent-url" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.percent" + } + } + }, + "metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" : { + "description" : "Schema for type-specific fingerprint information.", + "allOf" : [ { + "type" : "object", + "additionalProperties" : { + "type" : "object", + "properties" : { } + } + }, { + "type" : "object", + "properties" : { + "type/DateTime" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.temporal" + }, + "type/Number" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.number" + }, + "type/Text" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.text" + } + } + } ] + }, + "metabase.lib.schema.metadata.fingerprint.fingerprint" : { + "description" : "Schema for a Field 'fingerprint' generated as part of the analysis stage. Used to power the 'classification'\n sub-stage of analysis. Stored as the `fingerprint` column of Field.", + "type" : "object", + "properties" : { + "experimental" : { + "type" : "object", + "additionalProperties" : { } + }, + "global" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.global" + }, + "type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint..fingerprint.type-specific" + } + } + }, + "metabase.lib.schema.metadata.fingerprint.percent" : { + "description" : "Schema for something represting a percentage. A floating-point value between (inclusive) 0 and 1.", + "type" : "number" + }, + "metabase.lib.schema.metadata.kebab-cased-map" : { }, + "metabase.lib.schema.metadata.lib-or-legacy-column" : { + "description" : "Schema for the maps in card `:result-metadata` and similar. These can be either\n `:metabase.lib.schema.metadata/result-metadata` (i.e., kebab-cased) maps, or map snake_cased as returned by QP\n metadata, but they should NOT be a mixture of both -- if we mixed them somehow there is a bug in our code.", + "oneOf" : [ { + "description" : "Malli schema for a valid map of column metadata, which can mean one of two things:\n\n 1. Metadata about a particular Field in the application database. This will always have an `:id`\n\n 2. Results metadata from a column in `data.cols` and/or `data.results_metadata.columns` in a Query Processor\n response, or saved in something like `Card.result_metadata`. These *may* have an `:id`, or may not -- columns\n coming back from native queries or things like `SELECT count(*)` aren't associated with any particular `Field`\n and thus will not have an `:id`.\n\n Now maybe these should be two different schemas, but `:id` being there or not is the only real difference; besides\n that they are largely compatible. So they're the same for now. We can revisit this in the future if we actually want\n to differentiate between the two versions.", + "allOf" : [ { + "type" : "object", + "properties" : { + "visibility-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.visibility-type" + }, + "fk-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/external-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.external" + }, + "inherited-temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "lib/source-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.source-column-alias" + }, + "database-type" : { + "type" : "string" + }, + "lib/type" : { + "default" : "metadata/column", + "const" : "metadata/column" + }, + "fingerprint" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.fingerprint.fingerprint" + }, + "display-name" : { + "type" : "string" + }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "effective-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/deduplicated-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.deduplicated-name" + }, + "base-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.base-type" + }, + "lib/original-expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "fk-field-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "type" : "string" + }, + "lib/card-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.card" + }, + "lib/expression-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "lib/breakout?" : { + "type" : "boolean" + }, + "metabase.lib.field/temporal-unit" : { + "$ref" : "#/components/schemas/metabase.lib.schema.temporal-bucketing.unit" + }, + "metabase.lib.field/binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/model-display-name" : { + "type" : "string" + }, + "has-field-values" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.has-field-values" + }, + "lib/internal-remap" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.remapping.internal" + }, + "selected?" : { + "type" : "boolean" + }, + "source-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.legacy-source" + }, + "metabase.lib.join/join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "fk-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "lib/original-binning" : { + "$ref" : "#/components/schemas/metabase.lib.schema.binning.binning" + }, + "lib/original-join-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.join.alias" + }, + "lib/original-display-name" : { + "type" : "string" + }, + "lib/source" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.source" + }, + "active" : { + "type" : "boolean" + }, + "lib/ref-display-name" : { + "type" : "string" + }, + "lib/original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "lib/hack-original-name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.original-name" + }, + "semantic-type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.semantic-or-relation-type" + }, + "fk-target-field-id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.id.field" + }, + "field-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.Reference" + }, + "lib/desired-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.desired-column-alias" + } + }, + "required" : [ "lib/type", "name", "base-type" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata.kebab-cased-map" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-expression-source" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-native-column" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.metadata..column.validate-table-defaults-column" + } ] + }, { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.legacy-column-metadata" + } ] + }, + "metabase.lib.schema.metadata.original-name" : { + "type" : "string", + "description" : "The original name of the column as it appeared in the very first place it came from (i.e., the physical name of the\n column in the table it appears in). This should be the same as the `:lib/source-column-alias` for the very first\n usage of the column.\n Allowed to be blank because some databases like SQL Server allow blank column names.", + "optional" : true + }, + "metabase.lib.schema.metadata.source-column-alias" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "metabase.lib.schema.parameter..dimension.target" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-expression-ref" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" + } ] + }, + "metabase.lib.schema.parameter.DimensionOptions" : { + "type" : "object", + "properties" : { + "stage-number" : { + "type" : "integer" + } + } + }, + "metabase.lib.schema.parameter.dimension" : { }, + "metabase.lib.schema.parameter.legacy-expression-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.expression" + }, + "metabase.lib.schema.parameter.legacy-field-ref" : { + "$ref" : "#/components/schemas/metabase.legacy-mbql.schema.field" + }, + "metabase.lib.schema.parameter.parameter" : { + "type" : "object", + "properties" : { + "default" : { }, + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "name" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "required" : { }, + "slug" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + }, + "target" : { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.target" + }, + "type" : { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.type" + }, + "value" : { } + }, + "required" : [ "type" ] + }, + "metabase.lib.schema.parameter.target" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.legacy-field-ref" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.dimension" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.variable" + } ] + }, + "metabase.lib.schema.parameter.template-tag" : { + "type" : "array", + "prefixItems" : [ { + "const" : "template-tag" + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { + "id" : { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } + }, + "required" : [ "id" ] + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.common.non-blank-string" + } ] + } ] + }, + "metabase.lib.schema.parameter.type" : { + "type" : "string", + "enum" : [ "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + }, + "metabase.lib.schema.parameter.variable" : { + "type" : "array", + "prefixItems" : [ { + "const" : "variable" + }, { + "$ref" : "#/components/schemas/metabase.lib.schema.parameter.template-tag" + } ] + }, + "metabase.lib.schema.parameter.widget-type" : { + "type" : "string", + "enum" : [ "none", "category", "date", "string/!=", "number/=", "string/ends-with", "location/state", "boolean/=", "number/between", "date/all-options", "number", "number/>=", "location/country", "temporal-unit", "string/=", "string/does-not-contain", "date/range", "string/starts-with", "string/contains", "date/single", "location/city", "id", "date/relative", "location/zip_code", "date/month-year", "date/quarter-year", "number/!=", "boolean", "text", "number/<=" ] + }, + "metabase.lib.schema.template-tag..raw-value.type" : { + "type" : "string", + "enum" : [ "date", "number", "boolean", "text" ] + }, + "metabase.lib.schema.temporal-bucketing.unit" : { + "type" : "string", + "enum" : [ "quarter", "day", "hour", "week", "second", "default", "day-of-week", "hour-of-day", "month", "month-of-year", "day-of-month", "year", "day-of-year", "millisecond", "year-of-era", "second-of-minute", "week-of-year", "quarter-of-year", "minute-of-hour", "minute" ] + }, + "metabase.logger.api.log-level" : { + "type" : "string", + "enum" : [ "off", "fatal", "error", "warn", "info", "debug", "trace" ] + }, + "metabase.logger.api.time-unit" : { + "type" : "string", + "enum" : [ "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds" ] + }, + "metabase.notification.models.FullyHydratedNotification" : { + "description" : "Fully hydrated notification.", + "oneOf" : [ { + "oneOf" : [ { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" + }, + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" + } + } + }, + "required" : [ "payload_type", "payload" ] + }, { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload_id" : { + "type" : "null" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" + } + } + }, + "required" : [ "payload_type" ] + } ] + }, { + "oneOf" : [ { + "type" : "object", + "properties" : { + "creator" : { + "type" : "object", + "properties" : { } + }, + "creator_id" : { + "type" : "integer" + }, + "handlers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "active" : { + "type" : "boolean" + }, + "channel" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" + }, + "channel_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "channel_type" : { }, + "notification_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "recipients" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" + } + }, + "template" : { + "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplate" + }, + "template_id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "channel_type" ] + } + }, + "payload" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" + }, + "payload_id" : { + "type" : "integer" + }, + "payload_type" : { + "type" : "string", + "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] + }, + "subscriptions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" + } + } + }, + "required" : [ "payload_type", "payload" ] + }, { "type" : "object", "properties" : { "creator" : { "type" : "object", "properties" : { } }, + "creator_id" : { + "type" : "integer" + }, "handlers" : { "type" : "array", "items" : { @@ -1434,11 +4557,8 @@ "required" : [ "channel_type" ] } }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, "payload_id" : { - "type" : "null" + "type" : "integer" }, "payload_type" : { "type" : "string", @@ -1451,8 +4571,8 @@ } } }, - "required" : [ "payload_type", "payload" ] - }, { } ] + "required" : [ "payload_type" ] + } ] }, { "oneOf" : [ { "type" : "object", @@ -1461,9 +4581,6 @@ "type" : "object", "properties" : { } }, - "creator_id" : { - "type" : "integer" - }, "handlers" : { "type" : "array", "items" : { @@ -1507,13 +4624,6 @@ "payload" : { "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" }, - "payload_id" : { - "type" : "integer" - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, "subscriptions" : { "type" : "array", "items" : { @@ -1521,10 +4631,8 @@ } } }, - "required" : [ "payload_type", "payload" ] - }, { } ] - }, { - "oneOf" : [ { + "required" : [ "payload" ] + }, { "type" : "object", "properties" : { "creator" : { @@ -1571,18 +4679,14 @@ "required" : [ "channel_type" ] } }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, "subscriptions" : { "type" : "array", "items" : { "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" } } - }, - "required" : [ "payload" ] - }, { } ] + } + } ] } ] }, "metabase.notification.models.Notification" : { @@ -1898,6 +5002,16 @@ } } }, + "metabase.timeline.api.timeline.Timeline" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "minimum" : 1 + } + }, + "required" : [ "id" ] + }, "metabase.timeline.api.timeline.include" : { "type" : "string", "enum" : [ "events" ] @@ -1957,6 +5071,18 @@ } }, "required" : [ "schedule_type" ] + }, + "metabot.reaction.redirect" : { + "type" : "object", + "properties" : { + "type" : { + "const" : "metabot.reaction/redirect" + }, + "url" : { + "type" : "string" + } + }, + "required" : [ "type", "url" ] } } }, @@ -1975,12 +5101,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] }, "post" : { "summary" : "POST /api/action/", "description" : "Create a new action.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2085,6 +5233,17 @@ "summary" : "GET /api/action/public", "description" : "Fetch a list of Actions with public UUIDs. These actions are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2102,6 +5261,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] }, "delete" : { @@ -2117,6 +5287,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2142,6 +5323,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2159,6 +5351,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2278,6 +5481,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2311,6 +5525,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] }, "delete" : { @@ -2326,6 +5551,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/action" ] } }, @@ -2334,6 +5570,17 @@ "summary" : "GET /api/activity/most_recently_viewed_dashboard", "description" : "Get the most recently viewed dashboard for the current user. Returns a 204 if the user has not viewed any dashboards\n in the last 24 hours.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] } }, @@ -2342,6 +5589,17 @@ "summary" : "GET /api/activity/popular_items", "description" : "Get the list of 5 popular things on the instance. Query takes 8 and limits to 5 so that if it finds anything\n archived, deleted, etc it can usually still get 5. ", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] } }, @@ -2350,6 +5608,17 @@ "summary" : "GET /api/activity/recent_views", "description" : "Get a list of 100 models (cards, models, tables, dashboards, and collections) that the current user has been viewing most\n recently. Return a maximum of 20 model of each, if they've looked at at least 20.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] } }, @@ -2377,12 +5646,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/activity" ] }, "post" : { "summary" : "POST /api/activity/recents", "description" : "Adds a model to the list of recently selected items.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2433,6 +5724,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/alert" ] } }, @@ -2450,6 +5752,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/alert" ] } }, @@ -2467,6 +5780,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/alert" ] } }, @@ -2475,6 +5799,17 @@ "summary" : "GET /api/analytics/anonymous-stats", "description" : "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see\n what is being phoned home.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/analytics" ] } }, @@ -2483,6 +5818,17 @@ "summary" : "POST /api/api-key/", "description" : "Create a new API key (and an associated `User`) with the provided name and group ID.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2510,6 +5856,17 @@ "summary" : "GET /api/api-key/", "description" : "Get a list of API keys with the default scope. Non-paginated.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2518,6 +5875,17 @@ "summary" : "GET /api/api-key/count", "description" : "Get the count of API keys in the DB with the default scope.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2535,6 +5903,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -2570,6 +5949,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2587,6 +5977,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/api-key" ] } }, @@ -2604,6 +6005,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2626,6 +6038,17 @@ "type" : "integer" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2654,6 +6077,17 @@ } ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2698,6 +6132,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2751,6 +6196,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2806,6 +6262,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2870,6 +6337,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2917,6 +6395,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2933,6 +6422,17 @@ "enum" : [ "adhoc", "transform", "table", "question", "field", "segment", "model" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -2982,6 +6482,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -3040,6 +6551,17 @@ }, "description" : "invalid show value" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/automagic-dashboards" ] } }, @@ -3048,6 +6570,17 @@ "summary" : "GET /api/bookmark/", "description" : "Fetch all bookmarks for the user", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bookmark" ] } }, @@ -3056,6 +6589,17 @@ "summary" : "PUT /api/bookmark/ordering", "description" : "Sets the order of bookmarks for user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3111,6 +6655,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bookmark" ] }, "delete" : { @@ -3134,6 +6689,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bookmark" ] } }, @@ -3142,6 +6708,17 @@ "summary" : "GET /api/bug-reporting/connection-pool-details", "description" : "Returns database connection pool info for the current Metabase instance.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bug-reporting" ] } }, @@ -3150,6 +6727,17 @@ "summary" : "GET /api/bug-reporting/details", "description" : "Returns version and system information relevant to filing a bug report against Metabase.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/bug-reporting" ] } }, @@ -3189,12 +6777,34 @@ }, "description" : "Model id to get configuration for." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cache" ] }, "put" : { "summary" : "PUT /api/cache/", "description" : "Store cache configuration.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3225,6 +6835,17 @@ "summary" : "DELETE /api/cache/", "description" : "Delete cache configurations.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3304,6 +6925,17 @@ }, "description" : "A list of question ids" } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cache" ] } }, @@ -3330,12 +6962,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] }, "post" : { "summary" : "POST /api/card/", "description" : "Create a new `Card`. Card `type` can be `question`, `metric`, or `model`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3425,6 +7079,17 @@ "summary" : "POST /api/card/collections", "description" : "Bulk update endpoint for Card Collections. Move a set of `Cards` with `card_ids` into a `Collection` with\n `collection_id`, or remove them from any Collections by passing a `null` `collection_id`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3458,6 +7123,17 @@ "summary" : "GET /api/card/embeddable", "description" : "Fetch a list of Cards where `enable_embedding` is `true`. The cards can be embedded using the embedding endpoints\n and a signed JWT.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3475,6 +7151,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3497,6 +7184,17 @@ "summary" : "GET /api/card/public", "description" : "Fetch a list of Cards with public UUIDs. These cards are publicly-accessible *if* public sharing is enabled.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3530,6 +7228,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3555,6 +7264,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3572,6 +7292,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] }, "delete" : { @@ -3587,6 +7318,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3599,11 +7341,28 @@ "name" : "card-id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3652,6 +7411,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3691,10 +7461,16 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } }, { "in" : "query", "name" : "ignore_view", @@ -3711,6 +7487,17 @@ "enum" : [ "collection" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] }, "put" : { @@ -3733,6 +7520,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3834,6 +7632,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3851,6 +7660,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3868,6 +7688,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3899,6 +7730,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3911,11 +7753,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3953,6 +7812,17 @@ "required" : false, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/card" ] } }, @@ -3961,6 +7831,17 @@ "summary" : "POST /api/cards/dashboards", "description" : "Get the dashboards that multiple cards appear in. The response is a sequence of maps, each of which has a `card_id`\n and `dashboards`. `dashboard` may include an `:error` key, either `:unreadable-dashboard` or\n `:unwritable-dashboard`. In the case of an `unreadable-dashboard` the dashboard details (name, ID) will NOT be\n present.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -3989,6 +7870,17 @@ "summary" : "POST /api/cards/move", "description" : "Moves a number of Cards to a single collection or dashboard.\n\n For now, just either succeed or fail as a batch - we can think more about error handling later down the road.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4027,6 +7919,17 @@ "summary" : "GET /api/channel/", "description" : "Get all channels", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4048,6 +7951,17 @@ "summary" : "POST /api/channel/", "description" : "Create a channel", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4087,6 +8001,17 @@ "summary" : "POST /api/channel/test", "description" : "Test a channel connection", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4123,6 +8048,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/channel" ] }, "put" : { @@ -4138,6 +8074,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4175,12 +8122,34 @@ "summary" : "POST /api/cloud-migration/", "description" : "Initiate a new cloud migration.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cloud-migration" ] }, "get" : { "summary" : "GET /api/cloud-migration/", "description" : "Get the latest cloud migration, if any.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cloud-migration" ] } }, @@ -4189,6 +8158,17 @@ "summary" : "PUT /api/cloud-migration/cancel", "description" : "Cancel any ongoing cloud migrations, if any.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/cloud-migration" ] } }, @@ -4229,12 +8209,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] }, "post" : { "summary" : "POST /api/collection/", "description" : "Create a new Collection.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4284,6 +8286,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] }, "put" : { @@ -4306,6 +8319,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4346,6 +8370,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4354,6 +8389,24 @@ "summary" : "GET /api/collection/root/dashboard-question-candidates", "description" : "Find cards in the root collection that can be moved into dashboards in the root collection. (Same as the above\n endpoint, but for the root collection)", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4435,6 +8488,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4443,6 +8507,24 @@ "summary" : "POST /api/collection/root/move-dashboard-question-candidates", "description" : "Move candidate cards to the dashboards they appear in (for the root collection)", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:moved -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4472,6 +8554,17 @@ "summary" : "GET /api/collection/trash", "description" : "Fetch the trash collection, as in `/api/collection/:trash-id`", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4521,6 +8614,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4533,11 +8637,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] }, "put" : { @@ -4553,6 +8674,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4603,6 +8735,24 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "map where {:data -> , :name -> , :description -> , :sole_dashboard_info -> , :name -> , :description -> }>}>, :total -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.DashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4615,10 +8765,16 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } }, { "in" : "query", "name" : "models", @@ -4686,6 +8842,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/collection" ] } }, @@ -4703,6 +8870,24 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "map where {:moved -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.collections.api.MoveDashboardQuestionCandidatesResponse" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4740,12 +8925,34 @@ "enum" : [ "all", "mine", "archived" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "post" : { "summary" : "POST /api/dashboard/", "description" : "Create a new Dashboard.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4794,6 +9001,17 @@ "summary" : "GET /api/dashboard/embeddable", "description" : "Fetch a list of Dashboards where `enable_embedding` is `true`. The dashboards can be embedded using the embedding\n endpoints and a signed JWT.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4826,6 +9044,17 @@ } } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4861,6 +9090,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -4899,6 +9139,17 @@ "summary" : "GET /api/dashboard/public", "description" : "Fetch a list of Dashboards with public UUIDs. These dashboards are publicly-accessible *if* public sharing is\n enabled.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4907,6 +9158,17 @@ "summary" : "POST /api/dashboard/save", "description" : "Save a denormalized description of dashboard.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4924,6 +9186,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -4959,6 +9232,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5035,6 +9319,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5113,6 +9408,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "post" : { @@ -5137,6 +9443,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5169,6 +9486,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -5184,6 +9512,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5201,6 +9540,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5246,11 +9596,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "delete" : { @@ -5266,6 +9633,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] }, "put" : { @@ -5281,6 +9659,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5447,6 +9836,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5554,6 +9954,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5585,6 +9996,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5610,6 +10032,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5627,6 +10060,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5639,11 +10083,28 @@ "name" : "id", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "anyOf" : [ { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, { + "description" : "String must be a valid 21-character NanoID string.", + "type" : "string", + "pattern" : "^[A-Za-z0-9_\\-]{21}$" + } ] + } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5661,6 +10122,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/dashboard" ] } }, @@ -5726,12 +10198,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] }, "post" : { "summary" : "POST /api/database/", "description" : "Add a new `Database`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5790,6 +10284,17 @@ "summary" : "POST /api/database/sample_database", "description" : "Add the sample database as a new `Database`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5798,6 +10303,17 @@ "summary" : "POST /api/database/validate", "description" : "Validate that we can connect to a database given a set of details.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5864,6 +10380,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] }, "put" : { @@ -5879,6 +10406,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -5947,6 +10485,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -5980,6 +10529,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6012,6 +10572,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6029,6 +10600,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6046,6 +10628,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6063,6 +10656,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6080,6 +10684,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6097,6 +10712,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6146,6 +10772,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6163,6 +10800,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6196,6 +10844,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6229,6 +10888,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6262,6 +10932,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6279,6 +10960,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6296,6 +10988,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6313,6 +11016,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6321,6 +11035,17 @@ "summary" : "GET /api/database/{virtual-db}/datasets", "description" : "Returns a list of all the datasets found for the saved questions virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6329,6 +11054,17 @@ "summary" : "GET /api/database/{virtual-db}/datasets/{schema}", "description" : "Returns a list of Tables for the datasets virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6337,6 +11073,17 @@ "summary" : "GET /api/database/{virtual-db}/metadata", "description" : "Endpoint that provides metadata for the Saved Questions 'virtual' database. Used for fooling the frontend\n and allowing it to treat the Saved Questions virtual DB just like any other database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6345,6 +11092,17 @@ "summary" : "GET /api/database/{virtual-db}/schema/{schema}", "description" : "Returns a list of Tables for the saved questions virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6353,6 +11111,17 @@ "summary" : "GET /api/database/{virtual-db}/schemas", "description" : "Returns a list of all the schemas found for the saved questions virtual database.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/database" ] } }, @@ -6361,6 +11130,17 @@ "summary" : "POST /api/dataset/", "description" : "Execute a query and retrieve the results in the usual format. The query will not use the cache.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6383,6 +11163,17 @@ "summary" : "POST /api/dataset/native", "description" : "Fetch a native version of an MBQL query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6412,6 +11203,17 @@ "summary" : "POST /api/dataset/parameter/remapping", "description" : "Return the remapped parameter values for cards or dashboards that are being edited.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6450,6 +11252,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6479,6 +11292,17 @@ "summary" : "POST /api/dataset/parameter/values", "description" : "Return parameter values for cards or dashboards that are being edited.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6508,6 +11332,17 @@ "summary" : "POST /api/dataset/pivot", "description" : "Generate a pivoted dataset for an ad-hoc query", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6533,6 +11368,17 @@ "summary" : "POST /api/dataset/query_metadata", "description" : "Get all of the required query metadata for an ad-hoc query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6565,6 +11411,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6602,6 +11459,17 @@ "summary" : "GET /api/ee/advanced-permissions/application/graph", "description" : "Fetch a graph of Application Permissions.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/advanced-permissions/application" ] }, "put" : { @@ -6624,6 +11492,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6660,6 +11539,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -6677,6 +11567,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/advanced-permissions/impersonation" ] } }, @@ -6685,6 +11586,17 @@ "summary" : "POST /api/ee/ai-entity-analysis/analyze-chart", "description" : "Analyze a chart image using an AI vision model. This function sends the image data to a separate external AI service for analysis.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6732,6 +11644,17 @@ "summary" : "POST /api/ee/ai-sql-fixer/fix", "description" : "Suggest fixes for a SQL query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6766,6 +11689,17 @@ "summary" : "POST /api/ee/ai-sql-generation/generate", "description" : "Generate a SQL query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6795,6 +11729,17 @@ "summary" : "GET /api/ee/audit-app/user/audit-info", "description" : "Gets audit info for the current user if he has permissions to access the audit collection.\n Otherwise return an empty map.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -6812,6 +11757,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/audit-app/user" ] } }, @@ -6820,6 +11776,17 @@ "summary" : "POST /api/ee/autodescribe/card/summarize", "description" : "Summarize a question.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -6900,6 +11867,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/autodescribe" ] } }, @@ -6908,6 +11886,17 @@ "summary" : "GET /api/ee/billing/", "description" : "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client,\n using the embedding token and signed in user's email to fetch the billing information.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/billing" ] } }, @@ -6916,6 +11905,17 @@ "summary" : "GET /api/ee/content-translation/csv", "description" : "Provides content translation dictionary in CSV", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -6931,6 +11931,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/content-translation" ] } }, @@ -6939,6 +11950,17 @@ "summary" : "POST /api/ee/content-translation/upload-dictionary", "description" : "Upload a CSV of content translations", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -6964,6 +11986,60 @@ "tags" : [ "/api/ee/content-translation" ] } }, + "/api/ee/database-replication/connection/{database-id}" : { + "post" : { + "summary" : "POST /api/ee/database-replication/connection/{database-id}", + "description" : "Create a new PG replication connection for the specified database.", + "parameters" : [ { + "in" : "path", + "name" : "database-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/ee/database-replication" ] + }, + "delete" : { + "summary" : "DELETE /api/ee/database-replication/connection/{database-id}", + "description" : "Delete PG replication connection for the specified database.", + "parameters" : [ { + "in" : "path", + "name" : "database-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/ee/database-replication" ] + } + }, "/api/ee/database-routing/destination-database" : { "post" : { "summary" : "POST /api/ee/database-routing/destination-database", @@ -6976,6 +12052,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7028,6 +12115,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7046,11 +12144,111 @@ "tags" : [ "/api/ee/database-routing" ] } }, + "/api/ee/email/override" : { + "put" : { + "summary" : "PUT /api/ee/email/override", + "description" : "Update multiple cloud email Settings. You must be a superuser or have `setting` permission to do this.\n Calling this automatically sets `cloud-smtp-enabled` to true if the settings are valid.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "email-smtp-host-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-password-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-port-override" : { + "anyOf" : [ { + "type" : "integer" + }, { + "type" : "null" + } ] + }, + "email-smtp-security-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-username-override" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + } + } + } + } + } + }, + "tags" : [ "/api/ee/email" ] + }, + "delete" : { + "summary" : "DELETE /api/ee/email/override", + "description" : "Clear all cloud email related settings. You must be a superuser or have `setting` permission to do this.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/ee/email" ] + } + }, "/api/ee/gsheets/connection" : { "post" : { "summary" : "POST /api/ee/gsheets/connection", "description" : "Hook up a new google drive folder or sheet that will be watched and have its content ETL'd into Metabase.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/gsheets.response" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7073,12 +12271,41 @@ "summary" : "GET /api/ee/gsheets/connection", "description" : "Check the status of a connection. This endpoint gets polled by FE to determine when to\n stop showing the setup widget.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:error -> , :message -> }, or one of , :created_at -> , :sync_started_at -> , :created_by_id -> , :db_id -> } | active = map where {:url -> , :created_at -> , :last_sync_at -> , :next_sync_at -> , :created_by_id -> , :db_id -> } | error = map where {:url -> , :created_at -> , :error_message -> , :created_by_id -> , :db_id -> }> dispatched by :status", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/gsheets.response" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] }, "delete" : { "summary" : "DELETE /api/ee/gsheets/connection", "description" : "Disconnect the google service account. There is only one (or zero) at the time of writing.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -7087,6 +12314,17 @@ "summary" : "POST /api/ee/gsheets/connection/sync", "description" : "Force a sync of the connection now.\n\n Returns the gsheets shape, with the attached datawarehouse db id at `:db_id`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -7095,6 +12333,30 @@ "summary" : "GET /api/ee/gsheets/service-account", "description" : "Checks to see if service-account is setup or not, delegates to HM only if we haven't set it from a metabase cluster\n before.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:email -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "email" : { + "type" : "string" + } + }, + "required" : [ ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/gsheets" ] } }, @@ -7112,6 +12374,17 @@ }, "description" : "Must be a string like 2020-04 or 2222-11." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/logs" ] } }, @@ -7120,6 +12393,32 @@ "summary" : "POST /api/ee/metabot-tools/answer-sources", "description" : "Return top level meta information about available information sources.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7148,6 +12447,35 @@ "summary" : "POST /api/ee/metabot-tools/create-dashboard-subscription", "description" : "Create a dashboard subscription.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:output -> , :conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "output" : { + "type" : "string" + } + }, + "required" : [ "output", "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7176,6 +12504,32 @@ "summary" : "POST /api/ee/metabot-tools/field-values", "description" : "Return statistics and/or values for a given field of a given entity.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7204,6 +12558,32 @@ "summary" : "POST /api/ee/metabot-tools/filter-records", "description" : "Construct a query from a metric.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7232,6 +12612,32 @@ "summary" : "POST /api/ee/metabot-tools/find-metric", "description" : "Find a metric matching a description.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7266,6 +12672,32 @@ "summary" : "POST /api/ee/metabot-tools/find-outliers", "description" : "Find outliers in the values provided by a data source for a given column.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7294,6 +12726,41 @@ "summary" : "POST /api/ee/metabot-tools/generate-insights", "description" : "Generate insights.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:output -> , :reactions -> , :url -> }>, :conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "output" : { + "type" : "string" + }, + "reactions" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabot.reaction.redirect" + } + } + }, + "required" : [ "output", "reactions", "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7322,6 +12789,32 @@ "summary" : "POST /api/ee/metabot-tools/get-current-user", "description" : "Get information about user that started the conversation.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7339,6 +12832,32 @@ "summary" : "POST /api/ee/metabot-tools/get-dashboard-details", "description" : "Get information about a given dashboard.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7373,6 +12892,32 @@ "summary" : "POST /api/ee/metabot-tools/get-metric-details", "description" : "Get information about a given metric.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7401,6 +12946,32 @@ "summary" : "POST /api/ee/metabot-tools/get-query-details", "description" : "Get information about a given query.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7436,6 +13007,32 @@ "summary" : "POST /api/ee/metabot-tools/get-report-details", "description" : "Get information about a given report.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7464,6 +13061,32 @@ "summary" : "POST /api/ee/metabot-tools/get-table-details", "description" : "Get information about a given table or model.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7492,6 +13115,32 @@ "summary" : "POST /api/ee/metabot-tools/query-metric", "description" : "Construct a query from a metric.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7520,6 +13169,32 @@ "summary" : "POST /api/ee/metabot-tools/query-model", "description" : "Construct a query from a model.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:conversation_id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "conversation_id" : { + "description" : "value must be a valid UUID.", + "type" : "string", + "pattern" : "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required" : [ "conversation_id" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7548,6 +13223,17 @@ "summary" : "GET /api/ee/metabot-v3/metabot/", "description" : "List configured metabot instances", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7564,6 +13250,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7580,6 +13277,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "put" : { @@ -7594,6 +13302,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7655,6 +13374,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7694,6 +13424,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] }, "delete" : { @@ -7708,6 +13449,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7724,6 +13476,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7748,6 +13511,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/metabot-v3/metabot" ] } }, @@ -7756,6 +13530,17 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent", "description" : "Send a chat message to the LLM via the AI Service.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7798,6 +13583,17 @@ "summary" : "POST /api/ee/metabot-v3/v2/agent-streaming", "description" : "Send a chat message to the LLM via the AI Proxy.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7835,48 +13631,39 @@ "tags" : [ "/api/ee/metabot-v3" ] } }, - "/api/ee/permission_debug/" : { - "get" : { - "summary" : "GET /api/ee/permission_debug/", - "description" : "This endpoint expects a `user_id`, a `model_id` to debug permissions against, and `action_type`.\n The type of model we are debugging against is inferred by the `action_type`.\n\n It will return:\n - `decision`: The overall permission decision (\"allow\", \"denied\", or \"limited\")\n - `model-type`: The type of model being checked (e.g., \"question\")\n - `model-id`: The ID of the model being checked\n - `segment`: A set of segmentation types applied (e.g., \"sandboxed\", \"impersonated\", \"routed\")\n - `message`: A sequence of strings explaining the decision\n - `data`: A map containing details about permissions (table or collection names to group names)\n - `suggestions`: A map of group IDs to group names that could provide access\n\n Example requests:\n - Check if user can read a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/read`\n - Check if user can query a card: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/query`\n - Check if user can download data: `GET /api/ee/permission_debug?user_id=123&model_id=456&action_type=card/download-data`\n\n Example responses:\n - Allowed access:\n ```json\n {\n \"decision\": \"allow\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to read this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```\n - Denied access with blocked table:\n ```json\n {\n \"decision\": \"denied\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User does not have permission to query this card\"],\n \"data\": {\"sample-db.PUBLIC.ORDERS\": [\"All Users\"]},\n \"suggestions\": {}\n }\n ```\n - Limited access:\n ```json\n {\n \"decision\": \"limited\",\n \"model-type\": \"question\",\n \"model-id\": \"456\",\n \"segment\": [],\n \"message\": [\"User has permission to download some data from this card\"],\n \"data\": {},\n \"suggestions\": {}\n }\n ```", - "parameters" : [ { - "in" : "query", - "name" : "user_id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 - } - }, { - "in" : "query", - "name" : "model_id", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "action_type", - "required" : true, - "schema" : { - "type" : "string", - "enum" : [ "card/read", "card/query", "card/download-data" ] - } - } ], - "tags" : [ "/api/ee/permission_debug" ] - } - }, "/api/ee/scim/api_key" : { "get" : { "summary" : "GET /api/ee/scim/api_key", "description" : "Fetch the SCIM API key if one exists. Does *not* return an unmasked key, since we don't have access\n to that after it is created.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim" ] }, "post" : { "summary" : "POST /api/ee/scim/api_key", "description" : "Create a new SCIM API key, or refresh one that already exists. When called for the first time,\n this is equivalent to enabling SCIM.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim" ] } }, @@ -7911,12 +13698,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Groups", "description" : "Create a single group, and populates it if necessary.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -7977,12 +13786,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Groups/{id}", "description" : "Update a group.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8041,6 +13872,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] } }, @@ -8075,12 +13917,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "post" : { "summary" : "POST /api/ee/scim/v2/Users", "description" : "Create a single user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8184,12 +14048,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/scim/v2" ] }, "put" : { "summary" : "PUT /api/ee/scim/v2/Users/{id}", "description" : "Update a user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8291,6 +14177,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8423,7 +14320,18 @@ "default" : false, "type" : "boolean" } - } ], + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/serialization" ] } }, @@ -8448,6 +14356,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -8532,6 +14451,17 @@ "enum" : [ "asc", "desc" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/stale" ] } }, @@ -8540,6 +14470,17 @@ "summary" : "GET /api/ee/upload-management/tables", "description" : "Get all `Tables` visible to the current user which were created by uploading a file.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/upload-management" ] } }, @@ -8565,6 +14506,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/ee/upload-management" ] } }, @@ -8573,6 +14525,17 @@ "summary" : "POST /api/eid-translation/translate", "description" : "Translate entity IDs to model IDs.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -8597,12 +14560,59 @@ "summary" : "PUT /api/email/", "description" : "Update multiple email Settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { "schema" : { "type" : "object", - "properties" : { } + "properties" : { + "email-smtp-host" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-password" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-port" : { + "anyOf" : [ { + "type" : "integer" + }, { + "type" : "null" + } ] + }, + "email-smtp-security" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + }, + "email-smtp-username" : { + "anyOf" : [ { + "type" : "string" + }, { + "type" : "null" + } ] + } + } } } } @@ -8613,6 +14623,17 @@ "summary" : "DELETE /api/email/", "description" : "Clear all email related settings. You must be a superuser or have `setting` permission to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/email" ] } }, @@ -8621,6 +14642,17 @@ "summary" : "POST /api/email/test", "description" : "Send a test email using the SMTP Settings. You must be a superuser or have `setting` permission to do this.\n Returns `{:ok true}` if we were able to send the message successfully, otherwise a standard 400 error response.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/email" ] } }, @@ -8636,6 +14668,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8665,6 +14708,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8673,6 +14727,17 @@ "summary" : "GET /api/embed/card/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8695,6 +14760,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8710,6 +14786,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8748,6 +14835,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8763,6 +14861,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8796,6 +14905,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8845,6 +14965,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8853,6 +14984,17 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8861,6 +15003,17 @@ "summary" : "GET /api/embed/dashboard/{token}/params/{param-key}/search/{prefix}", "description" : "Embedded version of chain filter search endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8883,6 +15036,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8898,6 +15062,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8931,6 +15106,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -8992,6 +15178,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -9071,6 +15268,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/embed" ] } }, @@ -9096,6 +15304,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] }, "put" : { @@ -9111,6 +15330,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9188,6 +15418,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9228,6 +15469,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9245,6 +15497,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9262,6 +15525,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9296,6 +15570,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9313,6 +15598,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9347,6 +15643,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9364,6 +15671,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] } }, @@ -9381,6 +15699,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/field" ] }, "post" : { @@ -9396,6 +15725,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9439,6 +15779,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/geojson" ] } }, @@ -9455,6 +15806,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/geojson" ] } }, @@ -9463,6 +15825,17 @@ "summary" : "PUT /api/google/settings", "description" : "Update Google Sign-In related settings. You must be a superuser to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9491,6 +15864,17 @@ "summary" : "PUT /api/ldap/settings", "description" : "Update LDAP related settings. You must be a superuser to do this.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9523,6 +15907,17 @@ "summary" : "POST /api/logger/adjustment", "description" : "Temporarily adjust the log levels.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9548,6 +15943,17 @@ "summary" : "DELETE /api/logger/adjustment", "description" : "Undo any log level adjustments.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/logger" ] } }, @@ -9556,6 +15962,17 @@ "summary" : "GET /api/logger/logs", "description" : "Logs.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/logger" ] } }, @@ -9564,6 +15981,51 @@ "summary" : "GET /api/logger/presets", "description" : "Get all known presets.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "sequence of map where {:id -> , :display_name -> , :loggers -> , :level -> }>}", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "display_name" : { + "type" : "string" + }, + "id" : { + "type" : "string" + }, + "loggers" : { + "type" : "array", + "items" : { + "type" : "object", + "properties" : { + "level" : { + "$ref" : "#/components/schemas/metabase.logger.api.log-level" + }, + "name" : { + "type" : "string" + } + }, + "required" : [ "name", "level" ] + } + } + }, + "required" : [ "id", "display_name", "loggers" ] + } + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/logger" ] } }, @@ -9572,6 +16034,17 @@ "summary" : "GET /api/login-history/current", "description" : "Fetch recent logins for the current user.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/login-history" ] } }, @@ -9580,6 +16053,17 @@ "summary" : "POST /api/model-index/", "description" : "Create ModelIndex.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9614,6 +16098,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/model-index" ] } }, @@ -9631,6 +16126,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/model-index" ] }, "delete" : { @@ -9646,6 +16152,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/model-index" ] } }, @@ -9654,6 +16171,17 @@ "summary" : "POST /api/moderation-review/", "description" : "Create a new `ModerationReview`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9707,12 +16235,34 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/gtap" ] }, "post" : { "summary" : "POST /api/mt/gtap/", "description" : "Create a new GTAP.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9749,6 +16299,17 @@ "summary" : "POST /api/mt/gtap/validate", "description" : "Validate a sandbox which may not have yet been saved. This runs the same validation that is performed when the\n sandbox is saved, but doesn't actually save the sandbox.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9788,6 +16349,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/gtap" ] }, "put" : { @@ -9803,6 +16375,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9835,6 +16418,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/gtap" ] } }, @@ -9843,6 +16437,17 @@ "summary" : "GET /api/mt/user/attributes", "description" : "Fetch a list of possible keys for User `login_attributes`. This just looks at keys that have already been set for\n existing Users and returns those. ", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/mt/user" ] } }, @@ -9860,6 +16465,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9892,12 +16508,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/native-query-snippet" ] }, "post" : { "summary" : "POST /api/native-query-snippet/", "description" : "Create a new `NativeQuerySnippet`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -9941,6 +16579,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/native-query-snippet" ] }, "put" : { @@ -9956,6 +16605,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10043,12 +16703,34 @@ "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/notification" ] }, "post" : { "summary" : "POST /api/notification/", "description" : "Create a new notification, return the created notification.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10066,6 +16748,17 @@ "summary" : "POST /api/notification/send", "description" : "Send an unsaved notification.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10083,6 +16776,17 @@ "summary" : "POST /api/notification/unsubscribe/", "description" : "Allow non-users to unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10114,6 +16818,17 @@ "summary" : "POST /api/notification/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from notifications, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10154,6 +16869,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/notification" ] }, "put" : { @@ -10169,6 +16895,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10195,6 +16932,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10231,6 +16979,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/notification" ] } }, @@ -10239,6 +16998,17 @@ "summary" : "POST /api/notify/db/attached_datawarehouse", "description" : "Sync the attached datawarehouse. Can provide in the body:\n - table_name and schema_name: both strings. Will look for an existing table and sync it, otherwise will try to find a\n new table with that name and sync it. If it cannot find a table it will throw an error. If table_name is empty or\n blank, will sync the entire database.\n - synchronous?: is a boolean value to indicate if this should block on the result.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10279,6 +17049,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10320,6 +17101,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10348,6 +17140,17 @@ "summary" : "GET /api/permissions/graph", "description" : "Fetch a graph of all Permissions.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] }, "put" : { @@ -10370,6 +17173,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10397,6 +17211,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10414,6 +17239,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10422,12 +17258,34 @@ "summary" : "GET /api/permissions/group", "description" : "Fetch all `PermissionsGroups`, including a count of the number of `:members` in that group.\n This API requires superuser or group manager of more than one group.\n Group manager is only available if `advanced-permissions` is enabled and returns only groups that user\n is manager of.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/group", "description" : "Create a new `PermissionsGroup`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10461,6 +17319,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10492,6 +17361,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10509,6 +17389,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10517,12 +17408,34 @@ "summary" : "GET /api/permissions/membership", "description" : "Fetch a map describing the group memberships of various users.\n This map's format is:\n\n { [{:membership_id \n :group_id \n :is_group_manager boolean}]}", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] }, "post" : { "summary" : "POST /api/permissions/membership", "description" : "Add a `User` to a `PermissionsGroup`. Returns updated list of members belonging to the group.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10566,6 +17479,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10583,6 +17507,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10613,6 +17548,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/permissions" ] } }, @@ -10621,6 +17567,17 @@ "summary" : "GET /api/persist/", "description" : "List the entries of [[PersistedInfo]] in order to show a status page.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10638,6 +17595,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10655,6 +17623,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10672,6 +17651,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10689,6 +17679,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10706,6 +17707,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10723,6 +17735,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10731,6 +17754,17 @@ "summary" : "POST /api/persist/disable", "description" : "Disable global setting to allow databases to persist models. This will remove all tasks to refresh tables, remove\n that option from databases which might have it enabled, and delete all cached tables.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10739,6 +17773,17 @@ "summary" : "POST /api/persist/enable", "description" : "Enable global setting to allow databases to persist models.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10747,6 +17792,17 @@ "summary" : "POST /api/persist/set-refresh-schedule", "description" : "Set the cron schedule to refresh persisted models.\n Shape should be JSON like {cron: \"0 30 1/8 * * ? *\"}.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -10781,6 +17837,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/persist" ] } }, @@ -10789,6 +17856,17 @@ "summary" : "GET /api/premium-features/token/status", "description" : "Fetch info about the current Premium-Features premium features token including whether it is `valid`, a `trial` token, its\n `features`, when it is `valid-thru`, and the `status` of the account.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/premium-features" ] } }, @@ -10805,6 +17883,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10834,6 +17923,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10850,6 +17950,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10866,6 +17977,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10900,6 +18022,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10908,6 +18041,17 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/remapping", "description" : "Embedded version of the remapped dashboard param value endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10916,6 +18060,17 @@ "summary" : "GET /api/preview_embed/dashboard/{token}/params/{param-key}/values", "description" : "Embedded version of chain filter values endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10932,6 +18087,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10966,6 +18132,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/preview_embed" ] } }, @@ -10974,6 +18151,17 @@ "summary" : "POST /api/product-feedback/", "description" : "Endpoint to provide feedback from the product", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11015,6 +18203,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11032,6 +18231,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11064,6 +18274,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11094,6 +18315,17 @@ "required" : true, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11127,6 +18359,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11152,6 +18395,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11177,6 +18431,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11225,6 +18490,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11242,6 +18518,17 @@ }, "description" : "value must be a valid UUID." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11285,6 +18572,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11327,6 +18625,17 @@ "$ref" : "#/components/schemas/metabase.query-processor.schema.export-format" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11388,6 +18697,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] }, "post" : { @@ -11412,6 +18732,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11457,6 +18788,17 @@ "required" : true, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11490,6 +18832,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11515,6 +18868,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11558,6 +18922,17 @@ "minimum" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11583,6 +18958,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11626,6 +19012,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11689,6 +19086,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11770,6 +19178,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/public" ] } }, @@ -11803,12 +19222,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] }, "post" : { "summary" : "POST /api/pulse/", "description" : "Create a new `Pulse`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11861,6 +19302,17 @@ "summary" : "GET /api/pulse/form_input", "description" : "Provides relevant configuration information and user choices for creating/updating Pulses.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11878,6 +19330,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11895,6 +19358,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11912,6 +19386,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11929,6 +19414,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -11937,6 +19433,17 @@ "summary" : "POST /api/pulse/test", "description" : "Test send an unsaved pulse.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -11982,6 +19489,17 @@ "summary" : "POST /api/pulse/unsubscribe/", "description" : "Allow non-users to unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12013,6 +19531,17 @@ "summary" : "POST /api/pulse/unsubscribe/undo", "description" : "Allow non-users to undo an unsubscribe from pulses/subscriptions, with the hash given through email.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12053,6 +19582,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] }, "put" : { @@ -12068,6 +19608,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12124,6 +19675,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/pulse" ] } }, @@ -12149,6 +19711,17 @@ "enum" : [ "card", "dashboard", "segment" ] } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/revision" ] } }, @@ -12157,6 +19730,17 @@ "summary" : "POST /api/revision/revert", "description" : "Revert an object to a prior revision.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12208,13 +19792,24 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/revision" ] } }, "/api/search/" : { "get" : { "summary" : "GET /api/search/", - "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", + "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filters_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n - `display_type`: search for cards/models with specific display types\n - `has_temporal_dimensions`: set to true to search for cards with temporal dimensions only\n\n Note that not all item types support all filters, and the results will include only models that support the provided filters. For example:\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", "parameters" : [ { "in" : "query", "name" : "q", @@ -12286,6 +19881,24 @@ "minimum" : 1 } } + }, { + "in" : "query", + "name" : "display_type", + "required" : false, + "schema" : { + "type" : "array", + "items" : { + "type" : "string", + "minLength" : 1 + } + } + }, { + "in" : "query", + "name" : "has_temporal_dimensions", + "required" : false, + "schema" : { + "type" : "boolean" + } }, { "in" : "query", "name" : "last_edited_at", @@ -12371,6 +19984,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12379,6 +20003,17 @@ "summary" : "POST /api/search/force-reindex", "description" : "This will trigger an immediate reindexing, if we are using search index.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12387,6 +20022,17 @@ "summary" : "POST /api/search/re-init", "description" : "This will blow away any search indexes, re-create, and re-populate them.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12408,6 +20054,17 @@ "required" : false, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] }, "put" : { @@ -12427,6 +20084,17 @@ "required" : false, "schema" : { } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/search" ] } }, @@ -12435,6 +20103,17 @@ "summary" : "POST /api/segment/", "description" : "Create a new `Segment`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12470,6 +20149,17 @@ "summary" : "GET /api/segment/", "description" : "Fetch *all* `Segments`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] } }, @@ -12487,6 +20177,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] }, "put" : { @@ -12502,6 +20203,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12564,6 +20276,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] } }, @@ -12581,6 +20304,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/segment" ] } }, @@ -12589,6 +20323,17 @@ "summary" : "POST /api/session/", "description" : "Login.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12615,6 +20360,17 @@ "summary" : "DELETE /api/session/", "description" : "Logout.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/session" ] } }, @@ -12623,6 +20379,17 @@ "summary" : "POST /api/session/forgot_password", "description" : "Send a reset email when user has forgotten their password.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12647,6 +20414,17 @@ "summary" : "POST /api/session/google_auth", "description" : "Login with Google Auth.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12671,6 +20449,17 @@ "summary" : "POST /api/session/password-check", "description" : "Endpoint that checks if the supplied password meets the currently configured password complexity rules.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12703,6 +20492,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/session" ] } }, @@ -12711,6 +20511,17 @@ "summary" : "GET /api/session/properties", "description" : "Get all properties and their values. These are the specific `Settings` that are readable by the current user, or are\n public if no user is logged in.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/session" ] } }, @@ -12719,6 +20530,17 @@ "summary" : "POST /api/session/reset_password", "description" : "Reset password with a reset token.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12747,12 +20569,34 @@ "summary" : "GET /api/setting/", "description" : "Get all `Settings` and their values. You must be a superuser or have `setting` permission to do this.\n For non-superusers, a list of visible settings and values can be retrieved using the /api/session/properties endpoint.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/setting" ] }, "put" : { "summary" : "PUT /api/setting/", "description" : "Update multiple `Settings` values. If called by a non-superuser, only user-local settings can be updated.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12778,6 +20622,17 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/setting" ] }, "put" : { @@ -12791,6 +20646,30 @@ "type" : "string" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "value" : { } + }, + "required" : [ "value" ] + } + } + } + }, "tags" : [ "/api/setting" ] } }, @@ -12799,6 +20678,17 @@ "summary" : "POST /api/setup/", "description" : "Special endpoint for creating the first user during setup. This endpoint both creates the user AND logs them in and\n returns a session ID. This endpoint can also be used to add a database, create and invite a second admin, and/or\n set specific settings from the setup flow.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12878,6 +20768,17 @@ "summary" : "GET /api/setup/user_defaults", "description" : "Returns object containing default user details for initial setup, if configured,\n and if the provided token value matches the token in the configuration value.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/setup" ] } }, @@ -12886,6 +20787,17 @@ "summary" : "POST /api/slack/bug-report", "description" : "Send diagnostic information to the configured Slack channels.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12909,6 +20821,17 @@ "summary" : "GET /api/slack/manifest", "description" : "Returns the YAML manifest file that should be used to bootstrap new Slack apps", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/slack" ] } }, @@ -12917,6 +20840,17 @@ "summary" : "PUT /api/slack/settings", "description" : "Update Slack related settings. You must be a superuser to do this. Also updates the slack-cache.\n There are 3 cases where we alter the slack channel/user cache:\n 1. falsy token -> clear\n 2. invalid token -> clear\n 3. truthy, valid token -> refresh ", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -12943,12 +20877,34 @@ "summary" : "GET /api/table/", "description" : "Get all `Tables`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] }, "put" : { "summary" : "PUT /api/table/", "description" : "Update all `Table` in `ids`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13009,6 +20965,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13026,6 +20993,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13050,6 +21028,17 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] }, "put" : { @@ -13065,6 +21054,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13120,6 +21120,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -13159,6 +21170,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13176,6 +21198,30 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "map where {:success -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "success" : { + "const" : true + } + }, + "required" : [ "success" ] + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13207,6 +21253,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13248,6 +21305,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13265,6 +21333,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/table" ] } }, @@ -13282,6 +21361,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -13299,104 +21389,413 @@ "required" : [ "filename", "tempfile" ] } }, - "required" : [ "file" ] + "required" : [ "file" ] + } + } + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/table/{id}/rescan_values" : { + "post" : { + "summary" : "POST /api/table/{id}/rescan_values", + "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/table/{id}/sync_schema" : { + "post" : { + "summary" : "POST /api/table/{id}/sync_schema", + "description" : "Trigger a manual update of the schema metadata for this `Table`.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/table/{table-id}/data" : { + "get" : { + "summary" : "GET /api/table/{table-id}/data", + "description" : "Get the data for the given table", + "parameters" : [ { + "in" : "path", + "name" : "table-id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/table" ] + } + }, + "/api/task/" : { + "get" : { + "summary" : "GET /api/task/", + "description" : "Fetch a list of recent tasks stored as Task History", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/task/info" : { + "get" : { + "summary" : "GET /api/task/info", + "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/task/unique-tasks" : { + "get" : { + "summary" : "GET /api/task/unique-tasks", + "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/task/{id}" : { + "get" : { + "summary" : "GET /api/task/{id}", + "description" : "Get `TaskHistory` entry with ID.", + "parameters" : [ { + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "type" : "integer", + "minimum" : 1 + }, + "description" : "value must be an integer greater than zero." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/task" ] + } + }, + "/api/testing/echo" : { + "post" : { + "summary" : "POST /api/testing/echo", + "description" : "Simple echo hander. Fails when you POST with `?fail=true`.", + "parameters" : [ { + "in" : "query", + "name" : "fail", + "required" : true, + "schema" : { + "default" : false, + "type" : "boolean" + } + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] + }, + "get" : { + "summary" : "GET /api/testing/echo", + "description" : "Simple echo hander. Fails when you GET with `?fail=true`.", + "parameters" : [ { + "in" : "query", + "name" : "fail", + "required" : true, + "schema" : { + "default" : false, + "type" : "boolean" + } + }, { + "in" : "query", + "name" : "body", + "required" : true, + "schema" : { + "type" : "string" + }, + "description" : "value must be a valid JSON string." + } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] + } + }, + "/api/testing/mark-stale" : { + "post" : { + "summary" : "POST /api/testing/mark-stale", + "description" : "Mark the card or dashboard as stale", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "date-str" : { + "type" : "string" + }, + "id" : { + "description" : "value must be an integer greater than zero.", + "type" : "integer", + "minimum" : 1 + }, + "model" : { + "type" : "string" + } + }, + "required" : [ "id", "model" ] } } } }, - "tags" : [ "/api/table" ] + "tags" : [ "/api/testing" ] } }, - "/api/table/{id}/rescan_values" : { + "/api/testing/refresh-caches" : { "post" : { - "summary" : "POST /api/table/{id}/rescan_values", - "description" : "Manually trigger an update for the FieldValues for the Fields belonging to this Table. Only applies to Fields that\n are eligible for FieldValues.", - "parameters" : [ { - "in" : "path", - "name" : "id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "summary" : "POST /api/testing/refresh-caches", + "description" : "Manually triggers the cache refresh task, if Enterprise code is available.", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/table" ] + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] } }, - "/api/table/{id}/sync_schema" : { + "/api/testing/restore/{name}" : { "post" : { - "summary" : "POST /api/table/{id}/sync_schema", - "description" : "Trigger a manual update of the schema metadata for this `Table`.", + "summary" : "POST /api/testing/restore/{name}", + "description" : "Restore a database snapshot for testing purposes.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "name", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "string", + "minLength" : 1 + } } ], - "tags" : [ "/api/table" ] - } - }, - "/api/table/{table-id}/data" : { - "get" : { - "summary" : "GET /api/table/{table-id}/data", - "description" : "Get the data for the given table", - "parameters" : [ { - "in" : "path", - "name" : "table-id", - "required" : true, - "schema" : { - "type" : "integer", - "minimum" : 1 + "responses" : { + "2XX" : { + "description" : "Successful response" }, - "description" : "value must be an integer greater than zero." - } ], - "tags" : [ "/api/table" ] - } - }, - "/api/task/" : { - "get" : { - "summary" : "GET /api/task/", - "description" : "Fetch a list of recent tasks stored as Task History", - "parameters" : [ ], - "tags" : [ "/api/task" ] - } - }, - "/api/task/info" : { - "get" : { - "summary" : "GET /api/task/info", - "description" : "Return raw data about all scheduled tasks (i.e., Quartz Jobs and Triggers).", - "parameters" : [ ], - "tags" : [ "/api/task" ] + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] } }, - "/api/task/unique-tasks" : { - "get" : { - "summary" : "GET /api/task/unique-tasks", - "description" : "Returns possibly empty vector of unique task names in alphabetical order. It is expected that number of unique\n tasks is small, hence no need for pagination. If that changes this endpoint and function that powers it should\n reflect that.", + "/api/testing/set-time" : { + "post" : { + "summary" : "POST /api/testing/set-time", + "description" : "Make java-time see world at exact time.", "parameters" : [ ], - "tags" : [ "/api/task" ] + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "properties" : { + "add-ms" : { + "description" : "value must be an integer.", + "type" : "integer" + }, + "time" : { + "description" : "value must be a valid date string", + "type" : "string" + } + } + } + } + } + }, + "tags" : [ "/api/testing" ] } }, - "/api/task/{id}" : { - "get" : { - "summary" : "GET /api/task/{id}", - "description" : "Get `TaskHistory` entry with ID.", + "/api/testing/snapshot/{name}" : { + "post" : { + "summary" : "POST /api/testing/snapshot/{name}", + "description" : "Snapshot the database for testing purposes.", "parameters" : [ { "in" : "path", - "name" : "id", + "name" : "name", "required" : true, "schema" : { - "type" : "integer", - "minimum" : 1 - }, - "description" : "value must be an integer greater than zero." + "type" : "string", + "minLength" : 1 + } } ], - "tags" : [ "/api/task" ] + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] + } + }, + "/api/testing/stats" : { + "post" : { + "summary" : "POST /api/testing/stats", + "description" : "Triggers a send of instance usage stats", + "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, + "tags" : [ "/api/testing" ] } }, "/api/tiles/{card-id}/{zoom}/{x}/{y}/{lat-field}/{lon-field}" : { @@ -13459,6 +21858,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/tiles" ] } }, @@ -13540,6 +21950,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/tiles" ] } }, @@ -13556,6 +21977,17 @@ }, "description" : "value must be a valid JSON string." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/tiles" ] } }, @@ -13564,6 +21996,17 @@ "summary" : "POST /api/timeline-event/", "description" : "Create a new [[TimelineEvent]].", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13631,6 +22074,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline-event" ] }, "put" : { @@ -13646,6 +22100,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13701,6 +22166,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline-event" ] } }, @@ -13709,6 +22185,24 @@ "summary" : "POST /api/timeline/", "description" : "Create a new [[Timeline]].", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "map where {:id -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13764,6 +22258,27 @@ "type" : "boolean" } } ], + "responses" : { + "2XX" : { + "description" : "sequence of map where {:id -> }", + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" + } + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13787,6 +22302,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13819,6 +22345,17 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13867,6 +22404,24 @@ }, "description" : "value must be a valid date string" } ], + "responses" : { + "2XX" : { + "description" : "map where {:id -> }", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/metabase.timeline.api.timeline.Timeline" + } + } + } + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] }, "put" : { @@ -13882,6 +22437,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -13930,6 +22496,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/timeline" ] } }, @@ -13938,6 +22515,17 @@ "summary" : "POST /api/upload/csv", "description" : "Create a table and model populated with the values from the attached CSV. Returns the model ID if successful.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "multipart/form-data" : { @@ -13980,6 +22568,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user-key-value" ] } }, @@ -14004,6 +22603,17 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -14041,12 +22651,34 @@ "minLength" : 1 } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user-key-value" ] }, "delete" : { "summary" : "DELETE /api/user-key-value/namespace/{namespace}/key/{key}", "description" : "Deletes a KV-pair for the user", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user-key-value" ] } }, @@ -14086,12 +22718,34 @@ "default" : false } } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] }, "post" : { "summary" : "POST /api/user/", "description" : "Create a new `User`, return a 400 if the email address is already taken", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -14135,6 +22789,17 @@ "summary" : "GET /api/user/current", "description" : "Fetch the current `User`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14143,6 +22808,17 @@ "summary" : "GET /api/user/recipients", "description" : "Fetch a list of `Users`. Returns only active users. Meant for non-admins unlike GET /api/user.\n\n - If user-visibility is :all or the user is an admin, include all users.\n - If user-visibility is :group, include only users in the same group (excluding the all users group).\n - If user-visibility is :none or the user is sandboxed, include only themselves.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14160,6 +22836,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] }, "put" : { @@ -14175,6 +22862,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -14235,6 +22933,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14252,6 +22961,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14269,6 +22989,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "requestBody" : { "content" : { "application/json" : { @@ -14302,6 +23033,17 @@ }, "description" : "value must be an integer greater than zero." } ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/user" ] } }, @@ -14310,6 +23052,17 @@ "summary" : "GET /api/util/random_token", "description" : "Return a cryptographically secure random 32-byte token, encoded as a hexadecimal string.\n Intended for use when creating a value for `embedding-secret-key`.", "parameters" : [ ], + "responses" : { + "2XX" : { + "description" : "Successful response" + }, + "4XX" : { + "description" : "Client error response" + }, + "5XX" : { + "description" : "Server error response" + } + }, "tags" : [ "/api/util" ] } } diff --git a/_site/docs/master/configuring-metabase/appearance.html b/_site/docs/master/configuring-metabase/appearance.html index e7c10b1a90..ece8bd1ba5 100644 --- a/_site/docs/master/configuring-metabase/appearance.html +++ b/_site/docs/master/configuring-metabase/appearance.html @@ -4895,7 +4895,7 @@

      Further reading

      @@ -5113,12 +5113,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5132,6 +5126,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5148,24 +5143,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/caching.html b/_site/docs/master/configuring-metabase/caching.html index b89d763036..9f68944703 100644 --- a/_site/docs/master/configuring-metabase/caching.html +++ b/_site/docs/master/configuring-metabase/caching.html @@ -5190,12 +5190,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5209,6 +5203,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5225,24 +5220,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/config-file.html b/_site/docs/master/configuring-metabase/config-file.html index e82e2892fe..15f46b0a5c 100644 --- a/_site/docs/master/configuring-metabase/config-file.html +++ b/_site/docs/master/configuring-metabase/config-file.html @@ -5211,12 +5211,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5230,6 +5224,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5246,24 +5241,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/config-template.html b/_site/docs/master/configuring-metabase/config-template.html index a69023d2bb..e1e7bf0840 100644 --- a/_site/docs/master/configuring-metabase/config-template.html +++ b/_site/docs/master/configuring-metabase/config-template.html @@ -5171,12 +5171,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5190,6 +5184,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5206,24 +5201,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/custom-maps.html b/_site/docs/master/configuring-metabase/custom-maps.html index f5f77b44f1..c382ccb230 100644 --- a/_site/docs/master/configuring-metabase/custom-maps.html +++ b/_site/docs/master/configuring-metabase/custom-maps.html @@ -4972,12 +4972,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -4991,6 +4985,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5007,24 +5002,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/customizing-jetty-webserver.html b/_site/docs/master/configuring-metabase/customizing-jetty-webserver.html index 75a4008845..868ea2b6a5 100644 --- a/_site/docs/master/configuring-metabase/customizing-jetty-webserver.html +++ b/_site/docs/master/configuring-metabase/customizing-jetty-webserver.html @@ -4948,12 +4948,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -4967,6 +4961,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -4983,24 +4978,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/email.html b/_site/docs/master/configuring-metabase/email.html index 1a1d7caad5..de888e66f9 100644 --- a/_site/docs/master/configuring-metabase/email.html +++ b/_site/docs/master/configuring-metabase/email.html @@ -5097,12 +5097,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5116,6 +5110,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5132,24 +5127,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/environment-variables.html b/_site/docs/master/configuring-metabase/environment-variables.html index 51fb5fcea1..65cee2aace 100644 --- a/_site/docs/master/configuring-metabase/environment-variables.html +++ b/_site/docs/master/configuring-metabase/environment-variables.html @@ -7665,12 +7665,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -7684,6 +7678,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -7700,24 +7695,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/fonts.html b/_site/docs/master/configuring-metabase/fonts.html index e4069949c4..3850c4fb54 100644 --- a/_site/docs/master/configuring-metabase/fonts.html +++ b/_site/docs/master/configuring-metabase/fonts.html @@ -5057,12 +5057,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5076,6 +5070,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5092,24 +5087,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/localization.html b/_site/docs/master/configuring-metabase/localization.html index a1f3fb0d36..13178fd447 100644 --- a/_site/docs/master/configuring-metabase/localization.html +++ b/_site/docs/master/configuring-metabase/localization.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4698,11 +4698,17 @@
      Other resources

      Languages and localization

      -

      The Localization settings allow you to set global defaults for your Metabase instance. You can find Localization under Admin settings > Settings.

      +

      Admins can update the localization settings for the instance:

      -

      Default language

      +
        +
      1. Click on the gear icon in the upper right.
      2. +
      3. Click Admin settings.
      4. +
      5. In the Settings tab, click on Localization in the left sidebar.
      6. +
      -

      Here you can set the default language (also called the “instance language”) across your Metabase UI, system emails, dashboard subscriptions, and alerts. People can pick a different language from their own account settings.

      +

      These localization settings allow you to set global language and formatting defaults for dates, times, numbers, and currencies.

      + +

      You can also override these localization options for specific fields or questions. For more info, see Formatting.

      Supported languages

      @@ -4865,7 +4871,9 @@

      Supported languages

      Translations

      -

      Our community contributes to Metabase translations on our Crowdin project. If you’d like to help make Metabase available in a language you’re fluent in, we’d love your help!

      +

      Our community contributes to Metabase translations on our Crowdin project.

      + +

      If you’d like to help make Metabase available in a language you’re fluent in, we’d love your help!

      For a new language to be added to Metabase, it must reach 100%. Once it does, we add it in the next major or minor release of Metabase. All existing languages in Metabase must stay at 100% to continue being included in the next major version of Metabase. This rule ensures that no one encounters a confusing mishmash of English and another language when using Metabase.

      @@ -4873,7 +4881,21 @@

      Translations

      Note that while we only remove languages in major releases, we are happy to add them back for minor releases, so it’s always a good time to jump in and start translating.

      -

      Report timezone

      +

      Contributing to translations for Metabase

      + +

      If you’d like to help make Metabase available in a language you’re fluent in, we’d love your help! Check out our Crowdin project.

      + +

      Instance settings

      + +

      Instance language

      + +

      Here you can set the default language (also called the “instance language”) across your Metabase UI, system emails, dashboard subscriptions, and alerts.

      + +

      People can override these settings in their personal account settings.

      + +

      Some translations are created by the Metabase community, and might not be perfect.

      + +

      Report timezone

      Use report timezone to set a default display time zone for dates and times in Metabase. The report timezone setting is a display setting only, so changing the report timezone won’t affect the time zone of any data in your database.

      @@ -4923,37 +4945,35 @@

      Report timezone

    • Vertica
    • -

      First day of the week

      - -

      If you need to, you can change the first day of the week for your instance (the default is Sunday). Setting the first day of the week affects things like grouping by week and filtering in questions built using the query builder. This setting doesn’t affect SQL queries.

      +

      First day of the week

      -

      Localization options

      +

      If you need to, you can change the first day of the week for your instance (the default is Sunday).

      -

      Localization options allow you to set global default display formats for dates, times, numbers, and currencies.

      +

      Setting the first day of the week affects how the query builder filters or groups by week. People can, however, use the week function to override this default when filtering or grouping by week of year. See using a different first week of the year.

      -

      You can also override these localization options for specific fields or questions. For more info, see Formatting.

      +

      This setting doesn’t affect SQL queries.

      -

      Dates and times

      +

      Dates and times

      • Date style: the way dates should be displayed in tables, axis labels, and tooltips.
      • -
      • Date separators: you can choose between slashes (2022/12/14), dashes (2022-12-14), and dots (2022.12.14.).
      • +
      • Date separators: you can choose between slashes (2022/12/14), dashes (2022-12-14), and dots (2022.12.14).
      • Abbreviate names of days and months: whenever a date is displayed with the day of the week and/or the month written out, turning this setting on will display e.g. “January” as “Jan” or “Monday” as “Mon”.
      • Time style: choose to display the time using either a 12 or 24-hour clock (e.g., 3:00 PM or 15:00).
      -

      Numbers

      +

      Numbers

      • Separator style: some people use commas to separate thousands places, and others use periods. Here’s where you can indicate which camp you belong to.
      -

      Currency

      +

      Currency

      • Unit of currency: if you do most of your business in a particular currency, you can specify that here.
      • Currency label style: whether you want to have your currencies labeled with a symbol, a code (like “USD”), or its full name.
      • -
      • Where to display the unit of currency: this pertains specifically to tables, and lets you choose if you want the currency labels to appear only in the column heading, or next to each value in the column.
      • +
      • Where to display the unit of currency: this pertains specifically to tables, and lets you choose whether you want the currency labels to appear only in the column heading, or next to each value in the column.
      @@ -5171,12 +5191,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5190,6 +5204,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5206,24 +5221,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/log-configuration.html b/_site/docs/master/configuring-metabase/log-configuration.html index a3e13bdd74..de5f10de89 100644 --- a/_site/docs/master/configuring-metabase/log-configuration.html +++ b/_site/docs/master/configuring-metabase/log-configuration.html @@ -5020,12 +5020,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5039,6 +5033,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5055,24 +5050,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/setting-up-metabase.html b/_site/docs/master/configuring-metabase/setting-up-metabase.html index c29a929fe0..029a0a2b86 100644 --- a/_site/docs/master/configuring-metabase/setting-up-metabase.html +++ b/_site/docs/master/configuring-metabase/setting-up-metabase.html @@ -4730,7 +4730,7 @@

      What will you use Metabase for?

      Gathering your database info

      -

      At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click I’ll add my data later. Metabase comes with a Sample Database that you can play around with to get a feel for how Metabase works.

      +

      At this point you’ll need to gather some information about the database you want to use with Metabase. We won’t be able to connect to your database without it, but you’d like to deal with all of this later, that’s okay: just click I’ll add my data later. Metabase comes with a Sample Database that you can play around with to get a feel for how Metabase works.

      If you’re ready to connect, here’s what you’ll need:

      @@ -5003,12 +5003,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5022,6 +5016,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5038,24 +5033,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/settings.html b/_site/docs/master/configuring-metabase/settings.html index 14383a2cd1..331e058ae2 100644 --- a/_site/docs/master/configuring-metabase/settings.html +++ b/_site/docs/master/configuring-metabase/settings.html @@ -4984,12 +4984,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5003,6 +4997,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5019,24 +5014,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/slack.html b/_site/docs/master/configuring-metabase/slack.html index c0305c94b6..ef6040a158 100644 --- a/_site/docs/master/configuring-metabase/slack.html +++ b/_site/docs/master/configuring-metabase/slack.html @@ -5008,12 +5008,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5027,6 +5021,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5043,24 +5038,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/start.html b/_site/docs/master/configuring-metabase/start.html index 7ef47462b2..07053a4d29 100644 --- a/_site/docs/master/configuring-metabase/start.html +++ b/_site/docs/master/configuring-metabase/start.html @@ -4973,12 +4973,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -4992,6 +4986,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5008,24 +5003,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/timezones.html b/_site/docs/master/configuring-metabase/timezones.html index 0f0c436491..5308e050e3 100644 --- a/_site/docs/master/configuring-metabase/timezones.html +++ b/_site/docs/master/configuring-metabase/timezones.html @@ -4985,12 +4985,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5004,6 +4998,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5020,24 +5015,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/configuring-metabase/webhooks.html b/_site/docs/master/configuring-metabase/webhooks.html index b1475014d9..d97290d3e3 100644 --- a/_site/docs/master/configuring-metabase/webhooks.html +++ b/_site/docs/master/configuring-metabase/webhooks.html @@ -5033,12 +5033,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5052,6 +5046,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5068,24 +5063,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/dashboards/actions.html b/_site/docs/master/dashboards/actions.html index 4e65b54c65..efc4aa3183 100644 --- a/_site/docs/master/dashboards/actions.html +++ b/_site/docs/master/dashboards/actions.html @@ -4975,12 +4975,6 @@
      Resources
      Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -4994,6 +4988,7 @@
      Resources
      Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5010,24 +5005,21 @@
      Resources
      SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/dashboards/filters.html b/_site/docs/master/dashboards/filters.html index feac5f5e10..454e60e271 100644 --- a/_site/docs/master/dashboards/filters.html +++ b/_site/docs/master/dashboards/filters.html @@ -49,7 +49,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -4700,32 +4700,15 @@

      Dashboard filters and parameters

      Dashboard Filters

      -

      Have you ever found yourself in a situation where it seems like you need to create nearly identical copies of the same dashboard, with just one different variable? Maybe you have an Earnings dashboard, but you want to see the data for each city your business is in, or maybe you have a KPI dashboard that you want to see broken out by month.

      +

      Instead of creating duplicate dashboards to show different cuts of the same data (like a different dashboard for each quarter), you can add filter or parameter widgets to let people change what data is displayed (filter the data), or how its displayed (parameterize the data).

      -

      Instead of creating duplicate dashboards, you can add filter or parameter widgets to let people change variables for cards on a dashboard.

      +

      Filter and parameter widgets

      -

      Adding a filter or parameter

      - -

      Add a Filter

      - - - -

      Metabase will display the filter only if the filter is connected to a card on the current dashboard tab.

      - -

      Filter and parameter types

      - -

      The type of filter or parameter widget you choose determines how the widget works, including which fields you’ll be able to filter your cards by.

      +

      There are two basic types of widgets you can add. The type of filter or parameter widget you choose determines how the widget works, including which fields you’ll can connect to the widget.

      Filter widgets

      -

      Filters determine what data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories.

      +

      Filters determine what data to show. For example, a date filter might show only data from the last 30 days, or a category filter might show only specific product categories.

      -
    • OptionaldataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      +
    • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

    • OptionaldrillThroughQuestionHeight?: Height<string | number>

      Height of a question component when drilled from the dashboard to a question level.

    • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

      Props of a question component when drilled from the dashboard to a question level.

    • OptionalhiddenParameters?: string[]

      A list of parameters to hide. diff --git a/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html b/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html index 277bc8a0f7..29fa42c275 100644 --- a/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html +++ b/_site/docs/master/embedding/sdk/api/EditableDashboardProps.html @@ -23,7 +23,7 @@ -

      Interface EditableDashboardProps

      interface EditableDashboardProps {
          className?: string;
          dashboardId: SdkDashboardId;
          dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">;
          drillThroughQuestionHeight?: Height<string | number>;
          drillThroughQuestionProps?: DrillThroughQuestionProps;
          hiddenParameters?: string[];
          initialParameters?: ParameterValues;
          onLoad?: (dashboard: null | MetabaseDashboard) => void;
          onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
          plugins?: MetabasePluginsConfig;
          renderDrillThroughQuestion?: () => ReactNode;
          style?: CSSProperties;
          withCardTitle?: boolean;
          withDownloads?: boolean;
          withTitle?: boolean;
      }
      Index

      Properties

      className? +

      Interface EditableDashboardProps

      interface EditableDashboardProps {
          className?: string;
          dashboardId: SdkDashboardId;
          dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">;
          drillThroughQuestionHeight?: Height<string | number>;
          drillThroughQuestionProps?: DrillThroughQuestionProps;
          hiddenParameters?: string[];
          initialParameters?: ParameterValues;
          onLoad?: (dashboard: null | MetabaseDashboard) => void;
          onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
          plugins?: MetabasePluginsConfig;
          renderDrillThroughQuestion?: () => ReactNode;
          style?: CSSProperties;
          withCardTitle?: boolean;
          withDownloads?: boolean;
          withTitle?: boolean;
      }
      Index
    • the string ID found in the entity_id key of the dashboard object when using the API directly or using the SDK Collection Browser to return data
    • -
      dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      +
      dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      drillThroughQuestionHeight?: Height<string | number>

      Height of a question component when drilled from the dashboard to a question level.

      drillThroughQuestionProps?: DrillThroughQuestionProps

      Props of a question component when drilled from the dashboard to a question level.

      Type declaration

      Props for the drill-through question

      diff --git a/_site/docs/master/embedding/sdk/api/IconName.html b/_site/docs/master/embedding/sdk/api/IconName.html index 091b524b08..b60ab90ca4 100644 --- a/_site/docs/master/embedding/sdk/api/IconName.html +++ b/_site/docs/master/embedding/sdk/api/IconName.html @@ -23,6 +23,6 @@ -

      Type Alias IconName

      IconName:
          | "string"
          | "number"
          | "function"
          | "model"
          | "table"
          | "question"
          | "collection"
          | "dashboard"
          | "add"
          | "add_column"
          | "add_data"
          | "add_folder"
          | "add_row"
          | "add_to_dash"
          | "ai"
          | "alert"
          | "alert_filled"
          | "alert_confirm"
          | "archive"
          | "area"
          | "attachment"
          | "arrow_up"
          | "arrow_down"
          | "arrow_left"
          | "arrow_left_to_line"
          | "arrow_right"
          | "arrow_split"
          | "audit"
          | "badge"
          | "bar"
          | "bell"
          | "birthday"
          | "bookmark"
          | "bookmark_filled"
          | "bolt"
          | "bolt_filled"
          | "breakout"
          | "bubble"
          | "burger"
          | "calendar"
          | "check"
          | "check_filled"
          | "chevrondown"
          | "chevronleft"
          | "chevronright"
          | "chevronup"
          | "click"
          | "clipboard"
          | "clock"
          | "clone"
          | "close"
          | "cloud"
          | "cloud_filled"
          | "compare"
          | "combine"
          | "connections"
          | "contract"
          | "copy"
          | "curved"
          | "database"
          | "dash"
          | "curve"
          | "document"
          | "download"
          | "dyno"
          | "edit_document"
          | "ellipsis"
          | "embed"
          | "empty"
          | "enter_or_return"
          | "expand"
          | "expand_arrow"
          | "extract"
          | "eye"
          | "eye_crossed_out"
          | "eye_outline"
          | "field"
          | "fields"
          | "filter"
          | "filter_plus"
          | "bug"
          | "format_code"
          | "formula"
          | "funnel"
          | "funnel_outline"
          | "folder"
          | "folder_filled"
          | "gauge"
          | "gear"
          | "gear_settings_filled"
          | "gem"
          | "globe"
          | "grabber"
          | "grid"
          | "group"
          | "google"
          | "google_drive"
          | "google_sheet"
          | "history"
          | "home"
          | "horizontal_bar"
          | "hourglass"
          | "info"
          | "info_filled"
          | "info_outline"
          | "insight"
          | "int"
          | "io"
          | "join_full_outer"
          | "join_inner"
          | "join_left_outer"
          | "join_right_outer"
          | "index"
          | "key"
          | "label"
          | "ldap"
          | "learn"
          | "lightbulb"
          | "link"
          | "line"
          | "lines"
          | "lineandbar"
          | "line_style_dashed"
          | "line_style_dotted"
          | "line_style_solid"
          | "list"
          | "location"
          | "lock"
          | "lock_filled"
          | "mail"
          | "mail_filled"
          | "metabot"
          | "metabot_sad"
          | "metric"
          | "model_with_badge"
          | "moon"
          | "move"
          | "move_card"
          | "new_folder"
          | "notebook"
          | "palette"
          | "pause"
          | "pencil"
          | "pencil_lines"
          | "permissions_limited"
          | "person"
          | "pie"
          | "pin"
          | "pinmap"
          | "pivot_table"
          | "play"
          | "play_outlined"
          | "popover"
          | "popular"
          | "progress"
          | "pulse"
          | "recents"
          | "revert"
          | "sankey"
          | "share"
          | "split"
          | "sql"
          | "subscription"
          | "straight"
          | "stepped"
          | "sort"
          | "sort_arrows"
          | "sum"
          | "sync"
          | "redo"
          | "return"
          | "reference"
          | "refresh"
          | "refresh_downstream"
          | "rocket"
          | "ruler"
          | "schema"
          | "search"
          | "section"
          | "segment"
          | "shield"
          | "sidebar_closed"
          | "sidebar_open"
          | "slack"
          | "slack_colorized"
          | "smartscalar"
          | "snail"
          | "snippet"
          | "sparkles"
          | "star_filled"
          | "star"
          | "stop"
          | "store"
          | "sun"
          | "t-shirt"
          | "tab"
          | "table2"
          | "time_history"
          | "trash"
          | "trash_filled"
          | "triangle_left"
          | "triangle_right"
          | "unarchive"
          | "undo"
          | "unknown"
          | "unpin"
          | "unsubscribe"
          | "upload"
          | "variable"
          | "verified"
          | "official_collection"
          | "verified_filled"
          | "view_archive"
          | "warning"
          | "warning_round_filled"
          | "warning_triangle_filled"
          | "waterfall"
          | "webhook"
          | "10k"
          | "1m"
          | "zoom_in"
          | "zoom_out"
          | "scalar"
          | "cake"
          | "external"
          | "table_spaced"
          | "beaker"
          | "eye_filled"

      +

      Type Alias IconName

      IconName:
          | "string"
          | "number"
          | "function"
          | "model"
          | "table"
          | "question"
          | "collection"
          | "dashboard"
          | "revert"
          | "add"
          | "add_column"
          | "add_data"
          | "add_folder"
          | "add_row"
          | "add_to_dash"
          | "ai"
          | "alert"
          | "alert_filled"
          | "alert_confirm"
          | "archive"
          | "area"
          | "attachment"
          | "arrow_up"
          | "arrow_down"
          | "arrow_left"
          | "arrow_left_to_line"
          | "arrow_right"
          | "arrow_split"
          | "audit"
          | "badge"
          | "bar"
          | "bell"
          | "birthday"
          | "bookmark"
          | "bookmark_filled"
          | "bolt"
          | "bolt_filled"
          | "breakout"
          | "bubble"
          | "burger"
          | "calendar"
          | "check"
          | "check_filled"
          | "chevrondown"
          | "chevronleft"
          | "chevronright"
          | "chevronup"
          | "click"
          | "clipboard"
          | "clock"
          | "clone"
          | "close"
          | "cloud"
          | "cloud_filled"
          | "compare"
          | "combine"
          | "connections"
          | "contract"
          | "copy"
          | "curved"
          | "database"
          | "dash"
          | "curve"
          | "document"
          | "download"
          | "dyno"
          | "edit_document"
          | "ellipsis"
          | "embed"
          | "empty"
          | "enter_or_return"
          | "expand"
          | "expand_arrow"
          | "extract"
          | "eye"
          | "eye_crossed_out"
          | "eye_outline"
          | "field"
          | "fields"
          | "filter"
          | "filter_plus"
          | "bug"
          | "format_code"
          | "formula"
          | "funnel"
          | "funnel_outline"
          | "folder"
          | "folder_filled"
          | "gauge"
          | "gear"
          | "gear_settings_filled"
          | "gem"
          | "globe"
          | "grabber"
          | "grid"
          | "group"
          | "google"
          | "google_drive"
          | "google_sheet"
          | "history"
          | "home"
          | "horizontal_bar"
          | "hourglass"
          | "info"
          | "info_filled"
          | "info_outline"
          | "insight"
          | "int"
          | "io"
          | "join_full_outer"
          | "join_inner"
          | "join_left_outer"
          | "join_right_outer"
          | "index"
          | "key"
          | "label"
          | "ldap"
          | "learn"
          | "lightbulb"
          | "link"
          | "line"
          | "lines"
          | "lineandbar"
          | "line_style_dashed"
          | "line_style_dotted"
          | "line_style_solid"
          | "list"
          | "location"
          | "lock"
          | "lock_filled"
          | "mail"
          | "mail_filled"
          | "metabot"
          | "metabot_sad"
          | "metric"
          | "model_with_badge"
          | "moon"
          | "move"
          | "move_card"
          | "new_folder"
          | "notebook"
          | "palette"
          | "pause"
          | "pencil"
          | "pencil_lines"
          | "permissions_limited"
          | "person"
          | "pie"
          | "pin"
          | "pinmap"
          | "pivot_table"
          | "play"
          | "play_outlined"
          | "popover"
          | "popular"
          | "progress"
          | "pulse"
          | "recents"
          | "sankey"
          | "share"
          | "split"
          | "sql"
          | "subscription"
          | "straight"
          | "stepped"
          | "sort"
          | "sort_arrows"
          | "sum"
          | "sync"
          | "redo"
          | "return"
          | "reference"
          | "refresh"
          | "refresh_downstream"
          | "rocket"
          | "ruler"
          | "schema"
          | "search"
          | "section"
          | "segment"
          | "shield"
          | "sidebar_closed"
          | "sidebar_open"
          | "slack"
          | "slack_colorized"
          | "smartscalar"
          | "snail"
          | "snippet"
          | "sparkles"
          | "star_filled"
          | "star"
          | "stop"
          | "store"
          | "sun"
          | "t-shirt"
          | "tab"
          | "table2"
          | "time_history"
          | "trash"
          | "trash_filled"
          | "triangle_left"
          | "triangle_right"
          | "unarchive"
          | "undo"
          | "unknown"
          | "unpin"
          | "unsubscribe"
          | "upload"
          | "variable"
          | "verified"
          | "official_collection"
          | "verified_filled"
          | "view_archive"
          | "warning"
          | "warning_round_filled"
          | "warning_triangle_filled"
          | "waterfall"
          | "webhook"
          | "10k"
          | "1m"
          | "zoom_in"
          | "zoom_out"
          | "scalar"
          | "cake"
          | "external"
          | "table_spaced"
          | "beaker"
          | "eye_filled"

      \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html index f902519d01..a9fe0e6fca 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -23,8 +23,8 @@ -

      Function InteractiveDashboard

      dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      +
      dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

      drillThroughQuestionHeight?: Height<string | number>

      Height of a question component when drilled from the dashboard to a question level.

      drillThroughQuestionProps?: DrillThroughQuestionProps

      Props of a question component when drilled from the dashboard to a question level.

      Type declaration

      Props for the drill-through question

      diff --git a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html b/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html deleted file mode 100644 index 4ba3fbfa50..0000000000 --- a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html +++ /dev/null @@ -1,147 +0,0 @@ -InteractiveQuestion | Embedded analytics SDK API - - - - - - - - - - - - - - - - - - - - - - - - -

      Function InteractiveQuestion

      • A component that renders an interactive question.

        -

        Parameters

        • props: InteractiveQuestionProps
          • Optionalchildren?: ReactNode

            The children of the MetabaseProvider component.s

            -
          • OptionalclassName?: string

            A custom class name to be added to the root element.

            -
          • OptionalentityTypes?: EmbeddingEntityType[]

            An array that specifies which entity types are available in the data picker

            -
          • Optionalheight?: Height<string | number>

            A number or string specifying a CSS size value that specifies the height of the component

            -
          • OptionalinitialSqlParameters?: SqlParameterValues

            Initial values for the SQL parameters.

            -
          • OptionalisSaveEnabled?: boolean

            Whether to show the save button.

            -
          • OptionalonBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>

            A callback function that triggers before saving. Only relevant when isSaveEnabled = true

            -
          • OptionalonRun?: (question: undefined | MetabaseQuestion) => void

            A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

            -
          • OptionalonSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void

            A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

            -
          • Optionalplugins?: MetabasePluginsConfig
          • questionId: null | SdkQuestionId

            The ID of the question. -
            -This is either: -

            -
              -
            • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
            • -
            • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
            • -
            • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
            • -
            -
          • Optionalstyle?: CSSProperties

            A custom style object to be added to the root element.

            -
          • OptionaltargetCollection?: SdkCollectionId

            The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

            -
          • Optionaltitle?: SdkQuestionTitleProps

            Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

            -
          • Optionalwidth?: Width<string | number>

            A number or string specifying a CSS size value that specifies the width of the component

            -
          • OptionalwithChartTypeSelector?: boolean

            Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

            -
          • OptionalwithDownloads?: boolean

            Enables the ability to download results in the interactive question.

            -
          • OptionalwithResetButton?: boolean

            Determines whether a reset button is displayed. Only relevant when using the default layout.

            -

        Returns null | Element

      Index

      InteractiveQuestion

      BackButton: (props: InteractiveQuestionBackButtonProps) => null | Element

      Type declaration

      Breakout: () => null | Element

      Type declaration

        • (): null | Element
        • Function

          A set of badges for managing data groupings (breakouts). -Uses question context for breakout functionality.

          -

          Returns null | Element

      BreakoutDropdown: (
          props: InteractiveQuestionBreakoutDropdownProps,
      ) => null | Element

      Type declaration

      ChartTypeDropdown: (props: MenuProps) => Element

      Type declaration

        • (props: MenuProps): Element
        • Function

          Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). -Automatically updates to show recommended visualization types for the current data.

          -

          Parameters

          Returns Element

      ChartTypeSelector: (props: StackProps) => Element

      Type declaration

      DownloadWidget: (props: StackProps) => null | Element

      Type declaration

        • (props: StackProps): null | Element
        • Function

          Provides a UI widget for downloading data in different formats (CSV, XLSX, JSON, and PNG depending on the visualization).

          -

          Parameters

          Returns null | Element

      DownloadWidgetDropdown: (props: PopoverProps) => Element

      Type declaration

      Editor: (props: InteractiveQuestionEditorProps) => undefined | Element

      Type declaration

        • (props: InteractiveQuestionEditorProps): undefined | Element
        • Function

          Advanced query editor that provides full access to question configuration. -Includes filtering, aggregation, custom expressions, and joins.

          -

          Parameters

          • props: InteractiveQuestionEditorProps
            • OptionalhasVisualizeButton?: boolean
            • OptionalonApply?: () => void

              Callback function executed when changes are applied

              -

          Returns undefined | Element

      EditorButton: (
          props: InteractiveQuestionEditorButtonProps,
      ) => undefined | false | Element

      Type declaration

      Type declaration

      FilterDropdown: (
          props: InteractiveQuestionFilterDropdownProps,
      ) => null | Element

      Type declaration

      Notebook: (props: InteractiveQuestionEditorProps) => undefined | Element

      Type declaration

        • (props: InteractiveQuestionEditorProps): undefined | Element
        • Function

          Advanced query editor that provides full access to question configuration. -Includes filtering, aggregation, custom expressions, and joins.

          -

          Parameters

          • props: InteractiveQuestionEditorProps
            • OptionalhasVisualizeButton?: boolean
            • OptionalonApply?: () => void

              Callback function executed when changes are applied

              -

          Returns undefined | Element

      Use InteractiveQuestion.Editor instead

      -
      NotebookButton: (
          props: InteractiveQuestionEditorButtonProps,
      ) => undefined | false | Element

      Type declaration

      Use InteractiveQuestion.EditorButton instead

      -
      QuestionSettings: (props: StackProps) => null | Element

      Type declaration

        • (props: StackProps): null | Element
        • Function

          Settings panel for configuring visualization options like axes, colors, and formatting. -Uses question context for settings.

          -

          Parameters

          Returns null | Element

      QuestionSettingsDropdown: (
          props?: InteractiveQuestionQuestionSettingsDropdownProps,
      ) => Element

      Type declaration

      QuestionVisualization: (
          props: { className?: string; style?: CSSProperties } & {
              height?: Height<string | number>;
              width?: Width<string | number>;
          } & {},
      ) => Element

      Type declaration

        • (
              props: { className?: string; style?: CSSProperties } & {
                  height?: Height<string | number>;
                  width?: Width<string | number>;
              } & {},
          ): Element
        • Function

          The main visualization component that renders the question results as a chart, table, or other visualization type.

          -

          Parameters

          • props: { className?: string; style?: CSSProperties } & {
                height?: Height<string | number>;
                width?: Width<string | number>;
            } & {}
            • OptionalclassName?: string

              A custom class name to be added to the root element.

              -
            • Optionalstyle?: CSSProperties

              A custom style object to be added to the root element.

              -
            • Optionalheight?: Height<string | number>

              A number or string specifying a CSS size value that specifies the height of the component

              -
            • Optionalwidth?: Width<string | number>

              A number or string specifying a CSS size value that specifies the width of the component

              -

            Returns Element

        ResetButton: (props?: ButtonProps) => null | Element

        Type declaration

          • (props?: ButtonProps): null | Element
          • Function

            Button to reset question modifications. Only appears when there are unsaved changes to the question.

            -

            Parameters

            Returns null | Element

        Type declaration

        SaveQuestionForm: (
            props: InteractiveQuestionSaveQuestionFormProps,
        ) => null | Element

        Type declaration

        Summarize: () => Element

        Type declaration

          • (): Element
          • Function

            Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. -Uses question context for summarization functionality.

            -

            Returns Element

        SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => Element

        Type declaration

        Title: (
            props: { className?: string; style?: CSSProperties },
        ) => undefined | Element

        Type declaration

          • (props: { className?: string; style?: CSSProperties }): undefined | Element
          • Function

            Displays a title based on the question's state. Shows:

            -
              -
            • The question's display name if it's saved
            • -
            • An auto-generated description for ad-hoc questions (non-native queries)
            • -
            • "New question" as fallback or for new/native queries
            • -
            -

            Parameters

            • props: { className?: string; style?: CSSProperties }
              • OptionalclassName?: string

                A custom class name to be added to the root element.

                -
              • Optionalstyle?: CSSProperties

                A custom style object to be added to the root element.

                -

            Returns undefined | Element

        other

        VisualizationButton: () => null | Element

        - - \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html b/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html index 57cf9c4172..b800d2aec1 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveQuestionProps.html @@ -23,13 +23,14 @@ -

        Interface InteractiveQuestionProps

        interface InteractiveQuestionProps {
            children?: ReactNode;
            className?: string;
            entityTypes?: EmbeddingEntityType[];
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            targetCollection?: SdkCollectionId;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
            withResetButton?: boolean;
        }
        Index

        Properties

        children? -className? +

        Interface InteractiveQuestionProps

        interface InteractiveQuestionProps {
            className?: string;
            componentPlugins?: MetabasePluginsConfig;
            entityTypes?: EmbeddingEntityType[];
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onNavigateBack?: () => void;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            targetCollection?: SdkCollectionId;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
            withResetButton?: boolean;
        }
        Index

        Properties

        children?: ReactNode

        The children of the MetabaseProvider component.s

        -
        className?: string

        A custom class name to be added to the root element.

        +

        Properties

        className?: string

        A custom class name to be added to the root element.

        +
        componentPlugins?: MetabasePluginsConfig

        Additional mapper function to override or add drill-down menu

        entityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        height?: Height<string | number>

        A number or string specifying a CSS size value that specifies the height of the component

        initialSqlParameters?: SqlParameterValues

        Initial values for the SQL parameters.

        isSaveEnabled?: boolean

        Whether to show the save button.

        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

        +
        onNavigateBack?: () => void

        A callback function that triggers when a user clicks the back button.

        onRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        -
        questionId: null | SdkQuestionId

        The ID of the question. -
        -This is either: -

        -
          -
        • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
        • -
        • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
        • -
        • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
        • -
        -

        A custom style object to be added to the root element.

        +
        questionId: null | SdkQuestionId

        A custom style object to be added to the root element.

        targetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        width?: Width<string | number>

        A number or string specifying a CSS size value that specifies the width of the component

        withChartTypeSelector?: boolean

        Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

        withDownloads?: boolean

        Enables the ability to download results in the interactive question.

        withResetButton?: boolean

        Determines whether a reset button is displayed. Only relevant when using the default layout.

        -

        +

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/SdkQuestionProps.html b/_site/docs/master/embedding/sdk/api/SdkQuestionProps.html new file mode 100644 index 0000000000..1f5a43e9ab --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/SdkQuestionProps.html @@ -0,0 +1,64 @@ +SdkQuestionProps | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

        Interface SdkQuestionProps

        interface SdkQuestionProps {
            className?: string;
            componentPlugins?: MetabasePluginsConfig;
            entityTypes?: EmbeddingEntityType[];
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            isSaveEnabled?: boolean;
            onBeforeSave?: (
                question: undefined | MetabaseQuestion,
                context: { isNewQuestion: boolean },
            ) => Promise<void>;
            onNavigateBack?: () => void;
            onRun?: (question: undefined | MetabaseQuestion) => void;
            onSave?: (
                question: MetabaseQuestion,
                context: { dashboardTabId?: number; isNewQuestion: boolean },
            ) => void;
            plugins?: MetabasePluginsConfig;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            targetCollection?: SdkCollectionId;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
            withResetButton?: boolean;
        }
        Index

        Properties

        className?: string

        A custom class name to be added to the root element.

        +
        componentPlugins?: MetabasePluginsConfig

        Additional mapper function to override or add drill-down menu

        +
        entityTypes?: EmbeddingEntityType[]

        An array that specifies which entity types are available in the data picker

        +
        height?: Height<string | number>

        A number or string specifying a CSS size value that specifies the height of the component

        +
        initialSqlParameters?: SqlParameterValues

        Initial values for the SQL parameters.

        +
        isSaveEnabled?: boolean

        Whether to show the save button.

        +
        onBeforeSave?: (
            question: undefined | MetabaseQuestion,
            context: { isNewQuestion: boolean },
        ) => Promise<void>

        A callback function that triggers before saving. Only relevant when isSaveEnabled = true

        +
        onNavigateBack?: () => void

        A callback function that triggers when a user clicks the back button.

        +
        onRun?: (question: undefined | MetabaseQuestion) => void

        A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

        +
        onSave?: (
            question: MetabaseQuestion,
            context: { dashboardTabId?: number; isNewQuestion: boolean },
        ) => void

        A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

        +
        questionId: null | SdkQuestionId

        A custom style object to be added to the root element.

        +
        targetCollection?: SdkCollectionId

        The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

        +

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        +
        width?: Width<string | number>

        A number or string specifying a CSS size value that specifies the width of the component

        +
        withChartTypeSelector?: boolean

        Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

        +
        withDownloads?: boolean

        Enables the ability to download results in the interactive question.

        +
        withResetButton?: boolean

        Determines whether a reset button is displayed. Only relevant when using the default layout.

        +

        + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticDashboard.html b/_site/docs/master/embedding/sdk/api/StaticDashboard.html index 76929144aa..3a427a3fc1 100644 --- a/_site/docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_site/docs/master/embedding/sdk/api/StaticDashboard.html @@ -23,8 +23,8 @@ -

        Function StaticDashboard

        dataPickerProps?: Pick<InteractiveQuestionProps, "entityTypes">

        Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

        +
        dataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

        Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

        drillThroughQuestionHeight?: Height<string | number>

        Height of a question component when drilled from the dashboard to a question level.

        drillThroughQuestionProps?: DrillThroughQuestionProps

        Props of a question component when drilled from the dashboard to a question level.

        Type declaration

        Props for the drill-through question

        diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestion.html b/_site/docs/master/embedding/sdk/api/StaticQuestion.html deleted file mode 100644 index 9fe7eebc5e..0000000000 --- a/_site/docs/master/embedding/sdk/api/StaticQuestion.html +++ /dev/null @@ -1,46 +0,0 @@ -StaticQuestion | Embedded analytics SDK API - - - - - - - - - - - - - - - - - - - - - - - - -

        Function StaticQuestion

        • A component that renders a static question.

          -

          Parameters

          • props: StaticQuestionProps
            • OptionalclassName?: string

              A custom class name to be added to the root element.

              -
            • Optionalheight?: Height<string | number>

              A number or string specifying a CSS size value that specifies the height of the component

              -
            • OptionalinitialSqlParameters?: SqlParameterValues

              Initial values for the SQL parameters.

              -
            • questionId: null | SdkQuestionId

              The ID of the question. -
              -This is either: -

              -
                -
              • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
              • -
              • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
              • -
              • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
              • -
              -
            • Optionalstyle?: CSSProperties

              A custom style object to be added to the root element.

              -
            • Optionalwidth?: Width<string | number>

              A number or string specifying a CSS size value that specifies the width of the component

              -
            • OptionalwithChartTypeSelector?: boolean
            • OptionalwithDownloads?: boolean

              Enables the ability to download results in the interactive question.

              -

          Returns ReactNode

        - - \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html b/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html index 5355f8d73b..45423dcfb7 100644 --- a/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html +++ b/_site/docs/master/embedding/sdk/api/StaticQuestionProps.html @@ -23,31 +23,23 @@ -

        Interface StaticQuestionProps

        interface StaticQuestionProps {
            className?: string;
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
        }
        Index

        Properties

        className? +

        Interface StaticQuestionProps

        interface StaticQuestionProps {
            className?: string;
            height?: Height<string | number>;
            initialSqlParameters?: SqlParameterValues;
            questionId: null | SdkQuestionId;
            style?: CSSProperties;
            title?: SdkQuestionTitleProps;
            width?: Width<string | number>;
            withChartTypeSelector?: boolean;
            withDownloads?: boolean;
        }
        Index

        Properties

        className?: string

        A custom class name to be added to the root element.

        height?: Height<string | number>

        A number or string specifying a CSS size value that specifies the height of the component

        initialSqlParameters?: SqlParameterValues

        Initial values for the SQL parameters.

        -
        questionId: null | SdkQuestionId

        The ID of the question. -
        -This is either: -

        -
          -
        • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
        • -
        • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
        • -
        • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
        • -
        -

        A custom style object to be added to the root element.

        +
        questionId: null | SdkQuestionId

        A custom style object to be added to the root element.

        +

        Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout.

        width?: Width<string | number>

        A number or string specifying a CSS size value that specifies the width of the component

        -
        withChartTypeSelector?: boolean
        withDownloads?: boolean

        Enables the ability to download results in the interactive question.

        -

        +
        withChartTypeSelector?: boolean

        Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

        +
        withDownloads?: boolean

        Enables the ability to download results in the interactive question.

        +

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/assets/navigation.js b/_site/docs/master/embedding/sdk/api/assets/navigation.js index ba4359a8d1..aa69cd7e02 100644 --- a/_site/docs/master/embedding/sdk/api/assets/navigation.js +++ b/_site/docs/master/embedding/sdk/api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJylWU1z2zYQ/S88ezpppkmmvtmyPI3jtK7lJIeMDxC5EVGBAAMsrTod//cMzZIigcUH6ZNm8N6+t1h8U1//yxD+xew0WykhIEeu5LlWBwM6O8nykotCg8xOvwZ5NcOSgn4psRLZSbbnsshO3/72dOKXudGqNgGtZ3wq+PrN26f7saYGhnDBTLlVTBcfVcGErxc0tTcn0FBfCLrdHR/F7ZFX9zMTDfg1Ozik1xiwYs5qftQjYafbbsH/bsC0AxUs9Yg0Sb9vt31OslwwY7LTrIBaQ84QisxrTVZ7AoZnztBjTx/WBUe2FTDm/e/lQIGJ4nCtvGk8NKTvJYJmOfIHKjcKDaRH0a0MvZRQkhtkyHMiPwsIpGYxrawoNDzgo35Epu+F5kLclVo1u9Iz3byUxJFz1wYBpo1bzz5n+f68QXRyjXOtpF/9/u7XN68jbhrYXjV4oVVdqEOKJxWxwHlVMo13jzWkW9MhL/HeQHtUKfsISw5Z4H2hDlIoVnzhxQ5m1D0Q9+Is5rovdW13SaVTZ7fDnrkou/hUnyUOl1wg6PQxJPgLqtippLotdYnrL6lY/7sBRC53Jr12wcgXZjHffWlV+9/P3DRM8B8srdT+sJk9vwUDmLoAbfJMrw17gFQri7ugsq3CMPOVrtI8nYi5fWyqimn+Y8YpRocs6PEdRwFxvyMtfLH6CMi2zLTUB154X5EFfOMSevJZg+VKyW98d8zBxwjcg0JyMSG3Vm7EF47lWc0/wGNI98ha5nB1wJj81QGXaW9YJWLiLSdVfTTKlmaPJAxXT7UmIQmHJ1/3Dohc6B3S5BGRcN2eEsmnyIynp8LSu0rOmYH4oRpihTYicledsX0+X2ZXSqjxJ6ChLRptf+C55qaNbCoZ+gw0YkUdGoOqGl6Fq/a7C8jmPUI1MvCTYvqToE7H1Q+QZum3QR7VFpqt1aWyFlCBxIDwhJfiQpfZRmJK62oLRcHlbi2R42P7ZBp9JnHBqN7A7O6zH+Bx/N2FQKNHaa7kn6wapdW3xCKv1Y7Ldp9oRimMGlM335Xg+f4sn+5iBLhA70Y0Oy6N7xD1MZOdhlVNaA/YfLXpnKPxGapKE8dR1x7aV4/MqlYSJN6VMJ4nNJ6aF/EZzYFma0XGm+aluyC7UVziX9t/ICcuNxYhVXfYBjZgTHtFVXsgJhRJS/W4BMzLW/jenqnPgZeEA0FK1lcSL1nFBXGlPGLJ17HwMC4aPfeiZCMpa8GzBKiZT8Z/MtQl85PzH5PbjxumWQUI2v77xAJiOptiP9pIxh+xp0CCzrCcLJlR+xyVa8WK9cPkGCfhBM3uILTS6htT4rVWetjXpioTaLaWfc0m8RTVthJ/MFkI0M5CofEE1X4pWJU7Ns/QoB7kJJyg2S4QK6euKRr7XXgXjovF1FrP9l8GkMXVAW/B1Eqa0XZA47Tq/dP9Ty1Guno=" \ No newline at end of file +window.navigationData = "eJylWV1z0zgU/S9+7uywzAKzfWvTZKCU3W5T4IHhQbEusTayZKTrhsLw3xknTWLLV1/mqR2dc8+Rrq71lU8/CoRvWJwXMy0llCi0ujR6a8EUZ0VZCckNqOL8U5DXMKwo6I8Ka1mcFRuheHH+8q+fZ36ZW6MbG9Da4UPB5y9e/vzc1zTAEK6YrVaaGf5OcyZ9o6CpB3MCDYylteBEXDTipEbCodQQ7m52fJRxgry6H5hswa+5h1MS/l8LtpuoYKp7pIHfod3Nx1lRSmZtcV5waAyUDIEXXmsyPQMwPJDjqD1jmHOBbCWhz3vyGkGBmX2jEAwrUTxQShQaEFsiQ1ESOg4QkBj13ckjjYdqjBqDI+qlhHSdMTmSFBqe8F4nIuV7ZYSU95XR7brylJuXkpipQ0yXbm0uW8SRRQp7kluqzxSHuPYU1cPfJSAKtbZXRjdcbxPcgpETe/FB2JZJ8Z2lDdgflul/BxYwtVRccqbXkp3+X2hTxw3JiEzXe4ES4lYnWnD94BtPVbpIZi8vWblJnQaH6zg9+/vVny+eR9wMsI1uMb3myYgJzrOKGbx/bCDdmg75He8ldGfClEWLDpngfaW3SmrGPwq+hoy8B+J+uxe57lNdF0IimPQxE/zJrqluU13cvSB/95jq3K2NqSuGw53i1tY1M+J7xndLh9De/TPVO0C2YrZbjB8E914gOXwRCg7kixarmVZfxPrUJx8jcJIlvJ/EXCRDxEkVCYe2i9AYY6MbT+444qPA6qIRb+ExpHtiTXO43mJM/nqL07SXrJYx8Y4TL779FSBylh+SyEtExqVRY+Ut8ktmwX/moNCUQpppqQ1Rkfv2FIXxNdxFUlTuK6hhLLFrDsWTy17G+rbb1XeD7d31j23RaPdJ6UbYLrKtVejhqceKOrQWdX28h866pxlQ7RuEumfgJ8X0B0F7nbF+gJSl3wV5VDsoW2vflbmEGhQGhAe8FBc6zS4SU5rXK+BcqPVcocDH7uzYewgZg1G9I3N/UHkLj/2XFQKN7u6lVv+w/od3aIlF3ui1UN361va60GtMXbxnUpSbi5JeQHrgBL1b2a6Fsr5t0sdMdjp+1eTq+YTlqw1rjsbTVetGK1DoWV6HeKoq8UA4grK1IrNF89JdkN1qofDf1f9QEocPh5Cqe/yIl2Bt93KgN0CUA0lL9VgAltUdfO02013ggnAgSMn6WuGC1UISR74TlqoWmcZJs/feUqfv96Nfg8YKt8ywGhCM+8uEA8R0lnzT+wD7D+NDIEHnWMiOTK89R+VGMz5/GGx/JJygud9AnG4dGlPijdHmuKIMVQZQttb4fY3AU1S7TLxmikswoxKl8QTVwzHXydypOUODeqEk4QTN7gNx+rRvisZ+ld4PZ4zF1DrP7pkSFL/e4h3YRivb24to3Hc9+/wLboObAg==" \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/assets/search.js b/_site/docs/master/embedding/sdk/api/assets/search.js index a91212dd5e..2a04bc2d93 100644 --- a/_site/docs/master/embedding/sdk/api/assets/search.js +++ b/_site/docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/index.html b/_site/docs/master/embedding/sdk/api/index.html index 33ef352033..486ef77299 100644 --- a/_site/docs/master/embedding/sdk/api/index.html +++ b/_site/docs/master/embedding/sdk/api/index.html @@ -23,6 +23,6 @@ -

        Embedded analytics SDK API

        CollectionBrowser

        CollectionBrowser
        CollectionBrowserProps

        CreateDashboardModal

        CreateDashboardModal
        CreateDashboardModalProps
        CreateDashboardValues
        useCreateDashboardApi

        CreateQuestion

        CreateQuestion
        CreateQuestionProps

        Dashboard

        EditableDashboard
        EditableDashboardProps
        InteractiveDashboard
        InteractiveDashboardProps
        StaticDashboard
        StaticDashboardProps

        InteractiveQuestion

        DrillThroughQuestionProps
        InteractiveQuestion
        InteractiveQuestionBackButtonProps
        InteractiveQuestionBreakoutDropdownProps
        InteractiveQuestionChartTypeDropdownProps
        InteractiveQuestionChartTypeSelectorProps
        InteractiveQuestionDownloadWidgetDropdownProps
        InteractiveQuestionDownloadWidgetProps
        InteractiveQuestionEditorButtonProps
        InteractiveQuestionEditorProps
        InteractiveQuestionFilterDropdownProps
        InteractiveQuestionFilterProps
        InteractiveQuestionProps
        InteractiveQuestionQuestionSettingsDropdownProps
        InteractiveQuestionQuestionSettingsProps
        InteractiveQuestionQuestionVisualizationProps
        InteractiveQuestionResetButtonProps
        InteractiveQuestionSaveButtonProps
        InteractiveQuestionSaveQuestionFormProps
        InteractiveQuestionSummarizeDropdownProps
        InteractiveQuestionTitleProps

        MetabaseProvider

        defineMetabaseAuthConfig
        MetabaseAuthConfig
        MetabaseAuthConfigWithApiKey
        MetabaseAuthConfigWithJwt
        MetabaseAuthConfigWithSaml
        MetabaseProvider
        MetabaseProviderProps

        StaticQuestion

        StaticQuestion
        StaticQuestionProps

        other

        BaseInteractiveQuestionProps
        ButtonProps
        ChartColor
        CollectionBrowserListColumns
        CustomDashboardCardMenuItem
        DashboardCardCustomMenuItem
        DashboardCardMenu
        DashboardCardMenuCustomElement
        DashCardMenuItem
        EmbeddingEntityType
        EntityTypeFilterKeys
        IconName
        LoginStatus
        MetabaseClickAction
        MetabaseClickActionPluginsConfig
        MetabaseCollection
        MetabaseCollectionItem
        MetabaseColors
        MetabaseComponentTheme
        MetabaseDashboard
        MetabaseDashboardPluginsConfig
        MetabaseDataPointObject
        MetabaseEmbeddingSessionToken
        MetabaseFetchRequestTokenFn
        MetabaseFontFamily
        MetabasePluginsConfig
        MetabaseQuestion
        MetabaseTheme
        MetabaseUser
        ParameterValues
        SdkCollectionId
        SdkDashboardId
        SdkDashboardLoadEvent
        SdkEntityId
        SdkErrorComponent
        SdkErrorComponentProps
        SdkEventHandlersConfig
        SdkQuestionId
        SdkQuestionTitleProps
        SdkUserId
        SqlParameterValues
        UserBackendJwtResponse

        +

        Embedded analytics SDK API

        CollectionBrowser

        CollectionBrowser
        CollectionBrowserProps

        CreateDashboardModal

        CreateDashboardModal
        useCreateDashboardApi
        CreateDashboardModalProps
        CreateDashboardValues

        CreateQuestion

        CreateQuestion
        CreateQuestionProps

        Dashboard

        EditableDashboard
        InteractiveDashboard
        StaticDashboard
        EditableDashboardProps
        InteractiveDashboardProps
        StaticDashboardProps

        InteractiveQuestion

        DrillThroughQuestionProps
        InteractiveQuestionEditorButtonProps
        InteractiveQuestionEditorProps
        InteractiveQuestionProps
        InteractiveQuestionQuestionSettingsDropdownProps
        InteractiveQuestionQuestionVisualizationProps
        InteractiveQuestionResetButtonProps
        InteractiveQuestionSaveQuestionFormProps
        InteractiveQuestionTitleProps
        SdkQuestionProps
        InteractiveQuestionBackButtonProps
        InteractiveQuestionBreakoutDropdownProps
        InteractiveQuestionChartTypeDropdownProps
        InteractiveQuestionChartTypeSelectorProps
        InteractiveQuestionDownloadWidgetDropdownProps
        InteractiveQuestionDownloadWidgetProps
        InteractiveQuestionFilterDropdownProps
        InteractiveQuestionFilterProps
        InteractiveQuestionQuestionSettingsProps
        InteractiveQuestionSaveButtonProps
        InteractiveQuestionSummarizeDropdownProps

        MetabaseProvider

        defineMetabaseAuthConfig
        MetabaseProvider
        MetabaseProviderProps
        MetabaseAuthConfig
        MetabaseAuthConfigWithApiKey
        MetabaseAuthConfigWithJwt
        MetabaseAuthConfigWithSaml

        StaticQuestion

        StaticQuestionProps

        other

        BaseSdkQuestionProps
        MetabaseColors
        MetabaseQuestion
        MetabaseTheme
        ButtonProps
        ChartColor
        CollectionBrowserListColumns
        CustomDashboardCardMenuItem
        DashboardCardCustomMenuItem
        DashboardCardMenu
        DashboardCardMenuCustomElement
        DashCardMenuItem
        EmbeddingEntityType
        EntityTypeFilterKeys
        IconName
        LoginStatus
        MetabaseClickAction
        MetabaseClickActionPluginsConfig
        MetabaseCollection
        MetabaseCollectionItem
        MetabaseComponentTheme
        MetabaseDashboard
        MetabaseDashboardPluginsConfig
        MetabaseDataPointObject
        MetabaseEmbeddingSessionToken
        MetabaseFetchRequestTokenFn
        MetabaseFontFamily
        MetabasePluginsConfig
        MetabaseUser
        ParameterValues
        SdkCollectionId
        SdkDashboardId
        SdkDashboardLoadEvent
        SdkEntityId
        SdkErrorComponent
        SdkErrorComponentProps
        SdkEventHandlersConfig
        SdkQuestionId
        SdkQuestionTitleProps
        SdkUserId
        SqlParameterValues
        UserBackendJwtResponse

        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/appearance.html b/_site/docs/master/embedding/sdk/appearance.html index 6370ebbce4..f89184e31b 100644 --- a/_site/docs/master/embedding/sdk/appearance.html +++ b/_site/docs/master/embedding/sdk/appearance.html @@ -5156,12 +5156,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5175,6 +5169,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset
        @@ -5191,24 +5186,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/authentication.html b/_site/docs/master/embedding/sdk/authentication.html index 0e487fa1af..8e85225f04 100644 --- a/_site/docs/master/embedding/sdk/authentication.html +++ b/_site/docs/master/embedding/sdk/authentication.html @@ -5441,12 +5441,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5460,6 +5454,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset
        @@ -5476,24 +5471,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/collections.html b/_site/docs/master/embedding/sdk/collections.html index e675f53d21..8add8a0a21 100644 --- a/_site/docs/master/embedding/sdk/collections.html +++ b/_site/docs/master/embedding/sdk/collections.html @@ -5031,12 +5031,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5050,6 +5044,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset
        @@ -5066,24 +5061,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/config.html b/_site/docs/master/embedding/sdk/config.html index adcc38c32c..8d803a481b 100644 --- a/_site/docs/master/embedding/sdk/config.html +++ b/_site/docs/master/embedding/sdk/config.html @@ -5139,12 +5139,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5158,6 +5152,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset
        @@ -5174,24 +5169,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/dashboards.html b/_site/docs/master/embedding/sdk/dashboards.html index 1bedbeb820..a395166b77 100644 --- a/_site/docs/master/embedding/sdk/dashboards.html +++ b/_site/docs/master/embedding/sdk/dashboards.html @@ -4757,7 +4757,7 @@

        Props

        dataPickerProps? - Pick<InteractiveQuestionProps, "entityTypes"> + Pick<SdkQuestionProps, "entityTypes"> Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question. @@ -4856,7 +4856,7 @@

        Props

        dataPickerProps? - Pick<InteractiveQuestionProps, "entityTypes"> + Pick<SdkQuestionProps, "entityTypes"> Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question. @@ -4955,7 +4955,7 @@

        Props

        dataPickerProps? - Pick<InteractiveQuestionProps, "entityTypes"> + Pick<SdkQuestionProps, "entityTypes"> Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question. @@ -5506,12 +5506,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5525,6 +5519,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5541,24 +5536,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/introduction.html b/_site/docs/master/embedding/sdk/introduction.html index 7e25569c2a..9bf8298362 100644 --- a/_site/docs/master/embedding/sdk/introduction.html +++ b/_site/docs/master/embedding/sdk/introduction.html @@ -5069,12 +5069,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5088,6 +5082,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5104,24 +5099,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/next-js.html b/_site/docs/master/embedding/sdk/next-js.html index c3f79c1f12..e4912542d2 100644 --- a/_site/docs/master/embedding/sdk/next-js.html +++ b/_site/docs/master/embedding/sdk/next-js.html @@ -5135,12 +5135,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5154,6 +5148,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5170,24 +5165,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/plugins.html b/_site/docs/master/embedding/sdk/plugins.html index e57872266f..b5d6710eda 100644 --- a/_site/docs/master/embedding/sdk/plugins.html +++ b/_site/docs/master/embedding/sdk/plugins.html @@ -4967,12 +4967,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -4986,6 +4980,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5002,24 +4997,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/questions.html b/_site/docs/master/embedding/sdk/questions.html index 1a690f30a2..42a8001019 100644 --- a/_site/docs/master/embedding/sdk/questions.html +++ b/_site/docs/master/embedding/sdk/questions.html @@ -4795,13 +4795,18 @@

        Props

        questionId null | SdkQuestionId - The ID of the question.
        This is either:
        - The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1
        - The entity_id key of the question object. You can find a question’s Entity ID in the info panel when viewing a question
        - new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question + - style? CSSProperties A custom style object to be added to the root element. + + title? + SdkQuestionTitleProps + Determines whether the question title is displayed, and allows a custom title to be displayed instead of the default question title. Shown by default. Only applicable to interactive questions when using the default layout. + width? Width<string | number> @@ -4810,7 +4815,7 @@

        Props

        withChartTypeSelector? boolean - - + Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout. withDownloads? @@ -4867,16 +4872,16 @@

        Props

        - - children? - ReactNode - The children of the MetabaseProvider component.s - className? string A custom class name to be added to the root element. + + componentPlugins? + MetabasePluginsConfig + Additional mapper function to override or add drill-down menu + entityTypes? EmbeddingEntityType[] @@ -4902,6 +4907,11 @@

        Props

        (question: undefined | MetabaseQuestion, context: { isNewQuestion: boolean; }) => Promise<void> A callback function that triggers before saving. Only relevant when isSaveEnabled = true + + onNavigateBack? + () => void + A callback function that triggers when a user clicks the back button. + onRun? (question: undefined | MetabaseQuestion) => void @@ -4920,7 +4930,7 @@

        Props

        questionId null | SdkQuestionId - The ID of the question.
        This is either:
        - The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1
        - The entity_id key of the question object. You can find a question’s Entity ID in the info panel when viewing a question
        - new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question + - style? @@ -5393,12 +5403,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5412,6 +5416,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5428,24 +5433,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/quickstart-cli.html b/_site/docs/master/embedding/sdk/quickstart-cli.html index d027ff352c..76d5498641 100644 --- a/_site/docs/master/embedding/sdk/quickstart-cli.html +++ b/_site/docs/master/embedding/sdk/quickstart-cli.html @@ -5053,12 +5053,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5072,6 +5066,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5088,24 +5083,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/quickstart-with-sample-app.html b/_site/docs/master/embedding/sdk/quickstart-with-sample-app.html index 0b0f2d6fba..1778169e85 100644 --- a/_site/docs/master/embedding/sdk/quickstart-with-sample-app.html +++ b/_site/docs/master/embedding/sdk/quickstart-with-sample-app.html @@ -5184,12 +5184,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5203,6 +5197,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5219,24 +5214,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/quickstart.html b/_site/docs/master/embedding/sdk/quickstart.html index 605a04fa91..8a4eedbe3d 100644 --- a/_site/docs/master/embedding/sdk/quickstart.html +++ b/_site/docs/master/embedding/sdk/quickstart.html @@ -5020,12 +5020,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5039,6 +5033,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5055,24 +5050,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/upgrade.html b/_site/docs/master/embedding/sdk/upgrade.html index af4dbdaf2b..cb3820dc91 100644 --- a/_site/docs/master/embedding/sdk/upgrade.html +++ b/_site/docs/master/embedding/sdk/upgrade.html @@ -4982,12 +4982,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5001,6 +4995,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5017,24 +5012,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/sdk/version.html b/_site/docs/master/embedding/sdk/version.html index 61c7f558a4..983ac426e0 100644 --- a/_site/docs/master/embedding/sdk/version.html +++ b/_site/docs/master/embedding/sdk/version.html @@ -4964,12 +4964,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -4983,6 +4977,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -4999,24 +4994,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/securing-embeds.html b/_site/docs/master/embedding/securing-embeds.html index 4149a776f0..d222bf8142 100644 --- a/_site/docs/master/embedding/securing-embeds.html +++ b/_site/docs/master/embedding/securing-embeds.html @@ -5411,12 +5411,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5430,6 +5424,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5446,24 +5441,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/start.html b/_site/docs/master/embedding/start.html index 7418aab835..e3e35eacb0 100644 --- a/_site/docs/master/embedding/start.html +++ b/_site/docs/master/embedding/start.html @@ -4738,6 +4738,10 @@

        Securing embedde

        How to make sure the right people can see the right data in your embedded Metabase.

        +

        Translating questions and dashboards

        + +

        Upload a translation dictionary to translate questions and dashboards (only in static embeds).

        + @@ -4988,24 +4987,21 @@

        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/static-embedding-parameters.html b/_site/docs/master/embedding/static-embedding-parameters.html index 8d2c7c64da..d5121b27e0 100644 --- a/_site/docs/master/embedding/static-embedding-parameters.html +++ b/_site/docs/master/embedding/static-embedding-parameters.html @@ -5251,12 +5251,6 @@
        Resources
        Data and Business Intelligence Glossary Partners - - The Startup's Guide to Financial Modeling - - - The 2023 Metabase Community Data Stack Report - Choosing Metabase @@ -5270,6 +5264,7 @@
        Resources
        Embedded Analytics Metabase vs. Tableau Metabase vs. Looker + Metabase vs. Looker Studio Metabase vs. PowerBI Metabase vs. Superset @@ -5286,24 +5281,21 @@
        Resources
        SQL Best Practices - - Choosing a Data Warehouse - - - How to Create Pivot Tables + + Which chart to use? A cheat sheet + + + What is embedded analytics? + + + Learn SQL Types of SQL Joins - - SQL Cheat Sheet - Data Bias Examples - - Modern Data Stack - Dashboard for Marketing Teams diff --git a/_site/docs/master/embedding/static-embedding.html b/_site/docs/master/embedding/static-embedding.html index 44f81fc85a..2f5979d062 100644 --- a/_site/docs/master/embedding/static-embedding.html +++ b/_site/docs/master/embedding/static-embedding.html @@ -4914,6 +4914,10 @@

        Custom destinations

        You can propagate filter values into the external URL, unless the filter is locked.

        +

        Translating static embeds

        + +

        See Translating embedded questions and dashboards.

        +

        Further reading