From 41a217e8a91f3e2e48f805f4533f2a71014c3308 Mon Sep 17 00:00:00 2001 From: Jose Selesan Date: Wed, 6 May 2026 16:54:48 -0300 Subject: [PATCH 1/3] Added booking logs to keep track of cancelled bookings and no shows --- apps/backend/prisma/court.prisma | 18 ++++ .../migration.sql | 17 ++++ .../migration.sql | 13 +++ .../migration.sql | 9 ++ apps/backend/src/generated/prisma/browser.ts | 5 + apps/backend/src/generated/prisma/client.ts | 5 + apps/backend/src/generated/prisma/enums.ts | 3 +- .../src/generated/prisma/internal/class.ts | 18 +++- .../prisma/internal/prismaNamespace.ts | 95 ++++++++++++++++++- .../prisma/internal/prismaNamespaceBrowser.ts | 18 ++++ apps/backend/src/generated/prisma/models.ts | 1 + .../services/admin-booking.service.ts | 62 ++++++------ packages/api-contract/src/admin-booking.ts | 2 +- 13 files changed, 232 insertions(+), 34 deletions(-) create mode 100644 apps/backend/prisma/migrations/20260506190344_add_booking_logs/migration.sql create mode 100644 apps/backend/prisma/migrations/20260506193609_add_noshow_status/migration.sql create mode 100644 apps/backend/prisma/migrations/20260506194412_fix_booking_code_type/migration.sql diff --git a/apps/backend/prisma/court.prisma b/apps/backend/prisma/court.prisma index 75af280..0f23120 100644 --- a/apps/backend/prisma/court.prisma +++ b/apps/backend/prisma/court.prisma @@ -12,6 +12,7 @@ enum CourtBookingStatus { CONFIRMED CANCELLED COMPLETED + NOSHOW } model Sport { @@ -94,3 +95,20 @@ model CourtBooking { @@index([bookingDate]) @@map("court_bookings") } + +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) + changedAt DateTime @default(now()) @map("changed_at") + + @@map("court_booking_logs") + @@index([courtId, newStatus]) +} diff --git a/apps/backend/prisma/migrations/20260506190344_add_booking_logs/migration.sql b/apps/backend/prisma/migrations/20260506190344_add_booking_logs/migration.sql new file mode 100644 index 0000000..f1bfead --- /dev/null +++ b/apps/backend/prisma/migrations/20260506190344_add_booking_logs/migration.sql @@ -0,0 +1,17 @@ +-- CreateTable +CREATE TABLE "court_booking_logs" ( + "id" UUID NOT NULL, + "booking_code" UUID NOT NULL, + "court_id" UUID NOT NULL, + "booking_date" DATE NOT NULL, + "start_time" VARCHAR(5) NOT NULL, + "end_time" VARCHAR(5) NOT NULL, + "previous_status" "CourtBookingStatus" NOT NULL, + "new_status" "CourtBookingStatus" NOT NULL, + "changed_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "court_booking_logs_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE INDEX "court_booking_logs_court_id_new_status_idx" ON "court_booking_logs"("court_id", "new_status"); diff --git a/apps/backend/prisma/migrations/20260506193609_add_noshow_status/migration.sql b/apps/backend/prisma/migrations/20260506193609_add_noshow_status/migration.sql new file mode 100644 index 0000000..5ddc6fb --- /dev/null +++ b/apps/backend/prisma/migrations/20260506193609_add_noshow_status/migration.sql @@ -0,0 +1,13 @@ +/* + Warnings: + + - Added the required column `customer_name` to the `court_booking_logs` table without a default value. This is not possible if the table is not empty. + - Added the required column `customer_phone` to the `court_booking_logs` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterEnum +ALTER TYPE "CourtBookingStatus" ADD VALUE 'NOSHOW'; + +-- AlterTable +ALTER TABLE "court_booking_logs" ADD COLUMN "customer_name" VARCHAR(120) NOT NULL, +ADD COLUMN "customer_phone" VARCHAR(30) NOT NULL; diff --git a/apps/backend/prisma/migrations/20260506194412_fix_booking_code_type/migration.sql b/apps/backend/prisma/migrations/20260506194412_fix_booking_code_type/migration.sql new file mode 100644 index 0000000..2f71b8a --- /dev/null +++ b/apps/backend/prisma/migrations/20260506194412_fix_booking_code_type/migration.sql @@ -0,0 +1,9 @@ +/* + Warnings: + + - Changed the type of `booking_code` on the `court_booking_logs` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required. + +*/ +-- AlterTable +ALTER TABLE "court_booking_logs" DROP COLUMN "booking_code", +ADD COLUMN "booking_code" VARCHAR(8) NOT NULL; diff --git a/apps/backend/src/generated/prisma/browser.ts b/apps/backend/src/generated/prisma/browser.ts index f271e6a..3f8299c 100644 --- a/apps/backend/src/generated/prisma/browser.ts +++ b/apps/backend/src/generated/prisma/browser.ts @@ -77,6 +77,11 @@ export type CourtPriceRule = Prisma.CourtPriceRuleModel * */ export type CourtBooking = Prisma.CourtBookingModel +/** + * Model CourtBookingLog + * + */ +export type CourtBookingLog = Prisma.CourtBookingLogModel /** * Model OnboardingRequest * diff --git a/apps/backend/src/generated/prisma/client.ts b/apps/backend/src/generated/prisma/client.ts index 7794009..a6de1a1 100644 --- a/apps/backend/src/generated/prisma/client.ts +++ b/apps/backend/src/generated/prisma/client.ts @@ -101,6 +101,11 @@ export type CourtPriceRule = Prisma.CourtPriceRuleModel * */ export type CourtBooking = Prisma.CourtBookingModel +/** + * Model CourtBookingLog + * + */ +export type CourtBookingLog = Prisma.CourtBookingLogModel /** * Model OnboardingRequest * diff --git a/apps/backend/src/generated/prisma/enums.ts b/apps/backend/src/generated/prisma/enums.ts index e1a8e31..b4c3c21 100644 --- a/apps/backend/src/generated/prisma/enums.ts +++ b/apps/backend/src/generated/prisma/enums.ts @@ -33,7 +33,8 @@ export type DayOfWeek = (typeof DayOfWeek)[keyof typeof DayOfWeek] export const CourtBookingStatus = { CONFIRMED: 'CONFIRMED', CANCELLED: 'CANCELLED', - COMPLETED: 'COMPLETED' + COMPLETED: 'COMPLETED', + NOSHOW: 'NOSHOW' } as const export type CourtBookingStatus = (typeof CourtBookingStatus)[keyof typeof CourtBookingStatus] diff --git a/apps/backend/src/generated/prisma/internal/class.ts b/apps/backend/src/generated/prisma/internal/class.ts index fb4c6a8..dd8c51e 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 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 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\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}\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 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\n @@index([complexId])\n @@index([sportId])\n @@map(\"courts\")\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 status CourtBookingStatus @default(CONFIRMED)\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 @@unique([courtId, bookingDate, startTime])\n @@index([courtId, bookingDate])\n @@index([bookingDate])\n @@map(\"court_bookings\")\n}\n\nmodel OnboardingRequest {\n id String @id @db.Uuid\n fullName String @map(\"full_name\")\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 emailVerifiedAt DateTime? @map(\"email_verified_at\")\n completedAt DateTime? @map(\"completed_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(\"onboarding_requests\")\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 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 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\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\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 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\n @@index([complexId])\n @@index([sportId])\n @@map(\"courts\")\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 status CourtBookingStatus @default(CONFIRMED)\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 @@unique([courtId, bookingDate, startTime])\n @@index([courtId, bookingDate])\n @@index([bookingDate])\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 changedAt DateTime @default(now()) @map(\"changed_at\")\n\n @@index([courtId, newStatus])\n @@map(\"court_booking_logs\")\n}\n\nmodel OnboardingRequest {\n id String @id @db.Uuid\n fullName String @map(\"full_name\")\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 emailVerifiedAt DateTime? @map(\"email_verified_at\")\n completedAt DateTime? @map(\"completed_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(\"onboarding_requests\")\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\":\"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\":\"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\"}],\"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\":\"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\"}],\"dbName\":\"courts\"},\"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\":\"status\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\"},{\"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\"}],\"dbName\":\"court_bookings\"},\"OnboardingRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"full_name\"},{\"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\":\"emailVerifiedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"email_verified_at\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"completed_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"}],\"dbName\":\"onboarding_requests\"},\"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\":\"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\":\"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\"}],\"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\":\"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\"}],\"dbName\":\"courts\"},\"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\":\"status\",\"kind\":\"enum\",\"type\":\"CourtBookingStatus\"},{\"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\"}],\"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\":\"changedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"changed_at\"}],\"dbName\":\"court_booking_logs\"},\"OnboardingRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"full_name\"},{\"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\":\"emailVerifiedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"email_verified_at\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"completed_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"}],\"dbName\":\"onboarding_requests\"},\"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\",\"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\",\"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\",\"_avg\",\"_sum\",\"Court.groupBy\",\"Court.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\",\"OnboardingRequest.findUnique\",\"OnboardingRequest.findUniqueOrThrow\",\"OnboardingRequest.findFirst\",\"OnboardingRequest.findFirstOrThrow\",\"OnboardingRequest.findMany\",\"OnboardingRequest.createOne\",\"OnboardingRequest.createMany\",\"OnboardingRequest.createManyAndReturn\",\"OnboardingRequest.updateOne\",\"OnboardingRequest.updateMany\",\"OnboardingRequest.updateManyAndReturn\",\"OnboardingRequest.upsertOne\",\"OnboardingRequest.deleteOne\",\"OnboardingRequest.deleteMany\",\"OnboardingRequest.groupBy\",\"OnboardingRequest.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\",\"fullName\",\"emailVerifiedAt\",\"completedAt\",\"bookingCode\",\"courtId\",\"bookingDate\",\"startTime\",\"endTime\",\"customerName\",\"customerPhone\",\"CourtBookingStatus\",\"status\",\"DayOfWeek\",\"dayOfWeek\",\"isActive\",\"complexId\",\"sportId\",\"slotDurationMinutes\",\"basePrice\",\"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\",\"emailVerified\",\"image\",\"courtId_bookingDate_startTime\",\"complexId_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "sAaIAfABDgQAANkDACAFAADaAwAgBgAA2wMAIIoCAADXAwAwiwIAADcAEIwCAADXAwAwjgIBAJ8DACGmAgEAAAABpwIBAAAAAa4CQACiAwAhrwJAAKIDACHKAgEAnwMAIeECIADKAwAh4gIBANgDACEBAAAAAQAgDAMAAPEDACCKAgAA8wMAMIsCAAADABCMAgAA8wMAMKYCAQCfAwAhrgJAAKIDACGvAkAAogMAIcUCQACiAwAhyAIBAJ8DACHeAgEAnwMAId8CAQDYAwAh4AIBANgDACEDAwAA7gUAIN8CAADrBAAg4AIAAOsEACAMAwAA8QMAIIoCAADzAwAwiwIAAAMAEIwCAADzAwAwpgIBAAAAAa4CQACiAwAhrwJAAKIDACHFAkAAogMAIcgCAQCfAwAh3gIBAAAAAd8CAQDYAwAh4AIBANgDACEDAAAAAwAgAQAABAAwAgAABQAgEQMAAPEDACCKAgAA8gMAMIsCAAAHABCMAgAA8gMAMKYCAQCfAwAhrgJAAKIDACGvAkAAogMAIcgCAQCfAwAh1QIBAJ8DACHWAgEAnwMAIdcCAQDYAwAh2AIBANgDACHZAgEA2AMAIdoCQACxAwAh2wJAALEDACHcAgEA2AMAId0CAQDYAwAhCAMAAO4FACDXAgAA6wQAINgCAADrBAAg2QIAAOsEACDaAgAA6wQAINsCAADrBAAg3AIAAOsEACDdAgAA6wQAIBEDAADxAwAgigIAAPIDADCLAgAABwAQjAIAAPIDADCmAgEAAAABrgJAAKIDACGvAkAAogMAIcgCAQCfAwAh1QIBAJ8DACHWAgEAnwMAIdcCAQDYAwAh2AIBANgDACHZAgEA2AMAIdoCQACxAwAh2wJAALEDACHcAgEA2AMAId0CAQDYAwAhAwAAAAcAIAEAAAgAMAIAAAkAIAkDAADxAwAgCgAA5QMAIIoCAADvAwAwiwIAAAsAEIwCAADvAwAwrgJAAKIDACG_AgEArwMAIcgCAQCfAwAhygIAAPADygIiAgMAAO4FACAKAADnBQAgCgMAAPEDACAKAADlAwAgigIAAO8DADCLAgAACwAQjAIAAO8DADCuAkAAogMAIb8CAQCvAwAhyAIBAJ8DACHKAgAA8APKAiLkAgAA7gMAIAMAAAALACABAAAMADACAAANACAJBgAAowMAIIoCAACeAwAwiwIAAA8AEIwCAACeAwAwjQIBAJ8DACGOAgEAnwMAIY8CEACgAwAhkAIAAKEDACCRAkAAogMAIQEAAAAPACASCAAA7AMAIAkAANsDACALAADtAwAgDAAAywMAIIoCAADrAwAwiwIAABEAEIwCAADrAwAwpgIBAK8DACGuAkAAogMAIa8CQACiAwAhywIBAJ8DACHMAgEA2AMAIc0CAQDYAwAhzgIBANgDACHPAgEA2AMAIdACAQCfAwAh0QIBAJ8DACHSAgEA2AMAIQkIAADsBQAgCQAA5QUAIAsAAO0FACAMAACcBQAgzAIAAOsEACDNAgAA6wQAIM4CAADrBAAgzwIAAOsEACDSAgAA6wQAIBIIAADsAwAgCQAA2wMAIAsAAO0DACAMAADLAwAgigIAAOsDADCLAgAAEQAQjAIAAOsDADCmAgEAAAABrgJAAKIDACGvAkAAogMAIcsCAQCfAwAhzAIBANgDACHNAgEA2AMAIc4CAQDYAwAhzwIBANgDACHQAgEAAAAB0QIBAJ8DACHSAgEA2AMAIQMAAAARACABAAASADACAAATACABAAAAEQAgAwAAAAsAIAEAAAwAMAIAAA0AIA0KAADlAwAgigIAAOoDADCLAgAAFwAQjAIAAOoDADCmAgEArwMAIacCAQCfAwAhrgJAAKIDACGvAkAAogMAIb8CAQCvAwAhxAIBAJ8DACHFAkAAogMAIcYCQACxAwAhxwJAALEDACEDCgAA5wUAIMYCAADrBAAgxwIAAOsEACANCgAA5QMAIIoCAADqAwAwiwIAABcAEIwCAADqAwAwpgIBAAAAAacCAQCfAwAhrgJAAKIDACGvAkAAogMAIb8CAQCvAwAhxAIBAAAAAcUCQACiAwAhxgJAALEDACHHAkAAsQMAIQMAAAAXACABAAAYADACAAAZACAQCgAA5QMAIA0AAOYDACAPAADnAwAgEAAA6AMAIBEAAOkDACCKAgAA5AMAMIsCAAAbABCMAgAA5AMAMI4CAQCfAwAhpgIBAK8DACGuAkAAogMAIa8CQACiAwAhvwIBAK8DACHAAgEArwMAIcECAgCwAwAhwgIQAKADACEFCgAA5wUAIA0AAOgFACAPAADpBQAgEAAA6gUAIBEAAOsFACAQCgAA5QMAIA0AAOYDACAPAADnAwAgEAAA6AMAIBEAAOkDACCKAgAA5AMAMIsCAAAbABCMAgAA5AMAMI4CAQCfAwAhpgIBAAAAAa4CQACiAwAhrwJAAKIDACG_AgEArwMAIcACAQCvAwAhwQICALADACHCAhAAoAMAIQMAAAAbACABAAAcADACAAAdACADAAAAGwAgAQAAHAAwAgAAHQAgAQAAABsAIAoOAADfAwAgigIAAOIDADCLAgAAIQAQjAIAAOIDADCmAgEArwMAIa4CQACiAwAhtAIBAK8DACG2AgEAnwMAIbcCAQCfAwAhvQIAAOMDvQIiAQ4AAOYFACAKDgAA3wMAIIoCAADiAwAwiwIAACEAEIwCAADiAwAwpgIBAAAAAa4CQACiAwAhtAIBAK8DACG2AgEAnwMAIbcCAQCfAwAhvQIAAOMDvQIiAwAAACEAIAEAACIAMAIAACMAIA0OAADfAwAgigIAAOADADCLAgAAJQAQjAIAAOADADCPAhAAoAMAIaYCAQCvAwAhrgJAAKIDACGvAkAAogMAIbQCAQCvAwAhtgIBANgDACG3AgEA2AMAIb0CAADhA70CI74CIADKAwAhBA4AAOYFACC2AgAA6wQAILcCAADrBAAgvQIAAOsEACANDgAA3wMAIIoCAADgAwAwiwIAACUAEIwCAADgAwAwjwIQAKADACGmAgEAAAABrgJAAKIDACGvAkAAogMAIbQCAQCvAwAhtgIBANgDACG3AgEA2AMAIb0CAADhA70CI74CIADKAwAhAwAAACUAIAEAACYAMAIAACcAIA8OAADfAwAgigIAAN0DADCLAgAAKQAQjAIAAN0DADCmAgEArwMAIa4CQACiAwAhrwJAAKIDACGzAgEAnwMAIbQCAQCvAwAhtQJAAKIDACG2AgEAnwMAIbcCAQCfAwAhuAIBAJ8DACG5AgEAnwMAIbsCAADeA7sCIgEOAADmBQAgEA4AAN8DACCKAgAA3QMAMIsCAAApABCMAgAA3QMAMKYCAQAAAAGuAkAAogMAIa8CQACiAwAhswIBAAAAAbQCAQCvAwAhtQJAAKIDACG2AgEAnwMAIbcCAQCfAwAhuAIBAJ8DACG5AgEAnwMAIbsCAADeA7sCIuMCAADcAwAgAwAAACkAIAEAACoAMAIAACsAIAEAAAAhACABAAAAJQAgAQAAACkAIAEAAAALACABAAAAFwAgAQAAABsAIAEAAAADACABAAAABwAgAQAAAAsAIAEAAAABACAOBAAA2QMAIAUAANoDACAGAADbAwAgigIAANcDADCLAgAANwAQjAIAANcDADCOAgEAnwMAIaYCAQCfAwAhpwIBAJ8DACGuAkAAogMAIa8CQACiAwAhygIBAJ8DACHhAiAAygMAIeICAQDYAwAhBAQAAOMFACAFAADkBQAgBgAA5QUAIOICAADrBAAgAwAAADcAIAEAADgAMAIAAAEAIAMAAAA3ACABAAA4ADACAAABACADAAAANwAgAQAAOAAwAgAAAQAgCwQAAOAFACAFAADhBQAgBgAA4gUAII4CAQAAAAGmAgEAAAABpwIBAAAAAa4CQAAAAAGvAkAAAAABygIBAAAAAeECIAAAAAHiAgEAAAABARcAADwAIAiOAgEAAAABpgIBAAAAAacCAQAAAAGuAkAAAAABrwJAAAAAAcoCAQAAAAHhAiAAAAAB4gIBAAAAAQEXAAA-ADABFwAAPgAwCwQAALwFACAFAAC9BQAgBgAAvgUAII4CAQD5AwAhpgIBAPkDACGnAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHKAgEA-QMAIeECIAC0BAAh4gIBAIcEACECAAAAAQAgFwAAQQAgCI4CAQD5AwAhpgIBAPkDACGnAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHKAgEA-QMAIeECIAC0BAAh4gIBAIcEACECAAAANwAgFwAAQwAgAgAAADcAIBcAAEMAIAMAAAABACAeAAA8ACAfAABBACABAAAAAQAgAQAAADcAIAQHAAC5BQAgJAAAuwUAICUAALoFACDiAgAA6wQAIAuKAgAA1gMAMIsCAABKABCMAgAA1gMAMI4CAQCSAwAhpgIBAJIDACGnAgEAkgMAIa4CQACVAwAhrwJAAJUDACHKAgEAkgMAIeECIAC8AwAh4gIBALsDACEDAAAANwAgAQAASQAwIwAASgAgAwAAADcAIAEAADgAMAIAAAEAIAEAAAAFACABAAAABQAgAwAAAAMAIAEAAAQAMAIAAAUAIAMAAAADACABAAAEADACAAAFACADAAAAAwAgAQAABAAwAgAABQAgCQMAALgFACCmAgEAAAABrgJAAAAAAa8CQAAAAAHFAkAAAAAByAIBAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAQEXAABSACAIpgIBAAAAAa4CQAAAAAGvAkAAAAABxQJAAAAAAcgCAQAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAEBFwAAVAAwARcAAFQAMAkDAAC3BQAgpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhxQJAAPsDACHIAgEA-QMAId4CAQD5AwAh3wIBAIcEACHgAgEAhwQAIQIAAAAFACAXAABXACAIpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhxQJAAPsDACHIAgEA-QMAId4CAQD5AwAh3wIBAIcEACHgAgEAhwQAIQIAAAADACAXAABZACACAAAAAwAgFwAAWQAgAwAAAAUAIB4AAFIAIB8AAFcAIAEAAAAFACABAAAAAwAgBQcAALQFACAkAAC2BQAgJQAAtQUAIN8CAADrBAAg4AIAAOsEACALigIAANUDADCLAgAAYAAQjAIAANUDADCmAgEAkgMAIa4CQACVAwAhrwJAAJUDACHFAkAAlQMAIcgCAQCSAwAh3gIBAJIDACHfAgEAuwMAIeACAQC7AwAhAwAAAAMAIAEAAF8AMCMAAGAAIAMAAAADACABAAAEADACAAAFACABAAAACQAgAQAAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIA4DAACzBQAgpgIBAAAAAa4CQAAAAAGvAkAAAAAByAIBAAAAAdUCAQAAAAHWAgEAAAAB1wIBAAAAAdgCAQAAAAHZAgEAAAAB2gJAAAAAAdsCQAAAAAHcAgEAAAAB3QIBAAAAAQEXAABoACANpgIBAAAAAa4CQAAAAAGvAkAAAAAByAIBAAAAAdUCAQAAAAHWAgEAAAAB1wIBAAAAAdgCAQAAAAHZAgEAAAAB2gJAAAAAAdsCQAAAAAHcAgEAAAAB3QIBAAAAAQEXAABqADABFwAAagAwDgMAALIFACCmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHIAgEA-QMAIdUCAQD5AwAh1gIBAPkDACHXAgEAhwQAIdgCAQCHBAAh2QIBAIcEACHaAkAA0wQAIdsCQADTBAAh3AIBAIcEACHdAgEAhwQAIQIAAAAJACAXAABtACANpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhyAIBAPkDACHVAgEA-QMAIdYCAQD5AwAh1wIBAIcEACHYAgEAhwQAIdkCAQCHBAAh2gJAANMEACHbAkAA0wQAIdwCAQCHBAAh3QIBAIcEACECAAAABwAgFwAAbwAgAgAAAAcAIBcAAG8AIAMAAAAJACAeAABoACAfAABtACABAAAACQAgAQAAAAcAIAoHAACvBQAgJAAAsQUAICUAALAFACDXAgAA6wQAINgCAADrBAAg2QIAAOsEACDaAgAA6wQAINsCAADrBAAg3AIAAOsEACDdAgAA6wQAIBCKAgAA1AMAMIsCAAB2ABCMAgAA1AMAMKYCAQCSAwAhrgJAAJUDACGvAkAAlQMAIcgCAQCSAwAh1QIBAJIDACHWAgEAkgMAIdcCAQC7AwAh2AIBALsDACHZAgEAuwMAIdoCQACnAwAh2wJAAKcDACHcAgEAuwMAId0CAQC7AwAhAwAAAAcAIAEAAHUAMCMAAHYAIAMAAAAHACABAAAIADACAAAJACAJigIAANMDADCLAgAAfAAQjAIAANMDADCmAgEAAAABrgJAAKIDACGvAkAAogMAIcUCQACiAwAh0wIBAJ8DACHUAgEAnwMAIQEAAAB5ACABAAAAeQAgCYoCAADTAwAwiwIAAHwAEIwCAADTAwAwpgIBAJ8DACGuAkAAogMAIa8CQACiAwAhxQJAAKIDACHTAgEAnwMAIdQCAQCfAwAhAAMAAAB8ACABAAB9ADACAAB5ACADAAAAfAAgAQAAfQAwAgAAeQAgAwAAAHwAIAEAAH0AMAIAAHkAIAamAgEAAAABrgJAAAAAAa8CQAAAAAHFAkAAAAAB0wIBAAAAAdQCAQAAAAEBFwAAgQEAIAamAgEAAAABrgJAAAAAAa8CQAAAAAHFAkAAAAAB0wIBAAAAAdQCAQAAAAEBFwAAgwEAMAEXAACDAQAwBqYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcUCQAD7AwAh0wIBAPkDACHUAgEA-QMAIQIAAAB5ACAXAACGAQAgBqYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcUCQAD7AwAh0wIBAPkDACHUAgEA-QMAIQIAAAB8ACAXAACIAQAgAgAAAHwAIBcAAIgBACADAAAAeQAgHgAAgQEAIB8AAIYBACABAAAAeQAgAQAAAHwAIAMHAACsBQAgJAAArgUAICUAAK0FACAJigIAANIDADCLAgAAjwEAEIwCAADSAwAwpgIBAJIDACGuAkAAlQMAIa8CQACVAwAhxQJAAJUDACHTAgEAkgMAIdQCAQCSAwAhAwAAAHwAIAEAAI4BADAjAACPAQAgAwAAAHwAIAEAAH0AMAIAAHkAIAEAAAATACABAAAAEwAgAwAAABEAIAEAABIAMAIAABMAIAMAAAARACABAAASADACAAATACADAAAAEQAgAQAAEgAwAgAAEwAgDwgAAKsFACAJAADmBAAgCwAA5wQAIAwAAOgEACCmAgEAAAABrgJAAAAAAa8CQAAAAAHLAgEAAAABzAIBAAAAAc0CAQAAAAHOAgEAAAABzwIBAAAAAdACAQAAAAHRAgEAAAAB0gIBAAAAAQEXAACXAQAgC6YCAQAAAAGuAkAAAAABrwJAAAAAAcsCAQAAAAHMAgEAAAABzQIBAAAAAc4CAQAAAAHPAgEAAAAB0AIBAAAAAdECAQAAAAHSAgEAAAABARcAAJkBADABFwAAmQEAMAEAAAAPACAPCAAAqgUAIAkAAIkEACALAACKBAAgDAAAiwQAIKYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcsCAQD5AwAhzAIBAIcEACHNAgEAhwQAIc4CAQCHBAAhzwIBAIcEACHQAgEA-QMAIdECAQD5AwAh0gIBAIcEACECAAAAEwAgFwAAnQEAIAumAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHLAgEA-QMAIcwCAQCHBAAhzQIBAIcEACHOAgEAhwQAIc8CAQCHBAAh0AIBAPkDACHRAgEA-QMAIdICAQCHBAAhAgAAABEAIBcAAJ8BACACAAAAEQAgFwAAnwEAIAEAAAAPACADAAAAEwAgHgAAlwEAIB8AAJ0BACABAAAAEwAgAQAAABEAIAgHAACnBQAgJAAAqQUAICUAAKgFACDMAgAA6wQAIM0CAADrBAAgzgIAAOsEACDPAgAA6wQAINICAADrBAAgDooCAADRAwAwiwIAAKcBABCMAgAA0QMAMKYCAQClAwAhrgJAAJUDACGvAkAAlQMAIcsCAQCSAwAhzAIBALsDACHNAgEAuwMAIc4CAQC7AwAhzwIBALsDACHQAgEAkgMAIdECAQCSAwAh0gIBALsDACEDAAAAEQAgAQAApgEAMCMAAKcBACADAAAAEQAgAQAAEgAwAgAAEwAgAQAAAA0AIAEAAAANACADAAAACwAgAQAADAAwAgAADQAgAwAAAAsAIAEAAAwAMAIAAA0AIAMAAAALACABAAAMADACAAANACAGAwAA5AQAIAoAAKYFACCuAkAAAAABvwIBAAAAAcgCAQAAAAHKAgAAAMoCAgEXAACvAQAgBK4CQAAAAAG_AgEAAAAByAIBAAAAAcoCAAAAygICARcAALEBADABFwAAsQEAMAYDAADiBAAgCgAApQUAIK4CQAD7AwAhvwIBAPkDACHIAgEA-QMAIcoCAADgBMoCIgIAAAANACAXAAC0AQAgBK4CQAD7AwAhvwIBAPkDACHIAgEA-QMAIcoCAADgBMoCIgIAAAALACAXAAC2AQAgAgAAAAsAIBcAALYBACADAAAADQAgHgAArwEAIB8AALQBACABAAAADQAgAQAAAAsAIAMHAACiBQAgJAAApAUAICUAAKMFACAHigIAAM0DADCLAgAAvQEAEIwCAADNAwAwrgJAAJUDACG_AgEApQMAIcgCAQCSAwAhygIAAM4DygIiAwAAAAsAIAEAALwBADAjAAC9AQAgAwAAAAsAIAEAAAwAMAIAAA0AIAEAAAAZACABAAAAGQAgAwAAABcAIAEAABgAMAIAABkAIAMAAAAXACABAAAYADACAAAZACADAAAAFwAgAQAAGAAwAgAAGQAgCgoAAKEFACCmAgEAAAABpwIBAAAAAa4CQAAAAAGvAkAAAAABvwIBAAAAAcQCAQAAAAHFAkAAAAABxgJAAAAAAccCQAAAAAEBFwAAxQEAIAmmAgEAAAABpwIBAAAAAa4CQAAAAAGvAkAAAAABvwIBAAAAAcQCAQAAAAHFAkAAAAABxgJAAAAAAccCQAAAAAEBFwAAxwEAMAEXAADHAQAwCgoAAKAFACCmAgEA-QMAIacCAQD5AwAhrgJAAPsDACGvAkAA-wMAIb8CAQD5AwAhxAIBAPkDACHFAkAA-wMAIcYCQADTBAAhxwJAANMEACECAAAAGQAgFwAAygEAIAmmAgEA-QMAIacCAQD5AwAhrgJAAPsDACGvAkAA-wMAIb8CAQD5AwAhxAIBAPkDACHFAkAA-wMAIcYCQADTBAAhxwJAANMEACECAAAAFwAgFwAAzAEAIAIAAAAXACAXAADMAQAgAwAAABkAIB4AAMUBACAfAADKAQAgAQAAABkAIAEAAAAXACAFBwAAnQUAICQAAJ8FACAlAACeBQAgxgIAAOsEACDHAgAA6wQAIAyKAgAAzAMAMIsCAADTAQAQjAIAAMwDADCmAgEApQMAIacCAQCSAwAhrgJAAJUDACGvAkAAlQMAIb8CAQClAwAhxAIBAJIDACHFAkAAlQMAIcYCQACnAwAhxwJAAKcDACEDAAAAFwAgAQAA0gEAMCMAANMBACADAAAAFwAgAQAAGAAwAgAAGQAgCgwAAMsDACCKAgAAyQMAMIsCAADZAQAQjAIAAMkDADCOAgEAAAABpgIBAAAAAa4CQACiAwAhrwJAAKIDACG-AiAAygMAIcMCAQAAAAEBAAAA1gEAIAEAAADWAQAgCgwAAMsDACCKAgAAyQMAMIsCAADZAQAQjAIAAMkDADCOAgEAnwMAIaYCAQCvAwAhrgJAAKIDACGvAkAAogMAIb4CIADKAwAhwwIBAJ8DACEBDAAAnAUAIAMAAADZAQAgAQAA2gEAMAIAANYBACADAAAA2QEAIAEAANoBADACAADWAQAgAwAAANkBACABAADaAQAwAgAA1gEAIAcMAACbBQAgjgIBAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAb4CIAAAAAHDAgEAAAABARcAAN4BACAGjgIBAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAb4CIAAAAAHDAgEAAAABARcAAOABADABFwAA4AEAMAcMAACRBQAgjgIBAPkDACGmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACG-AiAAtAQAIcMCAQD5AwAhAgAAANYBACAXAADjAQAgBo4CAQD5AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhvgIgALQEACHDAgEA-QMAIQIAAADZAQAgFwAA5QEAIAIAAADZAQAgFwAA5QEAIAMAAADWAQAgHgAA3gEAIB8AAOMBACABAAAA1gEAIAEAAADZAQAgAwcAAI4FACAkAACQBQAgJQAAjwUAIAmKAgAAyAMAMIsCAADsAQAQjAIAAMgDADCOAgEAkgMAIaYCAQClAwAhrgJAAJUDACGvAkAAlQMAIb4CIAC8AwAhwwIBAJIDACEDAAAA2QEAIAEAAOsBADAjAADsAQAgAwAAANkBACABAADaAQAwAgAA1gEAIAEAAAAdACABAAAAHQAgAwAAABsAIAEAABwAMAIAAB0AIAMAAAAbACABAAAcADACAAAdACADAAAAGwAgAQAAHAAwAgAAHQAgDQoAAI0FACANAADFBAAgDwAAxgQAIBAAAMcEACARAADIBAAgjgIBAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAb8CAQAAAAHAAgEAAAABwQICAAAAAcICEAAAAAEBFwAA9AEAIAiOAgEAAAABpgIBAAAAAa4CQAAAAAGvAkAAAAABvwIBAAAAAcACAQAAAAHBAgIAAAABwgIQAAAAAQEXAAD2AQAwARcAAPYBADANCgAAjAUAIA0AAJgEACAPAACZBAAgEAAAmgQAIBEAAJsEACCOAgEA-QMAIaYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIb8CAQD5AwAhwAIBAPkDACHBAgIAlgQAIcICEAD6AwAhAgAAAB0AIBcAAPkBACAIjgIBAPkDACGmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACG_AgEA-QMAIcACAQD5AwAhwQICAJYEACHCAhAA-gMAIQIAAAAbACAXAAD7AQAgAgAAABsAIBcAAPsBACADAAAAHQAgHgAA9AEAIB8AAPkBACABAAAAHQAgAQAAABsAIAUHAACHBQAgJAAAigUAICUAAIkFACCmAQAAiAUAIKcBAACLBQAgC4oCAADHAwAwiwIAAIICABCMAgAAxwMAMI4CAQCSAwAhpgIBAKUDACGuAkAAlQMAIa8CQACVAwAhvwIBAKUDACHAAgEApQMAIcECAgCmAwAhwgIQAJMDACEDAAAAGwAgAQAAgQIAMCMAAIICACADAAAAGwAgAQAAHAAwAgAAHQAgAQAAACMAIAEAAAAjACADAAAAIQAgAQAAIgAwAgAAIwAgAwAAACEAIAEAACIAMAIAACMAIAMAAAAhACABAAAiADACAAAjACAHDgAAhgUAIKYCAQAAAAGuAkAAAAABtAIBAAAAAbYCAQAAAAG3AgEAAAABvQIAAAC9AgIBFwAAigIAIAamAgEAAAABrgJAAAAAAbQCAQAAAAG2AgEAAAABtwIBAAAAAb0CAAAAvQICARcAAIwCADABFwAAjAIAMAcOAACFBQAgpgIBAPkDACGuAkAA-wMAIbQCAQD5AwAhtgIBAPkDACG3AgEA-QMAIb0CAADBBL0CIgIAAAAjACAXAACPAgAgBqYCAQD5AwAhrgJAAPsDACG0AgEA-QMAIbYCAQD5AwAhtwIBAPkDACG9AgAAwQS9AiICAAAAIQAgFwAAkQIAIAIAAAAhACAXAACRAgAgAwAAACMAIB4AAIoCACAfAACPAgAgAQAAACMAIAEAAAAhACADBwAAggUAICQAAIQFACAlAACDBQAgCYoCAADDAwAwiwIAAJgCABCMAgAAwwMAMKYCAQClAwAhrgJAAJUDACG0AgEApQMAIbYCAQCSAwAhtwIBAJIDACG9AgAAxAO9AiIDAAAAIQAgAQAAlwIAMCMAAJgCACADAAAAIQAgAQAAIgAwAgAAIwAgAQAAACcAIAEAAAAnACADAAAAJQAgAQAAJgAwAgAAJwAgAwAAACUAIAEAACYAMAIAACcAIAMAAAAlACABAAAmADACAAAnACAKDgAAgQUAII8CEAAAAAGmAgEAAAABrgJAAAAAAa8CQAAAAAG0AgEAAAABtgIBAAAAAbcCAQAAAAG9AgAAAL0CA74CIAAAAAEBFwAAoAIAIAmPAhAAAAABpgIBAAAAAa4CQAAAAAGvAkAAAAABtAIBAAAAAbYCAQAAAAG3AgEAAAABvQIAAAC9AgO-AiAAAAABARcAAKICADABFwAAogIAMAoOAACABQAgjwIQAPoDACGmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACG0AgEA-QMAIbYCAQCHBAAhtwIBAIcEACG9AgAAswS9AiO-AiAAtAQAIQIAAAAnACAXAAClAgAgCY8CEAD6AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhtAIBAPkDACG2AgEAhwQAIbcCAQCHBAAhvQIAALMEvQIjvgIgALQEACECAAAAJQAgFwAApwIAIAIAAAAlACAXAACnAgAgAwAAACcAIB4AAKACACAfAAClAgAgAQAAACcAIAEAAAAlACAIBwAA-wQAICQAAP4EACAlAAD9BAAgpgEAAPwEACCnAQAA_wQAILYCAADrBAAgtwIAAOsEACC9AgAA6wQAIAyKAgAAuQMAMIsCAACuAgAQjAIAALkDADCPAhAAkwMAIaYCAQClAwAhrgJAAJUDACGvAkAAlQMAIbQCAQClAwAhtgIBALsDACG3AgEAuwMAIb0CAAC6A70CI74CIAC8AwAhAwAAACUAIAEAAK0CADAjAACuAgAgAwAAACUAIAEAACYAMAIAACcAIAEAAAArACABAAAAKwAgAwAAACkAIAEAACoAMAIAACsAIAMAAAApACABAAAqADACAAArACADAAAAKQAgAQAAKgAwAgAAKwAgDA4AAPoEACCmAgEAAAABrgJAAAAAAa8CQAAAAAGzAgEAAAABtAIBAAAAAbUCQAAAAAG2AgEAAAABtwIBAAAAAbgCAQAAAAG5AgEAAAABuwIAAAC7AgIBFwAAtgIAIAumAgEAAAABrgJAAAAAAa8CQAAAAAGzAgEAAAABtAIBAAAAAbUCQAAAAAG2AgEAAAABtwIBAAAAAbgCAQAAAAG5AgEAAAABuwIAAAC7AgIBFwAAuAIAMAEXAAC4AgAwDA4AAPkEACCmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACGzAgEA-QMAIbQCAQD5AwAhtQJAAPsDACG2AgEA-QMAIbcCAQD5AwAhuAIBAPkDACG5AgEA-QMAIbsCAACmBLsCIgIAAAArACAXAAC7AgAgC6YCAQD5AwAhrgJAAPsDACGvAkAA-wMAIbMCAQD5AwAhtAIBAPkDACG1AkAA-wMAIbYCAQD5AwAhtwIBAPkDACG4AgEA-QMAIbkCAQD5AwAhuwIAAKYEuwIiAgAAACkAIBcAAL0CACACAAAAKQAgFwAAvQIAIAMAAAArACAeAAC2AgAgHwAAuwIAIAEAAAArACABAAAAKQAgAwcAAPYEACAkAAD4BAAgJQAA9wQAIA6KAgAAtQMAMIsCAADEAgAQjAIAALUDADCmAgEApQMAIa4CQACVAwAhrwJAAJUDACGzAgEAkgMAIbQCAQClAwAhtQJAAJUDACG2AgEAkgMAIbcCAQCSAwAhuAIBAJIDACG5AgEAkgMAIbsCAAC2A7sCIgMAAAApACABAADDAgAwIwAAxAIAIAMAAAApACABAAAqADACAAArACAPigIAALQDADCLAgAAygIAEIwCAAC0AwAwpgIBAAAAAacCAQCfAwAhqAIBAJ8DACGpAkAAogMAIaoCAgCwAwAhqwJAAKIDACGsAgIAsAMAIa4CQACiAwAhrwJAAKIDACGwAgEAnwMAIbECQACxAwAhsgJAALEDACEBAAAAxwIAIAEAAADHAgAgD4oCAAC0AwAwiwIAAMoCABCMAgAAtAMAMKYCAQCvAwAhpwIBAJ8DACGoAgEAnwMAIakCQACiAwAhqgICALADACGrAkAAogMAIawCAgCwAwAhrgJAAKIDACGvAkAAogMAIbACAQCfAwAhsQJAALEDACGyAkAAsQMAIQKxAgAA6wQAILICAADrBAAgAwAAAMoCACABAADLAgAwAgAAxwIAIAMAAADKAgAgAQAAywIAMAIAAMcCACADAAAAygIAIAEAAMsCADACAADHAgAgDKYCAQAAAAGnAgEAAAABqAIBAAAAAakCQAAAAAGqAgIAAAABqwJAAAAAAawCAgAAAAGuAkAAAAABrwJAAAAAAbACAQAAAAGxAkAAAAABsgJAAAAAAQEXAADPAgAgDKYCAQAAAAGnAgEAAAABqAIBAAAAAakCQAAAAAGqAgIAAAABqwJAAAAAAawCAgAAAAGuAkAAAAABrwJAAAAAAbACAQAAAAGxAkAAAAABsgJAAAAAAQEXAADRAgAwARcAANECADAMpgIBAPkDACGnAgEA-QMAIagCAQD5AwAhqQJAAPsDACGqAgIAlgQAIasCQAD7AwAhrAICAJYEACGuAkAA-wMAIa8CQAD7AwAhsAIBAPkDACGxAkAA0wQAIbICQADTBAAhAgAAAMcCACAXAADUAgAgDKYCAQD5AwAhpwIBAPkDACGoAgEA-QMAIakCQAD7AwAhqgICAJYEACGrAkAA-wMAIawCAgCWBAAhrgJAAPsDACGvAkAA-wMAIbACAQD5AwAhsQJAANMEACGyAkAA0wQAIQIAAADKAgAgFwAA1gIAIAIAAADKAgAgFwAA1gIAIAMAAADHAgAgHgAAzwIAIB8AANQCACABAAAAxwIAIAEAAADKAgAgBwcAAPEEACAkAAD0BAAgJQAA8wQAIKYBAADyBAAgpwEAAPUEACCxAgAA6wQAILICAADrBAAgD4oCAACzAwAwiwIAAN0CABCMAgAAswMAMKYCAQClAwAhpwIBAJIDACGoAgEAkgMAIakCQACVAwAhqgICAKYDACGrAkAAlQMAIawCAgCmAwAhrgJAAJUDACGvAkAAlQMAIbACAQCSAwAhsQJAAKcDACGyAkAApwMAIQMAAADKAgAgAQAA3AIAMCMAAN0CACADAAAAygIAIAEAAMsCADACAADHAgAgDYoCAACuAwAwiwIAAOMCABCMAgAArgMAMKYCAQAAAAGnAgEAnwMAIagCAQCfAwAhqQJAAKIDACGqAgIAsAMAIasCQACiAwAhrAICALADACGtAkAAsQMAIa4CQACiAwAhrwJAAKIDACEBAAAA4AIAIAEAAADgAgAgDYoCAACuAwAwiwIAAOMCABCMAgAArgMAMKYCAQCvAwAhpwIBAJ8DACGoAgEAnwMAIakCQACiAwAhqgICALADACGrAkAAogMAIawCAgCwAwAhrQJAALEDACGuAkAAogMAIa8CQACiAwAhAa0CAADrBAAgAwAAAOMCACABAADkAgAwAgAA4AIAIAMAAADjAgAgAQAA5AIAMAIAAOACACADAAAA4wIAIAEAAOQCADACAADgAgAgCqYCAQAAAAGnAgEAAAABqAIBAAAAAakCQAAAAAGqAgIAAAABqwJAAAAAAawCAgAAAAGtAkAAAAABrgJAAAAAAa8CQAAAAAEBFwAA6AIAIAqmAgEAAAABpwIBAAAAAagCAQAAAAGpAkAAAAABqgICAAAAAasCQAAAAAGsAgIAAAABrQJAAAAAAa4CQAAAAAGvAkAAAAABARcAAOoCADABFwAA6gIAMAqmAgEA-QMAIacCAQD5AwAhqAIBAPkDACGpAkAA-wMAIaoCAgCWBAAhqwJAAPsDACGsAgIAlgQAIa0CQADTBAAhrgJAAPsDACGvAkAA-wMAIQIAAADgAgAgFwAA7QIAIAqmAgEA-QMAIacCAQD5AwAhqAIBAPkDACGpAkAA-wMAIaoCAgCWBAAhqwJAAPsDACGsAgIAlgQAIa0CQADTBAAhrgJAAPsDACGvAkAA-wMAIQIAAADjAgAgFwAA7wIAIAIAAADjAgAgFwAA7wIAIAMAAADgAgAgHgAA6AIAIB8AAO0CACABAAAA4AIAIAEAAADjAgAgBgcAAOwEACAkAADvBAAgJQAA7gQAIKYBAADtBAAgpwEAAPAEACCtAgAA6wQAIA2KAgAApAMAMIsCAAD2AgAQjAIAAKQDADCmAgEApQMAIacCAQCSAwAhqAIBAJIDACGpAkAAlQMAIaoCAgCmAwAhqwJAAJUDACGsAgIApgMAIa0CQACnAwAhrgJAAJUDACGvAkAAlQMAIQMAAADjAgAgAQAA9QIAMCMAAPYCACADAAAA4wIAIAEAAOQCADACAADgAgAgCQYAAKMDACCKAgAAngMAMIsCAAAPABCMAgAAngMAMI0CAQAAAAGOAgEAnwMAIY8CEACgAwAhkAIAAKEDACCRAkAAogMAIQEAAAD5AgAgAQAAAPkCACABBgAA6gQAIAMAAAAPACABAAD8AgAwAgAA-QIAIAMAAAAPACABAAD8AgAwAgAA-QIAIAMAAAAPACABAAD8AgAwAgAA-QIAIAYGAADpBAAgjQIBAAAAAY4CAQAAAAGPAhAAAAABkAKAAAAAAZECQAAAAAEBFwAAgAMAIAWNAgEAAAABjgIBAAAAAY8CEAAAAAGQAoAAAAABkQJAAAAAAQEXAACCAwAwARcAAIIDADAGBgAA_AMAII0CAQD5AwAhjgIBAPkDACGPAhAA-gMAIZACgAAAAAGRAkAA-wMAIQIAAAD5AgAgFwAAhQMAIAWNAgEA-QMAIY4CAQD5AwAhjwIQAPoDACGQAoAAAAABkQJAAPsDACECAAAADwAgFwAAhwMAIAIAAAAPACAXAACHAwAgAwAAAPkCACAeAACAAwAgHwAAhQMAIAEAAAD5AgAgAQAAAA8AIAUHAAD0AwAgJAAA9wMAICUAAPYDACCmAQAA9QMAIKcBAAD4AwAgCIoCAACRAwAwiwIAAI4DABCMAgAAkQMAMI0CAQCSAwAhjgIBAJIDACGPAhAAkwMAIZACAACUAwAgkQJAAJUDACEDAAAADwAgAQAAjQMAMCMAAI4DACADAAAADwAgAQAA_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_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-QMAIa4CQAD7AwAhrwJAAPsDACHLAgEA-QMAIcwCAQCHBAAhzQIBAIcEACHOAgEAhwQAIc8CAQCHBAAh0AIBAPkDACHRAgEA-QMAIQHqAgEAAAABDQkAAIkEACALAACKBAAgDAAAiwQAIKYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcsCAQD5AwAhzAIBAIcEACHNAgEAhwQAIc4CAQCHBAAhzwIBAIcEACHQAgEA-QMAIdECAQD5AwAhCx4AANYEADAfAADbBAAw5wIAANcEADDoAgAA2AQAMOkCAADZBAAg6gIAANoEADDrAgAA2gQAMOwCAADaBAAw7QIAANoEADDuAgAA3AQAMO8CAADdBAAwCx4AAMkEADAfAADOBAAw5wIAAMoEADDoAgAAywQAMOkCAADMBAAg6gIAAM0EADDrAgAAzQQAMOwCAADNBAAw7QIAAM0EADDuAgAAzwQAMO8CAADQBAAwCx4AAIwEADAfAACRBAAw5wIAAI0EADDoAgAAjgQAMOkCAACPBAAg6gIAAJAEADDrAgAAkAQAMOwCAACQBAAw7QIAAJAEADDuAgAAkgQAMO8CAACTBAAwCw0AAMUEACAPAADGBAAgEAAAxwQAIBEAAMgEACCOAgEAAAABpgIBAAAAAa4CQAAAAAGvAkAAAAABwAIBAAAAAcECAgAAAAHCAhAAAAABAgAAAB0AIB4AAMQEACADAAAAHQAgHgAAxAQAIB8AAJcEACABFwAArwYAMBAKAADlAwAgDQAA5gMAIA8AAOcDACAQAADoAwAgEQAA6QMAIIoCAADkAwAwiwIAABsAEIwCAADkAwAwjgIBAJ8DACGmAgEAAAABrgJAAKIDACGvAkAAogMAIb8CAQCvAwAhwAIBAK8DACHBAgIAsAMAIcICEACgAwAhAgAAAB0AIBcAAJcEACACAAAAlAQAIBcAAJUEACALigIAAJMEADCLAgAAlAQAEIwCAACTBAAwjgIBAJ8DACGmAgEArwMAIa4CQACiAwAhrwJAAKIDACG_AgEArwMAIcACAQCvAwAhwQICALADACHCAhAAoAMAIQuKAgAAkwQAMIsCAACUBAAQjAIAAJMEADCOAgEAnwMAIaYCAQCvAwAhrgJAAKIDACGvAkAAogMAIb8CAQCvAwAhwAIBAK8DACHBAgIAsAMAIcICEACgAwAhB44CAQD5AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhwAIBAPkDACHBAgIAlgQAIcICEAD6AwAhBeoCAgAAAAHwAgIAAAAB8QICAAAAAfICAgAAAAHzAgIAAAABCw0AAJgEACAPAACZBAAgEAAAmgQAIBEAAJsEACCOAgEA-QMAIaYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcACAQD5AwAhwQICAJYEACHCAhAA-gMAIQUeAACnBgAgHwAArQYAIOcCAACoBgAg6AIAAKwGACDtAgAA1gEAIAseAAC3BAAwHwAAvAQAMOcCAAC4BAAw6AIAALkEADDpAgAAugQAIOoCAAC7BAAw6wIAALsEADDsAgAAuwQAMO0CAAC7BAAw7gIAAL0EADDvAgAAvgQAMAseAACpBAAwHwAArgQAMOcCAACqBAAw6AIAAKsEADDpAgAArAQAIOoCAACtBAAw6wIAAK0EADDsAgAArQQAMO0CAACtBAAw7gIAAK8EADDvAgAAsAQAMAseAACcBAAwHwAAoQQAMOcCAACdBAAw6AIAAJ4EADDpAgAAnwQAIOoCAACgBAAw6wIAAKAEADDsAgAAoAQAMO0CAACgBAAw7gIAAKIEADDvAgAAowQAMAqmAgEAAAABrgJAAAAAAa8CQAAAAAGzAgEAAAABtQJAAAAAAbYCAQAAAAG3AgEAAAABuAIBAAAAAbkCAQAAAAG7AgAAALsCAgIAAAArACAeAACoBAAgAwAAACsAIB4AAKgEACAfAACnBAAgARcAAKsGADAQDgAA3wMAIIoCAADdAwAwiwIAACkAEIwCAADdAwAwpgIBAAAAAa4CQACiAwAhrwJAAKIDACGzAgEAAAABtAIBAK8DACG1AkAAogMAIbYCAQCfAwAhtwIBAJ8DACG4AgEAnwMAIbkCAQCfAwAhuwIAAN4DuwIi4wIAANwDACACAAAAKwAgFwAApwQAIAIAAACkBAAgFwAApQQAIA6KAgAAowQAMIsCAACkBAAQjAIAAKMEADCmAgEArwMAIa4CQACiAwAhrwJAAKIDACGzAgEAnwMAIbQCAQCvAwAhtQJAAKIDACG2AgEAnwMAIbcCAQCfAwAhuAIBAJ8DACG5AgEAnwMAIbsCAADeA7sCIg6KAgAAowQAMIsCAACkBAAQjAIAAKMEADCmAgEArwMAIa4CQACiAwAhrwJAAKIDACGzAgEAnwMAIbQCAQCvAwAhtQJAAKIDACG2AgEAnwMAIbcCAQCfAwAhuAIBAJ8DACG5AgEAnwMAIbsCAADeA7sCIgqmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACGzAgEA-QMAIbUCQAD7AwAhtgIBAPkDACG3AgEA-QMAIbgCAQD5AwAhuQIBAPkDACG7AgAApgS7AiIB6gIAAAC7AgIKpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhswIBAPkDACG1AkAA-wMAIbYCAQD5AwAhtwIBAPkDACG4AgEA-QMAIbkCAQD5AwAhuwIAAKYEuwIiCqYCAQAAAAGuAkAAAAABrwJAAAAAAbMCAQAAAAG1AkAAAAABtgIBAAAAAbcCAQAAAAG4AgEAAAABuQIBAAAAAbsCAAAAuwICCI8CEAAAAAGmAgEAAAABrgJAAAAAAa8CQAAAAAG2AgEAAAABtwIBAAAAAb0CAAAAvQIDvgIgAAAAAQIAAAAnACAeAAC2BAAgAwAAACcAIB4AALYEACAfAAC1BAAgARcAAKoGADANDgAA3wMAIIoCAADgAwAwiwIAACUAEIwCAADgAwAwjwIQAKADACGmAgEAAAABrgJAAKIDACGvAkAAogMAIbQCAQCvAwAhtgIBANgDACG3AgEA2AMAIb0CAADhA70CI74CIADKAwAhAgAAACcAIBcAALUEACACAAAAsQQAIBcAALIEACAMigIAALAEADCLAgAAsQQAEIwCAACwBAAwjwIQAKADACGmAgEArwMAIa4CQACiAwAhrwJAAKIDACG0AgEArwMAIbYCAQDYAwAhtwIBANgDACG9AgAA4QO9AiO-AiAAygMAIQyKAgAAsAQAMIsCAACxBAAQjAIAALAEADCPAhAAoAMAIaYCAQCvAwAhrgJAAKIDACGvAkAAogMAIbQCAQCvAwAhtgIBANgDACG3AgEA2AMAIb0CAADhA70CI74CIADKAwAhCI8CEAD6AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhtgIBAIcEACG3AgEAhwQAIb0CAACzBL0CI74CIAC0BAAhAeoCAAAAvQIDAeoCIAAAAAEIjwIQAPoDACGmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACG2AgEAhwQAIbcCAQCHBAAhvQIAALMEvQIjvgIgALQEACEIjwIQAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAbYCAQAAAAG3AgEAAAABvQIAAAC9AgO-AiAAAAABBaYCAQAAAAGuAkAAAAABtgIBAAAAAbcCAQAAAAG9AgAAAL0CAgIAAAAjACAeAADDBAAgAwAAACMAIB4AAMMEACAfAADCBAAgARcAAKkGADAKDgAA3wMAIIoCAADiAwAwiwIAACEAEIwCAADiAwAwpgIBAAAAAa4CQACiAwAhtAIBAK8DACG2AgEAnwMAIbcCAQCfAwAhvQIAAOMDvQIiAgAAACMAIBcAAMIEACACAAAAvwQAIBcAAMAEACAJigIAAL4EADCLAgAAvwQAEIwCAAC-BAAwpgIBAK8DACGuAkAAogMAIbQCAQCvAwAhtgIBAJ8DACG3AgEAnwMAIb0CAADjA70CIgmKAgAAvgQAMIsCAAC_BAAQjAIAAL4EADCmAgEArwMAIa4CQACiAwAhtAIBAK8DACG2AgEAnwMAIbcCAQCfAwAhvQIAAOMDvQIiBaYCAQD5AwAhrgJAAPsDACG2AgEA-QMAIbcCAQD5AwAhvQIAAMEEvQIiAeoCAAAAvQICBaYCAQD5AwAhrgJAAPsDACG2AgEA-QMAIbcCAQD5AwAhvQIAAMEEvQIiBaYCAQAAAAGuAkAAAAABtgIBAAAAAbcCAQAAAAG9AgAAAL0CAgsNAADFBAAgDwAAxgQAIBAAAMcEACARAADIBAAgjgIBAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAcACAQAAAAHBAgIAAAABwgIQAAAAAQMeAACnBgAg5wIAAKgGACDtAgAA1gEAIAQeAAC3BAAw5wIAALgEADDpAgAAugQAIO0CAAC7BAAwBB4AAKkEADDnAgAAqgQAMOkCAACsBAAg7QIAAK0EADAEHgAAnAQAMOcCAACdBAAw6QIAAJ8EACDtAgAAoAQAMAimAgEAAAABpwIBAAAAAa4CQAAAAAGvAkAAAAABxAIBAAAAAcUCQAAAAAHGAkAAAAABxwJAAAAAAQIAAAAZACAeAADVBAAgAwAAABkAIB4AANUEACAfAADUBAAgARcAAKYGADANCgAA5QMAIIoCAADqAwAwiwIAABcAEIwCAADqAwAwpgIBAAAAAacCAQCfAwAhrgJAAKIDACGvAkAAogMAIb8CAQCvAwAhxAIBAAAAAcUCQACiAwAhxgJAALEDACHHAkAAsQMAIQIAAAAZACAXAADUBAAgAgAAANEEACAXAADSBAAgDIoCAADQBAAwiwIAANEEABCMAgAA0AQAMKYCAQCvAwAhpwIBAJ8DACGuAkAAogMAIa8CQACiAwAhvwIBAK8DACHEAgEAnwMAIcUCQACiAwAhxgJAALEDACHHAkAAsQMAIQyKAgAA0AQAMIsCAADRBAAQjAIAANAEADCmAgEArwMAIacCAQCfAwAhrgJAAKIDACGvAkAAogMAIb8CAQCvAwAhxAIBAJ8DACHFAkAAogMAIcYCQACxAwAhxwJAALEDACEIpgIBAPkDACGnAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHEAgEA-QMAIcUCQAD7AwAhxgJAANMEACHHAkAA0wQAIQHqAkAAAAABCKYCAQD5AwAhpwIBAPkDACGuAkAA-wMAIa8CQAD7AwAhxAIBAPkDACHFAkAA-wMAIcYCQADTBAAhxwJAANMEACEIpgIBAAAAAacCAQAAAAGuAkAAAAABrwJAAAAAAcQCAQAAAAHFAkAAAAABxgJAAAAAAccCQAAAAAEEAwAA5AQAIK4CQAAAAAHIAgEAAAABygIAAADKAgICAAAADQAgHgAA4wQAIAMAAAANACAeAADjBAAgHwAA4QQAIAEXAAClBgAwCgMAAPEDACAKAADlAwAgigIAAO8DADCLAgAACwAQjAIAAO8DADCuAkAAogMAIb8CAQCvAwAhyAIBAJ8DACHKAgAA8APKAiLkAgAA7gMAIAIAAAANACAXAADhBAAgAgAAAN4EACAXAADfBAAgB4oCAADdBAAwiwIAAN4EABCMAgAA3QQAMK4CQACiAwAhvwIBAK8DACHIAgEAnwMAIcoCAADwA8oCIgeKAgAA3QQAMIsCAADeBAAQjAIAAN0EADCuAkAAogMAIb8CAQCvAwAhyAIBAJ8DACHKAgAA8APKAiIDrgJAAPsDACHIAgEA-QMAIcoCAADgBMoCIgHqAgAAAMoCAgQDAADiBAAgrgJAAPsDACHIAgEA-QMAIcoCAADgBMoCIgUeAACgBgAgHwAAowYAIOcCAAChBgAg6AIAAKIGACDtAgAAAQAgBAMAAOQEACCuAkAAAAAByAIBAAAAAcoCAAAAygICAx4AAKAGACDnAgAAoQYAIO0CAAABACANCQAA5gQAIAsAAOcEACAMAADoBAAgpgIBAAAAAa4CQAAAAAGvAkAAAAABywIBAAAAAcwCAQAAAAHNAgEAAAABzgIBAAAAAc8CAQAAAAHQAgEAAAAB0QIBAAAAAQQeAADWBAAw5wIAANcEADDpAgAA2QQAIO0CAADaBAAwBB4AAMkEADDnAgAAygQAMOkCAADMBAAg7QIAAM0EADAEHgAAjAQAMOcCAACNBAAw6QIAAI8EACDtAgAAkAQAMAQeAAD9AwAw5wIAAP4DADDpAgAAgAQAIO0CAACBBAAwAAAAAAAAAAAAAAAAAAAABR4AAJsGACAfAACeBgAg5wIAAJwGACDoAgAAnQYAIO0CAAAdACADHgAAmwYAIOcCAACcBgAg7QIAAB0AIAAAAAAABR4AAJYGACAfAACZBgAg5wIAAJcGACDoAgAAmAYAIO0CAAAdACADHgAAlgYAIOcCAACXBgAg7QIAAB0AIAAAAAUeAACRBgAgHwAAlAYAIOcCAACSBgAg6AIAAJMGACDtAgAAHQAgAx4AAJEGACDnAgAAkgYAIO0CAAAdACAAAAAAAAUeAACMBgAgHwAAjwYAIOcCAACNBgAg6AIAAI4GACDtAgAAEwAgAx4AAIwGACDnAgAAjQYAIO0CAAATACAAAAALHgAAkgUAMB8AAJYFADDnAgAAkwUAMOgCAACUBQAw6QIAAJUFACDqAgAAkAQAMOsCAACQBAAw7AIAAJAEADDtAgAAkAQAMO4CAACXBQAw7wIAAJMEADALCgAAjQUAIA8AAMYEACAQAADHBAAgEQAAyAQAII4CAQAAAAGmAgEAAAABrgJAAAAAAa8CQAAAAAG_AgEAAAABwQICAAAAAcICEAAAAAECAAAAHQAgHgAAmgUAIAMAAAAdACAeAACaBQAgHwAAmQUAIAEXAACLBgAwAgAAAB0AIBcAAJkFACACAAAAlAQAIBcAAJgFACAHjgIBAPkDACGmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACG_AgEA-QMAIcECAgCWBAAhwgIQAPoDACELCgAAjAUAIA8AAJkEACAQAACaBAAgEQAAmwQAII4CAQD5AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhvwIBAPkDACHBAgIAlgQAIcICEAD6AwAhCwoAAI0FACAPAADGBAAgEAAAxwQAIBEAAMgEACCOAgEAAAABpgIBAAAAAa4CQAAAAAGvAkAAAAABvwIBAAAAAcECAgAAAAHCAhAAAAABBB4AAJIFADDnAgAAkwUAMOkCAACVBQAg7QIAAJAEADAAAAAABR4AAIYGACAfAACJBgAg5wIAAIcGACDoAgAAiAYAIO0CAAATACADHgAAhgYAIOcCAACHBgAg7QIAABMAIAAAAAUeAACBBgAgHwAAhAYAIOcCAACCBgAg6AIAAIMGACDtAgAAEwAgAx4AAIEGACDnAgAAggYAIO0CAAATACAAAAAHHgAA_AUAIB8AAP8FACDnAgAA_QUAIOgCAAD-BQAg6wIAAA8AIOwCAAAPACDtAgAA-QIAIAMeAAD8BQAg5wIAAP0FACDtAgAA-QIAIAAAAAAAAAUeAAD3BQAgHwAA-gUAIOcCAAD4BQAg6AIAAPkFACDtAgAAAQAgAx4AAPcFACDnAgAA-AUAIO0CAAABACAAAAAFHgAA8gUAIB8AAPUFACDnAgAA8wUAIOgCAAD0BQAg7QIAAAEAIAMeAADyBQAg5wIAAPMFACDtAgAAAQAgAAAACx4AANQFADAfAADZBQAw5wIAANUFADDoAgAA1gUAMOkCAADXBQAg6gIAANgFADDrAgAA2AUAMOwCAADYBQAw7QIAANgFADDuAgAA2gUAMO8CAADbBQAwCx4AAMgFADAfAADNBQAw5wIAAMkFADDoAgAAygUAMOkCAADLBQAg6gIAAMwFADDrAgAAzAUAMOwCAADMBQAw7QIAAMwFADDuAgAAzgUAMO8CAADPBQAwCx4AAL8FADAfAADDBQAw5wIAAMAFADDoAgAAwQUAMOkCAADCBQAg6gIAANoEADDrAgAA2gQAMOwCAADaBAAw7QIAANoEADDuAgAAxAUAMO8CAADdBAAwBAoAAKYFACCuAkAAAAABvwIBAAAAAcoCAAAAygICAgAAAA0AIB4AAMcFACADAAAADQAgHgAAxwUAIB8AAMYFACABFwAA8QUAMAIAAAANACAXAADGBQAgAgAAAN4EACAXAADFBQAgA64CQAD7AwAhvwIBAPkDACHKAgAA4ATKAiIECgAApQUAIK4CQAD7AwAhvwIBAPkDACHKAgAA4ATKAiIECgAApgUAIK4CQAAAAAG_AgEAAAABygIAAADKAgIMpgIBAAAAAa4CQAAAAAGvAkAAAAAB1QIBAAAAAdYCAQAAAAHXAgEAAAAB2AIBAAAAAdkCAQAAAAHaAkAAAAAB2wJAAAAAAdwCAQAAAAHdAgEAAAABAgAAAAkAIB4AANMFACADAAAACQAgHgAA0wUAIB8AANIFACABFwAA8AUAMBEDAADxAwAgigIAAPIDADCLAgAABwAQjAIAAPIDADCmAgEAAAABrgJAAKIDACGvAkAAogMAIcgCAQCfAwAh1QIBAJ8DACHWAgEAnwMAIdcCAQDYAwAh2AIBANgDACHZAgEA2AMAIdoCQACxAwAh2wJAALEDACHcAgEA2AMAId0CAQDYAwAhAgAAAAkAIBcAANIFACACAAAA0AUAIBcAANEFACAQigIAAM8FADCLAgAA0AUAEIwCAADPBQAwpgIBAJ8DACGuAkAAogMAIa8CQACiAwAhyAIBAJ8DACHVAgEAnwMAIdYCAQCfAwAh1wIBANgDACHYAgEA2AMAIdkCAQDYAwAh2gJAALEDACHbAkAAsQMAIdwCAQDYAwAh3QIBANgDACEQigIAAM8FADCLAgAA0AUAEIwCAADPBQAwpgIBAJ8DACGuAkAAogMAIa8CQACiAwAhyAIBAJ8DACHVAgEAnwMAIdYCAQCfAwAh1wIBANgDACHYAgEA2AMAIdkCAQDYAwAh2gJAALEDACHbAkAAsQMAIdwCAQDYAwAh3QIBANgDACEMpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAh1QIBAPkDACHWAgEA-QMAIdcCAQCHBAAh2AIBAIcEACHZAgEAhwQAIdoCQADTBAAh2wJAANMEACHcAgEAhwQAId0CAQCHBAAhDKYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIdUCAQD5AwAh1gIBAPkDACHXAgEAhwQAIdgCAQCHBAAh2QIBAIcEACHaAkAA0wQAIdsCQADTBAAh3AIBAIcEACHdAgEAhwQAIQymAgEAAAABrgJAAAAAAa8CQAAAAAHVAgEAAAAB1gIBAAAAAdcCAQAAAAHYAgEAAAAB2QIBAAAAAdoCQAAAAAHbAkAAAAAB3AIBAAAAAd0CAQAAAAEHpgIBAAAAAa4CQAAAAAGvAkAAAAABxQJAAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAQIAAAAFACAeAADfBQAgAwAAAAUAIB4AAN8FACAfAADeBQAgARcAAO8FADAMAwAA8QMAIIoCAADzAwAwiwIAAAMAEIwCAADzAwAwpgIBAAAAAa4CQACiAwAhrwJAAKIDACHFAkAAogMAIcgCAQCfAwAh3gIBAAAAAd8CAQDYAwAh4AIBANgDACECAAAABQAgFwAA3gUAIAIAAADcBQAgFwAA3QUAIAuKAgAA2wUAMIsCAADcBQAQjAIAANsFADCmAgEAnwMAIa4CQACiAwAhrwJAAKIDACHFAkAAogMAIcgCAQCfAwAh3gIBAJ8DACHfAgEA2AMAIeACAQDYAwAhC4oCAADbBQAwiwIAANwFABCMAgAA2wUAMKYCAQCfAwAhrgJAAKIDACGvAkAAogMAIcUCQACiAwAhyAIBAJ8DACHeAgEAnwMAId8CAQDYAwAh4AIBANgDACEHpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhxQJAAPsDACHeAgEA-QMAId8CAQCHBAAh4AIBAIcEACEHpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhxQJAAPsDACHeAgEA-QMAId8CAQCHBAAh4AIBAIcEACEHpgIBAAAAAa4CQAAAAAGvAkAAAAABxQJAAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAQQeAADUBQAw5wIAANUFADDpAgAA1wUAIO0CAADYBQAwBB4AAMgFADDnAgAAyQUAMOkCAADLBQAg7QIAAMwFADAEHgAAvwUAMOcCAADABQAw6QIAAMIFACDtAgAA2gQAMAAAAAUKAADnBQAgDQAA6AUAIA8AAOkFACAQAADqBQAgEQAA6wUAIAkIAADsBQAgCQAA5QUAIAsAAO0FACAMAACcBQAgzAIAAOsEACDNAgAA6wQAIM4CAADrBAAgzwIAAOsEACDSAgAA6wQAIAEMAACcBQAgAAAAAQYAAOoEACAABAQAAOMFACAFAADkBQAgBgAA5QUAIOICAADrBAAgB6YCAQAAAAGuAkAAAAABrwJAAAAAAcUCQAAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAEMpgIBAAAAAa4CQAAAAAGvAkAAAAAB1QIBAAAAAdYCAQAAAAHXAgEAAAAB2AIBAAAAAdkCAQAAAAHaAkAAAAAB2wJAAAAAAdwCAQAAAAHdAgEAAAABA64CQAAAAAG_AgEAAAABygIAAADKAgIKBQAA4QUAIAYAAOIFACCOAgEAAAABpgIBAAAAAacCAQAAAAGuAkAAAAABrwJAAAAAAcoCAQAAAAHhAiAAAAAB4gIBAAAAAQIAAAABACAeAADyBQAgAwAAADcAIB4AAPIFACAfAAD2BQAgDAAAADcAIAUAAL0FACAGAAC-BQAgFwAA9gUAII4CAQD5AwAhpgIBAPkDACGnAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHKAgEA-QMAIeECIAC0BAAh4gIBAIcEACEKBQAAvQUAIAYAAL4FACCOAgEA-QMAIaYCAQD5AwAhpwIBAPkDACGuAkAA-wMAIa8CQAD7AwAhygIBAPkDACHhAiAAtAQAIeICAQCHBAAhCgQAAOAFACAGAADiBQAgjgIBAAAAAaYCAQAAAAGnAgEAAAABrgJAAAAAAa8CQAAAAAHKAgEAAAAB4QIgAAAAAeICAQAAAAECAAAAAQAgHgAA9wUAIAMAAAA3ACAeAAD3BQAgHwAA-wUAIAwAAAA3ACAEAAC8BQAgBgAAvgUAIBcAAPsFACCOAgEA-QMAIaYCAQD5AwAhpwIBAPkDACGuAkAA-wMAIa8CQAD7AwAhygIBAPkDACHhAiAAtAQAIeICAQCHBAAhCgQAALwFACAGAAC-BQAgjgIBAPkDACGmAgEA-QMAIacCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcoCAQD5AwAh4QIgALQEACHiAgEAhwQAIQWNAgEAAAABjgIBAAAAAY8CEAAAAAGQAoAAAAABkQJAAAAAAQIAAAD5AgAgHgAA_AUAIAMAAAAPACAeAAD8BQAgHwAAgAYAIAcAAAAPACAXAACABgAgjQIBAPkDACGOAgEA-QMAIY8CEAD6AwAhkAKAAAAAAZECQAD7AwAhBY0CAQD5AwAhjgIBAPkDACGPAhAA-gMAIZACgAAAAAGRAkAA-wMAIQ4IAACrBQAgCwAA5wQAIAwAAOgEACCmAgEAAAABrgJAAAAAAa8CQAAAAAHLAgEAAAABzAIBAAAAAc0CAQAAAAHOAgEAAAABzwIBAAAAAdACAQAAAAHRAgEAAAAB0gIBAAAAAQIAAAATACAeAACBBgAgAwAAABEAIB4AAIEGACAfAACFBgAgEAAAABEAIAgAAKoFACALAACKBAAgDAAAiwQAIBcAAIUGACCmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHLAgEA-QMAIcwCAQCHBAAhzQIBAIcEACHOAgEAhwQAIc8CAQCHBAAh0AIBAPkDACHRAgEA-QMAIdICAQCHBAAhDggAAKoFACALAACKBAAgDAAAiwQAIKYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcsCAQD5AwAhzAIBAIcEACHNAgEAhwQAIc4CAQCHBAAhzwIBAIcEACHQAgEA-QMAIdECAQD5AwAh0gIBAIcEACEOCAAAqwUAIAkAAOYEACAMAADoBAAgpgIBAAAAAa4CQAAAAAGvAkAAAAABywIBAAAAAcwCAQAAAAHNAgEAAAABzgIBAAAAAc8CAQAAAAHQAgEAAAAB0QIBAAAAAdICAQAAAAECAAAAEwAgHgAAhgYAIAMAAAARACAeAACGBgAgHwAAigYAIBAAAAARACAIAACqBQAgCQAAiQQAIAwAAIsEACAXAACKBgAgpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhywIBAPkDACHMAgEAhwQAIc0CAQCHBAAhzgIBAIcEACHPAgEAhwQAIdACAQD5AwAh0QIBAPkDACHSAgEAhwQAIQ4IAACqBQAgCQAAiQQAIAwAAIsEACCmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHLAgEA-QMAIcwCAQCHBAAhzQIBAIcEACHOAgEAhwQAIc8CAQCHBAAh0AIBAPkDACHRAgEA-QMAIdICAQCHBAAhB44CAQAAAAGmAgEAAAABrgJAAAAAAa8CQAAAAAG_AgEAAAABwQICAAAAAcICEAAAAAEOCAAAqwUAIAkAAOYEACALAADnBAAgpgIBAAAAAa4CQAAAAAGvAkAAAAABywIBAAAAAcwCAQAAAAHNAgEAAAABzgIBAAAAAc8CAQAAAAHQAgEAAAAB0QIBAAAAAdICAQAAAAECAAAAEwAgHgAAjAYAIAMAAAARACAeAACMBgAgHwAAkAYAIBAAAAARACAIAACqBQAgCQAAiQQAIAsAAIoEACAXAACQBgAgpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhywIBAPkDACHMAgEAhwQAIc0CAQCHBAAhzgIBAIcEACHPAgEAhwQAIdACAQD5AwAh0QIBAPkDACHSAgEAhwQAIQ4IAACqBQAgCQAAiQQAIAsAAIoEACCmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACHLAgEA-QMAIcwCAQCHBAAhzQIBAIcEACHOAgEAhwQAIc8CAQCHBAAh0AIBAPkDACHRAgEA-QMAIdICAQCHBAAhDAoAAI0FACANAADFBAAgEAAAxwQAIBEAAMgEACCOAgEAAAABpgIBAAAAAa4CQAAAAAGvAkAAAAABvwIBAAAAAcACAQAAAAHBAgIAAAABwgIQAAAAAQIAAAAdACAeAACRBgAgAwAAABsAIB4AAJEGACAfAACVBgAgDgAAABsAIAoAAIwFACANAACYBAAgEAAAmgQAIBEAAJsEACAXAACVBgAgjgIBAPkDACGmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACG_AgEA-QMAIcACAQD5AwAhwQICAJYEACHCAhAA-gMAIQwKAACMBQAgDQAAmAQAIBAAAJoEACARAACbBAAgjgIBAPkDACGmAgEA-QMAIa4CQAD7AwAhrwJAAPsDACG_AgEA-QMAIcACAQD5AwAhwQICAJYEACHCAhAA-gMAIQwKAACNBQAgDQAAxQQAIA8AAMYEACARAADIBAAgjgIBAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAb8CAQAAAAHAAgEAAAABwQICAAAAAcICEAAAAAECAAAAHQAgHgAAlgYAIAMAAAAbACAeAACWBgAgHwAAmgYAIA4AAAAbACAKAACMBQAgDQAAmAQAIA8AAJkEACARAACbBAAgFwAAmgYAII4CAQD5AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhvwIBAPkDACHAAgEA-QMAIcECAgCWBAAhwgIQAPoDACEMCgAAjAUAIA0AAJgEACAPAACZBAAgEQAAmwQAII4CAQD5AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhvwIBAPkDACHAAgEA-QMAIcECAgCWBAAhwgIQAPoDACEMCgAAjQUAIA0AAMUEACAPAADGBAAgEAAAxwQAII4CAQAAAAGmAgEAAAABrgJAAAAAAa8CQAAAAAG_AgEAAAABwAIBAAAAAcECAgAAAAHCAhAAAAABAgAAAB0AIB4AAJsGACADAAAAGwAgHgAAmwYAIB8AAJ8GACAOAAAAGwAgCgAAjAUAIA0AAJgEACAPAACZBAAgEAAAmgQAIBcAAJ8GACCOAgEA-QMAIaYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIb8CAQD5AwAhwAIBAPkDACHBAgIAlgQAIcICEAD6AwAhDAoAAIwFACANAACYBAAgDwAAmQQAIBAAAJoEACCOAgEA-QMAIaYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIb8CAQD5AwAhwAIBAPkDACHBAgIAlgQAIcICEAD6AwAhCgQAAOAFACAFAADhBQAgjgIBAAAAAaYCAQAAAAGnAgEAAAABrgJAAAAAAa8CQAAAAAHKAgEAAAAB4QIgAAAAAeICAQAAAAECAAAAAQAgHgAAoAYAIAMAAAA3ACAeAACgBgAgHwAApAYAIAwAAAA3ACAEAAC8BQAgBQAAvQUAIBcAAKQGACCOAgEA-QMAIaYCAQD5AwAhpwIBAPkDACGuAkAA-wMAIa8CQAD7AwAhygIBAPkDACHhAiAAtAQAIeICAQCHBAAhCgQAALwFACAFAAC9BQAgjgIBAPkDACGmAgEA-QMAIacCAQD5AwAhrgJAAPsDACGvAkAA-wMAIcoCAQD5AwAh4QIgALQEACHiAgEAhwQAIQOuAkAAAAAByAIBAAAAAcoCAAAAygICCKYCAQAAAAGnAgEAAAABrgJAAAAAAa8CQAAAAAHEAgEAAAABxQJAAAAAAcYCQAAAAAHHAkAAAAABBo4CAQAAAAGmAgEAAAABrgJAAAAAAa8CQAAAAAG-AiAAAAABwwIBAAAAAQIAAADWAQAgHgAApwYAIAWmAgEAAAABrgJAAAAAAbYCAQAAAAG3AgEAAAABvQIAAAC9AgIIjwIQAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAbYCAQAAAAG3AgEAAAABvQIAAAC9AgO-AiAAAAABCqYCAQAAAAGuAkAAAAABrwJAAAAAAbMCAQAAAAG1AkAAAAABtgIBAAAAAbcCAQAAAAG4AgEAAAABuQIBAAAAAbsCAAAAuwICAwAAANkBACAeAACnBgAgHwAArgYAIAgAAADZAQAgFwAArgYAII4CAQD5AwAhpgIBAPkDACGuAkAA-wMAIa8CQAD7AwAhvgIgALQEACHDAgEA-QMAIQaOAgEA-QMAIaYCAQD5AwAhrgJAAPsDACGvAkAA-wMAIb4CIAC0BAAhwwIBAPkDACEHjgIBAAAAAaYCAQAAAAGuAkAAAAABrwJAAAAAAcACAQAAAAHBAgIAAAABwgIQAAAAAQqmAgEAAAABrgJAAAAAAa8CQAAAAAHLAgEAAAABzAIBAAAAAc0CAQAAAAHOAgEAAAABzwIBAAAAAdACAQAAAAHRAgEAAAABBAQGAgUKAwYOBAcAEQEDAAEBAwABAgMAAQoABQUHABAIEAYJFgQLGggMHgkCBhQFBwAHAQYVAAEKAAUGBwAPCgAFDQAKDyQMECgNESwOAgcACwwfCQEMIAABDgAJAQ4ACQEOAAkDDy0AEC4AES8AAwkwAAsxAAwyAAMEMwAFNAAGNQAAAAADBwAWJAAXJQAYAAAAAwcAFiQAFyUAGAEDAAEBAwABAwcAHSQAHiUAHwAAAAMHAB0kAB4lAB8BAwABAQMAAQMHACQkACUlACYAAAADBwAkJAAlJQAmAAAAAwcALCQALSUALgAAAAMHACwkAC0lAC4BCJwBBgEIogEGAwcAMyQANCUANQAAAAMHADMkADQlADUCAwABCgAFAgMAAQoABQMHADokADslADwAAAADBwA6JAA7JQA8AQoABQEKAAUDBwBBJABCJQBDAAAAAwcAQSQAQiUAQwAAAwcASCQASSUASgAAAAMHAEgkAEklAEoCCgAFDQAKAgoABQ0ACgUHAE8kAFIlAFOmAQBQpwEAUQAAAAAABQcATyQAUiUAU6YBAFCnAQBRAQ4ACQEOAAkDBwBYJABZJQBaAAAAAwcAWCQAWSUAWgEOAAkBDgAJBQcAXyQAYiUAY6YBAGCnAQBhAAAAAAAFBwBfJABiJQBjpgEAYKcBAGEBDgAJAQ4ACQMHAGgkAGklAGoAAAADBwBoJABpJQBqAAAABQcAcCQAcyUAdKYBAHGnAQByAAAAAAAFBwBwJABzJQB0pgEAcacBAHIAAAAFBwB6JAB9JQB-pgEAe6cBAHwAAAAAAAUHAHokAH0lAH6mAQB7pwEAfAAABQcAgwEkAIYBJQCHAaYBAIQBpwEAhQEAAAAAAAUHAIMBJACGASUAhwGmAQCEAacBAIUBEgIBEzYBFDkBFToBFjsBGD0BGT8SGkATG0IBHEQSHUUUIEYBIUcBIkgSJksVJ0wZKE0CKU4CKk8CK1ACLFECLVMCLlUSL1YaMFgCMVoSMlsbM1wCNF0CNV4SNmEcN2IgOGMDOWQDOmUDO2YDPGcDPWkDPmsSP2whQG4DQXASQnEiQ3IDRHMDRXQSRncjR3gnSHooSXsoSn4oS38oTIABKE2CAShOhAEST4UBKVCHAShRiQESUooBKlOLAShUjAEoVY0BElaQAStXkQEvWJIBBVmTAQValAEFW5UBBVyWAQVdmAEFXpoBEl-bATBgngEFYaABEmKhATFjowEFZKQBBWWlARJmqAEyZ6kBNmiqAQRpqwEEaqwBBGutAQRsrgEEbbABBG6yARJvswE3cLUBBHG3ARJyuAE4c7kBBHS6AQR1uwESdr4BOXe_AT14wAEIecEBCHrCAQh7wwEIfMQBCH3GAQh-yAESf8kBPoABywEIgQHNARKCAc4BP4MBzwEIhAHQAQiFAdEBEoYB1AFAhwHVAUSIAdcBCokB2AEKigHbAQqLAdwBCowB3QEKjQHfAQqOAeEBEo8B4gFFkAHkAQqRAeYBEpIB5wFGkwHoAQqUAekBCpUB6gESlgHtAUeXAe4BS5gB7wEJmQHwAQmaAfEBCZsB8gEJnAHzAQmdAfUBCZ4B9wESnwH4AUygAfoBCaEB_AESogH9AU2jAf4BCaQB_wEJpQGAAhKoAYMCTqkBhAJUqgGFAgyrAYYCDKwBhwIMrQGIAgyuAYkCDK8BiwIMsAGNAhKxAY4CVbIBkAIMswGSAhK0AZMCVrUBlAIMtgGVAgy3AZYCErgBmQJXuQGaAlu6AZsCDbsBnAINvAGdAg29AZ4CDb4BnwINvwGhAg3AAaMCEsEBpAJcwgGmAg3DAagCEsQBqQJdxQGqAg3GAasCDccBrAISyAGvAl7JAbACZMoBsQIOywGyAg7MAbMCDs0BtAIOzgG1Ag7PAbcCDtABuQIS0QG6AmXSAbwCDtMBvgIS1AG_AmbVAcACDtYBwQIO1wHCAhLYAcUCZ9kBxgJr2gHIAmzbAckCbNwBzAJs3QHNAmzeAc4CbN8B0AJs4AHSAhLhAdMCbeIB1QJs4wHXAhLkAdgCbuUB2QJs5gHaAmznAdsCEugB3gJv6QHfAnXqAeECdusB4gJ27AHlAnbtAeYCdu4B5wJ27wHpAnbwAesCEvEB7AJ38gHuAnbzAfACEvQB8QJ49QHyAnb2AfMCdvcB9AIS-AH3Ann5AfgCf_oB-gIG-wH7Agb8Af0CBv0B_gIG_gH_Agb_AYEDBoACgwMSgQKEA4ABggKGAwaDAogDEoQCiQOBAYUCigMGhgKLAwaHAowDEogCjwOCAYkCkAOIAQ" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"sessions\",\"accounts\",\"complexes\",\"_count\",\"plan\",\"users\",\"complex\",\"invitations\",\"courts\",\"sport\",\"court\",\"availabilities\",\"priceRules\",\"bookings\",\"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\",\"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\",\"_avg\",\"_sum\",\"Court.groupBy\",\"Court.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\",\"OnboardingRequest.findUnique\",\"OnboardingRequest.findUniqueOrThrow\",\"OnboardingRequest.findFirst\",\"OnboardingRequest.findFirstOrThrow\",\"OnboardingRequest.findMany\",\"OnboardingRequest.createOne\",\"OnboardingRequest.createMany\",\"OnboardingRequest.createManyAndReturn\",\"OnboardingRequest.updateOne\",\"OnboardingRequest.updateMany\",\"OnboardingRequest.updateManyAndReturn\",\"OnboardingRequest.upsertOne\",\"OnboardingRequest.deleteOne\",\"OnboardingRequest.deleteMany\",\"OnboardingRequest.groupBy\",\"OnboardingRequest.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\",\"fullName\",\"emailVerifiedAt\",\"completedAt\",\"bookingCode\",\"courtId\",\"bookingDate\",\"startTime\",\"endTime\",\"CourtBookingStatus\",\"previousStatus\",\"newStatus\",\"customerName\",\"customerPhone\",\"changedAt\",\"status\",\"DayOfWeek\",\"dayOfWeek\",\"isActive\",\"complexId\",\"sportId\",\"slotDurationMinutes\",\"basePrice\",\"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\",\"emailVerified\",\"image\",\"courtId_bookingDate_startTime\",\"complexId_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "zgaQAYACDgQAAPUDACAFAAD2AwAgBgAA9wMAIJoCAADzAwAwmwIAADcAEJwCAADzAwAwngIBALgDACG2AgEAAAABtwIBAAAAAb4CQAC7AwAhvwJAALsDACHdAgEAuAMAIfQCIADmAwAh9QIBAPQDACEBAAAAAQAgDAMAAIwEACCaAgAAjgQAMJsCAAADABCcAgAAjgQAMLYCAQC4AwAhvgJAALsDACG_AkAAuwMAIdgCQAC7AwAh2wIBALgDACHxAgEAuAMAIfICAQD0AwAh8wIBAPQDACEDAwAAjAYAIPICAACGBQAg8wIAAIYFACAMAwAAjAQAIJoCAACOBAAwmwIAAAMAEJwCAACOBAAwtgIBAAAAAb4CQAC7AwAhvwJAALsDACHYAkAAuwMAIdsCAQC4AwAh8QIBAAAAAfICAQD0AwAh8wIBAPQDACEDAAAAAwAgAQAABAAwAgAABQAgEQMAAIwEACCaAgAAjQQAMJsCAAAHABCcAgAAjQQAMLYCAQC4AwAhvgJAALsDACG_AkAAuwMAIdsCAQC4AwAh6AIBALgDACHpAgEAuAMAIeoCAQD0AwAh6wIBAPQDACHsAgEA9AMAIe0CQADKAwAh7gJAAMoDACHvAgEA9AMAIfACAQD0AwAhCAMAAIwGACDqAgAAhgUAIOsCAACGBQAg7AIAAIYFACDtAgAAhgUAIO4CAACGBQAg7wIAAIYFACDwAgAAhgUAIBEDAACMBAAgmgIAAI0EADCbAgAABwAQnAIAAI0EADC2AgEAAAABvgJAALsDACG_AkAAuwMAIdsCAQC4AwAh6AIBALgDACHpAgEAuAMAIeoCAQD0AwAh6wIBAPQDACHsAgEA9AMAIe0CQADKAwAh7gJAAMoDACHvAgEA9AMAIfACAQD0AwAhAwAAAAcAIAEAAAgAMAIAAAkAIAkDAACMBAAgCgAAgAQAIJoCAACKBAAwmwIAAAsAEJwCAACKBAAwvgJAALsDACHSAgEAyAMAIdsCAQC4AwAh3QIAAIsE3QIiAgMAAIwGACAKAACFBgAgCgMAAIwEACAKAACABAAgmgIAAIoEADCbAgAACwAQnAIAAIoEADC-AkAAuwMAIdICAQDIAwAh2wIBALgDACHdAgAAiwTdAiL3AgAAiQQAIAMAAAALACABAAAMADACAAANACAJBgAAvAMAIJoCAAC3AwAwmwIAAA8AEJwCAAC3AwAwnQIBALgDACGeAgEAuAMAIZ8CEAC5AwAhoAIAALoDACChAkAAuwMAIQEAAAAPACASCAAAhwQAIAkAAPcDACALAACIBAAgDAAA5wMAIJoCAACGBAAwmwIAABEAEJwCAACGBAAwtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAh3gIBALgDACHfAgEA9AMAIeACAQD0AwAh4QIBAPQDACHiAgEA9AMAIeMCAQC4AwAh5AIBALgDACHlAgEA9AMAIQkIAACKBgAgCQAAgwYAIAsAAIsGACAMAAC6BQAg3wIAAIYFACDgAgAAhgUAIOECAACGBQAg4gIAAIYFACDlAgAAhgUAIBIIAACHBAAgCQAA9wMAIAsAAIgEACAMAADnAwAgmgIAAIYEADCbAgAAEQAQnAIAAIYEADC2AgEAAAABvgJAALsDACG_AkAAuwMAId4CAQC4AwAh3wIBAPQDACHgAgEA9AMAIeECAQD0AwAh4gIBAPQDACHjAgEAAAAB5AIBALgDACHlAgEA9AMAIQMAAAARACABAAASADACAAATACABAAAAEQAgAwAAAAsAIAEAAAwAMAIAAA0AIA0KAACABAAgmgIAAIUEADCbAgAAFwAQnAIAAIUEADC2AgEAyAMAIbcCAQC4AwAhvgJAALsDACG_AkAAuwMAIdICAQDIAwAh1wIBALgDACHYAkAAuwMAIdkCQADKAwAh2gJAAMoDACEDCgAAhQYAINkCAACGBQAg2gIAAIYFACANCgAAgAQAIJoCAACFBAAwmwIAABcAEJwCAACFBAAwtgIBAAAAAbcCAQC4AwAhvgJAALsDACG_AkAAuwMAIdICAQDIAwAh1wIBAAAAAdgCQAC7AwAh2QJAAMoDACHaAkAAygMAIQMAAAAXACABAAAYADACAAAZACAQCgAAgAQAIA0AAIEEACAPAACCBAAgEAAAgwQAIBEAAIQEACCaAgAA_wMAMJsCAAAbABCcAgAA_wMAMJ4CAQC4AwAhtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAh0gIBAMgDACHTAgEAyAMAIdQCAgDJAwAh1QIQALkDACEFCgAAhQYAIA0AAIYGACAPAACHBgAgEAAAiAYAIBEAAIkGACAQCgAAgAQAIA0AAIEEACAPAACCBAAgEAAAgwQAIBEAAIQEACCaAgAA_wMAMJsCAAAbABCcAgAA_wMAMJ4CAQC4AwAhtgIBAAAAAb4CQAC7AwAhvwJAALsDACHSAgEAyAMAIdMCAQDIAwAh1AICAMkDACHVAhAAuQMAIQMAAAAbACABAAAcADACAAAdACADAAAAGwAgAQAAHAAwAgAAHQAgAQAAABsAIAoOAAD6AwAgmgIAAP0DADCbAgAAIQAQnAIAAP0DADC2AgEAyAMAIb4CQAC7AwAhxAIBAMgDACHGAgEAuAMAIccCAQC4AwAh0AIAAP4D0AIiAQ4AAIQGACAKDgAA-gMAIJoCAAD9AwAwmwIAACEAEJwCAAD9AwAwtgIBAAAAAb4CQAC7AwAhxAIBAMgDACHGAgEAuAMAIccCAQC4AwAh0AIAAP4D0AIiAwAAACEAIAEAACIAMAIAACMAIA0OAAD6AwAgmgIAAPsDADCbAgAAJQAQnAIAAPsDADCfAhAAuQMAIbYCAQDIAwAhvgJAALsDACG_AkAAuwMAIcQCAQDIAwAhxgIBAPQDACHHAgEA9AMAIdACAAD8A9ACI9ECIADmAwAhBA4AAIQGACDGAgAAhgUAIMcCAACGBQAg0AIAAIYFACANDgAA-gMAIJoCAAD7AwAwmwIAACUAEJwCAAD7AwAwnwIQALkDACG2AgEAAAABvgJAALsDACG_AkAAuwMAIcQCAQDIAwAhxgIBAPQDACHHAgEA9AMAIdACAAD8A9ACI9ECIADmAwAhAwAAACUAIAEAACYAMAIAACcAIA8OAAD6AwAgmgIAAPkDADCbAgAAKQAQnAIAAPkDADC2AgEAyAMAIb4CQAC7AwAhvwJAALsDACHDAgEAuAMAIcQCAQDIAwAhxQJAALsDACHGAgEAuAMAIccCAQC4AwAhywIBALgDACHMAgEAuAMAIc4CAADTA8kCIgEOAACEBgAgEA4AAPoDACCaAgAA-QMAMJsCAAApABCcAgAA-QMAMLYCAQAAAAG-AkAAuwMAIb8CQAC7AwAhwwIBAAAAAcQCAQDIAwAhxQJAALsDACHGAgEAuAMAIccCAQC4AwAhywIBALgDACHMAgEAuAMAIc4CAADTA8kCIvYCAAD4AwAgAwAAACkAIAEAACoAMAIAACsAIAEAAAAhACABAAAAJQAgAQAAACkAIAEAAAALACABAAAAFwAgAQAAABsAIAEAAAADACABAAAABwAgAQAAAAsAIAEAAAABACAOBAAA9QMAIAUAAPYDACAGAAD3AwAgmgIAAPMDADCbAgAANwAQnAIAAPMDADCeAgEAuAMAIbYCAQC4AwAhtwIBALgDACG-AkAAuwMAIb8CQAC7AwAh3QIBALgDACH0AiAA5gMAIfUCAQD0AwAhBAQAAIEGACAFAACCBgAgBgAAgwYAIPUCAACGBQAgAwAAADcAIAEAADgAMAIAAAEAIAMAAAA3ACABAAA4ADACAAABACADAAAANwAgAQAAOAAwAgAAAQAgCwQAAP4FACAFAAD_BQAgBgAAgAYAIJ4CAQAAAAG2AgEAAAABtwIBAAAAAb4CQAAAAAG_AkAAAAAB3QIBAAAAAfQCIAAAAAH1AgEAAAABARcAADwAIAieAgEAAAABtgIBAAAAAbcCAQAAAAG-AkAAAAABvwJAAAAAAd0CAQAAAAH0AiAAAAAB9QIBAAAAAQEXAAA-ADABFwAAPgAwCwQAANoFACAFAADbBQAgBgAA3AUAIJ4CAQCUBAAhtgIBAJQEACG3AgEAlAQAIb4CQACWBAAhvwJAAJYEACHdAgEAlAQAIfQCIADPBAAh9QIBAKIEACECAAAAAQAgFwAAQQAgCJ4CAQCUBAAhtgIBAJQEACG3AgEAlAQAIb4CQACWBAAhvwJAAJYEACHdAgEAlAQAIfQCIADPBAAh9QIBAKIEACECAAAANwAgFwAAQwAgAgAAADcAIBcAAEMAIAMAAAABACAeAAA8ACAfAABBACABAAAAAQAgAQAAADcAIAQHAADXBQAgJAAA2QUAICUAANgFACD1AgAAhgUAIAuaAgAA8gMAMJsCAABKABCcAgAA8gMAMJ4CAQCrAwAhtgIBAKsDACG3AgEAqwMAIb4CQACuAwAhvwJAAK4DACHdAgEAqwMAIfQCIADYAwAh9QIBANcDACEDAAAANwAgAQAASQAwIwAASgAgAwAAADcAIAEAADgAMAIAAAEAIAEAAAAFACABAAAABQAgAwAAAAMAIAEAAAQAMAIAAAUAIAMAAAADACABAAAEADACAAAFACADAAAAAwAgAQAABAAwAgAABQAgCQMAANYFACC2AgEAAAABvgJAAAAAAb8CQAAAAAHYAkAAAAAB2wIBAAAAAfECAQAAAAHyAgEAAAAB8wIBAAAAAQEXAABSACAItgIBAAAAAb4CQAAAAAG_AkAAAAAB2AJAAAAAAdsCAQAAAAHxAgEAAAAB8gIBAAAAAfMCAQAAAAEBFwAAVAAwARcAAFQAMAkDAADVBQAgtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh2AJAAJYEACHbAgEAlAQAIfECAQCUBAAh8gIBAKIEACHzAgEAogQAIQIAAAAFACAXAABXACAItgIBAJQEACG-AkAAlgQAIb8CQACWBAAh2AJAAJYEACHbAgEAlAQAIfECAQCUBAAh8gIBAKIEACHzAgEAogQAIQIAAAADACAXAABZACACAAAAAwAgFwAAWQAgAwAAAAUAIB4AAFIAIB8AAFcAIAEAAAAFACABAAAAAwAgBQcAANIFACAkAADUBQAgJQAA0wUAIPICAACGBQAg8wIAAIYFACALmgIAAPEDADCbAgAAYAAQnAIAAPEDADC2AgEAqwMAIb4CQACuAwAhvwJAAK4DACHYAkAArgMAIdsCAQCrAwAh8QIBAKsDACHyAgEA1wMAIfMCAQDXAwAhAwAAAAMAIAEAAF8AMCMAAGAAIAMAAAADACABAAAEADACAAAFACABAAAACQAgAQAAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIA4DAADRBQAgtgIBAAAAAb4CQAAAAAG_AkAAAAAB2wIBAAAAAegCAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAgEAAAAB7QJAAAAAAe4CQAAAAAHvAgEAAAAB8AIBAAAAAQEXAABoACANtgIBAAAAAb4CQAAAAAG_AkAAAAAB2wIBAAAAAegCAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAgEAAAAB7QJAAAAAAe4CQAAAAAHvAgEAAAAB8AIBAAAAAQEXAABqADABFwAAagAwDgMAANAFACC2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHbAgEAlAQAIegCAQCUBAAh6QIBAJQEACHqAgEAogQAIesCAQCiBAAh7AIBAKIEACHtAkAA7gQAIe4CQADuBAAh7wIBAKIEACHwAgEAogQAIQIAAAAJACAXAABtACANtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh2wIBAJQEACHoAgEAlAQAIekCAQCUBAAh6gIBAKIEACHrAgEAogQAIewCAQCiBAAh7QJAAO4EACHuAkAA7gQAIe8CAQCiBAAh8AIBAKIEACECAAAABwAgFwAAbwAgAgAAAAcAIBcAAG8AIAMAAAAJACAeAABoACAfAABtACABAAAACQAgAQAAAAcAIAoHAADNBQAgJAAAzwUAICUAAM4FACDqAgAAhgUAIOsCAACGBQAg7AIAAIYFACDtAgAAhgUAIO4CAACGBQAg7wIAAIYFACDwAgAAhgUAIBCaAgAA8AMAMJsCAAB2ABCcAgAA8AMAMLYCAQCrAwAhvgJAAK4DACG_AkAArgMAIdsCAQCrAwAh6AIBAKsDACHpAgEAqwMAIeoCAQDXAwAh6wIBANcDACHsAgEA1wMAIe0CQADAAwAh7gJAAMADACHvAgEA1wMAIfACAQDXAwAhAwAAAAcAIAEAAHUAMCMAAHYAIAMAAAAHACABAAAIADACAAAJACAJmgIAAO8DADCbAgAAfAAQnAIAAO8DADC2AgEAAAABvgJAALsDACG_AkAAuwMAIdgCQAC7AwAh5gIBALgDACHnAgEAuAMAIQEAAAB5ACABAAAAeQAgCZoCAADvAwAwmwIAAHwAEJwCAADvAwAwtgIBALgDACG-AkAAuwMAIb8CQAC7AwAh2AJAALsDACHmAgEAuAMAIecCAQC4AwAhAAMAAAB8ACABAAB9ADACAAB5ACADAAAAfAAgAQAAfQAwAgAAeQAgAwAAAHwAIAEAAH0AMAIAAHkAIAa2AgEAAAABvgJAAAAAAb8CQAAAAAHYAkAAAAAB5gIBAAAAAecCAQAAAAEBFwAAgQEAIAa2AgEAAAABvgJAAAAAAb8CQAAAAAHYAkAAAAAB5gIBAAAAAecCAQAAAAEBFwAAgwEAMAEXAACDAQAwBrYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdgCQACWBAAh5gIBAJQEACHnAgEAlAQAIQIAAAB5ACAXAACGAQAgBrYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdgCQACWBAAh5gIBAJQEACHnAgEAlAQAIQIAAAB8ACAXAACIAQAgAgAAAHwAIBcAAIgBACADAAAAeQAgHgAAgQEAIB8AAIYBACABAAAAeQAgAQAAAHwAIAMHAADKBQAgJAAAzAUAICUAAMsFACAJmgIAAO4DADCbAgAAjwEAEJwCAADuAwAwtgIBAKsDACG-AkAArgMAIb8CQACuAwAh2AJAAK4DACHmAgEAqwMAIecCAQCrAwAhAwAAAHwAIAEAAI4BADAjAACPAQAgAwAAAHwAIAEAAH0AMAIAAHkAIAEAAAATACABAAAAEwAgAwAAABEAIAEAABIAMAIAABMAIAMAAAARACABAAASADACAAATACADAAAAEQAgAQAAEgAwAgAAEwAgDwgAAMkFACAJAACBBQAgCwAAggUAIAwAAIMFACC2AgEAAAABvgJAAAAAAb8CQAAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAgEAAAAB4gIBAAAAAeMCAQAAAAHkAgEAAAAB5QIBAAAAAQEXAACXAQAgC7YCAQAAAAG-AkAAAAABvwJAAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAeECAQAAAAHiAgEAAAAB4wIBAAAAAeQCAQAAAAHlAgEAAAABARcAAJkBADABFwAAmQEAMAEAAAAPACAPCAAAyAUAIAkAAKQEACALAAClBAAgDAAApgQAILYCAQCUBAAhvgJAAJYEACG_AkAAlgQAId4CAQCUBAAh3wIBAKIEACHgAgEAogQAIeECAQCiBAAh4gIBAKIEACHjAgEAlAQAIeQCAQCUBAAh5QIBAKIEACECAAAAEwAgFwAAnQEAIAu2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHeAgEAlAQAId8CAQCiBAAh4AIBAKIEACHhAgEAogQAIeICAQCiBAAh4wIBAJQEACHkAgEAlAQAIeUCAQCiBAAhAgAAABEAIBcAAJ8BACACAAAAEQAgFwAAnwEAIAEAAAAPACADAAAAEwAgHgAAlwEAIB8AAJ0BACABAAAAEwAgAQAAABEAIAgHAADFBQAgJAAAxwUAICUAAMYFACDfAgAAhgUAIOACAACGBQAg4QIAAIYFACDiAgAAhgUAIOUCAACGBQAgDpoCAADtAwAwmwIAAKcBABCcAgAA7QMAMLYCAQC-AwAhvgJAAK4DACG_AkAArgMAId4CAQCrAwAh3wIBANcDACHgAgEA1wMAIeECAQDXAwAh4gIBANcDACHjAgEAqwMAIeQCAQCrAwAh5QIBANcDACEDAAAAEQAgAQAApgEAMCMAAKcBACADAAAAEQAgAQAAEgAwAgAAEwAgAQAAAA0AIAEAAAANACADAAAACwAgAQAADAAwAgAADQAgAwAAAAsAIAEAAAwAMAIAAA0AIAMAAAALACABAAAMADACAAANACAGAwAA_wQAIAoAAMQFACC-AkAAAAAB0gIBAAAAAdsCAQAAAAHdAgAAAN0CAgEXAACvAQAgBL4CQAAAAAHSAgEAAAAB2wIBAAAAAd0CAAAA3QICARcAALEBADABFwAAsQEAMAYDAAD9BAAgCgAAwwUAIL4CQACWBAAh0gIBAJQEACHbAgEAlAQAId0CAAD7BN0CIgIAAAANACAXAAC0AQAgBL4CQACWBAAh0gIBAJQEACHbAgEAlAQAId0CAAD7BN0CIgIAAAALACAXAAC2AQAgAgAAAAsAIBcAALYBACADAAAADQAgHgAArwEAIB8AALQBACABAAAADQAgAQAAAAsAIAMHAADABQAgJAAAwgUAICUAAMEFACAHmgIAAOkDADCbAgAAvQEAEJwCAADpAwAwvgJAAK4DACHSAgEAvgMAIdsCAQCrAwAh3QIAAOoD3QIiAwAAAAsAIAEAALwBADAjAAC9AQAgAwAAAAsAIAEAAAwAMAIAAA0AIAEAAAAZACABAAAAGQAgAwAAABcAIAEAABgAMAIAABkAIAMAAAAXACABAAAYADACAAAZACADAAAAFwAgAQAAGAAwAgAAGQAgCgoAAL8FACC2AgEAAAABtwIBAAAAAb4CQAAAAAG_AkAAAAAB0gIBAAAAAdcCAQAAAAHYAkAAAAAB2QJAAAAAAdoCQAAAAAEBFwAAxQEAIAm2AgEAAAABtwIBAAAAAb4CQAAAAAG_AkAAAAAB0gIBAAAAAdcCAQAAAAHYAkAAAAAB2QJAAAAAAdoCQAAAAAEBFwAAxwEAMAEXAADHAQAwCgoAAL4FACC2AgEAlAQAIbcCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdICAQCUBAAh1wIBAJQEACHYAkAAlgQAIdkCQADuBAAh2gJAAO4EACECAAAAGQAgFwAAygEAIAm2AgEAlAQAIbcCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdICAQCUBAAh1wIBAJQEACHYAkAAlgQAIdkCQADuBAAh2gJAAO4EACECAAAAFwAgFwAAzAEAIAIAAAAXACAXAADMAQAgAwAAABkAIB4AAMUBACAfAADKAQAgAQAAABkAIAEAAAAXACAFBwAAuwUAICQAAL0FACAlAAC8BQAg2QIAAIYFACDaAgAAhgUAIAyaAgAA6AMAMJsCAADTAQAQnAIAAOgDADC2AgEAvgMAIbcCAQCrAwAhvgJAAK4DACG_AkAArgMAIdICAQC-AwAh1wIBAKsDACHYAkAArgMAIdkCQADAAwAh2gJAAMADACEDAAAAFwAgAQAA0gEAMCMAANMBACADAAAAFwAgAQAAGAAwAgAAGQAgCgwAAOcDACCaAgAA5QMAMJsCAADZAQAQnAIAAOUDADCeAgEAAAABtgIBAAAAAb4CQAC7AwAhvwJAALsDACHRAiAA5gMAIdYCAQAAAAEBAAAA1gEAIAEAAADWAQAgCgwAAOcDACCaAgAA5QMAMJsCAADZAQAQnAIAAOUDADCeAgEAuAMAIbYCAQDIAwAhvgJAALsDACG_AkAAuwMAIdECIADmAwAh1gIBALgDACEBDAAAugUAIAMAAADZAQAgAQAA2gEAMAIAANYBACADAAAA2QEAIAEAANoBADACAADWAQAgAwAAANkBACABAADaAQAwAgAA1gEAIAcMAAC5BQAgngIBAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAdECIAAAAAHWAgEAAAABARcAAN4BACAGngIBAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAdECIAAAAAHWAgEAAAABARcAAOABADABFwAA4AEAMAcMAACvBQAgngIBAJQEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHRAiAAzwQAIdYCAQCUBAAhAgAAANYBACAXAADjAQAgBp4CAQCUBAAhtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh0QIgAM8EACHWAgEAlAQAIQIAAADZAQAgFwAA5QEAIAIAAADZAQAgFwAA5QEAIAMAAADWAQAgHgAA3gEAIB8AAOMBACABAAAA1gEAIAEAAADZAQAgAwcAAKwFACAkAACuBQAgJQAArQUAIAmaAgAA5AMAMJsCAADsAQAQnAIAAOQDADCeAgEAqwMAIbYCAQC-AwAhvgJAAK4DACG_AkAArgMAIdECIADYAwAh1gIBAKsDACEDAAAA2QEAIAEAAOsBADAjAADsAQAgAwAAANkBACABAADaAQAwAgAA1gEAIAEAAAAdACABAAAAHQAgAwAAABsAIAEAABwAMAIAAB0AIAMAAAAbACABAAAcADACAAAdACADAAAAGwAgAQAAHAAwAgAAHQAgDQoAAKsFACANAADgBAAgDwAA4QQAIBAAAOIEACARAADjBAAgngIBAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAdICAQAAAAHTAgEAAAAB1AICAAAAAdUCEAAAAAEBFwAA9AEAIAieAgEAAAABtgIBAAAAAb4CQAAAAAG_AkAAAAAB0gIBAAAAAdMCAQAAAAHUAgIAAAAB1QIQAAAAAQEXAAD2AQAwARcAAPYBADANCgAAqgUAIA0AALMEACAPAAC0BAAgEAAAtQQAIBEAALYEACCeAgEAlAQAIbYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdICAQCUBAAh0wIBAJQEACHUAgIAsQQAIdUCEACVBAAhAgAAAB0AIBcAAPkBACAIngIBAJQEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHSAgEAlAQAIdMCAQCUBAAh1AICALEEACHVAhAAlQQAIQIAAAAbACAXAAD7AQAgAgAAABsAIBcAAPsBACADAAAAHQAgHgAA9AEAIB8AAPkBACABAAAAHQAgAQAAABsAIAUHAAClBQAgJAAAqAUAICUAAKcFACCmAQAApgUAIKcBAACpBQAgC5oCAADjAwAwmwIAAIICABCcAgAA4wMAMJ4CAQCrAwAhtgIBAL4DACG-AkAArgMAIb8CQACuAwAh0gIBAL4DACHTAgEAvgMAIdQCAgC_AwAh1QIQAKwDACEDAAAAGwAgAQAAgQIAMCMAAIICACADAAAAGwAgAQAAHAAwAgAAHQAgAQAAACMAIAEAAAAjACADAAAAIQAgAQAAIgAwAgAAIwAgAwAAACEAIAEAACIAMAIAACMAIAMAAAAhACABAAAiADACAAAjACAHDgAApAUAILYCAQAAAAG-AkAAAAABxAIBAAAAAcYCAQAAAAHHAgEAAAAB0AIAAADQAgIBFwAAigIAIAa2AgEAAAABvgJAAAAAAcQCAQAAAAHGAgEAAAABxwIBAAAAAdACAAAA0AICARcAAIwCADABFwAAjAIAMAcOAACjBQAgtgIBAJQEACG-AkAAlgQAIcQCAQCUBAAhxgIBAJQEACHHAgEAlAQAIdACAADcBNACIgIAAAAjACAXAACPAgAgBrYCAQCUBAAhvgJAAJYEACHEAgEAlAQAIcYCAQCUBAAhxwIBAJQEACHQAgAA3ATQAiICAAAAIQAgFwAAkQIAIAIAAAAhACAXAACRAgAgAwAAACMAIB4AAIoCACAfAACPAgAgAQAAACMAIAEAAAAhACADBwAAoAUAICQAAKIFACAlAAChBQAgCZoCAADfAwAwmwIAAJgCABCcAgAA3wMAMLYCAQC-AwAhvgJAAK4DACHEAgEAvgMAIcYCAQCrAwAhxwIBAKsDACHQAgAA4APQAiIDAAAAIQAgAQAAlwIAMCMAAJgCACADAAAAIQAgAQAAIgAwAgAAIwAgAQAAACcAIAEAAAAnACADAAAAJQAgAQAAJgAwAgAAJwAgAwAAACUAIAEAACYAMAIAACcAIAMAAAAlACABAAAmADACAAAnACAKDgAAnwUAIJ8CEAAAAAG2AgEAAAABvgJAAAAAAb8CQAAAAAHEAgEAAAABxgIBAAAAAccCAQAAAAHQAgAAANACA9ECIAAAAAEBFwAAoAIAIAmfAhAAAAABtgIBAAAAAb4CQAAAAAG_AkAAAAABxAIBAAAAAcYCAQAAAAHHAgEAAAAB0AIAAADQAgPRAiAAAAABARcAAKICADABFwAAogIAMAoOAACeBQAgnwIQAJUEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHEAgEAlAQAIcYCAQCiBAAhxwIBAKIEACHQAgAAzgTQAiPRAiAAzwQAIQIAAAAnACAXAAClAgAgCZ8CEACVBAAhtgIBAJQEACG-AkAAlgQAIb8CQACWBAAhxAIBAJQEACHGAgEAogQAIccCAQCiBAAh0AIAAM4E0AIj0QIgAM8EACECAAAAJQAgFwAApwIAIAIAAAAlACAXAACnAgAgAwAAACcAIB4AAKACACAfAAClAgAgAQAAACcAIAEAAAAlACAIBwAAmQUAICQAAJwFACAlAACbBQAgpgEAAJoFACCnAQAAnQUAIMYCAACGBQAgxwIAAIYFACDQAgAAhgUAIAyaAgAA1QMAMJsCAACuAgAQnAIAANUDADCfAhAArAMAIbYCAQC-AwAhvgJAAK4DACG_AkAArgMAIcQCAQC-AwAhxgIBANcDACHHAgEA1wMAIdACAADWA9ACI9ECIADYAwAhAwAAACUAIAEAAK0CADAjAACuAgAgAwAAACUAIAEAACYAMAIAACcAIAEAAAArACABAAAAKwAgAwAAACkAIAEAACoAMAIAACsAIAMAAAApACABAAAqADACAAArACADAAAAKQAgAQAAKgAwAgAAKwAgDA4AAJgFACC2AgEAAAABvgJAAAAAAb8CQAAAAAHDAgEAAAABxAIBAAAAAcUCQAAAAAHGAgEAAAABxwIBAAAAAcsCAQAAAAHMAgEAAAABzgIAAADJAgIBFwAAtgIAIAu2AgEAAAABvgJAAAAAAb8CQAAAAAHDAgEAAAABxAIBAAAAAcUCQAAAAAHGAgEAAAABxwIBAAAAAcsCAQAAAAHMAgEAAAABzgIAAADJAgIBFwAAuAIAMAEXAAC4AgAwDA4AAJcFACC2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHDAgEAlAQAIcQCAQCUBAAhxQJAAJYEACHGAgEAlAQAIccCAQCUBAAhywIBAJQEACHMAgEAlAQAIc4CAADBBMkCIgIAAAArACAXAAC7AgAgC7YCAQCUBAAhvgJAAJYEACG_AkAAlgQAIcMCAQCUBAAhxAIBAJQEACHFAkAAlgQAIcYCAQCUBAAhxwIBAJQEACHLAgEAlAQAIcwCAQCUBAAhzgIAAMEEyQIiAgAAACkAIBcAAL0CACACAAAAKQAgFwAAvQIAIAMAAAArACAeAAC2AgAgHwAAuwIAIAEAAAArACABAAAAKQAgAwcAAJQFACAkAACWBQAgJQAAlQUAIA6aAgAA1AMAMJsCAADEAgAQnAIAANQDADC2AgEAvgMAIb4CQACuAwAhvwJAAK4DACHDAgEAqwMAIcQCAQC-AwAhxQJAAK4DACHGAgEAqwMAIccCAQCrAwAhywIBAKsDACHMAgEAqwMAIc4CAADPA8kCIgMAAAApACABAADDAgAwIwAAxAIAIAMAAAApACABAAAqADACAAArACAOmgIAANIDADCbAgAAygIAEJwCAADSAwAwtgIBAAAAAcMCAQC4AwAhxAIBAMgDACHFAkAAuwMAIcYCAQC4AwAhxwIBALgDACHJAgAA0wPJAiLKAgAA0wPJAiLLAgEAuAMAIcwCAQC4AwAhzQJAALsDACEBAAAAxwIAIAEAAADHAgAgDpoCAADSAwAwmwIAAMoCABCcAgAA0gMAMLYCAQDIAwAhwwIBALgDACHEAgEAyAMAIcUCQAC7AwAhxgIBALgDACHHAgEAuAMAIckCAADTA8kCIsoCAADTA8kCIssCAQC4AwAhzAIBALgDACHNAkAAuwMAIQADAAAAygIAIAEAAMsCADACAADHAgAgAwAAAMoCACABAADLAgAwAgAAxwIAIAMAAADKAgAgAQAAywIAMAIAAMcCACALtgIBAAAAAcMCAQAAAAHEAgEAAAABxQJAAAAAAcYCAQAAAAHHAgEAAAAByQIAAADJAgLKAgAAAMkCAssCAQAAAAHMAgEAAAABzQJAAAAAAQEXAADPAgAgC7YCAQAAAAHDAgEAAAABxAIBAAAAAcUCQAAAAAHGAgEAAAABxwIBAAAAAckCAAAAyQICygIAAADJAgLLAgEAAAABzAIBAAAAAc0CQAAAAAEBFwAA0QIAMAEXAADRAgAwC7YCAQCUBAAhwwIBAJQEACHEAgEAlAQAIcUCQACWBAAhxgIBAJQEACHHAgEAlAQAIckCAADBBMkCIsoCAADBBMkCIssCAQCUBAAhzAIBAJQEACHNAkAAlgQAIQIAAADHAgAgFwAA1AIAIAu2AgEAlAQAIcMCAQCUBAAhxAIBAJQEACHFAkAAlgQAIcYCAQCUBAAhxwIBAJQEACHJAgAAwQTJAiLKAgAAwQTJAiLLAgEAlAQAIcwCAQCUBAAhzQJAAJYEACECAAAAygIAIBcAANYCACACAAAAygIAIBcAANYCACADAAAAxwIAIB4AAM8CACAfAADUAgAgAQAAAMcCACABAAAAygIAIAMHAACRBQAgJAAAkwUAICUAAJIFACAOmgIAAM4DADCbAgAA3QIAEJwCAADOAwAwtgIBAL4DACHDAgEAqwMAIcQCAQC-AwAhxQJAAK4DACHGAgEAqwMAIccCAQCrAwAhyQIAAM8DyQIiygIAAM8DyQIiywIBAKsDACHMAgEAqwMAIc0CQACuAwAhAwAAAMoCACABAADcAgAwIwAA3QIAIAMAAADKAgAgAQAAywIAMAIAAMcCACAPmgIAAM0DADCbAgAA4wIAEJwCAADNAwAwtgIBAAAAAbcCAQC4AwAhuAIBALgDACG5AkAAuwMAIboCAgDJAwAhuwJAALsDACG8AgIAyQMAIb4CQAC7AwAhvwJAALsDACHAAgEAuAMAIcECQADKAwAhwgJAAMoDACEBAAAA4AIAIAEAAADgAgAgD5oCAADNAwAwmwIAAOMCABCcAgAAzQMAMLYCAQDIAwAhtwIBALgDACG4AgEAuAMAIbkCQAC7AwAhugICAMkDACG7AkAAuwMAIbwCAgDJAwAhvgJAALsDACG_AkAAuwMAIcACAQC4AwAhwQJAAMoDACHCAkAAygMAIQLBAgAAhgUAIMICAACGBQAgAwAAAOMCACABAADkAgAwAgAA4AIAIAMAAADjAgAgAQAA5AIAMAIAAOACACADAAAA4wIAIAEAAOQCADACAADgAgAgDLYCAQAAAAG3AgEAAAABuAIBAAAAAbkCQAAAAAG6AgIAAAABuwJAAAAAAbwCAgAAAAG-AkAAAAABvwJAAAAAAcACAQAAAAHBAkAAAAABwgJAAAAAAQEXAADoAgAgDLYCAQAAAAG3AgEAAAABuAIBAAAAAbkCQAAAAAG6AgIAAAABuwJAAAAAAbwCAgAAAAG-AkAAAAABvwJAAAAAAcACAQAAAAHBAkAAAAABwgJAAAAAAQEXAADqAgAwARcAAOoCADAMtgIBAJQEACG3AgEAlAQAIbgCAQCUBAAhuQJAAJYEACG6AgIAsQQAIbsCQACWBAAhvAICALEEACG-AkAAlgQAIb8CQACWBAAhwAIBAJQEACHBAkAA7gQAIcICQADuBAAhAgAAAOACACAXAADtAgAgDLYCAQCUBAAhtwIBAJQEACG4AgEAlAQAIbkCQACWBAAhugICALEEACG7AkAAlgQAIbwCAgCxBAAhvgJAAJYEACG_AkAAlgQAIcACAQCUBAAhwQJAAO4EACHCAkAA7gQAIQIAAADjAgAgFwAA7wIAIAIAAADjAgAgFwAA7wIAIAMAAADgAgAgHgAA6AIAIB8AAO0CACABAAAA4AIAIAEAAADjAgAgBwcAAIwFACAkAACPBQAgJQAAjgUAIKYBAACNBQAgpwEAAJAFACDBAgAAhgUAIMICAACGBQAgD5oCAADMAwAwmwIAAPYCABCcAgAAzAMAMLYCAQC-AwAhtwIBAKsDACG4AgEAqwMAIbkCQACuAwAhugICAL8DACG7AkAArgMAIbwCAgC_AwAhvgJAAK4DACG_AkAArgMAIcACAQCrAwAhwQJAAMADACHCAkAAwAMAIQMAAADjAgAgAQAA9QIAMCMAAPYCACADAAAA4wIAIAEAAOQCADACAADgAgAgDZoCAADHAwAwmwIAAPwCABCcAgAAxwMAMLYCAQAAAAG3AgEAuAMAIbgCAQC4AwAhuQJAALsDACG6AgIAyQMAIbsCQAC7AwAhvAICAMkDACG9AkAAygMAIb4CQAC7AwAhvwJAALsDACEBAAAA-QIAIAEAAAD5AgAgDZoCAADHAwAwmwIAAPwCABCcAgAAxwMAMLYCAQDIAwAhtwIBALgDACG4AgEAuAMAIbkCQAC7AwAhugICAMkDACG7AkAAuwMAIbwCAgDJAwAhvQJAAMoDACG-AkAAuwMAIb8CQAC7AwAhAb0CAACGBQAgAwAAAPwCACABAAD9AgAwAgAA-QIAIAMAAAD8AgAgAQAA_QIAMAIAAPkCACADAAAA_AIAIAEAAP0CADACAAD5AgAgCrYCAQAAAAG3AgEAAAABuAIBAAAAAbkCQAAAAAG6AgIAAAABuwJAAAAAAbwCAgAAAAG9AkAAAAABvgJAAAAAAb8CQAAAAAEBFwAAgQMAIAq2AgEAAAABtwIBAAAAAbgCAQAAAAG5AkAAAAABugICAAAAAbsCQAAAAAG8AgIAAAABvQJAAAAAAb4CQAAAAAG_AkAAAAABARcAAIMDADABFwAAgwMAMAq2AgEAlAQAIbcCAQCUBAAhuAIBAJQEACG5AkAAlgQAIboCAgCxBAAhuwJAAJYEACG8AgIAsQQAIb0CQADuBAAhvgJAAJYEACG_AkAAlgQAIQIAAAD5AgAgFwAAhgMAIAq2AgEAlAQAIbcCAQCUBAAhuAIBAJQEACG5AkAAlgQAIboCAgCxBAAhuwJAAJYEACG8AgIAsQQAIb0CQADuBAAhvgJAAJYEACG_AkAAlgQAIQIAAAD8AgAgFwAAiAMAIAIAAAD8AgAgFwAAiAMAIAMAAAD5AgAgHgAAgQMAIB8AAIYDACABAAAA-QIAIAEAAAD8AgAgBgcAAIcFACAkAACKBQAgJQAAiQUAIKYBAACIBQAgpwEAAIsFACC9AgAAhgUAIA2aAgAAvQMAMJsCAACPAwAQnAIAAL0DADC2AgEAvgMAIbcCAQCrAwAhuAIBAKsDACG5AkAArgMAIboCAgC_AwAhuwJAAK4DACG8AgIAvwMAIb0CQADAAwAhvgJAAK4DACG_AkAArgMAIQMAAAD8AgAgAQAAjgMAMCMAAI8DACADAAAA_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_AwAhuwJAAK4DACG8AgIAvwMAIb0CQADAAwAhvgJAAK4DACG_AkAArgMAIQsHAACwAwAgJAAAtgMAICUAALYDACCiAgEAAAABowIBAAAABKQCAQAAAASlAgEAAAABpgIBAAAAAacCAQAAAAGoAgEAAAABqQIBAMYDACENBwAAsAMAICQAALADACAlAACwAwAgpgEAAMUDACCnAQAAsAMAIKICAgAAAAGjAgIAAAAEpAICAAAABKUCAgAAAAGmAgIAAAABpwICAAAAAagCAgAAAAGpAgIAxAMAIQsHAADCAwAgJAAAwwMAICUAAMMDACCiAkAAAAABowJAAAAABaQCQAAAAAWlAkAAAAABpgJAAAAAAacCQAAAAAGoAkAAAAABqQJAAMEDACELBwAAwgMAICQAAMMDACAlAADDAwAgogJAAAAAAaMCQAAAAAWkAkAAAAAFpQJAAAAAAaYCQAAAAAGnAkAAAAABqAJAAAAAAakCQADBAwAhCKICAgAAAAGjAgIAAAAFpAICAAAABaUCAgAAAAGmAgIAAAABpwICAAAAAagCAgAAAAGpAgIAwgMAIQiiAkAAAAABowJAAAAABaQCQAAAAAWlAkAAAAABpgJAAAAAAacCQAAAAAGoAkAAAAABqQJAAMMDACENBwAAsAMAICQAALADACAlAACwAwAgpgEAAMUDACCnAQAAsAMAIKICAgAAAAGjAgIAAAAEpAICAAAABKUCAgAAAAGmAgIAAAABpwICAAAAAagCAgAAAAGpAgIAxAMAIQiiAggAAAABowIIAAAABKQCCAAAAASlAggAAAABpgIIAAAAAacCCAAAAAGoAggAAAABqQIIAMUDACELBwAAsAMAICQAALYDACAlAAC2AwAgogIBAAAAAaMCAQAAAASkAgEAAAAEpQIBAAAAAaYCAQAAAAGnAgEAAAABqAIBAAAAAakCAQDGAwAhDZoCAADHAwAwmwIAAPwCABCcAgAAxwMAMLYCAQDIAwAhtwIBALgDACG4AgEAuAMAIbkCQAC7AwAhugICAMkDACG7AkAAuwMAIbwCAgDJAwAhvQJAAMoDACG-AkAAuwMAIb8CQAC7AwAhCKICAQAAAAGjAgEAAAAEpAIBAAAABKUCAQAAAAGmAgEAAAABpwIBAAAAAagCAQAAAAGpAgEAywMAIQiiAgIAAAABowICAAAABKQCAgAAAASlAgIAAAABpgICAAAAAacCAgAAAAGoAgIAAAABqQICALADACEIogJAAAAAAaMCQAAAAAWkAkAAAAAFpQJAAAAAAaYCQAAAAAGnAkAAAAABqAJAAAAAAakCQADDAwAhCKICAQAAAAGjAgEAAAAEpAIBAAAABKUCAQAAAAGmAgEAAAABpwIBAAAAAagCAQAAAAGpAgEAywMAIQ-aAgAAzAMAMJsCAAD2AgAQnAIAAMwDADC2AgEAvgMAIbcCAQCrAwAhuAIBAKsDACG5AkAArgMAIboCAgC_AwAhuwJAAK4DACG8AgIAvwMAIb4CQACuAwAhvwJAAK4DACHAAgEAqwMAIcECQADAAwAhwgJAAMADACEPmgIAAM0DADCbAgAA4wIAEJwCAADNAwAwtgIBAMgDACG3AgEAuAMAIbgCAQC4AwAhuQJAALsDACG6AgIAyQMAIbsCQAC7AwAhvAICAMkDACG-AkAAuwMAIb8CQAC7AwAhwAIBALgDACHBAkAAygMAIcICQADKAwAhDpoCAADOAwAwmwIAAN0CABCcAgAAzgMAMLYCAQC-AwAhwwIBAKsDACHEAgEAvgMAIcUCQACuAwAhxgIBAKsDACHHAgEAqwMAIckCAADPA8kCIsoCAADPA8kCIssCAQCrAwAhzAIBAKsDACHNAkAArgMAIQcHAACwAwAgJAAA0QMAICUAANEDACCiAgAAAMkCAqMCAAAAyQIIpAIAAADJAgipAgAA0APJAiIHBwAAsAMAICQAANEDACAlAADRAwAgogIAAADJAgKjAgAAAMkCCKQCAAAAyQIIqQIAANADyQIiBKICAAAAyQICowIAAADJAgikAgAAAMkCCKkCAADRA8kCIg6aAgAA0gMAMJsCAADKAgAQnAIAANIDADC2AgEAyAMAIcMCAQC4AwAhxAIBAMgDACHFAkAAuwMAIcYCAQC4AwAhxwIBALgDACHJAgAA0wPJAiLKAgAA0wPJAiLLAgEAuAMAIcwCAQC4AwAhzQJAALsDACEEogIAAADJAgKjAgAAAMkCCKQCAAAAyQIIqQIAANEDyQIiDpoCAADUAwAwmwIAAMQCABCcAgAA1AMAMLYCAQC-AwAhvgJAAK4DACG_AkAArgMAIcMCAQCrAwAhxAIBAL4DACHFAkAArgMAIcYCAQCrAwAhxwIBAKsDACHLAgEAqwMAIcwCAQCrAwAhzgIAAM8DyQIiDJoCAADVAwAwmwIAAK4CABCcAgAA1QMAMJ8CEACsAwAhtgIBAL4DACG-AkAArgMAIb8CQACuAwAhxAIBAL4DACHGAgEA1wMAIccCAQDXAwAh0AIAANYD0AIj0QIgANgDACEHBwAAwgMAICQAAN4DACAlAADeAwAgogIAAADQAgOjAgAAANACCaQCAAAA0AIJqQIAAN0D0AIjDgcAAMIDACAkAADcAwAgJQAA3AMAIKICAQAAAAGjAgEAAAAFpAIBAAAABaUCAQAAAAGmAgEAAAABpwIBAAAAAagCAQAAAAGpAgEA2wMAIbACAQAAAAGxAgEAAAABsgIBAAAAAQUHAACwAwAgJAAA2gMAICUAANoDACCiAiAAAAABqQIgANkDACEFBwAAsAMAICQAANoDACAlAADaAwAgogIgAAAAAakCIADZAwAhAqICIAAAAAGpAiAA2gMAIQ4HAADCAwAgJAAA3AMAICUAANwDACCiAgEAAAABowIBAAAABaQCAQAAAAWlAgEAAAABpgIBAAAAAacCAQAAAAGoAgEAAAABqQIBANsDACGwAgEAAAABsQIBAAAAAbICAQAAAAELogIBAAAAAaMCAQAAAAWkAgEAAAAFpQIBAAAAAaYCAQAAAAGnAgEAAAABqAIBAAAAAakCAQDcAwAhsAIBAAAAAbECAQAAAAGyAgEAAAABBwcAAMIDACAkAADeAwAgJQAA3gMAIKICAAAA0AIDowIAAADQAgmkAgAAANACCakCAADdA9ACIwSiAgAAANACA6MCAAAA0AIJpAIAAADQAgmpAgAA3gPQAiMJmgIAAN8DADCbAgAAmAIAEJwCAADfAwAwtgIBAL4DACG-AkAArgMAIcQCAQC-AwAhxgIBAKsDACHHAgEAqwMAIdACAADgA9ACIgcHAACwAwAgJAAA4gMAICUAAOIDACCiAgAAANACAqMCAAAA0AIIpAIAAADQAgipAgAA4QPQAiIHBwAAsAMAICQAAOIDACAlAADiAwAgogIAAADQAgKjAgAAANACCKQCAAAA0AIIqQIAAOED0AIiBKICAAAA0AICowIAAADQAgikAgAAANACCKkCAADiA9ACIguaAgAA4wMAMJsCAACCAgAQnAIAAOMDADCeAgEAqwMAIbYCAQC-AwAhvgJAAK4DACG_AkAArgMAIdICAQC-AwAh0wIBAL4DACHUAgIAvwMAIdUCEACsAwAhCZoCAADkAwAwmwIAAOwBABCcAgAA5AMAMJ4CAQCrAwAhtgIBAL4DACG-AkAArgMAIb8CQACuAwAh0QIgANgDACHWAgEAqwMAIQoMAADnAwAgmgIAAOUDADCbAgAA2QEAEJwCAADlAwAwngIBALgDACG2AgEAyAMAIb4CQAC7AwAhvwJAALsDACHRAiAA5gMAIdYCAQC4AwAhAqICIAAAAAGpAiAA2gMAIQOzAgAAGwAgtAIAABsAILUCAAAbACAMmgIAAOgDADCbAgAA0wEAEJwCAADoAwAwtgIBAL4DACG3AgEAqwMAIb4CQACuAwAhvwJAAK4DACHSAgEAvgMAIdcCAQCrAwAh2AJAAK4DACHZAkAAwAMAIdoCQADAAwAhB5oCAADpAwAwmwIAAL0BABCcAgAA6QMAML4CQACuAwAh0gIBAL4DACHbAgEAqwMAId0CAADqA90CIgcHAACwAwAgJAAA7AMAICUAAOwDACCiAgAAAN0CAqMCAAAA3QIIpAIAAADdAgipAgAA6wPdAiIHBwAAsAMAICQAAOwDACAlAADsAwAgogIAAADdAgKjAgAAAN0CCKQCAAAA3QIIqQIAAOsD3QIiBKICAAAA3QICowIAAADdAgikAgAAAN0CCKkCAADsA90CIg6aAgAA7QMAMJsCAACnAQAQnAIAAO0DADC2AgEAvgMAIb4CQACuAwAhvwJAAK4DACHeAgEAqwMAId8CAQDXAwAh4AIBANcDACHhAgEA1wMAIeICAQDXAwAh4wIBAKsDACHkAgEAqwMAIeUCAQDXAwAhCZoCAADuAwAwmwIAAI8BABCcAgAA7gMAMLYCAQCrAwAhvgJAAK4DACG_AkAArgMAIdgCQACuAwAh5gIBAKsDACHnAgEAqwMAIQmaAgAA7wMAMJsCAAB8ABCcAgAA7wMAMLYCAQC4AwAhvgJAALsDACG_AkAAuwMAIdgCQAC7AwAh5gIBALgDACHnAgEAuAMAIRCaAgAA8AMAMJsCAAB2ABCcAgAA8AMAMLYCAQCrAwAhvgJAAK4DACG_AkAArgMAIdsCAQCrAwAh6AIBAKsDACHpAgEAqwMAIeoCAQDXAwAh6wIBANcDACHsAgEA1wMAIe0CQADAAwAh7gJAAMADACHvAgEA1wMAIfACAQDXAwAhC5oCAADxAwAwmwIAAGAAEJwCAADxAwAwtgIBAKsDACG-AkAArgMAIb8CQACuAwAh2AJAAK4DACHbAgEAqwMAIfECAQCrAwAh8gIBANcDACHzAgEA1wMAIQuaAgAA8gMAMJsCAABKABCcAgAA8gMAMJ4CAQCrAwAhtgIBAKsDACG3AgEAqwMAIb4CQACuAwAhvwJAAK4DACHdAgEAqwMAIfQCIADYAwAh9QIBANcDACEOBAAA9QMAIAUAAPYDACAGAAD3AwAgmgIAAPMDADCbAgAANwAQnAIAAPMDADCeAgEAuAMAIbYCAQC4AwAhtwIBALgDACG-AkAAuwMAIb8CQAC7AwAh3QIBALgDACH0AiAA5gMAIfUCAQD0AwAhC6ICAQAAAAGjAgEAAAAFpAIBAAAABaUCAQAAAAGmAgEAAAABpwIBAAAAAagCAQAAAAGpAgEA3AMAIbACAQAAAAGxAgEAAAABsgIBAAAAAQOzAgAAAwAgtAIAAAMAILUCAAADACADswIAAAcAILQCAAAHACC1AgAABwAgA7MCAAALACC0AgAACwAgtQIAAAsAIAPEAgEAAAABxQJAAAAAAcYCAQAAAAEPDgAA-gMAIJoCAAD5AwAwmwIAACkAEJwCAAD5AwAwtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAhwwIBALgDACHEAgEAyAMAIcUCQAC7AwAhxgIBALgDACHHAgEAuAMAIcsCAQC4AwAhzAIBALgDACHOAgAA0wPJAiISCgAAgAQAIA0AAIEEACAPAACCBAAgEAAAgwQAIBEAAIQEACCaAgAA_wMAMJsCAAAbABCcAgAA_wMAMJ4CAQC4AwAhtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAh0gIBAMgDACHTAgEAyAMAIdQCAgDJAwAh1QIQALkDACH4AgAAGwAg-QIAABsAIA0OAAD6AwAgmgIAAPsDADCbAgAAJQAQnAIAAPsDADCfAhAAuQMAIbYCAQDIAwAhvgJAALsDACG_AkAAuwMAIcQCAQDIAwAhxgIBAPQDACHHAgEA9AMAIdACAAD8A9ACI9ECIADmAwAhBKICAAAA0AIDowIAAADQAgmkAgAAANACCakCAADeA9ACIwoOAAD6AwAgmgIAAP0DADCbAgAAIQAQnAIAAP0DADC2AgEAyAMAIb4CQAC7AwAhxAIBAMgDACHGAgEAuAMAIccCAQC4AwAh0AIAAP4D0AIiBKICAAAA0AICowIAAADQAgikAgAAANACCKkCAADiA9ACIhAKAACABAAgDQAAgQQAIA8AAIIEACAQAACDBAAgEQAAhAQAIJoCAAD_AwAwmwIAABsAEJwCAAD_AwAwngIBALgDACG2AgEAyAMAIb4CQAC7AwAhvwJAALsDACHSAgEAyAMAIdMCAQDIAwAh1AICAMkDACHVAhAAuQMAIRQIAACHBAAgCQAA9wMAIAsAAIgEACAMAADnAwAgmgIAAIYEADCbAgAAEQAQnAIAAIYEADC2AgEAyAMAIb4CQAC7AwAhvwJAALsDACHeAgEAuAMAId8CAQD0AwAh4AIBAPQDACHhAgEA9AMAIeICAQD0AwAh4wIBALgDACHkAgEAuAMAIeUCAQD0AwAh-AIAABEAIPkCAAARACAMDAAA5wMAIJoCAADlAwAwmwIAANkBABCcAgAA5QMAMJ4CAQC4AwAhtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAh0QIgAOYDACHWAgEAuAMAIfgCAADZAQAg-QIAANkBACADswIAACEAILQCAAAhACC1AgAAIQAgA7MCAAAlACC0AgAAJQAgtQIAACUAIAOzAgAAKQAgtAIAACkAILUCAAApACANCgAAgAQAIJoCAACFBAAwmwIAABcAEJwCAACFBAAwtgIBAMgDACG3AgEAuAMAIb4CQAC7AwAhvwJAALsDACHSAgEAyAMAIdcCAQC4AwAh2AJAALsDACHZAkAAygMAIdoCQADKAwAhEggAAIcEACAJAAD3AwAgCwAAiAQAIAwAAOcDACCaAgAAhgQAMJsCAAARABCcAgAAhgQAMLYCAQDIAwAhvgJAALsDACG_AkAAuwMAId4CAQC4AwAh3wIBAPQDACHgAgEA9AMAIeECAQD0AwAh4gIBAPQDACHjAgEAuAMAIeQCAQC4AwAh5QIBAPQDACELBgAAvAMAIJoCAAC3AwAwmwIAAA8AEJwCAAC3AwAwnQIBALgDACGeAgEAuAMAIZ8CEAC5AwAhoAIAALoDACChAkAAuwMAIfgCAAAPACD5AgAADwAgA7MCAAAXACC0AgAAFwAgtQIAABcAIALSAgEAAAAB2wIBAAAAAQkDAACMBAAgCgAAgAQAIJoCAACKBAAwmwIAAAsAEJwCAACKBAAwvgJAALsDACHSAgEAyAMAIdsCAQC4AwAh3QIAAIsE3QIiBKICAAAA3QICowIAAADdAgikAgAAAN0CCKkCAADsA90CIhAEAAD1AwAgBQAA9gMAIAYAAPcDACCaAgAA8wMAMJsCAAA3ABCcAgAA8wMAMJ4CAQC4AwAhtgIBALgDACG3AgEAuAMAIb4CQAC7AwAhvwJAALsDACHdAgEAuAMAIfQCIADmAwAh9QIBAPQDACH4AgAANwAg-QIAADcAIBEDAACMBAAgmgIAAI0EADCbAgAABwAQnAIAAI0EADC2AgEAuAMAIb4CQAC7AwAhvwJAALsDACHbAgEAuAMAIegCAQC4AwAh6QIBALgDACHqAgEA9AMAIesCAQD0AwAh7AIBAPQDACHtAkAAygMAIe4CQADKAwAh7wIBAPQDACHwAgEA9AMAIQwDAACMBAAgmgIAAI4EADCbAgAAAwAQnAIAAI4EADC2AgEAuAMAIb4CQAC7AwAhvwJAALsDACHYAkAAuwMAIdsCAQC4AwAh8QIBALgDACHyAgEA9AMAIfMCAQD0AwAhAAAAAAAB_QIBAAAAAQX9AhAAAAABgwMQAAAAAYQDEAAAAAGFAxAAAAABhgMQAAAAAQH9AkAAAAABCx4AAJgEADAfAACdBAAw-gIAAJkEADD7AgAAmgQAMPwCAACbBAAg_QIAAJwEADD-AgAAnAQAMP8CAACcBAAwgAMAAJwEADCBAwAAngQAMIIDAACfBAAwDQkAAIEFACALAACCBQAgDAAAgwUAILYCAQAAAAG-AkAAAAABvwJAAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAeECAQAAAAHiAgEAAAAB4wIBAAAAAeQCAQAAAAECAAAAEwAgHgAAgAUAIAMAAAATACAeAACABQAgHwAAowQAIAEXAADOBgAwEggAAIcEACAJAAD3AwAgCwAAiAQAIAwAAOcDACCaAgAAhgQAMJsCAAARABCcAgAAhgQAMLYCAQAAAAG-AkAAuwMAIb8CQAC7AwAh3gIBALgDACHfAgEA9AMAIeACAQD0AwAh4QIBAPQDACHiAgEA9AMAIeMCAQAAAAHkAgEAuAMAIeUCAQD0AwAhAgAAABMAIBcAAKMEACACAAAAoAQAIBcAAKEEACAOmgIAAJ8EADCbAgAAoAQAEJwCAACfBAAwtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAh3gIBALgDACHfAgEA9AMAIeACAQD0AwAh4QIBAPQDACHiAgEA9AMAIeMCAQC4AwAh5AIBALgDACHlAgEA9AMAIQ6aAgAAnwQAMJsCAACgBAAQnAIAAJ8EADC2AgEAyAMAIb4CQAC7AwAhvwJAALsDACHeAgEAuAMAId8CAQD0AwAh4AIBAPQDACHhAgEA9AMAIeICAQD0AwAh4wIBALgDACHkAgEAuAMAIeUCAQD0AwAhCrYCAQCUBAAhvgJAAJYEACG_AkAAlgQAId4CAQCUBAAh3wIBAKIEACHgAgEAogQAIeECAQCiBAAh4gIBAKIEACHjAgEAlAQAIeQCAQCUBAAhAf0CAQAAAAENCQAApAQAIAsAAKUEACAMAACmBAAgtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh3gIBAJQEACHfAgEAogQAIeACAQCiBAAh4QIBAKIEACHiAgEAogQAIeMCAQCUBAAh5AIBAJQEACELHgAA8QQAMB8AAPYEADD6AgAA8gQAMPsCAADzBAAw_AIAAPQEACD9AgAA9QQAMP4CAAD1BAAw_wIAAPUEADCAAwAA9QQAMIEDAAD3BAAwggMAAPgEADALHgAA5AQAMB8AAOkEADD6AgAA5QQAMPsCAADmBAAw_AIAAOcEACD9AgAA6AQAMP4CAADoBAAw_wIAAOgEADCAAwAA6AQAMIEDAADqBAAwggMAAOsEADALHgAApwQAMB8AAKwEADD6AgAAqAQAMPsCAACpBAAw_AIAAKoEACD9AgAAqwQAMP4CAACrBAAw_wIAAKsEADCAAwAAqwQAMIEDAACtBAAwggMAAK4EADALDQAA4AQAIA8AAOEEACAQAADiBAAgEQAA4wQAIJ4CAQAAAAG2AgEAAAABvgJAAAAAAb8CQAAAAAHTAgEAAAAB1AICAAAAAdUCEAAAAAECAAAAHQAgHgAA3wQAIAMAAAAdACAeAADfBAAgHwAAsgQAIAEXAADNBgAwEAoAAIAEACANAACBBAAgDwAAggQAIBAAAIMEACARAACEBAAgmgIAAP8DADCbAgAAGwAQnAIAAP8DADCeAgEAuAMAIbYCAQAAAAG-AkAAuwMAIb8CQAC7AwAh0gIBAMgDACHTAgEAyAMAIdQCAgDJAwAh1QIQALkDACECAAAAHQAgFwAAsgQAIAIAAACvBAAgFwAAsAQAIAuaAgAArgQAMJsCAACvBAAQnAIAAK4EADCeAgEAuAMAIbYCAQDIAwAhvgJAALsDACG_AkAAuwMAIdICAQDIAwAh0wIBAMgDACHUAgIAyQMAIdUCEAC5AwAhC5oCAACuBAAwmwIAAK8EABCcAgAArgQAMJ4CAQC4AwAhtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAh0gIBAMgDACHTAgEAyAMAIdQCAgDJAwAh1QIQALkDACEHngIBAJQEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHTAgEAlAQAIdQCAgCxBAAh1QIQAJUEACEF_QICAAAAAYMDAgAAAAGEAwIAAAABhQMCAAAAAYYDAgAAAAELDQAAswQAIA8AALQEACAQAAC1BAAgEQAAtgQAIJ4CAQCUBAAhtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh0wIBAJQEACHUAgIAsQQAIdUCEACVBAAhBR4AAMUGACAfAADLBgAg-gIAAMYGACD7AgAAygYAIIADAADWAQAgCx4AANIEADAfAADXBAAw-gIAANMEADD7AgAA1AQAMPwCAADVBAAg_QIAANYEADD-AgAA1gQAMP8CAADWBAAwgAMAANYEADCBAwAA2AQAMIIDAADZBAAwCx4AAMQEADAfAADJBAAw-gIAAMUEADD7AgAAxgQAMPwCAADHBAAg_QIAAMgEADD-AgAAyAQAMP8CAADIBAAwgAMAAMgEADCBAwAAygQAMIIDAADLBAAwCx4AALcEADAfAAC8BAAw-gIAALgEADD7AgAAuQQAMPwCAAC6BAAg_QIAALsEADD-AgAAuwQAMP8CAAC7BAAwgAMAALsEADCBAwAAvQQAMIIDAAC-BAAwCrYCAQAAAAG-AkAAAAABvwJAAAAAAcMCAQAAAAHFAkAAAAABxgIBAAAAAccCAQAAAAHLAgEAAAABzAIBAAAAAc4CAAAAyQICAgAAACsAIB4AAMMEACADAAAAKwAgHgAAwwQAIB8AAMIEACABFwAAyQYAMBAOAAD6AwAgmgIAAPkDADCbAgAAKQAQnAIAAPkDADC2AgEAAAABvgJAALsDACG_AkAAuwMAIcMCAQAAAAHEAgEAyAMAIcUCQAC7AwAhxgIBALgDACHHAgEAuAMAIcsCAQC4AwAhzAIBALgDACHOAgAA0wPJAiL2AgAA-AMAIAIAAAArACAXAADCBAAgAgAAAL8EACAXAADABAAgDpoCAAC-BAAwmwIAAL8EABCcAgAAvgQAMLYCAQDIAwAhvgJAALsDACG_AkAAuwMAIcMCAQC4AwAhxAIBAMgDACHFAkAAuwMAIcYCAQC4AwAhxwIBALgDACHLAgEAuAMAIcwCAQC4AwAhzgIAANMDyQIiDpoCAAC-BAAwmwIAAL8EABCcAgAAvgQAMLYCAQDIAwAhvgJAALsDACG_AkAAuwMAIcMCAQC4AwAhxAIBAMgDACHFAkAAuwMAIcYCAQC4AwAhxwIBALgDACHLAgEAuAMAIcwCAQC4AwAhzgIAANMDyQIiCrYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIcMCAQCUBAAhxQJAAJYEACHGAgEAlAQAIccCAQCUBAAhywIBAJQEACHMAgEAlAQAIc4CAADBBMkCIgH9AgAAAMkCAgq2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHDAgEAlAQAIcUCQACWBAAhxgIBAJQEACHHAgEAlAQAIcsCAQCUBAAhzAIBAJQEACHOAgAAwQTJAiIKtgIBAAAAAb4CQAAAAAG_AkAAAAABwwIBAAAAAcUCQAAAAAHGAgEAAAABxwIBAAAAAcsCAQAAAAHMAgEAAAABzgIAAADJAgIInwIQAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAcYCAQAAAAHHAgEAAAAB0AIAAADQAgPRAiAAAAABAgAAACcAIB4AANEEACADAAAAJwAgHgAA0QQAIB8AANAEACABFwAAyAYAMA0OAAD6AwAgmgIAAPsDADCbAgAAJQAQnAIAAPsDADCfAhAAuQMAIbYCAQAAAAG-AkAAuwMAIb8CQAC7AwAhxAIBAMgDACHGAgEA9AMAIccCAQD0AwAh0AIAAPwD0AIj0QIgAOYDACECAAAAJwAgFwAA0AQAIAIAAADMBAAgFwAAzQQAIAyaAgAAywQAMJsCAADMBAAQnAIAAMsEADCfAhAAuQMAIbYCAQDIAwAhvgJAALsDACG_AkAAuwMAIcQCAQDIAwAhxgIBAPQDACHHAgEA9AMAIdACAAD8A9ACI9ECIADmAwAhDJoCAADLBAAwmwIAAMwEABCcAgAAywQAMJ8CEAC5AwAhtgIBAMgDACG-AkAAuwMAIb8CQAC7AwAhxAIBAMgDACHGAgEA9AMAIccCAQD0AwAh0AIAAPwD0AIj0QIgAOYDACEInwIQAJUEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHGAgEAogQAIccCAQCiBAAh0AIAAM4E0AIj0QIgAM8EACEB_QIAAADQAgMB_QIgAAAAAQifAhAAlQQAIbYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIcYCAQCiBAAhxwIBAKIEACHQAgAAzgTQAiPRAiAAzwQAIQifAhAAAAABtgIBAAAAAb4CQAAAAAG_AkAAAAABxgIBAAAAAccCAQAAAAHQAgAAANACA9ECIAAAAAEFtgIBAAAAAb4CQAAAAAHGAgEAAAABxwIBAAAAAdACAAAA0AICAgAAACMAIB4AAN4EACADAAAAIwAgHgAA3gQAIB8AAN0EACABFwAAxwYAMAoOAAD6AwAgmgIAAP0DADCbAgAAIQAQnAIAAP0DADC2AgEAAAABvgJAALsDACHEAgEAyAMAIcYCAQC4AwAhxwIBALgDACHQAgAA_gPQAiICAAAAIwAgFwAA3QQAIAIAAADaBAAgFwAA2wQAIAmaAgAA2QQAMJsCAADaBAAQnAIAANkEADC2AgEAyAMAIb4CQAC7AwAhxAIBAMgDACHGAgEAuAMAIccCAQC4AwAh0AIAAP4D0AIiCZoCAADZBAAwmwIAANoEABCcAgAA2QQAMLYCAQDIAwAhvgJAALsDACHEAgEAyAMAIcYCAQC4AwAhxwIBALgDACHQAgAA_gPQAiIFtgIBAJQEACG-AkAAlgQAIcYCAQCUBAAhxwIBAJQEACHQAgAA3ATQAiIB_QIAAADQAgIFtgIBAJQEACG-AkAAlgQAIcYCAQCUBAAhxwIBAJQEACHQAgAA3ATQAiIFtgIBAAAAAb4CQAAAAAHGAgEAAAABxwIBAAAAAdACAAAA0AICCw0AAOAEACAPAADhBAAgEAAA4gQAIBEAAOMEACCeAgEAAAABtgIBAAAAAb4CQAAAAAG_AkAAAAAB0wIBAAAAAdQCAgAAAAHVAhAAAAABAx4AAMUGACD6AgAAxgYAIIADAADWAQAgBB4AANIEADD6AgAA0wQAMPwCAADVBAAggAMAANYEADAEHgAAxAQAMPoCAADFBAAw_AIAAMcEACCAAwAAyAQAMAQeAAC3BAAw-gIAALgEADD8AgAAugQAIIADAAC7BAAwCLYCAQAAAAG3AgEAAAABvgJAAAAAAb8CQAAAAAHXAgEAAAAB2AJAAAAAAdkCQAAAAAHaAkAAAAABAgAAABkAIB4AAPAEACADAAAAGQAgHgAA8AQAIB8AAO8EACABFwAAxAYAMA0KAACABAAgmgIAAIUEADCbAgAAFwAQnAIAAIUEADC2AgEAAAABtwIBALgDACG-AkAAuwMAIb8CQAC7AwAh0gIBAMgDACHXAgEAAAAB2AJAALsDACHZAkAAygMAIdoCQADKAwAhAgAAABkAIBcAAO8EACACAAAA7AQAIBcAAO0EACAMmgIAAOsEADCbAgAA7AQAEJwCAADrBAAwtgIBAMgDACG3AgEAuAMAIb4CQAC7AwAhvwJAALsDACHSAgEAyAMAIdcCAQC4AwAh2AJAALsDACHZAkAAygMAIdoCQADKAwAhDJoCAADrBAAwmwIAAOwEABCcAgAA6wQAMLYCAQDIAwAhtwIBALgDACG-AkAAuwMAIb8CQAC7AwAh0gIBAMgDACHXAgEAuAMAIdgCQAC7AwAh2QJAAMoDACHaAkAAygMAIQi2AgEAlAQAIbcCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdcCAQCUBAAh2AJAAJYEACHZAkAA7gQAIdoCQADuBAAhAf0CQAAAAAEItgIBAJQEACG3AgEAlAQAIb4CQACWBAAhvwJAAJYEACHXAgEAlAQAIdgCQACWBAAh2QJAAO4EACHaAkAA7gQAIQi2AgEAAAABtwIBAAAAAb4CQAAAAAG_AkAAAAAB1wIBAAAAAdgCQAAAAAHZAkAAAAAB2gJAAAAAAQQDAAD_BAAgvgJAAAAAAdsCAQAAAAHdAgAAAN0CAgIAAAANACAeAAD-BAAgAwAAAA0AIB4AAP4EACAfAAD8BAAgARcAAMMGADAKAwAAjAQAIAoAAIAEACCaAgAAigQAMJsCAAALABCcAgAAigQAML4CQAC7AwAh0gIBAMgDACHbAgEAuAMAId0CAACLBN0CIvcCAACJBAAgAgAAAA0AIBcAAPwEACACAAAA-QQAIBcAAPoEACAHmgIAAPgEADCbAgAA-QQAEJwCAAD4BAAwvgJAALsDACHSAgEAyAMAIdsCAQC4AwAh3QIAAIsE3QIiB5oCAAD4BAAwmwIAAPkEABCcAgAA-AQAML4CQAC7AwAh0gIBAMgDACHbAgEAuAMAId0CAACLBN0CIgO-AkAAlgQAIdsCAQCUBAAh3QIAAPsE3QIiAf0CAAAA3QICBAMAAP0EACC-AkAAlgQAIdsCAQCUBAAh3QIAAPsE3QIiBR4AAL4GACAfAADBBgAg-gIAAL8GACD7AgAAwAYAIIADAAABACAEAwAA_wQAIL4CQAAAAAHbAgEAAAAB3QIAAADdAgIDHgAAvgYAIPoCAAC_BgAggAMAAAEAIA0JAACBBQAgCwAAggUAIAwAAIMFACC2AgEAAAABvgJAAAAAAb8CQAAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAgEAAAAB4gIBAAAAAeMCAQAAAAHkAgEAAAABBB4AAPEEADD6AgAA8gQAMPwCAAD0BAAggAMAAPUEADAEHgAA5AQAMPoCAADlBAAw_AIAAOcEACCAAwAA6AQAMAQeAACnBAAw-gIAAKgEADD8AgAAqgQAIIADAACrBAAwBB4AAJgEADD6AgAAmQQAMPwCAACbBAAggAMAAJwEADAAAAAAAAAAAAAAAAAAAAAAAAAFHgAAuQYAIB8AALwGACD6AgAAugYAIPsCAAC7BgAggAMAAB0AIAMeAAC5BgAg-gIAALoGACCAAwAAHQAgAAAAAAAFHgAAtAYAIB8AALcGACD6AgAAtQYAIPsCAAC2BgAggAMAAB0AIAMeAAC0BgAg-gIAALUGACCAAwAAHQAgAAAABR4AAK8GACAfAACyBgAg-gIAALAGACD7AgAAsQYAIIADAAAdACADHgAArwYAIPoCAACwBgAggAMAAB0AIAAAAAAABR4AAKoGACAfAACtBgAg-gIAAKsGACD7AgAArAYAIIADAAATACADHgAAqgYAIPoCAACrBgAggAMAABMAIAAAAAseAACwBQAwHwAAtAUAMPoCAACxBQAw-wIAALIFADD8AgAAswUAIP0CAACrBAAw_gIAAKsEADD_AgAAqwQAMIADAACrBAAwgQMAALUFADCCAwAArgQAMAsKAACrBQAgDwAA4QQAIBAAAOIEACARAADjBAAgngIBAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAdICAQAAAAHUAgIAAAAB1QIQAAAAAQIAAAAdACAeAAC4BQAgAwAAAB0AIB4AALgFACAfAAC3BQAgARcAAKkGADACAAAAHQAgFwAAtwUAIAIAAACvBAAgFwAAtgUAIAeeAgEAlAQAIbYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdICAQCUBAAh1AICALEEACHVAhAAlQQAIQsKAACqBQAgDwAAtAQAIBAAALUEACARAAC2BAAgngIBAJQEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHSAgEAlAQAIdQCAgCxBAAh1QIQAJUEACELCgAAqwUAIA8AAOEEACAQAADiBAAgEQAA4wQAIJ4CAQAAAAG2AgEAAAABvgJAAAAAAb8CQAAAAAHSAgEAAAAB1AICAAAAAdUCEAAAAAEEHgAAsAUAMPoCAACxBQAw_AIAALMFACCAAwAAqwQAMAAAAAAFHgAApAYAIB8AAKcGACD6AgAApQYAIPsCAACmBgAggAMAABMAIAMeAACkBgAg-gIAAKUGACCAAwAAEwAgAAAABR4AAJ8GACAfAACiBgAg-gIAAKAGACD7AgAAoQYAIIADAAATACADHgAAnwYAIPoCAACgBgAggAMAABMAIAAAAAceAACaBgAgHwAAnQYAIPoCAACbBgAg-wIAAJwGACD-AgAADwAg_wIAAA8AIIADAACSAwAgAx4AAJoGACD6AgAAmwYAIIADAACSAwAgAAAAAAAABR4AAJUGACAfAACYBgAg-gIAAJYGACD7AgAAlwYAIIADAAABACADHgAAlQYAIPoCAACWBgAggAMAAAEAIAAAAAUeAACQBgAgHwAAkwYAIPoCAACRBgAg-wIAAJIGACCAAwAAAQAgAx4AAJAGACD6AgAAkQYAIIADAAABACAAAAALHgAA8gUAMB8AAPcFADD6AgAA8wUAMPsCAAD0BQAw_AIAAPUFACD9AgAA9gUAMP4CAAD2BQAw_wIAAPYFADCAAwAA9gUAMIEDAAD4BQAwggMAAPkFADALHgAA5gUAMB8AAOsFADD6AgAA5wUAMPsCAADoBQAw_AIAAOkFACD9AgAA6gUAMP4CAADqBQAw_wIAAOoFADCAAwAA6gUAMIEDAADsBQAwggMAAO0FADALHgAA3QUAMB8AAOEFADD6AgAA3gUAMPsCAADfBQAw_AIAAOAFACD9AgAA9QQAMP4CAAD1BAAw_wIAAPUEADCAAwAA9QQAMIEDAADiBQAwggMAAPgEADAECgAAxAUAIL4CQAAAAAHSAgEAAAAB3QIAAADdAgICAAAADQAgHgAA5QUAIAMAAAANACAeAADlBQAgHwAA5AUAIAEXAACPBgAwAgAAAA0AIBcAAOQFACACAAAA-QQAIBcAAOMFACADvgJAAJYEACHSAgEAlAQAId0CAAD7BN0CIgQKAADDBQAgvgJAAJYEACHSAgEAlAQAId0CAAD7BN0CIgQKAADEBQAgvgJAAAAAAdICAQAAAAHdAgAAAN0CAgy2AgEAAAABvgJAAAAAAb8CQAAAAAHoAgEAAAAB6QIBAAAAAeoCAQAAAAHrAgEAAAAB7AIBAAAAAe0CQAAAAAHuAkAAAAAB7wIBAAAAAfACAQAAAAECAAAACQAgHgAA8QUAIAMAAAAJACAeAADxBQAgHwAA8AUAIAEXAACOBgAwEQMAAIwEACCaAgAAjQQAMJsCAAAHABCcAgAAjQQAMLYCAQAAAAG-AkAAuwMAIb8CQAC7AwAh2wIBALgDACHoAgEAuAMAIekCAQC4AwAh6gIBAPQDACHrAgEA9AMAIewCAQD0AwAh7QJAAMoDACHuAkAAygMAIe8CAQD0AwAh8AIBAPQDACECAAAACQAgFwAA8AUAIAIAAADuBQAgFwAA7wUAIBCaAgAA7QUAMJsCAADuBQAQnAIAAO0FADC2AgEAuAMAIb4CQAC7AwAhvwJAALsDACHbAgEAuAMAIegCAQC4AwAh6QIBALgDACHqAgEA9AMAIesCAQD0AwAh7AIBAPQDACHtAkAAygMAIe4CQADKAwAh7wIBAPQDACHwAgEA9AMAIRCaAgAA7QUAMJsCAADuBQAQnAIAAO0FADC2AgEAuAMAIb4CQAC7AwAhvwJAALsDACHbAgEAuAMAIegCAQC4AwAh6QIBALgDACHqAgEA9AMAIesCAQD0AwAh7AIBAPQDACHtAkAAygMAIe4CQADKAwAh7wIBAPQDACHwAgEA9AMAIQy2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHoAgEAlAQAIekCAQCUBAAh6gIBAKIEACHrAgEAogQAIewCAQCiBAAh7QJAAO4EACHuAkAA7gQAIe8CAQCiBAAh8AIBAKIEACEMtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh6AIBAJQEACHpAgEAlAQAIeoCAQCiBAAh6wIBAKIEACHsAgEAogQAIe0CQADuBAAh7gJAAO4EACHvAgEAogQAIfACAQCiBAAhDLYCAQAAAAG-AkAAAAABvwJAAAAAAegCAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAgEAAAAB7QJAAAAAAe4CQAAAAAHvAgEAAAAB8AIBAAAAAQe2AgEAAAABvgJAAAAAAb8CQAAAAAHYAkAAAAAB8QIBAAAAAfICAQAAAAHzAgEAAAABAgAAAAUAIB4AAP0FACADAAAABQAgHgAA_QUAIB8AAPwFACABFwAAjQYAMAwDAACMBAAgmgIAAI4EADCbAgAAAwAQnAIAAI4EADC2AgEAAAABvgJAALsDACG_AkAAuwMAIdgCQAC7AwAh2wIBALgDACHxAgEAAAAB8gIBAPQDACHzAgEA9AMAIQIAAAAFACAXAAD8BQAgAgAAAPoFACAXAAD7BQAgC5oCAAD5BQAwmwIAAPoFABCcAgAA-QUAMLYCAQC4AwAhvgJAALsDACG_AkAAuwMAIdgCQAC7AwAh2wIBALgDACHxAgEAuAMAIfICAQD0AwAh8wIBAPQDACELmgIAAPkFADCbAgAA-gUAEJwCAAD5BQAwtgIBALgDACG-AkAAuwMAIb8CQAC7AwAh2AJAALsDACHbAgEAuAMAIfECAQC4AwAh8gIBAPQDACHzAgEA9AMAIQe2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHYAkAAlgQAIfECAQCUBAAh8gIBAKIEACHzAgEAogQAIQe2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHYAkAAlgQAIfECAQCUBAAh8gIBAKIEACHzAgEAogQAIQe2AgEAAAABvgJAAAAAAb8CQAAAAAHYAkAAAAAB8QIBAAAAAfICAQAAAAHzAgEAAAABBB4AAPIFADD6AgAA8wUAMPwCAAD1BQAggAMAAPYFADAEHgAA5gUAMPoCAADnBQAw_AIAAOkFACCAAwAA6gUAMAQeAADdBQAw-gIAAN4FADD8AgAA4AUAIIADAAD1BAAwAAAABQoAAIUGACANAACGBgAgDwAAhwYAIBAAAIgGACARAACJBgAgCQgAAIoGACAJAACDBgAgCwAAiwYAIAwAALoFACDfAgAAhgUAIOACAACGBQAg4QIAAIYFACDiAgAAhgUAIOUCAACGBQAgAQwAALoFACAAAAABBgAAhQUAIAAEBAAAgQYAIAUAAIIGACAGAACDBgAg9QIAAIYFACAHtgIBAAAAAb4CQAAAAAG_AkAAAAAB2AJAAAAAAfECAQAAAAHyAgEAAAAB8wIBAAAAAQy2AgEAAAABvgJAAAAAAb8CQAAAAAHoAgEAAAAB6QIBAAAAAeoCAQAAAAHrAgEAAAAB7AIBAAAAAe0CQAAAAAHuAkAAAAAB7wIBAAAAAfACAQAAAAEDvgJAAAAAAdICAQAAAAHdAgAAAN0CAgoFAAD_BQAgBgAAgAYAIJ4CAQAAAAG2AgEAAAABtwIBAAAAAb4CQAAAAAG_AkAAAAAB3QIBAAAAAfQCIAAAAAH1AgEAAAABAgAAAAEAIB4AAJAGACADAAAANwAgHgAAkAYAIB8AAJQGACAMAAAANwAgBQAA2wUAIAYAANwFACAXAACUBgAgngIBAJQEACG2AgEAlAQAIbcCAQCUBAAhvgJAAJYEACG_AkAAlgQAId0CAQCUBAAh9AIgAM8EACH1AgEAogQAIQoFAADbBQAgBgAA3AUAIJ4CAQCUBAAhtgIBAJQEACG3AgEAlAQAIb4CQACWBAAhvwJAAJYEACHdAgEAlAQAIfQCIADPBAAh9QIBAKIEACEKBAAA_gUAIAYAAIAGACCeAgEAAAABtgIBAAAAAbcCAQAAAAG-AkAAAAABvwJAAAAAAd0CAQAAAAH0AiAAAAAB9QIBAAAAAQIAAAABACAeAACVBgAgAwAAADcAIB4AAJUGACAfAACZBgAgDAAAADcAIAQAANoFACAGAADcBQAgFwAAmQYAIJ4CAQCUBAAhtgIBAJQEACG3AgEAlAQAIb4CQACWBAAhvwJAAJYEACHdAgEAlAQAIfQCIADPBAAh9QIBAKIEACEKBAAA2gUAIAYAANwFACCeAgEAlAQAIbYCAQCUBAAhtwIBAJQEACG-AkAAlgQAIb8CQACWBAAh3QIBAJQEACH0AiAAzwQAIfUCAQCiBAAhBZ0CAQAAAAGeAgEAAAABnwIQAAAAAaACgAAAAAGhAkAAAAABAgAAAJIDACAeAACaBgAgAwAAAA8AIB4AAJoGACAfAACeBgAgBwAAAA8AIBcAAJ4GACCdAgEAlAQAIZ4CAQCUBAAhnwIQAJUEACGgAoAAAAABoQJAAJYEACEFnQIBAJQEACGeAgEAlAQAIZ8CEACVBAAhoAKAAAAAAaECQACWBAAhDggAAMkFACALAACCBQAgDAAAgwUAILYCAQAAAAG-AkAAAAABvwJAAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAeECAQAAAAHiAgEAAAAB4wIBAAAAAeQCAQAAAAHlAgEAAAABAgAAABMAIB4AAJ8GACADAAAAEQAgHgAAnwYAIB8AAKMGACAQAAAAEQAgCAAAyAUAIAsAAKUEACAMAACmBAAgFwAAowYAILYCAQCUBAAhvgJAAJYEACG_AkAAlgQAId4CAQCUBAAh3wIBAKIEACHgAgEAogQAIeECAQCiBAAh4gIBAKIEACHjAgEAlAQAIeQCAQCUBAAh5QIBAKIEACEOCAAAyAUAIAsAAKUEACAMAACmBAAgtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh3gIBAJQEACHfAgEAogQAIeACAQCiBAAh4QIBAKIEACHiAgEAogQAIeMCAQCUBAAh5AIBAJQEACHlAgEAogQAIQ4IAADJBQAgCQAAgQUAIAwAAIMFACC2AgEAAAABvgJAAAAAAb8CQAAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAgEAAAAB4gIBAAAAAeMCAQAAAAHkAgEAAAAB5QIBAAAAAQIAAAATACAeAACkBgAgAwAAABEAIB4AAKQGACAfAACoBgAgEAAAABEAIAgAAMgFACAJAACkBAAgDAAApgQAIBcAAKgGACC2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHeAgEAlAQAId8CAQCiBAAh4AIBAKIEACHhAgEAogQAIeICAQCiBAAh4wIBAJQEACHkAgEAlAQAIeUCAQCiBAAhDggAAMgFACAJAACkBAAgDAAApgQAILYCAQCUBAAhvgJAAJYEACG_AkAAlgQAId4CAQCUBAAh3wIBAKIEACHgAgEAogQAIeECAQCiBAAh4gIBAKIEACHjAgEAlAQAIeQCAQCUBAAh5QIBAKIEACEHngIBAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAdICAQAAAAHUAgIAAAAB1QIQAAAAAQ4IAADJBQAgCQAAgQUAIAsAAIIFACC2AgEAAAABvgJAAAAAAb8CQAAAAAHeAgEAAAAB3wIBAAAAAeACAQAAAAHhAgEAAAAB4gIBAAAAAeMCAQAAAAHkAgEAAAAB5QIBAAAAAQIAAAATACAeAACqBgAgAwAAABEAIB4AAKoGACAfAACuBgAgEAAAABEAIAgAAMgFACAJAACkBAAgCwAApQQAIBcAAK4GACC2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHeAgEAlAQAId8CAQCiBAAh4AIBAKIEACHhAgEAogQAIeICAQCiBAAh4wIBAJQEACHkAgEAlAQAIeUCAQCiBAAhDggAAMgFACAJAACkBAAgCwAApQQAILYCAQCUBAAhvgJAAJYEACG_AkAAlgQAId4CAQCUBAAh3wIBAKIEACHgAgEAogQAIeECAQCiBAAh4gIBAKIEACHjAgEAlAQAIeQCAQCUBAAh5QIBAKIEACEMCgAAqwUAIA0AAOAEACAQAADiBAAgEQAA4wQAIJ4CAQAAAAG2AgEAAAABvgJAAAAAAb8CQAAAAAHSAgEAAAAB0wIBAAAAAdQCAgAAAAHVAhAAAAABAgAAAB0AIB4AAK8GACADAAAAGwAgHgAArwYAIB8AALMGACAOAAAAGwAgCgAAqgUAIA0AALMEACAQAAC1BAAgEQAAtgQAIBcAALMGACCeAgEAlAQAIbYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdICAQCUBAAh0wIBAJQEACHUAgIAsQQAIdUCEACVBAAhDAoAAKoFACANAACzBAAgEAAAtQQAIBEAALYEACCeAgEAlAQAIbYCAQCUBAAhvgJAAJYEACG_AkAAlgQAIdICAQCUBAAh0wIBAJQEACHUAgIAsQQAIdUCEACVBAAhDAoAAKsFACANAADgBAAgDwAA4QQAIBEAAOMEACCeAgEAAAABtgIBAAAAAb4CQAAAAAG_AkAAAAAB0gIBAAAAAdMCAQAAAAHUAgIAAAAB1QIQAAAAAQIAAAAdACAeAAC0BgAgAwAAABsAIB4AALQGACAfAAC4BgAgDgAAABsAIAoAAKoFACANAACzBAAgDwAAtAQAIBEAALYEACAXAAC4BgAgngIBAJQEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHSAgEAlAQAIdMCAQCUBAAh1AICALEEACHVAhAAlQQAIQwKAACqBQAgDQAAswQAIA8AALQEACARAAC2BAAgngIBAJQEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHSAgEAlAQAIdMCAQCUBAAh1AICALEEACHVAhAAlQQAIQwKAACrBQAgDQAA4AQAIA8AAOEEACAQAADiBAAgngIBAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAdICAQAAAAHTAgEAAAAB1AICAAAAAdUCEAAAAAECAAAAHQAgHgAAuQYAIAMAAAAbACAeAAC5BgAgHwAAvQYAIA4AAAAbACAKAACqBQAgDQAAswQAIA8AALQEACAQAAC1BAAgFwAAvQYAIJ4CAQCUBAAhtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh0gIBAJQEACHTAgEAlAQAIdQCAgCxBAAh1QIQAJUEACEMCgAAqgUAIA0AALMEACAPAAC0BAAgEAAAtQQAIJ4CAQCUBAAhtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh0gIBAJQEACHTAgEAlAQAIdQCAgCxBAAh1QIQAJUEACEKBAAA_gUAIAUAAP8FACCeAgEAAAABtgIBAAAAAbcCAQAAAAG-AkAAAAABvwJAAAAAAd0CAQAAAAH0AiAAAAAB9QIBAAAAAQIAAAABACAeAAC-BgAgAwAAADcAIB4AAL4GACAfAADCBgAgDAAAADcAIAQAANoFACAFAADbBQAgFwAAwgYAIJ4CAQCUBAAhtgIBAJQEACG3AgEAlAQAIb4CQACWBAAhvwJAAJYEACHdAgEAlAQAIfQCIADPBAAh9QIBAKIEACEKBAAA2gUAIAUAANsFACCeAgEAlAQAIbYCAQCUBAAhtwIBAJQEACG-AkAAlgQAIb8CQACWBAAh3QIBAJQEACH0AiAAzwQAIfUCAQCiBAAhA74CQAAAAAHbAgEAAAAB3QIAAADdAgIItgIBAAAAAbcCAQAAAAG-AkAAAAABvwJAAAAAAdcCAQAAAAHYAkAAAAAB2QJAAAAAAdoCQAAAAAEGngIBAAAAAbYCAQAAAAG-AkAAAAABvwJAAAAAAdECIAAAAAHWAgEAAAABAgAAANYBACAeAADFBgAgBbYCAQAAAAG-AkAAAAABxgIBAAAAAccCAQAAAAHQAgAAANACAgifAhAAAAABtgIBAAAAAb4CQAAAAAG_AkAAAAABxgIBAAAAAccCAQAAAAHQAgAAANACA9ECIAAAAAEKtgIBAAAAAb4CQAAAAAG_AkAAAAABwwIBAAAAAcUCQAAAAAHGAgEAAAABxwIBAAAAAcsCAQAAAAHMAgEAAAABzgIAAADJAgIDAAAA2QEAIB4AAMUGACAfAADMBgAgCAAAANkBACAXAADMBgAgngIBAJQEACG2AgEAlAQAIb4CQACWBAAhvwJAAJYEACHRAiAAzwQAIdYCAQCUBAAhBp4CAQCUBAAhtgIBAJQEACG-AkAAlgQAIb8CQACWBAAh0QIgAM8EACHWAgEAlAQAIQeeAgEAAAABtgIBAAAAAb4CQAAAAAG_AkAAAAAB0wIBAAAAAdQCAgAAAAHVAhAAAAABCrYCAQAAAAG-AkAAAAABvwJAAAAAAd4CAQAAAAHfAgEAAAAB4AIBAAAAAeECAQAAAAHiAgEAAAAB4wIBAAAAAeQCAQAAAAEEBAYCBQoDBg4EBwARAQMAAQEDAAECAwABCgAFBQcAEAgQBgkWBAsaCAweCQIGFAUHAAcBBhUAAQoABQYHAA8KAAUNAAoPJAwQKA0RLA4CBwALDB8JAQwgAAEOAAkBDgAJAQ4ACQMPLQAQLgARLwADCTAACzEADDIAAwQzAAU0AAY1AAAAAAMHABYkABclABgAAAADBwAWJAAXJQAYAQMAAQEDAAEDBwAdJAAeJQAfAAAAAwcAHSQAHiUAHwEDAAEBAwABAwcAJCQAJSUAJgAAAAMHACQkACUlACYAAAADBwAsJAAtJQAuAAAAAwcALCQALSUALgEInAEGAQiiAQYDBwAzJAA0JQA1AAAAAwcAMyQANCUANQIDAAEKAAUCAwABCgAFAwcAOiQAOyUAPAAAAAMHADokADslADwBCgAFAQoABQMHAEEkAEIlAEMAAAADBwBBJABCJQBDAAADBwBIJABJJQBKAAAAAwcASCQASSUASgIKAAUNAAoCCgAFDQAKBQcATyQAUiUAU6YBAFCnAQBRAAAAAAAFBwBPJABSJQBTpgEAUKcBAFEBDgAJAQ4ACQMHAFgkAFklAFoAAAADBwBYJABZJQBaAQ4ACQEOAAkFBwBfJABiJQBjpgEAYKcBAGEAAAAAAAUHAF8kAGIlAGOmAQBgpwEAYQEOAAkBDgAJAwcAaCQAaSUAagAAAAMHAGgkAGklAGoAAAADBwBwJABxJQByAAAAAwcAcCQAcSUAcgAAAAUHAHgkAHslAHymAQB5pwEAegAAAAAABQcAeCQAeyUAfKYBAHmnAQB6AAAABQcAggEkAIUBJQCGAaYBAIMBpwEAhAEAAAAAAAUHAIIBJACFASUAhgGmAQCDAacBAIQBAAAFBwCLASQAjgElAI8BpgEAjAGnAQCNAQAAAAAABQcAiwEkAI4BJQCPAaYBAIwBpwEAjQESAgETNgEUOQEVOgEWOwEYPQEZPxIaQBMbQgEcRBIdRRQgRgEhRwEiSBImSxUnTBkoTQIpTgIqTwIrUAIsUQItUwIuVRIvVhowWAIxWhIyWxszXAI0XQI1XhI2YRw3YiA4YwM5ZAM6ZQM7ZgM8ZwM9aQM-axI_bCFAbgNBcBJCcSJDcgNEcwNFdBJGdyNHeCdIeihJeyhKfihLfyhMgAEoTYIBKE6EARJPhQEpUIcBKFGJARJSigEqU4sBKFSMAShVjQESVpABK1eRAS9YkgEFWZMBBVqUAQVblQEFXJYBBV2YAQVemgESX5sBMGCeAQVhoAESYqEBMWOjAQVkpAEFZaUBEmaoATJnqQE2aKoBBGmrAQRqrAEEa60BBGyuAQRtsAEEbrIBEm-zATdwtQEEcbcBEnK4AThzuQEEdLoBBHW7ARJ2vgE5d78BPXjAAQh5wQEIesIBCHvDAQh8xAEIfcYBCH7IARJ_yQE-gAHLAQiBAc0BEoIBzgE_gwHPAQiEAdABCIUB0QEShgHUAUCHAdUBRIgB1wEKiQHYAQqKAdsBCosB3AEKjAHdAQqNAd8BCo4B4QESjwHiAUWQAeQBCpEB5gESkgHnAUaTAegBCpQB6QEKlQHqARKWAe0BR5cB7gFLmAHvAQmZAfABCZoB8QEJmwHyAQmcAfMBCZ0B9QEJngH3ARKfAfgBTKAB-gEJoQH8ARKiAf0BTaMB_gEJpAH_AQmlAYACEqgBgwJOqQGEAlSqAYUCDKsBhgIMrAGHAgytAYgCDK4BiQIMrwGLAgywAY0CErEBjgJVsgGQAgyzAZICErQBkwJWtQGUAgy2AZUCDLcBlgISuAGZAle5AZoCW7oBmwINuwGcAg28AZ0CDb0BngINvgGfAg2_AaECDcABowISwQGkAlzCAaYCDcMBqAISxAGpAl3FAaoCDcYBqwINxwGsAhLIAa8CXskBsAJkygGxAg7LAbICDswBswIOzQG0Ag7OAbUCDs8BtwIO0AG5AhLRAboCZdIBvAIO0wG-AhLUAb8CZtUBwAIO1gHBAg7XAcICEtgBxQJn2QHGAmvaAcgCbNsByQJs3AHMAmzdAc0CbN4BzgJs3wHQAmzgAdICEuEB0wJt4gHVAmzjAdcCEuQB2AJu5QHZAmzmAdoCbOcB2wIS6AHeAm_pAd8Cc-oB4QJ06wHiAnTsAeUCdO0B5gJ07gHnAnTvAekCdPAB6wIS8QHsAnXyAe4CdPMB8AIS9AHxAnb1AfICdPYB8wJ09wH0AhL4AfcCd_kB-AJ9-gH6An77AfsCfvwB_gJ-_QH_An7-AYADfv8BggN-gAKEAxKBAoUDf4IChwN-gwKJAxKEAooDgAGFAosDfoYCjAN-hwKNAxKIApADgQGJApEDhwGKApMDBosClAMGjAKWAwaNApcDBo4CmAMGjwKaAwaQApwDEpECnQOIAZICnwMGkwKhAxKUAqIDiQGVAqMDBpYCpAMGlwKlAxKYAqgDigGZAqkDkAE" } async function decodeBase64AsWasm(wasmBase64: string): Promise { @@ -308,6 +308,16 @@ export interface PrismaClient< */ get courtBooking(): Prisma.CourtBookingDelegate; + /** + * `prisma.courtBookingLog`: Exposes CRUD operations for the **CourtBookingLog** model. + * Example usage: + * ```ts + * // Fetch zero or more CourtBookingLogs + * const courtBookingLogs = await prisma.courtBookingLog.findMany() + * ``` + */ + get courtBookingLog(): Prisma.CourtBookingLogDelegate; + /** * `prisma.onboardingRequest`: Exposes CRUD operations for the **OnboardingRequest** model. * Example usage: diff --git a/apps/backend/src/generated/prisma/internal/prismaNamespace.ts b/apps/backend/src/generated/prisma/internal/prismaNamespace.ts index c51f691..449443a 100644 --- a/apps/backend/src/generated/prisma/internal/prismaNamespace.ts +++ b/apps/backend/src/generated/prisma/internal/prismaNamespace.ts @@ -396,6 +396,7 @@ export const ModelName = { CourtAvailability: 'CourtAvailability', CourtPriceRule: 'CourtPriceRule', CourtBooking: 'CourtBooking', + CourtBookingLog: 'CourtBookingLog', OnboardingRequest: 'OnboardingRequest', PasswordResetRequest: 'PasswordResetRequest', Plan: 'Plan' @@ -414,7 +415,7 @@ export type TypeMap + fields: Prisma.CourtBookingLogFieldRefs + operations: { + findUnique: { + args: Prisma.CourtBookingLogFindUniqueArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.CourtBookingLogFindUniqueOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findFirst: { + args: Prisma.CourtBookingLogFindFirstArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.CourtBookingLogFindFirstOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findMany: { + args: Prisma.CourtBookingLogFindManyArgs + result: runtime.Types.Utils.PayloadToResult[] + } + create: { + args: Prisma.CourtBookingLogCreateArgs + result: runtime.Types.Utils.PayloadToResult + } + createMany: { + args: Prisma.CourtBookingLogCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.CourtBookingLogCreateManyAndReturnArgs + result: runtime.Types.Utils.PayloadToResult[] + } + delete: { + args: Prisma.CourtBookingLogDeleteArgs + result: runtime.Types.Utils.PayloadToResult + } + update: { + args: Prisma.CourtBookingLogUpdateArgs + result: runtime.Types.Utils.PayloadToResult + } + deleteMany: { + args: Prisma.CourtBookingLogDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.CourtBookingLogUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.CourtBookingLogUpdateManyAndReturnArgs + result: runtime.Types.Utils.PayloadToResult[] + } + upsert: { + args: Prisma.CourtBookingLogUpsertArgs + result: runtime.Types.Utils.PayloadToResult + } + aggregate: { + args: Prisma.CourtBookingLogAggregateArgs + result: runtime.Types.Utils.Optional + } + groupBy: { + args: Prisma.CourtBookingLogGroupByArgs + result: runtime.Types.Utils.Optional[] + } + count: { + args: Prisma.CourtBookingLogCountArgs + result: runtime.Types.Utils.Optional | number + } + } + } OnboardingRequest: { payload: Prisma.$OnboardingRequestPayload fields: Prisma.OnboardingRequestFieldRefs @@ -1738,6 +1813,23 @@ export const CourtBookingScalarFieldEnum = { export type CourtBookingScalarFieldEnum = (typeof CourtBookingScalarFieldEnum)[keyof typeof CourtBookingScalarFieldEnum] +export const CourtBookingLogScalarFieldEnum = { + id: 'id', + bookingCode: 'bookingCode', + courtId: 'courtId', + bookingDate: 'bookingDate', + startTime: 'startTime', + endTime: 'endTime', + previousStatus: 'previousStatus', + newStatus: 'newStatus', + customerName: 'customerName', + customerPhone: 'customerPhone', + changedAt: 'changedAt' +} as const + +export type CourtBookingLogScalarFieldEnum = (typeof CourtBookingLogScalarFieldEnum)[keyof typeof CourtBookingLogScalarFieldEnum] + + export const OnboardingRequestScalarFieldEnum = { id: 'id', fullName: 'fullName', @@ -2068,6 +2160,7 @@ export type GlobalOmitConfig = { courtAvailability?: Prisma.CourtAvailabilityOmit courtPriceRule?: Prisma.CourtPriceRuleOmit courtBooking?: Prisma.CourtBookingOmit + courtBookingLog?: Prisma.CourtBookingLogOmit onboardingRequest?: Prisma.OnboardingRequestOmit passwordResetRequest?: Prisma.PasswordResetRequestOmit plan?: Prisma.PlanOmit diff --git a/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts b/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts index ba86db4..9e67129 100644 --- a/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/apps/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -63,6 +63,7 @@ export const ModelName = { CourtAvailability: 'CourtAvailability', CourtPriceRule: 'CourtPriceRule', CourtBooking: 'CourtBooking', + CourtBookingLog: 'CourtBookingLog', OnboardingRequest: 'OnboardingRequest', PasswordResetRequest: 'PasswordResetRequest', Plan: 'Plan' @@ -255,6 +256,23 @@ export const CourtBookingScalarFieldEnum = { export type CourtBookingScalarFieldEnum = (typeof CourtBookingScalarFieldEnum)[keyof typeof CourtBookingScalarFieldEnum] +export const CourtBookingLogScalarFieldEnum = { + id: 'id', + bookingCode: 'bookingCode', + courtId: 'courtId', + bookingDate: 'bookingDate', + startTime: 'startTime', + endTime: 'endTime', + previousStatus: 'previousStatus', + newStatus: 'newStatus', + customerName: 'customerName', + customerPhone: 'customerPhone', + changedAt: 'changedAt' +} as const + +export type CourtBookingLogScalarFieldEnum = (typeof CourtBookingLogScalarFieldEnum)[keyof typeof CourtBookingLogScalarFieldEnum] + + export const OnboardingRequestScalarFieldEnum = { id: 'id', fullName: 'fullName', diff --git a/apps/backend/src/generated/prisma/models.ts b/apps/backend/src/generated/prisma/models.ts index 3b46099..e243233 100644 --- a/apps/backend/src/generated/prisma/models.ts +++ b/apps/backend/src/generated/prisma/models.ts @@ -20,6 +20,7 @@ export type * from './models/Court' export type * from './models/CourtAvailability' export type * from './models/CourtPriceRule' export type * from './models/CourtBooking' +export type * from './models/CourtBookingLog' export type * from './models/OnboardingRequest' export type * from './models/PasswordResetRequest' export type * from './models/Plan' 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 5155415..40c8337 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 @@ -164,7 +164,7 @@ function mapBookingResponse(booking: { endTime: string; customerName: string; customerPhone: string; - status: 'CONFIRMED' | 'CANCELLED' | 'COMPLETED'; + status: 'CONFIRMED' | 'CANCELLED' | 'COMPLETED' | 'NOSHOW'; createdAt: Date; updatedAt: Date; court: { @@ -494,34 +494,42 @@ export async function updateAdminBookingStatus( ); } - const updated = await db.courtBooking.update({ - where: { id: booking.id }, + if(input.status === 'NOSHOW' && booking.status !== 'CONFIRMED') { + throw new AdminBookingServiceError( + 'Solo se pueden marcar como no show las reservas confirmadas.', + 409 + ); + } + + await db.courtBookingLog.create({ data: { - status: - input.status === 'COMPLETED' ? CourtBookingStatus.COMPLETED : CourtBookingStatus.CANCELLED, - }, - include: { - court: { - select: { - id: true, - name: true, - sport: { - select: { - id: true, - name: true, - slug: true, - }, - }, - complex: { - select: { - id: true, - complexName: true, - }, - }, - }, - }, + id: uuidv7(), + bookingCode: booking.bookingCode, + courtId: booking.court.id, + bookingDate: booking.bookingDate, + startTime: booking.startTime, + endTime: booking.endTime, + customerName: booking.customerName, + customerPhone: booking.customerPhone, + previousStatus: booking.status, + newStatus: input.status, + changedAt: new Date(), }, }); - return mapBookingResponse(updated); + if(input.status === 'COMPLETED' || input.status ==='NOSHOW') { + await db.courtBooking.update({ + where: { id: booking.id }, + data: { + status: input.status, + }, + }); + } else { + // if the booking is cancelled we delete it to free up the slot, but we keep a log of it with the cancelled status + await db.courtBooking.delete({ + where: { id: booking.id }, + }) + } + + return mapBookingResponse({...booking, status: input.status }); } diff --git a/packages/api-contract/src/admin-booking.ts b/packages/api-contract/src/admin-booking.ts index dd41dd2..a28229c 100644 --- a/packages/api-contract/src/admin-booking.ts +++ b/packages/api-contract/src/admin-booking.ts @@ -4,7 +4,7 @@ const TIME_REGEX = /^([01]\d|2[0-3]):([0-5]\d)$/ const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/ const BOOKING_CODE_REGEX = /^[A-Z0-9]{6,8}$/ -export const bookingStatusSchema = z.enum(['CONFIRMED', 'CANCELLED', 'COMPLETED']) +export const bookingStatusSchema = z.enum(['CONFIRMED', 'CANCELLED', 'COMPLETED', 'NOSHOW']) export const adminBookingSportSchema = z.object({ id: z.uuid(), From 7be776f1890f66803d9fc983e6e61fb43cff8f41 Mon Sep 17 00:00:00 2001 From: Jose Selesan Date: Wed, 6 May 2026 17:03:42 -0300 Subject: [PATCH 2/3] Close dialog on status change --- apps/backend/src/app.ts | 4 +- apps/backend/src/lib/errors.ts | 50 +- apps/backend/src/lib/http/error-handler.ts | 20 +- apps/backend/src/lib/http/handle-result.ts | 20 +- apps/backend/src/lib/http/problem-builders.ts | 20 +- apps/backend/src/lib/http/problem-details.ts | 16 +- apps/backend/src/lib/http/problem-mapper.ts | 43 +- apps/backend/src/lib/http/request-id.ts | 18 +- apps/backend/src/lib/http/validate.ts | 42 +- apps/backend/src/lib/http/zod-issues.ts | 22 +- apps/backend/src/lib/result.ts | 10 +- .../services/admin-booking.service.ts | 8 +- .../modules/sport/services/sport.service.ts | 2 +- .../backend/src/modules/sport/sport.routes.ts | 2 +- .../invite-complex-user.handler.test.ts | 6 +- .../test/complex/invite-complex-user.test.ts | 2 +- .../test/sport/create-sport.handler.test.ts | 4 +- apps/backend/test/support/prisma.mock.ts | 18 +- .../src/features/booking/booking-provider.tsx | 24 +- .../booking/components/booking-timeline.tsx | 8 +- .../booking/components/booking-toolbar.tsx | 2 +- .../components/booking-tools-dialog.tsx | 495 +++++++++--------- 22 files changed, 408 insertions(+), 428 deletions(-) diff --git a/apps/backend/src/app.ts b/apps/backend/src/app.ts index 662d52a..dc36f53 100644 --- a/apps/backend/src/app.ts +++ b/apps/backend/src/app.ts @@ -9,8 +9,8 @@ import { requestIdMiddleware } from './lib/http/request-id'; export function createApp() { const app = new Hono(); - app.use('*', requestIdMiddleware) - app.use('*', errorHandler) + app.use('*', requestIdMiddleware); + app.use('*', errorHandler); const allowedOrigins = (Bun.env.CORS_ORIGIN ?? 'http://localhost:5173,http://127.0.0.1:5173') .split(',') diff --git a/apps/backend/src/lib/errors.ts b/apps/backend/src/lib/errors.ts index 3555e82..90862dc 100644 --- a/apps/backend/src/lib/errors.ts +++ b/apps/backend/src/lib/errors.ts @@ -1,58 +1,58 @@ // lib/errors.ts export type ValidationIssue = { - path: string - message: string -} + path: string; + message: string; +}; export type AppError = | { - type: 'validation' - message: string - issues?: ValidationIssue[] + type: 'validation'; + message: string; + issues?: ValidationIssue[]; } | { - type: 'not_found' - message: string + type: 'not_found'; + message: string; } | { - type: 'conflict' - message: string + type: 'conflict'; + message: string; } | { - type: 'unauthorized' - message: string + type: 'unauthorized'; + message: string; } | { - type: 'forbidden' - message: string + type: 'forbidden'; + message: string; } | { - type: 'unexpected' - message: string - } + type: 'unexpected'; + message: string; + }; export const Errors = { validation(message: string, issues?: ValidationIssue[]): AppError { - return { type: 'validation', message, issues } + return { type: 'validation', message, issues }; }, notFound(message = 'Resource not found'): AppError { - return { type: 'not_found', message } + return { type: 'not_found', message }; }, conflict(message: string): AppError { - return { type: 'conflict', message } + return { type: 'conflict', message }; }, unauthorized(message = 'Unauthorized'): AppError { - return { type: 'unauthorized', message } + return { type: 'unauthorized', message }; }, forbidden(message = 'Forbidden'): AppError { - return { type: 'forbidden', message } + return { type: 'forbidden', message }; }, unexpected(message = 'Unexpected error'): AppError { - return { type: 'unexpected', message } - } -} \ No newline at end of file + return { type: 'unexpected', message }; + }, +}; diff --git a/apps/backend/src/lib/http/error-handler.ts b/apps/backend/src/lib/http/error-handler.ts index f1a833c..5b22c14 100644 --- a/apps/backend/src/lib/http/error-handler.ts +++ b/apps/backend/src/lib/http/error-handler.ts @@ -1,20 +1,20 @@ // http/error-handler.ts -import type { MiddlewareHandler } from 'hono' -import { unexpectedProblem } from './problem-builders' -import { logger } from '../logger' +import type { MiddlewareHandler } from 'hono'; +import { logger } from '../logger'; +import { unexpectedProblem } from './problem-builders'; export const errorHandler: MiddlewareHandler = async (c, next) => { try { - await next() + await next(); } catch (error) { - const requestId = c.get('requestId') as string | undefined - const instance = requestId ? `/requests/${requestId}` : undefined + const requestId = c.get('requestId') as string | undefined; + const instance = requestId ? `/requests/${requestId}` : undefined; logger.error({ requestId, - error - }) + error, + }); - return c.json(unexpectedProblem({ instance }), 500) + return c.json(unexpectedProblem({ instance }), 500); } -} \ No newline at end of file +}; diff --git a/apps/backend/src/lib/http/handle-result.ts b/apps/backend/src/lib/http/handle-result.ts index 3fda6cb..fb1f54f 100644 --- a/apps/backend/src/lib/http/handle-result.ts +++ b/apps/backend/src/lib/http/handle-result.ts @@ -1,7 +1,7 @@ -import type { Context } from 'hono' -import type { ContentfulStatusCode } from 'hono/utils/http-status' -import type { Result } from '@/lib/result' -import { mapAppErrorToProblem } from './problem-mapper' +import type { Result } from '@/lib/result'; +import type { Context } from 'hono'; +import type { ContentfulStatusCode } from 'hono/utils/http-status'; +import { mapAppErrorToProblem } from './problem-mapper'; export function handleResult( c: Context, @@ -9,12 +9,12 @@ export function handleResult( successStatus: ContentfulStatusCode = 200 ) { if (!result.ok) { - const requestId = c.get('requestId') as string | undefined - const instance = requestId ? `/requests/${requestId}` : undefined - const problem = mapAppErrorToProblem(result.error, instance) + const requestId = c.get('requestId') as string | undefined; + const instance = requestId ? `/requests/${requestId}` : undefined; + const problem = mapAppErrorToProblem(result.error, instance); - return c.json(problem, problem.status) + return c.json(problem, problem.status); } - return c.json(result.value, successStatus) -} \ No newline at end of file + return c.json(result.value, successStatus); +} diff --git a/apps/backend/src/lib/http/problem-builders.ts b/apps/backend/src/lib/http/problem-builders.ts index a159112..24b9a3a 100644 --- a/apps/backend/src/lib/http/problem-builders.ts +++ b/apps/backend/src/lib/http/problem-builders.ts @@ -1,10 +1,10 @@ // http/problem-builders.ts -import type { ProblemDetails } from './problem-details' +import type { ProblemDetails } from './problem-details'; export function validationProblem(params: { - detail?: string - instance?: string - errors?: Record + detail?: string; + instance?: string; + errors?: Record; }): ProblemDetails { return { type: 'https://api.myapp.dev/problems/validation', @@ -12,18 +12,18 @@ export function validationProblem(params: { status: 400, detail: params.detail ?? 'Invalid request data', instance: params.instance, - errors: params.errors - } + errors: params.errors, + }; } export function unexpectedProblem(params?: { - instance?: string + instance?: string; }): ProblemDetails { return { type: 'https://api.myapp.dev/problems/unexpected', title: 'Internal Server Error', status: 500, detail: 'Internal server error', - instance: params?.instance - } -} \ No newline at end of file + instance: params?.instance, + }; +} diff --git a/apps/backend/src/lib/http/problem-details.ts b/apps/backend/src/lib/http/problem-details.ts index 1631d7a..c530d36 100644 --- a/apps/backend/src/lib/http/problem-details.ts +++ b/apps/backend/src/lib/http/problem-details.ts @@ -1,10 +1,10 @@ -import type { ContentfulStatusCode } from 'hono/utils/http-status' +import type { ContentfulStatusCode } from 'hono/utils/http-status'; export type ProblemDetails = { - type: string - title: string - status: ContentfulStatusCode - detail?: string - instance?: string - errors?: Record -} \ No newline at end of file + type: string; + title: string; + status: ContentfulStatusCode; + detail?: string; + instance?: string; + errors?: Record; +}; diff --git a/apps/backend/src/lib/http/problem-mapper.ts b/apps/backend/src/lib/http/problem-mapper.ts index 386906a..b4be4a1 100644 --- a/apps/backend/src/lib/http/problem-mapper.ts +++ b/apps/backend/src/lib/http/problem-mapper.ts @@ -1,53 +1,50 @@ -import type { ContentfulStatusCode } from 'hono/utils/http-status' -import type { AppError } from '@/lib/errors' -import type { ProblemDetails } from './problem-details' +import type { AppError } from '@/lib/errors'; +import type { ContentfulStatusCode } from 'hono/utils/http-status'; +import type { ProblemDetails } from './problem-details'; function statusFromError(error: AppError): ContentfulStatusCode { switch (error.type) { case 'validation': - return 400 + return 400; case 'unauthorized': - return 401 + return 401; case 'forbidden': - return 403 + return 403; case 'not_found': - return 404 + return 404; case 'conflict': - return 409 + return 409; case 'unexpected': default: - return 500 + return 500; } } function titleFromStatus(status: ContentfulStatusCode): string { switch (status) { case 400: - return 'Bad Request' + return 'Bad Request'; case 401: - return 'Unauthorized' + return 'Unauthorized'; case 403: - return 'Forbidden' + return 'Forbidden'; case 404: - return 'Not Found' + return 'Not Found'; case 409: - return 'Conflict' + return 'Conflict'; default: - return 'Internal Server Error' + return 'Internal Server Error'; } } -export function mapAppErrorToProblem( - error: AppError, - instance?: string -): ProblemDetails { - const status = statusFromError(error) +export function mapAppErrorToProblem(error: AppError, instance?: string): ProblemDetails { + const status = statusFromError(error); return { type: `https://api.myapp.dev/problems/${error.type}`, title: titleFromStatus(status), status, detail: status === 500 ? 'Internal server error' : error.message, - instance - } -} \ No newline at end of file + instance, + }; +} diff --git a/apps/backend/src/lib/http/request-id.ts b/apps/backend/src/lib/http/request-id.ts index a7faf19..d0c6272 100644 --- a/apps/backend/src/lib/http/request-id.ts +++ b/apps/backend/src/lib/http/request-id.ts @@ -1,16 +1,16 @@ -import type { MiddlewareHandler } from 'hono' +import type { MiddlewareHandler } from 'hono'; type Env = { Variables: { - requestId: string - } -} + requestId: string; + }; +}; export const requestIdMiddleware: MiddlewareHandler = async (c, next) => { - const requestId = crypto.randomUUID() + const requestId = crypto.randomUUID(); - c.set('requestId', requestId) - c.header('X-Request-Id', requestId) + c.set('requestId', requestId); + c.header('X-Request-Id', requestId); - await next() -} \ No newline at end of file + await next(); +}; diff --git a/apps/backend/src/lib/http/validate.ts b/apps/backend/src/lib/http/validate.ts index 72fd9ab..772acf7 100644 --- a/apps/backend/src/lib/http/validate.ts +++ b/apps/backend/src/lib/http/validate.ts @@ -1,52 +1,48 @@ +import { zValidator } from '@hono/zod-validator'; +import type { ZodSchema } from 'zod'; +import { validationProblem } from './problem-builders'; +import { zodIssuesToRecord } from './zod-issues'; -import { zValidator } from '@hono/zod-validator' -import type { ZodSchema } from 'zod' -import { validationProblem } from './problem-builders' -import { zodIssuesToRecord } from './zod-issues' +type ValidationTarget = 'json' | 'query' | 'param' | 'header' | 'form'; -type ValidationTarget = 'json' | 'query' | 'param' | 'header' | 'form' - -function makeValidator( - target: ValidationTarget, - schema: TSchema -) { +function makeValidator(target: ValidationTarget, schema: TSchema) { return zValidator(target, schema, (result, c) => { if (result.success) { - return + return; } - const requestId = c.get('requestId') as string | undefined - const instance = requestId ? `/requests/${requestId}` : undefined + const requestId = c.get('requestId') as string | undefined; + const instance = requestId ? `/requests/${requestId}` : undefined; return c.json( validationProblem({ detail: `Invalid ${target} data`, instance, - errors: zodIssuesToRecord(result.error.issues) + errors: zodIssuesToRecord(result.error.issues), }), 400 - ) - }) + ); + }); } export const validate = { json(schema: TSchema) { - return makeValidator('json', schema) + return makeValidator('json', schema); }, query(schema: TSchema) { - return makeValidator('query', schema) + return makeValidator('query', schema); }, param(schema: TSchema) { - return makeValidator('param', schema) + return makeValidator('param', schema); }, header(schema: TSchema) { - return makeValidator('header', schema) + return makeValidator('header', schema); }, form(schema: TSchema) { - return makeValidator('form', schema) - } -} \ No newline at end of file + return makeValidator('form', schema); + }, +}; diff --git a/apps/backend/src/lib/http/zod-issues.ts b/apps/backend/src/lib/http/zod-issues.ts index eb77b49..1968cda 100644 --- a/apps/backend/src/lib/http/zod-issues.ts +++ b/apps/backend/src/lib/http/zod-issues.ts @@ -1,18 +1,16 @@ type IssueLike = { - path: PropertyKey[] - message: string -} + path: PropertyKey[]; + message: string; +}; -export function zodIssuesToRecord( - issues: IssueLike[] -): Record { - const out: Record = {} +export function zodIssuesToRecord(issues: IssueLike[]): Record { + const out: Record = {}; for (const issue of issues) { - const key = issue.path.length ? issue.path.join('.') : 'root' - out[key] ??= [] - out[key].push(issue.message) + const key = issue.path.length ? issue.path.join('.') : 'root'; + out[key] ??= []; + out[key].push(issue.message); } - return out -} \ No newline at end of file + return out; +} diff --git a/apps/backend/src/lib/result.ts b/apps/backend/src/lib/result.ts index 63143d9..5b2720d 100644 --- a/apps/backend/src/lib/result.ts +++ b/apps/backend/src/lib/result.ts @@ -1,14 +1,12 @@ // lib/result.ts import type { AppError } from '@/lib/errors'; -export type Result = - | { ok: true; value: T } - | { ok: false; error: E } +export type Result = { ok: true; value: T } | { ok: false; error: E }; export function ok(value: T): Result { - return { ok: true, value } + return { ok: true, value }; } export function err(error: E): Result { - return { ok: false, error } -} \ No newline at end of file + return { ok: false, 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 40c8337..2109c37 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 @@ -494,7 +494,7 @@ export async function updateAdminBookingStatus( ); } - if(input.status === 'NOSHOW' && booking.status !== 'CONFIRMED') { + if (input.status === 'NOSHOW' && booking.status !== 'CONFIRMED') { throw new AdminBookingServiceError( 'Solo se pueden marcar como no show las reservas confirmadas.', 409 @@ -517,7 +517,7 @@ export async function updateAdminBookingStatus( }, }); - if(input.status === 'COMPLETED' || input.status ==='NOSHOW') { + if (input.status === 'COMPLETED' || input.status === 'NOSHOW') { await db.courtBooking.update({ where: { id: booking.id }, data: { @@ -528,8 +528,8 @@ export async function updateAdminBookingStatus( // if the booking is cancelled we delete it to free up the slot, but we keep a log of it with the cancelled status await db.courtBooking.delete({ where: { id: booking.id }, - }) + }); } - return mapBookingResponse({...booking, status: input.status }); + return mapBookingResponse({ ...booking, status: input.status }); } diff --git a/apps/backend/src/modules/sport/services/sport.service.ts b/apps/backend/src/modules/sport/services/sport.service.ts index 0f32c19..f56ae65 100644 --- a/apps/backend/src/modules/sport/services/sport.service.ts +++ b/apps/backend/src/modules/sport/services/sport.service.ts @@ -1,7 +1,7 @@ import { Prisma, Sport } from '@/generated/prisma/client'; import { Errors } from '@/lib/errors'; import { db } from '@/lib/prisma'; -import { err, ok, Result } from '@/lib/result'; +import { Result, err, ok } from '@/lib/result'; import { v7 as uuidv7 } from 'uuid'; export type CreateSportInput = { diff --git a/apps/backend/src/modules/sport/sport.routes.ts b/apps/backend/src/modules/sport/sport.routes.ts index e557a06..ba1c332 100644 --- a/apps/backend/src/modules/sport/sport.routes.ts +++ b/apps/backend/src/modules/sport/sport.routes.ts @@ -1,3 +1,4 @@ +import { validate } from '@/lib/http/validate'; import { requireAuth } from '@/middlewares/require-auth.middleware'; import { requireSuperAdmin } from '@/middlewares/require-super-admin.middleware'; import { createSportHandler } from '@/modules/sport/handlers/create-sport.handler'; @@ -8,7 +9,6 @@ import { zValidator } from '@hono/zod-validator'; import { createSportSchema, updateSportSchema } from '@repo/api-contract'; import { Hono } from 'hono'; import { z } from 'zod'; -import { validate } from '@/lib/http/validate' export const sportRoutes = new Hono(); const sportIdParamsSchema = z.object({ id: z.uuid() }); diff --git a/apps/backend/test/complex/invite-complex-user.handler.test.ts b/apps/backend/test/complex/invite-complex-user.handler.test.ts index a70c167..6277a66 100644 --- a/apps/backend/test/complex/invite-complex-user.handler.test.ts +++ b/apps/backend/test/complex/invite-complex-user.handler.test.ts @@ -1,11 +1,9 @@ import { beforeEach, expect, mock, test } from 'bun:test'; -import type { InviteComplexUserResponse } from '@repo/api-contract'; import { createInviteComplexUserHandler } from '@/modules/complex/handlers/invite-complex-user.handler'; +import type { InviteComplexUserResponse } from '@repo/api-contract'; -const inviteComplexUserMock = mock( - async () => undefined as unknown as InviteComplexUserResponse -); +const inviteComplexUserMock = mock(async () => undefined as unknown as InviteComplexUserResponse); class MockComplexMembersError extends Error { status: 400 | 403 | 404 | 409; diff --git a/apps/backend/test/complex/invite-complex-user.test.ts b/apps/backend/test/complex/invite-complex-user.test.ts index 5dfb832..10d59ec 100644 --- a/apps/backend/test/complex/invite-complex-user.test.ts +++ b/apps/backend/test/complex/invite-complex-user.test.ts @@ -1,10 +1,10 @@ import { beforeEach, expect, mock, test } from 'bun:test'; -import { prismaMock, sendMailMock, transactionMock } from '../support/prisma.mock'; import { ComplexMembersError, inviteComplexUser, } from '@/modules/complex/services/complex-members.service'; +import { prismaMock, sendMailMock, transactionMock } from '../support/prisma.mock'; beforeEach(() => { prismaMock._reset(); diff --git a/apps/backend/test/sport/create-sport.handler.test.ts b/apps/backend/test/sport/create-sport.handler.test.ts index 6ad0bb0..6b4a2b5 100644 --- a/apps/backend/test/sport/create-sport.handler.test.ts +++ b/apps/backend/test/sport/create-sport.handler.test.ts @@ -20,9 +20,7 @@ mock.module('@/modules/sport/services/sport.service', () => ({ createSport: createSportMock, })); -const { createSportHandler } = await import( - '@/modules/sport/handlers/create-sport.handler' -); +const { createSportHandler } = await import('@/modules/sport/handlers/create-sport.handler'); type HandlerContext = { get: (key: 'requestId') => string | undefined; diff --git a/apps/backend/test/support/prisma.mock.ts b/apps/backend/test/support/prisma.mock.ts index 27029e3..3f706a4 100644 --- a/apps/backend/test/support/prisma.mock.ts +++ b/apps/backend/test/support/prisma.mock.ts @@ -5,14 +5,16 @@ import type { PrismaClient } from '@/generated/prisma/client'; import type { PrismaClientMock } from 'bun-mock-prisma'; export const prismaMock = createPrismaMock() as PrismaClientMock; -export const sendMailMock = mock(async (_input: { - to: string; - subject: string; - html: string; - text: string; -}) => undefined); -export const transactionMock = mock(async (fn: (tx: PrismaClientMock) => Promise) => - fn(prismaMock) +export const sendMailMock = mock( + async (_input: { + to: string; + subject: string; + html: string; + text: string; + }) => undefined +); +export const transactionMock = mock( + async (fn: (tx: PrismaClientMock) => Promise) => fn(prismaMock) ); export const dbMock = { complexUser: prismaMock.complexUser, diff --git a/apps/frontend/src/features/booking/booking-provider.tsx b/apps/frontend/src/features/booking/booking-provider.tsx index 8781102..4b4121b 100644 --- a/apps/frontend/src/features/booking/booking-provider.tsx +++ b/apps/frontend/src/features/booking/booking-provider.tsx @@ -255,7 +255,10 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { [bookingsQuery.data?.bookings, selectedDate] ); - const courts = useMemo(() => courtsQuery.data?.sort((a, b) => a.name.localeCompare(b.name)) ?? [], [courtsQuery.data]); + const courts = useMemo( + () => courtsQuery.data?.sort((a, b) => a.name.localeCompare(b.name)) ?? [], + [courtsQuery.data] + ); const filteredCourts = useMemo(() => { if (selectedSportId === 'all') return courts; @@ -293,7 +296,6 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { }, []); const currentTime = useMemo(() => { - if (!isTodayIso(selectedDate)) return null; const nowMinutes = timeToMinutes(now); const start = timeToMinutes(visibleTimeRange.start); @@ -345,10 +347,12 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { (segment?: BookingTimelineSegment) => { setSelectedSegment(segment ?? null); setBookingToolsOpen(true); - console.log(JSON.stringify(segment, null, 2)) - }, [selectedDate]); + console.log(JSON.stringify(segment, null, 2)); + }, + [selectedDate] + ); - const closeBookingTools = () => setBookingToolsOpen(false) + const closeBookingTools = () => setBookingToolsOpen(false); useEffect(() => { const handleOpenCreateBooking = () => { @@ -426,9 +430,9 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { errorMessage: courtsQuery.isError || bookingsQuery.isError ? extractMessage( - courtsQuery.error ?? bookingsQuery.error, - 'No pudimos cargar el panel de reservas.' - ) + courtsQuery.error ?? bookingsQuery.error, + 'No pudimos cargar el panel de reservas.' + ) : null, isCreateBookingOpen, createBookingError: createBookingMutation.isError @@ -449,7 +453,7 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { bookingToolsOpen, openBookingTools, closeBookingTools, - selectedSegment + selectedSegment, }), [ bookings, @@ -480,7 +484,7 @@ export function BookingProvider({ children, complex }: BookingProviderProps) { updateBookingStatus, viewMode, visibleTimeRange, - bookingToolsOpen + bookingToolsOpen, ] ); diff --git a/apps/frontend/src/features/booking/components/booking-timeline.tsx b/apps/frontend/src/features/booking/components/booking-timeline.tsx index 372fa94..f594e31 100644 --- a/apps/frontend/src/features/booking/components/booking-timeline.tsx +++ b/apps/frontend/src/features/booking/components/booking-timeline.tsx @@ -227,8 +227,7 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki segment.status === 'maintenance' && 'border-maintenance/80 bg-maintenance/75 text-maintenance-foreground', segment.booking?.status === 'COMPLETED' && - 'border-reserved/70 bg-reserved/25 dark:text-reserved-foreground text-gray-600 line-through', - + 'border-reserved/70 bg-reserved/25 dark:text-reserved-foreground text-gray-600 line-through' )} style={{ left: `calc(${left}% + 4px)`, @@ -242,10 +241,10 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki sportId: schedule.court.sportId, }); } else { - if(event.shiftKey && segment.booking?.status === 'CONFIRMED') { + if (event.shiftKey && segment.booking?.status === 'CONFIRMED') { updateBookingStatus(segment.booking.id, 'COMPLETED'); } else { - openBookingTools(segment); + openBookingTools(segment); } } }} @@ -269,7 +268,6 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki {segment.booking?.customerName ?? 'Mantenimiento'} - )} diff --git a/apps/frontend/src/features/booking/components/booking-toolbar.tsx b/apps/frontend/src/features/booking/components/booking-toolbar.tsx index d63893c..8569554 100644 --- a/apps/frontend/src/features/booking/components/booking-toolbar.tsx +++ b/apps/frontend/src/features/booking/components/booking-toolbar.tsx @@ -12,7 +12,7 @@ import { ChevronLeft, ChevronRight, Clock, SlidersHorizontal } from 'lucide-reac import { useBooking } from '../booking-provider'; import type { BookingStatusFilter } from '../booking.types'; import { fromIsoDateLocal, toIsoDateLocal } from '../lib/booking-time'; - + const timeRangeOptions = [ { label: '08:00 - 22:00', start: '08:00', end: '22:00' }, { label: '06:00 - 00:00', start: '06:00', end: '23:59' }, 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 debaf9d..f396bca 100644 --- a/apps/frontend/src/features/booking/components/booking-tools-dialog.tsx +++ b/apps/frontend/src/features/booking/components/booking-tools-dialog.tsx @@ -1,233 +1,232 @@ -import { ResponsiveDialog, ResponsiveDialogClose, ResponsiveDialogContent, ResponsiveDialogDescription, ResponsiveDialogFooter, ResponsiveDialogHeader, ResponsiveDialogTitle } from "@/components/ui/responsive-dialog"; -import { useBooking } from "../booking-provider"; -import { Button } from "@/components/ui/button"; +import { Button } from '@/components/ui/button'; import { - CheckCircle2, - Clock, - MapPin, - MessageCircle, - Phone, - User, - XCircle, - AlertTriangle, - BadgeCheck, -} from "lucide-react"; -import { cn } from "@/lib/utils"; -import { Separator } from "@/components/ui/separator"; + ResponsiveDialog, + ResponsiveDialogClose, + ResponsiveDialogContent, + ResponsiveDialogDescription, + ResponsiveDialogFooter, + ResponsiveDialogHeader, + ResponsiveDialogTitle, +} from '@/components/ui/responsive-dialog'; +import { Separator } from '@/components/ui/separator'; +import { cn } from '@/lib/utils'; +import { + AlertTriangle, + BadgeCheck, + CheckCircle2, + Clock, + MapPin, + MessageCircle, + Phone, + User, + XCircle, +} from 'lucide-react'; +import { useBooking } from '../booking-provider'; function formatDate(date: string | undefined) { - if (!date) return ""; + if (!date) return ''; - const formatted = new Intl.DateTimeFormat("es-AR", { - weekday: "long", - day: "numeric", - month: "long", - }).format(new Date(`${date}T00:00:00`)); + const formatted = new Intl.DateTimeFormat('es-AR', { + weekday: 'long', + day: 'numeric', + month: 'long', + }).format(new Date(`${date}T00:00:00`)); - return formatted - .split(" ") - .map((word, index) => { - if (index === 0 || index === 3) { - return word.charAt(0).toUpperCase() + word.slice(1); - } - return word; - }) - .join(" "); + return formatted + .split(' ') + .map((word, index) => { + if (index === 0 || index === 3) { + return word.charAt(0).toUpperCase() + word.slice(1); + } + return word; + }) + .join(' '); } const statusConfig: Record = { - - CONFIRMED: { - label: "Reservada", - className: "bg-emerald-500/15 text-emerald-400 border-emerald-500/30", - }, - COMPLETED: { - label: "Completada", - className: "bg-sky-500/15 text-sky-400 border-sky-500/30", - }, - CANCELLED: { - label: "Cancelada", - className: "bg-red-500/15 text-red-400 border-red-500/30", - }, - NOSHOW: { - label: "No show", - className: "bg-amber-500/15 text-amber-400 border-amber-500/30", - }, - + CONFIRMED: { + label: 'Reservada', + className: 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30', + }, + COMPLETED: { + label: 'Completada', + className: 'bg-sky-500/15 text-sky-400 border-sky-500/30', + }, + CANCELLED: { + label: 'Cancelada', + className: 'bg-red-500/15 text-red-400 border-red-500/30', + }, + NOSHOW: { + label: 'No show', + className: 'bg-amber-500/15 text-amber-400 border-amber-500/30', + }, }; export function BookingToolsDialog() { - const { - selectedSegment, - bookingToolsOpen, - closeBookingTools, - updateBookingStatus, - } = useBooking(); + const { selectedSegment, bookingToolsOpen, closeBookingTools, updateBookingStatus } = + useBooking(); + const status = statusConfig[selectedSegment?.booking?.status ?? 'CONFIRMED'] ?? { + label: selectedSegment?.booking?.status, + className: 'bg-slate-500/15 text-slate-300 border-slate-500/30', + }; - const status = statusConfig[selectedSegment?.booking?.status ?? "CONFIRMED"] ?? { - label: selectedSegment?.booking?.status, - className: "bg-slate-500/15 text-slate-300 border-slate-500/30", - }; - - const sendWhatsappReminder = () => { - const phone = selectedSegment?.booking?.customerPhone; - const message = ` + const sendWhatsappReminder = () => { + const phone = selectedSegment?.booking?.customerPhone; + const message = ` Hola ${selectedSegment?.booking?.customerName}. \nTe recordamos que tenés una reserva para el día *${formatDate(selectedSegment?.booking?.date)} de ${selectedSegment?.booking?.startTime} a ${selectedSegment?.booking?.endTime} en la cancha ${selectedSegment?.booking?.courtName} (${selectedSegment?.booking?.sport?.name})*. ¡Te esperamos! \nSi no vas a poder asistir, por favor avisanos para que otros clientes puedan reservar. Gracias.\n\n*Equipo de ${selectedSegment?.booking?.complexName}*`; - - const url = `https://wa.me/${phone}?text=${encodeURIComponent(message)}`; - window.open(url, '_blank'); - } - return ( - !open && closeBookingTools()} - > - event.preventDefault()} - > - - Detalles de la reserva - - Administra la reserva y su estado. - - + const url = `https://wa.me/${phone}?text=${encodeURIComponent(message)}`; + window.open(url, '_blank'); + }; -
-
- } - label="Cancha" - value={selectedSegment?.booking?.courtName ?? "-"} - helper={selectedSegment?.booking?.sport?.name} - withDivider - /> + return ( + !open && closeBookingTools()}> + event.preventDefault()} + > + + Detalles de la reserva + + Administra la reserva y su estado. + + - } - label="Estado actual" - value={status.label} - valueClassName="text-emerald-400 uppercase dark:text-emerald-500" - withDivider - /> +
+
+ } + label="Cancha" + value={selectedSegment?.booking?.courtName ?? '-'} + helper={selectedSegment?.booking?.sport?.name} + withDivider + /> - } - label="Cliente" - value={selectedSegment?.booking?.customerName ?? "-"} - /> + } + label="Estado actual" + value={status.label} + valueClassName="text-emerald-400 uppercase dark:text-emerald-500" + withDivider + /> - } - label="Fecha" - value={`${formatDate(selectedSegment?.booking?.date)}`} - withDivider - className="pt-10" - /> + } + label="Cliente" + value={selectedSegment?.booking?.customerName ?? '-'} + /> - } - label="Hora" - value={`${selectedSegment?.booking?.startTime} a ${selectedSegment?.booking?.endTime}`} - withDivider - className="pt-10" - /> + } + label="Fecha" + value={`${formatDate(selectedSegment?.booking?.date)}`} + withDivider + className="pt-10" + /> - } - label="Teléfono" - value={selectedSegment?.booking?.customerPhone ?? "-"} - className="pt-10" - /> + } + label="Hora" + value={`${selectedSegment?.booking?.startTime} a ${selectedSegment?.booking?.endTime}`} + withDivider + className="pt-10" + /> -
+ } + label="Teléfono" + value={selectedSegment?.booking?.customerPhone ?? '-'} + className="pt-10" + /> +
+
- + - +
+
+

Acciones disponibles

+

+ Elegí qué hacer según lo que ocurrió con el cliente. +

+
+
+ } + title="Completar reserva" + description="El cliente se presentó para usar la cancha." + className="border-emerald-500/40 bg-emerald-500/10 text-emerald-600 text-lg hover:bg-emerald-500/15 hover:text-esmerald-800" + onClick={() => { + updateBookingStatus(selectedSegment?.booking?.id!, 'COMPLETED'); + closeBookingTools(); + }} + /> -
-
-

Acciones disponibles

-

- Elegí qué hacer según lo que ocurrió con el cliente. -

-
-
- } - title="Completar reserva" - description="El cliente se presentó para usar la cancha." - className="border-emerald-500/40 bg-emerald-500/10 text-emerald-600 text-lg hover:bg-emerald-500/15 hover:text-esmerald-800" - onClick={() => updateBookingStatus(selectedSegment?.booking?.id!, 'COMPLETED')} - /> + } + title="Cancelar reserva" + description="El cliente avisó que no va a venir. La cancha vuelve a estar disponible." + className="border-red-500/40 bg-red-500/10 text-red-600 text-lg hover:bg-red-500/15 hover:text-red-800" + onClick={() => { + updateBookingStatus(selectedSegment?.booking?.id!, 'CANCELLED'); + closeBookingTools(); + }} + /> - } - title="Cancelar reserva" - description="El cliente avisó que no va a venir. La cancha vuelve a estar disponible." - className="border-red-500/40 bg-red-500/10 text-red-600 text-lg hover:bg-red-500/15 hover:text-red-800" - onClick={() => updateBookingStatus(selectedSegment?.booking?.id!, 'CANCELLED')} - /> + } + title="Enviar recordatorio" + description="Enviar un mensaje por WhatsApp al cliente." + className="border-sky-500/40 bg-sky-500/10 text-sky-600 text-lg hover:bg-sky-500/15 hover:text-sky-800" + onClick={sendWhatsappReminder} + /> - } - title="Enviar recordatorio" - description="Enviar un mensaje por WhatsApp al cliente." - className="border-sky-500/40 bg-sky-500/10 text-sky-600 text-lg hover:bg-sky-500/15 hover:text-sky-800" - onClick={sendWhatsappReminder} - /> + } + title="Marcar como No Show" + description="El cliente no vino y no canceló." + className="border-amber-500/40 bg-amber-500/10 text-amber-600 text-lg hover:bg-amber-500/15 hover:text-amber-800" + onClick={() => { + updateBookingStatus(selectedSegment?.booking?.id!, 'NOSHOW'); + closeBookingTools(); + }} + /> +
+
- } - title="Marcar como No Show" - description="El cliente no vino y no canceló." - className="border-amber-500/40 bg-amber-500/10 text-amber-600 text-lg hover:bg-amber-500/15 hover:text-amber-800" - onClick={() => updateBookingStatus(selectedSegment?.booking?.id!, 'NOSHOW')} - /> -
-
- - - - - - -
-
- ); + + + + + + + + ); } function DetailItem({ - icon, - label, - value, - helper, - valueClassName, - withDivider, - className, + icon, + label, + value, + helper, + valueClassName, + withDivider, + className, }: { - icon: React.ReactNode; - label: string; - value: string; - helper?: string; - valueClassName?: string; - withDivider?: boolean; - className?: string; + icon: React.ReactNode; + label: string; + value: string; + helper?: string; + valueClassName?: string; + withDivider?: boolean; + className?: string; }) { - - return ( + return ( +
+ {withDivider && (
- {withDivider && ( -
- )} + /> + )} -
- {icon} -
-
-

- {label} -

-

- {value} -

- {helper && ( -

- {helper} -

- )} -
-
- - ); +
+ {icon} +
+
+

{label}

+

+ {value} +

+ {helper &&

{helper}

} +
+
+ ); } function ActionButton({ - icon, - title, - description, - className, - onClick + icon, + title, + description, + className, + onClick, }: { - icon: React.ReactNode; - title: string; - description: string; - className: string; - onClick?: () => void; + icon: React.ReactNode; + title: string; + description: string; + className: string; + onClick?: () => void; }) { - return ( - - ); - -} \ No newline at end of file + return ( + + ); +} From 1059d767d5b17f4ad2ab9394337dd1af0451a161 Mon Sep 17 00:00:00 2001 From: Jose Selesan Date: Wed, 6 May 2026 17:10:23 -0300 Subject: [PATCH 3/3] View no shows in booking panel --- .../src/features/booking/booking-provider.tsx | 4 +++- .../booking/components/booking-timeline.tsx | 21 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/apps/frontend/src/features/booking/booking-provider.tsx b/apps/frontend/src/features/booking/booking-provider.tsx index 4b4121b..919976e 100644 --- a/apps/frontend/src/features/booking/booking-provider.tsx +++ b/apps/frontend/src/features/booking/booking-provider.tsx @@ -112,7 +112,9 @@ function makeTimelineHours(range: BookingTimeRange) { } function isActiveBooking(booking: AdminBooking) { - return booking.status === 'CONFIRMED' || booking.status === 'COMPLETED'; + return ( + booking.status === 'CONFIRMED' || booking.status === 'COMPLETED' || booking.status === 'NOSHOW' + ); } function getCourtBookings(court: Court, bookings: AdminBooking[], selectedDate: string) { diff --git a/apps/frontend/src/features/booking/components/booking-timeline.tsx b/apps/frontend/src/features/booking/components/booking-timeline.tsx index f594e31..c25192a 100644 --- a/apps/frontend/src/features/booking/components/booking-timeline.tsx +++ b/apps/frontend/src/features/booking/components/booking-timeline.tsx @@ -1,6 +1,6 @@ import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; -import { ChevronLeft, ChevronRight, Dumbbell, Plus, Users } from 'lucide-react'; +import { ChevronLeft, ChevronRight, Dumbbell, Plus, UserX, Users } from 'lucide-react'; import { useBooking } from '../booking-provider'; import type { BookingCourtSchedule, BookingTimelineSegment } from '../booking.types'; import { timeToMinutes } from '../lib/booking-time'; @@ -227,7 +227,9 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki segment.status === 'maintenance' && 'border-maintenance/80 bg-maintenance/75 text-maintenance-foreground', segment.booking?.status === 'COMPLETED' && - 'border-reserved/70 bg-reserved/25 dark:text-reserved-foreground text-gray-600 line-through' + 'border-reserved/70 bg-reserved/25 dark:text-reserved-foreground text-gray-600 line-through', + segment.booking?.status === 'NOSHOW' && + 'border-amber-500/60 bg-amber-500/50 text-amber-950 dark:text-amber-200' )} style={{ left: `calc(${left}% + 4px)`, @@ -240,6 +242,8 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki startTime: segment.startTime, sportId: schedule.court.sportId, }); + } else if (segment.booking?.status === 'NOSHOW') { + return; } else { if (event.shiftKey && segment.booking?.status === 'CONFIRMED') { updateBookingStatus(segment.booking.id, 'COMPLETED'); @@ -261,9 +265,16 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki ) : ( <> - - {segment.startTime} - {segment.endTime} - +
+ + {segment.startTime} - {segment.endTime} + + {segment.booking?.status === 'NOSHOW' && ( + + + + )} +
{segment.booking?.customerName ?? 'Mantenimiento'}