From d0e69120172ca1f72f610ffa0dd81774cd18eaee Mon Sep 17 00:00:00 2001 From: riyadhafraa <49757212-riyadhafraa@users.noreply.replit.com> Date: Wed, 22 Apr 2026 10:52:09 +0000 Subject: [PATCH] Rename project and remove unused services Update project name from teaboy-os to tx-os and remove obsolete services. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 3154f23a-748a-4118-aa41-fc01b7b1f04d Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/c3c252e4-c83d-40ca-9fff-99a3ea60701e/77cfe984-2c65-4152-bb7a-0df28274fe66/PVuelRZ Replit-Helium-Checkpoint-Created: true --- .agents/agent_assets_metadata.toml | 14 ++-- .replit | 4 +- artifacts/teaboy-os/public/opengraph.jpg | Bin 25845 -> 0 bytes .../.replit-artifact/artifact.toml | 10 +-- .../{teaboy-os => tx-os}/components.json | 0 artifacts/{teaboy-os => tx-os}/index.html | 0 artifacts/{teaboy-os => tx-os}/package.json | 2 +- .../playwright.config.mjs | 0 .../{teaboy-os => tx-os}/public/favicon.svg | 0 artifacts/tx-os/public/opengraph.jpg | Bin 0 -> 25885 bytes .../public/service-images/arabic-coffee.png | Bin .../public/service-images/juice.png | Bin .../public/service-images/nescafe.png | Bin .../public/service-images/soft-drink.png | Bin .../public/service-images/tea.png | Bin .../public/service-images/water.png | Bin artifacts/{teaboy-os => tx-os}/src/App.tsx | 0 .../src/components/animated-art.tsx | 0 .../src/components/clock-style-picker.tsx | 0 .../src/components/clock.tsx | 0 .../src/components/order-service-modal.tsx | 0 .../src/components/ui/accordion.tsx | 0 .../src/components/ui/alert-dialog.tsx | 0 .../src/components/ui/alert.tsx | 0 .../src/components/ui/aspect-ratio.tsx | 0 .../src/components/ui/avatar.tsx | 0 .../src/components/ui/badge.tsx | 0 .../src/components/ui/breadcrumb.tsx | 0 .../src/components/ui/button-group.tsx | 0 .../src/components/ui/button.tsx | 0 .../src/components/ui/calendar.tsx | 0 .../src/components/ui/card.tsx | 0 .../src/components/ui/carousel.tsx | 0 .../src/components/ui/chart.tsx | 0 .../src/components/ui/checkbox.tsx | 0 .../src/components/ui/collapsible.tsx | 0 .../src/components/ui/command.tsx | 0 .../src/components/ui/context-menu.tsx | 0 .../src/components/ui/dialog.tsx | 0 .../src/components/ui/drawer.tsx | 0 .../src/components/ui/dropdown-menu.tsx | 0 .../src/components/ui/empty.tsx | 0 .../src/components/ui/field.tsx | 0 .../src/components/ui/form.tsx | 0 .../src/components/ui/hover-card.tsx | 0 .../src/components/ui/input-group.tsx | 0 .../src/components/ui/input-otp.tsx | 0 .../src/components/ui/input.tsx | 0 .../src/components/ui/item.tsx | 0 .../src/components/ui/kbd.tsx | 0 .../src/components/ui/label.tsx | 0 .../src/components/ui/menubar.tsx | 0 .../src/components/ui/navigation-menu.tsx | 0 .../src/components/ui/pagination.tsx | 0 .../src/components/ui/popover.tsx | 0 .../src/components/ui/progress.tsx | 0 .../src/components/ui/radio-group.tsx | 0 .../src/components/ui/resizable.tsx | 0 .../src/components/ui/scroll-area.tsx | 0 .../src/components/ui/select.tsx | 0 .../src/components/ui/separator.tsx | 0 .../src/components/ui/sheet.tsx | 0 .../src/components/ui/sidebar.tsx | 0 .../src/components/ui/skeleton.tsx | 0 .../src/components/ui/slider.tsx | 0 .../src/components/ui/sonner.tsx | 0 .../src/components/ui/spinner.tsx | 0 .../src/components/ui/switch.tsx | 0 .../src/components/ui/table.tsx | 0 .../src/components/ui/tabs.tsx | 0 .../src/components/ui/textarea.tsx | 0 .../src/components/ui/toast.tsx | 0 .../src/components/ui/toaster.tsx | 0 .../src/components/ui/toggle-group.tsx | 0 .../src/components/ui/toggle.tsx | 0 .../src/components/ui/tooltip.tsx | 0 .../src/contexts/AuthContext.tsx | 0 .../src/hooks/use-app-settings.ts | 0 .../src/hooks/use-mobile.tsx | 0 .../src/hooks/use-notifications-socket.ts | 0 .../src/hooks/use-toast.ts | 0 artifacts/{teaboy-os => tx-os}/src/i18n.ts | 0 artifacts/{teaboy-os => tx-os}/src/index.css | 0 .../src/lib/i18n-format.ts | 0 .../{teaboy-os => tx-os}/src/lib/image-url.ts | 0 .../{teaboy-os => tx-os}/src/lib/notes-api.ts | 0 .../{teaboy-os => tx-os}/src/lib/utils.ts | 0 .../{teaboy-os => tx-os}/src/locales/ar.json | 0 .../{teaboy-os => tx-os}/src/locales/en.json | 0 artifacts/{teaboy-os => tx-os}/src/main.tsx | 0 .../{teaboy-os => tx-os}/src/pages/admin.tsx | 0 .../{teaboy-os => tx-os}/src/pages/chat.tsx | 0 .../src/pages/forgot-password.tsx | 0 .../{teaboy-os => tx-os}/src/pages/home.tsx | 0 .../{teaboy-os => tx-os}/src/pages/login.tsx | 0 .../src/pages/my-orders.tsx | 0 .../src/pages/not-found.tsx | 0 .../{teaboy-os => tx-os}/src/pages/notes.tsx | 0 .../src/pages/notifications.tsx | 0 .../src/pages/orders-incoming.tsx | 0 .../src/pages/register.tsx | 0 .../src/pages/reset-password.tsx | 0 .../src/pages/services.tsx | 0 ...admin-create-group-app-visibility.spec.mjs | 0 .../tests/home-clock-persistence.spec.mjs | 6 +- .../tests/leave-group-successor.spec.mjs | 6 +- artifacts/{teaboy-os => tx-os}/tsconfig.json | 0 artifacts/{teaboy-os => tx-os}/vite.config.ts | 0 lib/db/src/schema/services.ts | 2 +- package.json | 2 +- pnpm-lock.yaml | 2 +- replit.md | 7 +- scripts/post-merge.sh | 2 +- scripts/src/seed.ts | 32 +------- sedMkjeJm | 71 ++++++++++++++++++ 115 files changed, 102 insertions(+), 58 deletions(-) delete mode 100644 artifacts/teaboy-os/public/opengraph.jpg rename artifacts/{teaboy-os => tx-os}/.replit-artifact/artifact.toml (62%) rename artifacts/{teaboy-os => tx-os}/components.json (100%) rename artifacts/{teaboy-os => tx-os}/index.html (100%) rename artifacts/{teaboy-os => tx-os}/package.json (98%) rename artifacts/{teaboy-os => tx-os}/playwright.config.mjs (100%) rename artifacts/{teaboy-os => tx-os}/public/favicon.svg (100%) create mode 100644 artifacts/tx-os/public/opengraph.jpg rename artifacts/{teaboy-os => tx-os}/public/service-images/arabic-coffee.png (100%) rename artifacts/{teaboy-os => tx-os}/public/service-images/juice.png (100%) rename artifacts/{teaboy-os => tx-os}/public/service-images/nescafe.png (100%) rename artifacts/{teaboy-os => tx-os}/public/service-images/soft-drink.png (100%) rename artifacts/{teaboy-os => tx-os}/public/service-images/tea.png (100%) rename artifacts/{teaboy-os => tx-os}/public/service-images/water.png (100%) rename artifacts/{teaboy-os => tx-os}/src/App.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/animated-art.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/clock-style-picker.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/clock.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/order-service-modal.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/accordion.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/alert-dialog.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/alert.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/aspect-ratio.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/avatar.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/badge.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/breadcrumb.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/button-group.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/button.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/calendar.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/card.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/carousel.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/chart.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/checkbox.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/collapsible.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/command.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/context-menu.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/dialog.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/drawer.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/dropdown-menu.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/empty.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/field.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/form.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/hover-card.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/input-group.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/input-otp.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/input.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/item.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/kbd.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/label.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/menubar.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/navigation-menu.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/pagination.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/popover.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/progress.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/radio-group.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/resizable.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/scroll-area.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/select.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/separator.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/sheet.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/sidebar.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/skeleton.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/slider.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/sonner.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/spinner.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/switch.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/table.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/tabs.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/textarea.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/toast.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/toaster.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/toggle-group.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/toggle.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/components/ui/tooltip.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/contexts/AuthContext.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/hooks/use-app-settings.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/hooks/use-mobile.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/hooks/use-notifications-socket.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/hooks/use-toast.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/i18n.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/index.css (100%) rename artifacts/{teaboy-os => tx-os}/src/lib/i18n-format.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/lib/image-url.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/lib/notes-api.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/lib/utils.ts (100%) rename artifacts/{teaboy-os => tx-os}/src/locales/ar.json (100%) rename artifacts/{teaboy-os => tx-os}/src/locales/en.json (100%) rename artifacts/{teaboy-os => tx-os}/src/main.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/admin.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/chat.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/forgot-password.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/home.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/login.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/my-orders.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/not-found.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/notes.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/notifications.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/orders-incoming.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/register.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/reset-password.tsx (100%) rename artifacts/{teaboy-os => tx-os}/src/pages/services.tsx (100%) rename artifacts/{teaboy-os => tx-os}/tests/admin-create-group-app-visibility.spec.mjs (100%) rename artifacts/{teaboy-os => tx-os}/tests/home-clock-persistence.spec.mjs (97%) rename artifacts/{teaboy-os => tx-os}/tests/leave-group-successor.spec.mjs (97%) rename artifacts/{teaboy-os => tx-os}/tsconfig.json (100%) rename artifacts/{teaboy-os => tx-os}/vite.config.ts (100%) create mode 100644 sedMkjeJm diff --git a/.agents/agent_assets_metadata.toml b/.agents/agent_assets_metadata.toml index 8d3b02e2..2a5ac509 100644 --- a/.agents/agent_assets_metadata.toml +++ b/.agents/agent_assets_metadata.toml @@ -3,42 +3,42 @@ outputs = [] [[generated]] id = "eD84DGRCWiOa5scCp_Thx" -uri = "file://artifacts/teaboy-os/src/assets/login-art.png" +uri = "file://artifacts/tx-os/src/assets/login-art.png" type = "image" title = "login art" [[generated]] id = "Dy7wCo-RCUzJlVjqDJODC" -uri = "file://artifacts/teaboy-os/public/service-images/tea.png" +uri = "file://artifacts/tx-os/public/service-images/tea.png" type = "image" title = "generated_image" [[generated]] id = "zvodbXSr2tAsyVcYJXTxE" -uri = "file://artifacts/teaboy-os/public/service-images/arabic-coffee.png" +uri = "file://artifacts/tx-os/public/service-images/arabic-coffee.png" type = "image" title = "generated_image" [[generated]] id = "RyxcoHUo53xV4Vm4SIC9u" -uri = "file://artifacts/teaboy-os/public/service-images/water.png" +uri = "file://artifacts/tx-os/public/service-images/water.png" type = "image" title = "generated_image" [[generated]] id = "mxCcnlnUFIa-DVsz3EAkI" -uri = "file://artifacts/teaboy-os/public/service-images/nescafe.png" +uri = "file://artifacts/tx-os/public/service-images/nescafe.png" type = "image" title = "generated_image" [[generated]] id = "BsyqgR_m14Yf0_KjQ7IG8" -uri = "file://artifacts/teaboy-os/public/service-images/juice.png" +uri = "file://artifacts/tx-os/public/service-images/juice.png" type = "image" title = "generated_image" [[generated]] id = "rNA7O4IB9yyq38zpUWFi6" -uri = "file://artifacts/teaboy-os/public/service-images/soft-drink.png" +uri = "file://artifacts/tx-os/public/service-images/soft-drink.png" type = "image" title = "generated_image" diff --git a/.replit b/.replit index 2ed52fd6..55986d9b 100644 --- a/.replit +++ b/.replit @@ -26,10 +26,10 @@ author = "agent" [[workflows.workflow.tasks]] task = "shell.exec" -args = "pnpm --filter @workspace/api-server test && pnpm --filter @workspace/teaboy-os test:e2e" +args = "pnpm --filter @workspace/api-server test && pnpm --filter @workspace/tx-os test:e2e" [workflows.workflow.metadata] -isValidation = true +outputType = "console" [agent] stack = "PNPM_WORKSPACE" diff --git a/artifacts/teaboy-os/public/opengraph.jpg b/artifacts/teaboy-os/public/opengraph.jpg deleted file mode 100644 index 156fbf992b02b030d324759803c194ed0576b861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25845 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 aVnvFesd>l3(~(h4%|W0=t%Abee*9m#9{cM6 diff --git a/artifacts/teaboy-os/.replit-artifact/artifact.toml b/artifacts/tx-os/.replit-artifact/artifact.toml similarity index 62% rename from artifacts/teaboy-os/.replit-artifact/artifact.toml rename to artifacts/tx-os/.replit-artifact/artifact.toml index c9cacf54..6ce20a96 100644 --- a/artifacts/teaboy-os/.replit-artifact/artifact.toml +++ b/artifacts/tx-os/.replit-artifact/artifact.toml @@ -1,8 +1,8 @@ kind = "web" previewPath = "/" -title = "TeaBoy OS" +title = "Tx OS" version = "1.0.0" -id = "artifacts/teaboy-os" +id = "artifacts/tx-os" router = "path" [[integratedSkills]] @@ -15,11 +15,11 @@ paths = [ "/" ] localPort = 25785 [services.development] -run = "pnpm --filter @workspace/teaboy-os run dev" +run = "pnpm --filter @workspace/tx-os run dev" [services.production] -build = [ "pnpm", "--filter", "@workspace/teaboy-os", "run", "build" ] -publicDir = "artifacts/teaboy-os/dist/public" +build = [ "pnpm", "--filter", "@workspace/tx-os", "run", "build" ] +publicDir = "artifacts/tx-os/dist/public" serve = "static" [[services.production.rewrites]] diff --git a/artifacts/teaboy-os/components.json b/artifacts/tx-os/components.json similarity index 100% rename from artifacts/teaboy-os/components.json rename to artifacts/tx-os/components.json diff --git a/artifacts/teaboy-os/index.html b/artifacts/tx-os/index.html similarity index 100% rename from artifacts/teaboy-os/index.html rename to artifacts/tx-os/index.html diff --git a/artifacts/teaboy-os/package.json b/artifacts/tx-os/package.json similarity index 98% rename from artifacts/teaboy-os/package.json rename to artifacts/tx-os/package.json index 88f7a885..aa8f31aa 100644 --- a/artifacts/teaboy-os/package.json +++ b/artifacts/tx-os/package.json @@ -1,5 +1,5 @@ { - "name": "@workspace/teaboy-os", + "name": "@workspace/tx-os", "version": "0.0.0", "private": true, "type": "module", diff --git a/artifacts/teaboy-os/playwright.config.mjs b/artifacts/tx-os/playwright.config.mjs similarity index 100% rename from artifacts/teaboy-os/playwright.config.mjs rename to artifacts/tx-os/playwright.config.mjs diff --git a/artifacts/teaboy-os/public/favicon.svg b/artifacts/tx-os/public/favicon.svg similarity index 100% rename from artifacts/teaboy-os/public/favicon.svg rename to artifacts/tx-os/public/favicon.svg diff --git a/artifacts/tx-os/public/opengraph.jpg b/artifacts/tx-os/public/opengraph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d439cdb48f50da2ba41fafb33b38721de2ccd749 GIT binary patch literal 25885 zcmeFZcRXBM`zXFikVryAi|&vh2+?~_u6Z({p_bd&vNwr=m&K1u8NupL_`EZ zMBoQH8YB9ycKf!)JsoWoH4WvH3tu6yoxTA<&MuzrI(Kfd8yTChll?fkgK+JEmB%B( z{@-k1+|3@s=n&L({onNYU!6Yt(AvWabXW#|SKPtF!DMLwOk;Zj^AKRm6Ihl2`*=R` z1byxiV0S&8+W>wDU>@6lz?T1jtsc1(`bU92vd&Ikgl7>p!i>*byXfnJ{TcAb40%90 z&>iR&;r+oe*jzIpNOA*$PW|!sIm=fNRPh9YF8BX^?n*iYQT`4=@3DWM`x_^Z9=Ja^ z9_}<~iEV5kXf+ptE*L`)bvp!+-#@+vntwAlc5sOq%*z%0*g{T_HN+07K`xLLBmf{` z=msPNi60F>w;|HgB%~y#Nl8ga$;e30kY6MxKYNy(hJy0^MS7acm+5Kf=one9vN1Ao zGSktq^RshuabM%T#=v&{#&w<>S9z}S5C$P4BO@a}LrzUjPR+we$H?=4c{}sAGp6j(Qt@}y8RaWhK%!;CG971&$7oWU;xIS!~Z!r z*dLEi3a$xL5uQp!1kiKp6v=T9A}Zojm#BXcg6YuG-Hbg=BK%;Pl;aJJ+b7OjsE*O2 ze(3xuFdwQ@RFDF+d*QUd0C74`dMG;&@fp^KvOkz^Dl7Ge5{F(P;Z;7(&Yp`TGT_KS z2%|_dvh?)r<0BAMbp9|C2N5|h=`Yx-BzL?KLom9kBwnymN$#|3FkX475~mDP-eze;Gty}yZ7n+SgqgbH`|V;eB7 zOX(VKMu%H(t-Z8$$E}1cU|Jtmulw`$ZQ3T9-LdmxReLnrwY=it9d3wQm&^Y2xI!i6q$8~9Ha5LQ8n)borLz(T7gQ|6$iOK)(4zAm&7>T&NBWHo6i`VtVX9Cn@@WQ zG;}Jc6g7JFY*S5J_3X|WH-?U!cXpprxRN_E$>bPa)v_9UWiFvLMJxrXvJu}Cu14am z!~sb}mGh-UeV?(S6S2}TYK%@0v7)s~iK;M0CE+Z~th|z1?IRmKkp_+$24;M;k;rU^ zGUFoQ_=5QOsH^sui-aSesm3RD8ki_vRD|6l$Y$s?L<1=j0HT{GT*sC{6M_1EQ_dk$ z?t_FccKXouP<39Qq{V_`PrWoiK_HE_Fzl}j< z@n65clK&>nUwHQs+09v?=JL|^3*%m zr3dn}YaUo;p$fjd4YNDk@MiZ7|JNzkDvT#hKYANoDj>Sa!w*p!LH?gv)6c*m3nTV) zC4Kvs?SN;$7R27u|BcE7p<)H&EvLI;^tDLEB&wj1;|m=xFCWZGq#bt?kjCS87}bm~ zdi2u-#=rPGZP0_ci#i-14NM-=@hTsqjDR)>VoO2gUy|S)iJk0jI%ar=LXNL0Sq{Rg zIKb~X%`3)q;7F`p@V%%4dz>7xg1h zBnTy=NM+^Si~8Co>B`S$jjqj|`Janb*()w0Ofl&(*B-hk0jX+(M5wA{!jcFKCdQEQ zwN#7~c1gMOYpDQ1vYK5(+I9Jha-p(7D^NAvT%Tag0t}3piH8{o=+?Z=YfN_8u$bD2Y1Hh8u-PQ=y zu{7a>!7meN&q2tFwi9JkbVs_?1;`bt34*BMa|0L3jEaPeisK1gfFk0fwG!jg2eRlz zk%&>@C4jZkPL2%y2skXB3J4vVoBu!*ks_Ek%|$)3Y4_6N1|FJww?g%F?{Wwrh#8ON z(|RaP9`ToZI^?0`k^HLdRH}JYd6AC`_?3;`8nqxDuISP6s$_CBWeVlBAdTQe23PFk zIbj^>1+g##eq|CkmF*jn4elb{p2tPX>55d!5pT)i_Za^&Z@{yI{lU$ZyF9Cou*z>P z5|;}JD1#-T@?!IF%CULM2oZy8wD(B#ZYp2w3~eze;6Pc4RkvDOrQ98|%(jngbwL>w zG+I_0@QLL$TE1_!EN7krNHQ)$na*Wfq6nO+pVSEYxpEy-Rk;q}Ry~K(Mh6j{BK2t- zq&080<+~QqX9gn5c`fPpAo4%;GL#Nx2N8!t5S*PmyVlLrEkG;0OlIHWo!6_jwCuDU z3oQ%J)c4yf<h zRQll6BCpX2^L|07C`ZO-!LlMFQ98WmXda(qR7KG$-qe?KoV%$Sd0Ni#OeAzljpkBD zCvhm4$Df;mT&7#ZuwX_E#|eEU;T*0wNH92v5y-0>p@dM$Fr9PR~xk{BbhO5@`gWN zAH0bluQd}F2@9V_cZC$WxW%oqhlAl#Q)GJ%P6t{p+xfdi$0JCMkqS=0t5$~>YmYUTpmZ(Jqs8) zM<{WlsveakKTPrXg$XYWG*D_stuf+G2RimXqDja_jG>6Y4};c~I2-UmdNN@zXQIV- z8LjE)>=2ylmv}SMGp;HtTJve(>=}wgi~;EuwBGFk-+@4{J$zmSHV)$NDHMyuS)%R( z7KcSPx}bvi!M954wkf-BvwQiN$>}=@)DNr*@C-3t9Qc;k^ugEF$@|*EgHeMy5Y2gx zj!sOycYBcFt=Y%5-xgfql9m=17FXYpYGl1W?uin>he@0hK$afN51RL~_Fxhmkw3;} zxw~vikDwcsn?4HPuyMJV=@y^NpjUx~EHw&x{wdrk^QH5{>JklUY~l)946^3tX>rkW zaWVX^BbSy@`E3^5(GqT2vsS7Ch|BDD9g#$tkZARdo1WD|45D-4bbcd4O(Qcbx#~k} ztN5qX)5EiE;@Oj&jj_G(aQXYl8&x5yOCvLtA8hCo1#<;Ot>OwN+kC7St=6rk;LrWa z-tS1a0h1JqTWvkikX^?XFIo-GJbEp8AcD78TrRS;b(D>6+NntJ9&mntAchEI943xX zxb@MSiVAj5k4T9|?;=ewvK6LSf5(q6B z{+){uQ%q(IM+H+9K~oO82*KSdTV2F11I84qoNH`;gz?=q&1ib%*|M0Win7#4IKM37 zC{Wf@DtK|J%%IHJ&a&JXi3CcKU}2mPgoqJ=bAehcC-AITWcM+x{A5)?KQ;u>XN=S* z$h+ieAknU?IKqyMZ95WEMhkVmCq{j6mEWku@0+K=1!rWCgS#4avVkux4qV1R_b(K8@0NW}yOTJ& z-rIq--S~2ld~VHe`v|J*`qEcso3ZIy*m4jjXb|YLSGFg}efVMhQD50d%B7}C z)G9Ad-)kp*p$NegNjhkW9%MtbBqWM3%WFU}M`Ss0q>Dy=MLnS7KQ64OhQqxV_o>?HwG$eoGK5fEWRukDWKmI@Y$7k zrp7#sTizE3393#p=1CWQn|GyUv^ge5-wMlBGRk=JYVJD6-hGl6uLC}?BOe2ho#jb5 z!Y2mm8MJ`O`DhEk=Vd?|0LC9A@c6?5&^AM5UZ$XVRCL(Z=>MsoX$mh+^vXo2w3-bIT~qBOtPOS zV@r(%7>db=;i_PYcB=wXZrr`9Dbp=c6=!LX2}_uCFt}=L^3055;hBNHb$NVBB;x#n zcSd#|kxsG=PN&D-QM^nKsSnrz#wP|~VBDA-lYE8g9Bp2FWH&&eO;yhvEkJ1*0hww> zMFx(vIgSL*c-MNj9N_70UZVr2n1hHuc^*PZ`8Ex`YGr!0C@*;d7ee3#AQ)5XyQB~) z^yV?S-6!Y<)$P-w8NVjcQd5yAD!DQX7#d+5kqs0I3Rj0M3@&l5Gv*|zbi`)0|B~Iw z!}_S5y&5{DcrKkgI23O273NjuSh*9Z1 zd!Ip`U&`KDRvu6LM!e>xAr4zql%D7Gg4Xyx%;0SKccRi$YMMD8jgrkCKP$8Q88bM> zCnc6=u-Gl%;x?E|)B~)?Mi&v| zLL+3)^Pj{i<|r1KPr#~J9>8Z(s{}TZWV_w$Z{AXkS!6BoVR#NA>IO>jP#rr zB<*K-&hUnDDhd~z;#4KT92{a-i{s$Be#7&o%vl3jW6xcmZ`pRt-ES638c*6=%5E8O zS$e%3F_S2eQ;GKusrbeCUGP&*Rb+BPg6LU{BC`hThd@bmc%JEj{rHu8xevH+q z+n%h#r{ngEjE!7yuj_-8gOfX-^$Y#DTjMuO$yU}d1pl$JCoA_or5qi`yD+sa8;qs& zW<9y`^uVwySZMj zY}WX({^Py}nZFlSxRSy9Mi(1Cjcxh{yzOXk{Ff6bQTIN+5-{%DEyB3`a^Lw9T5G^~ z7{YAmOB;ql$IA!)r31x%&41|-A$7OLbJ@2pfpuP%RnR)Th6wBUe*YM{v^;tQMOBVe zhw)<5m}{#1gADv}jF2WRml%Y_smNxJVFl{?!yl~Y~6Zqwta z<|tl-G;sJ_rfysw*=f?~0L){hV|lA)TxblGrWnE8GO zInN44a?_HhnwIva?p<=?BvUF)-XD*jp3S^Vo+O$c!Sn0mH=&4ebo_=x(1PRnAPJx8 zrxZH(1KZ-Ft=1MlEE)R=W-8Z?Y$WDN)ft_)yln`?{$&NxLA*Ve4D|fgYck(p_EB{KCH?lzKy@2H5&f@ zs<9!gN)uH+V1jTO;A&+A$WIn^w13y{OzUie>vtAY*XeTVZ$myo_5+dg&ZIRvpMdH9 z_o!o;Q}z?>j>l-%e`Z_=oHUz^OtCCwhC(V{oXQ{f95{F{uy=BV7UX4`vxeOIDlF)8 zZ8j$ng1Kojo;r1xu`pEZM$2wNo6H=}^zt38DUq(kZ3TD#t2q?G{0DertPXl8~Br8N;IVU ziVy9HXccWhB=2VA)@y~&4a?{()Z%tXSoml(Ye`4(^~Y#xRe)9EP-5szMiRll248@H zaEJy(CLoAm0!twvTQ-4VzR~2$Ut0Y^swQe0BjX{@qwHHAK6FV^R<<*eUN6U_!#RQS7K7POkC zrNP{)Y7Eol)1HoAMKhzuG0z7pY;xXyKbfoB%5sUoy5xj$#iS0pXRI zFq8wOh2j%)Fd*0s4xBJ56@4n5Qrz9h3raM!R5!Df-yjst1b!1O?VBqQqqXI-(6pcy ztl1aI?wtN`b(eeF{0KTkr3fS{FKHLj*UKY8teCz&NGBw$KCv^&jM%hj1GiS5d8-VV zSsf8=@t$^{sEQah7&@{$GD$t{i@5$!vQx5V?6g1KX`gj-mnF+l<+Vm>lA{U&gqveM zZB>#k03b{W^v}A~vC->Jquw$*L)EA6DMI(?RXOrb zXpR3km`MDY_ZYXpT|0sjc7zwAJLZodu3ht{1@rzXH09x)ycucv_J)jcY~=l?B5`qi z*Hh-IqQ(7I2D;qVHb-tBL2TMrYx7riD|Tz84=DBVmk*Cq=~bkhtcm*QWiNVtr4?r=|%u}NHQ zNG|hppPxy5($yD*t(WNvEN#=sWy@J&u$cQ))*iTq^Txh7$e)mSk*dCt@?BW-V;ca_UO4=ou+0O|} zk(rEr(K3oy)70$C-DEM`M@-()$8@(fu2NQ@#wTVL}AL=b0 z!iwyTaPFOhH>Yv!vZ8-XVbfx=o5o|f+|?6SE3n)f0nhuUt@Z=TcI&UnX04_*7vmP> z(F^i18KVourj@?_sfi5}Gut5#DhFPp{hL+?rzH6BgL`T7>?08&=AZFWjdK6v{ z+piZKtEZW#_lB}dZAP)Fgy2DXCAsg9! z-KMk0QB1|5Oy`{eaF31Rd3%f<*w1%g%)HKV{bu@U7%goU4db(H(Tt2FeZ9`F89&Zt zcm7B+yOyn|-;sUMQRM|-wa%Bo8zMbF-E}ieT2s{i1~?`9YYSk~I4aR3yPLlOfYeD- zl#6p+=2rCk(&lU$(4!-r&<)&VB6@ztvzjQGp{U1!!fVmj_CPZD^7_W2WJnl#+bSjx z=c*`)()Jv zys^CH`la`z3pinV+(XknC{S)-#q$F5#((J$vlskn;U_Ig3D_9ge9!vzc; zKj*)8XtW88>k?`S8nz~?6@Jx=@XD+f3|mG+WRR&+KHe* z06{0-%;db8$(MbBS|t%E6jTz(RG&%-aAEtga(H>eK(2yv+4l%Kf505rkKnn(q>82d zRu32Kd5@-SEjxmo>UE++g?}pM|LN`&b81uwodVL2k}a+y>IfQO>z;rhsg0lJ;+^2k zonVWGkUM8C5Tc#`FdU!qBULi{Jo$8xHv0Wvj?HpWL<_Fik+&uK`EwL+OD9n8OlA?o zt*G+;8DKHWh}#od%_OV);%!|v2xs7^W)yeXC2P`(C**YL^*i+oXXrX*JhOKYZV!#W zM-@+{eDHAHlbh-jcMIG2QR7pH_ zYsRw@iLm$l_2V$&vQVbxbVo$f)02EJNcvk7GXD=iBgCL7meu)dTb!mn!=35iI88fG z25Uwlux}T(FXDKXdAFKW<((Y}-pq-S$*^{XZOeu{4URE3{|QBT7=1r4Dz*P@pq69@ASHq4CV0dCVc3=Cqu-o!1n^i|p z$#0`0j%mBwmqkTR0M?(U|Mwkk`5N})4?mDS2`Ubm`|XUthF+N>ZCzD)CTqSFp?MBSeJ#)2@{HlL!?- zupOcJS8$Fkxx?C0jIY=8{_n`f0oBfyZw1wemQoa*L2SPMGegHbz|%Fy>|KsKW^w|* zKZT>jlSR!4W~IJ&@@=~}KnW3Dzpf5bde_epai*QU6-He8R*?pBAbSHdAt4FnEvI^r z9j1f;$>m68P-s$mHs_scPg0{A?L%XFQcsW&)!{{Dce(RNS}~eQ{E}_pXn%am6yfOY-UxXK#wroDu!n2n^vY6tC5~h{_8; zd<@ZS z;%;D&E4teBouaqt5Wn2hWncDdUNX@!1|2xAy#sMG<%yWqkn9okM~zR;tn8b4O0GSbxU|Fyp#_1s;>oeGajdDCIKxt$>}s#K z)zB+VSFDqrK(fuvWEl{t>Ta;f7*s^7toUzP8+Z`tG&mQ`Ms zYZWV#AGPZoh&h5-ywNt^^zpjya}E1y>%#hKnfJ{soITCxb)$o9OsmEpp_3*RLJ}tN zJ;Kd}_;s}dZQC8GNo>6NolTzwBX2=L8@COq4LJqd%_g%uA^Bq%dG+uGxe;^WaW}NF z`qVJeVdYEju1|dGJr8d~?l^_FT4~Afav5ECCRVoM#d6vB1h(!;g5MG3?yxgev?c~- zw7H}^$sHT?YJeq}SvKg7?o(sinDb?4k*lfB13}a?Ar~e}{`g?z`Py84)6m7MER%iX4 z@zE0er8RNaBxDc$yy|7u!|MMq*Y()kvKWx#*6n9O^tyWojiLE#1l&!9FaigqlksJO z$#Sf4f#HyZ)O+S%SNSSxtV+vfs#7z|s$I-A+*-DlU%#~auxK_Q*iltw@hLELb>Pj! zLaIR9YIv#N_MS!N_~@*En|ZQ)aw1$_)&tG#Te)2xE!p=XVXH!R({H$Nh-`^#y zqJ}RfuG#$CeDL7ta&>B2X3Cu_GpnzIn$u`nGzV*k7B@Crv4-r2g>fxQ*J?c8`!Awb zwafN6W0K#XBfZRA?Y!>4G}q$yNEtq_5Zr1#^}gAuUO6P=k(P$9Bwk!s-Z<*jWE8H# zJb-f_`!?{8)yz1IK+{4RPi|ZweVOFySlu1#HdnU7&ntu6Y}^65Ro7oRV)0Fm+UuKk zP~>0sI?JCd&MpB;8Pfj>sZqA(A(8&YNsZ4?usn|9j0J0J6Tr%r5j{=Hj0WD$x{M5c zZ<`QhZ-G?~HQ2QG^JX|He*Z0+qHl>hQj15bE&068JplU8w*ts{PFf${6V8(cTO+kyVB}|*=MDEJ!Y^Y_0$b%TEPd~VR@6I*j$C+eQk;$slBZ+ zip<1t`PT<~E3#7S_@$8u>EhRc$I!D;Y!Tu9MM+d@b4ZgA}oIt536QN}HJ^Ys`{offv!yP?^e{on5k|+CH zwCvu%D@|)Tp|=p3{GW#5(x0v)5g`+P5)&f`(qJcNW25yUmEYq{l;gcy3V2Hkc%B!` zUVBFm^RBVhq_=4|1An4K)XEn@qkm64^l1mJH#?v_@-v;}yw7=g()o?vkl5#+W&9n^ z-a#nwqf>cyT;dlAioQT~%_UF><}SvOMX3Dby!)KL5fuNac$P|Ve62*PmP*^bEItnk zmxjz|$3W<2#%oJ}!rx3Hvl`Ie+>qAnF(I}``)f*X>5PRX#Azj|Q`cophZS>`ns}{~wFB0?A{T-;OkCtX zvfZOZB5a$PU}I9CUwzuAP-sw4%KTM0Gl4a*3^P-G1hLv03J4~L&{-6b_En8X>oO&X z@J%P|%ys)2_js|8{R(RH)B;|=+_Iir+^Xew(XnnWvGBg{wWaWQp%|V$vuFNj*|Sc; zP~tV;#t zX_@q0Egh_^>Baj5_Rgd%Slr&dQbq@Hg#M{2|FNfJdgr&}?}DB6+YLTn9ql47Th#}v%^xiIfDl`fChX_O>;1g9yy!MA;1P$%=Lm9zqGTwe-4ZT>doz=OrSy}#S zv!QSD^_l(~{_= z^At5jnC7-X|27I&N_fstMI6iik_w32tM5jKC&r~^%9WC7x?Fs~@GrG^BE zW7r#UCmPLU5^9@XWonytJwIpYl zBhc3b#2qkm{({eg;$i|=nWc*9Mz9k_na~+-Q^u{~qXGts7 z6!4t+!$gYYj2{hQVU#MDHSat>ll~8q{#Wpnlx?(pvc$UoCn?#3=JiR1?vW!%`xi{i zIrpVWv32b?xc|g^N&0e2j$1!pKRz;2NuNepkB%b(O3x#X0A))N#OV+*6v`9Hb6Sx& zBQjPs%lIs<0hJo#9}ZU#c0k?g07c7)5F_YYMxc>7-9bq#jPUiV7$2+RQmw&0R+rh_ zz>H0t*%zP4vS=;Azb-k>YN3f+T@Im?;qC}rsl*EO9+WUu;~M8}CA6{o!Ge^6Md2Uo z=>1*8;waSCT@Cjoo=Lyjtz|upP+dr*2=p-?cdHN7nu%7kwp5wA4ydS@?~<61i)Cq0 z3)08Ha)x7W5r(a<>sfbPOhwUa4;gz1Chgz5jQhaESu9|=!AME+cc<8h&Ix*hkWNxw)guE^bE4^`l3fmn_BAagOAgB(X zD64TnRry%2Y3F`>?YlbZ5feGUjqsBvBjk<4emaXD@Bod{f zD(>S(hOQsB%_NF0|H}hd1-Tv9nS%tmbury5Zjannts4^p6RTvl2l&@^16Oxh4Ygat zVV}^gjn3l}O}2>ARt!GX5fArWjdN17UOky5Bl`TKoyzf;^&~rMz|#MLz2cy(dUxH- z;CFo*)q zzT2B1%(T*-=H(t+8#w&rdtIt-OVKEnO-o|`%I5<{PjsBrbW63C(}90|kKk_ySXN71 z<49w@A?0%25p+PPeu(wnl?|TVGFNKbMWOcvpCxw0YzqsF+=;nSuk7Gv9kNn9w11f3 zvXs;HNuer+%tE^Pz+p=gpUW5WCaaSnNNYb$;;ceRO4KSwP}5ayNGw43SV!P0ON;4g zDr8|)izZS3^&dHUef57!uekMUQgwH8If?;WSn{%Z>d z7WSU9a+#ghU0xE2pIh42$0sn+lk#x4(z!)npXS5IYv#r=@=|S}-lGQl`nBX%K>bGR z+_@6d?)91!`3mi(4XyzZ%npdlTO?|y{XRO%n*2^SV{UD1R??p}F7NfAnYJK>nF?tYug)oof8@3~<(^R_u(Keri4$*LO@KQL^2vi1qOY(-ZR7X98G z_P&{sl%|M_$(eby_-J%GxuVO*xdQ9_eyG)c8eu*KL84dDU;ZF5J^_Ri~9Zifxc z9@uj+Y4TeI-^yjGhn|m^hL{UAtT5X$pcBt}gkVgo4TfH);SbJFr4)5}tZasuN$2;h z9^w_0UD?7gnBk@Eq=Roc62WN($Pnd$6jufHo-HYVm-eY?DM_0WVm51wV zjvZTd%e6-kwbbhC61FSj9ktfa>th=#{6Fx&ZOEAa(2L1g79IyKuy#tznx;>{=J1yH z65c{$cu6*I)|Gy7lg+^vBWYtEoF>a%%(<~R!^yQw5#chI?K@EF?(^jZ59;TQ!5MRneU_*;nACh`sikK z_aF+JoZVs-L+>FtvSf^O?=g?j&appGl=Od%m!1EH=BAK{NogmecKP4u!n^cXqpMpK zNsNv4Ri5fAU(~xtq;whvfgc(g#S6*G(C;wSd|J^ns-1Rll86hcsyO{CK+)42FK4mO z0D7LO3Ha6S{7Ej#W@?OR+So2;6FBmlnGi7VzT(VmEQckL(J#ja0W{c{5BH#jBQ@^7 ztl;#ZOEikjXL?y7CN*Ojy&CY?tG=1URz-f(v%Fhf zoCK^vABQcofLu@Jn*1T}#gulp#hjF4{w)~uyS9||)my*raPLiUHjnJ zsO9p7@cbRM?;%c`wo{dd+$~xSd$wf?V(1m~@%)8)tJ={y*6;plFH*ucu{ObuF=K&Q z^9t_+MAl40s4Hg!T)!_#`lH{o=1y`yI4JK+OB&xUY0>(;=XgAXOmy!1gXpzzWPq-= z{%YLY5B>AlR=0ia7b#CRdyhx+VbONpW5H7zZ8qTcv*rcg*Bp-wMhiL_Ed{MR5RCR~ z=#hK7p>R#++(I$o4ZeUGTR3|k&)5yOIf5E~v=QSZr~UV%<#oL22h3jW6e~O%^pdNX z_jxU6H9)ERe(Mnq0J@#Ay{o=_e*&}Br5M6f)tgL%bMrYvGSj7m~-9exXoX>KxL>a#<=hUUkvIl!$w&NQ0pTTwM)gr&<0B_K85TT)O zx>q>lxtKCiDTY(;(kZO!w=_tD+fQJA!3Cj59}N7U~1^`+_FF0d%}ZeZ_Zu7K&Vp?8zw{eg6R@ZmEDq=8C#wW4o%WIvR<`!+sCCWBTtB{l& z>w#vAV)gx77h7_}tj?WF67T6E3*n6Ip%n=maBM z#2|*LP;l@o<)+1U8CY-G1rpp53oh!--Bt)pSTf(<;B$Ysdd<|7gG=?DX<~k~m_*9> zAw+_N!A78Oh*RnF!;)+Z+MSV6Ur*`P{X|^q@dF0;dF4a($u`<4_%pxZ(f|S86q|g3>{mu$Z=r z?i#1>m)Ne$omq%+dS){r#BJTngN<&Dot6aEGZW1R;%^tYu3JR{g@jOfho)PB6Lihf ztVY60DnM#xz^L5Y@1t<_`s>tGF+5;*}9SJ;2pr$MtzcdCEr*y~a zx2fb@|6140yqD|Mb;nZ-TkT^elky&L`2{GT$2`xKYyXS$L06_)JN-&5U2bkZ{ z-mj-0O-q+nBw`cUxqk#r29+N{i)$eV!a>42n8TaXe$tfu0lE~XPOoeGJVt|Gd(N4YCU)b*Bw8LWc8ty`kI|~Hk0Llk{et1jzZs#x5a*VUka;no5pr^w7{m0 zBlcm%zUzTP`aCNj{GNFi7k+N*VU4%5Qqrlx!H(eyWLK(ugyT8}ap;hq`eZals}r4# zKKrRXxHpD*EX8LYR4dIV0c*3Xwa$62Y&E>xV?Ho|Z}Z#Av{2GA3e9YtJX{p#v)7x5 z+gBKq{vbZNyfUJ>vU;%3S=CV3IXa4$4NhACRk^*Ja;^%$uFJ9v_fFTGDi}kbmGrF< zN#w68Ep^=55yJKC?|lfVu65;Jp7xcdC`*icCnM}FVb+*xdO#*9u(R!+vN-YC-@UB0 zaB6tuW3NNW(WW`G@1mQBR$xg-G<{wD2KQFb-C1 z2Vd|XQ2#F+HEj?CqrIm`O9K{%fEBemJfToJar)acSw<16U>(q7e!@yk;;%S0rY24< zq5QKu75KCWS>_ZN0)OQIE1`&A^`Y`Ys~K9 zx(*Dsav}YmE60&JeM=yqtLUo*P(x-CAa{CC08X_rM^Wcz~lHN${KLP7gjm2Uyb%t(F{T&D2cv)?PO%H7Cj??04^73 zi4FL?MShj)jRRJgVB@wG`fqjsE*H^$Zer@4Wk2oC(Nu;uiuTb2H}}4&vf0V4;Fwvo z;GH7un>H_LAAYO+u5sMB?`kUL>zdnN>v{ZHP2Wz;f5=VHRx!Q2U3vgGq#}IPwIaB2 zL7`2Vs!#&%ObLQ?7AAHJgI=hlX)K0+Sa;PyyPjwP|EszpT;g_EG-6y!CG< za(hZ3x0LPd=wivM4}T5)+dp3_{F|BfLwV|kAq$behd%Z9q~%{xzN}9D8ps`9{lVt% zcO?7Aq=SUnguLYb*w&`>3T*v*Y|6hUz57t!ayHrpH^`+zzFr15YgRtvxf|#oXv-?{k?6}n+MnfGd{sQu81i=*lD)K8qW0&($ z6IA)P+eV8eULR&>3{CfPQe<+0f>r}IquXs$nhGyLG6e}{w(`FU@T~Xfe`%fit8rf4Qdb#*OVRhf) zX>c^{Ku*nATyM-v7RA4{h(E)?umH6HQ|Dx~oQs?wmuX-{9D{%eA0C&SoThQWozk^g zai_V%9h63-(2S0?j5jxj!=jBI;Bmv|_5$To8?Nf{V)JCkSsBNy(FKac?Ak%^wPqWg z$%jj35Ae^&_j=u3TIX6TUUhl}DHu17t-s!v-4EyuflIv@*?7uVIo{a)$iu^Z<{vcYKjtYLTlYmpov`ZP?i8f&VdvpTNorjbdb?4aS3526Lob z4epCgjcf_$)TM8*)c2bXrAXE?`>rmHw#F}Ef^At^`~|yM@4)&4S=erOZLqi)vN6>} zORlU;rW#w@Y(z_9T$3!8AC$~orA)lG{>GN#!P-2ZwVp>PZt>(;u80GHGLo;p( zZcS{*p#LE1^LnlPmHKz4wf)1jLxUB=>$8r6_xrpChb-u1Ju+t=;U`*#H?YYK4QER< zt1A}Qw3jU%F|6Ua3ybD8;hA+Q9pji*?59N7qsgg7kZHAA%c^-lB2lOt@C>(evl-o2 zYnI*6;j<^bys|dgoF58q-X5xn;zZg2O>yB5cO zO0qKP`D#Ej5~M*2Fm&+|L}%!q;9?x)(WQVak@~C9>K_GbUJ|AT{;O+XkzaZ(w`w~x_sS&Cx0P>-4McLyXML1<`9OfE z$?3MKXKVC(5lhBND>@ldkTCQy!Z=(lVI1qF*G{{B&^NU)FdZZEX?%2T&3w~BCuDOJ zi%sNS+#i%P!YX1NMy^z?cn-Tqt}4UC@g?}(58l$qOn`|!ME61RLH&OU z3a~URj8>@Pe9iYG$Zx&E_$`YY{`0P@_rXe_i=bn89WaHyQ}Q*9ZB_=fuT<6*v#$Fl ziB`(iGr{{umu?@Q?-;Y|2*aFQls&nL3vu~B?{eo^zp3v=twh*ntz>nuhRFEj%elH2 z7$yau>xT=;BN<7eob6u0TJG*ElMRjiL*ha5rr*67M!P+`WD<-@;ZeU$Rp%kI{rjdQ8bu}N(61L}uY{m^e%bSUJy1Yz{ z)uZLO)g>j}n?lA@CGo7jE?LD-7?m)w|g9$u4ah}5_ZcQ)K#e>hxtzp zCeuRr;uE)O_j;53U9+bHtP&HEqjjQ_z(Jo36mUuAmy(v1!l z{`M7FV-ywGO;s0P>ZF3&ZHp zqFVgg1DA!N-S_^(c(nxTYc@K@K?YpA#R^IDhXTQ_-vyQXO=WADMdStKGvV2bqeG=z z#fAcAlg`h-q1If3Q+CQ5C$QYC3@dH*rDdaSqwZr9)1{S@3Bt`OaY?Q+^>QB^^S!1* z)H2ok^ZR^*wY)<#!7`a(FBavA$vFPEc>LfvaKMtLA~VBM*aGm{jAd%?-6u}H_s_fRT9>uXIo~;)lRtj@@$GN#{r%paE*`w?ve@Og z`(3ZJwzRwl6a9PWBZY=_eoZh>z_R_rLO;% zeE0DB%JiUX#}E3~Xcm8e-GA`;g{_M{3c`=P8s3%s=bP+(`EL92*l3fCgp%_ONmGIU z;AqYtIdX)ys{ILnTZMG8w_;?fH}&9!ku+ehn0IttI4NZ4jdi#;@57IIZ8l`R^U0!OpN!egnVGlj=hN`s-hM#M#Mw!+W2q^u=G-$tStWI=LP@%% zGP50@CS{7mi-C$(}=GdJ(0dHMtx3{gVeHm`bA26TzK7U2Jp|hQH^Cy*GyuW2y-XS=4zHv@c z;qd)EGacJK&Og>SXoCyh_RG&5c{N@pEp}@OFoo`JR`msd?5w z!|!q3vIw^dG;|J24n4mZbJzdlsq;>E{>JaTi~d*1@%Vn5SAo!ZJ}bh0)+V1VKm%nH z8ReuVos{5R2&dQh6ug zCRHY20i+2`*2C_6x*U3``-S_`T@Nk}{PpJ_rcPD#o^}sMwRyWw4bN~J-k2wm!WqHE zBm43d@WE{p-DCH}Ax+Qb>EDv6A&%#Tfag^JEw5`>^`8i(0YWtfi8bPb1LkpRlM4ld` z?C4Q)aYw&C*mh4$#sqo53jGJ2j_=O^E5klrQf(7~^E_$C!bF!DB{RFpn&ox+ZEm^% z2Va&3C4!i6;%>wMmSrHW>c4> zVTP#tdkp-J_%pIlEUz21NRgZZEf}47!B&oN7XwWjtkW}iDh1LggmMcL>MHLp&~x=I zY5XXD6PwgpE7EKweJs;Z|UqcZh2Z;!V0p_sY;i*GRPDm_(01%rU1ZkkpfqG7y zxuy{?lTvEu^Saf5TvAStu2{g*b0~rOM08svcrKW_oRp*R2o2oI;VEjYJ`P-!3WNi5 zmKdAnh!~(yuY%5SRe|pL(gPtPtVyOcD%aXT?ohLo>nADWhEwylJk+%3hkND67y&;L z%u2Kpx=Ib)HZlQQePPX61KY4>%~`-T{s#M!5;6>V$S%4c4*<=qj|LpYFk6kB6)7WW z({b}Yv3xj=wv(G3g)KHVMV=Y1J2tY!<+E>5cEH|plvOHll^avEQZC|FMW2xB8ByYH zYQZ(>L054<_DkP?k$qT)z(I5Ct_DDnoE~ks zzzI|sjs#jGcpz{}$Sx2Ey3olY-33#FHFTf}a|&8P`$T)O4x_oyZ3I1m70@2|_b*;> zG1k+)QD@Jjglb5}P9@vEI|X*eMVD9B_zA8`nvjTVkW~>&9lx8p^}z^&A{MqopYcFvqJ5}e4GyF#<`Kv52$pMlrJ^^6KR`>z{Fbp)?G~I-B z(BdiYM(QDo#i7D;?ip8UPR8gmC=>cEVmp=W6jQ(6LfBMPUbWfhZ1*{QQN@mkXns^h zcw|^P|0=LohDWojqWN=x+f43@lRx2!waKbl|2X-K)G=>5w@e67Z|@CGKYm`l2X8N<4)8% zf{8Za(exwhII34KUo9_uxnyzd@A=XXz|wKJz-2Vs`r$hek-BA^80nyKK@Az1LfrL_ zU>eY%FL*)d3lC8v8A)z7xynJu>dh8WtI)*Yst>^v@u)=Q!U~QH996mWtc@ExQ7SYg zlBHmQ=0YF%c(+w*mZt&LD`tPy%B!U`a<(0Lp`SG%ZV5_ki!+2iY)Z zUeggkJvGpWm}Yw!rEfax>ZCv_$_^6yqL6u(JQ7&O$>J_4_u&u zfI)iuA;J}=Xgdgu^uOZ3N;yfQTf7F|SXR#ZA2^QWRDI{ziL%=t@2a)UX&4;K`eyx! zV-CKx)Hi`~V;S1i=3YktJepiB!Zb6AEVK$|vq)6!l*hUFJP9U z#I=0&<7;?lBlp^(=;6ahk4=sXZpx<2S6)1C*lqY!uA5l}-7I}gSAyNw@N0zEy4bs? zXFh#9{fnWwJeO4ewD_y+`nQH(o$u3{pzOV&g){!-H-~eR7y6pMt{<9GANn!0GO4M- z^Z3ux<1?%Ba@(S?Wg)77D; z$k}nY=)DWTd){I}IedYV?@!8FG1!OV2ij7!jhqRQb#``1)9?W8sUY5nL_q_X&&;6W)Ar#o%QNNlGuO!gv>bcL2+xbKm6$T(L2lCswn?tBW^A z%;$e})riMm3X^%-;{XfiljS~6&bj!j9|4<`7-Ova2*~Sv=2h6F?7s6Mh`jq|1I;Ft zvjiK@&e)g`QHs~L#e`t|hq!vh-jP&q9-HJg>4fUNv5*3AJa^$2_ zSwXzO(I#qL;IkKiUc=yM7Nl!jg2pAaF2sh<=)O(VH_X#nwS@M-(L35+$J1Y@wn$CK z$m%N}JCDnv1+^}9bW!sfU R;(UE0fZm{rSM*;${Wnp nothing changes). // - The chosen-successor path (pick a specific member -> they become admin). // // Run with: -// DATABASE_URL=... pnpm --filter @workspace/teaboy-os exec playwright test +// DATABASE_URL=... pnpm --filter @workspace/tx-os exec playwright test // // Browser binaries can be installed once with: -// pnpm --filter @workspace/teaboy-os exec playwright install chromium +// pnpm --filter @workspace/tx-os exec playwright install chromium // // The test seeds its own users + group via the database and cleans up after // itself, so it can run against the live dev environment without polluting it. diff --git a/artifacts/teaboy-os/tsconfig.json b/artifacts/tx-os/tsconfig.json similarity index 100% rename from artifacts/teaboy-os/tsconfig.json rename to artifacts/tx-os/tsconfig.json diff --git a/artifacts/teaboy-os/vite.config.ts b/artifacts/tx-os/vite.config.ts similarity index 100% rename from artifacts/teaboy-os/vite.config.ts rename to artifacts/tx-os/vite.config.ts diff --git a/lib/db/src/schema/services.ts b/lib/db/src/schema/services.ts index b9c065ae..2bdc1eee 100644 --- a/lib/db/src/schema/services.ts +++ b/lib/db/src/schema/services.ts @@ -14,7 +14,7 @@ export const servicesTable = pgTable("services", { id: serial("id").primaryKey(), categoryId: integer("category_id").references(() => serviceCategoriesTable.id, { onDelete: "set null" }), nameAr: varchar("name_ar", { length: 200 }).notNull(), - nameEn: varchar("name_en", { length: 200 }).notNull(), + nameEn: varchar("name_en", { length: 200 }).notNull().unique(), descriptionAr: text("description_ar"), descriptionEn: text("description_en"), imageUrl: text("image_url"), diff --git a/package.json b/package.json index 59b300dd..12dc7b70 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "build": "pnpm run typecheck && pnpm -r --if-present run build", "typecheck:libs": "tsc --build", "typecheck": "pnpm run typecheck:libs && pnpm -r --filter \"./artifacts/**\" --filter \"./scripts\" --if-present run typecheck", - "test": "pnpm --filter @workspace/api-server test && pnpm --filter @workspace/teaboy-os test:e2e" + "test": "pnpm --filter @workspace/api-server test && pnpm --filter @workspace/tx-os test:e2e" }, "private": true, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbaa6f59..5810c8e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -344,7 +344,7 @@ importers: specifier: 'catalog:' version: 3.25.76 - artifacts/teaboy-os: + artifacts/tx-os: dependencies: '@dnd-kit/core': specifier: ^6.3.1 diff --git a/replit.md b/replit.md index 7ed2343d..ff2ebdbf 100644 --- a/replit.md +++ b/replit.md @@ -10,8 +10,7 @@ / ├── artifacts/ │ ├── api-server/ Express 5 backend (port 8080) -│ └── teaboy-os/ React + Vite frontend (path: /, port dynamic) -│ (legacy folder name; product brand is "Tx OS") +│ └── tx-os/ React + Vite frontend (path: /, port dynamic) ├── lib/ │ ├── db/ Drizzle ORM + PostgreSQL schema │ ├── api-spec/ OpenAPI spec + Orval codegen @@ -66,5 +65,5 @@ - All API calls use `credentials: "include"` via `lib/api-client-react/src/custom-fetch.ts` - Socket.IO server path: `/api/socket.io` - Frontend connects to Socket.IO via same-origin proxy (no separate URL needed) -- i18n locale files: `artifacts/teaboy-os/src/locales/ar.json` and `en.json` -- Default receivers group is named **Tx** (was renamed from a legacy "TeaBoy"); a one-time migration in the seed script renames any pre-existing legacy group on next run. +- i18n locale files: `artifacts/tx-os/src/locales/ar.json` and `en.json` +- Default receivers group is named **Tx** (renamed from legacy "TeaBoy"); a one-time migration in the seed script renames any pre-existing legacy group on next run. diff --git a/scripts/post-merge.sh b/scripts/post-merge.sh index 0a97617f..4f0889d6 100644 --- a/scripts/post-merge.sh +++ b/scripts/post-merge.sh @@ -5,4 +5,4 @@ pnpm --filter db run push-force # Idempotent: ensure the default groups exist and existing users are mapped # (Admins, Tx, Everyone). Safe to run repeatedly. pnpm --filter scripts run seed -pnpm --filter @workspace/teaboy-os exec playwright install chromium +pnpm --filter @workspace/tx-os exec playwright install chromium diff --git a/scripts/src/seed.ts b/scripts/src/seed.ts index a332b56f..ff1d5fea 100644 --- a/scripts/src/seed.ts +++ b/scripts/src/seed.ts @@ -205,19 +205,6 @@ async function main() { isSystem: true, sortOrder: 4, }, - { - slug: "directory", - nameAr: "الدليل الداخلي", - nameEn: "Directory", - descriptionAr: "دليل الموظفين والأقسام", - descriptionEn: "Employees and departments directory", - iconName: "Users", - route: "/directory", - color: "#06b6d4", - isActive: true, - isSystem: false, - sortOrder: 5, - }, { slug: "calendar", nameAr: "التقويم", @@ -229,20 +216,7 @@ async function main() { color: "#3b82f6", isActive: true, isSystem: false, - sortOrder: 6, - }, - { - slug: "announcements", - nameAr: "الإعلانات", - nameEn: "Announcements", - descriptionAr: "أخبار وإعلانات الشركة", - descriptionEn: "Company news and announcements", - iconName: "Megaphone", - route: "/announcements", - color: "#ec4899", - isActive: true, - isSystem: false, - sortOrder: 7, + sortOrder: 5, }, { slug: "documents", @@ -255,7 +229,7 @@ async function main() { color: "#64748b", isActive: true, isSystem: false, - sortOrder: 8, + sortOrder: 6, }, ]; @@ -355,7 +329,7 @@ async function main() { }, ]; - await db.insert(servicesTable).values(services).onConflictDoNothing(); + await db.insert(servicesTable).values(services).onConflictDoNothing({ target: servicesTable.nameEn }); console.log("Services created"); // ----- Groups: idempotent migration ----- diff --git a/sedMkjeJm b/sedMkjeJm new file mode 100644 index 00000000..fd59a2dc --- /dev/null +++ b/sedMkjeJm @@ -0,0 +1,71 @@ +modules = ["nodejs-24", "postgresql-16"] + +[deployment] +router = "application" +deploymentTarget = "autoscale" + +[deployment.postBuild] +args = ["pnpm", "store", "prune"] +env = { "CI" = "true" } + +[workflows] +runButton = "Project" + +[[workflows.workflow]] +name = "Project" +mode = "parallel" +author = "agent" + +[[workflows.workflow.tasks]] +task = "workflow.run" +args = "test" + +[[workflows.workflow]] +name = "test" +author = "agent" + +[[workflows.workflow.tasks]] +task = "shell.exec" +args = "pnpm --filter @workspace/api-server test && pnpm --filter @workspace/tx-os test:e2e" + +[workflows.workflow.metadata] +isValidation = true + +[agent] +stack = "PNPM_WORKSPACE" +expertMode = true + +[postMerge] +path = "scripts/post-merge.sh" +timeoutMs = 120000 + +[[ports]] +localPort = 8080 +externalPort = 8080 + +[[ports]] +localPort = 8081 +externalPort = 80 + +[[ports]] +localPort = 8082 +externalPort = 3003 + +[[ports]] +localPort = 8083 +externalPort = 5173 + +[[ports]] +localPort = 25785 +externalPort = 3000 + +[[ports]] +localPort = 25786 +externalPort = 3002 + +[[ports]] +localPort = 25787 +externalPort = 5000 + +[nix] +channel = "stable-25_05"