From 488ee2583067cb092a773509f8dc992af8430c7c Mon Sep 17 00:00:00 2001
From: Abdurrahman Rajab Follow this link to confirm your user: You have been invited to create a user on {{ .SiteURL }}. Follow this link to accept the invite: Follow this link to login: Follow this link to confirm the update of your email from {{ .Email }} to {{ .NewEmail }}: Follow this link to reset the password for your user:Confirm your signup
+
+You have been invited
+
+Magic Link
+
+Confirm Change of Email
+
+Reset Password
+
+
{errors.http_url}
} ) : type === 'supabase_function' && edgeFunctions.length > 0 ? ( - <> -{subtitle}
+ {highlights && {highlights}} +{subtitle}
- {highlights && {highlights}} -{subtitle}
- {highlights && {highlights}} -{subtitle}
+ {highlights && {highlights}} +Follow this link to confirm your user:
- + ``` **Invite user template** @@ -196,9 +187,16 @@ Let's update the URL in our email templates to point to our new confirmation end ```htmlYou have been invited to create a user on {{ .SiteURL }}. Follow this link to accept the invite:
++ You have been invited to create a user on {{ .SiteURL }}. Follow this link to accept the invite: +
- + ``` **Magic Link template** @@ -225,7 +223,12 @@ Let's update the URL in our email templates to point to our new confirmation endFollow this link to reset the password for your user:
- ++ Reset Password +
``` export const Page = ({ children }) =>Database size
8GB
-$0.125/GB
+$0.125 per GB
Database egress
-50GB
-$0.09/GB
+Egress
+250GB
+$0.09 per GB
100,000
-$0.00325/user
+$0.00325 per user
Single Sign-On (SAML 2.0) MAUs
@@ -111,19 +109,15 @@ const SpendCapModal = ({ visible, onHide }: SpendCapModalProps) => {50
-$0.015/user
+$0.015 per user
Storage size
100GB
-$0.021/GB
-Storage egress
-200GB
-$0.09/GB
+$0.021 per GB
Storage Image Transformations
@@ -136,13 +130,13 @@ const SpendCapModal = ({ visible, onHide }: SpendCapModalProps) => {Realtime concurrent peak connections
500
-$10/1000
+$10 per 1000
Realtime messages
5 Million
-$2.50/Million
+$2.50 per Million
+
See{' '}
diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx
index fd13a6dc6e2..03c23fb582d 100644
--- a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx
+++ b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx
@@ -266,7 +266,7 @@ const PlanUpdateSidePanel = () => {
Migrating to new organization-based billing combines subscriptions for all projects
in the organization into a single subscription.
@@ -180,7 +206,7 @@ const MigrateOrganizationBillingButton = observer(() => {
. To transfer projects to a different organization, visit{' '}
-
+
General settings
@@ -211,7 +237,7 @@ const MigrateOrganizationBillingButton = observer(() => {
})}
-
+
The pricing plan, along with included usage limits will apply to your entire
organization. See{' '}
{
Paid plans come with one compute instance included. Additional projects will at
- least cost the compute instance hours used (min $7/month). See{' '}
+ least cost the compute instance hours used (min $10/month). See{' '}
Compute Instance Usage Billing
@@ -320,7 +346,7 @@ const MigrateOrganizationBillingButton = observer(() => {
)}
- {!migrationPreviewIsLoading && migrationPreviewData && dbTier !== 'tier_free' && (
+ {migrationPreviewIsSuccess && dbTier !== 'tier_free' && (
+ The migration can take up to 30 seconds, please do not cancel the request or close
+ your browser.
+
+ As this is the first project you're launching in this organization, it
+ comes with no additional compute costs.
+
Launching another project incurs additional compute costs, starting at
- $0.01344 per hour (~$10/month).
-
- You can also create a new organization under the free plan (unless you
- have exceeded your 2 free project limit).
+ $0.01344 per hour (~$10/month). You can also create a new organization
+ under the free plan in case you have not exceeded your 2 free project
+ limit.
You can rename your organization later This is your organization within Supabase.
- For example, you can use the name of your company or department.
- You can rename your organization later This is your organization within Supabase.
+ For example, you can use the name of your company or department.
+
+
Every project on the Supabase Platform comes with its own dedicated Postgres
instance running inside a virtual machine (VM). The following table describes the
base instance with additional compute add-ons available if you need extra
performance when scaling up Supabase.
+ Compute instances are billed hourly and you can scale up or down at any time if you
+ need extra performance. You'll only be charged at the end of the month for the hours
+ you've used. Paid plans come with $10 in Compute Credits to cover one Starter
+ instance or parts of any other instance. Read more on{' '}
+
+
+ usage-based billing for compute
+
+ {' '}
+ or{' '}
+
+
+ Compute Add-ons
+
+
+ .
+ {priceDescription}
- {(plan.featuresOrg || plan.features).map((feature) => (
+ {(plan.features).map((feature) => (
+ {migrationPreviewData.addons_to_be_removed.map((addon) =>
+ addon.addons.map((variant) => (
+
+
- {migrationPreviewData.addons_to_be_removed.map((addon) =>
- addon.addons.map((variant) => (
-
- Create a new organization
- Create a new organization
+ Choose best compute setup for you
-
)}
diff --git a/apps/www/data/PricingAddOnTable.json b/apps/www/data/PricingAddOnTable.json
index 23b617c339f..76e4b495ffe 100644
--- a/apps/www/data/PricingAddOnTable.json
+++ b/apps/www/data/PricingAddOnTable.json
@@ -11,7 +11,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Starter" },
- { "key": "pricing", "title": "Pricing", "value": "$0" },
+ { "key": "pricing", "title": "Price USD", "value": "$10" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": false },
{ "key": "memory", "title": "Memory", "value": "1 GB" },
@@ -36,7 +36,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Small" },
- { "key": "pricing", "title": "Pricing", "value": "$5" },
+ { "key": "pricing", "title": "Price USD", "value": "$15" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": false },
{ "key": "memory", "title": "Memory", "value": "2 GB" },
@@ -61,7 +61,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Medium" },
- { "key": "pricing", "title": "Pricing", "value": "$50" },
+ { "key": "pricing", "title": "Price USD", "value": "$60" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": false },
{ "key": "memory", "title": "Memory", "value": "4 GB" },
@@ -86,7 +86,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Large" },
- { "key": "pricing", "title": "Pricing", "value": "$100" },
+ { "key": "pricing", "title": "Price USD", "value": "$110" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "8 GB" },
@@ -111,7 +111,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "XL" },
- { "key": "pricing", "title": "Pricing", "value": "$200" },
+ { "key": "pricing", "title": "Price USD", "value": "$210" },
{ "key": "cpu", "title": "CPU", "value": "4-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "16 GB" },
@@ -136,7 +136,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "2XL" },
- { "key": "pricing", "title": "Pricing", "value": "$400" },
+ { "key": "pricing", "title": "Price USD", "value": "$410" },
{ "key": "cpu", "title": "CPU", "value": "8-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "32 GB" },
@@ -161,7 +161,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "4XL" },
- { "key": "pricing", "title": "Pricing", "value": "$950" },
+ { "key": "pricing", "title": "Price USD", "value": "$960" },
{ "key": "cpu", "title": "CPU", "value": "16-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "64 GB" },
@@ -186,7 +186,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "8XL" },
- { "key": "pricing", "title": "Pricing", "value": "$1,860" },
+ { "key": "pricing", "title": "Price USD", "value": "$1,870" },
{ "key": "cpu", "title": "CPU", "value": "32-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "128 GB" },
@@ -211,7 +211,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "12XL" },
- { "key": "pricing", "title": "Pricing", "value": "$2,790" },
+ { "key": "pricing", "title": "Price USD", "value": "$2,800" },
{ "key": "cpu", "title": "CPU", "value": "48-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "192 GB" },
@@ -240,7 +240,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "16XL" },
- { "key": "pricing", "title": "Pricing", "value": "$3,720" },
+ { "key": "pricing", "title": "Price USD", "value": "$3,730" },
{ "key": "cpu", "title": "CPU", "value": "64-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "256 GB" },
diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx
index f5e2c494805..f98ab1a0260 100644
--- a/apps/www/pages/pricing/index.tsx
+++ b/apps/www/pages/pricing/index.tsx
@@ -1,4 +1,4 @@
-import { Accordion, Button, IconCheck, Select } from 'ui'
+import { Accordion, Badge, Button, IconCheck, Select } from 'ui'
import Solutions from 'data/Solutions'
import { NextSeo } from 'next-seo'
import Link from 'next/link'
@@ -13,6 +13,7 @@ import pricingFaq from '~/data/PricingFAQ.json'
import { useTheme } from 'common/Providers'
import ComputePricingModal from '~/components/Pricing/ComputePricingModal'
import { plans } from 'shared-data/plans'
+import { ArrowNarrowRightIcon } from '@heroicons/react/outline'
export default function IndexPage() {
const router = useRouter()
@@ -121,7 +122,7 @@ export default function IndexPage() {
- Included in Free and Pro plan
+ First instance is free on paid plans
{description}
- +Start building for free, collaborate with a team, then scale to millions of users.
+The Pro plan has a usage quota included and a spend cap turned on by default. If you need to go beyond the inclusive limits, simply switch off your spend cap to pay for - additional usage and scale seamlessly. Note that your project will run into + additional usage and scale seamlessly. Note that your projects will run into restrictions if you have the spend cap enabled and exhaust your quota.
per month
+/ month / org
)} {['Team'].includes(plan.name) && ( -per month
+/ month / org
)} > @@ -827,8 +868,8 @@ export default function IndexPage() {Database size
8GB
-$0.125/GB
+$0.125 per GB
Database egress
-50GB
-$0.09/GB
+Egress
+250GB
+$0.09 per GB
100,000
-$0.00325/user
+$0.00325 per user
- -Single Sign-On (SAML 2.0) MAUs
@@ -111,19 +109,15 @@ const SpendCapModal = ({ visible, onHide }: SpendCapModalProps) => {50
-$0.015/user
+$0.015 per user
Storage size
100GB
-$0.021/GB
-Storage egress
-200GB
-$0.09/GB
+$0.021 per GB
Storage Image Transformations
@@ -136,13 +130,13 @@ const SpendCapModal = ({ visible, onHide }: SpendCapModalProps) => {Realtime concurrent peak connections
500
-$10/1000
+$10 per 1000
Realtime messages
5 Million
-$2.50/Million
+$2.50 per Million
+
See{' '}
diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx
index fd13a6dc6e2..03c23fb582d 100644
--- a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx
+++ b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx
@@ -266,7 +266,7 @@ const PlanUpdateSidePanel = () => {
Migrating to new organization-based billing combines subscriptions for all projects
in the organization into a single subscription.
@@ -180,7 +206,7 @@ const MigrateOrganizationBillingButton = observer(() => {
. To transfer projects to a different organization, visit{' '}
-
+
General settings
@@ -211,7 +237,7 @@ const MigrateOrganizationBillingButton = observer(() => {
})}
-
+ You can rename your organization later This is your organization within Supabase.
+ For example, you can use the name of your company or department.
+
+
Every project on the Supabase Platform comes with its own dedicated Postgres
instance running inside a virtual machine (VM). The following table describes the
base instance with additional compute add-ons available if you need extra
performance when scaling up Supabase.
+ Compute instances are billed hourly and you can scale up or down at any time if you
+ need extra performance. You'll only be charged at the end of the month for the hours
+ you've used. Paid plans come with $10 in Compute Credits to cover one Starter
+ instance or parts of any other instance. Read more on{' '}
+
+
+ usage-based billing for compute
+
+ {' '}
+ or{' '}
+
+
+ Compute Add-ons
+
+
+ .
+ {priceDescription} {description}
Start building for free, collaborate with a team, then scale to millions of users.
The Pro plan has a usage quota included and a spend cap turned on by default. If you
need to go beyond the inclusive limits, simply switch off your spend cap to pay for
- additional usage and scale seamlessly. Note that your project will run into
+ additional usage and scale seamlessly. Note that your projects will run into
restrictions if you have the spend cap enabled and exhaust your quota.
per month / month / org per month / month / org K6{oEcDsvkor$m)uIuy>67
zTdY~BccOk8O(_$3Y1ShAf|WQJFmh+AWU_x#Mv!h;nAj28FX2E#pf+oJ_HOStU*1FM
zimi4lJtWX|mlAjgbsN*|QGS){B#cCm0VFV@XuXN=>}c|M0IITerMRR@>Una-U!|Hg
zC6=g-{Mah{!){y^?WctS!@0
- {(plan.featuresOrg || plan.features).map((feature) => (
+ {(plan.features).map((feature) => (
+ {migrationPreviewData.addons_to_be_removed.map((addon) =>
+ addon.addons.map((variant) => (
+
+
- {migrationPreviewData.addons_to_be_removed.map((addon) =>
- addon.addons.map((variant) => (
-
- Choose best compute setup for you
-
)}
diff --git a/apps/www/data/PricingAddOnTable.json b/apps/www/data/PricingAddOnTable.json
index 23b617c339f..76e4b495ffe 100644
--- a/apps/www/data/PricingAddOnTable.json
+++ b/apps/www/data/PricingAddOnTable.json
@@ -11,7 +11,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Starter" },
- { "key": "pricing", "title": "Pricing", "value": "$0" },
+ { "key": "pricing", "title": "Price USD", "value": "$10" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": false },
{ "key": "memory", "title": "Memory", "value": "1 GB" },
@@ -36,7 +36,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Small" },
- { "key": "pricing", "title": "Pricing", "value": "$5" },
+ { "key": "pricing", "title": "Price USD", "value": "$15" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": false },
{ "key": "memory", "title": "Memory", "value": "2 GB" },
@@ -61,7 +61,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Medium" },
- { "key": "pricing", "title": "Pricing", "value": "$50" },
+ { "key": "pricing", "title": "Price USD", "value": "$60" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": false },
{ "key": "memory", "title": "Memory", "value": "4 GB" },
@@ -86,7 +86,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "Large" },
- { "key": "pricing", "title": "Pricing", "value": "$100" },
+ { "key": "pricing", "title": "Price USD", "value": "$110" },
{ "key": "cpu", "title": "CPU", "value": "2-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "8 GB" },
@@ -111,7 +111,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "XL" },
- { "key": "pricing", "title": "Pricing", "value": "$200" },
+ { "key": "pricing", "title": "Price USD", "value": "$210" },
{ "key": "cpu", "title": "CPU", "value": "4-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "16 GB" },
@@ -136,7 +136,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "2XL" },
- { "key": "pricing", "title": "Pricing", "value": "$400" },
+ { "key": "pricing", "title": "Price USD", "value": "$410" },
{ "key": "cpu", "title": "CPU", "value": "8-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "32 GB" },
@@ -161,7 +161,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "4XL" },
- { "key": "pricing", "title": "Pricing", "value": "$950" },
+ { "key": "pricing", "title": "Price USD", "value": "$960" },
{ "key": "cpu", "title": "CPU", "value": "16-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "64 GB" },
@@ -186,7 +186,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "8XL" },
- { "key": "pricing", "title": "Pricing", "value": "$1,860" },
+ { "key": "pricing", "title": "Price USD", "value": "$1,870" },
{ "key": "cpu", "title": "CPU", "value": "32-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "128 GB" },
@@ -211,7 +211,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "12XL" },
- { "key": "pricing", "title": "Pricing", "value": "$2,790" },
+ { "key": "pricing", "title": "Price USD", "value": "$2,800" },
{ "key": "cpu", "title": "CPU", "value": "48-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "192 GB" },
@@ -240,7 +240,7 @@
{
"columns": [
{ "key": "plan", "title": "Plan", "value": "16XL" },
- { "key": "pricing", "title": "Pricing", "value": "$3,720" },
+ { "key": "pricing", "title": "Price USD", "value": "$3,730" },
{ "key": "cpu", "title": "CPU", "value": "64-core ARM" },
{ "key": "dedicated", "title": "Dedicated", "value": true },
{ "key": "memory", "title": "Memory", "value": "256 GB" },
diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx
index f5e2c494805..f98ab1a0260 100644
--- a/apps/www/pages/pricing/index.tsx
+++ b/apps/www/pages/pricing/index.tsx
@@ -1,4 +1,4 @@
-import { Accordion, Button, IconCheck, Select } from 'ui'
+import { Accordion, Badge, Button, IconCheck, Select } from 'ui'
import Solutions from 'data/Solutions'
import { NextSeo } from 'next-seo'
import Link from 'next/link'
@@ -13,6 +13,7 @@ import pricingFaq from '~/data/PricingFAQ.json'
import { useTheme } from 'common/Providers'
import ComputePricingModal from '~/components/Pricing/ComputePricingModal'
import { plans } from 'shared-data/plans'
+import { ArrowNarrowRightIcon } from '@heroicons/react/outline'
export default function IndexPage() {
const router = useRouter()
@@ -121,7 +122,7 @@ export default function IndexPage() {
- Included in Free and Pro plan
+ First instance is free on paid plans
-
+
},
- Img: ({ zoomable = true, ...props }: any) => (
-
+
+
+
+The “navigable” part of NSW specifically refers to the ability to logarithmically scale the greedy search algorithm on the graph, an algorithm that attempts to make only the locally optimal choice at each hop. Without this property, the graph may still be considered a small world with short paths between far-away nodes, but the greedy algorithm tends to miss them. Greedy search is ideal for NSW because it is quick to navigate and has low computational costs.
+
+### **Hierarchical +** Navigable Small World
+
+HNSW combines these two concepts. From the hierarchical perspective, the bottom layer consists of a NSW made up of short links between nodes. Each layer above “skips” elements and creates longer links between nodes further away from each other.
+
+Just like skip lists, search starts at the top layer and works its way down until it finds the target element. However instead of comparing a scalar value at each layer to determine whether or not to descend to the layer below, a multi-dimensional distance measure (such as Euclidean distance) is used.
+
+## Comparing queries per second
+
+To understand the performance improvements that HNSW offers, we decided to expand upon our previous benchmarks and include results for the HNSW index in addition to IVF and compare the queries per second (QPS) for both.
+
+### wikipedia-en-embeddings
+
+In the first test, we used [224,482 vectors by OpenAI](https://huggingface.co/datasets/Supabase/wikipedia-en-embeddings) (1536 dimensions). You can find our previous benchmark with additional information on how vector dimensions may affect performance in [pgvector: Fewer dimensions are better](https://supabase.com/blog/pgvector-performance).
+
+In this test we used a Supabase project with a large compute add-on (2-core CPU and 8GB RAM) and built the HNSW index with the following parameters:
+
+- `m`: 32
+- `ef_construction`: 64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+a=i7VhBJ7^a5~RWAqH%E$E-fnT)1x&XJrbZ||@lRs;T
zhXRut!S7(;iDu8VHVa}pekYO(Q+zxIq$kgvR23U>ofMy3%d}RpJEawh$3CrhOwB&{
z$g}7%#(<_b9c$YW{J}wUL9x50J2p*wDa?devpgw-AHc1?PI9vw?;;O+#}6q{-c09>
zd0R?J{05>@tsWZWs#*(mfRt`)TyAbaV%~>7;I04-Oe{kzpbJPc(~UT?-CJ^Zg4=Hm
z{A$CEfP_XyxM$^k*;dK1Kjh+)1T)q|Z@YOrER{Hx6dfAE%bVj`+_(BgbIWJ_BkCvm
zb*>)$NDdv>SMev1O9B3wixL3JvjIeNXsq-=hTy2}WZe)Q@6j={zQQg~d=G$?jD<#LTs%1Zq
z$bN8xRR@f~$!Bcro{Xi)n
`f-i-(nItGLc(G{%ml7@>Jj(~
zwH!6-dwXmgom*Nuvv;ZAbAXGG95J(*<$OOvZF7-~E8c?Qvf#(hZEi-
z)F__N*{d>_Inybeqs||4w^MqJ(Qt#9TU8+Z@{1o1c&7V0%tX|el*GYQ_5@qb)#<=}
z7?xI&&Z!$I{6K+!n5e&}kqM*~z_7xsyR81Qa*{6qKo&qbW8Pm|RC^rO?j6KDdq?+9
z`0ycAf@@3?R^}a;@$-7?h=>njn)X`LrR|J$+U1vK&