From dce312d426cb95e043f2f22a83b9030d5e7b6668 Mon Sep 17 00:00:00 2001 From: Jose Selesan Date: Wed, 24 Jun 2026 08:38:10 -0300 Subject: [PATCH] feat: add reschedule functionality for admin bookings - Implemented rescheduleAdminBooking service to allow users to change court and time for confirmed bookings. - Added validation for court availability, maintenance status, and overlapping bookings. - Created reschedule-admin-booking handler to process rescheduling requests and send confirmation emails. - Updated booking email service to include rescheduling notifications. - Enhanced frontend components to support booking rescheduling, including a new dialog for selecting new court and time. - Added tests for rescheduling logic, covering various scenarios including validation errors and successful reschedules. - Updated Prisma schema to log previous court and time for audit purposes. --- apps/backend/prisma/court.prisma | 27 +- .../migration.sql | 4 + .../src/emails/booking-confirmation.ts | 166 +++++++++ .../src/generated/prisma/internal/class.ts | 8 +- .../prisma/internal/prismaNamespace.ts | 3 + .../prisma/internal/prismaNamespaceBrowser.ts | 3 + .../admin-booking/admin-booking.routes.ts | 9 + .../reschedule-admin-booking.handler.ts | 60 ++++ .../services/admin-booking.service.ts | 194 +++++++++++ .../modules/court/services/court.service.ts | 1 + .../src/services/booking-email.service.ts | 33 ++ .../reschedule-admin-booking.handler.test.ts | 126 +++++++ .../reschedule-admin-booking.service.test.ts | 317 ++++++++++++++++++ apps/backend/test/support/prisma.mock.ts | 5 + .../src/features/booking/booking-provider.tsx | 25 +- .../components/booking-reschedule-dialog.tsx | 203 +++++++++++ .../components/booking-tools-dialog.tsx | 36 ++ apps/frontend/src/lib/api-client.ts | 1 + apps/frontend/src/lib/api/index.ts | 1 + .../src/lib/api/resources/bookings.ts | 9 + packages/api-contract/src/admin-booking.ts | 14 + packages/api-contract/src/court.ts | 1 + packages/api-contract/src/index.ts | 2 + 23 files changed, 1231 insertions(+), 17 deletions(-) create mode 100644 apps/backend/prisma/migrations/20260623000000_add_reschedule_audit_fields/migration.sql create mode 100644 apps/backend/src/modules/admin-booking/handlers/reschedule-admin-booking.handler.ts create mode 100644 apps/backend/test/admin-booking/reschedule-admin-booking.handler.test.ts create mode 100644 apps/backend/test/admin-booking/reschedule-admin-booking.service.test.ts create mode 100644 apps/frontend/src/features/booking/components/booking-reschedule-dialog.tsx diff --git a/apps/backend/prisma/court.prisma b/apps/backend/prisma/court.prisma index f9c33aa..9c12f6d 100644 --- a/apps/backend/prisma/court.prisma +++ b/apps/backend/prisma/court.prisma @@ -125,18 +125,21 @@ model CourtBooking { } model CourtBookingLog { - id String @id @db.Uuid - bookingCode String @map("booking_code") @db.VarChar(8) - courtId String @map("court_id") @db.Uuid - bookingDate DateTime @map("booking_date") @db.Date - startTime String @map("start_time") @db.VarChar(5) - endTime String @map("end_time") @db.VarChar(5) - previousStatus CourtBookingStatus @map("previous_status") - newStatus CourtBookingStatus @map("new_status") - customerName String @map("customer_name") @db.VarChar(120) - customerPhone String @map("customer_phone") @db.VarChar(30) - customerEmail String @map("customer_email") @db.VarChar(254) - changedAt DateTime @default(now()) @map("changed_at") + id String @id @db.Uuid + bookingCode String @map("booking_code") @db.VarChar(8) + courtId String @map("court_id") @db.Uuid + bookingDate DateTime @map("booking_date") @db.Date + startTime String @map("start_time") @db.VarChar(5) + endTime String @map("end_time") @db.VarChar(5) + previousStatus CourtBookingStatus @map("previous_status") + newStatus CourtBookingStatus @map("new_status") + previousCourtId String? @map("previous_court_id") @db.Uuid + previousStartTime String? @map("previous_start_time") @db.VarChar(5) + previousEndTime String? @map("previous_end_time") @db.VarChar(5) + customerName String @map("customer_name") @db.VarChar(120) + customerPhone String @map("customer_phone") @db.VarChar(30) + customerEmail String @map("customer_email") @db.VarChar(254) + changedAt DateTime @default(now()) @map("changed_at") @@map("court_booking_logs") @@index([courtId, newStatus]) diff --git a/apps/backend/prisma/migrations/20260623000000_add_reschedule_audit_fields/migration.sql b/apps/backend/prisma/migrations/20260623000000_add_reschedule_audit_fields/migration.sql new file mode 100644 index 0000000..fc3d054 --- /dev/null +++ b/apps/backend/prisma/migrations/20260623000000_add_reschedule_audit_fields/migration.sql @@ -0,0 +1,4 @@ +-- AlterTable +ALTER TABLE "court_booking_logs" ADD COLUMN "previous_court_id" UUID; +ALTER TABLE "court_booking_logs" ADD COLUMN "previous_start_time" VARCHAR(5); +ALTER TABLE "court_booking_logs" ADD COLUMN "previous_end_time" VARCHAR(5); diff --git a/apps/backend/src/emails/booking-confirmation.ts b/apps/backend/src/emails/booking-confirmation.ts index b188a98..3d12232 100644 --- a/apps/backend/src/emails/booking-confirmation.ts +++ b/apps/backend/src/emails/booking-confirmation.ts @@ -300,6 +300,172 @@ export function bookingCancelledHtml(data: BookingEmailData): string { return wrapLayout(content); } +type BookingRescheduledEmailData = BookingEmailData & { + previousCourtName: string; + previousStartTime: string; + previousEndTime: string; +}; + +export function bookingRescheduledHtml(data: BookingRescheduledEmailData): string { + const friendlyDate = formatFriendlyDate(data.date); + + const content = ` + + + + + + + +
+ + + + +
+ Reserva reprogramada +
+

+ ${data.complexName} +

+
+ + + + + +
+ Playzer + + Playzer +
+
+ + + + + + + + + +
+

+ Nuevo turno +

+

+ ${friendlyDate} +

+

+ ${data.startTime} — ${data.endTime} +

+
+ + + + + + + + + + +
+

+ Cancha anterior +

+

+ ${data.previousCourtName} — ${data.sportName} +

+
+

+ Cancha nueva +

+

+ ${data.courtName} — ${data.sportName} +

+
+ + + + + + + + + + +
+

+ Horario anterior +

+

+ ${data.previousStartTime} — ${data.previousEndTime} +

+
+

+ Horario nuevo +

+

+ ${data.startTime} — ${data.endTime} +

+
+ + + + + + + + + + +
+

+ Cliente +

+

+ ${data.customerName} +

+
+

+ Código de reserva +

+

+ ${data.bookingCode} +

+
+ + + + ${ + data.complexSlug + ? ` + + + + + + +
+ + + + +
+ + Ver reserva + +
+
+ + ` + : '' + }`; + + return wrapLayout(content); +} + export function bookingNoShowHtml(data: BookingEmailData): string { const friendlyDate = formatFriendlyDate(data.date); diff --git a/apps/backend/src/generated/prisma/internal/class.ts b/apps/backend/src/generated/prisma/internal/class.ts index 093d314..30fac00 100644 --- a/apps/backend/src/generated/prisma/internal/class.ts +++ b/apps/backend/src/generated/prisma/internal/class.ts @@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = { "clientVersion": "7.6.0", "engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711", "activeProvider": "postgresql", - "inlineSchema": "model User {\n id String @id\n name String\n email String\n emailVerified Boolean @default(false)\n image String?\n phone String?\n banned Boolean @default(false)\n bannedAt DateTime?\n banReason String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n sessions Session[]\n accounts Account[]\n role String @default(\"member\")\n complexes ComplexUser[]\n\n @@unique([email])\n @@map(\"users\")\n}\n\nmodel Session {\n id String @id\n expiresAt DateTime\n token String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n ipAddress String?\n userAgent String?\n country String?\n city String?\n countryCode String?\n latitude Float?\n longitude Float?\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([token])\n @@index([userId])\n @@map(\"sessions\")\n}\n\nmodel Account {\n id String @id\n accountId String\n providerId String\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n accessToken String?\n refreshToken String?\n idToken String?\n accessTokenExpiresAt DateTime?\n refreshTokenExpiresAt DateTime?\n scope String?\n password String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@map(\"accounts\")\n}\n\nmodel Verification {\n id String @id\n identifier String\n value String\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([identifier])\n @@map(\"verification\")\n}\n\nmodel Complex {\n id String @id @db.Uuid\n complexName String @map(\"complex_name\")\n physicalAddress String? @map(\"physical_address\") @db.VarChar(200)\n city String? @map(\"city\") @db.VarChar(100)\n state String? @map(\"state\") @db.VarChar(100)\n country String? @map(\"country\") @db.VarChar(100)\n complexSlug String @unique @map(\"complex_slug\")\n adminEmail String @map(\"admin_email\")\n planCode String? @map(\"plan_code\") @db.VarChar(10)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n plan Plan? @relation(fields: [planCode], references: [code])\n users ComplexUser[]\n invitations ComplexInvitation[]\n courts Court[]\n recurringGroups RecurringBookingGroup[]\n\n @@index([planCode])\n @@index([complexSlug])\n @@map(\"complexes\")\n}\n\nenum ComplexUserRole {\n ADMIN\n EMPLOYEE\n}\n\nmodel ComplexUser {\n complexId String @map(\"complex_id\") @db.Uuid\n userId String @map(\"user_id\")\n role ComplexUserRole @default(ADMIN)\n createdAt DateTime @default(now()) @map(\"created_at\")\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@id([complexId, userId])\n @@index([userId])\n @@map(\"complex_users\")\n}\n\nmodel ComplexInvitation {\n id String @id @db.Uuid\n complexId String @map(\"complex_id\") @db.Uuid\n email String @db.VarChar(255)\n tokenHash String @unique @map(\"token_hash\")\n expiresAt DateTime @map(\"expires_at\")\n acceptedAt DateTime? @map(\"accepted_at\")\n revokedAt DateTime? @map(\"revoked_at\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n\n @@index([complexId, email])\n @@index([email])\n @@map(\"complex_invitations\")\n}\n\nenum DayOfWeek {\n MONDAY\n TUESDAY\n WEDNESDAY\n THURSDAY\n FRIDAY\n SATURDAY\n SUNDAY\n}\n\nenum CourtBookingStatus {\n CONFIRMED\n CANCELLED\n COMPLETED\n NOSHOW\n}\n\nenum RecurringBookingGroupStatus {\n ACTIVE\n CANCELLED\n}\n\nmodel Sport {\n id String @id @db.Uuid\n name String @unique\n slug String @unique\n isActive Boolean @default(true) @map(\"is_active\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n courts Court[]\n\n @@map(\"sports\")\n}\n\nmodel Court {\n id String @id @db.Uuid\n complexId String @map(\"complex_id\") @db.Uuid\n sportId String @map(\"sport_id\") @db.Uuid\n name String\n slotDurationMinutes Int @map(\"slot_duration_minutes\")\n basePrice Decimal @map(\"base_price\") @db.Decimal(19, 2)\n isUnderMaintenance Boolean @default(false) @map(\"is_under_maintenance\")\n maintenanceReason String? @map(\"maintenance_reason\") @db.VarChar(500)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n sport Sport @relation(fields: [sportId], references: [id])\n availabilities CourtAvailability[]\n priceRules CourtPriceRule[]\n bookings CourtBooking[]\n maintenances CourtMaintenance[]\n recurringGroups RecurringBookingGroup[]\n\n @@index([complexId])\n @@index([sportId])\n @@map(\"courts\")\n}\n\nmodel CourtMaintenance {\n id String @id @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n startDate DateTime @map(\"start_date\") @db.Date\n startTime String? @map(\"start_time\") @db.VarChar(5)\n endTime String? @map(\"end_time\") @db.VarChar(5)\n reason String? @db.VarChar(500)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n\n @@index([courtId, startDate])\n @@map(\"court_maintenances\")\n}\n\nmodel CourtAvailability {\n id String @id @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n dayOfWeek DayOfWeek @map(\"day_of_week\")\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n createdAt DateTime @default(now()) @map(\"created_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n\n @@index([courtId, dayOfWeek])\n @@map(\"court_availabilities\")\n}\n\nmodel CourtPriceRule {\n id String @id @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n dayOfWeek DayOfWeek? @map(\"day_of_week\")\n startTime String? @map(\"start_time\") @db.VarChar(5)\n endTime String? @map(\"end_time\") @db.VarChar(5)\n price Decimal @db.Decimal(19, 2)\n isActive Boolean @default(true) @map(\"is_active\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n\n @@index([courtId, isActive])\n @@map(\"court_price_rules\")\n}\n\nmodel CourtBooking {\n id String @id @db.Uuid\n bookingCode String @unique @map(\"booking_code\") @db.VarChar(8)\n courtId String @map(\"court_id\") @db.Uuid\n bookingDate DateTime @map(\"booking_date\") @db.Date\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n customerName String @map(\"customer_name\") @db.VarChar(120)\n customerPhone String @map(\"customer_phone\") @db.VarChar(30)\n customerEmail String @map(\"customer_email\") @db.VarChar(254)\n status CourtBookingStatus @default(CONFIRMED)\n recurringGroupId String? @map(\"recurring_group_id\") @db.Uuid\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n recurringGroup RecurringBookingGroup? @relation(fields: [recurringGroupId], references: [id])\n\n @@unique([courtId, bookingDate, startTime])\n @@index([courtId, bookingDate])\n @@index([bookingDate])\n @@index([recurringGroupId])\n @@map(\"court_bookings\")\n}\n\nmodel CourtBookingLog {\n id String @id @db.Uuid\n bookingCode String @map(\"booking_code\") @db.VarChar(8)\n courtId String @map(\"court_id\") @db.Uuid\n bookingDate DateTime @map(\"booking_date\") @db.Date\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n previousStatus CourtBookingStatus @map(\"previous_status\")\n newStatus CourtBookingStatus @map(\"new_status\")\n customerName String @map(\"customer_name\") @db.VarChar(120)\n customerPhone String @map(\"customer_phone\") @db.VarChar(30)\n customerEmail String @map(\"customer_email\") @db.VarChar(254)\n changedAt DateTime @default(now()) @map(\"changed_at\")\n\n @@index([courtId, newStatus])\n @@map(\"court_booking_logs\")\n}\n\nmodel RecurringBookingGroup {\n id String @id @db.Uuid\n complexId String @map(\"complex_id\") @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n dayOfWeek DayOfWeek @map(\"day_of_week\")\n startDate DateTime @map(\"start_date\") @db.Date\n endDate DateTime? @map(\"end_date\") @db.Date\n status RecurringBookingGroupStatus @default(ACTIVE)\n customerName String @map(\"customer_name\") @db.VarChar(120)\n customerPhone String @map(\"customer_phone\") @db.VarChar(30)\n customerEmail String @map(\"customer_email\") @db.VarChar(254)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n bookings CourtBooking[]\n\n @@index([complexId])\n @@index([courtId])\n @@index([status])\n @@map(\"recurring_booking_groups\")\n}\n\nmodel PasswordResetRequest {\n id String @id @db.Uuid\n email String\n otpHash String @map(\"otp_hash\")\n otpExpiresAt DateTime @map(\"otp_expires_at\")\n otpAttempts Int @default(0) @map(\"otp_attempts\")\n otpLastSentAt DateTime @map(\"otp_last_sent_at\")\n otpResendCount Int @default(0) @map(\"otp_resend_count\")\n usedAt DateTime? @map(\"used_at\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@index([email])\n @@index([otpExpiresAt])\n @@map(\"password_reset_requests\")\n}\n\nmodel Plan {\n code String @id @db.VarChar(10)\n name String @db.VarChar(30)\n price Decimal @db.Decimal(19, 2)\n rules Json\n lastUpdatedAt DateTime @default(now()) @map(\"last_updated_at\")\n complexes Complex[]\n\n @@map(\"plans\")\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\n// User model is defined in auth.prisma (Better Auth schema).\n", + "inlineSchema": "model User {\n id String @id\n name String\n email String\n emailVerified Boolean @default(false)\n image String?\n phone String?\n banned Boolean @default(false)\n bannedAt DateTime?\n banReason String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n sessions Session[]\n accounts Account[]\n role String @default(\"member\")\n complexes ComplexUser[]\n\n @@unique([email])\n @@map(\"users\")\n}\n\nmodel Session {\n id String @id\n expiresAt DateTime\n token String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n ipAddress String?\n userAgent String?\n country String?\n city String?\n countryCode String?\n latitude Float?\n longitude Float?\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([token])\n @@index([userId])\n @@map(\"sessions\")\n}\n\nmodel Account {\n id String @id\n accountId String\n providerId String\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n accessToken String?\n refreshToken String?\n idToken String?\n accessTokenExpiresAt DateTime?\n refreshTokenExpiresAt DateTime?\n scope String?\n password String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@map(\"accounts\")\n}\n\nmodel Verification {\n id String @id\n identifier String\n value String\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([identifier])\n @@map(\"verification\")\n}\n\nmodel Complex {\n id String @id @db.Uuid\n complexName String @map(\"complex_name\")\n physicalAddress String? @map(\"physical_address\") @db.VarChar(200)\n city String? @map(\"city\") @db.VarChar(100)\n state String? @map(\"state\") @db.VarChar(100)\n country String? @map(\"country\") @db.VarChar(100)\n complexSlug String @unique @map(\"complex_slug\")\n adminEmail String @map(\"admin_email\")\n planCode String? @map(\"plan_code\") @db.VarChar(10)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n plan Plan? @relation(fields: [planCode], references: [code])\n users ComplexUser[]\n invitations ComplexInvitation[]\n courts Court[]\n recurringGroups RecurringBookingGroup[]\n\n @@index([planCode])\n @@index([complexSlug])\n @@map(\"complexes\")\n}\n\nenum ComplexUserRole {\n ADMIN\n EMPLOYEE\n}\n\nmodel ComplexUser {\n complexId String @map(\"complex_id\") @db.Uuid\n userId String @map(\"user_id\")\n role ComplexUserRole @default(ADMIN)\n createdAt DateTime @default(now()) @map(\"created_at\")\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@id([complexId, userId])\n @@index([userId])\n @@map(\"complex_users\")\n}\n\nmodel ComplexInvitation {\n id String @id @db.Uuid\n complexId String @map(\"complex_id\") @db.Uuid\n email String @db.VarChar(255)\n tokenHash String @unique @map(\"token_hash\")\n expiresAt DateTime @map(\"expires_at\")\n acceptedAt DateTime? @map(\"accepted_at\")\n revokedAt DateTime? @map(\"revoked_at\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n\n @@index([complexId, email])\n @@index([email])\n @@map(\"complex_invitations\")\n}\n\nenum DayOfWeek {\n MONDAY\n TUESDAY\n WEDNESDAY\n THURSDAY\n FRIDAY\n SATURDAY\n SUNDAY\n}\n\nenum CourtBookingStatus {\n CONFIRMED\n CANCELLED\n COMPLETED\n NOSHOW\n}\n\nenum RecurringBookingGroupStatus {\n ACTIVE\n CANCELLED\n}\n\nmodel Sport {\n id String @id @db.Uuid\n name String @unique\n slug String @unique\n isActive Boolean @default(true) @map(\"is_active\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n courts Court[]\n\n @@map(\"sports\")\n}\n\nmodel Court {\n id String @id @db.Uuid\n complexId String @map(\"complex_id\") @db.Uuid\n sportId String @map(\"sport_id\") @db.Uuid\n name String\n slotDurationMinutes Int @map(\"slot_duration_minutes\")\n basePrice Decimal @map(\"base_price\") @db.Decimal(19, 2)\n isUnderMaintenance Boolean @default(false) @map(\"is_under_maintenance\")\n maintenanceReason String? @map(\"maintenance_reason\") @db.VarChar(500)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n sport Sport @relation(fields: [sportId], references: [id])\n availabilities CourtAvailability[]\n priceRules CourtPriceRule[]\n bookings CourtBooking[]\n maintenances CourtMaintenance[]\n recurringGroups RecurringBookingGroup[]\n\n @@index([complexId])\n @@index([sportId])\n @@map(\"courts\")\n}\n\nmodel CourtMaintenance {\n id String @id @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n startDate DateTime @map(\"start_date\") @db.Date\n startTime String? @map(\"start_time\") @db.VarChar(5)\n endTime String? @map(\"end_time\") @db.VarChar(5)\n reason String? @db.VarChar(500)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n\n @@index([courtId, startDate])\n @@map(\"court_maintenances\")\n}\n\nmodel CourtAvailability {\n id String @id @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n dayOfWeek DayOfWeek @map(\"day_of_week\")\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n createdAt DateTime @default(now()) @map(\"created_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n\n @@index([courtId, dayOfWeek])\n @@map(\"court_availabilities\")\n}\n\nmodel CourtPriceRule {\n id String @id @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n dayOfWeek DayOfWeek? @map(\"day_of_week\")\n startTime String? @map(\"start_time\") @db.VarChar(5)\n endTime String? @map(\"end_time\") @db.VarChar(5)\n price Decimal @db.Decimal(19, 2)\n isActive Boolean @default(true) @map(\"is_active\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n\n @@index([courtId, isActive])\n @@map(\"court_price_rules\")\n}\n\nmodel CourtBooking {\n id String @id @db.Uuid\n bookingCode String @unique @map(\"booking_code\") @db.VarChar(8)\n courtId String @map(\"court_id\") @db.Uuid\n bookingDate DateTime @map(\"booking_date\") @db.Date\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n customerName String @map(\"customer_name\") @db.VarChar(120)\n customerPhone String @map(\"customer_phone\") @db.VarChar(30)\n customerEmail String @map(\"customer_email\") @db.VarChar(254)\n status CourtBookingStatus @default(CONFIRMED)\n recurringGroupId String? @map(\"recurring_group_id\") @db.Uuid\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n recurringGroup RecurringBookingGroup? @relation(fields: [recurringGroupId], references: [id])\n\n @@unique([courtId, bookingDate, startTime])\n @@index([courtId, bookingDate])\n @@index([bookingDate])\n @@index([recurringGroupId])\n @@map(\"court_bookings\")\n}\n\nmodel CourtBookingLog {\n id String @id @db.Uuid\n bookingCode String @map(\"booking_code\") @db.VarChar(8)\n courtId String @map(\"court_id\") @db.Uuid\n bookingDate DateTime @map(\"booking_date\") @db.Date\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n previousStatus CourtBookingStatus @map(\"previous_status\")\n newStatus CourtBookingStatus @map(\"new_status\")\n previousCourtId String? @map(\"previous_court_id\") @db.Uuid\n previousStartTime String? @map(\"previous_start_time\") @db.VarChar(5)\n previousEndTime String? @map(\"previous_end_time\") @db.VarChar(5)\n customerName String @map(\"customer_name\") @db.VarChar(120)\n customerPhone String @map(\"customer_phone\") @db.VarChar(30)\n customerEmail String @map(\"customer_email\") @db.VarChar(254)\n changedAt DateTime @default(now()) @map(\"changed_at\")\n\n @@index([courtId, newStatus])\n @@map(\"court_booking_logs\")\n}\n\nmodel RecurringBookingGroup {\n id String @id @db.Uuid\n complexId String @map(\"complex_id\") @db.Uuid\n courtId String @map(\"court_id\") @db.Uuid\n startTime String @map(\"start_time\") @db.VarChar(5)\n endTime String @map(\"end_time\") @db.VarChar(5)\n dayOfWeek DayOfWeek @map(\"day_of_week\")\n startDate DateTime @map(\"start_date\") @db.Date\n endDate DateTime? @map(\"end_date\") @db.Date\n status RecurringBookingGroupStatus @default(ACTIVE)\n customerName String @map(\"customer_name\") @db.VarChar(120)\n customerPhone String @map(\"customer_phone\") @db.VarChar(30)\n customerEmail String @map(\"customer_email\") @db.VarChar(254)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n court Court @relation(fields: [courtId], references: [id], onDelete: Cascade)\n complex Complex @relation(fields: [complexId], references: [id], onDelete: Cascade)\n bookings CourtBooking[]\n\n @@index([complexId])\n @@index([courtId])\n @@index([status])\n @@map(\"recurring_booking_groups\")\n}\n\nmodel PasswordResetRequest {\n id String @id @db.Uuid\n email String\n otpHash String @map(\"otp_hash\")\n otpExpiresAt DateTime @map(\"otp_expires_at\")\n otpAttempts Int @default(0) @map(\"otp_attempts\")\n otpLastSentAt DateTime @map(\"otp_last_sent_at\")\n otpResendCount Int @default(0) @map(\"otp_resend_count\")\n usedAt DateTime? @map(\"used_at\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@index([email])\n @@index([otpExpiresAt])\n @@map(\"password_reset_requests\")\n}\n\nmodel Plan {\n code String @id @db.VarChar(10)\n name String @db.VarChar(30)\n price Decimal @db.Decimal(19, 2)\n rules Json\n lastUpdatedAt DateTime @default(now()) @map(\"last_updated_at\")\n complexes Complex[]\n\n @@map(\"plans\")\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\n// User model is defined in auth.prisma (Better Auth schema).\n", "runtimeDataModel": { "models": {}, "enums": {}, @@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = { } } -config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"banned\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"bannedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"banReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"role\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexes\",\"kind\":\"object\",\"type\":\"ComplexUser\",\"relationName\":\"ComplexUserToUser\"}],\"dbName\":\"users\"},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countryCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":\"sessions\"},\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"accountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"},{\"name\":\"accessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"idToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"accessTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"refreshTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"accounts\"},\"Verification\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"identifier\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"verification\"},\"Complex\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_name\"},{\"name\":\"physicalAddress\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"physical_address\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"city\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"state\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"country\"},{\"name\":\"complexSlug\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_slug\"},{\"name\":\"adminEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"admin_email\"},{\"name\":\"planCode\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"plan_code\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"Plan\",\"relationName\":\"ComplexToPlan\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"ComplexUser\",\"relationName\":\"ComplexToComplexUser\"},{\"name\":\"invitations\",\"kind\":\"object\",\"type\":\"ComplexInvitation\",\"relationName\":\"ComplexToComplexInvitation\"},{\"name\":\"courts\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"ComplexToCourt\"},{\"name\":\"recurringGroups\",\"kind\":\"object\",\"type\":\"RecurringBookingGroup\",\"relationName\":\"ComplexToRecurringBookingGroup\"}],\"dbName\":\"complexes\"},\"ComplexUser\":{\"fields\":[{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"ComplexUserRole\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToComplexUser\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ComplexUserToUser\"}],\"dbName\":\"complex_users\"},\"ComplexInvitation\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"token_hash\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"expires_at\"},{\"name\":\"acceptedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"accepted_at\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"revoked_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToComplexInvitation\"}],\"dbName\":\"complex_invitations\"},\"Sport\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_active\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"courts\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToSport\"}],\"dbName\":\"sports\"},\"Court\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"sportId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"sport_id\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slotDurationMinutes\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"slot_duration_minutes\"},{\"name\":\"basePrice\",\"kind\":\"scalar\",\"type\":\"Decimal\",\"dbName\":\"base_price\"},{\"name\":\"isUnderMaintenance\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_under_maintenance\"},{\"name\":\"maintenanceReason\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"maintenance_reason\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToCourt\"},{\"name\":\"sport\",\"kind\":\"object\",\"type\":\"Sport\",\"relationName\":\"CourtToSport\"},{\"name\":\"availabilities\",\"kind\":\"object\",\"type\":\"CourtAvailability\",\"relationName\":\"CourtToCourtAvailability\"},{\"name\":\"priceRules\",\"kind\":\"object\",\"type\":\"CourtPriceRule\",\"relationName\":\"CourtToCourtPriceRule\"},{\"name\":\"bookings\",\"kind\":\"object\",\"type\":\"CourtBooking\",\"relationName\":\"CourtToCourtBooking\"},{\"name\":\"maintenances\",\"kind\":\"object\",\"type\":\"CourtMaintenance\",\"relationName\":\"CourtToCourtMaintenance\"},{\"name\":\"recurringGroups\",\"kind\":\"object\",\"type\":\"RecurringBookingGroup\",\"relationName\":\"CourtToRecurringBookingGroup\"}],\"dbName\":\"courts\"},\"CourtMaintenance\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"start_date\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"reason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtMaintenance\"}],\"dbName\":\"court_maintenances\"},\"CourtAvailability\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"dayOfWeek\",\"kind\":\"enum\",\"type\":\"DayOfWeek\",\"dbName\":\"day_of_week\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtAvailability\"}],\"dbName\":\"court_availabilities\"},\"CourtPriceRule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"dayOfWeek\",\"kind\":\"enum\",\"type\":\"DayOfWeek\",\"dbName\":\"day_of_week\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_active\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtPriceRule\"}],\"dbName\":\"court_price_rules\"},\"CourtBooking\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bookingCode\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"booking_code\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"bookingDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"booking_date\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"customerName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_name\"},{\"name\":\"customerPhone\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_phone\"},{\"name\":\"customerEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_email\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\"},{\"name\":\"recurringGroupId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"recurring_group_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtBooking\"},{\"name\":\"recurringGroup\",\"kind\":\"object\",\"type\":\"RecurringBookingGroup\",\"relationName\":\"CourtBookingToRecurringBookingGroup\"}],\"dbName\":\"court_bookings\"},\"CourtBookingLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bookingCode\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"booking_code\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"bookingDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"booking_date\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"previousStatus\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\",\"dbName\":\"previous_status\"},{\"name\":\"newStatus\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\",\"dbName\":\"new_status\"},{\"name\":\"customerName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_name\"},{\"name\":\"customerPhone\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_phone\"},{\"name\":\"customerEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_email\"},{\"name\":\"changedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"changed_at\"}],\"dbName\":\"court_booking_logs\"},\"RecurringBookingGroup\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"dayOfWeek\",\"kind\":\"enum\",\"type\":\"DayOfWeek\",\"dbName\":\"day_of_week\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"start_date\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"end_date\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"RecurringBookingGroupStatus\"},{\"name\":\"customerName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_name\"},{\"name\":\"customerPhone\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_phone\"},{\"name\":\"customerEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_email\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToRecurringBookingGroup\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToRecurringBookingGroup\"},{\"name\":\"bookings\",\"kind\":\"object\",\"type\":\"CourtBooking\",\"relationName\":\"CourtBookingToRecurringBookingGroup\"}],\"dbName\":\"recurring_booking_groups\"},\"PasswordResetRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"otpHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"otp_hash\"},{\"name\":\"otpExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"otp_expires_at\"},{\"name\":\"otpAttempts\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"otp_attempts\"},{\"name\":\"otpLastSentAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"otp_last_sent_at\"},{\"name\":\"otpResendCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"otp_resend_count\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"used_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"}],\"dbName\":\"password_reset_requests\"},\"Plan\":{\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"rules\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"lastUpdatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"last_updated_at\"},{\"name\":\"complexes\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToPlan\"}],\"dbName\":\"plans\"}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"banned\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"bannedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"banReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"role\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexes\",\"kind\":\"object\",\"type\":\"ComplexUser\",\"relationName\":\"ComplexUserToUser\"}],\"dbName\":\"users\"},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"countryCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":\"sessions\"},\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"accountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"},{\"name\":\"accessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"idToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"accessTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"refreshTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"accounts\"},\"Verification\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"identifier\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"verification\"},\"Complex\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_name\"},{\"name\":\"physicalAddress\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"physical_address\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"city\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"state\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"country\"},{\"name\":\"complexSlug\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_slug\"},{\"name\":\"adminEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"admin_email\"},{\"name\":\"planCode\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"plan_code\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"Plan\",\"relationName\":\"ComplexToPlan\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"ComplexUser\",\"relationName\":\"ComplexToComplexUser\"},{\"name\":\"invitations\",\"kind\":\"object\",\"type\":\"ComplexInvitation\",\"relationName\":\"ComplexToComplexInvitation\"},{\"name\":\"courts\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"ComplexToCourt\"},{\"name\":\"recurringGroups\",\"kind\":\"object\",\"type\":\"RecurringBookingGroup\",\"relationName\":\"ComplexToRecurringBookingGroup\"}],\"dbName\":\"complexes\"},\"ComplexUser\":{\"fields\":[{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"ComplexUserRole\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToComplexUser\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ComplexUserToUser\"}],\"dbName\":\"complex_users\"},\"ComplexInvitation\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"token_hash\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"expires_at\"},{\"name\":\"acceptedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"accepted_at\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"revoked_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToComplexInvitation\"}],\"dbName\":\"complex_invitations\"},\"Sport\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_active\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"courts\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToSport\"}],\"dbName\":\"sports\"},\"Court\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"sportId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"sport_id\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slotDurationMinutes\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"slot_duration_minutes\"},{\"name\":\"basePrice\",\"kind\":\"scalar\",\"type\":\"Decimal\",\"dbName\":\"base_price\"},{\"name\":\"isUnderMaintenance\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_under_maintenance\"},{\"name\":\"maintenanceReason\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"maintenance_reason\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToCourt\"},{\"name\":\"sport\",\"kind\":\"object\",\"type\":\"Sport\",\"relationName\":\"CourtToSport\"},{\"name\":\"availabilities\",\"kind\":\"object\",\"type\":\"CourtAvailability\",\"relationName\":\"CourtToCourtAvailability\"},{\"name\":\"priceRules\",\"kind\":\"object\",\"type\":\"CourtPriceRule\",\"relationName\":\"CourtToCourtPriceRule\"},{\"name\":\"bookings\",\"kind\":\"object\",\"type\":\"CourtBooking\",\"relationName\":\"CourtToCourtBooking\"},{\"name\":\"maintenances\",\"kind\":\"object\",\"type\":\"CourtMaintenance\",\"relationName\":\"CourtToCourtMaintenance\"},{\"name\":\"recurringGroups\",\"kind\":\"object\",\"type\":\"RecurringBookingGroup\",\"relationName\":\"CourtToRecurringBookingGroup\"}],\"dbName\":\"courts\"},\"CourtMaintenance\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"start_date\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"reason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtMaintenance\"}],\"dbName\":\"court_maintenances\"},\"CourtAvailability\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"dayOfWeek\",\"kind\":\"enum\",\"type\":\"DayOfWeek\",\"dbName\":\"day_of_week\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtAvailability\"}],\"dbName\":\"court_availabilities\"},\"CourtPriceRule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"dayOfWeek\",\"kind\":\"enum\",\"type\":\"DayOfWeek\",\"dbName\":\"day_of_week\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_active\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtPriceRule\"}],\"dbName\":\"court_price_rules\"},\"CourtBooking\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bookingCode\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"booking_code\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"bookingDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"booking_date\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"customerName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_name\"},{\"name\":\"customerPhone\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_phone\"},{\"name\":\"customerEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_email\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\"},{\"name\":\"recurringGroupId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"recurring_group_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToCourtBooking\"},{\"name\":\"recurringGroup\",\"kind\":\"object\",\"type\":\"RecurringBookingGroup\",\"relationName\":\"CourtBookingToRecurringBookingGroup\"}],\"dbName\":\"court_bookings\"},\"CourtBookingLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bookingCode\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"booking_code\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"bookingDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"booking_date\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"previousStatus\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\",\"dbName\":\"previous_status\"},{\"name\":\"newStatus\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\",\"dbName\":\"new_status\"},{\"name\":\"previousCourtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"previous_court_id\"},{\"name\":\"previousStartTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"previous_start_time\"},{\"name\":\"previousEndTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"previous_end_time\"},{\"name\":\"customerName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_name\"},{\"name\":\"customerPhone\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_phone\"},{\"name\":\"customerEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_email\"},{\"name\":\"changedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"changed_at\"}],\"dbName\":\"court_booking_logs\"},\"RecurringBookingGroup\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"complexId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"complex_id\"},{\"name\":\"courtId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"court_id\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"dayOfWeek\",\"kind\":\"enum\",\"type\":\"DayOfWeek\",\"dbName\":\"day_of_week\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"start_date\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"end_date\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"RecurringBookingGroupStatus\"},{\"name\":\"customerName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_name\"},{\"name\":\"customerPhone\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_phone\"},{\"name\":\"customerEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"customer_email\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"court\",\"kind\":\"object\",\"type\":\"Court\",\"relationName\":\"CourtToRecurringBookingGroup\"},{\"name\":\"complex\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToRecurringBookingGroup\"},{\"name\":\"bookings\",\"kind\":\"object\",\"type\":\"CourtBooking\",\"relationName\":\"CourtBookingToRecurringBookingGroup\"}],\"dbName\":\"recurring_booking_groups\"},\"PasswordResetRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"otpHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"otp_hash\"},{\"name\":\"otpExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"otp_expires_at\"},{\"name\":\"otpAttempts\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"otp_attempts\"},{\"name\":\"otpLastSentAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"otp_last_sent_at\"},{\"name\":\"otpResendCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"otp_resend_count\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"used_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"}],\"dbName\":\"password_reset_requests\"},\"Plan\":{\"fields\":[{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"rules\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"lastUpdatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"last_updated_at\"},{\"name\":\"complexes\",\"kind\":\"object\",\"type\":\"Complex\",\"relationName\":\"ComplexToPlan\"}],\"dbName\":\"plans\"}},\"enums\":{},\"types\":{}}") config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"sessions\",\"accounts\",\"complexes\",\"_count\",\"plan\",\"users\",\"complex\",\"invitations\",\"courts\",\"sport\",\"court\",\"availabilities\",\"priceRules\",\"bookings\",\"recurringGroup\",\"maintenances\",\"recurringGroups\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"_avg\",\"_sum\",\"Session.groupBy\",\"Session.aggregate\",\"Account.findUnique\",\"Account.findUniqueOrThrow\",\"Account.findFirst\",\"Account.findFirstOrThrow\",\"Account.findMany\",\"Account.createOne\",\"Account.createMany\",\"Account.createManyAndReturn\",\"Account.updateOne\",\"Account.updateMany\",\"Account.updateManyAndReturn\",\"Account.upsertOne\",\"Account.deleteOne\",\"Account.deleteMany\",\"Account.groupBy\",\"Account.aggregate\",\"Verification.findUnique\",\"Verification.findUniqueOrThrow\",\"Verification.findFirst\",\"Verification.findFirstOrThrow\",\"Verification.findMany\",\"Verification.createOne\",\"Verification.createMany\",\"Verification.createManyAndReturn\",\"Verification.updateOne\",\"Verification.updateMany\",\"Verification.updateManyAndReturn\",\"Verification.upsertOne\",\"Verification.deleteOne\",\"Verification.deleteMany\",\"Verification.groupBy\",\"Verification.aggregate\",\"Complex.findUnique\",\"Complex.findUniqueOrThrow\",\"Complex.findFirst\",\"Complex.findFirstOrThrow\",\"Complex.findMany\",\"Complex.createOne\",\"Complex.createMany\",\"Complex.createManyAndReturn\",\"Complex.updateOne\",\"Complex.updateMany\",\"Complex.updateManyAndReturn\",\"Complex.upsertOne\",\"Complex.deleteOne\",\"Complex.deleteMany\",\"Complex.groupBy\",\"Complex.aggregate\",\"ComplexUser.findUnique\",\"ComplexUser.findUniqueOrThrow\",\"ComplexUser.findFirst\",\"ComplexUser.findFirstOrThrow\",\"ComplexUser.findMany\",\"ComplexUser.createOne\",\"ComplexUser.createMany\",\"ComplexUser.createManyAndReturn\",\"ComplexUser.updateOne\",\"ComplexUser.updateMany\",\"ComplexUser.updateManyAndReturn\",\"ComplexUser.upsertOne\",\"ComplexUser.deleteOne\",\"ComplexUser.deleteMany\",\"ComplexUser.groupBy\",\"ComplexUser.aggregate\",\"ComplexInvitation.findUnique\",\"ComplexInvitation.findUniqueOrThrow\",\"ComplexInvitation.findFirst\",\"ComplexInvitation.findFirstOrThrow\",\"ComplexInvitation.findMany\",\"ComplexInvitation.createOne\",\"ComplexInvitation.createMany\",\"ComplexInvitation.createManyAndReturn\",\"ComplexInvitation.updateOne\",\"ComplexInvitation.updateMany\",\"ComplexInvitation.updateManyAndReturn\",\"ComplexInvitation.upsertOne\",\"ComplexInvitation.deleteOne\",\"ComplexInvitation.deleteMany\",\"ComplexInvitation.groupBy\",\"ComplexInvitation.aggregate\",\"Sport.findUnique\",\"Sport.findUniqueOrThrow\",\"Sport.findFirst\",\"Sport.findFirstOrThrow\",\"Sport.findMany\",\"Sport.createOne\",\"Sport.createMany\",\"Sport.createManyAndReturn\",\"Sport.updateOne\",\"Sport.updateMany\",\"Sport.updateManyAndReturn\",\"Sport.upsertOne\",\"Sport.deleteOne\",\"Sport.deleteMany\",\"Sport.groupBy\",\"Sport.aggregate\",\"Court.findUnique\",\"Court.findUniqueOrThrow\",\"Court.findFirst\",\"Court.findFirstOrThrow\",\"Court.findMany\",\"Court.createOne\",\"Court.createMany\",\"Court.createManyAndReturn\",\"Court.updateOne\",\"Court.updateMany\",\"Court.updateManyAndReturn\",\"Court.upsertOne\",\"Court.deleteOne\",\"Court.deleteMany\",\"Court.groupBy\",\"Court.aggregate\",\"CourtMaintenance.findUnique\",\"CourtMaintenance.findUniqueOrThrow\",\"CourtMaintenance.findFirst\",\"CourtMaintenance.findFirstOrThrow\",\"CourtMaintenance.findMany\",\"CourtMaintenance.createOne\",\"CourtMaintenance.createMany\",\"CourtMaintenance.createManyAndReturn\",\"CourtMaintenance.updateOne\",\"CourtMaintenance.updateMany\",\"CourtMaintenance.updateManyAndReturn\",\"CourtMaintenance.upsertOne\",\"CourtMaintenance.deleteOne\",\"CourtMaintenance.deleteMany\",\"CourtMaintenance.groupBy\",\"CourtMaintenance.aggregate\",\"CourtAvailability.findUnique\",\"CourtAvailability.findUniqueOrThrow\",\"CourtAvailability.findFirst\",\"CourtAvailability.findFirstOrThrow\",\"CourtAvailability.findMany\",\"CourtAvailability.createOne\",\"CourtAvailability.createMany\",\"CourtAvailability.createManyAndReturn\",\"CourtAvailability.updateOne\",\"CourtAvailability.updateMany\",\"CourtAvailability.updateManyAndReturn\",\"CourtAvailability.upsertOne\",\"CourtAvailability.deleteOne\",\"CourtAvailability.deleteMany\",\"CourtAvailability.groupBy\",\"CourtAvailability.aggregate\",\"CourtPriceRule.findUnique\",\"CourtPriceRule.findUniqueOrThrow\",\"CourtPriceRule.findFirst\",\"CourtPriceRule.findFirstOrThrow\",\"CourtPriceRule.findMany\",\"CourtPriceRule.createOne\",\"CourtPriceRule.createMany\",\"CourtPriceRule.createManyAndReturn\",\"CourtPriceRule.updateOne\",\"CourtPriceRule.updateMany\",\"CourtPriceRule.updateManyAndReturn\",\"CourtPriceRule.upsertOne\",\"CourtPriceRule.deleteOne\",\"CourtPriceRule.deleteMany\",\"CourtPriceRule.groupBy\",\"CourtPriceRule.aggregate\",\"CourtBooking.findUnique\",\"CourtBooking.findUniqueOrThrow\",\"CourtBooking.findFirst\",\"CourtBooking.findFirstOrThrow\",\"CourtBooking.findMany\",\"CourtBooking.createOne\",\"CourtBooking.createMany\",\"CourtBooking.createManyAndReturn\",\"CourtBooking.updateOne\",\"CourtBooking.updateMany\",\"CourtBooking.updateManyAndReturn\",\"CourtBooking.upsertOne\",\"CourtBooking.deleteOne\",\"CourtBooking.deleteMany\",\"CourtBooking.groupBy\",\"CourtBooking.aggregate\",\"CourtBookingLog.findUnique\",\"CourtBookingLog.findUniqueOrThrow\",\"CourtBookingLog.findFirst\",\"CourtBookingLog.findFirstOrThrow\",\"CourtBookingLog.findMany\",\"CourtBookingLog.createOne\",\"CourtBookingLog.createMany\",\"CourtBookingLog.createManyAndReturn\",\"CourtBookingLog.updateOne\",\"CourtBookingLog.updateMany\",\"CourtBookingLog.updateManyAndReturn\",\"CourtBookingLog.upsertOne\",\"CourtBookingLog.deleteOne\",\"CourtBookingLog.deleteMany\",\"CourtBookingLog.groupBy\",\"CourtBookingLog.aggregate\",\"RecurringBookingGroup.findUnique\",\"RecurringBookingGroup.findUniqueOrThrow\",\"RecurringBookingGroup.findFirst\",\"RecurringBookingGroup.findFirstOrThrow\",\"RecurringBookingGroup.findMany\",\"RecurringBookingGroup.createOne\",\"RecurringBookingGroup.createMany\",\"RecurringBookingGroup.createManyAndReturn\",\"RecurringBookingGroup.updateOne\",\"RecurringBookingGroup.updateMany\",\"RecurringBookingGroup.updateManyAndReturn\",\"RecurringBookingGroup.upsertOne\",\"RecurringBookingGroup.deleteOne\",\"RecurringBookingGroup.deleteMany\",\"RecurringBookingGroup.groupBy\",\"RecurringBookingGroup.aggregate\",\"PasswordResetRequest.findUnique\",\"PasswordResetRequest.findUniqueOrThrow\",\"PasswordResetRequest.findFirst\",\"PasswordResetRequest.findFirstOrThrow\",\"PasswordResetRequest.findMany\",\"PasswordResetRequest.createOne\",\"PasswordResetRequest.createMany\",\"PasswordResetRequest.createManyAndReturn\",\"PasswordResetRequest.updateOne\",\"PasswordResetRequest.updateMany\",\"PasswordResetRequest.updateManyAndReturn\",\"PasswordResetRequest.upsertOne\",\"PasswordResetRequest.deleteOne\",\"PasswordResetRequest.deleteMany\",\"PasswordResetRequest.groupBy\",\"PasswordResetRequest.aggregate\",\"Plan.findUnique\",\"Plan.findUniqueOrThrow\",\"Plan.findFirst\",\"Plan.findFirstOrThrow\",\"Plan.findMany\",\"Plan.createOne\",\"Plan.createMany\",\"Plan.createManyAndReturn\",\"Plan.updateOne\",\"Plan.updateMany\",\"Plan.updateManyAndReturn\",\"Plan.upsertOne\",\"Plan.deleteOne\",\"Plan.deleteMany\",\"Plan.groupBy\",\"Plan.aggregate\",\"AND\",\"OR\",\"NOT\",\"code\",\"name\",\"price\",\"rules\",\"lastUpdatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"every\",\"some\",\"none\",\"id\",\"email\",\"otpHash\",\"otpExpiresAt\",\"otpAttempts\",\"otpLastSentAt\",\"otpResendCount\",\"usedAt\",\"createdAt\",\"updatedAt\",\"complexId\",\"courtId\",\"startTime\",\"endTime\",\"DayOfWeek\",\"dayOfWeek\",\"startDate\",\"endDate\",\"RecurringBookingGroupStatus\",\"status\",\"customerName\",\"customerPhone\",\"customerEmail\",\"bookingCode\",\"bookingDate\",\"CourtBookingStatus\",\"previousStatus\",\"newStatus\",\"changedAt\",\"recurringGroupId\",\"isActive\",\"reason\",\"sportId\",\"slotDurationMinutes\",\"basePrice\",\"isUnderMaintenance\",\"maintenanceReason\",\"slug\",\"tokenHash\",\"expiresAt\",\"acceptedAt\",\"revokedAt\",\"userId\",\"ComplexUserRole\",\"role\",\"complexName\",\"physicalAddress\",\"city\",\"state\",\"country\",\"complexSlug\",\"adminEmail\",\"planCode\",\"identifier\",\"value\",\"accountId\",\"providerId\",\"accessToken\",\"refreshToken\",\"idToken\",\"accessTokenExpiresAt\",\"refreshTokenExpiresAt\",\"scope\",\"password\",\"token\",\"ipAddress\",\"userAgent\",\"countryCode\",\"latitude\",\"longitude\",\"emailVerified\",\"image\",\"phone\",\"banned\",\"bannedAt\",\"banReason\",\"courtId_bookingDate_startTime\",\"complexId_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "3QeZAZACEgQAAKEEACAFAACiBAAgBgAAowQAIK0CAACfBAAwrgIAAEYAEK8CAACfBAAwsQIBANwDACHJAgEAAAABygIBAAAAAdECQADfAwAh0gJAAN8DACH1AgEA3AMAIY8DIACPBAAhkAMBAKAEACGRAwEAoAQAIZIDIACPBAAhkwNAAO4DACGUAwEAoAQAIQEAAAABACARAwAAwAQAIK0CAADCBAAwrgIAAAMAEK8CAADCBAAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh8AJAAN8DACHzAgEA3AMAIfgCAQCgBAAh-gIBAKAEACGJAwEA3AMAIYoDAQCgBAAhiwMBAKAEACGMAwEAoAQAIY0DCADDBAAhjgMIAMMEACEIAwAAgwcAIPgCAAD2BQAg-gIAAPYFACCKAwAA9gUAIIsDAAD2BQAgjAMAAPYFACCNAwAA9gUAII4DAAD2BQAgEQMAAMAEACCtAgAAwgQAMK4CAAADABCvAgAAwgQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh8AJAAN8DACHzAgEA3AMAIfgCAQCgBAAh-gIBAKAEACGJAwEAAAABigMBAKAEACGLAwEAoAQAIYwDAQCgBAAhjQMIAMMEACGOAwgAwwQAIQMAAAADACABAAAEADACAAAFACARAwAAwAQAIK0CAADBBAAwrgIAAAcAEK8CAADBBAAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh8wIBANwDACGAAwEA3AMAIYEDAQDcAwAhggMBAKAEACGDAwEAoAQAIYQDAQCgBAAhhQNAAO4DACGGA0AA7gMAIYcDAQCgBAAhiAMBAKAEACEIAwAAgwcAIIIDAAD2BQAggwMAAPYFACCEAwAA9gUAIIUDAAD2BQAghgMAAPYFACCHAwAA9gUAIIgDAAD2BQAgEQMAAMAEACCtAgAAwQQAMK4CAAAHABCvAgAAwQQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh8wIBANwDACGAAwEA3AMAIYEDAQDcAwAhggMBAKAEACGDAwEAoAQAIYQDAQCgBAAhhQNAAO4DACGGA0AA7gMAIYcDAQCgBAAhiAMBAKAEACEDAAAABwAgAQAACAAwAgAACQAgCQMAAMAEACAKAACoBAAgrQIAAL4EADCuAgAACwAQrwIAAL4EADDRAkAA3wMAIdMCAQDsAwAh8wIBANwDACH1AgAAvwT1AiICAwAAgwcAIAoAAPkGACAKAwAAwAQAIAoAAKgEACCtAgAAvgQAMK4CAAALABCvAgAAvgQAMNECQADfAwAh0wIBAOwDACHzAgEA3AMAIfUCAAC_BPUCIpYDAAC9BAAgAwAAAAsAIAEAAAwAMAIAAA0AIAkGAADgAwAgrQIAANsDADCuAgAADwAQrwIAANsDADCwAgEA3AMAIbECAQDcAwAhsgIQAN0DACGzAgAA3gMAILQCQADfAwAhAQAAAA8AIBMIAAC7BAAgCQAAowQAIAsAALwEACAMAACQBAAgFAAAuAQAIK0CAAC6BAAwrgIAABEAEK8CAAC6BAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh9gIBANwDACH3AgEAoAQAIfgCAQCgBAAh-QIBAKAEACH6AgEAoAQAIfsCAQDcAwAh_AIBANwDACH9AgEAoAQAIQoIAACBBwAgCQAA9wYAIAsAAIIHACAMAACrBgAgFAAAgAcAIPcCAAD2BQAg-AIAAPYFACD5AgAA9gUAIPoCAAD2BQAg_QIAAPYFACATCAAAuwQAIAkAAKMEACALAAC8BAAgDAAAkAQAIBQAALgEACCtAgAAugQAMK4CAAARABCvAgAAugQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh9gIBANwDACH3AgEAoAQAIfgCAQCgBAAh-QIBAKAEACH6AgEAoAQAIfsCAQAAAAH8AgEA3AMAIf0CAQCgBAAhAwAAABEAIAEAABIAMAIAABMAIAEAAAARACADAAAACwAgAQAADAAwAgAADQAgDQoAAKgEACCtAgAAuQQAMK4CAAAXABCvAgAAuQQAMMkCAQDsAwAhygIBANwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHvAgEA3AMAIfACQADfAwAh8QJAAO4DACHyAkAA7gMAIQMKAAD5BgAg8QIAAPYFACDyAgAA9gUAIA0KAACoBAAgrQIAALkEADCuAgAAFwAQrwIAALkEADDJAgEAAAABygIBANwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHvAgEAAAAB8AJAAN8DACHxAkAA7gMAIfICQADuAwAhAwAAABcAIAEAABgAMAIAABkAIBQKAACoBAAgDQAAtAQAIA8AALUEACAQAAC2BAAgEQAAqQQAIBMAALcEACAUAAC4BAAgrQIAALMEADCuAgAAGwAQrwIAALMEADCxAgEA3AMAIckCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh6QIBAOwDACHqAgIA7QMAIesCEADdAwAh7AIgAI8EACHtAgEAoAQAIQgKAAD5BgAgDQAA_AYAIA8AAP0GACAQAAD-BgAgEQAA-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_BgAgggMAAPYFACCDAwAA9gUAIIQDAAD2BQAghQMAAPYFACCGAwAA9gUAIIcDAAD2BQAgiAMAAPYFACAQrQIAAJkEADCuAgAAhQEAEK8CAACZBAAwyQIBAM8DACHRAkAA0gMAIdICQADSAwAh8wIBAM8DACGAAwEAzwMAIYEDAQDPAwAhggMBAIMEACGDAwEAgwQAIYQDAQCDBAAhhQNAAOQDACGGA0AA5AMAIYcDAQCDBAAhiAMBAIMEACEDAAAABwAgAQAAhAEAMCYAAIUBACADAAAABwAgAQAACAAwAgAACQAgCa0CAACYBAAwrgIAAIsBABCvAgAAmAQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh8AJAAN8DACH-AgEA3AMAIf8CAQDcAwAhAQAAAIgBACABAAAAiAEAIAmtAgAAmAQAMK4CAACLAQAQrwIAAJgEADDJAgEA3AMAIdECQADfAwAh0gJAAN8DACHwAkAA3wMAIf4CAQDcAwAh_wIBANwDACEAAwAAAIsBACABAACMAQAwAgAAiAEAIAMAAACLAQAgAQAAjAEAMAIAAIgBACADAAAAiwEAIAEAAIwBADACAACIAQAgBskCAQAAAAHRAkAAAAAB0gJAAAAAAfACQAAAAAH-AgEAAAAB_wIBAAAAAQEaAACQAQAgBskCAQAAAAHRAkAAAAAB0gJAAAAAAfACQAAAAAH-AgEAAAAB_wIBAAAAAQEaAACSAQAwARoAAJIBADAGyQIBAMkEACHRAkAAywQAIdICQADLBAAh8AJAAMsEACH-AgEAyQQAIf8CAQDJBAAhAgAAAIgBACAaAACVAQAgBskCAQDJBAAh0QJAAMsEACHSAkAAywQAIfACQADLBAAh_gIBAMkEACH_AgEAyQQAIQIAAACLAQAgGgAAlwEAIAIAAACLAQAgGgAAlwEAIAMAAACIAQAgIQAAkAEAICIAAJUBACABAAAAiAEAIAEAAACLAQAgAwcAALsGACAnAAC9BgAgKAAAvAYAIAmtAgAAlwQAMK4CAACeAQAQrwIAAJcEADDJAgEAzwMAIdECQADSAwAh0gJAANIDACHwAkAA0gMAIf4CAQDPAwAh_wIBAM8DACEDAAAAiwEAIAEAAJ0BADAmAACeAQAgAwAAAIsBACABAACMAQAwAgAAiAEAIAEAAAATACABAAAAEwAgAwAAABEAIAEAABIAMAIAABMAIAMAAAARACABAAASADACAAATACADAAAAEQAgAQAAEgAwAgAAEwAgEAgAALoGACAJAADwBQAgCwAA8QUAIAwAAPIFACAUAADzBQAgyQIBAAAAAdECQAAAAAHSAkAAAAAB9gIBAAAAAfcCAQAAAAH4AgEAAAAB-QIBAAAAAfoCAQAAAAH7AgEAAAAB_AIBAAAAAf0CAQAAAAEBGgAApgEAIAvJAgEAAAAB0QJAAAAAAdICQAAAAAH2AgEAAAAB9wIBAAAAAfgCAQAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAAB_QIBAAAAAQEaAACoAQAwARoAAKgBADABAAAADwAgEAgAALkGACAJAADZBAAgCwAA2gQAIAwAANsEACAUAADcBAAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh9gIBAMkEACH3AgEA1wQAIfgCAQDXBAAh-QIBANcEACH6AgEA1wQAIfsCAQDJBAAh_AIBAMkEACH9AgEA1wQAIQIAAAATACAaAACsAQAgC8kCAQDJBAAh0QJAAMsEACHSAkAAywQAIfYCAQDJBAAh9wIBANcEACH4AgEA1wQAIfkCAQDXBAAh-gIBANcEACH7AgEAyQQAIfwCAQDJBAAh_QIBANcEACECAAAAEQAgGgAArgEAIAIAAAARACAaAACuAQAgAQAAAA8AIAMAAAATACAhAACmAQAgIgAArAEAIAEAAAATACABAAAAEQAgCAcAALYGACAnAAC4BgAgKAAAtwYAIPcCAAD2BQAg-AIAAPYFACD5AgAA9gUAIPoCAAD2BQAg_QIAAPYFACAOrQIAAJYEADCuAgAAtgEAEK8CAACWBAAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh9gIBAM8DACH3AgEAgwQAIfgCAQCDBAAh-QIBAIMEACH6AgEAgwQAIfsCAQDPAwAh_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-tAgAA-wMAMK4CAADxAgAQrwIAAPsDADDJAgEAAAAB1AIBAOwDACHVAgEA3AMAIdYCAQDcAwAh3QIBANwDACHeAgEA3AMAId8CAQDcAwAh4AIBANwDACHhAkAA3wMAIeMCAAD8A-MCIuQCAAD8A-MCIuUCQADfAwAhAQAAAO4CACABAAAA7gIAIA-tAgAA-wMAMK4CAADxAgAQrwIAAPsDADDJAgEA7AMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAId0CAQDcAwAh3gIBANwDACHfAgEA3AMAIeACAQDcAwAh4QJAAN8DACHjAgAA_APjAiLkAgAA_APjAiLlAkAA3wMAIQADAAAA8QIAIAEAAPICADACAADuAgAgAwAAAPECACABAADyAgAwAgAA7gIAIAMAAADxAgAgAQAA8gIAMAIAAO4CACAMyQIBAAAAAdQCAQAAAAHVAgEAAAAB1gIBAAAAAd0CAQAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAkAAAAAB4wIAAADjAgLkAgAAAOMCAuUCQAAAAAEBGgAA9gIAIAzJAgEAAAAB1AIBAAAAAdUCAQAAAAHWAgEAAAAB3QIBAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAeECQAAAAAHjAgAAAOMCAuQCAAAA4wIC5QJAAAAAAQEaAAD4AgAwARoAAPgCADAMyQIBAMkEACHUAgEAyQQAIdUCAQDJBAAh1gIBAMkEACHdAgEAyQQAId4CAQDJBAAh3wIBAMkEACHgAgEAyQQAIeECQADLBAAh4wIAAPcE4wIi5AIAAPcE4wIi5QJAAMsEACECAAAA7gIAIBoAAPsCACAMyQIBAMkEACHUAgEAyQQAIdUCAQDJBAAh1gIBAMkEACHdAgEAyQQAId4CAQDJBAAh3wIBAMkEACHgAgEAyQQAIeECQADLBAAh4wIAAPcE4wIi5AIAAPcE4wIi5QJAAMsEACECAAAA8QIAIBoAAP0CACACAAAA8QIAIBoAAP0CACADAAAA7gIAICEAAPYCACAiAAD7AgAgAQAAAO4CACABAAAA8QIAIAMHAAD_BQAgJwAAgQYAICgAAIAGACAPrQIAAPcDADCuAgAAhAMAEK8CAAD3AwAwyQIBAOIDACHUAgEA4gMAIdUCAQDPAwAh1gIBAM8DACHdAgEAzwMAId4CAQDPAwAh3wIBAM8DACHgAgEAzwMAIeECQADSAwAh4wIAAPgD4wIi5AIAAPgD4wIi5QJAANIDACEDAAAA8QIAIAEAAIMDADAmAACEAwAgAwAAAPECACABAADyAgAwAgAA7gIAIAEAAAA2ACABAAAANgAgAwAAAC0AIAEAADUAMAIAADYAIAMAAAAtACABAAA1ADACAAA2ACADAAAALQAgAQAANQAwAgAANgAgEQoAAJwFACAOAAD9BAAgEQAA_gQAIMkCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHUAgEAAAAB1QIBAAAAAdYCAQAAAAHYAgAAANgCAtkCQAAAAAHaAkAAAAAB3AIAAADcAgLdAgEAAAAB3gIBAAAAAd8CAQAAAAEBGgAAjAMAIA7JAgEAAAAB0QJAAAAAAdICQAAAAAHTAgEAAAAB1AIBAAAAAdUCAQAAAAHWAgEAAAAB2AIAAADYAgLZAkAAAAAB2gJAAAAAAdwCAAAA3AIC3QIBAAAAAd4CAQAAAAHfAgEAAAABARoAAI4DADABGgAAjgMAMBEKAACaBQAgDgAA6wQAIBEAAOwEACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACHTAgEAyQQAIdQCAQDJBAAh1QIBAMkEACHWAgEAyQQAIdgCAADnBNgCItkCQADLBAAh2gJAAOgEACHcAgAA6QTcAiLdAgEAyQQAId4CAQDJBAAh3wIBAMkEACECAAAANgAgGgAAkQMAIA7JAgEAyQQAIdECQADLBAAh0gJAAMsEACHTAgEAyQQAIdQCAQDJBAAh1QIBAMkEACHWAgEAyQQAIdgCAADnBNgCItkCQADLBAAh2gJAAOgEACHcAgAA6QTcAiLdAgEAyQQAId4CAQDJBAAh3wIBAMkEACECAAAALQAgGgAAkwMAIAIAAAAtACAaAACTAwAgAwAAADYAICEAAIwDACAiAACRAwAgAQAAADYAIAEAAAAtACAEBwAA_AUAICcAAP4FACAoAAD9BQAg2gIAAPYFACARrQIAAPADADCuAgAAmgMAEK8CAADwAwAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh0wIBAOIDACHUAgEA4gMAIdUCAQDPAwAh1gIBAM8DACHYAgAA8QPYAiLZAkAA0gMAIdoCQADkAwAh3AIAAPID3AIi3QIBAM8DACHeAgEAzwMAId8CAQDPAwAhAwAAAC0AIAEAAJkDADAmAACaAwAgAwAAAC0AIAEAADUAMAIAADYAIA2tAgAA6wMAMK4CAACgAwAQrwIAAOsDADDJAgEAAAABygIBANwDACHLAgEA3AMAIcwCQADfAwAhzQICAO0DACHOAkAA3wMAIc8CAgDtAwAh0AJAAO4DACHRAkAA3wMAIdICQADfAwAhAQAAAJ0DACABAAAAnQMAIA2tAgAA6wMAMK4CAACgAwAQrwIAAOsDADDJAgEA7AMAIcoCAQDcAwAhywIBANwDACHMAkAA3wMAIc0CAgDtAwAhzgJAAN8DACHPAgIA7QMAIdACQADuAwAh0QJAAN8DACHSAkAA3wMAIQHQAgAA9gUAIAMAAACgAwAgAQAAoQMAMAIAAJ0DACADAAAAoAMAIAEAAKEDADACAACdAwAgAwAAAKADACABAAChAwAwAgAAnQMAIArJAgEAAAABygIBAAAAAcsCAQAAAAHMAkAAAAABzQICAAAAAc4CQAAAAAHPAgIAAAAB0AJAAAAAAdECQAAAAAHSAkAAAAABARoAAKUDACAKyQIBAAAAAcoCAQAAAAHLAgEAAAABzAJAAAAAAc0CAgAAAAHOAkAAAAABzwICAAAAAdACQAAAAAHRAkAAAAAB0gJAAAAAAQEaAACnAwAwARoAAKcDADAKyQIBAMkEACHKAgEAyQQAIcsCAQDJBAAhzAJAAMsEACHNAgIAiQUAIc4CQADLBAAhzwICAIkFACHQAkAA6AQAIdECQADLBAAh0gJAAMsEACECAAAAnQMAIBoAAKoDACAKyQIBAMkEACHKAgEAyQQAIcsCAQDJBAAhzAJAAMsEACHNAgIAiQUAIc4CQADLBAAhzwICAIkFACHQAkAA6AQAIdECQADLBAAh0gJAAMsEACECAAAAoAMAIBoAAKwDACACAAAAoAMAIBoAAKwDACADAAAAnQMAICEAAKUDACAiAACqAwAgAQAAAJ0DACABAAAAoAMAIAYHAAD3BQAgJwAA-gUAICgAAPkFACA5AAD4BQAgOgAA-wUAINACAAD2BQAgDa0CAADhAwAwrgIAALMDABCvAgAA4QMAMMkCAQDiAwAhygIBAM8DACHLAgEAzwMAIcwCQADSAwAhzQICAOMDACHOAkAA0gMAIc8CAgDjAwAh0AJAAOQDACHRAkAA0gMAIdICQADSAwAhAwAAAKADACABAACyAwAwJgAAswMAIAMAAACgAwAgAQAAoQMAMAIAAJ0DACAJBgAA4AMAIK0CAADbAwAwrgIAAA8AEK8CAADbAwAwsAIBAAAAAbECAQDcAwAhsgIQAN0DACGzAgAA3gMAILQCQADfAwAhAQAAALYDACABAAAAtgMAIAEGAAD1BQAgAwAAAA8AIAEAALkDADACAAC2AwAgAwAAAA8AIAEAALkDADACAAC2AwAgAwAAAA8AIAEAALkDADACAAC2AwAgBgYAAPQFACCwAgEAAAABsQIBAAAAAbICEAAAAAGzAoAAAAABtAJAAAAAAQEaAAC9AwAgBbACAQAAAAGxAgEAAAABsgIQAAAAAbMCgAAAAAG0AkAAAAABARoAAL8DADABGgAAvwMAMAYGAADMBAAgsAIBAMkEACGxAgEAyQQAIbICEADKBAAhswKAAAAAAbQCQADLBAAhAgAAALYDACAaAADCAwAgBbACAQDJBAAhsQIBAMkEACGyAhAAygQAIbMCgAAAAAG0AkAAywQAIQIAAAAPACAaAADEAwAgAgAAAA8AIBoAAMQDACADAAAAtgMAICEAAL0DACAiAADCAwAgAQAAALYDACABAAAADwAgBQcAAMQEACAnAADHBAAgKAAAxgQAIDkAAMUEACA6AADIBAAgCK0CAADOAwAwrgIAAMsDABCvAgAAzgMAMLACAQDPAwAhsQIBAM8DACGyAhAA0AMAIbMCAADRAwAgtAJAANIDACEDAAAADwAgAQAAygMAMCYAAMsDACADAAAADwAgAQAAuQMAMAIAALYDACAIrQIAAM4DADCuAgAAywMAEK8CAADOAwAwsAIBAM8DACGxAgEAzwMAIbICEADQAwAhswIAANEDACC0AkAA0gMAIQ4HAADUAwAgJwAA2gMAICgAANoDACC1AgEAAAABtgIBAAAABLcCAQAAAAS4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBANkDACHDAgEAAAABxAIBAAAAAcUCAQAAAAENBwAA1AMAICcAANgDACAoAADYAwAgOQAA2AMAIDoAANgDACC1AhAAAAABtgIQAAAABLcCEAAAAAS4AhAAAAABuQIQAAAAAboCEAAAAAG7AhAAAAABvAIQANcDACEPBwAA1AMAICcAANYDACAoAADWAwAgtQKAAAAAAbgCgAAAAAG5AoAAAAABugKAAAAAAbsCgAAAAAG8AoAAAAABvQIBAAAAAb4CAQAAAAG_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-MCIuQCAAD4A-MCIuUCQADSAwAhBwcAANQDACAnAAD6AwAgKAAA-gMAILUCAAAA4wICtgIAAADjAgi3AgAAAOMCCLwCAAD5A-MCIgcHAADUAwAgJwAA-gMAICgAAPoDACC1AgAAAOMCArYCAAAA4wIItwIAAADjAgi8AgAA-QPjAiIEtQIAAADjAgK2AgAAAOMCCLcCAAAA4wIIvAIAAPoD4wIiD60CAAD7AwAwrgIAAPECABCvAgAA-wMAMMkCAQDsAwAh1AIBAOwDACHVAgEA3AMAIdYCAQDcAwAh3QIBANwDACHeAgEA3AMAId8CAQDcAwAh4AIBANwDACHhAkAA3wMAIeMCAAD8A-MCIuQCAAD8A-MCIuUCQADfAwAhBLUCAAAA4wICtgIAAADjAgi3AgAAAOMCCLwCAAD6A-MCIhCtAgAA_QMAMK4CAADrAgAQrwIAAP0DADDJAgEA4gMAIdECQADSAwAh0gJAANIDACHUAgEA4gMAIdUCAQDPAwAh1gIBAM8DACHcAgAA-APjAiLdAgEAzwMAId4CAQDPAwAh3wIBAM8DACHgAgEAzwMAIeECQADSAwAh5gIBAP4DACELBwAA5gMAICcAAIAEACAoAACABAAgtQIBAAAAAbYCAQAAAAW3AgEAAAAFuAIBAAAAAbkCAQAAAAG6AgEAAAABuwIBAAAAAbwCAQD_AwAhCwcAAOYDACAnAACABAAgKAAAgAQAILUCAQAAAAG2AgEAAAAFtwIBAAAABbgCAQAAAAG5AgEAAAABugIBAAAAAbsCAQAAAAG8AgEA_wMAIQu1AgEAAAABtgIBAAAABbcCAQAAAAW4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBAIAEACHDAgEAAAABxAIBAAAAAcUCAQAAAAEMrQIAAIEEADCuAgAA0wIAEK8CAACBBAAwsgIQANADACHJAgEA4gMAIdECQADSAwAh0gJAANIDACHUAgEA4gMAIdUCAQCDBAAh1gIBAIMEACHYAgAAggTYAiPnAiAAhAQAIQcHAADmAwAgJwAAiQQAICgAAIkEACC1AgAAANgCA7YCAAAA2AIJtwIAAADYAgm8AgAAiATYAiMOBwAA5gMAICcAAIAEACAoAACABAAgtQIBAAAAAbYCAQAAAAW3AgEAAAAFuAIBAAAAAbkCAQAAAAG6AgEAAAABuwIBAAAAAbwCAQCHBAAhwwIBAAAAAcQCAQAAAAHFAgEAAAABBQcAANQDACAnAACGBAAgKAAAhgQAILUCIAAAAAG8AiAAhQQAIQUHAADUAwAgJwAAhgQAICgAAIYEACC1AiAAAAABvAIgAIUEACECtQIgAAAAAbwCIACGBAAhDgcAAOYDACAnAACABAAgKAAAgAQAILUCAQAAAAG2AgEAAAAFtwIBAAAABbgCAQAAAAG5AgEAAAABugIBAAAAAbsCAQAAAAG8AgEAhwQAIcMCAQAAAAHEAgEAAAABxQIBAAAAAQcHAADmAwAgJwAAiQQAICgAAIkEACC1AgAAANgCA7YCAAAA2AIJtwIAAADYAgm8AgAAiATYAiMEtQIAAADYAgO2AgAAANgCCbcCAAAA2AIJvAIAAIkE2AIjCa0CAACKBAAwrgIAAL0CABCvAgAAigQAMMkCAQDiAwAh0QJAANIDACHUAgEA4gMAIdUCAQDPAwAh1gIBAM8DACHYAgAA8QPYAiILrQIAAIsEADCuAgAApwIAEK8CAACLBAAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh1AIBAOIDACHVAgEAgwQAIdYCAQCDBAAh2QJAANIDACHoAgEAgwQAIQ2tAgAAjAQAMK4CAACRAgAQrwIAAIwEADCxAgEAzwMAIckCAQDiAwAh0QJAANIDACHSAkAA0gMAIdMCAQDiAwAh6QIBAOIDACHqAgIA4wMAIesCEADQAwAh7AIgAIQEACHtAgEAgwQAIQmtAgAAjQQAMK4CAAD7AQAQrwIAAI0EADCxAgEAzwMAIckCAQDiAwAh0QJAANIDACHSAkAA0gMAIecCIACEBAAh7gIBAM8DACEKDAAAkAQAIK0CAACOBAAwrgIAAOgBABCvAgAAjgQAMLECAQDcAwAhyQIBAOwDACHRAkAA3wMAIdICQADfAwAh5wIgAI8EACHuAgEA3AMAIQK1AiAAAAABvAIgAIYEACEDxgIAABsAIMcCAAAbACDIAgAAGwAgDK0CAACRBAAwrgIAAOIBABCvAgAAkQQAMMkCAQDiAwAhygIBAM8DACHRAkAA0gMAIdICQADSAwAh0wIBAOIDACHvAgEAzwMAIfACQADSAwAh8QJAAOQDACHyAkAA5AMAIQetAgAAkgQAMK4CAADMAQAQrwIAAJIEADDRAkAA0gMAIdMCAQDiAwAh8wIBAM8DACH1AgAAkwT1AiIHBwAA1AMAICcAAJUEACAoAACVBAAgtQIAAAD1AgK2AgAAAPUCCLcCAAAA9QIIvAIAAJQE9QIiBwcAANQDACAnAACVBAAgKAAAlQQAILUCAAAA9QICtgIAAAD1Agi3AgAAAPUCCLwCAACUBPUCIgS1AgAAAPUCArYCAAAA9QIItwIAAAD1Agi8AgAAlQT1AiIOrQIAAJYEADCuAgAAtgEAEK8CAACWBAAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh9gIBAM8DACH3AgEAgwQAIfgCAQCDBAAh-QIBAIMEACH6AgEAgwQAIfsCAQDPAwAh_AIBAM8DACH9AgEAgwQAIQmtAgAAlwQAMK4CAACeAQAQrwIAAJcEADDJAgEAzwMAIdECQADSAwAh0gJAANIDACHwAkAA0gMAIf4CAQDPAwAh_wIBAM8DACEJrQIAAJgEADCuAgAAiwEAEK8CAACYBAAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh8AJAAN8DACH-AgEA3AMAIf8CAQDcAwAhEK0CAACZBAAwrgIAAIUBABCvAgAAmQQAMMkCAQDPAwAh0QJAANIDACHSAkAA0gMAIfMCAQDPAwAhgAMBAM8DACGBAwEAzwMAIYIDAQCDBAAhgwMBAIMEACGEAwEAgwQAIYUDQADkAwAhhgNAAOQDACGHAwEAgwQAIYgDAQCDBAAhEK0CAACaBAAwrgIAAG8AEK8CAACaBAAwyQIBAM8DACHRAkAA0gMAIdICQADSAwAh8AJAANIDACHzAgEAzwMAIfgCAQCDBAAh-gIBAIMEACGJAwEAzwMAIYoDAQCDBAAhiwMBAIMEACGMAwEAgwQAIY0DCACbBAAhjgMIAJsEACENBwAA5gMAICcAAJ0EACAoAACdBAAgOQAAnQQAIDoAAJ0EACC1AggAAAABtgIIAAAABbcCCAAAAAW4AggAAAABuQIIAAAAAboCCAAAAAG7AggAAAABvAIIAJwEACENBwAA5gMAICcAAJ0EACAoAACdBAAgOQAAnQQAIDoAAJ0EACC1AggAAAABtgIIAAAABbcCCAAAAAW4AggAAAABuQIIAAAAAboCCAAAAAG7AggAAAABvAIIAJwEACEItQIIAAAAAbYCCAAAAAW3AggAAAAFuAIIAAAAAbkCCAAAAAG6AggAAAABuwIIAAAAAbwCCACdBAAhD60CAACeBAAwrgIAAFkAEK8CAACeBAAwsQIBAM8DACHJAgEAzwMAIcoCAQDPAwAh0QJAANIDACHSAkAA0gMAIfUCAQDPAwAhjwMgAIQEACGQAwEAgwQAIZEDAQCDBAAhkgMgAIQEACGTA0AA5AMAIZQDAQCDBAAhEgQAAKEEACAFAACiBAAgBgAAowQAIK0CAACfBAAwrgIAAEYAEK8CAACfBAAwsQIBANwDACHJAgEA3AMAIcoCAQDcAwAh0QJAAN8DACHSAkAA3wMAIfUCAQDcAwAhjwMgAI8EACGQAwEAoAQAIZEDAQCgBAAhkgMgAI8EACGTA0AA7gMAIZQDAQCgBAAhC7UCAQAAAAG2AgEAAAAFtwIBAAAABbgCAQAAAAG5AgEAAAABugIBAAAAAbsCAQAAAAG8AgEAgAQAIcMCAQAAAAHEAgEAAAABxQIBAAAAAQPGAgAAAwAgxwIAAAMAIMgCAAADACADxgIAAAcAIMcCAAAHACDIAgAABwAgA8YCAAALACDHAgAACwAgyAIAAAsAIBQKAACoBAAgDgAApwQAIBEAAKkEACCtAgAApAQAMK4CAAAtABCvAgAApAQAMMkCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh1AIBAOwDACHVAgEA3AMAIdYCAQDcAwAh2AIAAKUE2AIi2QJAAN8DACHaAkAA7gMAIdwCAACmBNwCIt0CAQDcAwAh3gIBANwDACHfAgEA3AMAIQS1AgAAANgCArYCAAAA2AIItwIAAADYAgi8AgAA9gPYAiIEtQIAAADcAgK2AgAAANwCCLcCAAAA3AIIvAIAAPQD3AIiFgoAAKgEACANAAC0BAAgDwAAtQQAIBAAALYEACARAACpBAAgEwAAtwQAIBQAALgEACCtAgAAswQAMK4CAAAbABCvAgAAswQAMLECAQDcAwAhyQIBAOwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHpAgEA7AMAIeoCAgDtAwAh6wIQAN0DACHsAiAAjwQAIe0CAQCgBAAhlwMAABsAIJgDAAAbACAVCAAAuwQAIAkAAKMEACALAAC8BAAgDAAAkAQAIBQAALgEACCtAgAAugQAMK4CAAARABCvAgAAugQAMMkCAQDsAwAh0QJAAN8DACHSAkAA3wMAIfYCAQDcAwAh9wIBAKAEACH4AgEAoAQAIfkCAQCgBAAh-gIBAKAEACH7AgEA3AMAIfwCAQDcAwAh_QIBAKAEACGXAwAAEQAgmAMAABEAIAPGAgAAKQAgxwIAACkAIMgCAAApACAMDgAApwQAIK0CAACqBAAwrgIAADEAEK8CAACqBAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh1AIBAOwDACHVAgEAoAQAIdYCAQCgBAAh2QJAAN8DACHoAgEAoAQAIQPUAgEAAAAB1QIBAAAAAeECQAAAAAESDgAApwQAIBIAAK4EACCtAgAArAQAMK4CAAApABCvAgAArAQAMMkCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdwCAAD8A-MCIt0CAQDcAwAh3gIBANwDACHfAgEA3AMAIeACAQDcAwAh4QJAAN8DACHmAgEArQQAIQi1AgEAAAABtgIBAAAABbcCAQAAAAW4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBAK8EACEWCgAAqAQAIA4AAKcEACARAACpBAAgrQIAAKQEADCuAgAALQAQrwIAAKQEADDJAgEA7AMAIdECQADfAwAh0gJAAN8DACHTAgEA7AMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdgCAAClBNgCItkCQADfAwAh2gJAAO4DACHcAgAApgTcAiLdAgEA3AMAId4CAQDcAwAh3wIBANwDACGXAwAALQAgmAMAAC0AIAi1AgEAAAABtgIBAAAABbcCAQAAAAW4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBAK8EACENDgAApwQAIK0CAACwBAAwrgIAACUAEK8CAACwBAAwsgIQAN0DACHJAgEA7AMAIdECQADfAwAh0gJAAN8DACHUAgEA7AMAIdUCAQCgBAAh1gIBAKAEACHYAgAAsQTYAiPnAiAAjwQAIQS1AgAAANgCA7YCAAAA2AIJtwIAAADYAgm8AgAAiQTYAiMKDgAApwQAIK0CAACyBAAwrgIAACEAEK8CAACyBAAwyQIBAOwDACHRAkAA3wMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdgCAAClBNgCIhQKAACoBAAgDQAAtAQAIA8AALUEACAQAAC2BAAgEQAAqQQAIBMAALcEACAUAAC4BAAgrQIAALMEADCuAgAAGwAQrwIAALMEADCxAgEA3AMAIckCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh6QIBAOwDACHqAgIA7QMAIesCEADdAwAh7AIgAI8EACHtAgEAoAQAIQwMAACQBAAgrQIAAI4EADCuAgAA6AEAEK8CAACOBAAwsQIBANwDACHJAgEA7AMAIdECQADfAwAh0gJAAN8DACHnAiAAjwQAIe4CAQDcAwAhlwMAAOgBACCYAwAA6AEAIAPGAgAAIQAgxwIAACEAIMgCAAAhACADxgIAACUAIMcCAAAlACDIAgAAJQAgA8YCAAAxACDHAgAAMQAgyAIAADEAIAPGAgAALQAgxwIAAC0AIMgCAAAtACANCgAAqAQAIK0CAAC5BAAwrgIAABcAEK8CAAC5BAAwyQIBAOwDACHKAgEA3AMAIdECQADfAwAh0gJAAN8DACHTAgEA7AMAIe8CAQDcAwAh8AJAAN8DACHxAkAA7gMAIfICQADuAwAhEwgAALsEACAJAACjBAAgCwAAvAQAIAwAAJAEACAUAAC4BAAgrQIAALoEADCuAgAAEQAQrwIAALoEADDJAgEA7AMAIdECQADfAwAh0gJAAN8DACH2AgEA3AMAIfcCAQCgBAAh-AIBAKAEACH5AgEAoAQAIfoCAQCgBAAh-wIBANwDACH8AgEA3AMAIf0CAQCgBAAhCwYAAOADACCtAgAA2wMAMK4CAAAPABCvAgAA2wMAMLACAQDcAwAhsQIBANwDACGyAhAA3QMAIbMCAADeAwAgtAJAAN8DACGXAwAADwAgmAMAAA8AIAPGAgAAFwAgxwIAABcAIMgCAAAXACAC0wIBAAAAAfMCAQAAAAEJAwAAwAQAIAoAAKgEACCtAgAAvgQAMK4CAAALABCvAgAAvgQAMNECQADfAwAh0wIBAOwDACHzAgEA3AMAIfUCAAC_BPUCIgS1AgAAAPUCArYCAAAA9QIItwIAAAD1Agi8AgAAlQT1AiIUBAAAoQQAIAUAAKIEACAGAACjBAAgrQIAAJ8EADCuAgAARgAQrwIAAJ8EADCxAgEA3AMAIckCAQDcAwAhygIBANwDACHRAkAA3wMAIdICQADfAwAh9QIBANwDACGPAyAAjwQAIZADAQCgBAAhkQMBAKAEACGSAyAAjwQAIZMDQADuAwAhlAMBAKAEACGXAwAARgAgmAMAAEYAIBEDAADABAAgrQIAAMEEADCuAgAABwAQrwIAAMEEADDJAgEA3AMAIdECQADfAwAh0gJAAN8DACHzAgEA3AMAIYADAQDcAwAhgQMBANwDACGCAwEAoAQAIYMDAQCgBAAhhAMBAKAEACGFA0AA7gMAIYYDQADuAwAhhwMBAKAEACGIAwEAoAQAIREDAADABAAgrQIAAMIEADCuAgAAAwAQrwIAAMIEADDJAgEA3AMAIdECQADfAwAh0gJAAN8DACHwAkAA3wMAIfMCAQDcAwAh-AIBAKAEACH6AgEAoAQAIYkDAQDcAwAhigMBAKAEACGLAwEAoAQAIYwDAQCgBAAhjQMIAMMEACGOAwgAwwQAIQi1AggAAAABtgIIAAAABbcCCAAAAAW4AggAAAABuQIIAAAAAboCCAAAAAG7AggAAAABvAIIAJ0EACEAAAAAAAGcAwEAAAABBZwDEAAAAAGiAxAAAAABowMQAAAAAaQDEAAAAAGlAxAAAAABAZwDQAAAAAELIQAAzQQAMCIAANIEADCZAwAAzgQAMJoDAADPBAAwmwMAANAEACCcAwAA0QQAMJ0DAADRBAAwngMAANEEADCfAwAA0QQAMKADAADTBAAwoQMAANQEADAOCQAA8AUAIAsAAPEFACAMAADyBQAgFAAA8wUAIMkCAQAAAAHRAkAAAAAB0gJAAAAAAfYCAQAAAAH3AgEAAAAB-AIBAAAAAfkCAQAAAAH6AgEAAAAB-wIBAAAAAfwCAQAAAAECAAAAEwAgIQAA7wUAIAMAAAATACAhAADvBQAgIgAA2AQAIAEaAADdBwAwEwgAALsEACAJAACjBAAgCwAAvAQAIAwAAJAEACAUAAC4BAAgrQIAALoEADCuAgAAEQAQrwIAALoEADDJAgEAAAAB0QJAAN8DACHSAkAA3wMAIfYCAQDcAwAh9wIBAKAEACH4AgEAoAQAIfkCAQCgBAAh-gIBAKAEACH7AgEAAAAB_AIBANwDACH9AgEAoAQAIQIAAAATACAaAADYBAAgAgAAANUEACAaAADWBAAgDq0CAADUBAAwrgIAANUEABCvAgAA1AQAMMkCAQDsAwAh0QJAAN8DACHSAkAA3wMAIfYCAQDcAwAh9wIBAKAEACH4AgEAoAQAIfkCAQCgBAAh-gIBAKAEACH7AgEA3AMAIfwCAQDcAwAh_QIBAKAEACEOrQIAANQEADCuAgAA1QQAEK8CAADUBAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh9gIBANwDACH3AgEAoAQAIfgCAQCgBAAh-QIBAKAEACH6AgEAoAQAIfsCAQDcAwAh_AIBANwDACH9AgEAoAQAIQrJAgEAyQQAIdECQADLBAAh0gJAAMsEACH2AgEAyQQAIfcCAQDXBAAh-AIBANcEACH5AgEA1wQAIfoCAQDXBAAh-wIBAMkEACH8AgEAyQQAIQGcAwEAAAABDgkAANkEACALAADaBAAgDAAA2wQAIBQAANwEACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACH2AgEAyQQAIfcCAQDXBAAh-AIBANcEACH5AgEA1wQAIfoCAQDXBAAh-wIBAMkEACH8AgEAyQQAIQshAADgBQAwIgAA5QUAMJkDAADhBQAwmgMAAOIFADCbAwAA4wUAIJwDAADkBQAwnQMAAOQFADCeAwAA5AUAMJ8DAADkBQAwoAMAAOYFADChAwAA5wUAMAshAADUBQAwIgAA2QUAMJkDAADVBQAwmgMAANYFADCbAwAA1wUAIJwDAADYBQAwnQMAANgFADCeAwAA2AUAMJ8DAADYBQAwoAMAANoFADChAwAA2wUAMAshAAD_BAAwIgAAhAUAMJkDAACABQAwmgMAAIEFADCbAwAAggUAIJwDAACDBQAwnQMAAIMFADCeAwAAgwUAMJ8DAACDBQAwoAMAAIUFADChAwAAhgUAMAshAADdBAAwIgAA4gQAMJkDAADeBAAwmgMAAN8EADCbAwAA4AQAIJwDAADhBAAwnQMAAOEEADCeAwAA4QQAMJ8DAADhBAAwoAMAAOMEADChAwAA5AQAMA8OAAD9BAAgEQAA_gQAIMkCAQAAAAHRAkAAAAAB0gJAAAAAAdQCAQAAAAHVAgEAAAAB1gIBAAAAAdgCAAAA2AIC2QJAAAAAAdoCQAAAAAHcAgAAANwCAt0CAQAAAAHeAgEAAAAB3wIBAAAAAQIAAAA2ACAhAAD8BAAgAwAAADYAICEAAPwEACAiAADqBAAgARoAANwHADAUCgAAqAQAIA4AAKcEACARAACpBAAgrQIAAKQEADCuAgAALQAQrwIAAKQEADDJAgEAAAAB0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh1AIBAOwDACHVAgEA3AMAIdYCAQDcAwAh2AIAAKUE2AIi2QJAAN8DACHaAkAA7gMAIdwCAACmBNwCIt0CAQDcAwAh3gIBANwDACHfAgEA3AMAIQIAAAA2ACAaAADqBAAgAgAAAOUEACAaAADmBAAgEa0CAADkBAAwrgIAAOUEABCvAgAA5AQAMMkCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh1AIBAOwDACHVAgEA3AMAIdYCAQDcAwAh2AIAAKUE2AIi2QJAAN8DACHaAkAA7gMAIdwCAACmBNwCIt0CAQDcAwAh3gIBANwDACHfAgEA3AMAIRGtAgAA5AQAMK4CAADlBAAQrwIAAOQEADDJAgEA7AMAIdECQADfAwAh0gJAAN8DACHTAgEA7AMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdgCAAClBNgCItkCQADfAwAh2gJAAO4DACHcAgAApgTcAiLdAgEA3AMAId4CAQDcAwAh3wIBANwDACENyQIBAMkEACHRAkAAywQAIdICQADLBAAh1AIBAMkEACHVAgEAyQQAIdYCAQDJBAAh2AIAAOcE2AIi2QJAAMsEACHaAkAA6AQAIdwCAADpBNwCIt0CAQDJBAAh3gIBAMkEACHfAgEAyQQAIQGcAwAAANgCAgGcA0AAAAABAZwDAAAA3AICDw4AAOsEACARAADsBAAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh1AIBAMkEACHVAgEAyQQAIdYCAQDJBAAh2AIAAOcE2AIi2QJAAMsEACHaAkAA6AQAIdwCAADpBNwCIt0CAQDJBAAh3gIBAMkEACHfAgEAyQQAIQUhAADRBwAgIgAA2gcAIJkDAADSBwAgmgMAANkHACCfAwAAHQAgCyEAAO0EADAiAADyBAAwmQMAAO4EADCaAwAA7wQAMJsDAADwBAAgnAMAAPEEADCdAwAA8QQAMJ4DAADxBAAwnwMAAPEEADCgAwAA8wQAMKEDAAD0BAAwDQ4AAPsEACDJAgEAAAAB0QJAAAAAAdICQAAAAAHUAgEAAAAB1QIBAAAAAdYCAQAAAAHcAgAAAOMCAt0CAQAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAkAAAAABAgAAACsAICEAAPoEACADAAAAKwAgIQAA-gQAICIAAPgEACABGgAA2AcAMBMOAACnBAAgEgAArgQAIK0CAACsBAAwrgIAACkAEK8CAACsBAAwyQIBAAAAAdECQADfAwAh0gJAAN8DACHUAgEA7AMAIdUCAQDcAwAh1gIBANwDACHcAgAA_APjAiLdAgEA3AMAId4CAQDcAwAh3wIBANwDACHgAgEAAAAB4QJAAN8DACHmAgEArQQAIZUDAACrBAAgAgAAACsAIBoAAPgEACACAAAA9QQAIBoAAPYEACAQrQIAAPQEADCuAgAA9QQAEK8CAAD0BAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh1AIBAOwDACHVAgEA3AMAIdYCAQDcAwAh3AIAAPwD4wIi3QIBANwDACHeAgEA3AMAId8CAQDcAwAh4AIBANwDACHhAkAA3wMAIeYCAQCtBAAhEK0CAAD0BAAwrgIAAPUEABCvAgAA9AQAMMkCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdwCAAD8A-MCIt0CAQDcAwAh3gIBANwDACHfAgEA3AMAIeACAQDcAwAh4QJAAN8DACHmAgEArQQAIQzJAgEAyQQAIdECQADLBAAh0gJAAMsEACHUAgEAyQQAIdUCAQDJBAAh1gIBAMkEACHcAgAA9wTjAiLdAgEAyQQAId4CAQDJBAAh3wIBAMkEACHgAgEAyQQAIeECQADLBAAhAZwDAAAA4wICDQ4AAPkEACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACHUAgEAyQQAIdUCAQDJBAAh1gIBAMkEACHcAgAA9wTjAiLdAgEAyQQAId4CAQDJBAAh3wIBAMkEACHgAgEAyQQAIeECQADLBAAhBSEAANMHACAiAADWBwAgmQMAANQHACCaAwAA1QcAIJ8DAAAdACANDgAA-wQAIMkCAQAAAAHRAkAAAAAB0gJAAAAAAdQCAQAAAAHVAgEAAAAB1gIBAAAAAdwCAAAA4wIC3QIBAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAeECQAAAAAEDIQAA0wcAIJkDAADUBwAgnwMAAB0AIA8OAAD9BAAgEQAA_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_BQAgARoAAL8HADANDgAApwQAIK0CAACwBAAwrgIAACUAEK8CAACwBAAwsgIQAN0DACHJAgEAAAAB0QJAAN8DACHSAkAA3wMAIdQCAQDsAwAh1QIBAKAEACHWAgEAoAQAIdgCAACxBNgCI-cCIACPBAAhAgAAACcAIBoAAL8FACACAAAAvAUAIBoAAL0FACAMrQIAALsFADCuAgAAvAUAEK8CAAC7BQAwsgIQAN0DACHJAgEA7AMAIdECQADfAwAh0gJAAN8DACHUAgEA7AMAIdUCAQCgBAAh1gIBAKAEACHYAgAAsQTYAiPnAiAAjwQAIQytAgAAuwUAMK4CAAC8BQAQrwIAALsFADCyAhAA3QMAIckCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdQCAQDsAwAh1QIBAKAEACHWAgEAoAQAIdgCAACxBNgCI-cCIACPBAAhCLICEADKBAAhyQIBAMkEACHRAkAAywQAIdICQADLBAAh1QIBANcEACHWAgEA1wQAIdgCAAC-BdgCI-cCIACKBQAhAZwDAAAA2AIDCLICEADKBAAhyQIBAMkEACHRAkAAywQAIdICQADLBAAh1QIBANcEACHWAgEA1wQAIdgCAAC-BdgCI-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-BAAwrgIAAAsAEK8CAAC-BAAw0QJAAN8DACHTAgEA7AMAIfMCAQDcAwAh9QIAAL8E9QIilgMAAL0EACACAAAADQAgGgAA6wUAIAIAAADoBQAgGgAA6QUAIAetAgAA5wUAMK4CAADoBQAQrwIAAOcFADDRAkAA3wMAIdMCAQDsAwAh8wIBANwDACH1AgAAvwT1AiIHrQIAAOcFADCuAgAA6AUAEK8CAADnBQAw0QJAAN8DACHTAgEA7AMAIfMCAQDcAwAh9QIAAL8E9QIiA9ECQADLBAAh8wIBAMkEACH1AgAA6gX1AiIBnAMAAAD1AgIEAwAA7AUAINECQADLBAAh8wIBAMkEACH1AgAA6gX1AiIFIQAAtQcAICIAALgHACCZAwAAtgcAIJoDAAC3BwAgnwMAAAEAIAQDAADuBQAg0QJAAAAAAfMCAQAAAAH1AgAAAPUCAgMhAAC1BwAgmQMAALYHACCfAwAAAQAgDgkAAPAFACALAADxBQAgDAAA8gUAIBQAAPMFACDJAgEAAAAB0QJAAAAAAdICQAAAAAH2AgEAAAAB9wIBAAAAAfgCAQAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAABBCEAAOAFADCZAwAA4QUAMJsDAADjBQAgnwMAAOQFADAEIQAA1AUAMJkDAADVBQAwmwMAANcFACCfAwAA2AUAMAQhAAD_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-QYAIA0AAPwGACAPAAD9BgAgEAAA_gYAIBEAAPoGACATAAD_BgAgFAAAgAcAIO0CAAD2BQAgCggAAIEHACAJAAD3BgAgCwAAggcAIAwAAKsGACAUAACABwAg9wIAAPYFACD4AgAA9gUAIPkCAAD2BQAg-gIAAPYFACD9AgAA9gUAIAAECgAA-QYAIA4AAPgGACARAAD6BgAg2gIAAPYFACABDAAAqwYAIAAAAAABBgAA9QUAIAAHBAAA9QYAIAUAAPYGACAGAAD3BgAgkAMAAPYFACCRAwAA9gUAIJMDAAD2BQAglAMAAPYFACAMyQIBAAAAAdECQAAAAAHSAkAAAAAB8AJAAAAAAfgCAQAAAAH6AgEAAAABiQMBAAAAAYoDAQAAAAGLAwEAAAABjAMBAAAAAY0DCAAAAAGOAwgAAAABDMkCAQAAAAHRAkAAAAAB0gJAAAAAAYADAQAAAAGBAwEAAAABggMBAAAAAYMDAQAAAAGEAwEAAAABhQNAAAAAAYYDQAAAAAGHAwEAAAABiAMBAAAAAQPRAkAAAAAB0wIBAAAAAfUCAAAA9QICDgUAAPMGACAGAAD0BgAgsQIBAAAAAckCAQAAAAHKAgEAAAAB0QJAAAAAAdICQAAAAAH1AgEAAAABjwMgAAAAAZADAQAAAAGRAwEAAAABkgMgAAAAAZMDQAAAAAGUAwEAAAABAgAAAAEAICEAAIcHACADAAAARgAgIQAAhwcAICIAAIsHACAQAAAARgAgBQAAzwYAIAYAANAGACAaAACLBwAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfUCAQDJBAAhjwMgAIoFACGQAwEA1wQAIZEDAQDXBAAhkgMgAIoFACGTA0AA6AQAIZQDAQDXBAAhDgUAAM8GACAGAADQBgAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfUCAQDJBAAhjwMgAIoFACGQAwEA1wQAIZEDAQDXBAAhkgMgAIoFACGTA0AA6AQAIZQDAQDXBAAhDgQAAPIGACAGAAD0BgAgsQIBAAAAAckCAQAAAAHKAgEAAAAB0QJAAAAAAdICQAAAAAH1AgEAAAABjwMgAAAAAZADAQAAAAGRAwEAAAABkgMgAAAAAZMDQAAAAAGUAwEAAAABAgAAAAEAICEAAIwHACADAAAARgAgIQAAjAcAICIAAJAHACAQAAAARgAgBAAAzgYAIAYAANAGACAaAACQBwAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfUCAQDJBAAhjwMgAIoFACGQAwEA1wQAIZEDAQDXBAAhkgMgAIoFACGTA0AA6AQAIZQDAQDXBAAhDgQAAM4GACAGAADQBgAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfUCAQDJBAAhjwMgAIoFACGQAwEA1wQAIZEDAQDXBAAhkgMgAIoFACGTA0AA6AQAIZQDAQDXBAAhBbACAQAAAAGxAgEAAAABsgIQAAAAAbMCgAAAAAG0AkAAAAABAgAAALYDACAhAACRBwAgAwAAAA8AICEAAJEHACAiAACVBwAgBwAAAA8AIBoAAJUHACCwAgEAyQQAIbECAQDJBAAhsgIQAMoEACGzAoAAAAABtAJAAMsEACEFsAIBAMkEACGxAgEAyQQAIbICEADKBAAhswKAAAAAAbQCQADLBAAhDwgAALoGACALAADxBQAgDAAA8gUAIBQAAPMFACDJAgEAAAAB0QJAAAAAAdICQAAAAAH2AgEAAAAB9wIBAAAAAfgCAQAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAAB_QIBAAAAAQIAAAATACAhAACWBwAgAwAAABEAICEAAJYHACAiAACaBwAgEQAAABEAIAgAALkGACALAADaBAAgDAAA2wQAIBQAANwEACAaAACaBwAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh9gIBAMkEACH3AgEA1wQAIfgCAQDXBAAh-QIBANcEACH6AgEA1wQAIfsCAQDJBAAh_AIBAMkEACH9AgEA1wQAIQ8IAAC5BgAgCwAA2gQAIAwAANsEACAUAADcBAAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh9gIBAMkEACH3AgEA1wQAIfgCAQDXBAAh-QIBANcEACH6AgEA1wQAIfsCAQDJBAAh_AIBAMkEACH9AgEA1wQAIQ8IAAC6BgAgCQAA8AUAIAwAAPIFACAUAADzBQAgyQIBAAAAAdECQAAAAAHSAkAAAAAB9gIBAAAAAfcCAQAAAAH4AgEAAAAB-QIBAAAAAfoCAQAAAAH7AgEAAAAB_AIBAAAAAf0CAQAAAAECAAAAEwAgIQAAmwcAIAMAAAARACAhAACbBwAgIgAAnwcAIBEAAAARACAIAAC5BgAgCQAA2QQAIAwAANsEACAUAADcBAAgGgAAnwcAIMkCAQDJBAAh0QJAAMsEACHSAkAAywQAIfYCAQDJBAAh9wIBANcEACH4AgEA1wQAIfkCAQDXBAAh-gIBANcEACH7AgEAyQQAIfwCAQDJBAAh_QIBANcEACEPCAAAuQYAIAkAANkEACAMAADbBAAgFAAA3AQAIMkCAQDJBAAh0QJAAMsEACHSAkAAywQAIfYCAQDJBAAh9wIBANcEACH4AgEA1wQAIfkCAQDXBAAh-gIBANcEACH7AgEAyQQAIfwCAQDJBAAh_QIBANcEACEJsQIBAAAAAckCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHqAgIAAAAB6wIQAAAAAewCIAAAAAHtAgEAAAABDwgAALoGACAJAADwBQAgCwAA8QUAIBQAAPMFACDJAgEAAAAB0QJAAAAAAdICQAAAAAH2AgEAAAAB9wIBAAAAAfgCAQAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAAB_QIBAAAAAQIAAAATACAhAAChBwAgAwAAABEAICEAAKEHACAiAAClBwAgEQAAABEAIAgAALkGACAJAADZBAAgCwAA2gQAIBQAANwEACAaAAClBwAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh9gIBAMkEACH3AgEA1wQAIfgCAQDXBAAh-QIBANcEACH6AgEA1wQAIfsCAQDJBAAh_AIBAMkEACH9AgEA1wQAIQ8IAAC5BgAgCQAA2QQAIAsAANoEACAUAADcBAAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh9gIBAMkEACH3AgEA1wQAIfgCAQDXBAAh-QIBANcEACH6AgEA1wQAIfsCAQDJBAAh_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-AIBAAAAAfkCAQAAAAH6AgEAAAAB-wIBAAAAAfwCAQAAAAH9AgEAAAABAgAAABMAICEAAMcHACADAAAAEQAgIQAAxwcAICIAAMsHACARAAAAEQAgCAAAuQYAIAkAANkEACALAADaBAAgDAAA2wQAIBoAAMsHACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACH2AgEAyQQAIfcCAQDXBAAh-AIBANcEACH5AgEA1wQAIfoCAQDXBAAh-wIBAMkEACH8AgEAyQQAIf0CAQDXBAAhDwgAALkGACAJAADZBAAgCwAA2gQAIAwAANsEACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACH2AgEAyQQAIfcCAQDXBAAh-AIBANcEACH5AgEA1wQAIfoCAQDXBAAh-wIBAMkEACH8AgEAyQQAIf0CAQDXBAAhDckCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHVAgEAAAAB1gIBAAAAAdgCAAAA2AIC2QJAAAAAAdoCQAAAAAHcAgAAANwCAt0CAQAAAAHeAgEAAAAB3wIBAAAAAQMAAADoAQAgIQAAvAcAICIAAM8HACAIAAAA6AEAIBoAAM8HACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIecCIACKBQAh7gIBAMkEACEGsQIBAMkEACHJAgEAyQQAIdECQADLBAAh0gJAAMsEACHnAiAAigUAIe4CAQDJBAAhCbECAQAAAAHJAgEAAAAB0QJAAAAAAdICQAAAAAHpAgEAAAAB6gICAAAAAesCEAAAAAHsAiAAAAAB7QIBAAAAARAKAACcBgAgDQAAzgUAIA8AAM8FACAQAADQBQAgEQAA0QUAIBMAANIFACCxAgEAAAAByQIBAAAAAdECQAAAAAHSAkAAAAAB0wIBAAAAAekCAQAAAAHqAgIAAAAB6wIQAAAAAewCIAAAAAHtAgEAAAABAgAAAB0AICEAANEHACAQCgAAnAYAIA0AAM4FACAPAADPBQAgEAAA0AUAIBMAANIFACAUAADTBQAgsQIBAAAAAckCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHpAgEAAAAB6gICAAAAAesCEAAAAAHsAiAAAAAB7QIBAAAAAQIAAAAdACAhAADTBwAgAwAAABsAICEAANMHACAiAADXBwAgEgAAABsAIAoAAJsGACANAACMBQAgDwAAjQUAIBAAAI4FACATAACQBQAgFAAAkQUAIBoAANcHACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh6QIBAMkEACHqAgIAiQUAIesCEADKBAAh7AIgAIoFACHtAgEA1wQAIRAKAACbBgAgDQAAjAUAIA8AAI0FACAQAACOBQAgEwAAkAUAIBQAAJEFACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh6QIBAMkEACHqAgIAiQUAIesCEADKBAAh7AIgAIoFACHtAgEA1wQAIQzJAgEAAAAB0QJAAAAAAdICQAAAAAHUAgEAAAAB1QIBAAAAAdYCAQAAAAHcAgAAAOMCAt0CAQAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAkAAAAABAwAAABsAICEAANEHACAiAADbBwAgEgAAABsAIAoAAJsGACANAACMBQAgDwAAjQUAIBAAAI4FACARAACPBQAgEwAAkAUAIBoAANsHACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh6QIBAMkEACHqAgIAiQUAIesCEADKBAAh7AIgAIoFACHtAgEA1wQAIRAKAACbBgAgDQAAjAUAIA8AAI0FACAQAACOBQAgEQAAjwUAIBMAAJAFACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh6QIBAMkEACHqAgIAiQUAIesCEADKBAAh7AIgAIoFACHtAgEA1wQAIQ3JAgEAAAAB0QJAAAAAAdICQAAAAAHUAgEAAAAB1QIBAAAAAdYCAQAAAAHYAgAAANgCAtkCQAAAAAHaAkAAAAAB3AIAAADcAgLdAgEAAAAB3gIBAAAAAd8CAQAAAAEKyQIBAAAAAdECQAAAAAHSAkAAAAAB9gIBAAAAAfcCAQAAAAH4AgEAAAAB-QIBAAAAAfoCAQAAAAH7AgEAAAAB_AIBAAAAAQQEBgIFCgMGDgQHABQBAwABAQMAAQIDAAEKAAUGBwATCBAGCRYECxoIDB4JFD0PAgYUBQcABwEGFQABCgAFCAcAEgoABQ0ACg8kDBAoDREsDhM0ERQ3DwIHAAsMHwkBDCAAAQ4ACQEOAAkCDgAJEi4PBAcAEAoABQ4ACREvDgERMAABDgAJBQ84ABA5ABE6ABM7ABQ8AAQJPgALPwAMQAAUQQADBEIABUMABkQAAAAAAwcAGScAGigAGwAAAAMHABknABooABsBAwABAQMAAQUHACAnACMoACQ5ACE6ACIAAAAAAAUHACAnACMoACQ5ACE6ACIBAwABAQMAAQMHACknACooACsAAAADBwApJwAqKAArAAAAAwcAMScAMigAMwAAAAMHADEnADIoADMBCKsBBgEIsQEGAwcAOCcAOSgAOgAAAAMHADgnADkoADoCAwABCgAFAgMAAQoABQMHAD8nAEAoAEEAAAADBwA_JwBAKABBAQoABQEKAAUDBwBGJwBHKABIAAAAAwcARicARygASAAAAwcATScATigATwAAAAMHAE0nAE4oAE8CCgAFDQAKAgoABQ0ACgUHAFQnAFcoAFg5AFU6AFYAAAAAAAUHAFQnAFcoAFg5AFU6AFYBDgAJAQ4ACQMHAF0nAF4oAF8AAAADBwBdJwBeKABfAQ4ACQEOAAkDBwBkJwBlKABmAAAAAwcAZCcAZSgAZgEOAAkBDgAJBQcAaycAbigAbzkAbDoAbQAAAAAABQcAaycAbigAbzkAbDoAbQIOAAkS4AIPAg4ACRLmAg8DBwB0JwB1KAB2AAAAAwcAdCcAdSgAdgAAAAMHAHwnAH0oAH4AAAADBwB8JwB9KAB-AgoABQ4ACQIKAAUOAAkDBwCDAScAhAEoAIUBAAAAAwcAgwEnAIQBKACFAQAAAAUHAIsBJwCOASgAjwE5AIwBOgCNAQAAAAAABQcAiwEnAI4BKACPATkAjAE6AI0BAAAFBwCUAScAlwEoAJgBOQCVAToAlgEAAAAAAAUHAJQBJwCXASgAmAE5AJUBOgCWARUCARZFARdIARhJARlKARtMARxOFR1PFh5RAR9TFSBUFyNVASRWASVXFSlaGCpbHCtcAixdAi1eAi5fAi9gAjBiAjFkFTJlHTNnAjRpFTVqHjZrAjdsAjhtFTtwHzxxJT1yAz5zAz90A0B1A0F2A0J4A0N6FUR7JkV9A0Z_FUeAASdIgQEDSYIBA0qDARVLhgEoTIcBLE2JAS1OigEtT40BLVCOAS1RjwEtUpEBLVOTARVUlAEuVZYBLVaYARVXmQEvWJoBLVmbAS1anAEVW58BMFygATRdoQEFXqIBBV-jAQVgpAEFYaUBBWKnAQVjqQEVZKoBNWWtAQVmrwEVZ7ABNmiyAQVpswEFarQBFWu3ATdsuAE7bbkBBG66AQRvuwEEcLwBBHG9AQRyvwEEc8EBFXTCATx1xAEEdsYBFXfHAT14yAEEeckBBHrKARV7zQE-fM4BQn3PAQh-0AEIf9EBCIAB0gEIgQHTAQiCAdUBCIMB1wEVhAHYAUOFAdoBCIYB3AEVhwHdAUSIAd4BCIkB3wEIigHgARWLAeMBRYwB5AFJjQHmAQqOAecBCo8B6gEKkAHrAQqRAewBCpIB7gEKkwHwARWUAfEBSpUB8wEKlgH1ARWXAfYBS5gB9wEKmQH4AQqaAfkBFZsB_AFMnAH9AVCdAf4BCZ4B_wEJnwGAAgmgAYECCaEBggIJogGEAgmjAYYCFaQBhwJRpQGJAgmmAYsCFacBjAJSqAGNAgmpAY4CCaoBjwIVqwGSAlOsAZMCWa0BlAIRrgGVAhGvAZYCEbABlwIRsQGYAhGyAZoCEbMBnAIVtAGdAlq1AZ8CEbYBoQIVtwGiAlu4AaMCEbkBpAIRugGlAhW7AagCXLwBqQJgvQGqAgy-AasCDL8BrAIMwAGtAgzBAa4CDMIBsAIMwwGyAhXEAbMCYcUBtQIMxgG3AhXHAbgCYsgBuQIMyQG6AgzKAbsCFcsBvgJjzAG_AmfNAcACDc4BwQINzwHCAg3QAcMCDdEBxAIN0gHGAg3TAcgCFdQByQJo1QHLAg3WAc0CFdcBzgJp2AHPAg3ZAdACDdoB0QIV2wHUAmrcAdUCcN0B1gIO3gHXAg7fAdgCDuAB2QIO4QHaAg7iAdwCDuMB3gIV5AHfAnHlAeICDuYB5AIV5wHlAnLoAecCDukB6AIO6gHpAhXrAewCc-wB7QJ37QHvAnjuAfACeO8B8wJ48AH0AnjxAfUCePIB9wJ48wH5AhX0AfoCefUB_AJ49gH-AhX3Af8CevgBgAN4-QGBA3j6AYIDFfsBhQN7_AGGA3_9AYcDD_4BiAMP_wGJAw-AAooDD4ECiwMPggKNAw-DAo8DFYQCkAOAAYUCkgMPhgKUAxWHApUDgQGIApYDD4kClwMPigKYAxWLApsDggGMApwDhgGNAp4DhwGOAp8DhwGPAqIDhwGQAqMDhwGRAqQDhwGSAqYDhwGTAqgDFZQCqQOIAZUCqwOHAZYCrQMVlwKuA4kBmAKvA4cBmQKwA4cBmgKxAxWbArQDigGcArUDkAGdArcDBp4CuAMGnwK6AwagArsDBqECvAMGogK-AwajAsADFaQCwQORAaUCwwMGpgLFAxWnAsYDkgGoAscDBqkCyAMGqgLJAxWrAswDkwGsAs0DmQE" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"sessions\",\"accounts\",\"complexes\",\"_count\",\"plan\",\"users\",\"complex\",\"invitations\",\"courts\",\"sport\",\"court\",\"availabilities\",\"priceRules\",\"bookings\",\"recurringGroup\",\"maintenances\",\"recurringGroups\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"_avg\",\"_sum\",\"Session.groupBy\",\"Session.aggregate\",\"Account.findUnique\",\"Account.findUniqueOrThrow\",\"Account.findFirst\",\"Account.findFirstOrThrow\",\"Account.findMany\",\"Account.createOne\",\"Account.createMany\",\"Account.createManyAndReturn\",\"Account.updateOne\",\"Account.updateMany\",\"Account.updateManyAndReturn\",\"Account.upsertOne\",\"Account.deleteOne\",\"Account.deleteMany\",\"Account.groupBy\",\"Account.aggregate\",\"Verification.findUnique\",\"Verification.findUniqueOrThrow\",\"Verification.findFirst\",\"Verification.findFirstOrThrow\",\"Verification.findMany\",\"Verification.createOne\",\"Verification.createMany\",\"Verification.createManyAndReturn\",\"Verification.updateOne\",\"Verification.updateMany\",\"Verification.updateManyAndReturn\",\"Verification.upsertOne\",\"Verification.deleteOne\",\"Verification.deleteMany\",\"Verification.groupBy\",\"Verification.aggregate\",\"Complex.findUnique\",\"Complex.findUniqueOrThrow\",\"Complex.findFirst\",\"Complex.findFirstOrThrow\",\"Complex.findMany\",\"Complex.createOne\",\"Complex.createMany\",\"Complex.createManyAndReturn\",\"Complex.updateOne\",\"Complex.updateMany\",\"Complex.updateManyAndReturn\",\"Complex.upsertOne\",\"Complex.deleteOne\",\"Complex.deleteMany\",\"Complex.groupBy\",\"Complex.aggregate\",\"ComplexUser.findUnique\",\"ComplexUser.findUniqueOrThrow\",\"ComplexUser.findFirst\",\"ComplexUser.findFirstOrThrow\",\"ComplexUser.findMany\",\"ComplexUser.createOne\",\"ComplexUser.createMany\",\"ComplexUser.createManyAndReturn\",\"ComplexUser.updateOne\",\"ComplexUser.updateMany\",\"ComplexUser.updateManyAndReturn\",\"ComplexUser.upsertOne\",\"ComplexUser.deleteOne\",\"ComplexUser.deleteMany\",\"ComplexUser.groupBy\",\"ComplexUser.aggregate\",\"ComplexInvitation.findUnique\",\"ComplexInvitation.findUniqueOrThrow\",\"ComplexInvitation.findFirst\",\"ComplexInvitation.findFirstOrThrow\",\"ComplexInvitation.findMany\",\"ComplexInvitation.createOne\",\"ComplexInvitation.createMany\",\"ComplexInvitation.createManyAndReturn\",\"ComplexInvitation.updateOne\",\"ComplexInvitation.updateMany\",\"ComplexInvitation.updateManyAndReturn\",\"ComplexInvitation.upsertOne\",\"ComplexInvitation.deleteOne\",\"ComplexInvitation.deleteMany\",\"ComplexInvitation.groupBy\",\"ComplexInvitation.aggregate\",\"Sport.findUnique\",\"Sport.findUniqueOrThrow\",\"Sport.findFirst\",\"Sport.findFirstOrThrow\",\"Sport.findMany\",\"Sport.createOne\",\"Sport.createMany\",\"Sport.createManyAndReturn\",\"Sport.updateOne\",\"Sport.updateMany\",\"Sport.updateManyAndReturn\",\"Sport.upsertOne\",\"Sport.deleteOne\",\"Sport.deleteMany\",\"Sport.groupBy\",\"Sport.aggregate\",\"Court.findUnique\",\"Court.findUniqueOrThrow\",\"Court.findFirst\",\"Court.findFirstOrThrow\",\"Court.findMany\",\"Court.createOne\",\"Court.createMany\",\"Court.createManyAndReturn\",\"Court.updateOne\",\"Court.updateMany\",\"Court.updateManyAndReturn\",\"Court.upsertOne\",\"Court.deleteOne\",\"Court.deleteMany\",\"Court.groupBy\",\"Court.aggregate\",\"CourtMaintenance.findUnique\",\"CourtMaintenance.findUniqueOrThrow\",\"CourtMaintenance.findFirst\",\"CourtMaintenance.findFirstOrThrow\",\"CourtMaintenance.findMany\",\"CourtMaintenance.createOne\",\"CourtMaintenance.createMany\",\"CourtMaintenance.createManyAndReturn\",\"CourtMaintenance.updateOne\",\"CourtMaintenance.updateMany\",\"CourtMaintenance.updateManyAndReturn\",\"CourtMaintenance.upsertOne\",\"CourtMaintenance.deleteOne\",\"CourtMaintenance.deleteMany\",\"CourtMaintenance.groupBy\",\"CourtMaintenance.aggregate\",\"CourtAvailability.findUnique\",\"CourtAvailability.findUniqueOrThrow\",\"CourtAvailability.findFirst\",\"CourtAvailability.findFirstOrThrow\",\"CourtAvailability.findMany\",\"CourtAvailability.createOne\",\"CourtAvailability.createMany\",\"CourtAvailability.createManyAndReturn\",\"CourtAvailability.updateOne\",\"CourtAvailability.updateMany\",\"CourtAvailability.updateManyAndReturn\",\"CourtAvailability.upsertOne\",\"CourtAvailability.deleteOne\",\"CourtAvailability.deleteMany\",\"CourtAvailability.groupBy\",\"CourtAvailability.aggregate\",\"CourtPriceRule.findUnique\",\"CourtPriceRule.findUniqueOrThrow\",\"CourtPriceRule.findFirst\",\"CourtPriceRule.findFirstOrThrow\",\"CourtPriceRule.findMany\",\"CourtPriceRule.createOne\",\"CourtPriceRule.createMany\",\"CourtPriceRule.createManyAndReturn\",\"CourtPriceRule.updateOne\",\"CourtPriceRule.updateMany\",\"CourtPriceRule.updateManyAndReturn\",\"CourtPriceRule.upsertOne\",\"CourtPriceRule.deleteOne\",\"CourtPriceRule.deleteMany\",\"CourtPriceRule.groupBy\",\"CourtPriceRule.aggregate\",\"CourtBooking.findUnique\",\"CourtBooking.findUniqueOrThrow\",\"CourtBooking.findFirst\",\"CourtBooking.findFirstOrThrow\",\"CourtBooking.findMany\",\"CourtBooking.createOne\",\"CourtBooking.createMany\",\"CourtBooking.createManyAndReturn\",\"CourtBooking.updateOne\",\"CourtBooking.updateMany\",\"CourtBooking.updateManyAndReturn\",\"CourtBooking.upsertOne\",\"CourtBooking.deleteOne\",\"CourtBooking.deleteMany\",\"CourtBooking.groupBy\",\"CourtBooking.aggregate\",\"CourtBookingLog.findUnique\",\"CourtBookingLog.findUniqueOrThrow\",\"CourtBookingLog.findFirst\",\"CourtBookingLog.findFirstOrThrow\",\"CourtBookingLog.findMany\",\"CourtBookingLog.createOne\",\"CourtBookingLog.createMany\",\"CourtBookingLog.createManyAndReturn\",\"CourtBookingLog.updateOne\",\"CourtBookingLog.updateMany\",\"CourtBookingLog.updateManyAndReturn\",\"CourtBookingLog.upsertOne\",\"CourtBookingLog.deleteOne\",\"CourtBookingLog.deleteMany\",\"CourtBookingLog.groupBy\",\"CourtBookingLog.aggregate\",\"RecurringBookingGroup.findUnique\",\"RecurringBookingGroup.findUniqueOrThrow\",\"RecurringBookingGroup.findFirst\",\"RecurringBookingGroup.findFirstOrThrow\",\"RecurringBookingGroup.findMany\",\"RecurringBookingGroup.createOne\",\"RecurringBookingGroup.createMany\",\"RecurringBookingGroup.createManyAndReturn\",\"RecurringBookingGroup.updateOne\",\"RecurringBookingGroup.updateMany\",\"RecurringBookingGroup.updateManyAndReturn\",\"RecurringBookingGroup.upsertOne\",\"RecurringBookingGroup.deleteOne\",\"RecurringBookingGroup.deleteMany\",\"RecurringBookingGroup.groupBy\",\"RecurringBookingGroup.aggregate\",\"PasswordResetRequest.findUnique\",\"PasswordResetRequest.findUniqueOrThrow\",\"PasswordResetRequest.findFirst\",\"PasswordResetRequest.findFirstOrThrow\",\"PasswordResetRequest.findMany\",\"PasswordResetRequest.createOne\",\"PasswordResetRequest.createMany\",\"PasswordResetRequest.createManyAndReturn\",\"PasswordResetRequest.updateOne\",\"PasswordResetRequest.updateMany\",\"PasswordResetRequest.updateManyAndReturn\",\"PasswordResetRequest.upsertOne\",\"PasswordResetRequest.deleteOne\",\"PasswordResetRequest.deleteMany\",\"PasswordResetRequest.groupBy\",\"PasswordResetRequest.aggregate\",\"Plan.findUnique\",\"Plan.findUniqueOrThrow\",\"Plan.findFirst\",\"Plan.findFirstOrThrow\",\"Plan.findMany\",\"Plan.createOne\",\"Plan.createMany\",\"Plan.createManyAndReturn\",\"Plan.updateOne\",\"Plan.updateMany\",\"Plan.updateManyAndReturn\",\"Plan.upsertOne\",\"Plan.deleteOne\",\"Plan.deleteMany\",\"Plan.groupBy\",\"Plan.aggregate\",\"AND\",\"OR\",\"NOT\",\"code\",\"name\",\"price\",\"rules\",\"lastUpdatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"every\",\"some\",\"none\",\"id\",\"email\",\"otpHash\",\"otpExpiresAt\",\"otpAttempts\",\"otpLastSentAt\",\"otpResendCount\",\"usedAt\",\"createdAt\",\"updatedAt\",\"complexId\",\"courtId\",\"startTime\",\"endTime\",\"DayOfWeek\",\"dayOfWeek\",\"startDate\",\"endDate\",\"RecurringBookingGroupStatus\",\"status\",\"customerName\",\"customerPhone\",\"customerEmail\",\"bookingCode\",\"bookingDate\",\"CourtBookingStatus\",\"previousStatus\",\"newStatus\",\"previousCourtId\",\"previousStartTime\",\"previousEndTime\",\"changedAt\",\"recurringGroupId\",\"isActive\",\"reason\",\"sportId\",\"slotDurationMinutes\",\"basePrice\",\"isUnderMaintenance\",\"maintenanceReason\",\"slug\",\"tokenHash\",\"expiresAt\",\"acceptedAt\",\"revokedAt\",\"userId\",\"ComplexUserRole\",\"role\",\"complexName\",\"physicalAddress\",\"city\",\"state\",\"country\",\"complexSlug\",\"adminEmail\",\"planCode\",\"identifier\",\"value\",\"accountId\",\"providerId\",\"accessToken\",\"refreshToken\",\"idToken\",\"accessTokenExpiresAt\",\"refreshTokenExpiresAt\",\"scope\",\"password\",\"token\",\"ipAddress\",\"userAgent\",\"countryCode\",\"latitude\",\"longitude\",\"emailVerified\",\"image\",\"phone\",\"banned\",\"bannedAt\",\"banReason\",\"courtId_bookingDate_startTime\",\"complexId_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "3QeZAZACEgQAAKMEACAFAACkBAAgBgAApQQAIK0CAACiBAAwrgIAAEYAEK8CAACiBAAwsQIBANwDACHJAgEAAAABygIBAAAAAdECQADfAwAh0gJAAN8DACH4AgEA3AMAIZIDIACSBAAhkwMBAIMEACGUAwEAgwQAIZUDIACSBAAhlgNAAO4DACGXAwEAgwQAIQEAAAABACARAwAAwAQAIK0CAADCBAAwrgIAAAMAEK8CAADCBAAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh8wJAAN8DACH2AgEA3AMAIfsCAQCDBAAh_QIBAIMEACGMAwEA3AMAIY0DAQCDBAAhjgMBAIMEACGPAwEAgwQAIZADCADDBAAhkQMIAMMEACEIAwAAgwcAIPsCAAD2BQAg_QIAAPYFACCNAwAA9gUAII4DAAD2BQAgjwMAAPYFACCQAwAA9gUAIJEDAAD2BQAgEQMAAMAEACCtAgAAwgQAMK4CAAADABCvAgAAwgQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh8wJAAN8DACH2AgEA3AMAIfsCAQCDBAAh_QIBAIMEACGMAwEAAAABjQMBAIMEACGOAwEAgwQAIY8DAQCDBAAhkAMIAMMEACGRAwgAwwQAIQMAAAADACABAAAEADACAAAFACARAwAAwAQAIK0CAADBBAAwrgIAAAcAEK8CAADBBAAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh9gIBANwDACGDAwEA3AMAIYQDAQDcAwAhhQMBAIMEACGGAwEAgwQAIYcDAQCDBAAhiANAAO4DACGJA0AA7gMAIYoDAQCDBAAhiwMBAIMEACEIAwAAgwcAIIUDAAD2BQAghgMAAPYFACCHAwAA9gUAIIgDAAD2BQAgiQMAAPYFACCKAwAA9gUAIIsDAAD2BQAgEQMAAMAEACCtAgAAwQQAMK4CAAAHABCvAgAAwQQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh9gIBANwDACGDAwEA3AMAIYQDAQDcAwAhhQMBAIMEACGGAwEAgwQAIYcDAQCDBAAhiANAAO4DACGJA0AA7gMAIYoDAQCDBAAhiwMBAIMEACEDAAAABwAgAQAACAAwAgAACQAgCQMAAMAEACAKAACqBAAgrQIAAL4EADCuAgAACwAQrwIAAL4EADDRAkAA3wMAIdMCAQDsAwAh9gIBANwDACH4AgAAvwT4AiICAwAAgwcAIAoAAPkGACAKAwAAwAQAIAoAAKoEACCtAgAAvgQAMK4CAAALABCvAgAAvgQAMNECQADfAwAh0wIBAOwDACH2AgEA3AMAIfgCAAC_BPgCIpkDAAC9BAAgAwAAAAsAIAEAAAwAMAIAAA0AIAkGAADgAwAgrQIAANsDADCuAgAADwAQrwIAANsDADCwAgEA3AMAIbECAQDcAwAhsgIQAN0DACGzAgAA3gMAILQCQADfAwAhAQAAAA8AIBMIAAC7BAAgCQAApQQAIAsAALwEACAMAACTBAAgFAAAuAQAIK0CAAC6BAAwrgIAABEAEK8CAAC6BAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh-QIBANwDACH6AgEAgwQAIfsCAQCDBAAh_AIBAIMEACH9AgEAgwQAIf4CAQDcAwAh_wIBANwDACGAAwEAgwQAIQoIAACBBwAgCQAA9wYAIAsAAIIHACAMAACrBgAgFAAAgAcAIPoCAAD2BQAg-wIAAPYFACD8AgAA9gUAIP0CAAD2BQAggAMAAPYFACATCAAAuwQAIAkAAKUEACALAAC8BAAgDAAAkwQAIBQAALgEACCtAgAAugQAMK4CAAARABCvAgAAugQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh-QIBANwDACH6AgEAgwQAIfsCAQCDBAAh_AIBAIMEACH9AgEAgwQAIf4CAQAAAAH_AgEA3AMAIYADAQCDBAAhAwAAABEAIAEAABIAMAIAABMAIAEAAAARACADAAAACwAgAQAADAAwAgAADQAgDQoAAKoEACCtAgAAuQQAMK4CAAAXABCvAgAAuQQAMMkCAQDsAwAhygIBANwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHyAgEA3AMAIfMCQADfAwAh9AJAAO4DACH1AkAA7gMAIQMKAAD5BgAg9AIAAPYFACD1AgAA9gUAIA0KAACqBAAgrQIAALkEADCuAgAAFwAQrwIAALkEADDJAgEAAAABygIBANwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHyAgEAAAAB8wJAAN8DACH0AkAA7gMAIfUCQADuAwAhAwAAABcAIAEAABgAMAIAABkAIBQKAACqBAAgDQAAtAQAIA8AALUEACAQAAC2BAAgEQAAqwQAIBMAALcEACAUAAC4BAAgrQIAALMEADCuAgAAGwAQrwIAALMEADCxAgEA3AMAIckCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh7AIBAOwDACHtAgIA7QMAIe4CEADdAwAh7wIgAJIEACHwAgEAgwQAIQgKAAD5BgAgDQAA_AYAIA8AAP0GACAQAAD-BgAgEQAA-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-wIBAPoDACH9AgEA-gMAIYwDAQDPAwAhjQMBAPoDACGOAwEA-gMAIY8DAQD6AwAhkAMIAJ4EACGRAwgAngQAIQMAAAADACABAABuADAmAABvACADAAAAAwAgAQAABAAwAgAABQAgAQAAAAkAIAEAAAAJACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIAMAAAAHACABAAAIADACAAAJACAOAwAAwgYAIMkCAQAAAAHRAkAAAAAB0gJAAAAAAfYCAQAAAAGDAwEAAAABhAMBAAAAAYUDAQAAAAGGAwEAAAABhwMBAAAAAYgDQAAAAAGJA0AAAAABigMBAAAAAYsDAQAAAAEBGgAAdwAgDckCAQAAAAHRAkAAAAAB0gJAAAAAAfYCAQAAAAGDAwEAAAABhAMBAAAAAYUDAQAAAAGGAwEAAAABhwMBAAAAAYgDQAAAAAGJA0AAAAABigMBAAAAAYsDAQAAAAEBGgAAeQAwARoAAHkAMA4DAADBBgAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh9gIBAMkEACGDAwEAyQQAIYQDAQDJBAAhhQMBANcEACGGAwEA1wQAIYcDAQDXBAAhiANAAOgEACGJA0AA6AQAIYoDAQDXBAAhiwMBANcEACECAAAACQAgGgAAfAAgDckCAQDJBAAh0QJAAMsEACHSAkAAywQAIfYCAQDJBAAhgwMBAMkEACGEAwEAyQQAIYUDAQDXBAAhhgMBANcEACGHAwEA1wQAIYgDQADoBAAhiQNAAOgEACGKAwEA1wQAIYsDAQDXBAAhAgAAAAcAIBoAAH4AIAIAAAAHACAaAAB-ACADAAAACQAgIQAAdwAgIgAAfAAgAQAAAAkAIAEAAAAHACAKBwAAvgYAICcAAMAGACAoAAC_BgAghQMAAPYFACCGAwAA9gUAIIcDAAD2BQAgiAMAAPYFACCJAwAA9gUAIIoDAAD2BQAgiwMAAPYFACAQrQIAAJwEADCuAgAAhQEAEK8CAACcBAAwyQIBAM8DACHRAkAA0gMAIdICQADSAwAh9gIBAM8DACGDAwEAzwMAIYQDAQDPAwAhhQMBAPoDACGGAwEA-gMAIYcDAQD6AwAhiANAAOQDACGJA0AA5AMAIYoDAQD6AwAhiwMBAPoDACEDAAAABwAgAQAAhAEAMCYAAIUBACADAAAABwAgAQAACAAwAgAACQAgCa0CAACbBAAwrgIAAIsBABCvAgAAmwQAMMkCAQAAAAHRAkAA3wMAIdICQADfAwAh8wJAAN8DACGBAwEA3AMAIYIDAQDcAwAhAQAAAIgBACABAAAAiAEAIAmtAgAAmwQAMK4CAACLAQAQrwIAAJsEADDJAgEA3AMAIdECQADfAwAh0gJAAN8DACHzAkAA3wMAIYEDAQDcAwAhggMBANwDACEAAwAAAIsBACABAACMAQAwAgAAiAEAIAMAAACLAQAgAQAAjAEAMAIAAIgBACADAAAAiwEAIAEAAIwBADACAACIAQAgBskCAQAAAAHRAkAAAAAB0gJAAAAAAfMCQAAAAAGBAwEAAAABggMBAAAAAQEaAACQAQAgBskCAQAAAAHRAkAAAAAB0gJAAAAAAfMCQAAAAAGBAwEAAAABggMBAAAAAQEaAACSAQAwARoAAJIBADAGyQIBAMkEACHRAkAAywQAIdICQADLBAAh8wJAAMsEACGBAwEAyQQAIYIDAQDJBAAhAgAAAIgBACAaAACVAQAgBskCAQDJBAAh0QJAAMsEACHSAkAAywQAIfMCQADLBAAhgQMBAMkEACGCAwEAyQQAIQIAAACLAQAgGgAAlwEAIAIAAACLAQAgGgAAlwEAIAMAAACIAQAgIQAAkAEAICIAAJUBACABAAAAiAEAIAEAAACLAQAgAwcAALsGACAnAAC9BgAgKAAAvAYAIAmtAgAAmgQAMK4CAACeAQAQrwIAAJoEADDJAgEAzwMAIdECQADSAwAh0gJAANIDACHzAkAA0gMAIYEDAQDPAwAhggMBAM8DACEDAAAAiwEAIAEAAJ0BADAmAACeAQAgAwAAAIsBACABAACMAQAwAgAAiAEAIAEAAAATACABAAAAEwAgAwAAABEAIAEAABIAMAIAABMAIAMAAAARACABAAASADACAAATACADAAAAEQAgAQAAEgAwAgAAEwAgEAgAALoGACAJAADwBQAgCwAA8QUAIAwAAPIFACAUAADzBQAgyQIBAAAAAdECQAAAAAHSAkAAAAAB-QIBAAAAAfoCAQAAAAH7AgEAAAAB_AIBAAAAAf0CAQAAAAH-AgEAAAAB_wIBAAAAAYADAQAAAAEBGgAApgEAIAvJAgEAAAAB0QJAAAAAAdICQAAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAAB_QIBAAAAAf4CAQAAAAH_AgEAAAABgAMBAAAAAQEaAACoAQAwARoAAKgBADABAAAADwAgEAgAALkGACAJAADZBAAgCwAA2gQAIAwAANsEACAUAADcBAAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh-QIBAMkEACH6AgEA1wQAIfsCAQDXBAAh_AIBANcEACH9AgEA1wQAIf4CAQDJBAAh_wIBAMkEACGAAwEA1wQAIQIAAAATACAaAACsAQAgC8kCAQDJBAAh0QJAAMsEACHSAkAAywQAIfkCAQDJBAAh-gIBANcEACH7AgEA1wQAIfwCAQDXBAAh_QIBANcEACH-AgEAyQQAIf8CAQDJBAAhgAMBANcEACECAAAAEQAgGgAArgEAIAIAAAARACAaAACuAQAgAQAAAA8AIAMAAAATACAhAACmAQAgIgAArAEAIAEAAAATACABAAAAEQAgCAcAALYGACAnAAC4BgAgKAAAtwYAIPoCAAD2BQAg-wIAAPYFACD8AgAA9gUAIP0CAAD2BQAggAMAAPYFACAOrQIAAJkEADCuAgAAtgEAEK8CAACZBAAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh-QIBAM8DACH6AgEA-gMAIfsCAQD6AwAh_AIBAPoDACH9AgEA-gMAIf4CAQDPAwAh_wIBAM8DACGAAwEA-gMAIQMAAAARACABAAC1AQAwJgAAtgEAIAMAAAARACABAAASADACAAATACABAAAADQAgAQAAAA0AIAMAAAALACABAAAMADACAAANACADAAAACwAgAQAADAAwAgAADQAgAwAAAAsAIAEAAAwAMAIAAA0AIAYDAADuBQAgCgAAtQYAINECQAAAAAHTAgEAAAAB9gIBAAAAAfgCAAAA-AICARoAAL4BACAE0QJAAAAAAdMCAQAAAAH2AgEAAAAB-AIAAAD4AgIBGgAAwAEAMAEaAADAAQAwBgMAAOwFACAKAAC0BgAg0QJAAMsEACHTAgEAyQQAIfYCAQDJBAAh-AIAAOoF-AIiAgAAAA0AIBoAAMMBACAE0QJAAMsEACHTAgEAyQQAIfYCAQDJBAAh-AIAAOoF-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_JAgEAAAAB1AIBAAAAAdUCAQAAAAHWAgEAAAAB3QIBAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAeECQAAAAAHjAgAAAOMCAuQCAAAA4wIC5QIBAAAAAeYCAQAAAAHnAgEAAAAB6AJAAAAAAQEaAAD4AgAwARoAAPgCADAPyQIBAMkEACHUAgEAyQQAIdUCAQDJBAAh1gIBAMkEACHdAgEAyQQAId4CAQDJBAAh3wIBAMkEACHgAgEAyQQAIeECQADLBAAh4wIAAPcE4wIi5AIAAPcE4wIi5QIBANcEACHmAgEA1wQAIecCAQDXBAAh6AJAAMsEACECAAAA7gIAIBoAAPsCACAPyQIBAMkEACHUAgEAyQQAIdUCAQDJBAAh1gIBAMkEACHdAgEAyQQAId4CAQDJBAAh3wIBAMkEACHgAgEAyQQAIeECQADLBAAh4wIAAPcE4wIi5AIAAPcE4wIi5QIBANcEACHmAgEA1wQAIecCAQDXBAAh6AJAAMsEACECAAAA8QIAIBoAAP0CACACAAAA8QIAIBoAAP0CACADAAAA7gIAICEAAPYCACAiAAD7AgAgAQAAAO4CACABAAAA8QIAIAYHAAD_BQAgJwAAgQYAICgAAIAGACDlAgAA9gUAIOYCAAD2BQAg5wIAAPYFACASrQIAAPcDADCuAgAAhAMAEK8CAAD3AwAwyQIBAOIDACHUAgEA4gMAIdUCAQDPAwAh1gIBAM8DACHdAgEAzwMAId4CAQDPAwAh3wIBAM8DACHgAgEAzwMAIeECQADSAwAh4wIAAPgD4wIi5AIAAPgD4wIi5QIBAPkDACHmAgEA-gMAIecCAQD6AwAh6AJAANIDACEDAAAA8QIAIAEAAIMDADAmAACEAwAgAwAAAPECACABAADyAgAwAgAA7gIAIAEAAAA2ACABAAAANgAgAwAAAC0AIAEAADUAMAIAADYAIAMAAAAtACABAAA1ADACAAA2ACADAAAALQAgAQAANQAwAgAANgAgEQoAAJwFACAOAAD9BAAgEQAA_gQAIMkCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHUAgEAAAAB1QIBAAAAAdYCAQAAAAHYAgAAANgCAtkCQAAAAAHaAkAAAAAB3AIAAADcAgLdAgEAAAAB3gIBAAAAAd8CAQAAAAEBGgAAjAMAIA7JAgEAAAAB0QJAAAAAAdICQAAAAAHTAgEAAAAB1AIBAAAAAdUCAQAAAAHWAgEAAAAB2AIAAADYAgLZAkAAAAAB2gJAAAAAAdwCAAAA3AIC3QIBAAAAAd4CAQAAAAHfAgEAAAABARoAAI4DADABGgAAjgMAMBEKAACaBQAgDgAA6wQAIBEAAOwEACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACHTAgEAyQQAIdQCAQDJBAAh1QIBAMkEACHWAgEAyQQAIdgCAADnBNgCItkCQADLBAAh2gJAAOgEACHcAgAA6QTcAiLdAgEAyQQAId4CAQDJBAAh3wIBAMkEACECAAAANgAgGgAAkQMAIA7JAgEAyQQAIdECQADLBAAh0gJAAMsEACHTAgEAyQQAIdQCAQDJBAAh1QIBAMkEACHWAgEAyQQAIdgCAADnBNgCItkCQADLBAAh2gJAAOgEACHcAgAA6QTcAiLdAgEAyQQAId4CAQDJBAAh3wIBAMkEACECAAAALQAgGgAAkwMAIAIAAAAtACAaAACTAwAgAwAAADYAICEAAIwDACAiAACRAwAgAQAAADYAIAEAAAAtACAEBwAA_AUAICcAAP4FACAoAAD9BQAg2gIAAPYFACARrQIAAPADADCuAgAAmgMAEK8CAADwAwAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh0wIBAOIDACHUAgEA4gMAIdUCAQDPAwAh1gIBAM8DACHYAgAA8QPYAiLZAkAA0gMAIdoCQADkAwAh3AIAAPID3AIi3QIBAM8DACHeAgEAzwMAId8CAQDPAwAhAwAAAC0AIAEAAJkDADAmAACaAwAgAwAAAC0AIAEAADUAMAIAADYAIA2tAgAA6wMAMK4CAACgAwAQrwIAAOsDADDJAgEAAAABygIBANwDACHLAgEA3AMAIcwCQADfAwAhzQICAO0DACHOAkAA3wMAIc8CAgDtAwAh0AJAAO4DACHRAkAA3wMAIdICQADfAwAhAQAAAJ0DACABAAAAnQMAIA2tAgAA6wMAMK4CAACgAwAQrwIAAOsDADDJAgEA7AMAIcoCAQDcAwAhywIBANwDACHMAkAA3wMAIc0CAgDtAwAhzgJAAN8DACHPAgIA7QMAIdACQADuAwAh0QJAAN8DACHSAkAA3wMAIQHQAgAA9gUAIAMAAACgAwAgAQAAoQMAMAIAAJ0DACADAAAAoAMAIAEAAKEDADACAACdAwAgAwAAAKADACABAAChAwAwAgAAnQMAIArJAgEAAAABygIBAAAAAcsCAQAAAAHMAkAAAAABzQICAAAAAc4CQAAAAAHPAgIAAAAB0AJAAAAAAdECQAAAAAHSAkAAAAABARoAAKUDACAKyQIBAAAAAcoCAQAAAAHLAgEAAAABzAJAAAAAAc0CAgAAAAHOAkAAAAABzwICAAAAAdACQAAAAAHRAkAAAAAB0gJAAAAAAQEaAACnAwAwARoAAKcDADAKyQIBAMkEACHKAgEAyQQAIcsCAQDJBAAhzAJAAMsEACHNAgIAiQUAIc4CQADLBAAhzwICAIkFACHQAkAA6AQAIdECQADLBAAh0gJAAMsEACECAAAAnQMAIBoAAKoDACAKyQIBAMkEACHKAgEAyQQAIcsCAQDJBAAhzAJAAMsEACHNAgIAiQUAIc4CQADLBAAhzwICAIkFACHQAkAA6AQAIdECQADLBAAh0gJAAMsEACECAAAAoAMAIBoAAKwDACACAAAAoAMAIBoAAKwDACADAAAAnQMAICEAAKUDACAiAACqAwAgAQAAAJ0DACABAAAAoAMAIAYHAAD3BQAgJwAA-gUAICgAAPkFACA5AAD4BQAgOgAA-wUAINACAAD2BQAgDa0CAADhAwAwrgIAALMDABCvAgAA4QMAMMkCAQDiAwAhygIBAM8DACHLAgEAzwMAIcwCQADSAwAhzQICAOMDACHOAkAA0gMAIc8CAgDjAwAh0AJAAOQDACHRAkAA0gMAIdICQADSAwAhAwAAAKADACABAACyAwAwJgAAswMAIAMAAACgAwAgAQAAoQMAMAIAAJ0DACAJBgAA4AMAIK0CAADbAwAwrgIAAA8AEK8CAADbAwAwsAIBAAAAAbECAQDcAwAhsgIQAN0DACGzAgAA3gMAILQCQADfAwAhAQAAALYDACABAAAAtgMAIAEGAAD1BQAgAwAAAA8AIAEAALkDADACAAC2AwAgAwAAAA8AIAEAALkDADACAAC2AwAgAwAAAA8AIAEAALkDADACAAC2AwAgBgYAAPQFACCwAgEAAAABsQIBAAAAAbICEAAAAAGzAoAAAAABtAJAAAAAAQEaAAC9AwAgBbACAQAAAAGxAgEAAAABsgIQAAAAAbMCgAAAAAG0AkAAAAABARoAAL8DADABGgAAvwMAMAYGAADMBAAgsAIBAMkEACGxAgEAyQQAIbICEADKBAAhswKAAAAAAbQCQADLBAAhAgAAALYDACAaAADCAwAgBbACAQDJBAAhsQIBAMkEACGyAhAAygQAIbMCgAAAAAG0AkAAywQAIQIAAAAPACAaAADEAwAgAgAAAA8AIBoAAMQDACADAAAAtgMAICEAAL0DACAiAADCAwAgAQAAALYDACABAAAADwAgBQcAAMQEACAnAADHBAAgKAAAxgQAIDkAAMUEACA6AADIBAAgCK0CAADOAwAwrgIAAMsDABCvAgAAzgMAMLACAQDPAwAhsQIBAM8DACGyAhAA0AMAIbMCAADRAwAgtAJAANIDACEDAAAADwAgAQAAygMAMCYAAMsDACADAAAADwAgAQAAuQMAMAIAALYDACAIrQIAAM4DADCuAgAAywMAEK8CAADOAwAwsAIBAM8DACGxAgEAzwMAIbICEADQAwAhswIAANEDACC0AkAA0gMAIQ4HAADUAwAgJwAA2gMAICgAANoDACC1AgEAAAABtgIBAAAABLcCAQAAAAS4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBANkDACHDAgEAAAABxAIBAAAAAcUCAQAAAAENBwAA1AMAICcAANgDACAoAADYAwAgOQAA2AMAIDoAANgDACC1AhAAAAABtgIQAAAABLcCEAAAAAS4AhAAAAABuQIQAAAAAboCEAAAAAG7AhAAAAABvAIQANcDACEPBwAA1AMAICcAANYDACAoAADWAwAgtQKAAAAAAbgCgAAAAAG5AoAAAAABugKAAAAAAbsCgAAAAAG8AoAAAAABvQIBAAAAAb4CAQAAAAG_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-MCIuQCAAD4A-MCIuUCAQD5AwAh5gIBAPoDACHnAgEA-gMAIegCQADSAwAhBwcAANQDACAnAAD_AwAgKAAA_wMAILUCAAAA4wICtgIAAADjAgi3AgAAAOMCCLwCAAD-A-MCIgsHAADmAwAgJwAA_AMAICgAAPwDACC1AgEAAAABtgIBAAAABbcCAQAAAAW4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBAP0DACEOBwAA5gMAICcAAPwDACAoAAD8AwAgtQIBAAAAAbYCAQAAAAW3AgEAAAAFuAIBAAAAAbkCAQAAAAG6AgEAAAABuwIBAAAAAbwCAQD7AwAhwwIBAAAAAcQCAQAAAAHFAgEAAAABDgcAAOYDACAnAAD8AwAgKAAA_AMAILUCAQAAAAG2AgEAAAAFtwIBAAAABbgCAQAAAAG5AgEAAAABugIBAAAAAbsCAQAAAAG8AgEA-wMAIcMCAQAAAAHEAgEAAAABxQIBAAAAAQu1AgEAAAABtgIBAAAABbcCAQAAAAW4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBAPwDACHDAgEAAAABxAIBAAAAAcUCAQAAAAELBwAA5gMAICcAAPwDACAoAAD8AwAgtQIBAAAAAbYCAQAAAAW3AgEAAAAFuAIBAAAAAbkCAQAAAAG6AgEAAAABuwIBAAAAAbwCAQD9AwAhBwcAANQDACAnAAD_AwAgKAAA_wMAILUCAAAA4wICtgIAAADjAgi3AgAAAOMCCLwCAAD-A-MCIgS1AgAAAOMCArYCAAAA4wIItwIAAADjAgi8AgAA_wPjAiISrQIAAIAEADCuAgAA8QIAEK8CAACABAAwyQIBAOwDACHUAgEA7AMAIdUCAQDcAwAh1gIBANwDACHdAgEA3AMAId4CAQDcAwAh3wIBANwDACHgAgEA3AMAIeECQADfAwAh4wIAAIEE4wIi5AIAAIEE4wIi5QIBAIIEACHmAgEAgwQAIecCAQCDBAAh6AJAAN8DACEEtQIAAADjAgK2AgAAAOMCCLcCAAAA4wIIvAIAAP8D4wIiCLUCAQAAAAG2AgEAAAAFtwIBAAAABbgCAQAAAAG5AgEAAAABugIBAAAAAbsCAQAAAAG8AgEAhAQAIQu1AgEAAAABtgIBAAAABbcCAQAAAAW4AgEAAAABuQIBAAAAAboCAQAAAAG7AgEAAAABvAIBAPwDACHDAgEAAAABxAIBAAAAAcUCAQAAAAEItQIBAAAAAbYCAQAAAAW3AgEAAAAFuAIBAAAAAbkCAQAAAAG6AgEAAAABuwIBAAAAAbwCAQCEBAAhEK0CAACFBAAwrgIAAOsCABCvAgAAhQQAMMkCAQDiAwAh0QJAANIDACHSAkAA0gMAIdQCAQDiAwAh1QIBAM8DACHWAgEAzwMAIdwCAAD4A-MCIt0CAQDPAwAh3gIBAM8DACHfAgEAzwMAIeACAQDPAwAh4QJAANIDACHpAgEA-QMAIQytAgAAhgQAMK4CAADTAgAQrwIAAIYEADCyAhAA0AMAIckCAQDiAwAh0QJAANIDACHSAkAA0gMAIdQCAQDiAwAh1QIBAPoDACHWAgEA-gMAIdgCAACHBNgCI-oCIACIBAAhBwcAAOYDACAnAACMBAAgKAAAjAQAILUCAAAA2AIDtgIAAADYAgm3AgAAANgCCbwCAACLBNgCIwUHAADUAwAgJwAAigQAICgAAIoEACC1AiAAAAABvAIgAIkEACEFBwAA1AMAICcAAIoEACAoAACKBAAgtQIgAAAAAbwCIACJBAAhArUCIAAAAAG8AiAAigQAIQcHAADmAwAgJwAAjAQAICgAAIwEACC1AgAAANgCA7YCAAAA2AIJtwIAAADYAgm8AgAAiwTYAiMEtQIAAADYAgO2AgAAANgCCbcCAAAA2AIJvAIAAIwE2AIjCa0CAACNBAAwrgIAAL0CABCvAgAAjQQAMMkCAQDiAwAh0QJAANIDACHUAgEA4gMAIdUCAQDPAwAh1gIBAM8DACHYAgAA8QPYAiILrQIAAI4EADCuAgAApwIAEK8CAACOBAAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh1AIBAOIDACHVAgEA-gMAIdYCAQD6AwAh2QJAANIDACHrAgEA-gMAIQ2tAgAAjwQAMK4CAACRAgAQrwIAAI8EADCxAgEAzwMAIckCAQDiAwAh0QJAANIDACHSAkAA0gMAIdMCAQDiAwAh7AIBAOIDACHtAgIA4wMAIe4CEADQAwAh7wIgAIgEACHwAgEA-gMAIQmtAgAAkAQAMK4CAAD7AQAQrwIAAJAEADCxAgEAzwMAIckCAQDiAwAh0QJAANIDACHSAkAA0gMAIeoCIACIBAAh8QIBAM8DACEKDAAAkwQAIK0CAACRBAAwrgIAAOgBABCvAgAAkQQAMLECAQDcAwAhyQIBAOwDACHRAkAA3wMAIdICQADfAwAh6gIgAJIEACHxAgEA3AMAIQK1AiAAAAABvAIgAIoEACEDxgIAABsAIMcCAAAbACDIAgAAGwAgDK0CAACUBAAwrgIAAOIBABCvAgAAlAQAMMkCAQDiAwAhygIBAM8DACHRAkAA0gMAIdICQADSAwAh0wIBAOIDACHyAgEAzwMAIfMCQADSAwAh9AJAAOQDACH1AkAA5AMAIQetAgAAlQQAMK4CAADMAQAQrwIAAJUEADDRAkAA0gMAIdMCAQDiAwAh9gIBAM8DACH4AgAAlgT4AiIHBwAA1AMAICcAAJgEACAoAACYBAAgtQIAAAD4AgK2AgAAAPgCCLcCAAAA-AIIvAIAAJcE-AIiBwcAANQDACAnAACYBAAgKAAAmAQAILUCAAAA-AICtgIAAAD4Agi3AgAAAPgCCLwCAACXBPgCIgS1AgAAAPgCArYCAAAA-AIItwIAAAD4Agi8AgAAmAT4AiIOrQIAAJkEADCuAgAAtgEAEK8CAACZBAAwyQIBAOIDACHRAkAA0gMAIdICQADSAwAh-QIBAM8DACH6AgEA-gMAIfsCAQD6AwAh_AIBAPoDACH9AgEA-gMAIf4CAQDPAwAh_wIBAM8DACGAAwEA-gMAIQmtAgAAmgQAMK4CAACeAQAQrwIAAJoEADDJAgEAzwMAIdECQADSAwAh0gJAANIDACHzAkAA0gMAIYEDAQDPAwAhggMBAM8DACEJrQIAAJsEADCuAgAAiwEAEK8CAACbBAAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh8wJAAN8DACGBAwEA3AMAIYIDAQDcAwAhEK0CAACcBAAwrgIAAIUBABCvAgAAnAQAMMkCAQDPAwAh0QJAANIDACHSAkAA0gMAIfYCAQDPAwAhgwMBAM8DACGEAwEAzwMAIYUDAQD6AwAhhgMBAPoDACGHAwEA-gMAIYgDQADkAwAhiQNAAOQDACGKAwEA-gMAIYsDAQD6AwAhEK0CAACdBAAwrgIAAG8AEK8CAACdBAAwyQIBAM8DACHRAkAA0gMAIdICQADSAwAh8wJAANIDACH2AgEAzwMAIfsCAQD6AwAh_QIBAPoDACGMAwEAzwMAIY0DAQD6AwAhjgMBAPoDACGPAwEA-gMAIZADCACeBAAhkQMIAJ4EACENBwAA5gMAICcAAKAEACAoAACgBAAgOQAAoAQAIDoAAKAEACC1AggAAAABtgIIAAAABbcCCAAAAAW4AggAAAABuQIIAAAAAboCCAAAAAG7AggAAAABvAIIAJ8EACENBwAA5gMAICcAAKAEACAoAACgBAAgOQAAoAQAIDoAAKAEACC1AggAAAABtgIIAAAABbcCCAAAAAW4AggAAAABuQIIAAAAAboCCAAAAAG7AggAAAABvAIIAJ8EACEItQIIAAAAAbYCCAAAAAW3AggAAAAFuAIIAAAAAbkCCAAAAAG6AggAAAABuwIIAAAAAbwCCACgBAAhD60CAAChBAAwrgIAAFkAEK8CAAChBAAwsQIBAM8DACHJAgEAzwMAIcoCAQDPAwAh0QJAANIDACHSAkAA0gMAIfgCAQDPAwAhkgMgAIgEACGTAwEA-gMAIZQDAQD6AwAhlQMgAIgEACGWA0AA5AMAIZcDAQD6AwAhEgQAAKMEACAFAACkBAAgBgAApQQAIK0CAACiBAAwrgIAAEYAEK8CAACiBAAwsQIBANwDACHJAgEA3AMAIcoCAQDcAwAh0QJAAN8DACHSAkAA3wMAIfgCAQDcAwAhkgMgAJIEACGTAwEAgwQAIZQDAQCDBAAhlQMgAJIEACGWA0AA7gMAIZcDAQCDBAAhA8YCAAADACDHAgAAAwAgyAIAAAMAIAPGAgAABwAgxwIAAAcAIMgCAAAHACADxgIAAAsAIMcCAAALACDIAgAACwAgFAoAAKoEACAOAACpBAAgEQAAqwQAIK0CAACmBAAwrgIAAC0AEK8CAACmBAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHUAgEA7AMAIdUCAQDcAwAh1gIBANwDACHYAgAApwTYAiLZAkAA3wMAIdoCQADuAwAh3AIAAKgE3AIi3QIBANwDACHeAgEA3AMAId8CAQDcAwAhBLUCAAAA2AICtgIAAADYAgi3AgAAANgCCLwCAAD2A9gCIgS1AgAAANwCArYCAAAA3AIItwIAAADcAgi8AgAA9APcAiIWCgAAqgQAIA0AALQEACAPAAC1BAAgEAAAtgQAIBEAAKsEACATAAC3BAAgFAAAuAQAIK0CAACzBAAwrgIAABsAEK8CAACzBAAwsQIBANwDACHJAgEA7AMAIdECQADfAwAh0gJAAN8DACHTAgEA7AMAIewCAQDsAwAh7QICAO0DACHuAhAA3QMAIe8CIACSBAAh8AIBAIMEACGaAwAAGwAgmwMAABsAIBUIAAC7BAAgCQAApQQAIAsAALwEACAMAACTBAAgFAAAuAQAIK0CAAC6BAAwrgIAABEAEK8CAAC6BAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh-QIBANwDACH6AgEAgwQAIfsCAQCDBAAh_AIBAIMEACH9AgEAgwQAIf4CAQDcAwAh_wIBANwDACGAAwEAgwQAIZoDAAARACCbAwAAEQAgA8YCAAApACDHAgAAKQAgyAIAACkAIAwOAACpBAAgrQIAAKwEADCuAgAAMQAQrwIAAKwEADDJAgEA7AMAIdECQADfAwAh0gJAAN8DACHUAgEA7AMAIdUCAQCDBAAh1gIBAIMEACHZAkAA3wMAIesCAQCDBAAhA9QCAQAAAAHVAgEAAAAB4QJAAAAAARIOAACpBAAgEgAArwQAIK0CAACuBAAwrgIAACkAEK8CAACuBAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh1AIBAOwDACHVAgEA3AMAIdYCAQDcAwAh3AIAAIEE4wIi3QIBANwDACHeAgEA3AMAId8CAQDcAwAh4AIBANwDACHhAkAA3wMAIekCAQCCBAAhFgoAAKoEACAOAACpBAAgEQAAqwQAIK0CAACmBAAwrgIAAC0AEK8CAACmBAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHUAgEA7AMAIdUCAQDcAwAh1gIBANwDACHYAgAApwTYAiLZAkAA3wMAIdoCQADuAwAh3AIAAKgE3AIi3QIBANwDACHeAgEA3AMAId8CAQDcAwAhmgMAAC0AIJsDAAAtACANDgAAqQQAIK0CAACwBAAwrgIAACUAEK8CAACwBAAwsgIQAN0DACHJAgEA7AMAIdECQADfAwAh0gJAAN8DACHUAgEA7AMAIdUCAQCDBAAh1gIBAIMEACHYAgAAsQTYAiPqAiAAkgQAIQS1AgAAANgCA7YCAAAA2AIJtwIAAADYAgm8AgAAjATYAiMKDgAAqQQAIK0CAACyBAAwrgIAACEAEK8CAACyBAAwyQIBAOwDACHRAkAA3wMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdgCAACnBNgCIhQKAACqBAAgDQAAtAQAIA8AALUEACAQAAC2BAAgEQAAqwQAIBMAALcEACAUAAC4BAAgrQIAALMEADCuAgAAGwAQrwIAALMEADCxAgEA3AMAIckCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh7AIBAOwDACHtAgIA7QMAIe4CEADdAwAh7wIgAJIEACHwAgEAgwQAIQwMAACTBAAgrQIAAJEEADCuAgAA6AEAEK8CAACRBAAwsQIBANwDACHJAgEA7AMAIdECQADfAwAh0gJAAN8DACHqAiAAkgQAIfECAQDcAwAhmgMAAOgBACCbAwAA6AEAIAPGAgAAIQAgxwIAACEAIMgCAAAhACADxgIAACUAIMcCAAAlACDIAgAAJQAgA8YCAAAxACDHAgAAMQAgyAIAADEAIAPGAgAALQAgxwIAAC0AIMgCAAAtACANCgAAqgQAIK0CAAC5BAAwrgIAABcAEK8CAAC5BAAwyQIBAOwDACHKAgEA3AMAIdECQADfAwAh0gJAAN8DACHTAgEA7AMAIfICAQDcAwAh8wJAAN8DACH0AkAA7gMAIfUCQADuAwAhEwgAALsEACAJAAClBAAgCwAAvAQAIAwAAJMEACAUAAC4BAAgrQIAALoEADCuAgAAEQAQrwIAALoEADDJAgEA7AMAIdECQADfAwAh0gJAAN8DACH5AgEA3AMAIfoCAQCDBAAh-wIBAIMEACH8AgEAgwQAIf0CAQCDBAAh_gIBANwDACH_AgEA3AMAIYADAQCDBAAhCwYAAOADACCtAgAA2wMAMK4CAAAPABCvAgAA2wMAMLACAQDcAwAhsQIBANwDACGyAhAA3QMAIbMCAADeAwAgtAJAAN8DACGaAwAADwAgmwMAAA8AIAPGAgAAFwAgxwIAABcAIMgCAAAXACAC0wIBAAAAAfYCAQAAAAEJAwAAwAQAIAoAAKoEACCtAgAAvgQAMK4CAAALABCvAgAAvgQAMNECQADfAwAh0wIBAOwDACH2AgEA3AMAIfgCAAC_BPgCIgS1AgAAAPgCArYCAAAA-AIItwIAAAD4Agi8AgAAmAT4AiIUBAAAowQAIAUAAKQEACAGAAClBAAgrQIAAKIEADCuAgAARgAQrwIAAKIEADCxAgEA3AMAIckCAQDcAwAhygIBANwDACHRAkAA3wMAIdICQADfAwAh-AIBANwDACGSAyAAkgQAIZMDAQCDBAAhlAMBAIMEACGVAyAAkgQAIZYDQADuAwAhlwMBAIMEACGaAwAARgAgmwMAAEYAIBEDAADABAAgrQIAAMEEADCuAgAABwAQrwIAAMEEADDJAgEA3AMAIdECQADfAwAh0gJAAN8DACH2AgEA3AMAIYMDAQDcAwAhhAMBANwDACGFAwEAgwQAIYYDAQCDBAAhhwMBAIMEACGIA0AA7gMAIYkDQADuAwAhigMBAIMEACGLAwEAgwQAIREDAADABAAgrQIAAMIEADCuAgAAAwAQrwIAAMIEADDJAgEA3AMAIdECQADfAwAh0gJAAN8DACHzAkAA3wMAIfYCAQDcAwAh-wIBAIMEACH9AgEAgwQAIYwDAQDcAwAhjQMBAIMEACGOAwEAgwQAIY8DAQCDBAAhkAMIAMMEACGRAwgAwwQAIQi1AggAAAABtgIIAAAABbcCCAAAAAW4AggAAAABuQIIAAAAAboCCAAAAAG7AggAAAABvAIIAKAEACEAAAAAAAGfAwEAAAABBZ8DEAAAAAGlAxAAAAABpgMQAAAAAacDEAAAAAGoAxAAAAABAZ8DQAAAAAELIQAAzQQAMCIAANIEADCcAwAAzgQAMJ0DAADPBAAwngMAANAEACCfAwAA0QQAMKADAADRBAAwoQMAANEEADCiAwAA0QQAMKMDAADTBAAwpAMAANQEADAOCQAA8AUAIAsAAPEFACAMAADyBQAgFAAA8wUAIMkCAQAAAAHRAkAAAAAB0gJAAAAAAfkCAQAAAAH6AgEAAAAB-wIBAAAAAfwCAQAAAAH9AgEAAAAB_gIBAAAAAf8CAQAAAAECAAAAEwAgIQAA7wUAIAMAAAATACAhAADvBQAgIgAA2AQAIAEaAADdBwAwEwgAALsEACAJAAClBAAgCwAAvAQAIAwAAJMEACAUAAC4BAAgrQIAALoEADCuAgAAEQAQrwIAALoEADDJAgEAAAAB0QJAAN8DACHSAkAA3wMAIfkCAQDcAwAh-gIBAIMEACH7AgEAgwQAIfwCAQCDBAAh_QIBAIMEACH-AgEAAAAB_wIBANwDACGAAwEAgwQAIQIAAAATACAaAADYBAAgAgAAANUEACAaAADWBAAgDq0CAADUBAAwrgIAANUEABCvAgAA1AQAMMkCAQDsAwAh0QJAAN8DACHSAkAA3wMAIfkCAQDcAwAh-gIBAIMEACH7AgEAgwQAIfwCAQCDBAAh_QIBAIMEACH-AgEA3AMAIf8CAQDcAwAhgAMBAIMEACEOrQIAANQEADCuAgAA1QQAEK8CAADUBAAwyQIBAOwDACHRAkAA3wMAIdICQADfAwAh-QIBANwDACH6AgEAgwQAIfsCAQCDBAAh_AIBAIMEACH9AgEAgwQAIf4CAQDcAwAh_wIBANwDACGAAwEAgwQAIQrJAgEAyQQAIdECQADLBAAh0gJAAMsEACH5AgEAyQQAIfoCAQDXBAAh-wIBANcEACH8AgEA1wQAIf0CAQDXBAAh_gIBAMkEACH_AgEAyQQAIQGfAwEAAAABDgkAANkEACALAADaBAAgDAAA2wQAIBQAANwEACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACH5AgEAyQQAIfoCAQDXBAAh-wIBANcEACH8AgEA1wQAIf0CAQDXBAAh_gIBAMkEACH_AgEAyQQAIQshAADgBQAwIgAA5QUAMJwDAADhBQAwnQMAAOIFADCeAwAA4wUAIJ8DAADkBQAwoAMAAOQFADChAwAA5AUAMKIDAADkBQAwowMAAOYFADCkAwAA5wUAMAshAADUBQAwIgAA2QUAMJwDAADVBQAwnQMAANYFADCeAwAA1wUAIJ8DAADYBQAwoAMAANgFADChAwAA2AUAMKIDAADYBQAwowMAANoFADCkAwAA2wUAMAshAAD_BAAwIgAAhAUAMJwDAACABQAwnQMAAIEFADCeAwAAggUAIJ8DAACDBQAwoAMAAIMFADChAwAAgwUAMKIDAACDBQAwowMAAIUFADCkAwAAhgUAMAshAADdBAAwIgAA4gQAMJwDAADeBAAwnQMAAN8EADCeAwAA4AQAIJ8DAADhBAAwoAMAAOEEADChAwAA4QQAMKIDAADhBAAwowMAAOMEADCkAwAA5AQAMA8OAAD9BAAgEQAA_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_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_BQAgARoAAL8HADANDgAAqQQAIK0CAACwBAAwrgIAACUAEK8CAACwBAAwsgIQAN0DACHJAgEAAAAB0QJAAN8DACHSAkAA3wMAIdQCAQDsAwAh1QIBAIMEACHWAgEAgwQAIdgCAACxBNgCI-oCIACSBAAhAgAAACcAIBoAAL8FACACAAAAvAUAIBoAAL0FACAMrQIAALsFADCuAgAAvAUAEK8CAAC7BQAwsgIQAN0DACHJAgEA7AMAIdECQADfAwAh0gJAAN8DACHUAgEA7AMAIdUCAQCDBAAh1gIBAIMEACHYAgAAsQTYAiPqAiAAkgQAIQytAgAAuwUAMK4CAAC8BQAQrwIAALsFADCyAhAA3QMAIckCAQDsAwAh0QJAAN8DACHSAkAA3wMAIdQCAQDsAwAh1QIBAIMEACHWAgEAgwQAIdgCAACxBNgCI-oCIACSBAAhCLICEADKBAAhyQIBAMkEACHRAkAAywQAIdICQADLBAAh1QIBANcEACHWAgEA1wQAIdgCAAC-BdgCI-oCIACKBQAhAZ8DAAAA2AIDCLICEADKBAAhyQIBAMkEACHRAkAAywQAIdICQADLBAAh1QIBANcEACHWAgEA1wQAIdgCAAC-BdgCI-oCIACKBQAhCLICEAAAAAHJAgEAAAAB0QJAAAAAAdICQAAAAAHVAgEAAAAB1gIBAAAAAdgCAAAA2AID6gIgAAAAAQXJAgEAAAAB0QJAAAAAAdUCAQAAAAHWAgEAAAAB2AIAAADYAgICAAAAIwAgIQAAzAUAIAMAAAAjACAhAADMBQAgIgAAywUAIAEaAAC-BwAwCg4AAKkEACCtAgAAsgQAMK4CAAAhABCvAgAAsgQAMMkCAQAAAAHRAkAA3wMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdgCAACnBNgCIgIAAAAjACAaAADLBQAgAgAAAMkFACAaAADKBQAgCa0CAADIBQAwrgIAAMkFABCvAgAAyAUAMMkCAQDsAwAh0QJAAN8DACHUAgEA7AMAIdUCAQDcAwAh1gIBANwDACHYAgAApwTYAiIJrQIAAMgFADCuAgAAyQUAEK8CAADIBQAwyQIBAOwDACHRAkAA3wMAIdQCAQDsAwAh1QIBANwDACHWAgEA3AMAIdgCAACnBNgCIgXJAgEAyQQAIdECQADLBAAh1QIBAMkEACHWAgEAyQQAIdgCAADnBNgCIgXJAgEAyQQAIdECQADLBAAh1QIBAMkEACHWAgEAyQQAIdgCAADnBNgCIgXJAgEAAAAB0QJAAAAAAdUCAQAAAAHWAgEAAAAB2AIAAADYAgIPDQAAzgUAIA8AAM8FACAQAADQBQAgEQAA0QUAIBMAANIFACAUAADTBQAgsQIBAAAAAckCAQAAAAHRAkAAAAAB0gJAAAAAAewCAQAAAAHtAgIAAAAB7gIQAAAAAe8CIAAAAAHwAgEAAAABAyEAALwHACCcAwAAvQcAIKIDAADlAQAgBCEAAMEFADCcAwAAwgUAMJ4DAADEBQAgogMAAMUFADAEIQAAtAUAMJwDAAC1BQAwngMAALcFACCiAwAAuAUAMAQhAACpBQAwnAMAAKoFADCeAwAArAUAIKIDAADxBAAwBCEAAJ0FADCcAwAAngUAMJ4DAACgBQAgogMAAKEFADAEIQAAkgUAMJwDAACTBQAwngMAAJUFACCiAwAA4QQAMAjJAgEAAAABygIBAAAAAdECQAAAAAHSAkAAAAAB8gIBAAAAAfMCQAAAAAH0AkAAAAAB9QJAAAAAAQIAAAAZACAhAADfBQAgAwAAABkAICEAAN8FACAiAADeBQAgARoAALsHADANCgAAqgQAIK0CAAC5BAAwrgIAABcAEK8CAAC5BAAwyQIBAAAAAcoCAQDcAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh8gIBAAAAAfMCQADfAwAh9AJAAO4DACH1AkAA7gMAIQIAAAAZACAaAADeBQAgAgAAANwFACAaAADdBQAgDK0CAADbBQAwrgIAANwFABCvAgAA2wUAMMkCAQDsAwAhygIBANwDACHRAkAA3wMAIdICQADfAwAh0wIBAOwDACHyAgEA3AMAIfMCQADfAwAh9AJAAO4DACH1AkAA7gMAIQytAgAA2wUAMK4CAADcBQAQrwIAANsFADDJAgEA7AMAIcoCAQDcAwAh0QJAAN8DACHSAkAA3wMAIdMCAQDsAwAh8gIBANwDACHzAkAA3wMAIfQCQADuAwAh9QJAAO4DACEIyQIBAMkEACHKAgEAyQQAIdECQADLBAAh0gJAAMsEACHyAgEAyQQAIfMCQADLBAAh9AJAAOgEACH1AkAA6AQAIQjJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfICAQDJBAAh8wJAAMsEACH0AkAA6AQAIfUCQADoBAAhCMkCAQAAAAHKAgEAAAAB0QJAAAAAAdICQAAAAAHyAgEAAAAB8wJAAAAAAfQCQAAAAAH1AkAAAAABBAMAAO4FACDRAkAAAAAB9gIBAAAAAfgCAAAA-AICAgAAAA0AICEAAO0FACADAAAADQAgIQAA7QUAICIAAOsFACABGgAAugcAMAoDAADABAAgCgAAqgQAIK0CAAC-BAAwrgIAAAsAEK8CAAC-BAAw0QJAAN8DACHTAgEA7AMAIfYCAQDcAwAh-AIAAL8E-AIimQMAAL0EACACAAAADQAgGgAA6wUAIAIAAADoBQAgGgAA6QUAIAetAgAA5wUAMK4CAADoBQAQrwIAAOcFADDRAkAA3wMAIdMCAQDsAwAh9gIBANwDACH4AgAAvwT4AiIHrQIAAOcFADCuAgAA6AUAEK8CAADnBQAw0QJAAN8DACHTAgEA7AMAIfYCAQDcAwAh-AIAAL8E-AIiA9ECQADLBAAh9gIBAMkEACH4AgAA6gX4AiIBnwMAAAD4AgIEAwAA7AUAINECQADLBAAh9gIBAMkEACH4AgAA6gX4AiIFIQAAtQcAICIAALgHACCcAwAAtgcAIJ0DAAC3BwAgogMAAAEAIAQDAADuBQAg0QJAAAAAAfYCAQAAAAH4AgAAAPgCAgMhAAC1BwAgnAMAALYHACCiAwAAAQAgDgkAAPAFACALAADxBQAgDAAA8gUAIBQAAPMFACDJAgEAAAAB0QJAAAAAAdICQAAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAAB_QIBAAAAAf4CAQAAAAH_AgEAAAABBCEAAOAFADCcAwAA4QUAMJ4DAADjBQAgogMAAOQFADAEIQAA1AUAMJwDAADVBQAwngMAANcFACCiAwAA2AUAMAQhAAD_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-AIAAOoF-AIiBAoAALQGACDRAkAAywQAIdMCAQDJBAAh-AIAAOoF-AIiBAoAALUGACDRAkAAAAAB0wIBAAAAAfgCAAAA-AICDMkCAQAAAAHRAkAAAAAB0gJAAAAAAYMDAQAAAAGEAwEAAAABhQMBAAAAAYYDAQAAAAGHAwEAAAABiANAAAAAAYkDQAAAAAGKAwEAAAABiwMBAAAAAQIAAAAJACAhAADlBgAgAwAAAAkAICEAAOUGACAiAADkBgAgARoAAIUHADARAwAAwAQAIK0CAADBBAAwrgIAAAcAEK8CAADBBAAwyQIBAAAAAdECQADfAwAh0gJAAN8DACH2AgEA3AMAIYMDAQDcAwAhhAMBANwDACGFAwEAgwQAIYYDAQCDBAAhhwMBAIMEACGIA0AA7gMAIYkDQADuAwAhigMBAIMEACGLAwEAgwQAIQIAAAAJACAaAADkBgAgAgAAAOIGACAaAADjBgAgEK0CAADhBgAwrgIAAOIGABCvAgAA4QYAMMkCAQDcAwAh0QJAAN8DACHSAkAA3wMAIfYCAQDcAwAhgwMBANwDACGEAwEA3AMAIYUDAQCDBAAhhgMBAIMEACGHAwEAgwQAIYgDQADuAwAhiQNAAO4DACGKAwEAgwQAIYsDAQCDBAAhEK0CAADhBgAwrgIAAOIGABCvAgAA4QYAMMkCAQDcAwAh0QJAAN8DACHSAkAA3wMAIfYCAQDcAwAhgwMBANwDACGEAwEA3AMAIYUDAQCDBAAhhgMBAIMEACGHAwEAgwQAIYgDQADuAwAhiQNAAO4DACGKAwEAgwQAIYsDAQCDBAAhDMkCAQDJBAAh0QJAAMsEACHSAkAAywQAIYMDAQDJBAAhhAMBAMkEACGFAwEA1wQAIYYDAQDXBAAhhwMBANcEACGIA0AA6AQAIYkDQADoBAAhigMBANcEACGLAwEA1wQAIQzJAgEAyQQAIdECQADLBAAh0gJAAMsEACGDAwEAyQQAIYQDAQDJBAAhhQMBANcEACGGAwEA1wQAIYcDAQDXBAAhiANAAOgEACGJA0AA6AQAIYoDAQDXBAAhiwMBANcEACEMyQIBAAAAAdECQAAAAAHSAkAAAAABgwMBAAAAAYQDAQAAAAGFAwEAAAABhgMBAAAAAYcDAQAAAAGIA0AAAAABiQNAAAAAAYoDAQAAAAGLAwEAAAABDMkCAQAAAAHRAkAAAAAB0gJAAAAAAfMCQAAAAAH7AgEAAAAB_QIBAAAAAYwDAQAAAAGNAwEAAAABjgMBAAAAAY8DAQAAAAGQAwgAAAABkQMIAAAAAQIAAAAFACAhAADxBgAgAwAAAAUAICEAAPEGACAiAADwBgAgARoAAIQHADARAwAAwAQAIK0CAADCBAAwrgIAAAMAEK8CAADCBAAwyQIBAAAAAdECQADfAwAh0gJAAN8DACHzAkAA3wMAIfYCAQDcAwAh-wIBAIMEACH9AgEAgwQAIYwDAQAAAAGNAwEAgwQAIY4DAQCDBAAhjwMBAIMEACGQAwgAwwQAIZEDCADDBAAhAgAAAAUAIBoAAPAGACACAAAA7gYAIBoAAO8GACAQrQIAAO0GADCuAgAA7gYAEK8CAADtBgAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh8wJAAN8DACH2AgEA3AMAIfsCAQCDBAAh_QIBAIMEACGMAwEA3AMAIY0DAQCDBAAhjgMBAIMEACGPAwEAgwQAIZADCADDBAAhkQMIAMMEACEQrQIAAO0GADCuAgAA7gYAEK8CAADtBgAwyQIBANwDACHRAkAA3wMAIdICQADfAwAh8wJAAN8DACH2AgEA3AMAIfsCAQCDBAAh_QIBAIMEACGMAwEA3AMAIY0DAQCDBAAhjgMBAIMEACGPAwEAgwQAIZADCADDBAAhkQMIAMMEACEMyQIBAMkEACHRAkAAywQAIdICQADLBAAh8wJAAMsEACH7AgEA1wQAIf0CAQDXBAAhjAMBAMkEACGNAwEA1wQAIY4DAQDXBAAhjwMBANcEACGQAwgAyAYAIZEDCADIBgAhDMkCAQDJBAAh0QJAAMsEACHSAkAAywQAIfMCQADLBAAh-wIBANcEACH9AgEA1wQAIYwDAQDJBAAhjQMBANcEACGOAwEA1wQAIY8DAQDXBAAhkAMIAMgGACGRAwgAyAYAIQzJAgEAAAAB0QJAAAAAAdICQAAAAAHzAkAAAAAB-wIBAAAAAf0CAQAAAAGMAwEAAAABjQMBAAAAAY4DAQAAAAGPAwEAAAABkAMIAAAAAZEDCAAAAAEEIQAA5gYAMJwDAADnBgAwngMAAOkGACCiAwAA6gYAMAQhAADaBgAwnAMAANsGADCeAwAA3QYAIKIDAADeBgAwBCEAANEGADCcAwAA0gYAMJ4DAADUBgAgogMAAOQFADAAAAAICgAA-QYAIA0AAPwGACAPAAD9BgAgEAAA_gYAIBEAAPoGACATAAD_BgAgFAAAgAcAIPACAAD2BQAgCggAAIEHACAJAAD3BgAgCwAAggcAIAwAAKsGACAUAACABwAg-gIAAPYFACD7AgAA9gUAIPwCAAD2BQAg_QIAAPYFACCAAwAA9gUAIAAECgAA-QYAIA4AAPgGACARAAD6BgAg2gIAAPYFACABDAAAqwYAIAAAAAABBgAA9QUAIAAHBAAA9QYAIAUAAPYGACAGAAD3BgAgkwMAAPYFACCUAwAA9gUAIJYDAAD2BQAglwMAAPYFACAMyQIBAAAAAdECQAAAAAHSAkAAAAAB8wJAAAAAAfsCAQAAAAH9AgEAAAABjAMBAAAAAY0DAQAAAAGOAwEAAAABjwMBAAAAAZADCAAAAAGRAwgAAAABDMkCAQAAAAHRAkAAAAAB0gJAAAAAAYMDAQAAAAGEAwEAAAABhQMBAAAAAYYDAQAAAAGHAwEAAAABiANAAAAAAYkDQAAAAAGKAwEAAAABiwMBAAAAAQPRAkAAAAAB0wIBAAAAAfgCAAAA-AICDgUAAPMGACAGAAD0BgAgsQIBAAAAAckCAQAAAAHKAgEAAAAB0QJAAAAAAdICQAAAAAH4AgEAAAABkgMgAAAAAZMDAQAAAAGUAwEAAAABlQMgAAAAAZYDQAAAAAGXAwEAAAABAgAAAAEAICEAAIcHACADAAAARgAgIQAAhwcAICIAAIsHACAQAAAARgAgBQAAzwYAIAYAANAGACAaAACLBwAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfgCAQDJBAAhkgMgAIoFACGTAwEA1wQAIZQDAQDXBAAhlQMgAIoFACGWA0AA6AQAIZcDAQDXBAAhDgUAAM8GACAGAADQBgAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfgCAQDJBAAhkgMgAIoFACGTAwEA1wQAIZQDAQDXBAAhlQMgAIoFACGWA0AA6AQAIZcDAQDXBAAhDgQAAPIGACAGAAD0BgAgsQIBAAAAAckCAQAAAAHKAgEAAAAB0QJAAAAAAdICQAAAAAH4AgEAAAABkgMgAAAAAZMDAQAAAAGUAwEAAAABlQMgAAAAAZYDQAAAAAGXAwEAAAABAgAAAAEAICEAAIwHACADAAAARgAgIQAAjAcAICIAAJAHACAQAAAARgAgBAAAzgYAIAYAANAGACAaAACQBwAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfgCAQDJBAAhkgMgAIoFACGTAwEA1wQAIZQDAQDXBAAhlQMgAIoFACGWA0AA6AQAIZcDAQDXBAAhDgQAAM4GACAGAADQBgAgsQIBAMkEACHJAgEAyQQAIcoCAQDJBAAh0QJAAMsEACHSAkAAywQAIfgCAQDJBAAhkgMgAIoFACGTAwEA1wQAIZQDAQDXBAAhlQMgAIoFACGWA0AA6AQAIZcDAQDXBAAhBbACAQAAAAGxAgEAAAABsgIQAAAAAbMCgAAAAAG0AkAAAAABAgAAALYDACAhAACRBwAgAwAAAA8AICEAAJEHACAiAACVBwAgBwAAAA8AIBoAAJUHACCwAgEAyQQAIbECAQDJBAAhsgIQAMoEACGzAoAAAAABtAJAAMsEACEFsAIBAMkEACGxAgEAyQQAIbICEADKBAAhswKAAAAAAbQCQADLBAAhDwgAALoGACALAADxBQAgDAAA8gUAIBQAAPMFACDJAgEAAAAB0QJAAAAAAdICQAAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAAB_QIBAAAAAf4CAQAAAAH_AgEAAAABgAMBAAAAAQIAAAATACAhAACWBwAgAwAAABEAICEAAJYHACAiAACaBwAgEQAAABEAIAgAALkGACALAADaBAAgDAAA2wQAIBQAANwEACAaAACaBwAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh-QIBAMkEACH6AgEA1wQAIfsCAQDXBAAh_AIBANcEACH9AgEA1wQAIf4CAQDJBAAh_wIBAMkEACGAAwEA1wQAIQ8IAAC5BgAgCwAA2gQAIAwAANsEACAUAADcBAAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh-QIBAMkEACH6AgEA1wQAIfsCAQDXBAAh_AIBANcEACH9AgEA1wQAIf4CAQDJBAAh_wIBAMkEACGAAwEA1wQAIQ8IAAC6BgAgCQAA8AUAIAwAAPIFACAUAADzBQAgyQIBAAAAAdECQAAAAAHSAkAAAAAB-QIBAAAAAfoCAQAAAAH7AgEAAAAB_AIBAAAAAf0CAQAAAAH-AgEAAAAB_wIBAAAAAYADAQAAAAECAAAAEwAgIQAAmwcAIAMAAAARACAhAACbBwAgIgAAnwcAIBEAAAARACAIAAC5BgAgCQAA2QQAIAwAANsEACAUAADcBAAgGgAAnwcAIMkCAQDJBAAh0QJAAMsEACHSAkAAywQAIfkCAQDJBAAh-gIBANcEACH7AgEA1wQAIfwCAQDXBAAh_QIBANcEACH-AgEAyQQAIf8CAQDJBAAhgAMBANcEACEPCAAAuQYAIAkAANkEACAMAADbBAAgFAAA3AQAIMkCAQDJBAAh0QJAAMsEACHSAkAAywQAIfkCAQDJBAAh-gIBANcEACH7AgEA1wQAIfwCAQDXBAAh_QIBANcEACH-AgEAyQQAIf8CAQDJBAAhgAMBANcEACEJsQIBAAAAAckCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHtAgIAAAAB7gIQAAAAAe8CIAAAAAHwAgEAAAABDwgAALoGACAJAADwBQAgCwAA8QUAIBQAAPMFACDJAgEAAAAB0QJAAAAAAdICQAAAAAH5AgEAAAAB-gIBAAAAAfsCAQAAAAH8AgEAAAAB_QIBAAAAAf4CAQAAAAH_AgEAAAABgAMBAAAAAQIAAAATACAhAAChBwAgAwAAABEAICEAAKEHACAiAAClBwAgEQAAABEAIAgAALkGACAJAADZBAAgCwAA2gQAIBQAANwEACAaAAClBwAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh-QIBAMkEACH6AgEA1wQAIfsCAQDXBAAh_AIBANcEACH9AgEA1wQAIf4CAQDJBAAh_wIBAMkEACGAAwEA1wQAIQ8IAAC5BgAgCQAA2QQAIAsAANoEACAUAADcBAAgyQIBAMkEACHRAkAAywQAIdICQADLBAAh-QIBAMkEACH6AgEA1wQAIfsCAQDXBAAh_AIBANcEACH9AgEA1wQAIf4CAQDJBAAh_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-wIBAAAAAfwCAQAAAAH9AgEAAAAB_gIBAAAAAf8CAQAAAAGAAwEAAAABAgAAABMAICEAAMcHACADAAAAEQAgIQAAxwcAICIAAMsHACARAAAAEQAgCAAAuQYAIAkAANkEACALAADaBAAgDAAA2wQAIBoAAMsHACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACH5AgEAyQQAIfoCAQDXBAAh-wIBANcEACH8AgEA1wQAIf0CAQDXBAAh_gIBAMkEACH_AgEAyQQAIYADAQDXBAAhDwgAALkGACAJAADZBAAgCwAA2gQAIAwAANsEACDJAgEAyQQAIdECQADLBAAh0gJAAMsEACH5AgEAyQQAIfoCAQDXBAAh-wIBANcEACH8AgEA1wQAIf0CAQDXBAAh_gIBAMkEACH_AgEAyQQAIYADAQDXBAAhDckCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHVAgEAAAAB1gIBAAAAAdgCAAAA2AIC2QJAAAAAAdoCQAAAAAHcAgAAANwCAt0CAQAAAAHeAgEAAAAB3wIBAAAAAQMAAADoAQAgIQAAvAcAICIAAM8HACAIAAAA6AEAIBoAAM8HACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIeoCIACKBQAh8QIBAMkEACEGsQIBAMkEACHJAgEAyQQAIdECQADLBAAh0gJAAMsEACHqAiAAigUAIfECAQDJBAAhCbECAQAAAAHJAgEAAAAB0QJAAAAAAdICQAAAAAHsAgEAAAAB7QICAAAAAe4CEAAAAAHvAiAAAAAB8AIBAAAAARAKAACcBgAgDQAAzgUAIA8AAM8FACAQAADQBQAgEQAA0QUAIBMAANIFACCxAgEAAAAByQIBAAAAAdECQAAAAAHSAkAAAAAB0wIBAAAAAewCAQAAAAHtAgIAAAAB7gIQAAAAAe8CIAAAAAHwAgEAAAABAgAAAB0AICEAANEHACAQCgAAnAYAIA0AAM4FACAPAADPBQAgEAAA0AUAIBMAANIFACAUAADTBQAgsQIBAAAAAckCAQAAAAHRAkAAAAAB0gJAAAAAAdMCAQAAAAHsAgEAAAAB7QICAAAAAe4CEAAAAAHvAiAAAAAB8AIBAAAAAQIAAAAdACAhAADTBwAgAwAAABsAICEAANMHACAiAADXBwAgEgAAABsAIAoAAJsGACANAACMBQAgDwAAjQUAIBAAAI4FACATAACQBQAgFAAAkQUAIBoAANcHACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh7AIBAMkEACHtAgIAiQUAIe4CEADKBAAh7wIgAIoFACHwAgEA1wQAIRAKAACbBgAgDQAAjAUAIA8AAI0FACAQAACOBQAgEwAAkAUAIBQAAJEFACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh7AIBAMkEACHtAgIAiQUAIe4CEADKBAAh7wIgAIoFACHwAgEA1wQAIQzJAgEAAAAB0QJAAAAAAdICQAAAAAHUAgEAAAAB1QIBAAAAAdYCAQAAAAHcAgAAAOMCAt0CAQAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAkAAAAABAwAAABsAICEAANEHACAiAADbBwAgEgAAABsAIAoAAJsGACANAACMBQAgDwAAjQUAIBAAAI4FACARAACPBQAgEwAAkAUAIBoAANsHACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh7AIBAMkEACHtAgIAiQUAIe4CEADKBAAh7wIgAIoFACHwAgEA1wQAIRAKAACbBgAgDQAAjAUAIA8AAI0FACAQAACOBQAgEQAAjwUAIBMAAJAFACCxAgEAyQQAIckCAQDJBAAh0QJAAMsEACHSAkAAywQAIdMCAQDJBAAh7AIBAMkEACHtAgIAiQUAIe4CEADKBAAh7wIgAIoFACHwAgEA1wQAIQ3JAgEAAAAB0QJAAAAAAdICQAAAAAHUAgEAAAAB1QIBAAAAAdYCAQAAAAHYAgAAANgCAtkCQAAAAAHaAkAAAAAB3AIAAADcAgLdAgEAAAAB3gIBAAAAAd8CAQAAAAEKyQIBAAAAAdECQAAAAAHSAkAAAAAB-QIBAAAAAfoCAQAAAAH7AgEAAAAB_AIBAAAAAf0CAQAAAAH-AgEAAAAB_wIBAAAAAQQEBgIFCgMGDgQHABQBAwABAQMAAQIDAAEKAAUGBwATCBAGCRYECxoIDB4JFD0PAgYUBQcABwEGFQABCgAFCAcAEgoABQ0ACg8kDBAoDREsDhM0ERQ3DwIHAAsMHwkBDCAAAQ4ACQEOAAkCDgAJEi4PBAcAEAoABQ4ACREvDgERMAABDgAJBQ84ABA5ABE6ABM7ABQ8AAQJPgALPwAMQAAUQQADBEIABUMABkQAAAAAAwcAGScAGigAGwAAAAMHABknABooABsBAwABAQMAAQUHACAnACMoACQ5ACE6ACIAAAAAAAUHACAnACMoACQ5ACE6ACIBAwABAQMAAQMHACknACooACsAAAADBwApJwAqKAArAAAAAwcAMScAMigAMwAAAAMHADEnADIoADMBCKsBBgEIsQEGAwcAOCcAOSgAOgAAAAMHADgnADkoADoCAwABCgAFAgMAAQoABQMHAD8nAEAoAEEAAAADBwA_JwBAKABBAQoABQEKAAUDBwBGJwBHKABIAAAAAwcARicARygASAAAAwcATScATigATwAAAAMHAE0nAE4oAE8CCgAFDQAKAgoABQ0ACgUHAFQnAFcoAFg5AFU6AFYAAAAAAAUHAFQnAFcoAFg5AFU6AFYBDgAJAQ4ACQMHAF0nAF4oAF8AAAADBwBdJwBeKABfAQ4ACQEOAAkDBwBkJwBlKABmAAAAAwcAZCcAZSgAZgEOAAkBDgAJBQcAaycAbigAbzkAbDoAbQAAAAAABQcAaycAbigAbzkAbDoAbQIOAAkS4AIPAg4ACRLmAg8DBwB0JwB1KAB2AAAAAwcAdCcAdSgAdgAAAAMHAHwnAH0oAH4AAAADBwB8JwB9KAB-AgoABQ4ACQIKAAUOAAkDBwCDAScAhAEoAIUBAAAAAwcAgwEnAIQBKACFAQAAAAUHAIsBJwCOASgAjwE5AIwBOgCNAQAAAAAABQcAiwEnAI4BKACPATkAjAE6AI0BAAAFBwCUAScAlwEoAJgBOQCVAToAlgEAAAAAAAUHAJQBJwCXASgAmAE5AJUBOgCWARUCARZFARdIARhJARlKARtMARxOFR1PFh5RAR9TFSBUFyNVASRWASVXFSlaGCpbHCtcAixdAi1eAi5fAi9gAjBiAjFkFTJlHTNnAjRpFTVqHjZrAjdsAjhtFTtwHzxxJT1yAz5zAz90A0B1A0F2A0J4A0N6FUR7JkV9A0Z_FUeAASdIgQEDSYIBA0qDARVLhgEoTIcBLE2JAS1OigEtT40BLVCOAS1RjwEtUpEBLVOTARVUlAEuVZYBLVaYARVXmQEvWJoBLVmbAS1anAEVW58BMFygATRdoQEFXqIBBV-jAQVgpAEFYaUBBWKnAQVjqQEVZKoBNWWtAQVmrwEVZ7ABNmiyAQVpswEFarQBFWu3ATdsuAE7bbkBBG66AQRvuwEEcLwBBHG9AQRyvwEEc8EBFXTCATx1xAEEdsYBFXfHAT14yAEEeckBBHrKARV7zQE-fM4BQn3PAQh-0AEIf9EBCIAB0gEIgQHTAQiCAdUBCIMB1wEVhAHYAUOFAdoBCIYB3AEVhwHdAUSIAd4BCIkB3wEIigHgARWLAeMBRYwB5AFJjQHmAQqOAecBCo8B6gEKkAHrAQqRAewBCpIB7gEKkwHwARWUAfEBSpUB8wEKlgH1ARWXAfYBS5gB9wEKmQH4AQqaAfkBFZsB_AFMnAH9AVCdAf4BCZ4B_wEJnwGAAgmgAYECCaEBggIJogGEAgmjAYYCFaQBhwJRpQGJAgmmAYsCFacBjAJSqAGNAgmpAY4CCaoBjwIVqwGSAlOsAZMCWa0BlAIRrgGVAhGvAZYCEbABlwIRsQGYAhGyAZoCEbMBnAIVtAGdAlq1AZ8CEbYBoQIVtwGiAlu4AaMCEbkBpAIRugGlAhW7AagCXLwBqQJgvQGqAgy-AasCDL8BrAIMwAGtAgzBAa4CDMIBsAIMwwGyAhXEAbMCYcUBtQIMxgG3AhXHAbgCYsgBuQIMyQG6AgzKAbsCFcsBvgJjzAG_AmfNAcACDc4BwQINzwHCAg3QAcMCDdEBxAIN0gHGAg3TAcgCFdQByQJo1QHLAg3WAc0CFdcBzgJp2AHPAg3ZAdACDdoB0QIV2wHUAmrcAdUCcN0B1gIO3gHXAg7fAdgCDuAB2QIO4QHaAg7iAdwCDuMB3gIV5AHfAnHlAeICDuYB5AIV5wHlAnLoAecCDukB6AIO6gHpAhXrAewCc-wB7QJ37QHvAnjuAfACeO8B8wJ48AH0AnjxAfUCePIB9wJ48wH5AhX0AfoCefUB_AJ49gH-AhX3Af8CevgBgAN4-QGBA3j6AYIDFfsBhQN7_AGGA3_9AYcDD_4BiAMP_wGJAw-AAooDD4ECiwMPggKNAw-DAo8DFYQCkAOAAYUCkgMPhgKUAxWHApUDgQGIApYDD4kClwMPigKYAxWLApsDggGMApwDhgGNAp4DhwGOAp8DhwGPAqIDhwGQAqMDhwGRAqQDhwGSAqYDhwGTAqgDFZQCqQOIAZUCqwOHAZYCrQMVlwKuA4kBmAKvA4cBmQKwA4cBmgKxAxWbArQDigGcArUDkAGdArcDBp4CuAMGnwK6AwagArsDBqECvAMGogK-AwajAsADFaQCwQORAaUCwwMGpgLFAxWnAsYDkgGoAscDBqkCyAMGqgLJAxWrAswDkwGsAs0DmQE" } async function decodeBase64AsWasm(wasmBase64: string): Promise { diff --git a/apps/backend/src/generated/prisma/internal/prismaNamespace.ts b/apps/backend/src/generated/prisma/internal/prismaNamespace.ts index 78f3a17..e2ee12e 100644 --- a/apps/backend/src/generated/prisma/internal/prismaNamespace.ts +++ b/apps/backend/src/generated/prisma/internal/prismaNamespace.ts @@ -1924,6 +1924,9 @@ export const CourtBookingLogScalarFieldEnum = { endTime: 'endTime', previousStatus: 'previousStatus', newStatus: 'newStatus', + previousCourtId: 'previousCourtId', + previousStartTime: 'previousStartTime', + previousEndTime: 'previousEndTime', customerName: 'customerName', customerPhone: 'customerPhone', customerEmail: 'customerEmail', diff --git a/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts b/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts index d4e8439..4b52b60 100644 --- a/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -293,6 +293,9 @@ export const CourtBookingLogScalarFieldEnum = { endTime: 'endTime', previousStatus: 'previousStatus', newStatus: 'newStatus', + previousCourtId: 'previousCourtId', + previousStartTime: 'previousStartTime', + previousEndTime: 'previousEndTime', customerName: 'customerName', customerPhone: 'customerPhone', customerEmail: 'customerEmail', diff --git a/apps/backend/src/modules/admin-booking/admin-booking.routes.ts b/apps/backend/src/modules/admin-booking/admin-booking.routes.ts index f6aa181..97382af 100644 --- a/apps/backend/src/modules/admin-booking/admin-booking.routes.ts +++ b/apps/backend/src/modules/admin-booking/admin-booking.routes.ts @@ -4,6 +4,7 @@ import { createAdminBookingHandler } from '@/modules/admin-booking/handlers/crea import { createAdminRecurringBookingHandler } from '@/modules/admin-booking/handlers/create-admin-recurring-booking.handler'; import { listAdminBookingsHandler } from '@/modules/admin-booking/handlers/list-admin-bookings.handler'; import { listRecurringGroupsHandler } from '@/modules/admin-booking/handlers/list-recurring-groups.handler'; +import { rescheduleAdminBookingHandler } from '@/modules/admin-booking/handlers/reschedule-admin-booking.handler'; import { updateAdminBookingStatusHandler } from '@/modules/admin-booking/handlers/update-admin-booking-status.handler'; import { updateRecurringGroupHandler } from '@/modules/admin-booking/handlers/update-recurring-group.handler'; import type { AppEnv } from '@/types/hono'; @@ -12,6 +13,7 @@ import { createAdminBookingSchema, createRecurringBookingSchema, listAdminBookingsQuerySchema, + rescheduleAdminBookingSchema, updateAdminBookingStatusSchema, updateRecurringGroupSchema, } from '@repo/api-contract'; @@ -71,3 +73,10 @@ adminBookingRoutes.patch( zValidator('json', updateAdminBookingStatusSchema), updateAdminBookingStatusHandler ); + +adminBookingRoutes.patch( + '/:id/reschedule', + zValidator('param', bookingIdParamsSchema), + zValidator('json', rescheduleAdminBookingSchema), + rescheduleAdminBookingHandler +); diff --git a/apps/backend/src/modules/admin-booking/handlers/reschedule-admin-booking.handler.ts b/apps/backend/src/modules/admin-booking/handlers/reschedule-admin-booking.handler.ts new file mode 100644 index 0000000..d572e8a --- /dev/null +++ b/apps/backend/src/modules/admin-booking/handlers/reschedule-admin-booking.handler.ts @@ -0,0 +1,60 @@ +import { db } from '@/lib/prisma'; +import { sseManager } from '@/lib/sse'; +import { + AdminBookingServiceError, + rescheduleAdminBooking, +} from '@/modules/admin-booking/services/admin-booking.service'; +import { sendBookingRescheduled } from '@/services/booking-email.service'; +import type { AppContext } from '@/types/hono'; +import type { RescheduleAdminBookingInput } from '@repo/api-contract'; + +type BookingIdParams = { id: string }; + +export async function rescheduleAdminBookingHandler(c: AppContext) { + const { id } = c.req.valid('param' as never) as BookingIdParams; + const payload = c.req.valid('json' as never) as RescheduleAdminBookingInput; + const user = c.get('user'); + + const previous = await db.courtBooking.findUnique({ + where: { id }, + select: { + court: { select: { name: true } }, + startTime: true, + endTime: true, + customerEmail: true, + }, + }); + + try { + const booking = await rescheduleAdminBooking(user.id, id, payload); + + if (previous) { + void sendBookingRescheduled({ + bookingCode: booking.bookingCode, + complexName: booking.complexName, + date: booking.date, + startTime: booking.startTime, + endTime: booking.endTime, + courtName: booking.courtName, + sportName: booking.sport.name, + customerName: booking.customerName, + customerEmail: previous.customerEmail, + previousCourtName: previous.court.name, + previousStartTime: previous.startTime, + previousEndTime: previous.endTime, + }); + } + + sseManager.emit( + `complex:${booking.complexId}`, + JSON.stringify({ type: 'reschedule', booking }) + ); + + return c.json(booking); + } catch (error) { + if (error instanceof AdminBookingServiceError) { + return c.json({ message: error.message }, error.status); + } + throw error; + } +} diff --git a/apps/backend/src/modules/admin-booking/services/admin-booking.service.ts b/apps/backend/src/modules/admin-booking/services/admin-booking.service.ts index 51bd209..0031d95 100644 --- a/apps/backend/src/modules/admin-booking/services/admin-booking.service.ts +++ b/apps/backend/src/modules/admin-booking/services/admin-booking.service.ts @@ -8,6 +8,7 @@ import type { AdminBooking, CreateAdminBookingInput, ListAdminBookingsQuery, + RescheduleAdminBookingInput, UpdateAdminBookingStatusInput, } from '@repo/api-contract'; import { v7 as uuidv7 } from 'uuid'; @@ -598,3 +599,196 @@ export async function updateAdminBookingStatus( return mapBookingResponse({ ...booking, status: input.status }); } + +export async function rescheduleAdminBooking( + userId: string, + bookingId: string, + input: RescheduleAdminBookingInput +): Promise { + const booking = await db.courtBooking.findFirst({ + where: { + id: bookingId, + court: { + complex: { + users: { + some: { userId }, + }, + }, + }, + }, + include: { + court: { + select: { + id: true, + name: true, + complexId: true, + slotDurationMinutes: true, + sport: { + select: { id: true, name: true, slug: true }, + }, + complex: { + select: { id: true, complexName: true }, + }, + }, + }, + }, + }); + + if (!booking) { + throw new AdminBookingServiceError('Reserva no encontrada.', 404); + } + + if (booking.status !== 'CONFIRMED') { + throw new AdminBookingServiceError( + 'Solo se pueden reprogramar reservas en estado confirmada.', + 409 + ); + } + + const targetCourtId = input.courtId ?? booking.courtId; + const targetStartTime = input.startTime ?? booking.startTime; + + if (targetCourtId === booking.courtId && targetStartTime === booking.startTime) { + throw new AdminBookingServiceError( + 'Debe proporcionar al menos una cancha o un horario diferente.', + 400 + ); + } + + const dayOfWeek = getDayOfWeek(booking.bookingDate); + + const targetCourt = await db.court.findFirst({ + where: { + id: targetCourtId, + complexId: booking.court.complexId, + }, + include: { + availabilities: { + where: { dayOfWeek }, + orderBy: { startTime: 'asc' }, + }, + priceRules: { + where: { isActive: true }, + orderBy: [{ dayOfWeek: 'asc' }, { startTime: 'asc' }], + }, + sport: { + select: { id: true, name: true, slug: true }, + }, + }, + }); + + if (!targetCourt) { + throw new AdminBookingServiceError('La cancha seleccionada no existe en el complejo.', 404); + } + + if (targetCourt.sport.id !== booking.court.sport.id) { + throw new AdminBookingServiceError( + 'La cancha seleccionada no es del mismo deporte que la reserva original.', + 409 + ); + } + + if (targetCourt.isUnderMaintenance) { + throw new AdminBookingServiceError( + 'La cancha seleccionada se encuentra en mantenimiento.', + 409 + ); + } + + const validSlots = buildSlots(targetCourt.availabilities, targetCourt.slotDurationMinutes); + const selectedEndMinutes = toMinutes(targetStartTime) + targetCourt.slotDurationMinutes; + const selectedSlot = { + startTime: targetStartTime, + endTime: minutesToTime(selectedEndMinutes), + }; + + const slotExists = validSlots.some( + (slot) => slot.startTime === selectedSlot.startTime && slot.endTime === selectedSlot.endTime + ); + + if (!slotExists) { + throw new AdminBookingServiceError( + 'El horario seleccionado no está disponible para esa cancha.', + 409 + ); + } + + if (isSlotInPast(booking.bookingDate, targetStartTime, targetCourt.slotDurationMinutes)) { + throw new AdminBookingServiceError('No se pueden reprogramar reservas en el pasado.', 400); + } + + const overlappingBooking = await db.courtBooking.findFirst({ + where: { + id: { not: bookingId }, + courtId: targetCourtId, + bookingDate: booking.bookingDate, + status: 'CONFIRMED', + startTime: { lt: selectedSlot.endTime }, + endTime: { gt: selectedSlot.startTime }, + }, + }); + + if (overlappingBooking) { + throw new AdminBookingServiceError( + 'El horario seleccionado ya fue reservado por otra reserva.', + 409 + ); + } + + const newPrice = resolvePrice( + targetCourt, + dayOfWeek, + selectedSlot.startTime, + selectedSlot.endTime + ); + + await db.$transaction(async (tx) => { + await tx.courtBookingLog.create({ + data: { + id: uuidv7(), + bookingCode: booking.bookingCode, + courtId: booking.court.id, + bookingDate: booking.bookingDate, + startTime: booking.startTime, + endTime: booking.endTime, + customerName: booking.customerName, + customerPhone: booking.customerPhone, + customerEmail: booking.customerEmail, + previousStatus: booking.status, + newStatus: booking.status, + previousCourtId: booking.court.id, + previousStartTime: booking.startTime, + previousEndTime: booking.endTime, + changedAt: new Date(), + }, + }); + + await tx.courtBooking.update({ + where: { id: booking.id }, + data: { + courtId: targetCourtId, + startTime: selectedSlot.startTime, + endTime: selectedSlot.endTime, + }, + }); + }); + + const updatedBooking = { + ...booking, + startTime: selectedSlot.startTime, + endTime: selectedSlot.endTime, + price: newPrice, + }; + + if (targetCourtId !== booking.courtId) { + updatedBooking.court = { + id: targetCourt.id, + name: targetCourt.name, + slotDurationMinutes: targetCourt.slotDurationMinutes, + sport: targetCourt.sport, + complex: booking.court.complex, + } as typeof booking.court; + } + + return mapBookingResponse(updatedBooking); +} diff --git a/apps/backend/src/modules/court/services/court.service.ts b/apps/backend/src/modules/court/services/court.service.ts index 22dbfe8..9ad026b 100644 --- a/apps/backend/src/modules/court/services/court.service.ts +++ b/apps/backend/src/modules/court/services/court.service.ts @@ -167,6 +167,7 @@ function mapCourtResponse(court: CourtWithRelations) { id: court.id, complexId: court.complexId, name: court.name, + isUnderMaintenance: court.isUnderMaintenance, sportId: court.sportId, sport: { id: court.sport.id, diff --git a/apps/backend/src/services/booking-email.service.ts b/apps/backend/src/services/booking-email.service.ts index 78622dd..b9581db 100644 --- a/apps/backend/src/services/booking-email.service.ts +++ b/apps/backend/src/services/booking-email.service.ts @@ -2,6 +2,7 @@ import { bookingCancelledHtml, bookingConfirmationHtml, bookingNoShowHtml, + bookingRescheduledHtml, } from '@/emails/booking-confirmation'; import { sendMail } from '@/lib/mailer'; @@ -86,3 +87,35 @@ export async function sendBookingNoShow(data: BookingEmailInput) { text: `Reserva no concretada en ${data.complexName}. Codigo: ${data.bookingCode}. Fecha: ${data.date}. Horario: ${data.startTime} - ${data.endTime}.`, }); } + +type BookingRescheduledEmailInput = BookingEmailInput & { + previousCourtName: string; + previousStartTime: string; + previousEndTime: string; +}; + +export async function sendBookingRescheduled(data: BookingRescheduledEmailInput) { + if (!data.customerEmail) return; + + const html = bookingRescheduledHtml({ + bookingCode: data.bookingCode, + complexSlug: data.complexSlug, + complexName: data.complexName, + date: data.date, + startTime: data.startTime, + endTime: data.endTime, + courtName: data.courtName, + sportName: data.sportName, + customerName: data.customerName, + previousCourtName: data.previousCourtName, + previousStartTime: data.previousStartTime, + previousEndTime: data.previousEndTime, + }); + + await sendMail({ + to: data.customerEmail, + subject: `Reserva reprogramada en ${data.complexName} | Playzer`, + html, + text: `Reserva reprogramada en ${data.complexName}. Codigo: ${data.bookingCode}. Nueva cancha: ${data.courtName}. Nuevo horario: ${data.startTime} - ${data.endTime}.`, + }); +} diff --git a/apps/backend/test/admin-booking/reschedule-admin-booking.handler.test.ts b/apps/backend/test/admin-booking/reschedule-admin-booking.handler.test.ts new file mode 100644 index 0000000..eba2984 --- /dev/null +++ b/apps/backend/test/admin-booking/reschedule-admin-booking.handler.test.ts @@ -0,0 +1,126 @@ +import { beforeEach, expect, mock, test } from 'bun:test'; + +const rescheduleAdminBookingMock = mock( + async (_userId: string, _id: string, _input: unknown) => ({}) +); + +class MockAdminBookingServiceError extends Error { + status: 400 | 403 | 404 | 409; + + constructor(message: string, status: 400 | 403 | 404 | 409 = 400) { + super(message); + this.name = 'AdminBookingServiceError'; + this.status = status; + } +} + +mock.module('@/modules/admin-booking/services/admin-booking.service', () => ({ + __esModule: true, + AdminBookingServiceError: MockAdminBookingServiceError, + rescheduleAdminBooking: rescheduleAdminBookingMock, +})); + +const { rescheduleAdminBookingHandler } = await import( + '@/modules/admin-booking/handlers/reschedule-admin-booking.handler' +); + +type HandlerContext = { + get: (key: 'user' | 'requestId') => { id: string } | undefined; + req: { + valid: (type: string) => Record; + }; + json: ReturnType; +}; + +function createContext(input: { userId: string; body: unknown }) { + const json = mock((payload: unknown, init?: unknown) => ({ + payload, + init, + })); + + const c = { + get: (key: 'user' | 'requestId') => { + if (key === 'user') return { id: input.userId }; + return undefined; + }, + req: { + valid: (type: string) => { + if (type === 'param') return { id: 'booking-1' }; + if (type === 'json') return input.body as Record; + return {}; + }, + }, + json, + } as unknown as HandlerContext; + + return { c, json }; +} + +beforeEach(() => { + rescheduleAdminBookingMock.mockReset(); +}); + +test('returns 200 with the updated booking', async () => { + const updatedBooking = { + id: 'booking-1', + bookingCode: 'ABC123', + complexId: 'complex-1', + complexName: 'Complejo Test', + courtId: 'court-2', + courtName: 'Cancha 2', + sport: { id: 'sport-1', name: 'Tenis', slug: 'tenis' }, + date: '2026-07-15', + startTime: '14:00', + endTime: '15:00', + customerName: 'Juan Perez', + customerPhone: '1144444444', + customerEmail: 'juan@example.com', + price: 15000, + status: 'CONFIRMED', + recurringGroupId: null, + createdAt: '2026-07-14T00:00:00.000Z', + updatedAt: '2026-07-14T00:00:00.000Z', + } as const; + + rescheduleAdminBookingMock.mockResolvedValue(updatedBooking); + + const { c, json } = createContext({ + userId: 'user-1', + body: { courtId: 'court-2', startTime: '14:00' }, + }); + + const response = await rescheduleAdminBookingHandler(c as never); + + expect(rescheduleAdminBookingMock).toHaveBeenCalledWith('user-1', 'booking-1', { + courtId: 'court-2', + startTime: '14:00', + }); + expect(json.mock.calls[0]?.[0]).toEqual(updatedBooking); + expect(json.mock.calls[0]?.[1]).toBeUndefined(); + expect(response).toBeDefined(); +}); + +test('maps AdminBookingServiceError to an error response', async () => { + rescheduleAdminBookingMock.mockRejectedValue( + new MockAdminBookingServiceError( + 'Solo se pueden reprogramar reservas en estado confirmada.', + 409 + ) + ); + + const { c, json } = createContext({ + userId: 'user-1', + body: { startTime: '14:00' }, + }); + + const response = await rescheduleAdminBookingHandler(c as never); + + expect(rescheduleAdminBookingMock).toHaveBeenCalledWith('user-1', 'booking-1', { + startTime: '14:00', + }); + expect(json.mock.calls[0]?.[0]).toEqual({ + message: 'Solo se pueden reprogramar reservas en estado confirmada.', + }); + expect(json.mock.calls[0]?.[1]).toBe(409); + expect(response).toBeDefined(); +}); diff --git a/apps/backend/test/admin-booking/reschedule-admin-booking.service.test.ts b/apps/backend/test/admin-booking/reschedule-admin-booking.service.test.ts new file mode 100644 index 0000000..4cafe67 --- /dev/null +++ b/apps/backend/test/admin-booking/reschedule-admin-booking.service.test.ts @@ -0,0 +1,317 @@ +import { beforeEach, expect, test } from 'bun:test'; + +import { prismaMock, transactionMock, uuidV7Mock } from '../support/prisma.mock'; + +const { AdminBookingServiceError, rescheduleAdminBooking } = await import( + '@/modules/admin-booking/services/admin-booking.service' +); + +function makeBooking(overrides?: Record) { + return { + id: 'booking-1', + bookingCode: 'ABC123', + courtId: 'court-1', + bookingDate: new Date('2026-07-15T00:00:00.000Z'), + startTime: '10:00', + endTime: '11:00', + customerName: 'Juan Perez', + customerPhone: '1144444444', + customerEmail: 'juan@example.com', + status: 'CONFIRMED', + recurringGroupId: null, + createdAt: new Date('2026-07-14T00:00:00.000Z'), + updatedAt: new Date('2026-07-14T00:00:00.000Z'), + court: { + id: 'court-1', + name: 'Cancha 1', + complexId: 'complex-1', + slotDurationMinutes: 60, + sport: { id: 'sport-1', name: 'Tenis', slug: 'tenis' }, + complex: { id: 'complex-1', complexName: 'Complejo Test' }, + }, + ...overrides, + }; +} + +// July 15, 2026 is a Wednesday +const WEDNESDAY = 'WEDNESDAY'; + +function makeCourt(overrides?: Record) { + return { + id: 'court-2', + name: 'Cancha 2', + complexId: 'complex-1', + slotDurationMinutes: 60, + basePrice: 15000, + isUnderMaintenance: false, + availabilities: [{ id: 'avail-1', dayOfWeek: WEDNESDAY, startTime: '08:00', endTime: '18:00' }], + priceRules: [], + sport: { id: 'sport-1', name: 'Tenis', slug: 'tenis' }, + ...overrides, + }; +} + +beforeEach(() => { + prismaMock._reset(); + transactionMock.mockClear(); + uuidV7Mock.mockReset(); + uuidV7Mock.mockReturnValue('00000000-0000-4000-8000-000000000001'); +}); + +test('reschedules a booking changing both court and time', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue(makeBooking() as never); + prismaMock.court.findFirst.mockResolvedValue(makeCourt() as never); + + prismaMock.courtBooking.findFirst + .mockResolvedValueOnce(makeBooking() as never) // initial fetch + .mockResolvedValueOnce(null as never); // overlap check -> no overlap + + transactionMock.mockImplementation(async (fn: (tx: typeof prismaMock) => Promise) => + fn(prismaMock) + ); + + prismaMock.courtBookingLog.create.mockResolvedValue({} as never); + prismaMock.courtBooking.update.mockResolvedValue( + makeBooking({ + courtId: 'court-2', + startTime: '14:00', + endTime: '15:00', + }) as never + ); + + const result = await rescheduleAdminBooking('user-1', 'booking-1', { + courtId: 'court-2', + startTime: '14:00', + }); + + expect(result.courtId).toBe('court-2'); + expect(result.startTime).toBe('14:00'); + expect(result.courtName).toBe('Cancha 2'); + expect(prismaMock.courtBookingLog.create).toHaveBeenCalledTimes(1); + expect(prismaMock.courtBooking.update).toHaveBeenCalledWith({ + where: { id: 'booking-1' }, + data: { + courtId: 'court-2', + startTime: '14:00', + endTime: '15:00', + }, + }); + + const logArgs = prismaMock.courtBookingLog.create.mock.calls[0]?.[0] as { + data: { previousCourtId: string; previousStartTime: string; previousEndTime: string }; + }; + expect(logArgs.data.previousCourtId).toBe('court-1'); + expect(logArgs.data.previousStartTime).toBe('10:00'); + expect(logArgs.data.previousEndTime).toBe('11:00'); +}); + +test('reschedules a booking changing only the time', async () => { + prismaMock.courtBooking.findFirst + .mockResolvedValueOnce(makeBooking() as never) // initial fetch + .mockResolvedValueOnce(null as never); // overlap check + + // Same court, different time + prismaMock.court.findFirst.mockResolvedValue( + makeCourt({ + id: 'court-1', + name: 'Cancha 1', + availabilities: [ + { id: 'avail-1', dayOfWeek: WEDNESDAY, startTime: '08:00', endTime: '18:00' }, + ], + }) as never + ); + + transactionMock.mockImplementation(async (fn: (tx: typeof prismaMock) => Promise) => + fn(prismaMock) + ); + + prismaMock.courtBookingLog.create.mockResolvedValue({} as never); + prismaMock.courtBooking.update.mockResolvedValue( + makeBooking({ + startTime: '15:00', + endTime: '16:00', + }) as never + ); + + const result = await rescheduleAdminBooking('user-1', 'booking-1', { + startTime: '15:00', + }); + + expect(result.startTime).toBe('15:00'); + expect(result.courtId).toBe('court-1'); + expect(prismaMock.courtBookingLog.create).toHaveBeenCalledTimes(1); + expect(prismaMock.courtBooking.update).toHaveBeenCalledWith({ + where: { id: 'booking-1' }, + data: { + courtId: 'court-1', + startTime: '15:00', + endTime: '16:00', + }, + }); +}); + +test('rejects when booking is not found', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue(null as never); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'non-existent', { startTime: '14:00' }); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(404); + expect(transactionMock).not.toHaveBeenCalled(); +}); + +test('rejects when booking status is not CONFIRMED', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue( + makeBooking({ status: 'COMPLETED' }) as never + ); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'booking-1', { startTime: '14:00' }); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(409); + expect(transactionMock).not.toHaveBeenCalled(); +}); + +test('rejects when slot is not available in target court', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue(makeBooking() as never); + // Court with no availabilities that match the requested time + prismaMock.court.findFirst.mockResolvedValue( + makeCourt({ + id: 'court-2', + availabilities: [ + { id: 'avail-1', dayOfWeek: WEDNESDAY, startTime: '08:00', endTime: '09:00' }, + ], + }) as never + ); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'booking-1', { + courtId: 'court-2', + startTime: '14:00', + }); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(409); +}); + +test('rejects when target court has a different sport', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue(makeBooking() as never); + prismaMock.court.findFirst.mockResolvedValue( + makeCourt({ + sport: { id: 'sport-2', name: 'Fútbol', slug: 'futbol' }, + }) as never + ); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'booking-1', { + courtId: 'court-2', + startTime: '14:00', + }); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(409); + expect(transactionMock).not.toHaveBeenCalled(); +}); + +test('rejects when target court is under maintenance', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue(makeBooking() as never); + prismaMock.court.findFirst.mockResolvedValue( + makeCourt({ + isUnderMaintenance: true, + }) as never + ); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'booking-1', { + courtId: 'court-2', + startTime: '14:00', + }); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(409); +}); + +test('rejects when there is an overlapping booking', async () => { + prismaMock.courtBooking.findFirst + .mockResolvedValueOnce(makeBooking() as never) // initial fetch + .mockResolvedValueOnce({ id: 'overlap-1' } as never); // overlap found + + prismaMock.court.findFirst.mockResolvedValue( + makeCourt({ + availabilities: [ + { id: 'avail-1', dayOfWeek: WEDNESDAY, startTime: '08:00', endTime: '18:00' }, + ], + }) as never + ); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'booking-1', { + courtId: 'court-2', + startTime: '14:00', + }); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(409); + expect(transactionMock).not.toHaveBeenCalled(); +}); + +test('rejects when neither courtId nor startTime changes', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue(makeBooking() as never); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'booking-1', {}); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(400); + expect(transactionMock).not.toHaveBeenCalled(); +}); + +test('rejects when target court does not belong to the same complex', async () => { + prismaMock.courtBooking.findFirst.mockResolvedValue(makeBooking() as never); + // Court belongs to a different complex + prismaMock.court.findFirst.mockResolvedValue(null as never); + + let caught: unknown; + try { + await rescheduleAdminBooking('user-1', 'booking-1', { + courtId: 'other-complex-court', + startTime: '14:00', + }); + } catch (error) { + caught = error; + } + + expect(caught).toBeInstanceOf(AdminBookingServiceError); + expect((caught as InstanceType).status).toBe(404); + expect(transactionMock).not.toHaveBeenCalled(); +}); diff --git a/apps/backend/test/support/prisma.mock.ts b/apps/backend/test/support/prisma.mock.ts index faf1d94..fdf608a 100644 --- a/apps/backend/test/support/prisma.mock.ts +++ b/apps/backend/test/support/prisma.mock.ts @@ -22,6 +22,11 @@ export const dbMock = { user: prismaMock.user, complexInvitation: prismaMock.complexInvitation, sport: prismaMock.sport, + court: prismaMock.court, + courtBooking: prismaMock.courtBooking, + courtBookingLog: prismaMock.courtBookingLog, + courtAvailability: prismaMock.courtAvailability, + courtPriceRule: prismaMock.courtPriceRule, $transaction: transactionMock, }; diff --git a/apps/frontend/src/features/booking/booking-provider.tsx b/apps/frontend/src/features/booking/booking-provider.tsx index 4515ba8..a7b5c37 100644 --- a/apps/frontend/src/features/booking/booking-provider.tsx +++ b/apps/frontend/src/features/booking/booking-provider.tsx @@ -5,6 +5,7 @@ import type { Court, PlanFeatureFlags, RecurringBookingGroup, + RescheduleAdminBookingInput, } from '@repo/api-contract'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { @@ -100,6 +101,7 @@ interface BookingContextValue { createBooking: (payload: CreateManualBookingPayload) => Promise; createRecurringBooking: (payload: CreateRecurringBookingPayload) => Promise; updateBookingStatus: (bookingId: string, status: 'CANCELLED' | 'COMPLETED' | 'NOSHOW') => void; + rescheduleBooking: (bookingId: string, input: RescheduleAdminBookingInput) => void; exportDayReport: () => void; openBookingTools: (segment?: BookingTimelineSegment) => void; closeBookingTools: () => void; @@ -413,7 +415,26 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { [selectedDate] ); - const closeBookingTools = () => setBookingToolsOpen(false); + const closeBookingTools = () => { + setBookingToolsOpen(false); + setSelectedSegment(null); + }; + + const rescheduleMutation = useMutation({ + mutationFn: (payload: { bookingId: string; input: RescheduleAdminBookingInput }) => + apiClient.adminBookings.reschedule(payload.bookingId, payload.input), + onSuccess: async () => { + await queryClient.invalidateQueries({ queryKey: ['admin-bookings', complex.id] }); + closeBookingTools(); + }, + }); + + const rescheduleBooking = useCallback( + (bookingId: string, input: RescheduleAdminBookingInput) => { + rescheduleMutation.mutate({ bookingId, input }); + }, + [rescheduleMutation] + ); useEffect(() => { const handleOpenCreateBooking = () => { @@ -534,6 +555,7 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { createBooking, createRecurringBooking, updateBookingStatus, + rescheduleBooking, exportDayReport, bookingToolsOpen, openBookingTools, @@ -573,6 +595,7 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { summary, timelineHours, updateBookingStatus, + rescheduleBooking, viewMode, visibleTimeRange, bookingToolsOpen, diff --git a/apps/frontend/src/features/booking/components/booking-reschedule-dialog.tsx b/apps/frontend/src/features/booking/components/booking-reschedule-dialog.tsx new file mode 100644 index 0000000..6dd0c1f --- /dev/null +++ b/apps/frontend/src/features/booking/components/booking-reschedule-dialog.tsx @@ -0,0 +1,203 @@ +import { Button } from '@/components/ui/button'; +import { + ResponsiveDialog, + ResponsiveDialogClose, + ResponsiveDialogContent, + ResponsiveDialogDescription, + ResponsiveDialogFooter, + ResponsiveDialogHeader, + ResponsiveDialogTitle, +} from '@/components/ui/responsive-dialog'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import type { AdminBooking } from '@repo/api-contract'; +import { CalendarSync } from 'lucide-react'; +import { useMemo, useState } from 'react'; +import { useBooking } from '../booking-provider'; +import { + getDayOfWeek, + getNowTime, + isTodayIso, + minutesToTime, + timeToMinutes, +} from '../lib/booking-time'; + +interface BookingRescheduleDialogProps { + booking: AdminBooking; + open: boolean; + onOpenChange: (open: boolean) => void; +} + +export function BookingRescheduleDialog({ + booking, + open, + onOpenChange, +}: BookingRescheduleDialogProps) { + const { courts, bookings, rescheduleBooking } = useBooking(); + + const [courtId, setCourtId] = useState(booking.courtId); + const [startTime, setStartTime] = useState(booking.startTime); + + const sportId = booking.sport.id; + const filteredCourts = useMemo( + () => courts.filter((c) => c.sportId === sportId), + [courts, sportId] + ); + + const selectedCourt = filteredCourts.find((c) => c.id === courtId); + const dayOfWeek = getDayOfWeek(booking.date); + + const availableStartTimes = useMemo(() => { + if (!selectedCourt) return []; + + const times: string[] = []; + const dayAvailability = selectedCourt.availability + .filter((range) => range.dayOfWeek === dayOfWeek) + .sort((a, b) => timeToMinutes(a.startTime) - timeToMinutes(b.startTime)); + + const courtBookings = bookings.filter( + (b) => + b.date === booking.date && + b.courtId === selectedCourt.id && + b.id !== booking.id && + b.status !== 'CANCELLED' + ); + + for (const range of dayAvailability) { + const start = timeToMinutes(range.startTime); + const end = timeToMinutes(range.endTime); + + for ( + let minute = start; + minute + selectedCourt.slotDurationMinutes <= end; + minute += selectedCourt.slotDurationMinutes + ) { + const slotEnd = minute + selectedCourt.slotDurationMinutes; + + if (isTodayIso(booking.date) && minute <= timeToMinutes(getNowTime())) continue; + + const isBooked = courtBookings.some((b) => { + const bookingStart = timeToMinutes(b.startTime); + const bookingEnd = timeToMinutes(b.endTime); + return minute < bookingEnd && slotEnd > bookingStart; + }); + + if (!isBooked) { + times.push(minutesToTime(minute)); + } + } + } + + return times; + }, [bookings, booking.date, booking.id, dayOfWeek, selectedCourt]); + + const hasChanges = courtId !== booking.courtId || startTime !== booking.startTime; + + const handleConfirm = () => { + if (!hasChanges) return; + + const payload: Record = {}; + if (courtId !== booking.courtId) payload.courtId = courtId; + if (startTime !== booking.startTime) payload.startTime = startTime; + + rescheduleBooking(booking.id, payload); + onOpenChange(false); + }; + + const handleOpenChange = (newOpen: boolean) => { + if (newOpen) { + setCourtId(booking.courtId); + setStartTime(booking.startTime); + } + onOpenChange(newOpen); + }; + + return ( + + + + Reprogramar reserva + + Cambiá la cancha y/o el horario de la reserva para el mismo día. + + + +
+
+ Reserva {booking.bookingCode} — {booking.customerName} +
+ +
+

Cancha

+ +
+ +
+

Horario

+ +
+
+ + + + + + + +
+
+ ); +} diff --git a/apps/frontend/src/features/booking/components/booking-tools-dialog.tsx b/apps/frontend/src/features/booking/components/booking-tools-dialog.tsx index 587bdf8..48c4962 100644 --- a/apps/frontend/src/features/booking/components/booking-tools-dialog.tsx +++ b/apps/frontend/src/features/booking/components/booking-tools-dialog.tsx @@ -15,6 +15,7 @@ import { AlertTriangle, BadgeCheck, CalendarDays, + CalendarSync, CheckCircle2, Clock, MapPin, @@ -26,6 +27,7 @@ import { } from 'lucide-react'; import { useState } from 'react'; import { useBooking } from '../booking-provider'; +import { BookingRescheduleDialog } from './booking-reschedule-dialog'; function formatDate(date: string | undefined) { if (!date) return ''; @@ -72,6 +74,7 @@ export function BookingToolsDialog() { const isMobile = useIsMobile(); const booking = selectedSegment?.booking; const [confirmCancelOpen, setConfirmCancelOpen] = useState(false); + const [rescheduleOpen, setRescheduleOpen] = useState(false); const status = statusConfig[booking?.status ?? 'CONFIRMED'] ?? { label: booking?.status, @@ -165,10 +168,19 @@ export function BookingToolsDialog() { onCancel={() => setConfirmCancelOpen(true)} onReminder={sendWhatsappReminder} onNoShow={() => updateStatus('NOSHOW')} + onReschedule={() => setRescheduleOpen(true)} /> {cancelConfirmDialog} + + {booking && ( + + )} ); } @@ -268,6 +280,14 @@ export function BookingToolsDialog() { onClick={() => setConfirmCancelOpen(true)} /> + } + title="Reprogramar" + description="Cambiar la cancha y/o el horario de la reserva." + className="border-violet-500/40 bg-violet-500/10 text-lg text-violet-600 hover:bg-violet-500/15 hover:text-violet-800" + onClick={() => setRescheduleOpen(true)} + /> + } title="Enviar recordatorio" @@ -299,6 +319,14 @@ export function BookingToolsDialog() { {cancelConfirmDialog} + + {booking && ( + + )} ); } @@ -309,12 +337,14 @@ function MobileBookingToolsSheet({ onCancel, onReminder, onNoShow, + onReschedule, }: { status: { label: string | undefined; className: string }; onComplete: () => void; onCancel: () => void; onReminder: () => void; onNoShow: () => void; + onReschedule: () => void; }) { const { selectedSegment } = useBooking(); const booking = selectedSegment?.booking; @@ -395,6 +425,12 @@ function MobileBookingToolsSheet({ className="border-primary/45 bg-primary/12 text-primary" onClick={onComplete} /> + } + label="Reprogramar" + className="border-violet-500/45 bg-violet-500/12 text-violet-500" + onClick={onReschedule} + /> } label="Recordar" diff --git a/apps/frontend/src/lib/api-client.ts b/apps/frontend/src/lib/api-client.ts index 4e084c3..ddfffca 100644 --- a/apps/frontend/src/lib/api-client.ts +++ b/apps/frontend/src/lib/api-client.ts @@ -77,6 +77,7 @@ export const apiClient = { createRecurring: api.createRecurring, cancelRecurringGroup: api.cancelRecurringGroup, listRecurringGroups: api.listRecurringGroups, + reschedule: api.reschedule, updateRecurringGroup: api.updateRecurringGroup, updateStatus: api.updateStatus, }, diff --git a/apps/frontend/src/lib/api/index.ts b/apps/frontend/src/lib/api/index.ts index ddcb67f..8ea946e 100644 --- a/apps/frontend/src/lib/api/index.ts +++ b/apps/frontend/src/lib/api/index.ts @@ -18,6 +18,7 @@ export { createRecurring, cancelRecurringGroup, listRecurringGroups, + reschedule, updateRecurringGroup, updateStatus, } from './resources/bookings'; diff --git a/apps/frontend/src/lib/api/resources/bookings.ts b/apps/frontend/src/lib/api/resources/bookings.ts index 735d11c..09025ab 100644 --- a/apps/frontend/src/lib/api/resources/bookings.ts +++ b/apps/frontend/src/lib/api/resources/bookings.ts @@ -8,6 +8,7 @@ import type { PublicBooking, PublicBookingConfirmation, RecurringBookingGroup, + RescheduleAdminBookingInput, UpdateAdminBookingStatusInput, UpdateRecurringGroupInput, } from '@repo/api-contract'; @@ -101,3 +102,11 @@ export async function updateStatus(bookingId: string, payload: UpdateAdminBookin ); return response.data; } + +export async function reschedule(bookingId: string, payload: RescheduleAdminBookingInput) { + const response = await http.patch( + `/api/admin-bookings/${bookingId}/reschedule`, + payload + ); + return response.data; +} diff --git a/packages/api-contract/src/admin-booking.ts b/packages/api-contract/src/admin-booking.ts index a88f91b..68edf61 100644 --- a/packages/api-contract/src/admin-booking.ts +++ b/packages/api-contract/src/admin-booking.ts @@ -90,6 +90,19 @@ export const recurringBookingGroupSchema = z.object({ updatedAt: z.string().datetime(), }); +export const rescheduleAdminBookingSchema = z + .object({ + courtId: z.string().uuid('El courtId debe ser un UUID válido.').optional(), + startTime: z + .string() + .regex(TIME_REGEX, 'La hora debe tener formato HH:mm.') + .optional(), + }) + .refine( + (data) => data.courtId !== undefined || data.startTime !== undefined, + { message: 'Debe proporcionar al menos una cancha o un horario diferente.' } + ); + export const updateRecurringGroupSchema = z.object({ courtId: z.uuid('El courtId debe ser un UUID valido.').optional(), dayOfWeek: z @@ -125,5 +138,6 @@ export type CreateAdminBookingInput = z.infer; export type CreateRecurringBookingInput = z.infer; export type RecurringBookingGroup = z.infer; export type UpdateAdminBookingStatusInput = z.infer; +export type RescheduleAdminBookingInput = z.infer; export type UpdateRecurringGroupInput = z.infer; export type ListRecurringGroupsResponse = z.infer; diff --git a/packages/api-contract/src/court.ts b/packages/api-contract/src/court.ts index aee2374..3d15688 100644 --- a/packages/api-contract/src/court.ts +++ b/packages/api-contract/src/court.ts @@ -115,6 +115,7 @@ export const courtSchema = z.object({ id: z.uuid(), complexId: z.uuid(), name: z.string(), + isUnderMaintenance: z.boolean(), sportId: z.uuid(), sport: courtSportSchema, slotDurationMinutes: z.int().positive(), diff --git a/packages/api-contract/src/index.ts b/packages/api-contract/src/index.ts index 34af853..b7b9983 100644 --- a/packages/api-contract/src/index.ts +++ b/packages/api-contract/src/index.ts @@ -82,6 +82,7 @@ export { listRecurringGroupsResponseSchema, recurringBookingGroupSchema, recurringGroupStatusSchema, + rescheduleAdminBookingSchema, updateAdminBookingStatusSchema, updateRecurringGroupSchema, } from './admin-booking'; @@ -96,6 +97,7 @@ export type { ListRecurringGroupsResponse, RecurringBookingGroup, RecurringGroupStatus, + RescheduleAdminBookingInput, UpdateAdminBookingStatusInput, UpdateRecurringGroupInput, } from './admin-booking'; -- 2.49.1