From 9145fe64ce832dcafb98fae49118e2f7540d0eaa Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Thu, 17 Sep 2026 11:52:01 -0700 Subject: [PATCH] Define AC balance and compare prepaid currency options --- apple/aesel/AC-BALANCE.md | 100 +++++++++ apple/aesel/CREDITS-EXPLORATION.md | 72 +++++++ .../ac-credits-source-README.txt | 7 + papers/arxiv-ac-credits/ac-credits-source.zip | Bin 0 -> 10539 bytes papers/arxiv-ac-credits/ac-credits.tex | 198 ++++++++++++++++++ papers/arxiv-ac-credits/aesthetic-eye.json | 56 +++++ 6 files changed, 433 insertions(+) create mode 100644 apple/aesel/AC-BALANCE.md create mode 100644 apple/aesel/CREDITS-EXPLORATION.md create mode 100644 papers/arxiv-ac-credits/ac-credits-source-README.txt create mode 100644 papers/arxiv-ac-credits/ac-credits-source.zip create mode 100644 papers/arxiv-ac-credits/ac-credits.tex create mode 100644 papers/arxiv-ac-credits/aesthetic-eye.json diff --git a/apple/aesel/AC-BALANCE.md b/apple/aesel/AC-BALANCE.md new file mode 100644 index 0000000000..6d887aec49 --- /dev/null +++ b/apple/aesel/AC-BALANCE.md @@ -0,0 +1,100 @@ +# AC balance + +Product definition · September 17, 2026 + +**AC balance is prepaid account credit for paid Aesthetic.Computer services. Add funds once, then pay for usage from the same account across aesel and participating AC apps.** + +The public name is **AC balance**. The purchase action is **Add funds**. Show money directly; there is no separate coin, point, or credit-to-dollar conversion to learn. “Account credit” describes the prepaid funds, not a new denomination. + +This defines the proposed product. Paid billing is not live, and this document does not authorize charging existing users. It supersedes the invented-unit recommendation in [CREDITS-EXPLORATION.md](CREDITS-EXPLORATION.md). The comparative research is in [What to Call a Balance](../../papers/arxiv-ac-credits/ac-credits.pdf). + +## What the user sees + +| Place | Label or behavior | +| --- | --- | +| Account menu | **AC balance · US$5.00** | +| Purchase action | **Add funds** | +| Balance detail | **Available**, **Pending usage**, **History** | +| Before paid work | Selected model, estimated cost, and **Maximum spend** | +| After paid work | Actual charge and remaining available balance | +| Insufficient funds | **Add funds to continue**; preserve the draft | +| Payment awaiting confirmation | **Payment pending**; do not increase available funds yet | +| Usage awaiting settlement | **Pending usage**; show the reserved amount and request | + +The amounts above are interface examples, not pack prices. Use **US$** where the currency could be ambiguous. VoiceOver should read monetary values and model names in full. Balance is accessible from the account menu behind the top-right handle; keep the personalized handle colors and the Aesel home action. + +The user can inspect a request's estimate and maximum before spending. A maximum applies to the whole turn, including its permitted tool/model steps and retries. Saving a default maximum is allowed; raising it requires an explicit user action. Show the actual served model in the receipt. A premium model cannot silently replace the chosen model. + +## Value and precision + +The initial service denomination is **USD**: US$1 of AC balance buys US$1 of services at the published AC tariff. This states service value, not a cash-withdrawal promise. It does not promise that the checkout total equals delivered balance: taxes, regional purchase currency, and any platform-specific offer must be itemized before purchase. + +Keep internal amounts as integer millionths of a US dollar: `1 USD = 1_000_000 microUSD`. Never use floating-point values for ledger arithmetic. Calculate fractional metered charges at higher precision and round once per settled turn to the nearest microUSD, half up. Do not round each token, stream event, or tool step into a separate charge. + +The compact balance shows two decimal places rounded down so it never overstates available funds. For a positive balance below one cent, show **< US$0.01**. Balance detail and usage receipts expose up to six decimal places, trimming trailing zeros; a nonzero charge must never appear as US$0.00. All arithmetic uses the full stored amount. + +Retail pricing is separate from provider cost. Each turn pins a server-owned tariff version before reservation. Tariffs specify rates, billable dimensions, and any disclosed minimum; there is no implicit minimum charge. Price changes apply to future requests. They do not reduce the monetary face value of funds already added. + +## Ownership and scope + +- The balance belongs to the stable AC account ID, not its handle, device, or Apple account. Changing a handle or reinstalling does not lose funds. +- The same signed-in account sees its eligible balance and history on iPhone, Mac, and web. Do not create a second balance per app or per model. Any required storefront restriction must be disclosed before purchase. +- Initial paid scope is remote aesel inference. Other AC services join only with an explicit price and consent to spend. Ordinary browsing and publishing do not become paid merely because an account has funds. +- Purchased funds do not expire. They are not transferable between users, withdrawable on demand, or a creator-earnings balance. Purchase refunds remain a separate process. +- Optional free allowance is shown separately from paid funds, with any expiry/reset stated. Use eligible free allowance first, then paid funds only when paid use is enabled by the user. Within free grants, consume the earliest expiry first. +- Anonymous exploration may use a separately bounded free allowance. Adding paid funds requires AC sign-in so ownership and cross-device recovery are unambiguous. +- Local work using the user's own provider subscription does not debit AC balance unless a distinct AC service charge is explicitly offered and accepted. + +## Add funds + +The purchase screen states the monetary service value delivered, checkout currency and total, tax treatment, and payment method. A purchase increases available funds only after server verification and durable delivery. A success page, client callback, or pending payment is not proof of payment. + +The intended launch routes are web checkout and native in-app purchase. Their implementation must satisfy the applicable storefront and payment-provider requirements at launch. Purchased value is recorded in the shared account ledger, with the original currency, payment amount, tax data, product, and provider transaction retained separately. + +Grant each provider transaction once even when notifications repeat. Bind payment ownership to the signed-in AC account before checkout; switching accounts during payment must not move the purchase to the new account. Provide recovery for interrupted purchase delivery. + +**No automatic top-up in the first version.** Reaching the limit stops paid work and preserves the draft. A saved payment method is not consent to replenish the balance. + +Tez is outside the initial release. A later tez payment could fund this same monetary balance through a disclosed conversion quote; it would not rename the balance or require users to hold an AC token. + +## Spend and settle + +1. Authenticate the account. Accept a unique request ID, selected model, and authorized maximum. Resolve the tariff and enforce server model, output, tool-step, retry, and concurrency limits. +2. Atomically reserve the authorized amount from eligible available funds. If there is not enough, stop before starting paid provider work. Concurrent requests cannot reserve the same funds. +3. Run only within the reservation. If continuing requires more, stop and ask for a higher maximum before further paid work. Provider overruns caused by AC's enforcement failure are AC's expense, not an unapproved user debit. +4. Settle exactly once from server-observed usage under the pinned tariff. Convert the consumed reservation into a charge and release the unused portion to its original funding source. +5. Return a receipt containing the request, actual model, tariff version, metered usage, settled amount, and resulting balance. Replaying the request returns its existing state or result, never a second debit. + +Available funds exclude active reservations. Pending usage is reserved money, not a second charge. The total remaining value is available plus reserved; unsettled work must not look both spent and available. + +Use one atomic ledger/projection mutation for every reserve, settle, release, or funding change. The append-only ledger is the source of truth; cached balances must rebuild from it. Use unique keys for requests, provider payments, and terminal settlements. Paid work fails closed if reservation state cannot be confirmed. + +## Cancellation, failure, and refunds + +| Event | Balance treatment | +| --- | --- | +| Request fails before provider work starts | Release the whole reservation; no charge | +| User cancels after work starts | Charge verified work already performed, within the cap; release the rest | +| AC/provider failure prevents delivery of a usable result | Refund the affected turn with a compensating entry; AC absorbs its provider cost | +| Output arrives but the user dislikes it | Normal usage charge; no automatic refund solely for preference | +| Worker disappears or usage cannot yet be proved | Mark pending, fence/cancel further work, and reconcile | +| Unresolved usage after 24 hours | After fencing the worker, release the customer's reservation; later provider cost is AC's expense | +| Verified payment refund or reversal | Reverse the corresponding funding once; preserve the original ledger history | + +The 24-hour target is a customer-facing settlement commitment for implementation, not an existing operational guarantee. A timeout alone cannot free a reservation while its worker can still spend. + +Purchase refunds use the original payment route and the applicable purchase rules. If a reversal exceeds remaining funds, record the shortfall separately and put paid usage on hold for review. Never display a negative spendable balance or silently debit another payment method. Keep promotional and purchased provenance through all adjustments. + +## Records and rollout + +Store payment/request IDs, account reference, model, usage quantities, amounts, funding provenance, tariff version, and state transitions. Do not put prompts, generated content, API keys, or wallet secrets in the financial ledger. History should explain each top-up, charge, release, and refund without requiring access to private creative content. + +Implementation sequence: + +1. Shadow-meter usage without charging users; measure actual costs and establish tariffs. +2. Build the ledger and exercise concurrent reservations, request replays, worker crashes, cancellation, and reconciliation using test funds. +3. Add balance, spend limits, and receipts to aesel; verify one account across iPhone, Mac, and web. +4. Verify sandbox purchases, duplicate/out-of-order notifications, account switching, refunds, and interrupted delivery. +5. Publish final tariffs, purchase offers, free-allowance terms, and supported storefronts before enabling paid access. + +Still to set from measured costs: retail tariffs, top-up amounts, free-allowance size, initial regions, and maximum account/turn limits. These do not change the core definition: **add money to AC balance; spend it on explicitly priced AC services.** diff --git a/apple/aesel/CREDITS-EXPLORATION.md b/apple/aesel/CREDITS-EXPLORATION.md new file mode 100644 index 0000000000..29eb9e1208 --- /dev/null +++ b/apple/aesel/CREDITS-EXPLORATION.md @@ -0,0 +1,72 @@ +# Aesthetic Computer credits + +Superseded product recommendation: use **AC balance** in money with an **Add funds** action. See [AC-BALANCE.md](AC-BALANCE.md) for the current definition. The credit denomination and coin treatment below are historical exploration, not the selected product contract. + +Research and proposed contract, September 17, 2026. No credits, purchases, wallets, or tokens have been created by this work. + +Start with **AC credits**: non-transferable usage credit attached to an AC account, shared across Aesel and other participating AC tools. Keep the free allowance. Offer Luna by default and Opus as an explicit, more expensive choice. Tez can later buy credits on the web; it need not become the unit users spend on every prompt. + +| Direction | User experience | Engineering and product consequence | +| --- | --- | --- | +| AC credits, recommended first | Sign in, receive a small allowance, optionally buy more, see each turn's charge | Server ledger; familiar iOS consumable purchase; no wallet required | +| Tez funds the same credits | Connect a wallet on the web, accept a time-limited quote, pay once | Adds chain verification, exchange-rate quotes, treasury and refund operations; inference still uses the same ledger | +| Tez balance or transferable AC token | Hold or transfer a market-priced asset and spend it | Wallet onboarding, custody or signing, variable purchasing power, app-review and jurisdiction-specific obligations; poor first dependency for making a picture | + +“Coins” could be the visual treatment, but call the balance **credits** and disclose its price. Do not promise appreciation, redemption for cash, staking yield, or resale. Transfers, creator payouts, tipping, and Keeps ownership remain separate product decisions. + +Existing foundations + +- `system/backend/ai-budget.mjs` tracks a daily per-handle token bucket in Mongo `ai-usage`. It checks before inference, increments after inference, and returns an unspent-looking balance marked `unknown` when lookup fails. aesel’s endpoint already rejects that unknown balance; callers must make that decision explicitly. This is useful subsidized-usage telemetry, not a purchased-balance ledger: concurrent calls can overspend, writes can be lost, and tokens from different models have different prices. +- `system/netlify/functions/easel-inference.mjs` and `ask.js` already call that budget module. Integrate metering here on the server, not in the phone's JavaScript. +- `system/netlify/functions/news-toll.mjs` demonstrates authenticated Stripe checkout and signed webhooks. Reuse infrastructure conventions, but implement dedicated credit products and deduplication. +- `tezos/contracts.json`, `tezos/keeps.mjs`, and the Keeps contracts provide an existing Tezos operational context. Keeps are art tokens, not an inference-credit system. Use a dedicated payment receiver rather than borrowing minter or contract-admin keys. + +Proposed money contract + +Use a disclosed reference denomination: **1 credit = US$0.01 of AC service value**, with 1,000 integer subunits per credit. This is a proposed service denomination, not cash redemption or a promised launch price. Store exact local purchase currency, amount, tax treatment, product, and credited units separately; regional StoreKit prices can differ. Show decimal credits rather than rounding every tiny Luna call to a whole credit. + +Purchased credits do not expire. Free promotional grants are separately identified and may reset under clearly disclosed rules. The paid balance survives reinstall and device changes through AC login. A handle is a display name; the ledger belongs to the stable AC account ID, with an audited account-merge procedure. + +Illustrative provider costs, verified against the [OpenRouter model catalog](https://openrouter.ai/api/v1/models): + +| Exact route | Input / output per million tokens | 10,000 input + 2,000 output | +| --- | --- | --- | +| `openai/gpt-5.6-luna` | $0.20 / $1.20 | $0.0044 | +| `anthropic/claude-opus-5` | $5 / $25 | $0.10 | + +These are baseline provider costs, not retail turn prices. Cache writes/reads, long-context pricing, reasoning/output accounting, tools, retries, and multiple agent steps change the bill. Luna's catalog includes a higher price tier above 272,000 prompt tokens. Version the full rate card; never price all input or all models as one token bucket. Set the retail multiplier only after measuring provider costs, store/payment fees, taxes, support, and the free allowance. + +In Aesel, show selected and actually served model, estimated range, and a user-controlled maximum per turn. Show the settled charge afterward. Switching to Opus never silently spends the whole balance. No automatic premium fallback. Local tools using a person's own subscription do not consume AC inference credits unless a separate AC service charge is clearly offered. + +Ledger and request contract + +1. Authenticate; accept an idempotent `turnId`, chosen model, and maximum credit spend. The server fixes the pricing version and allowed model. Do not trust client cost or token counts. +2. Atomically reserve available units before calling the provider. The turn cap covers all model/tool steps, not only its first request. Bound context, output, retries, parallelism, and step count to that reservation. +3. Settle once using server-observed usage and the agreed retail rate. Release the unused reservation. A user cancel still costs provider work already performed; disclose this. Do not charge for a failed-to-start call. Give service-failure refunds through explicit compensating ledger entries. +4. If completion or provider usage is uncertain, retain a bounded pending reservation and reconcile provider request IDs. A sweeper must not simply release an expired reservation while its worker can still generate a bill: cancel/fence the worker first. Resolve unprovable usage under a published customer-friendly policy. +5. Record immutable entries for purchase, grant, reserve, settle, release, refund, and reversal. Deduplicate purchase IDs independently of webhook event IDs. A repeated HTTP request returns its original result, never a second debit. + +Suggested Mongo collections: `credit-accounts` (available/reserved projection and version), `credit-ledger` (signed integer deltas and references), `credit-turns` (reservation state, actual model/provider ID, pricing version, usage/cost), and `credit-purchases` (verified payment provenance). Unique indexes cover account plus idempotency key, provider transaction, and terminal settlement. Use transactions for ledger+balance changes; verify deployment supports them before coding. A projection must be reproducible from ledger entries. + +Paid inference fails closed if a reservation cannot be confirmed. Retain a separately capped free lane if desired. Add per-account and global concurrency/spend limits, verified-account grant limits, and chargeback holds. Refunds that exceed unspent purchased credit create a recorded debt/hold, not a silently erased charge or negative spendable balance. Store usage metadata and IDs, not prompts, API keys, or wallet secrets in the ledger. + +Purchase routes + +For iOS and Mac App Store, recommend consumable IAP packs. Apple requires IAP for digital functionality, prohibits expiring purchased credits, and allows multiplatform access under its stated conditions. External-purchase links have US-storefront and other regional exceptions; these do not constitute blanket permission for an embedded crypto unlock flow. Explain shared credits and inference to review. [Apple payment guidelines §§3.1.1–3.1.5](https://developer.apple.com/app-store/review/guidelines/#business), [consumable types](https://developer.apple.com/help/app-store-connect/reference/in-app-purchases-and-subscriptions/in-app-purchase-types/). + +Use verified Apple-signed transactions and bind a server-issued UUID to the AC account through `appAccountToken`; validate bundle, environment, product, quantity, and transaction uniqueness. Finish the transaction only after durable credit delivery. Test account switching, pending purchases, duplicate notifications, refunds, reinstall, and balances on another device. Server balance recovery is essential; do not assume StoreKit will restore consumed packs. [Apple server integration](https://developer.apple.com/videos/play/wwdc2025/249/), [account token](https://developer.apple.com/documentation/appstoreserverapi/appaccounttoken). + +Web checkout can use Stripe. Credit only a verified successful payment, including delayed-payment handling; never credit from a success redirect. Verify signatures over the raw body, acknowledge durable processing, and tolerate repeated/out-of-order notifications. [Stripe webhooks](https://docs.stripe.com/webhooks). + +For a later tez pilot, quote a fixed credit amount and exact integer mutez amount with an expiry and exchange-rate source. Map each payment to one authenticated invoice: do not identify purchasers solely by similar amounts or a pasted operation hash. Verify the network, receiver, payer binding, amount, successful operation/content index, and finality before crediting; deduplicate the operation. Pending wallet submission is not payment. Under/overpayments and expired quotes need explicit recovery paths. + +Tez is Tezos's native currency; fees are paid in tez. Estimate each transaction rather than advertising a permanent fee. Tenderbake provides deterministic finality after two additional blocks; wait for chain evidence rather than a fixed timer. Keep inference off-chain, with no prompt text or AC identity in payment metadata. Exchange-rate volatility and treasury conversion remain operational responsibilities. [Tezos glossary](https://docs.tezos.com/overview/glossary), [transaction estimation](https://docs.tezos.com/tutorials/build-your-first-app/sending-transactions), [consensus specification](https://octez.tezos.com/docs/alpha/consensus.html). + +Rollout and decisions + +1. Measure real Luna/Opus per-turn cost with shadow accounting; keep existing users' access intact. Build the ledger with test grants and concurrency/crash/replay tests. +2. Add balance, model choice, turn cap, and receipts in Aesel. Pilot free credits, then sandbox StoreKit and Stripe, including refunds and interrupted settlement. +3. Choose retail packs and margin from evidence. Submit the purchase flow with review notes before selling credits in the app. Roll out paid packs behind explicit server eligibility and spend caps. +4. Evaluate a web-only tez top-up pilot after fiat operations reconcile reliably. A transferable AC token is a separate proposal, not required infrastructure. + +Product choices still open: credit name/art; free daily or first-use allowance; retail prices and margin; whether Opus is available to every funded account; whether credits eventually cover images/audio/rendering; initial storefronts; and whether tez demand merits the extra payment operations. Recommended first scope: **AC credits for remote inference, Luna default, explicit Opus, purchased units without expiry, no transfer/cash-out, StoreKit plus web Stripe**. diff --git a/papers/arxiv-ac-credits/ac-credits-source-README.txt b/papers/arxiv-ac-credits/ac-credits-source-README.txt new file mode 100644 index 0000000000..037bf2789a --- /dev/null +++ b/papers/arxiv-ac-credits/ac-credits-source-README.txt @@ -0,0 +1,7 @@ +ac-credits — embedded source bundle + +Included files +- ac-credits.tex (TEX source) + +Purpose +This machine-readable bundle accompanies the rendered PDF for accessibility, audit, quotation, and reproducible editing. The PDF remains the canonical reading edition. The bundle is deliberately limited to text source files; private evidence, credentials, raw datasets, generated PDFs, and unlisted assets are excluded. diff --git a/papers/arxiv-ac-credits/ac-credits-source.zip b/papers/arxiv-ac-credits/ac-credits-source.zip new file mode 100644 index 0000000000000000000000000000000000000000..c39e72e42e6bc1907df9bce973a2cd13e33d1f15 GIT binary patch literal 10539 zcmWIWW@h1HU|`^2U|>+x(DnYMtgOz!Ad|$vz{kMAkeIBST$GxUSyHT5l3KB}CVTpA zw@FXS|8l)~8Jj6zGsSC?s`v5Z!IMn?5mojTj> z^`1Xz-@bVEMPFNYYuCD){qHQ-tlE^FJ^kVJYo)hM^nady*uLfT=_j#UOMGY6tk{-W z`RD0Z-{+^y)_*v*D%!Vh)$E$RFYi70mfw|oxLR(Wuk`kJ-CJhvS=06O;2Sh9LgiP1IZ zSywA7OKtvqy}Vn#uYG#IynXezFW+=)gCBeDe))2qbTZ{O=*@|rA9`rrSd?^p5h$#R|d zcTW0$EmD2-=h=tPYHug4^NL&QI&sNK@5!9+J$~mkxAXn~GCO*$)OPzMoljR*Wo^qW zZ;(rsz4D}Dht5y$i_hZkJWaZ~ORZeD?&y^_({6q=sD8BV_~EtTU%DUa>fQ^Svrl1{ z;vS|$8ZkTHnJJmg(7*P+!oq(2?vF>Ua&N7cnJzast}y!g8rd%^-b!6hmA2_EzkgUb zTj%7yhRER4ebZOvtUmm4Q{l%~xiPzPejR%IDYbq1`6tX(#_RrkdKGRjtF!svzE!LA ze#sU;KJGV#DXaVHExG#29%=EPP4zPWK7E++=V{Hfgeza4eVFd<{-?Ovn!moX#^z7% z)>E5pbcL=)#_T>}bbVXi%$gEYx%eGwl|M=*&6z*9-t_QuF}?|99}b*g{iyJxJNEPk zYt#1yKMx;me;?m2>iN$hQsepQ*J5f<_~HWv+P!alxTSi3dGz!Y+n$YQe%LIVG3BM1 z{&mmLV&B^=T@yNb7M0iN9-1PVw`*PA{PWKnzUAIMdnre5OW}pnr|F7C3W+Jt zt!g%LJr!-^c|xh{py%tH&$3tlM*r9X(j^rQ?ds6qfHf3(nnTOMYtdFyZpP08u05(?9=Q z+WIrPO_@;^v|ITiC`|GKkaNftxnN019 zt&NwA8!oN?{;qO)`41K6Q$=iE$E*Kn-_KLD_hL>y*s@JVenHdxo(oKQ$4yr;Pg(nb z_xh4oyHjSzb+Swn{UEmSc-@8V>sEE8JS`}m7;kxJlIibVtN*roYwW&)mZDRgTj##EI4QhgQ3Pw|t!Q|l7`SWbB-d$nMOaFu)u#5Iq%+k5D zugS@2@?UMKbyBH!^B=xV`Kz$gcB%WpE0#K3{rVq;LuamJSla(UxQaXX)b@fs!d7RB zG^HLS2DP@c9(=LDGTP;6Ytz-R0KN`g=SRm4d>wi+(!#dRw`);R8ht{&xg@=@CSvf21(aJq?`P8JG&tditrl)%+o;svs5O|BHrQ~Uh?k3>? z^WL1vVqBp*m5XZFmTRkCNxb?q-D{7`m1z|EC=!9!wN zQvX7c^!UTwYkxV37eqc}bNz6?dX1U-?Io{Vj_xz{S!o?w9>Mu^{q#J08wT}vVWv|S zUTk1sn;5#U*kH+0o*ffq3N*FL_Ix*a36=Z_0&|$sFgq z_e}azV!u(;=*yh4+TbLq*3Aw9%WrA!3w(4Ud)d~yu6{@BoSO-+_iI{A>+!3-^8fR) zLmc0w4EBHWdni1|>9_8qDQ+cxO+G#13#Z-qx~Sc3%7F&ozV+!g(r z6Kzf|{{QIr!D7dcoMpU9N=>GpV*ZL9PH_@Av+dN8&#asmZaJ+;%+kH)zhxUgyW+#y z_Pb*4*eY0s)@FqMeGvNLW9pL=?H0+?#ZQ!9m+;F@{Auy4t<}`0RmU&sg#M$p3*jGL zGU|Ty)@IpvbzN)v!O}fqw?1;kpPN2sM%z*Yl>-V}@3u>?{r+4+!S(9L&rRZwe7+SK zmkO@inyR))?7m^!q5bO@RvoHPSjh0;xYUOQrju`V2p5}Ix=r5wpeAbL{0E+P^=2Px zKQ!$4{Ii%XI`@OS)&tFt7t`XyCrw~(ty>eqaee3Qi|1Ae&CqIcIMJ{(JHzFG8v{rE z^+&la5_^7cms_^~3~TQ4C3}k&@VISnV^!RLfct2rzRVZC^+8Ab1b_YINIF|TEyO`B z)2CyF5{ql-;c}JA6&siDJoeFbjzzEht-__&cNWeJc^~Sq{#C#IYuime7ec$VcwEl< z+_`HZz#5W&$<5~Q)^*E{ISWm$o1Z-8!vl_$lBfHgn<=+tZdk+Vf9c&qrs!R9YGpIx z8<(^O8eLHRIln3Izn9YkhVBZvniC)EIkOz&oui!e1Gic8MK|m}Iq`+jOHPl!b2uFe zR^Q7h<@>}V`?fU7g10D$^KAkL@8U15r-P!5-HtAmeRFd?%ijI1B@)7+hL?PlIp?X{ z*Y5fA-ajopJ;1xulG$W-Q`)_2D|BbA=1%(a{;|HSr?=;g<0?E&OG^?8`^zM^J~nO8-6It8GU@rpL+d99p2{^y+9=igX9~Z<0aksjUq;q(U59NWw`O=b z6->Izv`4!3i+_7^?F?Jzkho;2{`n8&|NmgGvxzGUJuCA)ZpOL4PZs~5$AACb{UBXQ z#=82`ADJr8xUIMn&~p0p>0G@xQ*Yh=`-H#u%!I1f>*d|e>jMSFTUx+7ZMLTUo4tA$=NpF1 zeO9QF&9nH!*1{Q`H$e=;H1s5VH?S(Z_`TSHx4-z6@8d*P?MCTdK7q)xoz%zkPZ`$YPbVf*Er z9~~Jx+3rlR*R;9(WPMjl-xg7QQTemgkE1wei)`wDFLg4%Md4xd5`iXb$4zlxU-Med zXcCnzekUoQ>#DJ^-qDPC>SXUFqBEwy7FpJP!uD!T-tFy`Vr-Xgx-VvsE38ZH*}aKr zX12sN)kS?VL4jeTPOC!H@}TE9@|?DtWa zApTZs{mu?)iN8}tbL2CQHF2`OPWDui3Ow}ELy+~^A+D2aT4o%pVZ4y`vT!ED3j4R& z#XmNzlvym4<~=2h`P7P80u^t1mtA+!_B-2tc;1$Y5xvWTcc>PHpZ;3EPRiqJ@KtlC z_b;!gt}&H55X_upw`A?_rq3pKx9K%$re9(Xdqe8Q+SccL*YNS)SNnKgNHINbj>56~EV)@1 zYkgYJt!*x{OxaaGf8U$U+SfR@b&bRG2g6NA;!uS_2lnc zT?d~vGeVhzf3tCN=Do{5V#(Mk&N4-B<8R6Is&{v%^{rU8WP3}XzEHTrStY5x*Vw<5 zZq4wB)0PyP?lG<40&8Z%tc{b7i*5d~A%e~R(bMfq))g}xx0~3NC4BMF7tv?@!7G0h zH8~eDZmK`t)}j_$y745}c9|mOpa&m9&kOGizY`%^!!wmVvQFkW4~u51QO$$k(x+c; zzIZpm=0@z~59?=j{c+r}D zzb=@jYn7B=(eCVZJNR4kL`lOLsX_aNPd-z!UxvkMh_5F8KIZ z-Fa5&dY!8bDfRXCo^}cn-Ya|UxYD0oxE_(lduh+5E#VWk3NDy%Q6xbB1Wvk3KN2PV6y^s;}^&Yfm9^NQBC9E-q+?cbMI zL@GF~k-7XUtJ}Syaa9n@XURQbOXLmSEl%X?g5q^8A9h;Jx&$OjIn69KJfSN!T3Ep-m*Tb+~X~+ zWAa9Mv&;*=Yhm)g%lEbhnPnxH`0i6`J`vl!aN^S{dCg?L1-!l${~w9j?6+{ebMe9B zb)t8?&Y0e?mf{}$$Wb3EJku7_-{q{F>3!Kkt-0?c5(q*IUW5cbl5B;dn30CH7FL6Bo zOv2|7lN+yIj>oj$E}hN^8}CQ3F59@NL>RAEx1vn)!vTs`o=r^WxiNfmNi#a=d5#JMcm7^D40Y3Ghy zpWm7s4wq6Ff3v*v)QcY+qNZsu9NkyeQ3$fj=C8Z^kqxaN*{sKQ}Rzf z>FCh?a&zXEj7dvo+PMA@d^Y{(4jY4sM=W`#gdBGM*)h4wF-xh1QFnHa-^sJBVhzrU z-(8#^*X>#;QMTuKeRt9OCbP*0XCL4;TRXvhp``O()vu|QYh(M4Oh1y9#G;&Q$fY1% zp3c;xwWP4ct!-^X>MBv2?b=x{`zKtJzVEBt{q^VPx92y{$X0c&KbY2eyYW--N{fH- zpQOaA{vKqG|8?P}+~Z}I*EBQk?TcE!H2b-zM|i*Q{-9mn&Z`qlec~-t=bP|mNafr) z{K_F|dDMkvd&@3u&)=)s#5dob-@!?u+vQ{u6dq_qAqkI%V^TmNH=X9gSdek`ipwrp4$bH! zWk;Sm@3Md|w^zJmJJ@ugyV3Je%=(XEh0V^>TaVP=>YCMg{iT&})LP?jEt`7h1Zkgm z8=df8^YyP&9IRy zh4Gb1_Igv5c;B`y%s*#vcKs`zpDR;;9Axla)vCMY+2`k<)zjm}D{Q|?5W z?;nn~ST9=bA$sUd?b#Eh1@6Y@^?9e-Xm8LEe6CS`{g}_>N&kL!b$K^`*V_H$0)v^( zjXj@MIKA6EX-n4YOF`1>*}g=D^hmb2Wc1p7Hg3PW;pE{owY}39ah;l1kzsrB!23lD zj&BLDTI>6N-)g0&(l)lXJUquu*Oa%~H9ACbh5rm=?&~#)-nr$f+uud)T}lC=8xG8x z7RCSKM7eqRwbygj?=(MEe!r@9%NtAH+~ryKocrTiVy{^H9SQNNQsJ4ivN0(Cuqji$ z!cMowpy~HR@4t%9_78c`vMT%Zn(0-uH&r>T^xVVVeC^&@$LXfi7^FO9CgzF%+%^4J zPNfHz*AoWk;KI-iNsF#Fh9n7ew$G}WoxMjRN{j2Y^|!+rwbC=5KFxe#dFpoO#G`>v z8w_sl=*=^oEGAU-^KV(;&!(v_@@{*}E0=l|xUcXtbPg=m-L*k-%h$c}+j;$%W+$?{ zrQEtEr59E%L+4j1f+uA(6 z1j}xH>z%@TT3hq$QI+7I>7L8lHybC5c;#w_938u}zPkKu|@j9`*yd-eu zI*lz>YBN;KAKYEeH`iBlp?@8N-%X({Qm;Z(@_zpHuiVLRxaXT{#EN&H4P>YPc&?Lc z^0MCeN#d;a_r&w(wu=0Z{owYf$?aU|?tNEp2QWlw%a%NIJ@cP!a;kyG#()f+Ll$`p z=kmIkh2N2{TBdH--OBj8R&~yvFRQxlX_>HRY+AKIU%l(!>oZGl+QfRvy3IW>K6`mL(O_%D_HV0i*Lm2L#3t5F`guZY>bZL-mTlZ}p=WpGlK`eX zehDst|2s?SKM2}q>1V6TGHFUb+EdN(^ue~}1{?VzmCx=?+?V*r&890p!k~NUzc=fa ztZd!pu{xA_>r~&~`?)Vl=RPmx{kc^-DdbQ7QdUpv)V00Gs$_0m=uxiNdU9@BNb`Op zsatBQPtFD|2><4OVtInuYdLO%t-c(MoymIVL!Z>Q{}n6zeXBT9`4^KAuN+6|WrinL z4hCmyOXOd^UM|C2=&5Cb~0y?w$2^>57V<>$K)^g@x}BV$*0k z`|YNJf3|6Y;pbyq-@5-^I3}O08?s=k+T>Fw1n+V+C|1-TjZMsa;qvlOp2gSgwI}EL z2~B9v<=n-suD0RM^yk|)I{sodu@l<<;q6DcbzyH$+S%TIb9QB)NHrqx5I_yx?Gvd ze`_+GR!F&SRHRmSe4sa-I0PrA(XS*6ZSdsSowog^ud*?rzw6?}-0&uguVwp9AzwKH&c&V+jw z3k8>O#wG9zF_&qsf7rQaZHVp>*-2O4b8{DDCmwKWIbE1#r1<8vfIfEuw~+6Q zS!1jAGyVCi!pA;amPAc2wpBTj;reIWsmbN*mmXvNET8n%LG;`t{&OKW`K3Qi;y6*F zW#Y^uvwW3SO=`I5BaSHsdC4ri8aF3A+ab}E<Q6A-35!zA9zcEQ$9?HtU`x#NFnaeoN0TR_dg(ea3`^iP~-3UFVe; zsXx2z#BOnN8q?;}vLRo5xTTKyJ=(W0L6tX5?)s|S)ML|&lDnPe)da4I*v{d3JtN^# z`&z?Wq9-{H#>9jxx{5h&KDfNYdh?!K_l0h=#cw4(`5mefcIC%`1KynqYIPEKrZ9%y zc$9r)-qm$F3jW@+ORqdz7G?Nx-s$yA^Q*Z_7NqAby41-ja_RGIuTt-Y%NOSwY3`fq zx%1c?jaM$OCm5{>TeaFC*QM`L`O=45mG+y;cKZN zs+Rjx&pzpl)wvV<*z@cJn~J&x$351oZk)beS2#~i>xgxfd9RVetrX)+CAy!g-b$vm z*9ElY0~;1yx;)uz!U5?++PaHnll*K$CEB<61o&}u--w*X=Uaa1Rkgb|%QJp~iEqQC z7E4_HS7!Rg%J+N0GOfhBSz3JMNoSiDwkq`Qbk^9A`znc_Y2VguG4Ga^NmXC{9w0Y! z&$VMtQ{EiC-0}31!%LaN^R)7+x4)@bB;vRAlWl~wT-cI{_sgdJX{e}Y=a?xWpmDf$ zp_OG%=7MLXzgNr?nKa?;1Tllt_k&scpMU(eG-LDb_Uqg4`#N1RpZ?yr#C}2YQlqWH z@>f0xcRQ=KIbTaR4fycp(e*rm`(8_DubX)LMqP-Ix~q)jo@;$uSNxc%XIhoKs(~@; zR*KEv7hAd#`!hqD8)tmJlz)TYZ1tU7>y0n2&-1yhy={fC=AXNnmoxpYXQah%-Et^# zdDQdrH|=>(L!WNncQcWTp<->wtC{vK%8n*%#oBL~yyxWP@b8_R`uuzPhXX=tYn7L+ zm^!Ja^3XxGAVCX3^T|o8WaW$&eX4Fa(Dm}BYxUCT#>M@|er>uOX8PJU?n^a?=8nl5 z!j*dWEC^T3^D?z*N@~5~e0cNZ2<7~(8%`xf-{jh_Ri`a?gl)%T6VIv4nN_`o8J%JL z(_|m5Y}svVJfHiUNwT5y;VBPZGCeA|p10-W{cVa{LN|U<&AwH8-_S)-qP@5EUU5)b zoF&WCHBu`Yy|zTh+DHahtY#8U-|2bk5_e%DL;knzSq8R`noTd|TXQd}DGbbTe77WJ zp9|}D^CjDu?-t$Y4(HccAH*~J)Pu>X`$gx)ok%IRva?KHymjs6oRrCzcFDFY9T&Xd zt+S$gZrQV6qF;`_>zvRyuj%>aP2tWjCg0zBF8@``%|O;qWxAi&SCrfg+CKTWu;`X~ zhn;%2z7?okx-_ezdTYkRb#wgFw>DJfW^Q+QH?{x0^D(QCjHMT)f2}%L_JZN4(A~R} znMB`DJ6X%^{L3`s6qhCB@=r1s)7hflAvqy)oAsQ8i5pWFefhIWWs8$h zRC1v8k_H~%9g10xKHJ2r^3A?;@(g;{jd++*pFZ>aSFi0G zH%PpF+UebU>2{;1_uHeMBD$K(r)J&Tuv+_6ysgO6ZJtMX!uE#7Y}=L)FI}GE>a;J} zviIfYO>4p!zS_7vyq)&rMD`QI3+GmbC#D7c)8XoUux@Fj=Qafc^$qjx1zy)Jzw%}W z=fx;KE8D3}*W{wQ)wf+vp6tY}$=aD#J0)TEi(us|kC=Jd-ie1wC{C%7|7`SbGuw~T zGeuYCxh}Q(@weNJoBz04i(77_@BJyZR<9b?Px1YmQ~qi0rb9Ceyq_I#L={veO;@JNk>3c$zs? zP2;Xx&~s|5wD|m!MK(2mx5|Dg*PpYrqUeU_BYwd@#n0FL$;maSs#=q)YiGGKpl{;L zrT9qszZPu|`%(nKt^;KZj z3yHby|F=H8UwGu~pT7J5GL*{prIsu>P;lUQ;F^e1X|Db0`nT6MbM_@JxfX58z5Y?a z^L2B+y}gr{xBQxdg*%hYRCE8`S*OhX4=2lU_8orlhmrN;jelMY>;6ppXm7>*(4R;D zZ9e~bI}7$}1r5I@W^|O*X30ysNy%pyOyK>PUprm$$~V*hzF#Lzw)-p6mS?A*y83lb zdA??;u}{YK+h-S@cfGW20ICv%nleD~&Sy_SgMWUjFtCY#_~HAO9mi6>PGGe>@pS4chY0_3nQ6z>-gt1F5MNWC(W`E> zzh%ab*3!@U-T8CeB$vwLk~_x@iG z=dZTA@$c%-SnZl!(jHQF%X^Ca)9SV2GM!iK{&{%w=FRQ#wlzk-Hhj1J_HwtK@x2t0 z`MhHFlAHPV=6{O3>26y87SnKozN+WiL;_SFgTE4@*)+Otk@ z<>^M&tVJj0-BZi9>}5W8^?kfk#mjQjTI;Z?_UEoDpLAE9vYBmHRrBx3$IHvp|2)5b zex7aJpC31EZ0k8D)_nc&C)#aKz?ql+^2t{&_d2!nf4e{bX-2QsPdVp_yk3XXAC|hR zeii(i_iSVMc8~3!KW}#Lm$S37x1RmU_lW79%vJeawvBH;G2RN>pBQue@aa1HH~LcN zP4Cz`JEY0q;fwBh)?H_Rx6S?i53j%K4bPP>x_oe)y{0;G=c>fXm*+FegkJb?cIUoz zb5GsY=y(`p;ca2D_Lxt>x(`>HdLH!ncV1%h|GggrJU;N(I9m5_yL&S~ z_<6il?9%-a;b|DVfZqC9UL zmhUuqQ!xKzGPBG>|H~Gy56oqMRlDx#tW1sT9VfUns1tYSw!Hz5IgA zB~vsSr-dmWyrGiH^)NOmFV?|2x-SaQU}i@2`Gl*;2c@IFPH|SldV9yv~-D zEu6>yBv>g<%XCW&+FiNXu#{NAAH(tq82$i$ke3$LOv;DjuZgwp!6bx6X%vz_q z^~Bsezc$KPQudFUdP*