From 7948cb4a150cb18442397141c8087189870ec8e6 Mon Sep 17 00:00:00 2001 From: kiel997 Date: Tue, 21 Jul 2026 14:55:24 +0100 Subject: [PATCH 1/8] Add analytics events tracking endpoint --- backend/src/analytics/analytics.controller.ts | 20 +++++++++++++++++++ backend/src/analytics/analytics.module.ts | 17 ++++++++++------ backend/src/analytics/analytics.service.ts | 4 ++++ .../src/analytics/dtos/analytics-query.dto.ts | 15 ++++++++++++++ .../analytics/guards/analytics-admin.guard.ts | 8 ++++++++ .../providers/track-event.provider.ts | 14 +++++++++++++ 6 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 backend/src/analytics/analytics.controller.ts create mode 100644 backend/src/analytics/analytics.service.ts create mode 100644 backend/src/analytics/dtos/analytics-query.dto.ts create mode 100644 backend/src/analytics/guards/analytics-admin.guard.ts create mode 100644 backend/src/analytics/providers/track-event.provider.ts diff --git a/backend/src/analytics/analytics.controller.ts b/backend/src/analytics/analytics.controller.ts new file mode 100644 index 0000000..71fcc3c --- /dev/null +++ b/backend/src/analytics/analytics.controller.ts @@ -0,0 +1,20 @@ +import { Body,Controller, Post, UseGuards, ValidationPipe,} from '@nestjs/common'; +import { AnalyticsQueryDto } from './dtos/analytics-query.dto'; +import { TrackEventProvider } from './providers/track-event.provider'; +import { AnalyticsAdminGuard } from './guards/analytics-admin.guard'; + +@Controller('analytics') +export class AnalyticsController { + constructor( + private readonly trackEventProvider: TrackEventProvider, + ) {} + + @Post('events/track') + @UseGuards(AnalyticsAdminGuard) + async trackEvent( + @Body(new ValidationPipe()) + body: AnalyticsQueryDto, + ) { + return this.trackEventProvider.trackEvent(body); + } +} \ No newline at end of file diff --git a/backend/src/analytics/analytics.module.ts b/backend/src/analytics/analytics.module.ts index 8addb37..68e6801 100644 --- a/backend/src/analytics/analytics.module.ts +++ b/backend/src/analytics/analytics.module.ts @@ -1,10 +1,15 @@ import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { UsersAnalyticsListener } from './listeners/users-analytics.listener'; -import { AnalyticsEvent } from './entities/analytics-event.entity'; +import { AnalyticsController } from './analytics.controller'; +import { AnalyticsService } from './analytics.service'; +import { TrackEventProvider } from './providers/track-event.provider'; +import { AnalyticsAdminGuard } from './guards/analytics-admin.guard'; @Module({ - imports: [TypeOrmModule.forFeature([AnalyticsEvent])], - providers: [UsersAnalyticsListener], + controllers: [AnalyticsController], + providers: [ + AnalyticsService, + TrackEventProvider, + AnalyticsAdminGuard, + ], }) -export class AnalyticsModule {} +export class AnalyticsModule {} \ No newline at end of file diff --git a/backend/src/analytics/analytics.service.ts b/backend/src/analytics/analytics.service.ts new file mode 100644 index 0000000..9545fd9 --- /dev/null +++ b/backend/src/analytics/analytics.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AnalyticsService {} diff --git a/backend/src/analytics/dtos/analytics-query.dto.ts b/backend/src/analytics/dtos/analytics-query.dto.ts new file mode 100644 index 0000000..575cfd1 --- /dev/null +++ b/backend/src/analytics/dtos/analytics-query.dto.ts @@ -0,0 +1,15 @@ +import { IsNotEmpty, IsObject, IsOptional, IsString } from 'class-validator'; + +export class AnalyticsQueryDto { + @IsString() + @IsNotEmpty() + event?: string; + + @IsOptional() + @IsString() + source?: string; + + @IsOptional() + @IsObject() + metadata?: Record; +} \ No newline at end of file diff --git a/backend/src/analytics/guards/analytics-admin.guard.ts b/backend/src/analytics/guards/analytics-admin.guard.ts new file mode 100644 index 0000000..99ada30 --- /dev/null +++ b/backend/src/analytics/guards/analytics-admin.guard.ts @@ -0,0 +1,8 @@ +import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; + +@Injectable() +export class AnalyticsAdminGuard implements CanActivate { + canActivate(context: ExecutionContext): boolean { + return true; + } +} \ No newline at end of file diff --git a/backend/src/analytics/providers/track-event.provider.ts b/backend/src/analytics/providers/track-event.provider.ts new file mode 100644 index 0000000..3c5c90a --- /dev/null +++ b/backend/src/analytics/providers/track-event.provider.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@nestjs/common'; +import { AnalyticsQueryDto } from '../dtos/analytics-query.dto'; + +@Injectable() +export class TrackEventProvider { + async trackEvent(data: AnalyticsQueryDto) { + return { + success: true, + message: 'Event tracked successfully', + data, + timestamp: new Date().toISOString(), + }; + } +} \ No newline at end of file From ef733bedf0ff3b90675266608f825043b47456e6 Mon Sep 17 00:00:00 2001 From: kiel997 Date: Thu, 23 Jul 2026 10:44:33 +0100 Subject: [PATCH 2/8] fix: stop tracking tsbuildinfo/dist, was causing stale CI build errors --- backend/.gitignore | 2 ++ backend/tsconfig.build.tsbuildinfo | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 backend/tsconfig.build.tsbuildinfo diff --git a/backend/.gitignore b/backend/.gitignore index 50de04c..493d067 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -55,3 +55,5 @@ pids # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json +*.tsbuildinfo +dist/ diff --git a/backend/tsconfig.build.tsbuildinfo b/backend/tsconfig.build.tsbuildinfo deleted file mode 100644 index 22e0d77..0000000 --- a/backend/tsconfig.build.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2023.full.d.ts","../node_modules/reflect-metadata/index.d.ts","../node_modules/typeorm/metadata/types/relationtypes.d.ts","../node_modules/typeorm/metadata/types/deferrabletype.d.ts","../node_modules/typeorm/metadata/types/ondeletetype.d.ts","../node_modules/typeorm/metadata/types/onupdatetype.d.ts","../node_modules/typeorm/decorator/options/relationoptions.d.ts","../node_modules/typeorm/metadata/types/propertytypeinfunction.d.ts","../node_modules/typeorm/common/objecttype.d.ts","../node_modules/typeorm/common/entitytarget.d.ts","../node_modules/typeorm/metadata/types/relationtypeinfunction.d.ts","../node_modules/typeorm/metadata-args/relationmetadataargs.d.ts","../node_modules/typeorm/driver/types/columntypes.d.ts","../node_modules/typeorm/decorator/options/valuetransformer.d.ts","../node_modules/typeorm/decorator/options/columncommonoptions.d.ts","../node_modules/typeorm/decorator/options/columnoptions.d.ts","../node_modules/typeorm/metadata-args/types/columnmode.d.ts","../node_modules/typeorm/metadata-args/columnmetadataargs.d.ts","../node_modules/typeorm/common/objectliteral.d.ts","../node_modules/typeorm/schema-builder/options/tablecolumnoptions.d.ts","../node_modules/typeorm/schema-builder/table/tablecolumn.d.ts","../node_modules/typeorm/schema-builder/options/viewoptions.d.ts","../node_modules/typeorm/schema-builder/view/view.d.ts","../node_modules/typeorm/naming-strategy/namingstrategyinterface.d.ts","../node_modules/typeorm/metadata/foreignkeymetadata.d.ts","../node_modules/typeorm/metadata/relationmetadata.d.ts","../node_modules/typeorm/metadata-args/embeddedmetadataargs.d.ts","../node_modules/typeorm/metadata-args/relationidmetadataargs.d.ts","../node_modules/typeorm/metadata/relationidmetadata.d.ts","../node_modules/typeorm/metadata/relationcountmetadata.d.ts","../node_modules/typeorm/metadata/types/eventlistenertypes.d.ts","../node_modules/typeorm/metadata-args/entitylistenermetadataargs.d.ts","../node_modules/typeorm/metadata/entitylistenermetadata.d.ts","../node_modules/typeorm/metadata-args/uniquemetadataargs.d.ts","../node_modules/typeorm/metadata/uniquemetadata.d.ts","../node_modules/typeorm/metadata/embeddedmetadata.d.ts","../node_modules/typeorm/metadata/columnmetadata.d.ts","../node_modules/typeorm/driver/types/ctecapabilities.d.ts","../node_modules/typeorm/driver/types/mappedcolumntypes.d.ts","../node_modules/typeorm/driver/query.d.ts","../node_modules/typeorm/driver/sqlinmemory.d.ts","../node_modules/typeorm/schema-builder/schemabuilder.d.ts","../node_modules/typeorm/driver/types/datatypedefaults.d.ts","../node_modules/typeorm/entity-schema/entityschemaindexoptions.d.ts","../node_modules/typeorm/driver/types/geojsontypes.d.ts","../node_modules/typeorm/decorator/options/spatialcolumnoptions.d.ts","../node_modules/typeorm/decorator/options/foreignkeyoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacolumnforeignkeyoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacolumnoptions.d.ts","../node_modules/typeorm/decorator/options/joincolumnoptions.d.ts","../node_modules/typeorm/decorator/options/jointablemultiplecolumnsoptions.d.ts","../node_modules/typeorm/decorator/options/jointableoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemarelationoptions.d.ts","../node_modules/typeorm/find-options/orderbycondition.d.ts","../node_modules/typeorm/metadata/types/tabletypes.d.ts","../node_modules/typeorm/entity-schema/entityschemauniqueoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacheckoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaexclusionoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemainheritanceoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemarelationidoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaforeignkeyoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaoptions.d.ts","../node_modules/typeorm/entity-schema/entityschema.d.ts","../node_modules/typeorm/logger/logger.d.ts","../node_modules/typeorm/logger/loggeroptions.d.ts","../node_modules/typeorm/driver/types/databasetype.d.ts","../node_modules/typeorm/cache/queryresultcacheoptions.d.ts","../node_modules/typeorm/cache/queryresultcache.d.ts","../node_modules/typeorm/common/mixedlist.d.ts","../node_modules/typeorm/data-source/basedatasourceoptions.d.ts","../node_modules/typeorm/driver/types/replicationmode.d.ts","../node_modules/typeorm/schema-builder/options/tableforeignkeyoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableforeignkey.d.ts","../node_modules/typeorm/driver/types/upserttype.d.ts","../node_modules/typeorm/driver/driver.d.ts","../node_modules/typeorm/find-options/joinoptions.d.ts","../node_modules/typeorm/find-options/findoperatortype.d.ts","../node_modules/typeorm/find-options/findoperator.d.ts","../node_modules/typeorm/platform/platformtools.d.ts","../node_modules/typeorm/driver/mongodb/bson.typings.d.ts","../node_modules/typeorm/driver/mongodb/typings.d.ts","../node_modules/typeorm/find-options/equaloperator.d.ts","../node_modules/typeorm/find-options/findoptionswhere.d.ts","../node_modules/typeorm/find-options/findoptionsselect.d.ts","../node_modules/typeorm/find-options/findoptionsrelations.d.ts","../node_modules/typeorm/find-options/findoptionsorder.d.ts","../node_modules/typeorm/find-options/findoneoptions.d.ts","../node_modules/typeorm/find-options/findmanyoptions.d.ts","../node_modules/typeorm/common/deeppartial.d.ts","../node_modules/typeorm/repository/saveoptions.d.ts","../node_modules/typeorm/repository/removeoptions.d.ts","../node_modules/typeorm/find-options/mongodb/mongofindoneoptions.d.ts","../node_modules/typeorm/find-options/mongodb/mongofindmanyoptions.d.ts","../node_modules/typeorm/schema-builder/options/tableuniqueoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableunique.d.ts","../node_modules/typeorm/subscriber/broadcasterresult.d.ts","../node_modules/typeorm/subscriber/event/transactioncommitevent.d.ts","../node_modules/typeorm/subscriber/event/transactionrollbackevent.d.ts","../node_modules/typeorm/subscriber/event/transactionstartevent.d.ts","../node_modules/typeorm/subscriber/event/updateevent.d.ts","../node_modules/typeorm/subscriber/event/removeevent.d.ts","../node_modules/typeorm/subscriber/event/insertevent.d.ts","../node_modules/typeorm/subscriber/event/loadevent.d.ts","../node_modules/typeorm/subscriber/event/softremoveevent.d.ts","../node_modules/typeorm/subscriber/event/recoverevent.d.ts","../node_modules/typeorm/subscriber/event/queryevent.d.ts","../node_modules/typeorm/subscriber/entitysubscriberinterface.d.ts","../node_modules/typeorm/subscriber/broadcaster.d.ts","../node_modules/typeorm/schema-builder/options/tablecheckoptions.d.ts","../node_modules/typeorm/metadata-args/checkmetadataargs.d.ts","../node_modules/typeorm/metadata/checkmetadata.d.ts","../node_modules/typeorm/schema-builder/table/tablecheck.d.ts","../node_modules/typeorm/schema-builder/options/tableexclusionoptions.d.ts","../node_modules/typeorm/metadata-args/exclusionmetadataargs.d.ts","../node_modules/typeorm/metadata/exclusionmetadata.d.ts","../node_modules/typeorm/schema-builder/table/tableexclusion.d.ts","../node_modules/typeorm/driver/mongodb/mongoqueryrunner.d.ts","../node_modules/typeorm/query-builder/querypartialentity.d.ts","../node_modules/typeorm/query-runner/queryresult.d.ts","../node_modules/typeorm/query-builder/result/insertresult.d.ts","../node_modules/typeorm/query-builder/result/updateresult.d.ts","../node_modules/typeorm/query-builder/result/deleteresult.d.ts","../node_modules/typeorm/entity-manager/mongoentitymanager.d.ts","../node_modules/typeorm/repository/mongorepository.d.ts","../node_modules/typeorm/find-options/findtreeoptions.d.ts","../node_modules/typeorm/repository/treerepository.d.ts","../node_modules/typeorm/query-builder/transformer/plainobjecttonewentitytransformer.d.ts","../node_modules/typeorm/driver/types/isolationlevel.d.ts","../node_modules/typeorm/query-builder/whereexpressionbuilder.d.ts","../node_modules/typeorm/query-builder/brackets.d.ts","../node_modules/typeorm/query-builder/insertorupdateoptions.d.ts","../node_modules/typeorm/repository/upsertoptions.d.ts","../node_modules/typeorm/common/pickkeysbytype.d.ts","../node_modules/typeorm/entity-manager/entitymanager.d.ts","../node_modules/typeorm/repository/repository.d.ts","../node_modules/typeorm/migration/migrationinterface.d.ts","../node_modules/typeorm/migration/migration.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectionoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectionoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlite/sqliteconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/defaultauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryaccesstokenauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorydefaultauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsiappserviceauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsivmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorypasswordauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryserviceprincipalsecret.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/ntlmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectionoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectionoptions.d.ts","../node_modules/typeorm/driver/mongodb/mongoconnectionoptions.d.ts","../node_modules/typeorm/driver/cordova/cordovaconnectionoptions.d.ts","../node_modules/typeorm/driver/sqljs/sqljsconnectionoptions.d.ts","../node_modules/typeorm/driver/react-native/reactnativeconnectionoptions.d.ts","../node_modules/typeorm/driver/nativescript/nativescriptconnectionoptions.d.ts","../node_modules/typeorm/driver/expo/expoconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-mysql/auroramysqlconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/aurora-mysql/auroramysqlconnectionoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-postgres/aurorapostgresconnectionoptions.d.ts","../node_modules/typeorm/driver/better-sqlite3/bettersqlite3connectionoptions.d.ts","../node_modules/typeorm/driver/capacitor/capacitorconnectionoptions.d.ts","../node_modules/typeorm/connection/baseconnectionoptions.d.ts","../node_modules/typeorm/driver/spanner/spannerconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/spanner/spannerconnectionoptions.d.ts","../node_modules/typeorm/data-source/datasourceoptions.d.ts","../node_modules/typeorm/entity-manager/sqljsentitymanager.d.ts","../node_modules/typeorm/query-builder/relationloader.d.ts","../node_modules/typeorm/query-builder/relationidloader.d.ts","../node_modules/typeorm/data-source/datasource.d.ts","../node_modules/typeorm/metadata-args/tablemetadataargs.d.ts","../node_modules/typeorm/metadata/types/treetypes.d.ts","../node_modules/typeorm/metadata/types/closuretreeoptions.d.ts","../node_modules/typeorm/metadata-args/treemetadataargs.d.ts","../node_modules/typeorm/metadata/entitymetadata.d.ts","../node_modules/typeorm/metadata-args/indexmetadataargs.d.ts","../node_modules/typeorm/metadata/indexmetadata.d.ts","../node_modules/typeorm/schema-builder/options/tableindexoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableindex.d.ts","../node_modules/typeorm/schema-builder/options/tableoptions.d.ts","../node_modules/typeorm/schema-builder/table/table.d.ts","../node_modules/typeorm/query-runner/queryrunner.d.ts","../node_modules/typeorm/query-builder/querybuildercte.d.ts","../node_modules/typeorm/query-builder/alias.d.ts","../node_modules/typeorm/query-builder/joinattribute.d.ts","../node_modules/typeorm/query-builder/relation-id/relationidattribute.d.ts","../node_modules/typeorm/query-builder/relation-count/relationcountattribute.d.ts","../node_modules/typeorm/query-builder/selectquery.d.ts","../node_modules/typeorm/query-builder/selectquerybuilderoption.d.ts","../node_modules/typeorm/query-builder/whereclause.d.ts","../node_modules/typeorm/query-builder/queryexpressionmap.d.ts","../node_modules/typeorm/query-builder/updatequerybuilder.d.ts","../node_modules/typeorm/query-builder/deletequerybuilder.d.ts","../node_modules/typeorm/query-builder/softdeletequerybuilder.d.ts","../node_modules/typeorm/query-builder/insertquerybuilder.d.ts","../node_modules/typeorm/query-builder/relationquerybuilder.d.ts","../node_modules/typeorm/query-builder/notbrackets.d.ts","../node_modules/typeorm/query-builder/querybuilder.d.ts","../node_modules/typeorm/query-builder/selectquerybuilder.d.ts","../node_modules/typeorm/metadata-args/relationcountmetadataargs.d.ts","../node_modules/typeorm/metadata-args/namingstrategymetadataargs.d.ts","../node_modules/typeorm/metadata-args/joincolumnmetadataargs.d.ts","../node_modules/typeorm/metadata-args/jointablemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entitysubscribermetadataargs.d.ts","../node_modules/typeorm/metadata-args/inheritancemetadataargs.d.ts","../node_modules/typeorm/metadata-args/discriminatorvaluemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entityrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionentitymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/generatedmetadataargs.d.ts","../node_modules/typeorm/metadata-args/foreignkeymetadataargs.d.ts","../node_modules/typeorm/metadata-args/metadataargsstorage.d.ts","../node_modules/typeorm/connection/connectionmanager.d.ts","../node_modules/typeorm/globals.d.ts","../node_modules/typeorm/container.d.ts","../node_modules/typeorm/common/relationtype.d.ts","../node_modules/typeorm/error/typeormerror.d.ts","../node_modules/typeorm/error/cannotreflectmethodparametertypeerror.d.ts","../node_modules/typeorm/error/alreadyhasactiveconnectionerror.d.ts","../node_modules/typeorm/persistence/subjectchangemap.d.ts","../node_modules/typeorm/persistence/subject.d.ts","../node_modules/typeorm/error/subjectwithoutidentifiererror.d.ts","../node_modules/typeorm/error/cannotconnectalreadyconnectederror.d.ts","../node_modules/typeorm/error/locknotsupportedongivendrivererror.d.ts","../node_modules/typeorm/error/connectionisnotseterror.d.ts","../node_modules/typeorm/error/cannotcreateentityidmaperror.d.ts","../node_modules/typeorm/error/metadataalreadyexistserror.d.ts","../node_modules/typeorm/error/cannotdetermineentityerror.d.ts","../node_modules/typeorm/error/updatevaluesmissingerror.d.ts","../node_modules/typeorm/error/treerepositorynotsupportederror.d.ts","../node_modules/typeorm/error/customrepositorynotfounderror.d.ts","../node_modules/typeorm/error/transactionnotstartederror.d.ts","../node_modules/typeorm/error/transactionalreadystartederror.d.ts","../node_modules/typeorm/error/entitynotfounderror.d.ts","../node_modules/typeorm/error/entitymetadatanotfounderror.d.ts","../node_modules/typeorm/error/mustbeentityerror.d.ts","../node_modules/typeorm/error/optimisticlockversionmismatcherror.d.ts","../node_modules/typeorm/error/limitonupdatenotsupportederror.d.ts","../node_modules/typeorm/error/primarycolumncannotbenullableerror.d.ts","../node_modules/typeorm/error/customrepositorycannotinheritrepositoryerror.d.ts","../node_modules/typeorm/error/queryrunnerprovideralreadyreleasederror.d.ts","../node_modules/typeorm/error/cannotattachtreechildrenentityerror.d.ts","../node_modules/typeorm/error/customrepositorydoesnothaveentityerror.d.ts","../node_modules/typeorm/error/missingdeletedatecolumnerror.d.ts","../node_modules/typeorm/error/noconnectionforrepositoryerror.d.ts","../node_modules/typeorm/error/circularrelationserror.d.ts","../node_modules/typeorm/error/returningstatementnotsupportederror.d.ts","../node_modules/typeorm/error/usingjointableisnotallowederror.d.ts","../node_modules/typeorm/error/missingjoincolumnerror.d.ts","../node_modules/typeorm/error/missingprimarycolumnerror.d.ts","../node_modules/typeorm/error/entitypropertynotfounderror.d.ts","../node_modules/typeorm/error/missingdrivererror.d.ts","../node_modules/typeorm/error/driverpackagenotinstallederror.d.ts","../node_modules/typeorm/error/cannotgetentitymanagernotconnectederror.d.ts","../node_modules/typeorm/error/connectionnotfounderror.d.ts","../node_modules/typeorm/error/noversionorupdatedatecolumnerror.d.ts","../node_modules/typeorm/error/insertvaluesmissingerror.d.ts","../node_modules/typeorm/error/optimisticlockcannotbeusederror.d.ts","../node_modules/typeorm/error/metadatawithsuchnamealreadyexistserror.d.ts","../node_modules/typeorm/error/driveroptionnotseterror.d.ts","../node_modules/typeorm/error/findrelationsnotfounderror.d.ts","../node_modules/typeorm/error/pessimisticlocktransactionrequirederror.d.ts","../node_modules/typeorm/error/repositorynottreeerror.d.ts","../node_modules/typeorm/error/datatypenotsupportederror.d.ts","../node_modules/typeorm/error/initializedrelationerror.d.ts","../node_modules/typeorm/error/missingjointableerror.d.ts","../node_modules/typeorm/error/queryfailederror.d.ts","../node_modules/typeorm/error/noneedtoreleaseentitymanagererror.d.ts","../node_modules/typeorm/error/usingjoincolumnonlyononesideallowederror.d.ts","../node_modules/typeorm/error/usingjointableonlyononesideallowederror.d.ts","../node_modules/typeorm/error/subjectremovedandupdatederror.d.ts","../node_modules/typeorm/error/persistedentitynotfounderror.d.ts","../node_modules/typeorm/error/usingjoincolumnisnotallowederror.d.ts","../node_modules/typeorm/error/columntypeundefinederror.d.ts","../node_modules/typeorm/error/queryrunneralreadyreleasederror.d.ts","../node_modules/typeorm/error/offsetwithoutlimitnotsupportederror.d.ts","../node_modules/typeorm/error/cannotexecutenotconnectederror.d.ts","../node_modules/typeorm/error/noconnectionoptionerror.d.ts","../node_modules/typeorm/error/forbiddentransactionmodeoverrideerror.d.ts","../node_modules/typeorm/error/index.d.ts","../node_modules/typeorm/decorator/options/columnwithlengthoptions.d.ts","../node_modules/typeorm/decorator/options/columnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/columnenumoptions.d.ts","../node_modules/typeorm/decorator/options/columnembeddedoptions.d.ts","../node_modules/typeorm/decorator/options/columnhstoreoptions.d.ts","../node_modules/typeorm/decorator/options/columnwithwidthoptions.d.ts","../node_modules/typeorm/decorator/columns/column.d.ts","../node_modules/typeorm/decorator/columns/createdatecolumn.d.ts","../node_modules/typeorm/decorator/columns/deletedatecolumn.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnuuidoptions.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnidentityoptions.d.ts","../node_modules/typeorm/decorator/columns/primarygeneratedcolumn.d.ts","../node_modules/typeorm/decorator/columns/primarycolumn.d.ts","../node_modules/typeorm/decorator/columns/updatedatecolumn.d.ts","../node_modules/typeorm/decorator/columns/versioncolumn.d.ts","../node_modules/typeorm/decorator/options/virtualcolumnoptions.d.ts","../node_modules/typeorm/decorator/columns/virtualcolumn.d.ts","../node_modules/typeorm/decorator/options/viewcolumnoptions.d.ts","../node_modules/typeorm/decorator/columns/viewcolumn.d.ts","../node_modules/typeorm/decorator/columns/objectidcolumn.d.ts","../node_modules/typeorm/decorator/listeners/afterinsert.d.ts","../node_modules/typeorm/decorator/listeners/afterload.d.ts","../node_modules/typeorm/decorator/listeners/afterremove.d.ts","../node_modules/typeorm/decorator/listeners/aftersoftremove.d.ts","../node_modules/typeorm/decorator/listeners/afterrecover.d.ts","../node_modules/typeorm/decorator/listeners/afterupdate.d.ts","../node_modules/typeorm/decorator/listeners/beforeinsert.d.ts","../node_modules/typeorm/decorator/listeners/beforeremove.d.ts","../node_modules/typeorm/decorator/listeners/beforesoftremove.d.ts","../node_modules/typeorm/decorator/listeners/beforerecover.d.ts","../node_modules/typeorm/decorator/listeners/beforeupdate.d.ts","../node_modules/typeorm/decorator/listeners/eventsubscriber.d.ts","../node_modules/typeorm/decorator/options/indexoptions.d.ts","../node_modules/typeorm/decorator/options/entityoptions.d.ts","../node_modules/typeorm/decorator/relations/joincolumn.d.ts","../node_modules/typeorm/decorator/relations/jointable.d.ts","../node_modules/typeorm/decorator/relations/manytomany.d.ts","../node_modules/typeorm/decorator/relations/manytoone.d.ts","../node_modules/typeorm/decorator/relations/onetomany.d.ts","../node_modules/typeorm/decorator/relations/onetoone.d.ts","../node_modules/typeorm/decorator/relations/relationcount.d.ts","../node_modules/typeorm/decorator/relations/relationid.d.ts","../node_modules/typeorm/decorator/entity/entity.d.ts","../node_modules/typeorm/decorator/entity/childentity.d.ts","../node_modules/typeorm/decorator/entity/tableinheritance.d.ts","../node_modules/typeorm/decorator/options/viewentityoptions.d.ts","../node_modules/typeorm/decorator/entity-view/viewentity.d.ts","../node_modules/typeorm/decorator/tree/treelevelcolumn.d.ts","../node_modules/typeorm/decorator/tree/treeparent.d.ts","../node_modules/typeorm/decorator/tree/treechildren.d.ts","../node_modules/typeorm/decorator/tree/tree.d.ts","../node_modules/typeorm/decorator/index.d.ts","../node_modules/typeorm/decorator/foreignkey.d.ts","../node_modules/typeorm/decorator/options/uniqueoptions.d.ts","../node_modules/typeorm/decorator/unique.d.ts","../node_modules/typeorm/decorator/check.d.ts","../node_modules/typeorm/decorator/exclusion.d.ts","../node_modules/typeorm/decorator/generated.d.ts","../node_modules/typeorm/decorator/entityrepository.d.ts","../node_modules/typeorm/find-options/operator/and.d.ts","../node_modules/typeorm/find-options/operator/or.d.ts","../node_modules/typeorm/find-options/operator/any.d.ts","../node_modules/typeorm/find-options/operator/arraycontainedby.d.ts","../node_modules/typeorm/find-options/operator/arraycontains.d.ts","../node_modules/typeorm/find-options/operator/arrayoverlap.d.ts","../node_modules/typeorm/find-options/operator/between.d.ts","../node_modules/typeorm/find-options/operator/equal.d.ts","../node_modules/typeorm/find-options/operator/in.d.ts","../node_modules/typeorm/find-options/operator/isnull.d.ts","../node_modules/typeorm/find-options/operator/lessthan.d.ts","../node_modules/typeorm/find-options/operator/lessthanorequal.d.ts","../node_modules/typeorm/find-options/operator/ilike.d.ts","../node_modules/typeorm/find-options/operator/like.d.ts","../node_modules/typeorm/find-options/operator/morethan.d.ts","../node_modules/typeorm/find-options/operator/morethanorequal.d.ts","../node_modules/typeorm/find-options/operator/not.d.ts","../node_modules/typeorm/find-options/operator/raw.d.ts","../node_modules/typeorm/find-options/operator/jsoncontains.d.ts","../node_modules/typeorm/find-options/findoptionsutils.d.ts","../node_modules/typeorm/logger/abstractlogger.d.ts","../node_modules/typeorm/logger/advancedconsolelogger.d.ts","../node_modules/typeorm/logger/formattedconsolelogger.d.ts","../node_modules/typeorm/logger/simpleconsolelogger.d.ts","../node_modules/typeorm/logger/filelogger.d.ts","../node_modules/typeorm/repository/abstractrepository.d.ts","../node_modules/typeorm/data-source/index.d.ts","../node_modules/typeorm/repository/baseentity.d.ts","../node_modules/typeorm/driver/sqlserver/mssqlparameter.d.ts","../node_modules/typeorm/connection/connectionoptionsreader.d.ts","../node_modules/typeorm/connection/connectionoptions.d.ts","../node_modules/typeorm/connection/connection.d.ts","../node_modules/typeorm/migration/migrationexecutor.d.ts","../node_modules/typeorm/naming-strategy/defaultnamingstrategy.d.ts","../node_modules/typeorm/naming-strategy/legacyoraclenamingstrategy.d.ts","../node_modules/typeorm/entity-schema/entityschemaembeddedcolumnoptions.d.ts","../node_modules/typeorm/schema-builder/rdbmsschemabuilder.d.ts","../node_modules/typeorm/util/instancechecker.d.ts","../node_modules/typeorm/repository/findtreesoptions.d.ts","../node_modules/typeorm/util/treerepositoryutils.d.ts","../node_modules/typeorm/index.d.ts","./data-source.ts","../node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../node_modules/rxjs/dist/types/internal/subscription.d.ts","../node_modules/rxjs/dist/types/internal/subscriber.d.ts","../node_modules/rxjs/dist/types/internal/operator.d.ts","../node_modules/rxjs/dist/types/internal/observable.d.ts","../node_modules/rxjs/dist/types/internal/types.d.ts","../node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../node_modules/rxjs/dist/types/internal/operators/count.d.ts","../node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/every.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../node_modules/rxjs/dist/types/internal/operators/find.d.ts","../node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../node_modules/rxjs/dist/types/internal/operators/first.d.ts","../node_modules/rxjs/dist/types/internal/subject.d.ts","../node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/last.d.ts","../node_modules/rxjs/dist/types/internal/operators/map.d.ts","../node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../node_modules/rxjs/dist/types/internal/notification.d.ts","../node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/max.d.ts","../node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/min.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/race.d.ts","../node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../node_modules/rxjs/dist/types/internal/operators/share.d.ts","../node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/single.d.ts","../node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../node_modules/rxjs/dist/types/internal/operators/take.d.ts","../node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../node_modules/rxjs/dist/types/internal/operators/window.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../node_modules/rxjs/dist/types/operators/index.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../node_modules/rxjs/dist/types/internal/scheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../node_modules/rxjs/dist/types/testing/index.d.ts","../node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../node_modules/rxjs/dist/types/internal/util/identity.d.ts","../node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../node_modules/rxjs/dist/types/internal/util/noop.d.ts","../node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../node_modules/rxjs/dist/types/internal/observable/from.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../node_modules/rxjs/dist/types/internal/observable/never.d.ts","../node_modules/rxjs/dist/types/internal/observable/of.d.ts","../node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../node_modules/rxjs/dist/types/internal/observable/race.d.ts","../node_modules/rxjs/dist/types/internal/observable/range.d.ts","../node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../node_modules/rxjs/dist/types/internal/observable/using.d.ts","../node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../node_modules/rxjs/dist/types/internal/config.d.ts","../node_modules/rxjs/dist/types/index.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../node_modules/@nestjs/common/interfaces/type.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../node_modules/@nestjs/common/enums/request-method.enum.d.ts","../node_modules/@nestjs/common/enums/http-status.enum.d.ts","../node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../node_modules/@nestjs/common/enums/version-type.enum.d.ts","../node_modules/@nestjs/common/enums/index.d.ts","../node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../node_modules/@nestjs/common/services/logger.service.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/index.d.ts","../node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/index.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../node_modules/@nestjs/common/interfaces/index.d.ts","../node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/index.d.ts","../node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/index.d.ts","../node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/index.d.ts","../node_modules/@nestjs/common/decorators/index.d.ts","../node_modules/@nestjs/common/exceptions/intrinsic.exception.d.ts","../node_modules/@nestjs/common/exceptions/http.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../node_modules/@nestjs/common/exceptions/index.d.ts","../node_modules/@nestjs/common/services/console-logger.service.d.ts","../node_modules/@nestjs/common/services/utils/filter-log-levels.util.d.ts","../node_modules/@nestjs/common/services/index.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","../node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../node_modules/@nestjs/common/file-stream/index.d.ts","../node_modules/@nestjs/common/module-utils/constants.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","../node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","../node_modules/@nestjs/common/module-utils/index.d.ts","../node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","../node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","../node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","../node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","../node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","../node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","../node_modules/@nestjs/common/pipes/file/index.d.ts","../node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","../node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-date.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../node_modules/@nestjs/common/pipes/index.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../node_modules/@nestjs/common/serializer/decorators/index.d.ts","../node_modules/@nestjs/common/serializer/index.d.ts","../node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../node_modules/@nestjs/common/utils/index.d.ts","../node_modules/@nestjs/common/index.d.ts","./src/app.service.ts","./src/app.controller.ts","../node_modules/@nestjs/typeorm/dist/interfaces/entity-class-or-schema.type.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.decorators.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.utils.d.ts","../node_modules/@nestjs/typeorm/dist/common/index.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/typeorm-options.interface.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/index.d.ts","../node_modules/@nestjs/typeorm/dist/typeorm.module.d.ts","../node_modules/@nestjs/typeorm/dist/index.d.ts","../node_modules/@nestjs/typeorm/index.d.ts","../node_modules/@nestjs/config/dist/conditional.module.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-change-event.interface.d.ts","../node_modules/@nestjs/config/dist/types/config-object.type.d.ts","../node_modules/@nestjs/config/dist/types/config.type.d.ts","../node_modules/@nestjs/config/dist/types/no-infer.type.d.ts","../node_modules/@nestjs/config/dist/types/path-value.type.d.ts","../node_modules/@nestjs/config/dist/types/index.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-factory.interface.d.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/dotenv-expand/lib/main.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-module-options.interface.d.ts","../node_modules/@nestjs/config/dist/interfaces/index.d.ts","../node_modules/@nestjs/config/dist/config.module.d.ts","../node_modules/@nestjs/config/dist/config.service.d.ts","../node_modules/@nestjs/config/dist/utils/register-as.util.d.ts","../node_modules/@nestjs/config/dist/utils/get-config-token.util.d.ts","../node_modules/@nestjs/config/dist/utils/index.d.ts","../node_modules/@nestjs/config/dist/index.d.ts","../node_modules/@nestjs/config/index.d.ts","../node_modules/eventemitter2/eventemitter2.d.ts","../node_modules/@nestjs/event-emitter/dist/constants.d.ts","../node_modules/@nestjs/event-emitter/dist/interfaces/event-emitter-options.interface.d.ts","../node_modules/@nestjs/event-emitter/dist/interfaces/on-event-options.interface.d.ts","../node_modules/@nestjs/event-emitter/dist/interfaces/event-payload-host.interface.d.ts","../node_modules/@nestjs/event-emitter/dist/interfaces/index.d.ts","../node_modules/@nestjs/event-emitter/dist/decorators/on-event.decorator.d.ts","../node_modules/@nestjs/event-emitter/dist/decorators/index.d.ts","../node_modules/@nestjs/event-emitter/dist/event-emitter-readiness.watcher.d.ts","../node_modules/@nestjs/event-emitter/dist/event-emitter.module.d.ts","../node_modules/@nestjs/event-emitter/dist/index.d.ts","../node_modules/ioredis/built/types.d.ts","../node_modules/ioredis/built/command.d.ts","../node_modules/ioredis/built/scanstream.d.ts","../node_modules/ioredis/built/utils/rediscommander.d.ts","../node_modules/ioredis/built/transaction.d.ts","../node_modules/ioredis/built/utils/commander.d.ts","../node_modules/ioredis/built/connectors/abstractconnector.d.ts","../node_modules/ioredis/built/connectors/connectorconstructor.d.ts","../node_modules/ioredis/built/connectors/sentinelconnector/types.d.ts","../node_modules/ioredis/built/connectors/sentinelconnector/sentineliterator.d.ts","../node_modules/ioredis/built/connectors/sentinelconnector/index.d.ts","../node_modules/ioredis/built/connectors/standaloneconnector.d.ts","../node_modules/ioredis/built/redis/redisoptions.d.ts","../node_modules/ioredis/built/cluster/util.d.ts","../node_modules/ioredis/built/cluster/clusteroptions.d.ts","../node_modules/ioredis/built/cluster/index.d.ts","../node_modules/denque/index.d.ts","../node_modules/ioredis/built/subscriptionset.d.ts","../node_modules/ioredis/built/datahandler.d.ts","../node_modules/ioredis/built/redis.d.ts","../node_modules/ioredis/built/pipeline.d.ts","../node_modules/ioredis/built/index.d.ts","./src/redis/redis.constants.ts","./src/redis/redis.provider.ts","./src/redis/redis.module.ts","../node_modules/@nestjs/swagger/dist/decorators/api-basic.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-bearer.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/open-api-spec.interface.d.ts","../node_modules/@nestjs/swagger/dist/types/swagger-enum.type.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-body.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-consumes.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-cookie.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-default-getter.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-exclude-endpoint.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-exclude-controller.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-extra-models.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-header.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-hide-property.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-link.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-oauth2.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-operation.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/enum-schema-attributes.interface.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-param.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-produces.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/schema-object-metadata.interface.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-property.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-query.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-response.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-security.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-use-tags.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/callback-object.interface.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-callbacks.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-extension.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-schema.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/index.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-ui-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-custom-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-document-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/index.d.ts","../node_modules/@nestjs/swagger/dist/document-builder.d.ts","../node_modules/@nestjs/swagger/dist/swagger-module.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/intersection-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/omit-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/partial-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/pick-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/index.d.ts","../node_modules/@nestjs/swagger/dist/utils/get-schema-path.util.d.ts","../node_modules/@nestjs/swagger/dist/utils/index.d.ts","../node_modules/@nestjs/swagger/dist/index.d.ts","../node_modules/class-validator/types/validation/validationerror.d.ts","../node_modules/class-validator/types/validation/validatoroptions.d.ts","../node_modules/class-validator/types/validation-schema/validationschema.d.ts","../node_modules/class-validator/types/container.d.ts","../node_modules/class-validator/types/validation/validationarguments.d.ts","../node_modules/class-validator/types/decorator/validationoptions.d.ts","../node_modules/class-validator/types/decorator/common/allow.d.ts","../node_modules/class-validator/types/decorator/common/isdefined.d.ts","../node_modules/class-validator/types/decorator/common/isoptional.d.ts","../node_modules/class-validator/types/decorator/common/validate.d.ts","../node_modules/class-validator/types/validation/validatorconstraintinterface.d.ts","../node_modules/class-validator/types/decorator/common/validateby.d.ts","../node_modules/class-validator/types/decorator/common/validateif.d.ts","../node_modules/class-validator/types/decorator/common/validatenested.d.ts","../node_modules/class-validator/types/decorator/common/validatepromise.d.ts","../node_modules/class-validator/types/decorator/common/islatlong.d.ts","../node_modules/class-validator/types/decorator/common/islatitude.d.ts","../node_modules/class-validator/types/decorator/common/islongitude.d.ts","../node_modules/class-validator/types/decorator/common/equals.d.ts","../node_modules/class-validator/types/decorator/common/notequals.d.ts","../node_modules/class-validator/types/decorator/common/isempty.d.ts","../node_modules/class-validator/types/decorator/common/isnotempty.d.ts","../node_modules/class-validator/types/decorator/common/isin.d.ts","../node_modules/class-validator/types/decorator/common/isnotin.d.ts","../node_modules/class-validator/types/decorator/number/isdivisibleby.d.ts","../node_modules/class-validator/types/decorator/number/ispositive.d.ts","../node_modules/class-validator/types/decorator/number/isnegative.d.ts","../node_modules/class-validator/types/decorator/number/max.d.ts","../node_modules/class-validator/types/decorator/number/min.d.ts","../node_modules/class-validator/types/decorator/date/mindate.d.ts","../node_modules/class-validator/types/decorator/date/maxdate.d.ts","../node_modules/class-validator/types/decorator/string/contains.d.ts","../node_modules/class-validator/types/decorator/string/notcontains.d.ts","../node_modules/@types/validator/lib/isboolean.d.ts","../node_modules/@types/validator/lib/isemail.d.ts","../node_modules/@types/validator/lib/isfqdn.d.ts","../node_modules/@types/validator/lib/isiban.d.ts","../node_modules/@types/validator/lib/isiso31661alpha2.d.ts","../node_modules/@types/validator/lib/isiso4217.d.ts","../node_modules/@types/validator/lib/isiso6391.d.ts","../node_modules/@types/validator/lib/istaxid.d.ts","../node_modules/@types/validator/lib/isurl.d.ts","../node_modules/@types/validator/index.d.ts","../node_modules/class-validator/types/decorator/string/isalpha.d.ts","../node_modules/class-validator/types/decorator/string/isalphanumeric.d.ts","../node_modules/class-validator/types/decorator/string/isdecimal.d.ts","../node_modules/class-validator/types/decorator/string/isascii.d.ts","../node_modules/class-validator/types/decorator/string/isbase64.d.ts","../node_modules/class-validator/types/decorator/string/isbytelength.d.ts","../node_modules/class-validator/types/decorator/string/iscreditcard.d.ts","../node_modules/class-validator/types/decorator/string/iscurrency.d.ts","../node_modules/class-validator/types/decorator/string/isemail.d.ts","../node_modules/class-validator/types/decorator/string/isfqdn.d.ts","../node_modules/class-validator/types/decorator/string/isfullwidth.d.ts","../node_modules/class-validator/types/decorator/string/ishalfwidth.d.ts","../node_modules/class-validator/types/decorator/string/isvariablewidth.d.ts","../node_modules/class-validator/types/decorator/string/ishexcolor.d.ts","../node_modules/class-validator/types/decorator/string/ishexadecimal.d.ts","../node_modules/class-validator/types/decorator/string/ismacaddress.d.ts","../node_modules/class-validator/types/decorator/string/isip.d.ts","../node_modules/class-validator/types/decorator/string/isport.d.ts","../node_modules/class-validator/types/decorator/string/isisbn.d.ts","../node_modules/class-validator/types/decorator/string/isisin.d.ts","../node_modules/class-validator/types/decorator/string/isiso8601.d.ts","../node_modules/class-validator/types/decorator/string/isjson.d.ts","../node_modules/class-validator/types/decorator/string/isjwt.d.ts","../node_modules/class-validator/types/decorator/string/islowercase.d.ts","../node_modules/class-validator/types/decorator/string/ismobilephone.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha2.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha3.d.ts","../node_modules/class-validator/types/decorator/string/ismongoid.d.ts","../node_modules/class-validator/types/decorator/string/ismultibyte.d.ts","../node_modules/class-validator/types/decorator/string/issurrogatepair.d.ts","../node_modules/class-validator/types/decorator/string/isurl.d.ts","../node_modules/class-validator/types/decorator/string/isuuid.d.ts","../node_modules/class-validator/types/decorator/string/isfirebasepushid.d.ts","../node_modules/class-validator/types/decorator/string/isuppercase.d.ts","../node_modules/class-validator/types/decorator/string/length.d.ts","../node_modules/class-validator/types/decorator/string/maxlength.d.ts","../node_modules/class-validator/types/decorator/string/minlength.d.ts","../node_modules/class-validator/types/decorator/string/matches.d.ts","../node_modules/libphonenumber-js/types.d.cts","../node_modules/libphonenumber-js/max/index.d.cts","../node_modules/class-validator/types/decorator/string/isphonenumber.d.ts","../node_modules/class-validator/types/decorator/string/ismilitarytime.d.ts","../node_modules/class-validator/types/decorator/string/ishash.d.ts","../node_modules/class-validator/types/decorator/string/isissn.d.ts","../node_modules/class-validator/types/decorator/string/isdatestring.d.ts","../node_modules/class-validator/types/decorator/string/isbooleanstring.d.ts","../node_modules/class-validator/types/decorator/string/isnumberstring.d.ts","../node_modules/class-validator/types/decorator/string/isbase32.d.ts","../node_modules/class-validator/types/decorator/string/isbic.d.ts","../node_modules/class-validator/types/decorator/string/isbtcaddress.d.ts","../node_modules/class-validator/types/decorator/string/isdatauri.d.ts","../node_modules/class-validator/types/decorator/string/isean.d.ts","../node_modules/class-validator/types/decorator/string/isethereumaddress.d.ts","../node_modules/class-validator/types/decorator/string/ishsl.d.ts","../node_modules/class-validator/types/decorator/string/isiban.d.ts","../node_modules/class-validator/types/decorator/string/isidentitycard.d.ts","../node_modules/class-validator/types/decorator/string/isisrc.d.ts","../node_modules/class-validator/types/decorator/string/islocale.d.ts","../node_modules/class-validator/types/decorator/string/ismagneturi.d.ts","../node_modules/class-validator/types/decorator/string/ismimetype.d.ts","../node_modules/class-validator/types/decorator/string/isoctal.d.ts","../node_modules/class-validator/types/decorator/string/ispassportnumber.d.ts","../node_modules/class-validator/types/decorator/string/ispostalcode.d.ts","../node_modules/class-validator/types/decorator/string/isrfc3339.d.ts","../node_modules/class-validator/types/decorator/string/isrgbcolor.d.ts","../node_modules/class-validator/types/decorator/string/issemver.d.ts","../node_modules/class-validator/types/decorator/string/isstrongpassword.d.ts","../node_modules/class-validator/types/decorator/string/istimezone.d.ts","../node_modules/class-validator/types/decorator/string/isbase58.d.ts","../node_modules/class-validator/types/decorator/string/is-tax-id.d.ts","../node_modules/class-validator/types/decorator/string/is-iso4217-currency-code.d.ts","../node_modules/class-validator/types/decorator/typechecker/isboolean.d.ts","../node_modules/class-validator/types/decorator/typechecker/isdate.d.ts","../node_modules/class-validator/types/decorator/typechecker/isnumber.d.ts","../node_modules/class-validator/types/decorator/typechecker/isenum.d.ts","../node_modules/class-validator/types/decorator/typechecker/isint.d.ts","../node_modules/class-validator/types/decorator/typechecker/isstring.d.ts","../node_modules/class-validator/types/decorator/typechecker/isarray.d.ts","../node_modules/class-validator/types/decorator/typechecker/isobject.d.ts","../node_modules/class-validator/types/decorator/array/arraycontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotcontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotempty.d.ts","../node_modules/class-validator/types/decorator/array/arrayminsize.d.ts","../node_modules/class-validator/types/decorator/array/arraymaxsize.d.ts","../node_modules/class-validator/types/decorator/array/arrayunique.d.ts","../node_modules/class-validator/types/decorator/object/isnotemptyobject.d.ts","../node_modules/class-validator/types/decorator/object/isinstance.d.ts","../node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/class-validator/types/validation/validationtypes.d.ts","../node_modules/class-validator/types/validation/validator.d.ts","../node_modules/class-validator/types/register-decorator.d.ts","../node_modules/class-validator/types/metadata/validationmetadataargs.d.ts","../node_modules/class-validator/types/metadata/validationmetadata.d.ts","../node_modules/class-validator/types/metadata/constraintmetadata.d.ts","../node_modules/class-validator/types/metadata/metadatastorage.d.ts","../node_modules/class-validator/types/index.d.ts","./src/auth/dtos/login.dto.ts","../node_modules/@types/jsonwebtoken/index.d.ts","../node_modules/@nestjs/jwt/dist/interfaces/jwt-module-options.interface.d.ts","../node_modules/@nestjs/jwt/dist/interfaces/index.d.ts","../node_modules/@nestjs/jwt/dist/jwt.errors.d.ts","../node_modules/@nestjs/jwt/dist/jwt.module.d.ts","../node_modules/@nestjs/jwt/dist/jwt.service.d.ts","../node_modules/@nestjs/jwt/dist/index.d.ts","../node_modules/@nestjs/jwt/index.d.ts","./src/users/enums/userrole.enum.ts","./src/badge/entities/badge.entity.ts","./src/leaderboard/entities/leaderboard.entity.ts","./src/achievement/entities/achievement.entity.ts","./src/users/user.entity.ts","./src/users/providers/find-one-by-email.provider.ts","../node_modules/@types/mime/index.d.ts","../node_modules/@types/send/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/@types/http-errors/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/express/index.d.ts","../node_modules/@nestjs/core/adapters/http-adapter.d.ts","../node_modules/@nestjs/core/adapters/index.d.ts","../node_modules/@nestjs/common/constants.d.ts","../node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","../node_modules/@nestjs/core/injector/settlement-signal.d.ts","../node_modules/@nestjs/core/injector/injector.d.ts","../node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","../node_modules/@nestjs/core/inspector/serialized-graph.d.ts","../node_modules/@nestjs/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.d.ts","../node_modules/@nestjs/core/injector/compiler.d.ts","../node_modules/@nestjs/core/injector/modules-container.d.ts","../node_modules/@nestjs/core/injector/container.d.ts","../node_modules/@nestjs/core/injector/instance-links-host.d.ts","../node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","../node_modules/@nestjs/core/injector/module-ref.d.ts","../node_modules/@nestjs/core/injector/module.d.ts","../node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../node_modules/@nestjs/core/application-config.d.ts","../node_modules/@nestjs/core/constants.d.ts","../node_modules/@nestjs/core/discovery/discovery-module.d.ts","../node_modules/@nestjs/core/discovery/discovery-service.d.ts","../node_modules/@nestjs/core/discovery/index.d.ts","../node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/index.d.ts","../node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","../node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","../node_modules/@nestjs/core/router/router-proxy.d.ts","../node_modules/@nestjs/core/helpers/context-creator.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","../node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","../node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","../node_modules/@nestjs/core/guards/constants.d.ts","../node_modules/@nestjs/core/helpers/execution-context-host.d.ts","../node_modules/@nestjs/core/guards/guards-consumer.d.ts","../node_modules/@nestjs/core/guards/guards-context-creator.d.ts","../node_modules/@nestjs/core/guards/index.d.ts","../node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","../node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","../node_modules/@nestjs/core/interceptors/index.d.ts","../node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","../node_modules/@nestjs/core/pipes/params-token-factory.d.ts","../node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","../node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","../node_modules/@nestjs/core/pipes/index.d.ts","../node_modules/@nestjs/core/helpers/context-utils.d.ts","../node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../node_modules/@nestjs/core/injector/inquirer/index.d.ts","../node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","../node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","../node_modules/@nestjs/core/inspector/graph-inspector.d.ts","../node_modules/@nestjs/core/metadata-scanner.d.ts","../node_modules/@nestjs/core/scanner.d.ts","../node_modules/@nestjs/core/injector/instance-loader.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","../node_modules/@nestjs/core/injector/index.d.ts","../node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","../node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","../node_modules/@nestjs/core/helpers/external-context-creator.d.ts","../node_modules/@nestjs/core/helpers/index.d.ts","../node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","../node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","../node_modules/@nestjs/core/inspector/index.d.ts","../node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","../node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../node_modules/@nestjs/core/middleware/builder.d.ts","../node_modules/@nestjs/core/middleware/index.d.ts","../node_modules/@nestjs/core/nest-application-context.d.ts","../node_modules/@nestjs/core/nest-application.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../node_modules/@nestjs/core/nest-factory.d.ts","../node_modules/@nestjs/core/repl/repl.d.ts","../node_modules/@nestjs/core/repl/index.d.ts","../node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../node_modules/@nestjs/core/router/interfaces/index.d.ts","../node_modules/@nestjs/core/router/request/request-constants.d.ts","../node_modules/@nestjs/core/router/request/index.d.ts","../node_modules/@nestjs/core/router/router-module.d.ts","../node_modules/@nestjs/core/router/index.d.ts","../node_modules/@nestjs/core/services/reflector.service.d.ts","../node_modules/@nestjs/core/services/index.d.ts","../node_modules/@nestjs/core/index.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../node_modules/class-transformer/types/enums/index.d.ts","../node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/index.d.ts","../node_modules/class-transformer/types/classtransformer.d.ts","../node_modules/class-transformer/types/decorators/exclude.decorator.d.ts","../node_modules/class-transformer/types/decorators/expose.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-instance-to-instance.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-instance-to-plain.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-plain-to-instance.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform.decorator.d.ts","../node_modules/class-transformer/types/decorators/type.decorator.d.ts","../node_modules/class-transformer/types/decorators/index.d.ts","../node_modules/class-transformer/types/index.d.ts","./src/common/pagination/paginationquerydto.ts","./src/common/pagination/paginatedinterfaces.ts","./src/common/pagination/provider/pagination-provider.ts","./src/users/providers/find-all.service.ts","./src/users/dtos/createuserdto.ts","./src/users/providers/create-user.service.ts","./src/users/providers/delete-user.service.ts","./src/users/providers/find-one-by-googleid.ts","./src/auth/social/interfaces/user.interface.ts","./src/users/providers/googleuserprovider.ts","./src/users/providers/find-one-by-wallet.provider.ts","./src/users/dtos/edituserdto.dto.ts","./src/users/providers/update-user.service.ts","./src/users/providers/users.service.ts","./src/auth/providers/hashing.provider.ts","./src/auth/authconfig/jwt.config.ts","./src/auth/providers/sign-in.provider.ts","./src/auth/dtos/refreshtokendto.ts","./src/auth/providers/generate-tokens.provider.ts","./src/auth/providers/refreshtokensprovider.ts","./src/auth/dtos/walletlogin.dto.ts","../node_modules/starknet-types-07/dist/types/api/components.d.ts","../node_modules/starknet-types-07/dist/types/api/errors.d.ts","../node_modules/starknet-types-07/dist/types/api/nonspec.d.ts","../node_modules/starknet-types-07/dist/types/api/methods.d.ts","../node_modules/starknet-types-07/dist/types/api/contract.d.ts","../node_modules/starknet-types-07/dist/types/api/index.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/constants.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/typeddata.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/events.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/errors.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/components.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/methods.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/starknetwindowobject.d.ts","../node_modules/starknet-types-07/dist/types/wallet-api/index.d.ts","../node_modules/starknet-types-07/dist/types/index.d.ts","../node_modules/@noble/curves/abstract/modular.d.ts","../node_modules/@noble/curves/abstract/curve.d.ts","../node_modules/@noble/curves/abstract/utils.d.ts","../node_modules/@noble/curves/abstract/weierstrass.d.ts","../node_modules/abi-wan-kanabi/dist/config.d.ts","../node_modules/abi-wan-kanabi/dist/kanabi.d.ts","../node_modules/abi-wan-kanabi/dist/index.d.ts","../node_modules/ts-mixer/dist/types/types.d.ts","../node_modules/@noble/curves/abstract/poseidon.d.ts","../node_modules/lossless-json/lib/types/config.d.ts","../node_modules/lossless-json/lib/types/types.d.ts","../node_modules/lossless-json/lib/types/parse.d.ts","../node_modules/lossless-json/lib/types/stringify.d.ts","../node_modules/lossless-json/lib/types/losslessnumber.d.ts","../node_modules/lossless-json/lib/types/revivedate.d.ts","../node_modules/lossless-json/lib/types/numberparsers.d.ts","../node_modules/lossless-json/lib/types/utils.d.ts","../node_modules/lossless-json/lib/types/index.d.ts","../node_modules/@scure/starknet/lib/index.d.ts","../node_modules/starknet/dist/index.d.ts","./src/auth/providers/wallet-login.provider.ts","./src/auth/providers/auth.service.ts","./src/puzzle/enums/puzzle-type.enum.ts","./src/puzzle/enums/puzzle-difficulty.enum.ts","./src/puzzle/entities/puzzle.entity.ts","./src/puzzle/entities/puzzle-submission.entity.ts","./src/achievement/entities/user-achievement.entity.ts","./src/users/providers/puzzleactivityprovider.ts","./src/users/providers/useractivityservice.ts","./src/users/dtos/user-activity-event.dto.ts","./src/users/dtos/user-activity-response.dto.ts","./src/users/controllers/users.controller.ts","./src/common/pagination/pagination.module.ts","./src/users/users.module.ts","../node_modules/bcryptjs/umd/types.d.ts","../node_modules/bcryptjs/umd/index.d.ts","./src/auth/providers/bcrypt.provider.ts","./src/auth/controllers/auth.controller.ts","./src/auth/auth.module.ts","./src/config/app.config.ts","./src/config/database.config.ts","./src/common/common.module.ts","./src/blockchain/provider/blockchain.service.ts","./src/blockchain/controller/blockchain.controller.ts","./src/blockchain/blockchain.module.ts","./src/leaderboard/dto/leaderboard-query.dto.ts","./src/leaderboard/dto/update-leaderboard.dto.ts","./src/leaderboard/dto/leaderboard-response.dto.ts","./src/leaderboard/providers/get-leaderboard.provider.ts","./src/leaderboard/providers/update-player-stats-provider.ts","./src/leaderboard/providers/get-user-rank-provider.ts","./src/leaderboard/leaderboard.service.ts","./src/leaderboard/leaderboard.controller.ts","./src/leaderboard/leaderboard.module.ts","./src/badge/dto/create-badge.dto.ts","./src/badge/dto/update-badge.dto.ts","./src/badge/providers/seed-default-badges.service.ts","./src/badge/providers/determine-badge-for-rank.service.ts","./src/badge/providers/auto-assign-badges.service.ts","./src/badge/providers/get-badge-by-rank.service.ts","./src/badge/providers/find-one-badge.service.ts","./src/badge/providers/remove-badge.service.ts","./src/badge/providers/update-badge.service.ts","./src/badge/providers/create-badge.service.ts","./src/badge/providers/find-all-active-badges.service.ts","./src/badge/providers/find-all-badges.service.ts","./src/badge/badge.service.ts","./src/badge/dto/badge-response.dto.ts","./src/badge/badge.controller.ts","./src/badge/badge.module.ts","./src/timefilter/timefilter.enum.ts/timefilter.enum.ts","./src/timefilter/providers/timefilter.service.ts","./src/timefilter/timefilter.module.ts","../node_modules/axios/index.d.ts","../node_modules/@nestjs/axios/dist/interfaces/http-module.interface.d.ts","../node_modules/@nestjs/axios/dist/interfaces/index.d.ts","../node_modules/@nestjs/axios/dist/http.module.d.ts","../node_modules/@nestjs/axios/dist/http.service.d.ts","../node_modules/@nestjs/axios/dist/index.d.ts","../node_modules/@nestjs/axios/index.d.ts","./src/iq-assessment/dto/create-session.dto.ts","./src/iq-assessment/dto/submit-answer.dto.ts","./src/iq-assessment/dto/complete-session.dto.ts","./src/iq-assessment/dto/session-response.dto.ts","./src/iq-assessment/dto/attempt-response.dto.ts","./src/iq-assessment/dto/answer-submission-response.dto.ts","./src/iq-assessment/entities/iq-assessment-session.entity.ts","./src/iq-assessment/entities/iq-answer.entity.ts","./src/iq-assessment/entities/iq-attempt.entity.ts","./src/iq-assessment/entities/iq-question.entity.ts","./src/iq-assessment/dto/random-questions-query.dto.ts","./src/iq-assessment/dto/random-question-response.dto.ts","./src/iq-assessment/dto/create-attempt.dto.ts","./src/iq-assessment/providers/iq-attempt.service.ts","./src/iq-assessment/dto/submit-quiz.dto.ts","./src/iq-assessment/dto/start-quiz.dto.ts","./src/achievement/providers/achievement-unlocker.service.ts","./src/achievement/providers/find-by-user-id-provider.ts","./src/achievement/providers/achievement.service.ts","./src/auth/interfaces/activeinterface.ts","./src/iq-assessment/providers/iq-assessment.service.ts","./src/auth/constants/auth.constant.ts","./src/auth/decorators/activeuser.decorator.ts","./src/iq-assessment/controllers/iq-assessment.controller.ts","./src/iq-assessment/dto/create-iq-question.dto.ts","./src/iq-assessment/dto/admin-questions-query.dto.ts","./src/iq-assessment/dto/admin-question-response.dto.ts","./src/iq-assessment/providers/admin-iq-questions.service.ts","./src/auth/enum/roles.enum.ts","./src/auth/decorators/role-decorator.ts","./src/auth/enum/auth-type.enum.ts","./src/auth/decorators/auth.decorator.ts","./src/iq-assessment/controllers/admin-iq-questions.controller.ts","./src/iq-assessment/providers/submit-puzzle.provider.ts","./src/iq-assessment/providers/verify-solution.provider.ts","./src/iq-assessment/providers/update-progress.provider.ts","./src/iq-assessment/providers/calculate-rewards.provider.ts","./src/iq-assessment/providers/update-user-stats.provider.ts","./src/iq-assessment/providers/get-puzzle.provider.ts","./src/iq-assessment/providers/get-puzzles.provider.ts","./src/achievement/achievement.controller.ts","./src/achievement/achievement.module.ts","./src/iq-assessment/iq-assessment.module.ts","../node_modules/@nestjs/passport/dist/abstract.strategy.d.ts","../node_modules/@nestjs/passport/dist/interfaces/auth-module.options.d.ts","../node_modules/@nestjs/passport/dist/interfaces/type.interface.d.ts","../node_modules/@nestjs/passport/dist/interfaces/index.d.ts","../node_modules/@nestjs/passport/dist/auth.guard.d.ts","../node_modules/@nestjs/passport/dist/passport.module.d.ts","../node_modules/@types/passport/index.d.ts","../node_modules/@nestjs/passport/dist/passport/passport.serializer.d.ts","../node_modules/@nestjs/passport/dist/passport/passport.strategy.d.ts","../node_modules/@nestjs/passport/dist/index.d.ts","../node_modules/@nestjs/passport/index.d.ts","./src/puzzle/dto/puzzle.dto.ts","./src/puzzle/entities/puzzle-progress.entity.ts","./src/gamification/dto/puzzle-submission.dto.ts","./src/puzzle/providers/puzzle-progress.provider.ts","./src/puzzle/puzzle.service.ts","./src/puzzle/puzzle.controller.ts","./src/gamification/dto/bonus-reward.dto.ts","./src/gamification/gamification.service.ts","./src/gamification/gamification.controller.ts","./src/gamification/entities/daily-streak.entity.ts","./src/gamification/dto/streak.dto.ts","./src/gamification/constants/streak.constants.ts","./src/gamification/providers/check-and-award-milestones.service.ts","./src/gamification/providers/build-streak-response.service.ts","./src/gamification/providers/update-streak.service.ts","./src/gamification/providers/get-streak.service.ts","./src/gamification/providers/get-streak-leaderboard.service.ts","./src/gamification/providers/get-streak-stats.service.ts","./src/gamification/providers/daily-streak.service.ts","./src/gamification/controllers/streak.controller.ts","./src/gamification/listeners/streak.listener.ts","./src/gamification/gamification.module.ts","./src/puzzle/puzzle.module.ts","./src/app.module.ts","./src/common/filters/http-exception.filter.ts","./src/main.ts","./src/question/question.entity.ts","./src/question/question.seed.ts","./src/iq-assessment/seeds/iq-questions.seed.ts","./src/seed.ts","./src/achievement/seeds/initial-achievements.seed.ts","./src/analytics/dto/get-analytics-query.dto.ts","./src/analytics/dto/export-analytics-query.dto.ts","./src/analytics/dto/analytics-breakdown-response.dto.ts","./src/analytics/entities/analytics-event.entity.ts","./src/analytics/dto/create-analytics-event.dto.ts","./src/analytics/providers/analytics.service.ts","../node_modules/@fast-csv/format/build/src/types.d.ts","../node_modules/@fast-csv/format/build/src/formatteroptions.d.ts","../node_modules/@fast-csv/format/build/src/csvformatterstream.d.ts","../node_modules/@fast-csv/format/build/src/index.d.ts","../node_modules/@fast-csv/parse/build/src/types.d.ts","../node_modules/@fast-csv/parse/build/src/parseroptions.d.ts","../node_modules/@fast-csv/parse/build/src/csvparserstream.d.ts","../node_modules/@fast-csv/parse/build/src/index.d.ts","../node_modules/fast-csv/build/src/index.d.ts","../node_modules/@types/pdfkit/index.d.ts","./src/analytics/providers/analytics-export.service.ts","./src/analytics/providers/analytics-breakdown.service.ts","./src/analytics/analytics.controller.ts","./src/analytics/dto/analytics.listener.ts","./src/analytics/analytics.module.ts","./src/auth/dtos/register.dto.ts","./src/auth/social/google-auth.controller.ts","./src/auth/social/dtos/google-token.dto.ts","../node_modules/gaxios/build/src/common.d.ts","../node_modules/gaxios/build/src/interceptor.d.ts","../node_modules/gaxios/build/src/gaxios.d.ts","../node_modules/gaxios/build/src/index.d.ts","../node_modules/google-auth-library/build/src/transporters.d.ts","../node_modules/google-auth-library/build/src/auth/credentials.d.ts","../node_modules/google-auth-library/build/src/crypto/crypto.d.ts","../node_modules/google-auth-library/build/src/util.d.ts","../node_modules/google-auth-library/build/src/auth/authclient.d.ts","../node_modules/google-auth-library/build/src/auth/loginticket.d.ts","../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts","../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts","../node_modules/google-auth-library/build/src/auth/envdetect.d.ts","../node_modules/gtoken/build/src/index.d.ts","../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts","../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts","../node_modules/google-auth-library/build/src/auth/impersonated.d.ts","../node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts","../node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts","../node_modules/google-auth-library/build/src/auth/awsrequestsigner.d.ts","../node_modules/google-auth-library/build/src/auth/awsclient.d.ts","../node_modules/google-auth-library/build/src/auth/pluggable-auth-client.d.ts","../node_modules/google-auth-library/build/src/auth/externalclient.d.ts","../node_modules/google-auth-library/build/src/auth/externalaccountauthorizeduserclient.d.ts","../node_modules/google-auth-library/build/src/auth/googleauth.d.ts","../node_modules/gcp-metadata/build/src/gcp-residency.d.ts","../node_modules/gcp-metadata/build/src/index.d.ts","../node_modules/google-auth-library/build/src/auth/computeclient.d.ts","../node_modules/google-auth-library/build/src/auth/iam.d.ts","../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts","../node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts","../node_modules/google-auth-library/build/src/auth/passthrough.d.ts","../node_modules/google-auth-library/build/src/index.d.ts","./src/auth/social/providers/google-authentication.service.ts","../node_modules/@nestjs/schedule/dist/enums/cron-expression.enum.d.ts","../node_modules/@nestjs/schedule/dist/enums/index.d.ts","../node_modules/@types/luxon/src/zone.d.ts","../node_modules/@types/luxon/src/settings.d.ts","../node_modules/@types/luxon/src/_util.d.ts","../node_modules/@types/luxon/src/misc.d.ts","../node_modules/@types/luxon/src/duration.d.ts","../node_modules/@types/luxon/src/interval.d.ts","../node_modules/@types/luxon/src/datetime.d.ts","../node_modules/@types/luxon/src/info.d.ts","../node_modules/@types/luxon/src/luxon.d.ts","../node_modules/@types/luxon/index.d.ts","../node_modules/cron/dist/errors.d.ts","../node_modules/cron/dist/constants.d.ts","../node_modules/cron/dist/job.d.ts","../node_modules/cron/dist/types/utils.d.ts","../node_modules/cron/dist/types/cron.types.d.ts","../node_modules/cron/dist/time.d.ts","../node_modules/cron/dist/index.d.ts","../node_modules/@nestjs/schedule/dist/decorators/cron.decorator.d.ts","../node_modules/@nestjs/schedule/dist/decorators/interval.decorator.d.ts","../node_modules/@nestjs/schedule/dist/decorators/timeout.decorator.d.ts","../node_modules/@nestjs/schedule/dist/decorators/index.d.ts","../node_modules/@nestjs/schedule/dist/interfaces/schedule-module-options.interface.d.ts","../node_modules/@nestjs/schedule/dist/schedule.module.d.ts","../node_modules/@nestjs/schedule/dist/scheduler.registry.d.ts","../node_modules/@nestjs/schedule/dist/index.d.ts","../node_modules/@nestjs/schedule/index.d.ts","./src/badge/task/badge-assign.task.ts","./src/blockchain/dtos/blockchain.dto.ts","./src/blockchain/entities/blockchain.entity.ts","./src/config/enviroment.validation.ts","./src/database/migrations/20250601204321-addpuzzleentities.ts","./src/database/migrations/20250601204322-adddifficultyandcategorytoiqquestions.ts","./src/database/migrations/20250601204323-createdailystreakstable.ts","./src/gamification/dto/create-gamification.dto.ts","./src/gamification/dto/update-gamification.dto.ts","./src/gamification/entities/gamification.entity.ts","./src/iq-assessment/iq-assessment.service.ts","./src/iq-assessment/dto/create-iq-assessment.dto.ts","./src/iq-assessment/dto/update-iq-assessment.dto.ts","./src/iq-assessment/entities/iq-assessment.entity.ts","./src/iq-assessment/interfaces/externaliqquestion.interface.ts","./src/iq-assessment/interfaces/quizanswerfeedbackinterface.ts","./src/leaderboard/dto/create-leaderboard.dto.ts","./src/test-session/test-session.entity.ts","./src/question/question.service.ts","./src/question/question.module.ts","./src/roles/roles.decorator.ts","./src/roles/roles.guard.ts","./src/roles/role.controller.ts","./src/roles/roles.entity.ts","./src/timefilter/dtos/timefilter.dto.ts","./src/users/dtos/updateuserprofile.dto.ts","./src/users/dtos/userstats.dto.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@eslint/core/dist/esm/types.d.ts","../node_modules/eslint/lib/types/use-at-your-own-risk.d.ts","../node_modules/eslint/lib/types/index.d.ts","../node_modules/@types/eslint-scope/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/http-cache-semantics/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/expect/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/methods/index.d.ts","../node_modules/@types/oauth/index.d.ts","../node_modules/@types/passport-oauth2/index.d.ts","../node_modules/@types/passport-google-oauth20/index.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react-dom/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/superagent/lib/agent-base.d.ts","../node_modules/@types/superagent/lib/node/response.d.ts","../node_modules/@types/superagent/types.d.ts","../node_modules/@types/superagent/lib/node/agent.d.ts","../node_modules/@types/superagent/lib/request-base.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../node_modules/@types/superagent/lib/node/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/types.d.ts","../node_modules/@types/supertest/lib/agent.d.ts","../node_modules/@types/supertest/lib/test.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[454,829,872],[454,804,815,829,872,1012,1164,1359,1431],[804,815,829,872,1162,1163,1164,1165,1359,1429,1430,1431,1453],[454,829,872,1165],[454,829,872,1164,1165],[454,804,815,829,872,1162,1163,1164,1165,1359],[804,829,872,1165,1429,1430],[454,804,815,829,872,1164],[829,872],[804,829,872,1012,1176,1403,1441,1442,1443,1444,1498,1499,1500,1503,1514,1515],[804,815,829,872,1405,1501,1503,1514,1515,1516,1517],[829,872,1012],[804,829,872,943,1503],[829,872,1151],[829,872,1012,1151,1498],[829,872,1012,1151,1403],[454,804,815,829,872,1404,1498,1500,1501],[804,829,872,1176,1499,1501,1512,1513],[454,804,815,829,872,1403,1404,1498,1501,1502],[804,805,829,872],[804,805,806,815,829,872,932,943,968,1366,1371,1372,1373,1374,1377,1386,1402,1405,1454,1455,1488,1489],[804,829,872],[804,829,872,932,1160,1311,1312,1313,1315,1316,1353,1354,1366,1369,1370],[829,872,932],[804,829,872,1152,1314,1317,1354],[804,829,872,1432,1434],[804,829,872,1434,1443],[804,829,872,1441],[829,872,1012,1151],[804,829,872,1012,1152,1313,1314,1316,1317,1353],[804,829,872,1311,1368],[804,829,872,932,1012,1160,1165,1310,1312],[804,829,872,932,1012,1160,1310,1312,1314,1315],[804,829,872,932,1152,1160,1310,1311,1312],[804,829,872,932,1160,1310,1312,1317,1352],[804,829,872,1354,1466],[804,829,872,932,1310,1312,1315,1521,1554],[804,829,872,1012,1387,1388,1399,1400],[804,815,829,872,1162,1163,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1401],[804,829,872,1162,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398],[829,872,1012,1387],[454,829,872,1163,1165],[454,804,815,829,872,1162,1163,1390],[454,804,815,829,872,1162,1387],[804,829,872,1162],[454,804,815,829,872,1162],[454,804,815,829,872,1162,1163,1393],[454,804,815,829,872,1162,1388,1393],[804,829,872,1399,1583],[804,829,872,1375,1376],[804,829,872,1375],[804,829,872,1299],[804,829,872,1176],[829,872,1151,1296],[454,804,829,872,1176,1269,1297,1298],[804,829,872,1012,1432,1435,1466,1477,1485],[829,872,1012,1151,1296],[829,872,1012,1591],[454,829,872,1012,1165],[804,829,872,1012,1469,1473,1474],[804,815,829,872,1165,1474,1475,1476,1479,1480,1481,1482,1483,1484,1485,1486,1487,1489],[804,829,872,943,1269,1473],[804,829,872,943,1469,1485],[804,829,872,1476,1477,1478],[454,804,815,829,872,943,1473,1476,1478],[804,829,872,1477,1481,1482,1483,1484],[454,804,815,829,872,1476,1477],[454,804,815,829,872,1165,1476],[454,804,815,829,872,1476,1477,1480],[454,804,815,829,872,943,1165,1476,1477,1478,1479,1480],[804,829,872,1012,1437,1438,1439,1440,1441,1442,1443,1444],[804,829,872,1012,1413,1414,1415,1416,1417,1418,1423,1424,1426,1427,1432,1433,1435],[829,872,1012,1422],[829,872,1012,1151,1296,1422],[829,872,1151,1296,1422],[829,872,1012,1595],[454,829,872,1419,1422],[454,829,872,1165,1420],[454,829,872,1165,1422],[454,829,872,1420,1421],[804,815,829,872,1165,1412,1419,1420,1421,1422,1426,1433,1436,1440,1445,1446,1447,1448,1449,1450,1451,1452,1454],[804,829,872,1446,1447,1448,1449,1450,1451,1452],[454,804,815,829,872,1421,1422,1437,1438,1439],[454,583,650,804,815,829,872,943,1165,1412,1413,1414,1416,1418,1419,1420,1422,1423,1425,1426,1427,1428,1431,1432],[454,804,815,829,872,1165,1417,1421,1422,1425],[454,829,872,1422],[454,829,872,1162,1165],[804,829,872,1378,1379,1380,1384],[804,815,829,872,1162,1163,1165,1381,1382,1383,1384,1385],[804,829,872,965,966,1378,1379,1381,1382,1383],[454,804,815,829,872,1163,1378,1380],[454,804,815,829,872,1163,1378],[454,804,815,829,872,1162,1163,1165,1379],[804,829,872,1012,1269,1490,1491],[829,872,1012,1151,1355,1356],[454,829,872,1012,1165,1355],[454,829,872,1165,1357],[454,829,872,1012,1355,1356],[454,804,815,829,872,1165,1355,1357,1358,1467],[804,829,872,1012,1357,1432,1435,1466,1467,1471],[804,815,829,872,1165,1357,1358,1468,1471,1472,1488],[454,804,815,829,872,943,1165,1355,1357,1358,1467,1468,1469,1470],[804,815,829,872,1493,1601,1602],[454,829,872,1493],[454,804,815,829,872,1493,1601],[804,829,872,932,965,966,967],[804,829,872,932,965,966],[804,829,872,1161,1466,1604,1605],[804,829,872,1161],[454,829,872,1161],[804,829,872,1161,1269,1604],[454,829,872,1269,1490,1494,1495],[829,872,1151,1403],[804,829,872,1403],[804,829,872,1404],[804,829,872,1012,1297,1308,1310,1361,1363],[454,829,872,1012,1151,1161,1296],[829,872,1012,1362],[454,804,815,829,872,1151,1165,1301],[454,804,815,829,872,1165],[454,804,815,829,872,1012,1165,1297,1298,1299],[454,804,815,829,872,1012,1165],[454,804,815,829,872,1012,1165,1305],[454,804,815,829,872,1165,1358,1359],[454,804,815,829,872,1165,1308],[804,829,872,1360],[804,829,872,1012,1165,1166,1297,1298,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309],[454,829,872,1012,1161,1162,1163,1164],[804,815,829,872,1165,1166,1300,1302,1303,1304,1306,1307,1309,1310,1358,1359,1360,1361,1364,1365,1371],[829,872,1611],[829,872,1619],[829,872,904,1504,1505],[829,872,1504],[829,872,885,1504,1505,1506],[829,872,904,1508,1509],[829,872,1508,1509,1510],[829,872,1508],[829,872,1633],[804,829,872,1408],[650,829,872,1406],[829,872,1408,1409,1410],[804,829,872,1406],[829,872,1407],[829,872,1411],[706,829,872],[456,707,708,709,710,711,712,713,714,715,716,717,718,719,829,872],[659,693,829,872],[666,829,872],[656,706,804,829,872],[724,725,726,727,728,729,730,731,829,872],[661,829,872],[706,804,829,872],[720,723,732,829,872],[721,722,829,872],[697,829,872],[661,662,663,664,829,872],[735,829,872],[679,734,829,872],[734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,829,872],[764,829,872],[761,762,829,872],[760,763,829,872,904],[68,665,706,733,757,760,765,772,796,801,803,829,872],[461,659,829,872],[460,829,872],[461,651,652,829,872,1208,1213],[651,659,829,872],[460,650,829,872],[659,784,829,872],[653,786,829,872],[650,654,829,872],[654,829,872],[460,706,829,872],[658,659,829,872],[671,829,872],[673,674,675,676,677,829,872],[665,829,872],[665,666,685,829,872],[679,680,686,687,688,829,872],[457,458,459,460,461,651,652,653,654,655,656,657,658,659,660,666,671,672,678,685,689,690,691,693,701,702,703,704,705,829,872],[684,829,872],[667,668,669,670,829,872],[659,667,668,829,872],[659,665,666,829,872],[659,669,829,872],[659,697,829,872],[692,694,695,696,697,698,699,700,829,872],[457,659,829,872],[693,829,872],[457,659,692,696,698,829,872],[668,829,872],[694,829,872],[659,693,694,695,829,872],[683,829,872],[659,663,683,684,701,829,872],[681,682,684,829,872],[655,657,666,672,686,702,703,706,829,872],[461,650,655,657,660,702,703,829,872],[664,829,872],[650,829,872],[683,706,766,770,829,872],[770,771,829,872],[706,766,829,872],[706,766,767,829,872],[767,768,829,872],[767,768,769,829,872],[660,829,872],[775,776,829,872],[775,829,872],[776,777,778,780,781,782,829,872],[774,829,872],[776,779,829,872],[776,777,778,780,781,829,872],[660,775,776,780,829,872],[773,783,788,789,790,791,792,793,794,795,829,872],[660,706,788,829,872],[660,779,829,872],[660,779,804,829,872],[653,659,660,779,784,785,786,787,829,872],[650,706,784,785,797,829,872],[706,784,829,872],[799,829,872],[733,797,829,872],[797,798,800,829,872],[683,829,872,916],[683,758,759,829,872],[692,829,872],[665,706,829,872],[802,829,872],[804,829,872,925],[650,817,822,829,872],[816,822,829,872,925,926,927,930],[822,829,872],[823,829,872,923],[817,823,829,872,924],[818,819,820,821,829,872],[829,872,928,929],[822,829,872,925,931],[829,872,931],[685,706,804,829,872],[829,872,1177],[706,804,829,872,1197,1198],[829,872,1179],[804,829,872,1191,1196,1197],[829,872,1201,1202],[461,706,829,872,1192,1197,1211],[804,829,872,1178,1204],[460,804,829,872,1205,1208],[706,829,872,1192,1197,1199,1210,1212,1216],[460,829,872,1214,1215],[829,872,1205],[650,706,804,829,872,1219],[706,804,829,872,1192,1197,1199,1211],[829,872,1218,1220,1221],[706,829,872,1197],[829,872,1197],[706,804,829,872,1219],[460,706,804,829,872],[706,804,829,872,1191,1192,1197,1217,1219,1222,1225,1230,1231,1244,1245],[650,829,872,1177],[829,872,1204,1207,1246],[829,872,1231,1243],[68,829,872,1178,1199,1200,1203,1206,1238,1243,1247,1250,1254,1255,1256,1258,1260,1266,1268],[706,804,829,872,1185,1193,1196,1197],[706,829,872,1189],[684,706,804,829,872,1179,1188,1189,1190,1191,1196,1197,1199,1269],[829,872,1191,1192,1195,1197,1233,1242],[706,804,829,872,1184,1196,1197],[829,872,1232],[804,829,872,1192,1197],[804,829,872,1185,1192,1196,1237],[706,804,829,872,1179,1184,1196],[804,829,872,1190,1191,1195,1235,1239,1240,1241],[804,829,872,1185,1192,1193,1194,1196,1197],[706,829,872,1179,1192,1195,1197],[650,829,872,1196],[659,692,698,829,872],[829,872,1181,1182,1183,1192,1196,1197,1236],[829,872,1188,1237,1248,1249],[804,829,872,1179,1197],[804,829,872,1179],[829,872,1180,1181,1182,1183,1186,1188],[829,872,1185],[829,872,1187,1188],[804,829,872,1180,1181,1182,1183,1186,1187],[829,872,1223,1224],[706,829,872,1192,1197,1199,1211],[829,872,1234],[690,829,872],[671,706,829,872,1251,1252],[829,872,1253],[706,829,872,1199],[706,829,872,1192,1199],[684,706,804,829,872,1185,1192,1193,1194,1196,1197],[683,706,804,829,872,1178,1192,1199,1237,1255],[684,685,804,829,872,1177,1257],[829,872,1227,1228,1229],[804,829,872,1226],[829,872,1259],[804,829,872,901],[829,872,1262,1264,1265],[829,872,1261],[829,872,1263],[804,829,872,1191,1196,1262],[829,872,1209],[706,804,829,872,1179,1192,1196,1197,1199,1234,1235,1237,1238],[829,872,1267],[829,872,939],[829,872,938],[804,829,872,938],[829,872,933,934,940,941,942],[829,872,933],[829,872,935,936,937],[829,872,1153,1155,1156,1157,1158],[829,872,1154],[804,829,872,1153],[804,829,872,1154],[829,872,1153,1155],[829,872,1159],[804,829,872,1457,1459],[829,872,1456,1459,1460,1461,1463,1464],[829,872,1457,1458],[804,829,872,1457],[829,872,1462],[829,872,1459],[829,872,1465],[829,872,1574],[829,872,1575,1576,1577],[829,872,1556],[829,872,1557,1578,1580,1581],[804,829,872,1579],[829,872,1582],[804,829,872,971,972],[829,872,994],[829,872,971,972],[829,872,971],[804,829,872,971,972,985],[804,829,872,985,988],[804,829,872,971],[829,872,988],[829,872,969,970,973,974,975,976,977,978,979,980,981,982,983,984,986,987,989,990,991,992,993,995,996,997],[829,872,971,991,1002],[68,829,872,998,1002,1003,1004,1009,1011],[829,872,971,1000,1001],[804,829,872,971,985],[829,872,971,999],[686,804,829,872,1002],[829,872,1005,1006,1007,1008],[829,872,1010],[808,809,829,872],[454,804,807,829,872],[454,650,804,807,829,872],[810,812,813,829,872],[811,829,872],[454,804,829,872],[454,804,807,811,829,872],[814,829,872],[829,872,1333],[829,872,1333,1334,1335],[829,872,1333,1335,1336,1341],[829,872,1611,1612,1613,1614,1615],[829,872,1611,1613],[829,872,887,922,1174],[829,872,887,922],[829,872,1618,1624],[829,872,1618,1619,1620],[829,872,1621],[829,872,884,887,922,1168,1169,1170],[829,872,1171,1173,1175],[829,872,885,922],[829,872,1628],[829,872,1629],[829,872,1635,1638],[829,872,877,922],[829,872,1566],[829,872,1559],[829,872,1558,1560,1562,1563,1567],[829,872,1560,1561,1564],[829,872,1558,1561,1564],[829,872,1560,1562,1564],[829,872,1558,1559,1561,1562,1563,1564,1565],[829,872,1558,1564],[829,872,1560],[829,869,872],[829,871,872],[872],[829,872,877,907],[829,872,873,878,884,892,904,915],[829,872,873,874,884,892],[824,825,826,829,872],[829,872,875,916],[829,872,876,877,885,893],[829,872,877,904,912],[829,872,878,880,884,892],[829,871,872,879],[829,872,880,881],[829,872,882,884],[829,871,872,884],[829,872,884,885,886,904,915],[829,872,884,885,886,899,904,907],[829,867,872],[829,867,872,880,884,887,892,904,915],[829,872,884,885,887,888,892,904,912,915],[829,872,887,889,904,912,915],[827,828,829,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921],[829,872,884,890],[829,872,891,915],[829,872,880,884,892,904],[829,872,893],[829,872,894],[829,871,872,895],[829,869,870,871,872,873,874,875,876,877,878,879,880,881,882,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921],[829,872,897],[829,872,898],[829,872,884,899,900],[829,872,899,901,916,918],[829,872,884,904,905,907],[829,872,906,907],[829,872,904,905],[829,872,907],[829,872,908],[829,869,872,904,909],[829,872,884,910,911],[829,872,910,911],[829,872,877,892,904,912],[829,872,913],[829,872,892,914],[829,872,887,898,915],[829,872,877,916],[829,872,904,917],[829,872,891,918],[829,872,919],[829,872,884,886,895,904,907,915,917,918,920],[829,872,904,921],[829,872,887,915,922],[829,872,1176,1462,1643],[829,872,887,1176,1462,1642],[829,872,887,1176],[829,872,922],[829,872,1647],[829,872,1645,1646],[829,872,885,904,922,1167],[829,872,887,922,1168,1172],[829,872,1657],[829,872,1617,1641,1650,1652,1658],[829,872,888,892,904,912,922],[829,872,885,887,888,889,892,904,1641,1651,1652,1653,1654,1655,1656],[829,872,887,904,1657],[829,872,885,1651,1652],[829,872,915,1651],[829,872,1658,1659,1660,1661],[829,872,1658,1659,1662],[829,872,1658,1659],[829,872,887,888,892,1641,1658],[829,872,1046,1047,1048,1049,1050,1051,1052,1053,1054],[829,872,1663],[829,872,1337,1338],[829,872,1337],[829,872,1367],[829,872,1286],[829,872,1288,1289,1290,1291,1292,1293,1294],[829,872,1277],[829,872,1278,1286,1287,1295],[829,872,1279],[829,872,1273],[829,872,1270,1271,1272,1273,1274,1275,1276,1279,1280,1281,1282,1283,1284,1285],[829,872,1278,1280],[829,872,1281,1286],[829,872,1018],[829,872,1017,1018,1023],[829,872,1019,1020,1021,1022,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142],[829,872,1018,1055],[829,872,1018,1095],[829,872,1017],[829,872,1013,1014,1015,1016,1017,1018,1023,1143,1144,1145,1146,1150],[829,872,1023],[829,872,1015,1148,1149],[829,872,1017,1147],[829,872,1018,1023],[829,872,1013,1014],[829,872,1567,1570,1572,1573],[829,872,1567,1572,1573],[829,872,1567,1568,1572],[829,872,873,1567,1569,1570,1571],[829,872,1618,1619,1622,1623],[829,872,1624],[829,872,1631,1637],[829,872,1507,1511],[829,872,887,904,922],[829,872,887,904,915],[829,872,887,915,1522,1523],[829,872,1522,1523,1524],[829,872,1522],[829,872,887,1547],[829,872,884,1525,1526,1527,1529,1532],[829,872,1529,1530,1539,1541],[829,872,1525],[829,872,1525,1526,1527,1529,1530,1532],[829,872,1525,1532],[829,872,1525,1526,1527,1530,1532],[829,872,1525,1526,1527,1530,1532,1539],[829,872,1530,1539,1540,1542,1543],[829,872,904,1525,1526,1527,1530,1532,1533,1534,1536,1537,1538,1539,1544,1545,1554],[829,872,1529,1530,1539],[829,872,1532],[829,872,1530,1532,1533,1546],[829,872,904,1527,1532],[829,872,904,1527,1532,1533,1535],[829,872,898,1525,1526,1527,1528,1530,1531],[829,872,1525,1530,1532],[829,872,1530,1539],[829,872,1525,1526,1527,1530,1531,1532,1533,1534,1536,1537,1538,1539,1540,1541,1542,1543,1544,1546,1548,1549,1550,1551,1552,1553,1554],[829,872,880,922,949,956,957],[829,872,884,922,944,945,946,948,949,957,958,963],[829,872,880,922],[829,872,922,944],[829,872,944],[829,872,950],[829,872,884,912,922,944,950,952,953,958],[829,872,952],[829,872,956],[829,872,892,912,922,944,950],[829,872,884,922,944,960,961],[829,872,944,945,946,947,950,954,955,956,957,958,959,963,964],[829,872,945,949,959,963],[829,872,884,922,944,945,946,948,949,956,959,960,962],[829,872,949,951,954,955],[829,872,904,922],[829,872,945],[829,872,947],[829,872,892,912,922],[829,872,944,945,947],[829,872,1635],[829,872,1632,1636],[829,872,1094],[829,872,1342,1343,1344,1345,1346,1347,1348,1349],[829,872,1346],[829,872,1343],[829,872,1634],[462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,478,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,518,519,520,521,522,523,524,525,526,527,528,529,531,532,533,534,535,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,581,582,583,585,594,596,597,598,599,600,601,603,604,606,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,829,872],[507,829,872],[463,466,829,872],[465,829,872],[465,466,829,872],[462,463,464,466,829,872],[463,465,466,623,829,872],[466,829,872],[462,465,507,829,872],[465,466,623,829,872],[465,631,829,872],[463,465,466,829,872],[475,829,872],[498,829,872],[519,829,872],[465,466,507,829,872],[466,514,829,872],[465,466,507,525,829,872],[465,466,525,829,872],[466,566,829,872],[466,507,829,872],[462,466,584,829,872],[462,466,585,829,872],[607,829,872],[591,593,829,872],[602,829,872],[591,829,872],[462,466,584,591,592,829,872],[584,585,593,829,872],[605,829,872],[462,466,591,592,593,829,872],[464,465,466,829,872],[462,466,829,872],[463,465,585,586,587,588,829,872],[507,585,586,587,588,829,872],[585,587,829,872],[465,586,587,589,590,594,829,872],[462,465,829,872],[466,609,829,872],[467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,508,509,510,511,512,513,515,516,517,518,519,520,521,522,523,524,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,829,872],[595,829,872],[829,872,1318,1319,1320,1321,1322],[829,872,1318,1319,1320],[829,872,1318],[829,872,1323,1331],[829,872,1318,1323],[829,872,1323],[829,872,1324,1325,1326,1327,1328,1329,1330],[829,872,1323,1324,1325,1327,1328],[829,872,1326,1329],[829,872,1332,1336,1339,1340,1341,1350,1351,1352],[133,255,829,872],[75,454,829,872],[136,829,872],[243,829,872],[239,243,829,872],[239,829,872],[90,129,130,131,132,134,135,243,829,872],[75,76,85,90,130,134,137,141,173,189,190,192,194,200,201,202,203,239,240,241,242,248,255,272,829,872],[205,207,209,210,220,222,223,224,225,226,227,228,230,232,233,234,235,238,829,872],[79,81,82,112,354,355,356,357,358,359,829,872],[82,829,872],[79,82,829,872],[363,364,365,829,872],[372,829,872],[79,370,829,872],[400,829,872],[388,829,872],[129,829,872],[75,113,829,872],[387,829,872],[80,829,872],[79,80,81,829,872],[120,829,872],[70,71,72,829,872],[116,829,872],[79,829,872],[111,829,872],[70,829,872],[79,80,829,872],[117,118,829,872],[73,75,829,872],[272,829,872],[245,246,829,872],[71,829,872],[408,829,872],[136,229,829,872],[829,872,912],[136,137,204,829,872],[71,72,79,85,87,89,103,104,105,108,109,136,137,139,140,248,254,255,829,872],[136,147,829,872],[87,89,107,137,139,145,147,161,174,178,182,189,243,252,254,255,829,872],[145,146,829,872,880,892,912],[136,137,206,829,872],[136,221,829,872],[136,137,208,829,872],[136,231,829,872],[137,236,237,829,872],[106,829,872],[211,212,213,214,215,216,217,218,829,872],[136,137,219,829,872],[75,76,85,147,149,153,154,155,156,157,184,186,187,188,190,192,193,194,198,199,201,243,255,272,829,872],[76,85,103,147,150,154,158,159,183,184,186,187,188,200,243,248,829,872],[200,243,255,829,872],[128,829,872],[76,113,829,872],[79,80,112,114,829,872],[110,115,119,120,121,122,123,124,125,126,127,454,829,872],[69,70,71,72,76,116,117,118,829,872],[290,829,872],[248,290,829,872],[79,103,132,290,829,872],[76,290,829,872],[203,290,829,872],[290,291,292,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,829,872],[92,290,829,872],[92,248,290,829,872],[290,294,829,872],[141,290,829,872],[144,829,872],[153,829,872],[142,149,150,151,152,829,872],[80,85,143,829,872],[147,829,872],[85,153,154,191,248,272,829,872],[144,147,148,829,872],[158,829,872],[85,153,829,872],[144,148,829,872],[85,144,829,872],[75,76,85,189,190,192,200,201,239,240,243,272,285,286,829,872],[68,73,75,76,79,80,82,85,86,87,88,89,90,110,111,115,116,118,119,120,128,129,130,131,132,135,137,138,139,141,142,143,144,147,148,149,150,151,152,153,154,155,156,157,160,161,163,164,165,166,167,168,169,170,171,172,173,175,178,179,182,185,186,187,188,189,190,191,192,195,196,200,201,202,203,239,243,248,251,252,253,254,255,265,266,268,269,270,271,272,286,287,288,289,353,360,361,362,366,367,368,369,371,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,401,402,403,404,405,406,407,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,441,442,443,444,445,446,447,448,449,451,453,829,872],[130,131,255,829,872],[130,255,434,829,872],[130,131,255,434,829,872],[255,829,872],[130,829,872],[82,83,829,872],[97,829,872],[76,829,872],[70,71,72,74,77,829,872],[275,829,872],[78,84,93,94,98,100,176,180,244,247,249,273,274,275,276,277,278,279,280,281,282,283,284,829,872],[69,73,74,77,829,872],[120,121,454,829,872],[90,176,248,829,872],[79,80,84,85,92,102,243,248,829,872],[92,93,95,96,99,101,103,243,248,250,829,872],[85,97,98,102,248,829,872],[85,91,92,95,96,99,101,102,103,120,121,177,181,243,244,245,246,247,250,454,829,872],[90,180,248,829,872],[70,71,72,90,103,248,829,872],[90,102,103,248,249,829,872],[92,248,272,273,829,872],[85,92,94,248,272,829,872],[69,70,71,72,74,78,85,91,102,103,248,829,872],[103,829,872],[70,90,100,102,103,248,829,872],[202,829,872],[203,243,255,829,872],[90,254,829,872],[90,447,829,872],[89,254,829,872],[85,92,103,248,293,829,872],[92,103,294,829,872],[132,829,872,884,885,904],[248,829,872],[195,829,872],[76,85,188,195,196,243,255,271,829,872],[85,140,196,829,872],[76,85,103,184,186,197,271,829,872],[92,243,248,257,264,829,872],[196,829,872],[76,85,103,141,184,196,243,248,255,256,257,263,264,265,266,267,268,269,270,272,829,872],[85,92,103,120,140,243,248,256,257,258,259,260,261,262,263,271,829,872],[85,829,872],[92,248,264,272,829,872],[85,92,243,255,272,829,872],[85,271,829,872],[185,829,872],[85,185,829,872],[76,85,92,120,145,149,150,151,152,154,195,196,248,255,261,262,264,271,829,872],[76,85,120,187,195,196,243,255,271,829,872],[85,248,829,872],[85,120,184,187,195,196,243,255,271,829,872],[85,196,829,872],[85,87,89,107,137,139,145,161,174,178,182,185,194,200,243,252,254,829,872],[75,85,192,200,201,272,829,872],[76,147,149,153,154,155,156,157,184,186,187,188,198,199,201,272,440,829,872],[85,147,153,154,158,159,189,201,255,272,829,872],[76,85,147,149,153,154,155,156,157,184,186,187,188,198,199,200,255,272,454,829,872],[85,191,201,272,829,872],[140,197,829,872],[86,138,160,175,179,251,829,872],[86,103,107,108,243,248,255,829,872],[107,829,872],[87,139,141,161,178,182,248,252,253,829,872],[175,177,829,872],[86,829,872],[179,181,829,872],[91,138,141,829,872],[250,251,829,872],[101,160,829,872],[88,454,829,872],[85,92,103,162,173,248,255,829,872],[163,164,165,166,167,168,169,170,171,172,829,872],[85,200,243,248,255,829,872],[200,243,248,255,829,872],[167,829,872],[85,92,103,200,243,248,255,829,872],[87,89,103,106,129,139,144,148,161,178,182,189,196,240,248,252,254,265,266,267,268,269,270,272,294,440,441,442,450,829,872],[200,248,452,829,872],[829,839,843,872,915],[829,839,872,904,915],[829,834,872],[829,836,839,872,912,915],[829,872,892,912],[829,834,872,922],[829,836,839,872,892,915],[829,831,832,835,838,872,884,904,915],[829,839,846,872],[829,831,837,872],[829,839,860,861,872],[829,835,839,872,907,915,922],[829,860,872,922],[829,833,834,872,922],[829,839,872],[829,833,834,835,836,837,838,839,840,841,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,861,862,863,864,865,866,872],[829,839,854,872],[829,839,846,847,872],[829,837,839,847,848,872],[829,838,872],[829,831,834,839,872],[829,839,843,847,848,872],[829,843,872],[829,837,839,842,872,915],[829,831,836,839,846,872],[829,872,904],[829,834,839,860,872,920,922]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"785921608325fa246b450f05b238f4b3ed659f1099af278ce9ebbc9416a13f1d","impliedFormat":1},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e2bc02af7b535d267be8cecbc5831466dd71c5af294401821791b26cb363c47","impliedFormat":1},{"version":"986affe0f60331f20df7d708ee097056b0973d85422ec2ce754af19c1fa4e4b1","impliedFormat":1},{"version":"8f06c2807459f1958b297f4ad09c6612d7dbd7997c9ccfc6ea384f7538e0cea8","impliedFormat":1},{"version":"a7de30cd043d7299bfe9daaca3732b086e734341587c3e923b01f3fd74d31126","impliedFormat":1},{"version":"78f7fad319e4ac305ffe8e03027423279b53a8af4db305096aa75d446b1ec7af","impliedFormat":1},{"version":"3bf58923a1d27819745bdad52bca1bdced9fef12cc0c7f8a3fd5f4e0206b684a","impliedFormat":1},{"version":"8fc11f102df58f03d36fcbf0da3efa37c177f5f18f534c76179ceef0c3a672cd","impliedFormat":1},{"version":"e6935ab0f64a886e778c12a54ed6e9075ce7e7f44723ff0d52020a654b025a09","impliedFormat":1},{"version":"9829af7653a29f1b85d3dd688a6c6256087c0b737b85d84b630e7f93fd420faf","impliedFormat":1},{"version":"3d9d985d41e536fcf79fc95082925c2f1ae5ade75814ad2bd70c0944747f7ac4","impliedFormat":1},{"version":"ae2c56f024cc15af136c9987f728ccef42320c25d0c383571ea29ef32980abb1","impliedFormat":1},{"version":"b0e6f1b1569779cf567317c2265d67460d1d3b4de4e79126533109d87dc16d50","impliedFormat":1},{"version":"18cb8be1326ffa4158abd8d84c9b0a189c0f52201f12f7af2d2af830c077f2bf","impliedFormat":1},{"version":"132eab632ab0708270a7247ea358dfe27dd646924bd0f46ec8a62de606a6a90f","impliedFormat":1},{"version":"0de68916e23c1e3df800f9f61cdd7c506ceb0656fcbc245ee9974aad26786781","impliedFormat":1},{"version":"80c538ee6a62249e77ba3de07efb23d4a7ca8946499c065261bf5079f1cd3cf0","impliedFormat":1},{"version":"ad4277862bdcbe1cf5c1e0d43b39770e1ccc033da92f5b9ff75ca8c3a03a569b","impliedFormat":1},{"version":"46a86c47400a564df04a1604fcac41cb599ebbada392527a1462c9dfe4713d78","impliedFormat":1},{"version":"f342dcb96ad26855757929a9f6632704b7013f65786573d4fdcd4da09f475923","impliedFormat":1},{"version":"dcd467dc444953a537502d9e140d4f2dc13010664d4216cc8e6977b3c5c3efa3","impliedFormat":1},{"version":"ca476924dfa6120b807a14e0a8aea7b061b8bdaa7eecdb303d7957c769102e96","impliedFormat":1},{"version":"848fe622fac070f8af9255e5d63fe829e3da079cae30be48fb6deb5dbf2c27c6","impliedFormat":1},{"version":"f3bb275073b5db8931c042d347fdce888775436a4774836221af57fdccec32ff","impliedFormat":1},{"version":"03cb8cb2f8ef002a5cac9b8c9a0c02e5fd09de128b9769c5b920a6cbfc080087","impliedFormat":1},{"version":"3e5ebc3a6a938a03a361f4cdb9a26c9f5a1bac82b46273e11d5d37cd8eccc918","impliedFormat":1},{"version":"a0a7800e71c504c21f3051a29f0f6f948f0b8296c9ebffeb67033822aabf92e0","impliedFormat":1},{"version":"6a219f12b3e853398d51192736707e320699a355052687bad4729784649ff519","impliedFormat":1},{"version":"4294a84634c56529e67301a3258448019e41c101de6b9646ea41c0ecdc70df92","impliedFormat":1},{"version":"80fc027e10234b809a9a40086114a8154657dcb8478d58c85ef850592d352870","impliedFormat":1},{"version":"27f24ba43083d406b372e9eff72dbc378afa0503dac1c1dd32499cc92fc9cb22","impliedFormat":1},{"version":"12594611a054ca7fe69962f690a4e79922d563b4b434716eb855d63a9d11a78f","impliedFormat":1},{"version":"1440eca2d8bc47ebdbc5a901b369de1b7b39c3297e5b4ac9631899f49ea9740b","impliedFormat":1},{"version":"fc9897fbada879bda954603ea204c6e5df913262a90ad848b5efaab182b58033","impliedFormat":1},{"version":"93443b2da120bea58eb48bd7da86559d4cf868dc2d581eebf9b48b51ba1e8894","impliedFormat":1},{"version":"8f0e6fbdc4fb9bf6829b9e3cfd0b65a4c288eead75a4f4f43e1f9a326c418564","impliedFormat":1},{"version":"c2956026078814be6dc01515213aeb1eb816e81715085952bbc97b7c81fe3f6d","impliedFormat":1},{"version":"ac3a69c529ab256532825b08902aec65d0d88c66963e39ae19a3d214953aedc5","impliedFormat":1},{"version":"fe29108f3ddf7030c3d573c5226ebe03213170b3beca5200ca7cb33755184017","impliedFormat":1},{"version":"04d5bfb0a0eecd66c0b3f522477bf69065a9703be8300fbea5566a0fc4a97b9d","impliedFormat":1},{"version":"d5e3e13faca961679bed01d80bc38b3336e7de598ebf9b03ec7d31081af735ad","impliedFormat":1},{"version":"de05a488fb501de32c1ec0af2a6ddfe0fdef46935b9f4ffb3922d355b15da674","impliedFormat":1},{"version":"9f00f2bc49f0c10275a52cb4f9e2991860d8b7b0922bfab6eafe14178377aa72","impliedFormat":1},{"version":"7bd94408358caf1794ad24546ca0aa56f9be6be2d3245d0972fcb924b84a81fd","impliedFormat":1},{"version":"0e7c3660d1df392b6f6ae7fa697f0629ae4404e5b7bac05dd81136247aff32d5","impliedFormat":1},{"version":"b0b3636502dc0c50295f67747968f202f7b775eac5016329606d1bc2888d5dd9","impliedFormat":1},{"version":"f9ede7ea553dc197fd5d2604f62cda1be1aea50024ed73237d9e3144f0c93608","impliedFormat":1},{"version":"b1005ae67226fd9b7b65333d9a351917f517d421a0c63b7cde59bec3b8e3562f","impliedFormat":1},{"version":"c6688fd4c2a8a24c9b80da3660a7a06b93ed37d12d84f3ba4aa071ffc125e75f","impliedFormat":1},{"version":"20efc25890a0b2f09e4d224afaaf84917baa77b1aee60d9dfd11ff8078d73f93","impliedFormat":1},{"version":"d00b48096854d711cee688e7ff1ca796c1bf0d27ca509633c2a98b85cc23d47d","impliedFormat":1},{"version":"30f116226d0e53c6cbbdbc967479d5c8036935f771b2af51987c2e8d4cc7fc6a","impliedFormat":1},{"version":"8be98ffc3c54fb40b220796b796388f8ade50c8ba813a811bffccf98006566d5","impliedFormat":1},{"version":"4e82eed3c1b5084132708ce030f8ec90b69e4b7bb844dcaacd808045ae24c0e2","impliedFormat":1},{"version":"eae8c7cbcb175b997ce8e76cd6e770eca5dba07228f6cb4a44e1b0a11eb87685","impliedFormat":1},{"version":"b3ded8e50b3cdf548d7c8d3b3b5b2105932b04a2f08b392564f4bc499407e4e5","impliedFormat":1},{"version":"4ed2d8fb4c598719985b8fbef65f7de9c3f5ae6a233fc0fe20bd00193c490908","impliedFormat":1},{"version":"6da51da9b74383988b89e17298ceca510357f63830f78b40f72afe4d5a9cee3e","impliedFormat":1},{"version":"512a079a1a3de2492c80aa599e173b2ea8cc6afb2800e3e99f14330b34155fe1","impliedFormat":1},{"version":"f281f20b801830f2f94b2bc0b18aba01d4fb50c2f4a847ffcadff39de31c8b80","impliedFormat":1},{"version":"7ec2518429f33f4722c88cc7328fa98219d7df9990ee1fc11600122a927d39e3","impliedFormat":1},{"version":"8e3842ba15690ab4b340893a4552a8c3670b8f347fbb835afe14be98891eef10","impliedFormat":1},{"version":"e7b9673dcd3d1825dbd70ad1d1f848d68189afc302ecdafc6eb30cbe7bd420b5","impliedFormat":1},{"version":"15911b87a2ad4b65b30c445802d55fa6186c66068603113042e8c3dfa4a35e2a","impliedFormat":1},{"version":"a9dc7b8d06b1f69d219f61fa3f7ac621e6e3a8d5a430e800cd7d1a755cc058c3","impliedFormat":1},{"version":"f8c496656cb5fd737931b4d6c60bd72a97c48f37c07dcb74a593dd24ac3f684a","impliedFormat":1},{"version":"f2cf1d33c458ac091983e5dac1613f264d48a69b281e43c5b055321320082358","impliedFormat":1},{"version":"0fa43815d4b05eafe97c056dae73c313f23a9f00b559f1e942d042c7a04db93c","impliedFormat":1},{"version":"6b9eb11700f5e66dae6141f7d8ea595d2cdb2572cb7c0d732ea180b824a215da","impliedFormat":1},{"version":"a02db6aabaa291a85cf52b0c3f02a75301b80be856db63d44af4feea2179f37b","impliedFormat":1},{"version":"e1e94e41f47a4496566a9f40e815687a2eca1e7b7910b67704813cf61248b869","impliedFormat":1},{"version":"557ba6713b2a6fefd943399d5fb6c64e315dc461e9e05eaa6300fdbeeda5d0a1","impliedFormat":1},{"version":"1f7eeb69504ad94d16f4731f707d2af879adc7487dc35b146e2d86825bb779b4","impliedFormat":1},{"version":"c1b5c480e4d38377c82f9f517c12014d3d4475c0e607c4845e0836e0e89bbf7d","impliedFormat":1},{"version":"1a014a8365354f37ea245349a4361d3b46589be7921fe7f1dbf408cc0f084bab","impliedFormat":1},{"version":"87fc4a324b9fa5c9b93a13b5ae1b55ea390929ec1b0450afebff9620921a9cc1","impliedFormat":1},{"version":"73c0b8df0e282e26a53820f53502847a043bd77a9cda78782207d5349842fba2","impliedFormat":1},{"version":"67a2b1d1789a15eef7b12c95793662da1added6bc8e0a784463cc88a24648818","impliedFormat":1},{"version":"082aa8710bbf3d16b877e798341c69599fdd487b4dc34d374ab3e3ec6d46f690","impliedFormat":1},{"version":"97086e195d08fe7652c1c24f211ed50ac0cb3422dbe82affa39c50cec05bb420","impliedFormat":1},{"version":"d6db974317fd9ff66a923555464850dcf87976054a7adacf09d53323f64686d1","impliedFormat":1},{"version":"79f4812dffe8f933c12c341d68eee731cb6dd7f2a4bb20097c411560c97a6263","impliedFormat":1},{"version":"c446e8f3bd5b16e121252e05ba7696524ca95ec3f819c12fb8c37e7836744769","impliedFormat":1},{"version":"23386bb0bcb20fcb367149f22f5c6468b53f1987e86fd25de875ffb769e4d241","impliedFormat":1},{"version":"3913806467307a4bd874b105ac3e79ac261ab986fbdce7f0feea26cbcee95765","impliedFormat":1},{"version":"a9417a980a4300048d179d0295e5b7dd76e4db7b566344779ee576cbd084b3c4","impliedFormat":1},{"version":"b96760c030c41fa078b35ea05fc3e7e4d2a81710a8329271d42b6abc110d5dbe","impliedFormat":1},{"version":"ef8ff23609cec5eb95e2beb98132ad90c0c5075415b50228b12f89ffaf981a4a","impliedFormat":1},{"version":"80bbc9365ca8398c69eae77cdf7284d07192a17dacf1904095ab4c89f4520a5d","impliedFormat":1},{"version":"174a3381f98fc78c451528cb1aa1baaa37a51852ec6fa90d42efd876301537c1","impliedFormat":1},{"version":"2c0de27d99a9331cfac8bc5c6bbd174e0593628bf3df268faa6c4188962a9549","impliedFormat":1},{"version":"1a17bcbc124a098987f7b1adbbcd412f8372ecb37e352b1c50165dac439eee5e","impliedFormat":1},{"version":"0ef49170735d9e5902f55b72465accadd0db93cae52544e3c469cbc8fbdbf654","impliedFormat":1},{"version":"f68a30e88dfa7d12d8dd4609bc9d5226a31d260bf3526de5554feed3f0bf0cb6","impliedFormat":1},{"version":"d8acc6f92c85e784acbbc72036156a4c1168a18cba5390c7d363040479c39396","impliedFormat":1},{"version":"1fffef141820a0556f60aa6050eccb17dbcdc29ecd8a17ee4366573fd9c96ce3","impliedFormat":1},{"version":"d2598c755c11170e3b5f85cd0c237033e783fd4896070c06c35b2246879612b8","impliedFormat":1},{"version":"8d2044a28963c6c85a2cf4e334eb49bb6f3dd0c0dfe316233148a9be74510a0e","impliedFormat":1},{"version":"2660eb7dba5976c2dcbea02ec146b1f27109e7bee323392db584f8c78a6477dd","impliedFormat":1},{"version":"54a4f21be5428d7bff9240efb4e8cae3cb771cad37f46911978e013ff7289238","impliedFormat":1},{"version":"10837df0382365c2544fb75cb9a8f6e481e68c64915362941b4ea4468fd0ef61","impliedFormat":1},{"version":"cc4483c79688bd3f69c11cb3299a07d5dcf87646c35b869c77cde553c42893cf","impliedFormat":1},{"version":"faf76eeb5dd5d4d1e37c6eb875d114fa97297c2b50b10e25066fed09e325a77a","impliedFormat":1},{"version":"b741703daf465b44177ef31cc637bde5cd5345e6c048d5807108e6e868182b01","impliedFormat":1},{"version":"9c3e59360437a3e2a22f7f1032559a4c24aba697365b62fb4816b7c8c66035b8","impliedFormat":1},{"version":"393446ab3f0dd3449ad6fd4c8abd0c82b711c514b9e8dfbf75222bbc48eb0cb6","impliedFormat":1},{"version":"ea02a962453ec628e886a6c5d0fc03bf4da9dfa38e1f8d42e65e07b2651edd85","impliedFormat":1},{"version":"5eb09226bfa1928721a438e37c004647fc19d8d1f4817bddcc350e57fb32935f","impliedFormat":1},{"version":"5994ed389d7fc28c03dad647ecb62e5349160bde443b0c7a54e0e10d6368bcbd","impliedFormat":1},{"version":"e1ff7df643e1aa1dbf1863113a913358844ed66f1af452e774834b0008e578b2","impliedFormat":1},{"version":"c5114285d0283d05e09cd959e605a4f76e5816c2fbe712241993fd66496083e5","impliedFormat":1},{"version":"2752e949c871f2cbd146efa21ebc34e4693c0ac8020401f90a45d4e150682181","impliedFormat":1},{"version":"c349cea980e28566998972522156daac849af8a9e4a9d59074845e319b975f5d","impliedFormat":1},{"version":"0370682454d1d243b75a7c7031bc8589531a472e927b67854c1b53b55ee496ea","impliedFormat":1},{"version":"cf6b4dbb5a1ac9ece24761c3a08682029851b292b67113a93b5e2bfd2e64e49d","impliedFormat":1},{"version":"c478eeebfab3c6b9886de171c82d46c999d06ab35e187119645f2df6a1e38577","impliedFormat":1},{"version":"cb2fea712720bb7951d7e5d63db8670bf4a400d3e0fb197bceb6ef44efe36ec3","impliedFormat":1},{"version":"1b4fcfc691980d63a730d47d5309d9f85cdddc18a4c83f6e3af20936d103e3ff","impliedFormat":1},{"version":"ef19d5fe42541f8b529bccd10f488d12caefa3b57a0deb1ed6143219cba716b4","impliedFormat":1},{"version":"84b5e6269d7cf53008a479eeb533ef09d025eafb4febe3729301b8d4daf37ff2","impliedFormat":1},{"version":"04196b5d9edd60b9648daa329c3355d7c95f33b7e520e7835eb21002174a8b8c","impliedFormat":1},{"version":"f9f6a3cd16546a9c55e6a1b225a85099a08bc402c6ce6b1aad1a317b49efef24","impliedFormat":1},{"version":"9e665aea79b702fd612ffb7ac741e4160d35d8d696a789129ebcbaea003beb3d","impliedFormat":1},{"version":"c8eeffebe6c2c6800f73aa59d1436d4dadbad7f3ddda02a831ffa66114c3122d","impliedFormat":1},{"version":"caf3f141f93cbf527ad18ecce326311d70342fe1e16ce93e5ce8d6bcdf02bd48","impliedFormat":1},{"version":"4283d88023e6e9645626475e392565464eae99068f17e324cfc40a27d10fe94f","impliedFormat":1},{"version":"51e3b73dea24e2a9638345fb7a2a7ef5d3aa2e7a285ad6bd446b45fab826def1","impliedFormat":1},{"version":"77c4c9f71f3736ed179043a72c4fad9832023855804fbe5261a956428b26a7a6","impliedFormat":1},{"version":"7232467057ec57666b884924f84fd21cd3a79cc826430c312e61a5bc5758f879","impliedFormat":1},{"version":"624f5dbfd76f2d77f20ace318e8cb918608a296106e55587fb443ef3030c595d","impliedFormat":1},{"version":"c78bb1275f640e4902ad5c3383ab4f54f73322a59c95924ab671125ba9546294","impliedFormat":1},{"version":"1cb0838371e8213ce116a1497bb86bcf01a11a755b77587980ee7cfb2d625ece","impliedFormat":1},{"version":"f5d29fd7099274774c203d94d8c0238770ab411b922b978be15a2c3ec8ab845c","impliedFormat":1},{"version":"6d99b5b226a65890ce27796e086d58c6351f601757c1e9f217a69e944d05e7e6","impliedFormat":1},{"version":"10b322f5bc001bec9bf08513c978c120adb0abe3c82793b11bdaf75873426c05","impliedFormat":1},{"version":"51b4efdc8dc92bc6ae2c44d4edad265decad70e8577d5653fc7f85200cbf6c6e","impliedFormat":1},{"version":"c3fa40ac56aa2598d9133c90b115eeb39bbad56c6dfca350dc8435b8b107fe26","impliedFormat":1},{"version":"cc542183b68b048a8cf64eb6231b3d0852f7f4d0191d4637c9d1d4c3f44b83b5","impliedFormat":1},{"version":"669acddcc842a2fcc012770ac377a38d353e041ff7ea926454d3c7559c1c4f83","impliedFormat":1},{"version":"c6fd975d319a70d6ba90bf38c34ac8efebe531214038fe561a27f89f2203f78e","impliedFormat":1},{"version":"a818204639081cf07d80885b88aff5120e5a4135211162f5e08cfc00ef3bf5b6","impliedFormat":1},{"version":"c194ca06da86829b836bb188dffc05543bbea3cbda797667c7a7cade2f907646","impliedFormat":1},{"version":"6df6afb0424a7c7581ee98a9333d30e893b943d0a4709b88f18c252ddc3101b4","impliedFormat":1},{"version":"59c2cbf84c22fae87f4f506f36a7258a72b931b602115067dfd6008ee526f8c0","impliedFormat":1},{"version":"1e09cd1bc6b6baa0733e1e799c4533105ea79cbb109937c71e8c870e14693216","impliedFormat":1},{"version":"0b60cfcd94fa9bd9fa58176650c7e4c72f99b9d30a50d0b55aa08b510276af96","impliedFormat":1},{"version":"ba25681012e5117866a2456dd3557e24aa5a946ed641126aa4469880db526883","impliedFormat":1},{"version":"2b1e058a8c3944890c7ce7c712ecfd0f2645420ee67537ac031d7afe6feda6e0","impliedFormat":1},{"version":"175dbcd1f226eebd93fd9628e9180fb537bb1171489b33db7b388ef0f4e73b37","impliedFormat":1},{"version":"69ec6331ee3a7cd6bade5d5f683f1705c1041ff77432aa18c50d2097e61f93db","impliedFormat":1},{"version":"06f34a0f2151b619314fc8a54e4352a40fd5606bda50623c326c3be365cc1ef9","impliedFormat":1},{"version":"6c6dcb49af3d72d823334f74a554b2f9917e3a59b3219934b7ae9e6b03a3e8b4","impliedFormat":1},{"version":"f094c7eb360c69adaf277ef5bc24d7ce7d6d7043f357a557ecd9b345532588d5","impliedFormat":1},{"version":"3d24aec533fe2f035b0675ba1c0e55e8680a714fff2a517e0fb388279476701c","impliedFormat":1},{"version":"224e2edff4c1e67d9c5179aa70e31d0dc7dd4ea5a9e80ffde121df9e5254eef2","impliedFormat":1},{"version":"c0450dac2799c7e5efd26f9076dfd8b0f72794b8d7941d9d087033b052e20d9b","impliedFormat":1},{"version":"70a3659d557bb683091f9d318762a330a3acb3954f5e89e5134d24c9272192f1","impliedFormat":1},{"version":"d9fe2c804f7db2f19e4323601278b748dc2984798f265c37cd37bb84e6c88ab8","impliedFormat":1},{"version":"3525647a73ae2124fa8f353f0a078b44ff1ee6f82958c2bb507de61575f12fff","impliedFormat":1},{"version":"d7238315cbd18ebeed93f41ad756a0ed9759824b9b158c3d7a1e0b71682d8966","impliedFormat":1},{"version":"eeba7376ce9721610d3282a4159f3c60154b7b3877fb251f7b3211b085cfdc18","impliedFormat":1},{"version":"643efb9d7747ee1dd50ff5bd4b7a87351157e55988c7d2f90ffbdf124f063931","impliedFormat":1},{"version":"788c870cac6b39980a5cc41bf610b1873952ecdd339b781f0687d42682ffc5dc","impliedFormat":1},{"version":"d51a2e050c8a131b13ec9330a0869e5ac75b9ac4ebde52d5f474e819510b5263","impliedFormat":1},{"version":"b694593470a9bf370987e5b0757d5a9a88a46a703c9cf7921969f3379ce16148","impliedFormat":1},{"version":"6c034655fa83236bd779cacfc1d5b469d6e2150a1993e66ecca92376a8b2c6a7","impliedFormat":1},{"version":"6bd6933efe9d6263d9f1a534a28a8f88b1e4c331b95d85d39350cf02eca8dce0","impliedFormat":1},{"version":"658cf468a05b2b591fcd5455a76d9927face59ac4a21b4965982b3c234f5d289","impliedFormat":1},{"version":"6bf893d1b824bde22ee5880c0c760c1dd0a5163c38d22311441a3341b6965d2d","impliedFormat":1},{"version":"579d9d3c25058b854a6f7cc6368a473efcaa0740f45db13cb508761d35fc0156","impliedFormat":1},{"version":"2e0e76b30d5cff617354422d49f38205bd0eb5ca9ad6f4c1eebf34856e3886c7","impliedFormat":1},{"version":"28b415e70f9da0346545b7d2bcf361844a8e5778bd6b45bc1a2859f99700ff5b","impliedFormat":1},{"version":"a905f2f6785e3971bd97c42191394209d97f2aefb11841f7353dd9789821fa8c","impliedFormat":1},{"version":"e099c5ebddf80ae7285d380c7dd3b5d49c1347346ced51ae121b846833a8d102","impliedFormat":1},{"version":"aec91730b9f4d83758b4a45596317d34d6ecdbe9330a44629f53af47641b96ee","impliedFormat":1},{"version":"2321197343254570a8d4c868572059bfdfb683cf9d4099b6d4694250dac69471","impliedFormat":1},{"version":"18a3be03c31356b60ea1090bcc905d99e4983ca911cc70b34ad0b9b4d4e050c3","impliedFormat":1},{"version":"738ddac5ab5b61d70d3466f3906d6b3c83c8786e922c6e726a6597296181ae87","impliedFormat":1},{"version":"90d202ace592f7b51b131a5890ec93e4df774c8677a485391c280cef0ea53f48","impliedFormat":1},{"version":"b34e1861949a545916696ef40f4a7fe71793661e72dd4db5e04cacc60ef23f7a","impliedFormat":1},{"version":"9833a67663f960dc2d1908a19365ddde55c0651235596ac60d7078a9be6f6e56","impliedFormat":1},{"version":"2bcb8920601b80911430979b6db4a58a7908a31334e74e4e22b75c65edce3587","impliedFormat":1},{"version":"c3186dc74d62d0fb6fba29841ccbf995614992526c37fac5c082d0f28b351e54","impliedFormat":1},{"version":"2306daed18f7f59542a99857a678ef818058eefa30c2a556af123a1cf53889cd","impliedFormat":1},{"version":"b41ed9285a09710807ce2c423e038dfe538e46e9183c0c05aadc27bfb9ae256a","impliedFormat":1},{"version":"56b9f9de03f28eb5922750a213d3f47b21a4f00a48c7c9b89bf1733623873d3a","impliedFormat":1},{"version":"2bdd736078e445858cb1d9df809ff3a2f00445d78664dd70b6794fb2156bdd53","impliedFormat":1},{"version":"d8851222fa6348f7f805a72d535d6c1143a6f3b8001afcf2719ce9152ee47346","impliedFormat":1},{"version":"74ffa4541a56571f379060acaf9ab86da6c889dfe1f588425807e0117e62bba5","impliedFormat":1},{"version":"cf4dc15ca9dc6c0995dd2a9264e5ec37d09d9d551c85f395034e812abdf60a99","impliedFormat":1},{"version":"73e8b003f39c7ce46d2811749dab1dd1b309235fd5c277bd672c30a98b5cf90f","impliedFormat":1},{"version":"4cb49e79595c6413fcb01af55a8a574705bf385bd2ec5cf8b777778952e2914a","impliedFormat":1},{"version":"d6b44382b2670f38c8473e7c16b6e8a9bfa546b396b920afc4c53410eeb22abf","impliedFormat":1},{"version":"3b5c6f451b7ad87e3fcd2008d3a6cb69bd33803e541e9c0fe35754201389158f","impliedFormat":1},{"version":"8329556a2e85e3c3ff3dff43141790ff624b0f5138cedec5bb793164cf8b088f","impliedFormat":1},{"version":"4c889ce7e61ca7f3b7733e0d2be80b3af373e080c922e04639aa25f22963ae63","impliedFormat":1},{"version":"2239a8cd90c48e0b5c075e51099e7e3b4fc3d4741e4d9cc4410d2544d4216946","impliedFormat":1},{"version":"f5aa57712223d7438799be67b0c4a0e5ac3841f6397b5e692673944374f58a83","impliedFormat":1},{"version":"774c37f8faed74c238915868ccc36d0afedfbafb1d2329d6a230966457f57cbd","impliedFormat":1},{"version":"bc41b711477270e8d6f1110d57863284d084b089a22592c7c09df8d4cc3d1d20","impliedFormat":1},{"version":"0c792fe4e5f383b4f085a0033553fb84ed9322b7923fd59d4575aa43135e050d","impliedFormat":1},{"version":"228ed3721f42cc25bfebceef33754ce4766414d975ff71d012f01f141dbe3549","impliedFormat":1},{"version":"08985cdb65bbfe3c70d0037794a3d0f0a5613f55c278c77277a7acc17205db57","impliedFormat":1},{"version":"22bdefb6b2107006ab203073218566443a52ab65eb5e4e8e86c3d38efe776588","impliedFormat":1},{"version":"0f01b48cee64391fabef3f344e6e86197dc921f0f88a6d45d133ac58283d9690","impliedFormat":1},{"version":"c86fea295c21ea01c93410eba2ec6e4f918b97d0c3bf9f1bb1960eabe417e7eb","impliedFormat":1},{"version":"05d41b3e7789381ff4d7f06d8739bf54cc8e75b835cb28f22e59c1d212e48ff3","impliedFormat":1},{"version":"6fbcfc270125b77808679b682663c7c6ad36518f5a528c5f7258bcd635096770","impliedFormat":1},{"version":"9d3bd4ee558de42e9d8434f7293b404c4b7a09b344e77c36bbe959696328d594","impliedFormat":1},{"version":"f63be9b46a22ee5894316cf71a4ba7581809dd98cf046109060a1214ee9e2977","impliedFormat":1},{"version":"dd3cc41b5764c9435b7cae3cc830be4ee6071f41a607188e43aa1edeba4fbb3e","impliedFormat":1},{"version":"b2dbb9485701a1d8250d9a35b74afd41b9a403c32484ed40ed195e8aa369ae70","impliedFormat":1},{"version":"5aa7565991c306061181bd0148c458bcce3472d912e2af6a98a0a54904cd84fc","impliedFormat":1},{"version":"9629e70ae80485928a562adb978890c53c7be47c3b3624dbb82641e1da48fd2f","impliedFormat":1},{"version":"c33d86e1d4753d035c4ea8d0fdb2377043bc894e4227be3ceabc8e6a5411ab2e","impliedFormat":1},{"version":"f9ec74382c95cbc85804daf0e9dabed56511a6dfb72f8a2868aa46a0b9b5eafc","impliedFormat":1},{"version":"1ff7a67731e575e9f31837883ddfc6bfcef4a09630267e433bc5aea65ad2ced4","impliedFormat":1},{"version":"0c4f6b6eb73b0fa4d27ce6eef6c2f1e7bd93d953b941e486b55d5d4b22883350","impliedFormat":1},{"version":"af9692ce3b9db8b94dcfbaa672cb6a87472f8c909b83b5aeea043d6e53e8b107","impliedFormat":1},{"version":"782f2628a998fd03f4ccbe9884da532b8c9be645077556e235149ca9e6bd8c7d","impliedFormat":1},{"version":"269b7db8b769d5677f8d5d219e74ea2390b72ea2c65676b307e172e8f605a74a","impliedFormat":1},{"version":"ae731d469fae328ba73d6928e4466b72e3966f92f14cd1a711f9a489c6f93839","impliedFormat":1},{"version":"90878ed33999d4ff8da72bd2ca3efb1cde76d81940767adc8c229a70eb9332b2","impliedFormat":1},{"version":"d7236656e70e3a7005dba52aa27b2c989ba676aff1cab0863795ac6185f8d54f","impliedFormat":1},{"version":"e327901e9f31d1ad13928a95d95604ee4917d72ad96092da65612879d89aba42","impliedFormat":1},{"version":"868914e3630910e58d4ad917f44b045d05303adc113931e4b197357f59c3e93e","impliedFormat":1},{"version":"7d59adb080be18e595f1ce421fc50facd0073672b8e67abac5665ba7376b29b9","impliedFormat":1},{"version":"275344839c4df9f991bcf5d99c98d61ef3ce3425421e63eeb4641f544cb76e25","impliedFormat":1},{"version":"c4f1cc0bd56665694e010a6096a1d31b689fa33a4dd2e3aa591c4e343dd5181c","impliedFormat":1},{"version":"81c3d9b4d90902aa6b3cbd22e4d956b6eb5c46c4ea2d42c8ff63201c3e9676da","impliedFormat":1},{"version":"5bfc3a4bd84a6f4b992b3d285193a8140c80bbb49d50a98c4f28ad14d10e0acc","impliedFormat":1},{"version":"a7cf6a2391061ca613649bc3497596f96c1e933f7b166fa9b6856022b68783ab","impliedFormat":1},{"version":"864c844c424536df0f6f745101d90d69dd14b36aa8bd6dde11268bb91e7de88e","impliedFormat":1},{"version":"c74a70a215bbd8b763610f195459193ab05c877b3654e74f6c8881848b9ddb7f","impliedFormat":1},{"version":"3fa94513af13055cd79ea0b70078521e4484e576f8973e0712db9aab2f5dd436","impliedFormat":1},{"version":"48ffc1a6b67d61110c44d786d520a0cba81bb89667c7cdc35d4157263bfb7175","impliedFormat":1},{"version":"7cb4007e1e7b6192af196dc1dacd29a0c3adc44df23190752bef6cbbc94b5e0b","impliedFormat":1},{"version":"3d409649b4e73004b7561219ce791874818239913cac47accc083fad58f4f985","impliedFormat":1},{"version":"051908114dee3ca6d0250aacb0a4a201e60f458085177d5eda1fc3cde2e570f3","impliedFormat":1},{"version":"3e8240b75f97eb4495679f6031fb02ad889a43017cae4b17d572324513559372","impliedFormat":1},{"version":"d82609394127fb33eed0b58e33f8a0f55b62b21c2b6c10f1d7348b4781e392cb","impliedFormat":1},{"version":"b0f8a6436fbaf3fb7b707e2551b3029650bfaeb51d4b98e089e9a104d5b559b5","impliedFormat":1},{"version":"eae0ac4f87d56dcf9fbcf9314540cc1447e7a206eee8371b44afa3e2911e520c","impliedFormat":1},{"version":"b585e7131070c77b28cc682f9b1be6710e5506c196a4b6b94c3028eb865de4a7","impliedFormat":1},{"version":"b92ac4cc40d551450a87f9154a8d088e31cff02c36e81db2976d9ff070ba9929","impliedFormat":1},{"version":"6f99b4a552fbdc6afd36d695201712901d9b3f009e340db8b8d1d3415f2776f5","impliedFormat":1},{"version":"43700e8832b12f82e6f519b56fae2695e93bb18dddb485ddea6583a0d1482992","impliedFormat":1},{"version":"e8165ea64af5de7f400d851aeea5703a3b8ac021c08bebc958859d341fa53387","impliedFormat":1},{"version":"6db546ea3ced87efda943e6016c2a748e150941a0704af013dfe535936e820e1","impliedFormat":1},{"version":"f521c4293b6d8f097e885be50c2fef97de3dd512ad26f978360bb70c766e7eae","impliedFormat":1},{"version":"a0666dfd499f319cc51a1e6d9722ed9c830b040801427bbdd2984b73f98d292a","impliedFormat":1},{"version":"a7d86611d7882643dd8c529d56d2e2b698afd3a13a5adc2d9e8157b57927c0da","impliedFormat":1},{"version":"7e4615c366c93399f288c7bfbaa00a1dc123578be9d8ac96b15d489efc3f4851","impliedFormat":1},{"version":"f2e6c87a2c322ee1473cb0bd776eb20ee7bff041bc56619e5d245134ab73e83d","impliedFormat":1},{"version":"ee89bc94431b2dfaf6a7e690f8d9a5473b9d61de4ddcb637217d11229fe5b69f","impliedFormat":1},{"version":"a19c1014936f60281156dd4798395ad4ab26b7578b5a6a062b344a3e924a4333","impliedFormat":1},{"version":"5608be84dd2ca55fc6d9b6da43f67194182f40af00291198b6487229403a98fe","impliedFormat":1},{"version":"4a800f1d740379122c473c18343058f4bd63c3dffdef4d0edba668caa9c75f54","impliedFormat":1},{"version":"8e6868a58ca21e92e09017440fdb42ebfe78361803be2c1e7f49883b7113fdc2","impliedFormat":1},{"version":"2fbb72a22faefa3c9ae0dfb2a7e83d7b3d82ec625a74a8800a9da973511b0672","impliedFormat":1},{"version":"3e8c1a811bad9e5cd313c3d90c39a99867befa746098cdad81a9578ac3392541","impliedFormat":1},{"version":"d88f78b4e272864f414d98e5ed0996cd09f7a3bb01c5b7528320386f7383153d","impliedFormat":1},{"version":"0b9c34da2c6f0170e6a357112b91f2351712c5a537b76e42adfee9a91308b122","impliedFormat":1},{"version":"47adac87ec85a52ed2562cb4a3b441383551727ed802e471aa05c12e7cc7e27e","impliedFormat":1},{"version":"d1cacf181763c5d0960986f6d0abd1a36fc58fc06a707c9f5060b6b5526179ca","impliedFormat":1},{"version":"92610d503212366ff87801c2b9dc2d1bccfa427f175261a5c11331bc3588bb3f","impliedFormat":1},{"version":"805e2737ce5d94d7da549ed51dfa2e27c2f06114b19573687e9bde355a20f0ff","impliedFormat":1},{"version":"a37b576e17cf09938090a0e7feaec52d5091a1d2bbd73d7335d350e5f0e8be95","impliedFormat":1},{"version":"98971aa63683469692fef990fcba8b7ba3bae3077de26ac4be3e1545d09874b8","impliedFormat":1},{"version":"c6d36fa611917b6177e9c103a2719a61421044fb81cdd0accd19eba08d1b54de","impliedFormat":1},{"version":"088592cf2e218b99b02a5029ed8d1a763a3856cd25e012cfbb536b7494f08971","impliedFormat":1},{"version":"5eb39c56462b29c90cb373676a9a9a179f348a8684b85990367b3bbc6be5a6e9","impliedFormat":1},{"version":"52252b11bcbfaeb4c04dc9ec92ea3f1481684eee62c0c913e8ff1421dc0807e5","impliedFormat":1},{"version":"731d07940d9b4313122e6cc58829ea57dcc5748003df9a0cad7eb444b0644685","impliedFormat":1},{"version":"b3ead4874138ce39966238b97f758fdb06f56a14df3f5e538d77596195ece0b5","impliedFormat":1},{"version":"032b40b5529f2ecce0524974dbec04e9c674278ae39760b2ee0d7fce1bb0b165","impliedFormat":1},{"version":"c25736b0cb086cd2afa4206c11959cb8141cea9700f95a766ad37c2712b7772b","impliedFormat":1},{"version":"033c269cd9631b3f56bb69a9f912c1f0d6f83cf2cff4d436ee1c98f6e655e3b5","impliedFormat":1},{"version":"bd6d692a4a950abbfabe29131420abe804e7f3cc187c3c451f9811e9cf4408ce","impliedFormat":1},{"version":"a9b6411417d4bffd9a89c41dc9dedda7d39fb4fa378eaa0ab55ec9ea1a94eb6a","impliedFormat":1},{"version":"1329e7cd7aca4d223ef5a088d82bc3f6f302ce70581c8d3823a050ea155eec3b","impliedFormat":1},{"version":"09248c76437c5b1efce189b4050c398f76a9385135af75c5fb46308b0d1432e0","impliedFormat":1},{"version":"b8df115bf7b30cceeb4550c0be507082b9930ee6268539a1a1aaffb0791cc299","impliedFormat":1},{"version":"dde00f41a2d2b1e70df6df8ac33de7cb3a658956212c7bee326245cc01c990c2","impliedFormat":1},{"version":"115d092e2748990ff0f67f376f47e9a45a2f21f7c7784102419c14b32c4362d1","impliedFormat":1},{"version":"4ba068163c800094cd81b237f86f22c3a33c23cf2a70b9252aca373cfdf59677","impliedFormat":1},{"version":"5cd5a999e218c635ea6c3e0d64da34a0f112757e793f29bc097fd18b5267f427","impliedFormat":1},{"version":"cc14b99b4e1bbedab2e3fbf058ed95231d8ced691f0645f2a206c32464f1bd7b","impliedFormat":1},{"version":"e6db934da4b03c1f4f1da6f4165a981ec004e9e7d956c585775326b392d4d886","impliedFormat":1},{"version":"53e65282ab040a9f535f4ad2e3c8d8346034d8d69941370886d17055874b348d","impliedFormat":1},{"version":"6ecb85c8cbb289fe72e1d302684e659cc01ef76ae8e0ad01e8b2203706af1d56","impliedFormat":1},{"version":"35ab64ba795a16668247552da22f2efe1c5fbc5bc775392c534747be7f91df04","impliedFormat":1},{"version":"34283015304de5df8d6e3740b9bca58e40513ec6333b3fb0a3fa3aa4c43b856b","impliedFormat":1},{"version":"4a397c8a3d1cccf28751bcca469d57faeb637e76b74f6826e76ad66a3c57c7b8","impliedFormat":1},{"version":"34c1bb0d4cf216f2acb3d013ad2c79f906fe89ce829e23a899029dfa738f97e0","impliedFormat":1},{"version":"b70b5b3d14d125d6dcc16a9ac43cafe8801f644954ac36cb2918723f9cbbd4fe","impliedFormat":1},{"version":"b50f05738b1e82cbb7318eb35a7aaf25036f5585b75bbf4377cfa2bad15c40bf","impliedFormat":1},{"version":"c682cb23f38a786bb37901b3f64727bd3c6210292f5bb36f3b11b63fbe2b23ee","impliedFormat":1},{"version":"d6592cf10dc7797d138af32800d53ff4707fdcd6e053812ce701404f5f533351","impliedFormat":1},{"version":"997f6604cd3d35281083706aa2862e8181ed1929a6cbb004c087557d6c7f23c4","impliedFormat":1},{"version":"9584dd669a3bf285e079502ebbb683e7da0bf7f7c1eb3d63f6ef929350667541","impliedFormat":1},{"version":"41a10e2db052a8bf53ed4d933d9b4f5caa30bdaee5a9d978af95f6641ce44860","impliedFormat":1},{"version":"1dd236a02d5974092780f456750107a3158124002de00ca17342f3a4819e297b","impliedFormat":1},{"version":"652e51858bafd77e1abcc4d4e9d5e48cc4426c3dd2910021abd8cc664961e135","impliedFormat":1},{"version":"8c5c602045ffdfebeffc7a71cd2bf201fe147a371274b5fcbded765a92f2af78","impliedFormat":1},{"version":"6392ce794eef6f9b57818264bb0eeb24a46cf923f7695a957c15d3d087fbb6cc","impliedFormat":1},{"version":"b10f123e8100aa98723c133af16f1226a6360ec5b6990a0fe82b165d289549db","impliedFormat":1},{"version":"93d20368cdb5fff7f7398bfc9b2b474b2a2d5867277a0631a33b7db7fd53d5b4","impliedFormat":1},{"version":"b1e69b9834104482fabf7fba40e86a282ee10e0600ffd75123622f4610b0ef9e","impliedFormat":1},{"version":"ad5bb6c450cb574289db945ff82be103ed5d0ad8ee8c76164cee7999c695ae01","impliedFormat":1},{"version":"217761e8a5482b3ad20588a801521c2f5f9f7fb2fbb416d4eff3aff9b57f8471","impliedFormat":1},{"version":"7ad780687331f05998c62277d73b6f15ee3e8045b0187a515ffc49c0ad993606","impliedFormat":1},{"version":"e9aa5ccb42e118f5418721d2ac8c0ebdebeb9502007db9b4c1b7c9b8d493013e","impliedFormat":1},{"version":"d300868212b3cc4d13228f5dc2e9880d5959dc742c0c55be2fc43bcda8504c8f","impliedFormat":1},{"version":"0c55daad827669843bd2401f1ddd163b74d9f922680b08ae6e162ceb6c11b078","impliedFormat":1},{"version":"fe45a9bc654dfd1550c9466c0dad9c8017f2626476ed9d25c65ddfc1943f6b74","impliedFormat":1},{"version":"03abcbc7b5b68887525be71a194dd7f9f68276b5fb5b8989abae9a91585ddc33","impliedFormat":1},{"version":"5055e86e689cfe39104ab71298757e5aac839c2ea9d1f12299e76fa79303d47d","impliedFormat":1},{"version":"42266c387025558423c19d624f671352aac3e449c23906cb636f9ae317b72d7e","impliedFormat":1},{"version":"e578a36b3683d233e045a85c9adb0f10e83d2b48f777b9c05fbc363ccc6bdd34","impliedFormat":1},{"version":"0235d0ba0c7b64244d4703b7d6cabd88ba809abeb01da0c13e9ed111bf5e7059","impliedFormat":1},{"version":"9b21e8a79f4213c1cf29f3c408f85a622f9eb6f4902549ccb9a2c00717a0b220","impliedFormat":1},{"version":"d556e498591413e254793f9d64d3108b369a97bd50f9dd4015b5552888e975ef","impliedFormat":1},{"version":"e2c652c7a45072e408c1749908ca39528d3a9a0eb6634a8999b8cf0e35ef20c8","impliedFormat":1},{"version":"ec08224b320739d26aaf61cead7f1e0f82e6581df0216f6fe048aa6f5042cb8c","impliedFormat":1},{"version":"4eadaa271acca9bd20fc6ac1ea5e4bf9ab6698b8ccf3ec07c33df4970f8130f1","impliedFormat":1},{"version":"3238d2eee64423c8d41972c88673b0327d8b40174a78ea346bcd10954a8f3373","impliedFormat":1},{"version":"8f773ddff9070d725dd23f5cf6c8e62bd86984a57b5d5e3fc7583010b48cd8ac","impliedFormat":1},{"version":"5ecd8fdeb6c87db9c320eefbfa9ea27efccbdce853ed38d5ba58e2da482edf1f","impliedFormat":1},{"version":"19a4d116285e7d77e91411966930761a2204ce2d20915afdb12652681a4a88d7","impliedFormat":1},{"version":"c30ca82112586c5dae7477d7e82cc91a7e0d1e658c581f9ec3df07c4485bba84","impliedFormat":1},{"version":"68fca1813d17ee736f41124ccc958d0364cdef79ad1222951bfacc36b2630a58","impliedFormat":1},{"version":"7813329e568df1d42e5a6c52312b1a7c69700e35a561cf085158c345be155b22","impliedFormat":1},{"version":"561067dc7b6b7635277d3cad0a0e11f698d377063dd2c15dfac43ef78847eef4","impliedFormat":1},{"version":"438247e782a8a9b9abdce618e963667cf95157cc6d3f5194a452d3c7d9e9655c","impliedFormat":1},{"version":"253f79802f33f405c1807f33efa7d78e0a26143ee694297d4f8e1477c7ed5e28","impliedFormat":1},{"version":"f1e8eca509487806fdf979349cfcdb6ffdeb20f11b7e95666c4309d12dcd9ba6","impliedFormat":1},{"version":"83724b26b711d85d6cfc9dd92fd5d666ffaae27fcfb1a0110401b98814ea26c0","impliedFormat":1},{"version":"869a27c929366c3c864013a991fd4c4c86af73eba25513e8ae915f814d3d349c","impliedFormat":1},{"version":"bfa105c32ed586b227188f7b568776d03202dc7aa4c3af2746579450c7d5e7f2","impliedFormat":1},{"version":"756e3f41a7f2501a34e1a070283c7f5550e200eeb43fed3c806e3f2edd924a75","impliedFormat":1},{"version":"59935cc13dcb7c3c7825e770a61e6696bfd11b65e3e47c28acc410dbdf8461c0","impliedFormat":1},{"version":"85e2808cc73ab3ac07774802b34a6ff0d7e1e46c26de7bc2dbe08e04b3340edb","impliedFormat":1},{"version":"f766e5cdea938e0c9d214533fd4501ab0ee23ab4efca9edba334fa02d2869f11","impliedFormat":1},{"version":"eb380820a3a1feda3a182a3d078da18e0d5b7da08ae531ce11133a84b479678c","impliedFormat":1},{"version":"7fba5cc3088ad9acada3daeff52dae0f2cac8d84d19508abd78af5924dc96bea","impliedFormat":1},{"version":"14176cfdbc3d1d633ad9b5daf044ab4c7d0d73be61ca2f14388800e21f0989cd","impliedFormat":1},{"version":"a24f510afe4d938d625a4b5a5374ac0478e56305e8743dd7d37d86d709754286","impliedFormat":1},{"version":"648acdbcbcd01b1a91e8b0ad390ed59fada685977f44b90e148b65bd8159dfe8","impliedFormat":1},{"version":"8309898ba0ac6f2856a94a11723d499091253a6d5df34ddebc6149d43480bfd2","impliedFormat":1},{"version":"a317ae0eb092da3fd799d1717a2da319a74abebe85e2914cb259222969f95705","impliedFormat":1},{"version":"36d76e2dbd5f5243bd566b018c589e2ba707e34b24ec7d285feb11ba6bf23fbe","impliedFormat":1},{"version":"f780879a2ca63dbb59b36f772bc28dccd2840f1377d8d632e8c978b99c26a45f","impliedFormat":1},{"version":"335c2e013b572967a9a282a70f9dded38631189b992381f1df50e966c7f315d6","impliedFormat":1},{"version":"8b7a519edbd0b7654491300d8e3cbd2cb3ef921003569ca39ebd33e77479bb99","impliedFormat":1},{"version":"c90f8038c75600e55db93d97bab73c0ab8fb618d75392d1d1ad32e2f6e9c7908","impliedFormat":1},{"version":"ca083f3bf68e813b5bded56ecbf177636aa75833eb86c7b40e3d75b8ce4c2f78","impliedFormat":1},{"version":"3c8bf00283ef468da8389119d3f5662c81106e302c8810f40ea86b1018df647e","impliedFormat":1},{"version":"67b248e4bac845c5139898b44cbd3e1213674bcc9831039701b5f0f957243a24","impliedFormat":1},{"version":"63d49516f359186f7b3e3115f2c829ed75c319b34022c97b56beead032a073b7","impliedFormat":1},{"version":"9f5f256c7b5cc4a98ef557ea9720f81e96319d569f731c897ddb4514936242b4","impliedFormat":1},{"version":"a20ded6c920f6e566537e93d69cbad79bc57d7e3ce85686003078cf88c1c9cfc","impliedFormat":1},{"version":"40b2d781df7b4a76d33454cb917c3883655ec1d8d05424b7a80d01610ad5082f","impliedFormat":1},{"version":"703ea2acd8b4741248897a5709cd46e22fcd9d13f01ff3481322a86505f0b77c","impliedFormat":1},{"version":"e09c56f8c446225e061b53cb2f95fcbbc8555483ab29165f6b0f39bc82c8d773","impliedFormat":1},{"version":"51ebaff0cba6b3adf43f13b57bb731d56946cabd06d14cf9dfc7c5eaa8f95770","impliedFormat":1},{"version":"a6a059446e66fbf5072eccce94eb5587cef2f99aa04d4bbd4ebe63d0a6592a4f","impliedFormat":1},{"version":"6e2533e27eba5ff02d6eed37e0a7eb69ae7982e0f72fd8f74c90ab201f061867","impliedFormat":1},{"version":"9c10dd3d85b7620ed3105b3f018125d0bb54198bf5847e39622afb22c651a1ad","impliedFormat":1},{"version":"58c62e415bf74b1423bf443587e33d7951a8bf19d7b03073f26e86d9b43ba9ea","impliedFormat":1},{"version":"dd6ec67ad168e92b8bf79ba975c6e0be8c60e403ba704d1c1b31a6059c12f967","impliedFormat":1},{"version":"bcaf468eea143f8e68ca40e5da58d640656b4f36697170c339042500be78ac5d","impliedFormat":1},{"version":"92de961d1db5fe075db8c0b6414a6eec430adaf9022465fe9d0a23f437aafcb3","impliedFormat":1},{"version":"7610ecdae59cea1a8db7580941ebc24d522d8ac1751ce718a6af22d41e1a1279","impliedFormat":1},{"version":"7355edff7686f91edbca25e0fe9d6c3359df2520d48d3dc6d857aa47047f8ddf","impliedFormat":1},{"version":"d49275f9098a8e7a5df7c55321b0242cef0bfdde51018b7b2709c4dc74917822","impliedFormat":1},{"version":"b25556c4111afad4cb174aa4674db2e5b23a6b191dc6a3e42c7c3417ea446a68","impliedFormat":1},{"version":"f9568a3a6c74013aee8b09d73ef04175596b51ce6f5d9dcd4885418170fe9306","impliedFormat":1},{"version":"bd3910ccd4fcd05ebd83fbfeb62f5a82a6674c85c6c0e4755c16298df7abe4d7","impliedFormat":1},{"version":"7c0541d0addc3007e5f5776023d5e6e44f96eae0684cdabe59ef04f2a294b116","impliedFormat":1},{"version":"70137204b720e4dd1b81260a70578f0f4f417c53837f8a13859b2f58e20d7150","impliedFormat":1},{"version":"b28b6875a761fd153ebf120fecb359660de80fd36e90c9b3d72a12318bd5d789","impliedFormat":1},{"version":"56d092bd6225f6e67d9acab3fd65ce0a4edb36cadba2f0370e67322e2f6f1bc8","impliedFormat":1},{"version":"a4709d5d466ad8dcf4ddccb905ad95348131df1616f964185be9739f96526bde","impliedFormat":1},{"version":"73b0fd6255f24e82be861f800a264f0175984062b6ccca3052578b03ed6f397b","impliedFormat":1},{"version":"4a3f7c6f02cb01eb7a9800548b41cfa03a57e476fc92a72869983f37efa8067a","impliedFormat":1},{"version":"fafd0ff1e1aa1ef702a4600d6ecdf561bb2e77cccfa61763ff7360b6e23c816e","impliedFormat":1},{"version":"8187c1540fb51442b1bbbef28fcc62788888d1813472f5e140085117f3a4a3af","signature":"d325cf3d9625f7a31d47fcd8ec6187d30a1477b8ba9674f6a8a919b17f48d098"},{"version":"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","impliedFormat":1},{"version":"e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","impliedFormat":1},{"version":"622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","impliedFormat":1},{"version":"81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","impliedFormat":1},{"version":"a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","impliedFormat":1},{"version":"75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","impliedFormat":1},{"version":"8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","impliedFormat":1},{"version":"a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","impliedFormat":1},{"version":"5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","impliedFormat":1},{"version":"d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","impliedFormat":1},{"version":"a20c3e0fe86a1d8fc500a0e9afec9a872ad3ab5b746ceb3dd7118c6d2bff4328","impliedFormat":1},{"version":"cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","impliedFormat":1},{"version":"c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","impliedFormat":1},{"version":"340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","impliedFormat":1},{"version":"fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","impliedFormat":1},{"version":"2bee1efe53481e93bb8b31736caba17353e7bb6fc04520bd312f4e344afd92f9","impliedFormat":1},{"version":"357b67529139e293a0814cb5b980c3487717c6fbf7c30934d67bc42dad316871","impliedFormat":1},{"version":"99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","impliedFormat":1},{"version":"c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","impliedFormat":1},{"version":"883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","impliedFormat":1},{"version":"d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","impliedFormat":1},{"version":"09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","impliedFormat":1},{"version":"eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","impliedFormat":1},{"version":"28d47319b97dbeee9130b78eae03b2061d46dedbf92b0d9de13ed7ab8399ccd0","impliedFormat":1},{"version":"6559a36671052ca93cab9a289279a6cef6f9d1a72c34c34546a8848274a9c66c","impliedFormat":1},{"version":"7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","impliedFormat":1},{"version":"c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","impliedFormat":1},{"version":"6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","impliedFormat":1},{"version":"d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","impliedFormat":1},{"version":"1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","impliedFormat":1},{"version":"c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","impliedFormat":1},{"version":"eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","impliedFormat":1},{"version":"633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","impliedFormat":1},{"version":"f379412f2c0dddd193ff66dcdd9d9cc169162e441d86804c98c84423f993aa8a","impliedFormat":1},{"version":"f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","impliedFormat":1},{"version":"d928324d17146fce30b99a28d1d6b48648feac72bbd23641d3ce5ac34aefdfee","impliedFormat":1},{"version":"142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","impliedFormat":1},{"version":"cbd19f594f0ee7beffeb37dc0367af3908815acf4ce46d86b0515478718cfed8","impliedFormat":1},{"version":"c8282f67ef03eeeb09b8f9fd67c238a7cb0df03898e1c8d0e0daca14d4d18aa0","impliedFormat":1},{"version":"8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","impliedFormat":1},{"version":"896bbc7402b3a403cda96813c8ea595470ff76d31f32869d053317c00ca2589a","impliedFormat":1},{"version":"5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","impliedFormat":1},{"version":"7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","impliedFormat":1},{"version":"a96bc00e0c356e29e620eaec24a56d6dd7f4e304feefcc99066a1141c6fe05a7","impliedFormat":1},{"version":"d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","impliedFormat":1},{"version":"7333ee6354964fd396297958e52e5bf62179aa2c88ca0a35c6d3a668293b7e0e","impliedFormat":1},{"version":"19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","impliedFormat":1},{"version":"9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","impliedFormat":1},{"version":"d406da1eccf18cec56fd29730c24af69758fe3ff49c4f94335e797119cbc0554","impliedFormat":1},{"version":"4898c93890a136da9156c75acd1a80a941a961b3032a0cf14e1fa09a764448b7","impliedFormat":1},{"version":"f5d7a845e3e1c6c27351ea5f358073d0b0681537a2da6201fab254aa434121d3","impliedFormat":1},{"version":"3a47d4582ef0697cccf1f3d03b620002f03fb0ff098f630e284433c417d6c61b","impliedFormat":1},{"version":"d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","impliedFormat":1},{"version":"ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","impliedFormat":1},{"version":"d40d20ac633703a7333770bfd60360126fc3302d5392d237bbb76e8c529a4f95","impliedFormat":1},{"version":"35a9867207c488061fb4f6fe4715802fbc164b4400018d2fa0149ad02db9a61c","impliedFormat":1},{"version":"55fade96019df8eb3d457d70a29fcdf7fa405e5726c5bf1b2fa25e4102c83b12","impliedFormat":1},{"version":"0abe2cd72812bbfc509975860277c7cd6f6e0be95d765a9da77fee98264a7e32","impliedFormat":1},{"version":"601fe4e366b99181cd0244d96418cffeaaa987a7e310c6f0ed0f06ce63dfe3e9","impliedFormat":1},{"version":"c66a4f2b1362abc4aeee0870c697691618b423c8c6e75624a40ef14a06f787b7","impliedFormat":1},{"version":"90433c678bc26751eb7a5d54a2bb0a14be6f5717f69abb5f7a04afc75dce15a4","impliedFormat":1},{"version":"cd0565ace87a2d7802bf4c20ea23a997c54e598b9eb89f9c75e69478c1f7a0b4","impliedFormat":1},{"version":"738020d2c8fc9df92d5dee4b682d35a776eaedfe2166d12bc8f186e1ea57cc52","impliedFormat":1},{"version":"86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","impliedFormat":1},{"version":"d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","impliedFormat":1},{"version":"e84e9b89251a57da26a339e75f4014f52e8ef59b77c2ee1e0171cde18d17b3b8","impliedFormat":1},{"version":"272dbfe04cfa965d6fff63fdaba415c1b5a515b1881ae265148f8a84ddeb318f","impliedFormat":1},{"version":"2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","impliedFormat":1},{"version":"eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","impliedFormat":1},{"version":"72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","impliedFormat":1},{"version":"ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","impliedFormat":1},{"version":"ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","impliedFormat":1},{"version":"0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","impliedFormat":1},{"version":"605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","impliedFormat":1},{"version":"67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","impliedFormat":1},{"version":"c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","impliedFormat":1},{"version":"195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","impliedFormat":1},{"version":"da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","impliedFormat":1},{"version":"083aebdd7c96aee90b71ec970f81c48984d9c8ab863e7d30084f048ddcc9d6af","impliedFormat":1},{"version":"1c3bde1951add95d54a05e6628a814f2f43bf9d49902729eaf718dc9eb9f4e02","impliedFormat":1},{"version":"d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","impliedFormat":1},{"version":"0be3da88f06100e2291681bbda2592816dd804004f0972296b20725138ebcddf","impliedFormat":1},{"version":"3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","impliedFormat":1},{"version":"cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","impliedFormat":1},{"version":"a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","impliedFormat":1},{"version":"2828dabf17a6507d39ebcc58fef847e111dcf2d51b8e4ff0d32732c72be032b3","impliedFormat":1},{"version":"c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","impliedFormat":1},{"version":"118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","impliedFormat":1},{"version":"01acd7f315e2493395292d9a02841f3b0300e77ccf42f84f4f11460e7623107d","impliedFormat":1},{"version":"656d1ce5b8fbed896bb803d849d6157242261030967b821d01e72264774cab55","impliedFormat":1},{"version":"da66c1b41d833858fe61947432130d39649f0b53d992dfd7d00f0bbe57191ef4","impliedFormat":1},{"version":"835739c6dcf0a9a1533d1e95b7d7cf8e44ca1341652856b897f4573078b23a31","impliedFormat":1},{"version":"774a3bcc0700036313c57a079e2e1161a506836d736203aa0463efa7b11a7e54","impliedFormat":1},{"version":"96577e3f8e0f9ea07ddf748d72dc1908581ef2aafd4ae7418a4574c26027cf02","impliedFormat":1},{"version":"f55971cb3ede99c17443b03788fe27b259dcd0f890ac31badcb74e3ffb4bb371","impliedFormat":1},{"version":"0ef0c246f8f255a5d798727c40d6d2231d2b0ebda5b1ec75e80eadb02022c548","impliedFormat":1},{"version":"ea127752a5ec75f2ac6ef7f1440634e6ae5bc8d09e6f98b61a8fb600def6a861","impliedFormat":1},{"version":"862320e775649dcca8915f8886865e9c6d8affc1e70ed4b97199f3b70a843b47","impliedFormat":1},{"version":"561764374e9f37cb895263d5c8380885972d75d09d0db64c12e0cb10ba90ae3e","impliedFormat":1},{"version":"ee889da857c29fa7375ad500926748ef2e029a6645d7c080e57769923d15dfef","impliedFormat":1},{"version":"56984ba2d781bd742b6bc0fa34c10df2eae59b42ec8b1b731d297f1590fa4071","impliedFormat":1},{"version":"7521de5e64e2dd022be87fce69d956a52d4425286fbc5697ecfec386da896d7e","impliedFormat":1},{"version":"f50b072ec1f4839b54fd1269a4fa7b03efbc9c59940224c7939632c0f70a39c3","impliedFormat":1},{"version":"a5b7ec6f1ff3f1d19a2547f7e1a50ab1284e6b4755d260a481ea01ed2c7cec60","impliedFormat":1},{"version":"1747f9eebf5beb8cfc46cf0303e300950b7bff20cff60b9c46818caced3226e3","impliedFormat":1},{"version":"9d969f36abb62139a90345ee5d03f1c2479831bd84c8f843d87ec304cad96ead","impliedFormat":1},{"version":"e972b52218fd5919aec6cd0e5e2a5fb75f5d2234cf05597a9441837a382b2b29","impliedFormat":1},{"version":"d1e292b0837d0ef5ede4f52363c9d8e93f5d5234086adc796e11eae390305b36","impliedFormat":1},{"version":"0a9e10028a96865d0f25aeca9e3b1ff0691b9b662aa186d9d490728434cf8261","impliedFormat":1},{"version":"1aed740b674839c89f427f48737bad435ee5a39d80b5929f9dc9cc9ac10a7700","impliedFormat":1},{"version":"6e9e3690dc3a6e99a845482e33ee78915893f2d0d579a55b6a0e9b4c44193371","impliedFormat":1},{"version":"4e7a76cce3b537b6cdb1c4b97e29cb4048ee8e7d829cf3a85f4527e92eb573f2","impliedFormat":1},{"version":"5e8c2b0769cea4cdb1b1724751116bc5a33800e87238be7da34c88ade568d287","impliedFormat":1},{"version":"46f1fe93f199a419172d7480407d9572064b54712b69406efa97e0244008b24e","impliedFormat":1},{"version":"044e6aaa3f612833fb80e323c65e9d816c3148b397e93630663cda5c2d8f4de1","impliedFormat":1},{"version":"deaf8eb392c46ea2c88553d3cc38d46cfd5ee498238dbc466e3f5be63ae0f651","impliedFormat":1},{"version":"6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","impliedFormat":1},{"version":"c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","impliedFormat":1},{"version":"7905c052681cbe9286797ec036942618e1e8d698dcc2e60f4fb7a0013d470442","impliedFormat":1},{"version":"89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","impliedFormat":1},{"version":"55ae9554811525f24818e19bdc8779fa99df434be7c03e5fc47fa441315f0226","impliedFormat":1},{"version":"d4a4f10062a6d82ba60d3ffde9154ef24b1baf2ce28c6439f5bdfb97aa0d18fc","impliedFormat":1},{"version":"f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","impliedFormat":1},{"version":"e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","impliedFormat":1},{"version":"62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","impliedFormat":1},{"version":"91d695bba902cc2eda7edc076cd17c5c9340f7bb254597deb6679e343effadbb","impliedFormat":1},{"version":"e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","impliedFormat":1},{"version":"a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","impliedFormat":1},{"version":"0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","impliedFormat":1},{"version":"2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","impliedFormat":1},{"version":"0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","impliedFormat":1},{"version":"0db56fa7e217c8f35a618aa3153486c786a76782267febba8a1023baf1f4f55b","impliedFormat":1},{"version":"55751aaa3006e3a393539043695d6d2037cbd68676c9019805096ee84a7fb52f","impliedFormat":1},{"version":"a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","impliedFormat":1},{"version":"99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","impliedFormat":1},{"version":"70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","impliedFormat":1},{"version":"c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","impliedFormat":1},{"version":"df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","impliedFormat":1},{"version":"ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","impliedFormat":1},{"version":"20f630766b73752f9d74aab6f4367dba9664e8122ea2edcb00168e4f8b667627","impliedFormat":1},{"version":"468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","impliedFormat":1},{"version":"954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","impliedFormat":1},{"version":"31a030f1225ab463dd0189a11706f0eb413429510a7490192a170114b2af8697","impliedFormat":1},{"version":"6f48f244cd4b5b7e9a0326c74f480b179432397580504726de7c3c65d6304b36","impliedFormat":1},{"version":"5520e6defac8e6cdced6dd28808fafe795cb2cd87407bb1012e13a2b061f50b7","impliedFormat":1},{"version":"c3451661fb058f4e15971bbed29061dd960d02d9f8db1038e08b90d294a05c68","impliedFormat":1},{"version":"1f21aefa51f03629582568f97c20ef138febe32391012828e2a0149c2c393f62","impliedFormat":1},{"version":"b18141cda681d82b2693aef045107a910b90a7409ecff0830e1283f0bb2a53e6","impliedFormat":1},{"version":"18eb53924f27af2a5e9734dce28cf5985df7b2828dade1239241e95b639e9bf1","impliedFormat":1},{"version":"a9f1c52f4e7c2a2c4988b5638bd3dbfe38e408b358d02dd2fb8c8920e877f088","impliedFormat":1},{"version":"a7e10a8ad6536dd0225029e46108b18cee0d3c15c2f6e49bd62798ad85bc57b6","impliedFormat":1},{"version":"8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","impliedFormat":1},{"version":"843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","impliedFormat":1},{"version":"6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","impliedFormat":1},{"version":"5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","impliedFormat":1},{"version":"afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","impliedFormat":1},{"version":"9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","impliedFormat":1},{"version":"71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","impliedFormat":1},{"version":"1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","impliedFormat":1},"5d4242d50092a353e5ab1f06663a89dbc714c7d9d70072ea03c83c5b14750f05","3469c5aa62e1ba5b183d9bb9d40193e91aa761fc5734d332650b0bd49c346266",{"version":"bc0b17d3fd0e34083fbc886367ed53563b569d1d05214f60b21117e2dbfb7fdd","impliedFormat":1},{"version":"c1cc2a1ac9ae043fd05e07193d408c0f0bf4628e54c19871621ce1049d4c200e","impliedFormat":1},{"version":"d005c21b9c42bd1ccde99f183dc2d3c992be407aa63c4ba3371e4f81cf36b2aa","impliedFormat":1},{"version":"9a7638d62db8cfa1466093d7d413fdf85c5e4a7c663ed76f2bfc8739c8e01505","impliedFormat":1},{"version":"e608cfd08fb30d374ba4b822fb2329a850d515bee8599117c9f53e925f7a548c","impliedFormat":1},{"version":"c338859b98f8a11f80e3e47e33767299e7a4facdf0870c01c8694fa8fa048d16","impliedFormat":1},{"version":"4f64016165565f743356812e33ac22f5ef91891738927e413121f502b186210c","impliedFormat":1},{"version":"b113e9770d5be136c5e2add9e6cdf40d85051762ff2391f71d552975e66b1500","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"dff93e0997c4e64ff29e9f70cad172c0b438c4f58c119f17a51c94d48164475a","impliedFormat":1},{"version":"fd1ddf926b323dfa439be49c1d41bbe233fe5656975a11183aeb3bf2addfa3bb","impliedFormat":1},{"version":"6dda11db28da6bcc7ff09242cd1866bdddd0ae91e2db3bea03ba66112399641a","impliedFormat":1},{"version":"ea4cd1e72af1aa49cf208b9cb4caf542437beb7a7a5b522f50a5f1b7480362ed","impliedFormat":1},{"version":"903a7d68a222d94da11a5a89449fdd5dd75d83cd95af34c0242e10b85ec33a93","impliedFormat":1},{"version":"e7fe2e7ed5c3a7beff60361632be19a8943e53466b7dd69c34f89faf473206d7","impliedFormat":1},{"version":"b4896cee83379e159f83021e262223354db79e439092e485611163e2082224ff","impliedFormat":1},{"version":"5243e79a643e41d9653011d6c66e95048fc0478eb8593dc079b70877a2e3990e","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"a12d953aa755b14ac1d28ecdc1e184f3285b01d6d1e58abc11bf1826bc9d80e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"2b7b4bc0ff201a3f08b5d1e5161998ea655b7a2c840ca646c3adcaf126aa8882","affectsGlobalScope":true,"impliedFormat":1},{"version":"5d603acd3ee29b39c8f1a40f1a5fe7a4176aeb1f69d136c368f9e7faedd5af4e","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"81711af669f63d43ccb4c08e15beda796656dd46673d0def001c7055db53852d","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"bdba81959361810be44bcfdd283f4d601e406ab5ad1d2bdff0ed480cf983c9d7","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b326f4813b90d230ec3950f66bd5b5ce3971aac5fac67cfafc54aa07b39fd07f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6ee692acba8b517b5041c02c5a3369a03f36158b6bb7605d6a98d832e7a13fcc","impliedFormat":1},{"version":"ee07335d073f94f1ec8d7311c4b15abac03a8160e7cdfd4771c47440a7489e1b","impliedFormat":1},{"version":"ec79bdd311bcba9b889af9da0cd88611affdda8c2d491305fa61b7529d5b89ba","impliedFormat":1},{"version":"73cf6cc19f16c0191e4e9d497ab0c11c7b38f1ca3f01ad0f09a3a5a971aac4b8","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"eec1e051df11fb4c7f4df5a9a18022699e596024c06bc085e9b410effe790a9a","impliedFormat":1},{"version":"d83f86427b468176fbacb28ef302f152ad3d2d127664c627216e45cfa06fbf7e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f72bc8fe16da67e4e3268599295797b202b95e54bd215a03f97e925dd1502a36","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"915e18c559321c0afaa8d34674d3eb77e1ded12c3e85bf2a9891ec48b07a1ca5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a2f3aa60aece790303a62220456ff845a1b980899bdc2e81646b8e33d9d9cc15","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"70b57b5529051497e9f6482b76d91c0dcbb103d9ead8a0549f5bab8f65e5d031","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"0be405730b99eee7dbb051d74f6c3c0f1f8661d86184a7122b82c2bfb0991922","impliedFormat":1},{"version":"8302157cd431b3943eed09ad439b4441826c673d9f870dcb0e1f48e891a4211e","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"dba28a419aec76ed864ef43e5f577a5c99a010c32e5949fe4e17a4d57c58dd11","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"a5890565ed564c7b29eb1b1038d4e10c03a3f5231b0a8d48fea4b41ab19f4f46","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7172949957e9ae6dd5c046d658cc5f1d00c12d85006554412e1de0dcfea8257e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a654e0d950353614ba4637a8de4f9d367903a0692b748e11fccf8c880c99735","affectsGlobalScope":true,"impliedFormat":1},{"version":"42da246c46ca3fd421b6fd88bb4466cda7137cf33e87ba5ceeded30219c428bd","impliedFormat":1},{"version":"3a051941721a7f905544732b0eb819c8d88333a96576b13af08b82c4f17581e4","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"66e4838e0e3e0ea1ee62b57b3984a7f606f73523dfdae6500b6e3258c0aa3c7d","affectsGlobalScope":true,"impliedFormat":1},{"version":"db3d77167a7da6c5ba0c51c5b654820e3464093f21724ccd774c0b9bc3f81bc0","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1},{"version":"76e7352249c42b9d54fe1f9e1ebcef777da1cb2eb33038366af49469d433597b","impliedFormat":1},{"version":"88cb622dd0ec1ef860e5c27fa884e60d2eba5ae22c7907dff82c56a69bdd2c8a","impliedFormat":1},{"version":"eb234b3e285e8bc071bdddc1ec0460095e13ead6222d44b02c4e0869522f9ba3","impliedFormat":1},{"version":"c85114872760189e50fef131944427b0fb367f0cc0b6dce164bb427a6fd89381","impliedFormat":1},{"version":"5ad69b0d7e7bdbcd3adfdb6a3e306e935c9c2711b1c60493646504a2f991346e","impliedFormat":1},{"version":"a12a667efdeb03b529bd4ebb4032998ddd32743799f59f9f18b186f8e63a2cf1","impliedFormat":1},{"version":"cee7efa0ae4c58deab218d1df0d1bf84abfd5c356cff28bca1421489cba13a19","impliedFormat":1},{"version":"f9e034b1ae29825c00532e08ea852b0c72885c343ee48d2975db0a6481218ab3","impliedFormat":1},{"version":"1193f49cbb883f40326461fe379e58ffa4c18d15bf6d6a1974ad2894e4fb20f3","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"452234c0b8169349b658a4b5e2b271608879b3914fcc325735ed21b9cb88d58d","impliedFormat":1},{"version":"3860b1088a3d0edbe82d07b7fb13a0d04b5f23653e70714892d58e847e37bb13","impliedFormat":1},{"version":"02e6216fe46b07bbfdc787254cf085fe383ad957fe7a26aab34cb4a6e0f969b6","impliedFormat":1},{"version":"1481128ac360e7a5fc5944efc36b7634b8e5eea8870d3e5cef6647af83f98c8c","impliedFormat":1},{"version":"b5b9340f337ae17e2b59afc4c70a45b698a0227a81daf16f4bdea22757d7ba74","impliedFormat":1},{"version":"3aec561fe42dc4beb19e50b9711580620d5b0988ca0295ad0f4060a5669ee3ba","impliedFormat":1},{"version":"801e735da27b1fcb22b4d79bbe1240f211889d633026cbbd1469f941245ab419","impliedFormat":1},{"version":"5265fd19af035a75b0ea228cdd98820babea56b2b79c75517c0158ad022ae16c","impliedFormat":1},{"version":"d9fdea96fc90cc8d970044bb7bbd75766899f06a6214383bbc3b95c061bdf733","impliedFormat":1},{"version":"b3952aed8c195a401b42a8995800b5c1ea4d9d390c1a5e3521a1a3c3653f9b71","impliedFormat":1},{"version":"69c63d594f437c04b4971e171b8b3eff3d926141b87c4a898cc139b39ac86666","impliedFormat":1},{"version":"332680a9475bd631519399f9796c59502aa499aa6f6771734eec82fa40c6d654","impliedFormat":1},{"version":"911484710eb1feaf615cb68eb5875cbfb8edab2a032f0e4fe5a7f8b17e3a997c","impliedFormat":1},{"version":"d83f3c0362467589b3a65d3a83088c068099c665a39061bf9b477f16708fa0f9","impliedFormat":1},{"version":"a7c022cf49ff55c5b21a6f242b62ca637f84adb48ca962a2e1a9c8713a368415","impliedFormat":1},{"version":"29994a97447d10d003957bcc0c9355c272d8cf0f97143eb1ade331676e860945","impliedFormat":1},{"version":"6865b4ef724cb739f8f1511295f7ce77c52c67ff4af27e07b61471d81de8ecfc","impliedFormat":1},{"version":"9cddf06f2bc6753a8628670a737754b5c7e93e2cfe982a300a0b43cf98a7d032","impliedFormat":1},{"version":"3f8e68bd94e82fe4362553aa03030fcf94c381716ce3599d242535b0d9953e49","impliedFormat":1},{"version":"63e628515ec7017458620e1624c594c9bd76382f606890c8eebf2532bcab3b7c","impliedFormat":1},{"version":"355d5e2ba58012bc059e347a70aa8b72d18d82f0c3491e9660adaf852648f032","impliedFormat":1},{"version":"0c543e751bbd130170ed4efdeca5ff681d06a99f70b5d6fe7defad449d08023d","impliedFormat":1},{"version":"c301dded041994ed4899a7cf08d1d6261a94788da88a4318c1c2338512431a03","impliedFormat":1},{"version":"5fa7cdc6627ece3484f155a10eec22f04dd47400f929c0b2f1fb83ac91a26d38","impliedFormat":1},{"version":"ded3d0fb8ac3980ae7edcc723cc2ad35da1798d52cceff51c92abe320432ceeb","impliedFormat":1},{"version":"ed7f0e3731c834809151344a4c79d1c4935bf9bc1bd0a9cc95c2f110b1079983","impliedFormat":1},{"version":"d4886d79f777442ac1085c7a4fe421f2f417aa70e82f586ca6979473856d0b09","impliedFormat":1},{"version":"ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","impliedFormat":1},{"version":"9a0a0af04065ddfecc29d2b090659fce57f46f64c7a04a9ba63835ef2b2d0efa","impliedFormat":1},{"version":"10297d22a9209a718b9883a384db19249b206a0897e95f2b9afeed3144601cb0","impliedFormat":1},{"version":"a19f4622f2cadcadc225412e4164d09cb9504737ed6b3516f68ed25b67b18e15","impliedFormat":1},{"version":"34d206f6ba993e601dade2791944bdf742ab0f7a8caccc661106c87438f4f904","impliedFormat":1},{"version":"05ca49cc7ba9111f6c816ecfadb9305fffeb579840961ee8286cc89749f06ebd","impliedFormat":1},"cf5a83f33dcd4329beb2ecb345711a3132e7cb17af6fe133d3dfa6d8dca02904","660cdb102b4e9ba49434e80f05b72845510786226e816e66dbfa7dc2b93af543","3e106606e40b39049dadfbfbd6ba0e09b118c5a377c6eb8985e7560e363b95e7",{"version":"6ecc423e71318bafbd230e6059e082c377170dfc7e02fccfa600586f8604d452","impliedFormat":1},{"version":"772f9bdd2bf50c9c01b0506001545e9b878faa7394ad6e7d90b49b179a024584","impliedFormat":1},{"version":"431fa46c664434706f22edf86fcfab93853978036a87c06d99b7c5457ecb95db","impliedFormat":1},{"version":"7467736a77548887faa90a7d0e074459810a5db4bbc6de302a2be6c05287ccae","impliedFormat":1},{"version":"39504a2c1278ee4d0dc1a34e27c80e58b4c53c08c87e3a7fc924f18c936bebb5","impliedFormat":1},{"version":"cd1ccdd9fd7980d43dfede5d42ee3d18064baed98b136089cf7c8221d562f058","impliedFormat":1},{"version":"d60f9a4fd1e734e7b79517f02622426ea1000deb7d6549dfdece043353691a4e","impliedFormat":1},{"version":"ec05ccc3a2e35ef2800a5b5ed2eb2ad4cd004955447bebd86883ddf49625b400","impliedFormat":1},{"version":"403d28b5e5f8fcff795ac038902033ec5890143e950af45bd91a3ed231e8b59c","impliedFormat":1},{"version":"c73b59f91088c00886d44ca296d53a75c263c3bda31e3b2f37ceb137382282be","impliedFormat":1},{"version":"e7aa2c584edb0970cb4bb01eb10344200286055f9a22bc3dadcc5a1f9199af3e","impliedFormat":1},{"version":"bfeb476eb0049185cb94c2bfcadb3ce1190554bbcf170d2bf7c68ed9bb00458e","impliedFormat":1},{"version":"ae23a65a2b664ffe979b0a2a98842e10bdf3af67a356f14bbc9d77eb3ab13585","impliedFormat":1},{"version":"2db00053dff66774bc4216209acf094dd70d9dfd8211e409fc4bd8d10f7f66f6","impliedFormat":1},{"version":"eccf6ad2a8624329653896e8dbd03f30756cbd902a81b5d3942d6cf0e1a21575","impliedFormat":1},{"version":"1930c964051c04b4b5475702613cd5a27fcc2d33057aa946ff52bfca990dbc84","impliedFormat":1},{"version":"762992adfa3fbf42c0bce86caed3dc185786855b21a20265089770485e6aa9d3","impliedFormat":1},{"version":"1dbdb9a095f0619197019e870f3481a91e9281c77b0092a19ddfd1903066cd54","impliedFormat":1},{"version":"62463aa3d299ae0cdc5473d2ac32213a05753c3adce87a8801c6d2b114a64116","impliedFormat":1},{"version":"417a23912812e5284bf14adcfc7d8a323a633d6172fa460d06a4fb9404f8ad07","impliedFormat":1},{"version":"bd3e38cbf8108b661c591dcd03290d5cf2f2a8a1c74b045ba6b6bf4118b0a967","impliedFormat":1},{"version":"1c8a792c2a585467921107e93c06086fad8ebd300004bb81c49c36fb026d9f8f","impliedFormat":1},{"version":"4423628def6b7993f94afbddba7dd2b0668f85f6dac83c4b8f8a578ee95524f9","impliedFormat":1},{"version":"f689c0633e8c95f550d36af943d775f3fae3dac81a28714b45c7af0bbb76a980","impliedFormat":1},{"version":"fef736cfb404b4db9aa942f377dbbac6edb76d18aabd3b647713fa75da8939e9","impliedFormat":1},{"version":"0495afa06118083a11cd4da27acfd96a01b989aff0fc633823c5febe9668ef15","impliedFormat":1},{"version":"67feb4436be89f58ba899dec57f6e703bee1bb7205ba21ab50fca237f6753787","impliedFormat":1},{"version":"45659c92e49dfca4601acc7e57fbb03a71513c69768984baf86ead8d20387a01","impliedFormat":1},{"version":"b5325ff5c9dc488bb9c87711faf2b73f639c45f190b81df88ed056807206958b","impliedFormat":1},{"version":"cc4f5179acd0a8efad722a44c4621d0da29169e03d78a452a27f73e1e7f27985","impliedFormat":1},{"version":"a743cf98667fdbb6989d9a7629d25a9824a484ce639bbf2740dc809341e6dbce","impliedFormat":1},{"version":"a16d79b3c260525e9637a0d224d8461305097bb255e4a53b4c3d2d08ec3463fa","impliedFormat":1},{"version":"bb732222ec0c3c23753dcfbafd78ea3eba480c068d5b5c28d6f12d5bc1516cf0","impliedFormat":1},{"version":"8fc97ef271771dc6f81a9c846d007ac4f0cb5779e3f441c1de54dfda5046fe7b","impliedFormat":1},{"version":"29972ec0e3b3d660f8e091d35bf5c0ef98dc52b92a1a974d1dc17b3f2ecd53f9","impliedFormat":1},{"version":"7b36f5bce24167f089e4d3601e5fde14f0a233e1a0954df5ec56ae07f36e2219","impliedFormat":1},{"version":"1c225a18846203fafc4334658715b0d3fd3ee842c4cfd42e628a535eda17730d","impliedFormat":1},{"version":"7ce93da38595d1caf57452d57e0733474564c2b290459d34f6e9dcf66e2d8beb","impliedFormat":1},{"version":"d7b672c1c583e9e34ff6df2549d6a55d7ca3adaf72e6a05081ea9ee625dac59f","impliedFormat":1},{"version":"f3a2902e84ebdef6525ed6bf116387a1256ea9ae8eeb36c22f070b7c9ea4cf09","impliedFormat":1},{"version":"33bb0d96cea9782d701332e6b7390f8efae3af92fd3e2aa2ac45e4a610e705d6","impliedFormat":1},{"version":"ae3e98448468e46474d817b5ebe74db11ab22c2feb60e292d96ce1a4ee963623","impliedFormat":1},{"version":"f0a2fdee9e801ac9320a8660dd6b8a930bf8c5b658d390ae0feafdba8b633688","impliedFormat":1},{"version":"7beb7f04f6186bdac5e622d44e4cac38d9f2b9fcad984b10d3762e369524dd77","impliedFormat":1},{"version":"cb5eaaa2a079305b1c5344af739b29c479746f7a7aefffc7175d23d8b7c8dbb0","impliedFormat":1},{"version":"bd324dccada40f2c94aaa1ebc82b11ce3927b7a2fe74a5ab92b431d495a86e6f","impliedFormat":1},{"version":"56749bf8b557c4c76181b2fd87e41bde2b67843303ae2eabb299623897d704d6","impliedFormat":1},{"version":"5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","impliedFormat":1},{"version":"e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","impliedFormat":1},{"version":"6fc56a681a637069675b2e11b4aa105efe146f7a88876f23537e9ea139297cf9","impliedFormat":1},{"version":"33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","impliedFormat":1},{"version":"176d6f604b228f727afb8e96fd6ff78c7ca38102e07acfb86a0034d8f8a2064a","impliedFormat":1},{"version":"1b1a02c54361b8c222392054648a2137fc5983ad5680134a653b1d9f655fe43d","impliedFormat":1},{"version":"8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","impliedFormat":1},{"version":"e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","impliedFormat":1},{"version":"a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","impliedFormat":1},{"version":"6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","impliedFormat":1},{"version":"7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","impliedFormat":1},{"version":"7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","impliedFormat":1},{"version":"46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","impliedFormat":1},{"version":"8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","impliedFormat":1},{"version":"ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","impliedFormat":1},{"version":"45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","impliedFormat":1},{"version":"9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","impliedFormat":1},{"version":"b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","impliedFormat":1},{"version":"bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","impliedFormat":1},{"version":"7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","impliedFormat":1},{"version":"3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","impliedFormat":1},{"version":"1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","impliedFormat":1},{"version":"600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","impliedFormat":1},{"version":"32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","impliedFormat":1},{"version":"2426ed0e9982c3d734a6896b697adf5ae93d634b73eb15b48da8106634f6d911","impliedFormat":1},{"version":"057431f69d565fb44c246f9f64eac09cf309a9af7afb97e588ebef19cc33c779","impliedFormat":1},{"version":"960d026ca8bf27a8f7a3920ee50438b50ec913d635aa92542ca07558f9c59eca","impliedFormat":1},{"version":"71f5d895cc1a8a935c40c070d3d0fade53ae7e303fd76f443b8b541dee19a90c","impliedFormat":1},{"version":"252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","impliedFormat":1},{"version":"e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","impliedFormat":1},{"version":"c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","impliedFormat":1},{"version":"203d75f653988a418930fb16fda8e84dea1fac7e38abdaafd898f257247e0860","impliedFormat":1},{"version":"c5b3da7e2ecd5968f723282aba49d8d1a2e178d0afe48998dad93f81e2724091","impliedFormat":1},{"version":"efd2860dc74358ffa01d3de4c8fa2f966ae52c13c12b41ad931c078151b36601","impliedFormat":1},{"version":"09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","impliedFormat":1},{"version":"f7b622759e094a3c2e19640e0cb233b21810d2762b3e894ef7f415334125eb22","impliedFormat":1},{"version":"99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","impliedFormat":1},{"version":"f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","impliedFormat":1},{"version":"9f642953aba68babd23de41de85d4e97f0c39ef074cb8ab8aa7d55237f62aff6","impliedFormat":1},{"version":"4e171e0e0f32ea726e69fa33b816150d1886f0fa9fc2aa2584af85bf3e586bbc","impliedFormat":1},{"version":"2d2ec3235e01474f45a68f28cf826c2f5228b79f7d474d12ca3604cdcfdac80c","impliedFormat":1},{"version":"6dd249868034c0434e170ba6e0451d67a0c98e5a74fd57a7999174ee22a0fa7b","impliedFormat":1},{"version":"9716553c72caf4ff992be810e650707924ec6962f6812bd3fbdb9ac3544fd38f","impliedFormat":1},{"version":"506bc8f4d2d639bebb120e18d3752ddeee11321fd1070ad2ce05612753c628d6","impliedFormat":1},{"version":"053c51bbc32db54be396654ab5ecd03a66118d64102ac9e22e950059bc862a5e","impliedFormat":1},{"version":"1977f62a560f3b0fc824281fd027a97ce06c4b2d47b408f3a439c29f1e9f7e10","impliedFormat":1},{"version":"627570f2487bd8d899dd4f36ecb20fe0eb2f8c379eff297e24caba0c985a6c43","impliedFormat":1},{"version":"0f6e0b1a1deb1ab297103955c8cd3797d18f0f7f7d30048ae73ba7c9fb5a1d89","impliedFormat":1},{"version":"0a051f254f9a16cdde942571baab358018386830fed9bdfff42478e38ba641ce","impliedFormat":1},{"version":"17269f8dfc30c4846ab7d8b5d3c97ac76f50f33de96f996b9bf974d817ed025b","impliedFormat":1},{"version":"9e82194af3a7d314ccbc64bb94bfb62f4bfea047db3422a7f6c5caf2d06540a9","impliedFormat":1},{"version":"083d6f3547ccbf25dfa37b950c50bee6691ed5c42107f038cc324dbca1e173ae","impliedFormat":1},{"version":"952a9eab21103b79b7a6cca8ad970c3872883aa71273f540285cad360c35da40","impliedFormat":1},{"version":"8ba48776335db39e0329018c04486907069f3d7ee06ce8b1a6134b7d745271cc","impliedFormat":1},{"version":"e6d5809e52ed7ef1860d1c483e005d1f71bab36772ef0fd80d5df6db1da0e815","impliedFormat":1},{"version":"893e5cfbae9ed690b75b8b2118b140665e08d182ed8531e1363ec050905e6cb2","impliedFormat":1},{"version":"6ae7c7ada66314a0c3acfbf6f6edf379a12106d8d6a1a15bd35bd803908f2c31","impliedFormat":1},{"version":"e4b1e912737472765e6d2264b8721995f86a463a1225f5e2a27f783ecc013a7b","impliedFormat":1},{"version":"97146bbe9e6b1aab070510a45976faaf37724c747a42d08563aeae7ba0334b4f","impliedFormat":1},{"version":"c40d552bd2a4644b0617ec2f0f1c58618a25d098d2d4aa7c65fb446f3c305b54","impliedFormat":1},{"version":"09e64dea2925f3a0ef972d7c11e7fa75fec4c0824e9383db23eacf17b368532f","impliedFormat":1},{"version":"424ddba00938bb9ae68138f1d03c669f43556fc3e9448ed676866c864ca3f1d6","impliedFormat":1},{"version":"a0fe12181346c8404aab9d9a938360133b770a0c08b75a2fce967d77ca4b543f","impliedFormat":1},{"version":"3cc6eb7935ff45d7628b93bb6aaf1a32e8cb3b24287f9e75694b607484b377b3","impliedFormat":1},{"version":"ced02e78a2e10f89f4d70440d0a8de952a5946623519c54747bc84214d644bac","impliedFormat":1},{"version":"efd463021ccc91579ed8ae62584176baab2cd407c555c69214152480531a2072","impliedFormat":1},{"version":"29647c3b79320cfeecb5862e1f79220e059b26db2be52ea256df9cf9203fb401","impliedFormat":1},{"version":"e8cdefd2dc293cb4866ee8f04368e7001884650bb0f43357c4fe044cc2e1674f","impliedFormat":1},{"version":"582a3578ebba9238eb0c5d30b4d231356d3e8116fea497119920208fb48ccf85","impliedFormat":1},{"version":"185eae4a1e8a54e38f36cd6681cfa54c975a2fc3bc2ba6a39bf8163fac85188d","impliedFormat":1},{"version":"0c0a02625cf59a0c7be595ccc270904042bea523518299b754c705f76d2a6919","impliedFormat":1},{"version":"c44fc1bbdb5d1c8025073cb7c5eab553aa02c069235a1fc4613cd096d578ab80","impliedFormat":1},{"version":"cee72255e129896f0240ceb58c22e207b83d2cc81d8446190d1b4ef9b507ccd6","impliedFormat":1},{"version":"3b54670e11a8d3512f87e46645aa9c83ae93afead4a302299a192ac5458aa586","impliedFormat":1},{"version":"c2fc4d3a130e9dc0e40f7e7d192ef2494a39c37da88b5454c8adf143623e5979","impliedFormat":1},{"version":"2e693158fc1eedba3a5766e032d3620c0e9c8ad0418e4769be8a0f103fdb52cd","impliedFormat":1},{"version":"516275ccf3e66dc391533afd4d326c44dd750345b68bb573fc592e4e4b74545f","impliedFormat":1},{"version":"07c342622568693847f6cb898679402dd19740f815fd43bec996daf24a1e2b85","impliedFormat":1},{"version":"4d9bffaca7e0f0880868bab5fd351f9e4d57fcc6567654c4c330516fea7932aa","impliedFormat":1},{"version":"b42201db6adb94eeee965e8b8a5c24ce4a3fe78ebb89bbfd2d94bf2897af5134","impliedFormat":1},{"version":"89968316b7069339433bd42d53fe56df98b6990783dfe00c9513fb4bd01c2a1c","impliedFormat":1},{"version":"a4096686f982f6977433ee9759ecbef49da29d7e6a5d8278f0fbc7b9f70fce12","impliedFormat":1},{"version":"62e62a477c56cda719013606616dd856cfdc37c60448d0feb53654860d3113bb","impliedFormat":1},{"version":"207c107dd2bd23fa9febac2fe05c7c72cdac02c3f57003ab2e1c6794a6db0c05","impliedFormat":1},{"version":"55133e906c4ddabecdfcbc6a2efd4536a3ac47a8fa0a3fe6d0b918cac882e0d4","impliedFormat":1},{"version":"2147f8d114cf58c05106c3dccea9924d069c69508b5980ed4011d2b648af2ffe","impliedFormat":1},{"version":"2eb4012a758b9a7ba9121951d7c4b9f103fe2fc626f13bec3e29037bb9420dc6","impliedFormat":1},{"version":"fe61f001bd4bd0a374daa75a2ba6d1bb12c849060a607593a3d9a44e6b1df590","impliedFormat":1},{"version":"cfe8221c909ad721b3da6080570553dea2f0e729afbdbcf2c141252cf22f39b5","impliedFormat":1},{"version":"34e89249b6d840032b9acdec61d136877f84f2cd3e3980355b8a18f119809956","impliedFormat":1},{"version":"6f36ff8f8a898184277e7c6e3bf6126f91c7a8b6a841f5b5e6cb415cfc34820e","impliedFormat":1},{"version":"4b6378c9b1b3a2521316c96f5c777e32a1b14d05b034ccd223499e26de8a379c","impliedFormat":1},{"version":"07be5ae9bf5a51f3d98ffcfacf7de2fe4842a7e5016f741e9fad165bb929be93","impliedFormat":1},{"version":"cb1b37eda1afc730d2909a0f62cac4a256276d5e62fea36db1473981a5a65ab1","impliedFormat":1},{"version":"195f855b39c8a6e50eb1f37d8f794fbd98e41199dffbc98bf629506b6def73d7","impliedFormat":1},{"version":"471386a0a7e4eb88c260bdde4c627e634a772bf22f830c4ec1dad823154fd6f5","impliedFormat":1},{"version":"108314a60f3cb2454f2d889c1fb8b3826795399e5d92e87b2918f14d70c01e69","impliedFormat":1},{"version":"d75cc838286d6b1260f0968557cd5f28495d7341c02ac93989fb5096deddfb47","impliedFormat":1},{"version":"d531dc11bb3a8a577bd9ff83e12638098bfc9e0856b25852b91aac70b0887f2a","impliedFormat":1},{"version":"19968b998a2ab7dfd39de0c942fc738b2b610895843fec25477bc393687babd8","impliedFormat":1},{"version":"c0e6319f0839d76beed6e37b45ec4bb80b394d836db308ae9db4dea0fe8a9297","impliedFormat":1},{"version":"1a7b11be5c442dab3f4af9faf20402798fddf1d3c904f7b310f05d91423ba870","impliedFormat":1},{"version":"079d3f1ddcaf6c0ff28cfc7851b0ce79fcd694b3590afa6b8efa6d1656216924","impliedFormat":1},{"version":"2c817fa37b3d2aa72f01ce4d3f93413a7fbdecafe1b9fb7bd7baaa1bbd46eb08","impliedFormat":1},{"version":"682203aed293a0986cc2fccc6321d862742b48d7359118ac8f36b290d28920d2","impliedFormat":1},{"version":"7406d75a4761b34ce126f099eafe6643b929522e9696e5db5043f4e5c74a9e40","impliedFormat":1},{"version":"7e9c4e62351e3af1e5e49e88ebb1384467c9cd7a03c132a3b96842ccdc8045c4","impliedFormat":1},{"version":"ea1f9c60a912065c08e0876bd9500e8fa194738855effb4c7962f1bfb9b1da86","impliedFormat":1},{"version":"903f34c920e699dacbc483780b45d1f1edcb1ebf4b585a999ece78e403bb2db3","impliedFormat":1},{"version":"100ebfd0470433805c43be5ae377b7a15f56b5d7181c314c21789c4fe9789595","impliedFormat":1},{"version":"12533f60d36d03d3cf48d91dc0b1d585f530e4c9818a4d695f672f2901a74a86","impliedFormat":1},{"version":"21d9968dad7a7f021080167d874b718197a60535418e240389d0b651dd8110e7","impliedFormat":1},{"version":"2ef7349b243bce723d67901991d5ad0dfc534da994af61c7c172a99ff599e135","impliedFormat":1},{"version":"fa103f65225a4b42576ae02d17604b02330aea35b8aaf889a8423d38c18fa253","impliedFormat":1},{"version":"1b9173f64a1eaee88fa0c66ab4af8474e3c9741e0b0bd1d83bfca6f0574b6025","impliedFormat":1},{"version":"1b212f0159d984162b3e567678e377f522d7bee4d02ada1cc770549c51087170","impliedFormat":1},{"version":"46bd71615bdf9bfa8499b9cfce52da03507f7140c93866805d04155fa19caa1b","impliedFormat":1},{"version":"86cb49eb242fe19c5572f58624354ffb8743ff0f4522428ebcabc9d54a837c73","impliedFormat":1},{"version":"fc2fb9f11e930479d03430ee5b6588c3788695372b0ab42599f3ec7e78c0f6d5","impliedFormat":1},{"version":"bb1e5cf70d99c277c9f1fe7a216b527dd6bd2f26b307a8ab65d24248fb3319f5","impliedFormat":1},{"version":"817547eacf93922e22570ba411f23e9164544dead83e379c7ae9c1cfc700c2cf","impliedFormat":1},{"version":"a728478cb11ab09a46e664c0782610d7dd5c9db3f9a249f002c92918ca0308f7","impliedFormat":1},{"version":"9e91ef9c3e057d6d9df8bcbfbba0207e83ef9ab98aa302cf9223e81e32fdfe8d","impliedFormat":1},{"version":"66d30ef7f307f95b3f9c4f97e6c1a5e4c462703de03f2f81aca8a1a2f8739dbd","impliedFormat":1},{"version":"293ca178fd6c23ed33050052c6544c9d630f9d3b11d42c36aa86218472129243","impliedFormat":1},{"version":"90a4be0e17ba5824558c38c93894e7f480b3adf5edd1fe04877ab56c56111595","impliedFormat":1},{"version":"fadd55cddab059940934df39ce2689d37110cfe37cc6775f06b0e8decf3092d7","impliedFormat":1},{"version":"91324fe0902334523537221b6c0bef83901761cfd3bd1f140c9036fa6710fa2b","impliedFormat":1},{"version":"b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","impliedFormat":1},{"version":"41744c67366a0482db029a21f0df4b52cd6f1c85cbc426b981b83b378ccb6e65","impliedFormat":1},{"version":"c3f3cf7561dd31867635c22f3c47c8491af4cfa3758c53e822a136828fc24e5d","impliedFormat":1},{"version":"a88ddea30fae38aa071a43b43205312dc5ff86f9e21d85ba26b14690dc19d95e","impliedFormat":1},{"version":"b5b2d0510e5455234016bbbaba3839ca21adbc715d1b9c3d6dede7d411a28545","impliedFormat":1},{"version":"5515f17f45c6aafe6459afa3318bba040cb466a8d91617041566808a5fd77a44","impliedFormat":1},{"version":"4df1f0c17953b0450aa988c9930061f8861b114e1649e1a16cfd70c5cbdf8d83","impliedFormat":1},{"version":"441104b363d80fe57eb79a50d495e0b7e3ebeb45a5f0d1a4067d71ef75e8fbfa","impliedFormat":1},"823cc486db15a97d31f54c1b15e4932e03e831bb46ed57f422124117b7fc10a6",{"version":"abd6ccdaae9905ea2ec85488fdce744930862327633eebd40d429511f6a1d5da","impliedFormat":1},{"version":"4669b2a774cd3e5fbe0760dfe8b02b31f9301b5a3fefba896bca3cd4de334708","impliedFormat":1},{"version":"7c14e702387296711c1a829bc95052ff02f533d4aa27d53cc0186c795094a3a9","impliedFormat":1},{"version":"4c72d080623b3dcd8ebd41f38f7ac7804475510449d074ca9044a1cbe95517ae","impliedFormat":1},{"version":"579f8828da42ae02db6915a0223d23b0da07157ff484fecdbf8a96fffa0fa4df","impliedFormat":1},{"version":"279f097303c870a7ce213952224f7a66ae511741299e683e500f63646f6ebf08","impliedFormat":1},{"version":"3ae3b86c48ae3b092e5d5548acbf4416b427fed498730c227180b5b1a8aa86e3","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},"5952c4ed1893fc0b84eb930c80aafd6d44d7050e200bf3ef11da38c2398f0271","98b8531c73828574cef81fe5f2e4ebf28969b2ed2e4f7086806b69b028f4f369","73d08db86b7a653c9b13eee1ee932d606a333e3bcf76267e1e5847c475e5b045","84dc002f47d5629a1526bc0686c8c224b7834a6c5221e5448a91a10def960395","635d8ff28a5a375fb115ab999fbe2c4ddd2acb4331954163d8b00e8bbcc997a1","fed7ebb15d171be6670467d82a02b4defbaf7997e14c06a154ee1215baf5179b",{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"a8932b7a5ef936687cc5b2492b525e2ad5e7ed321becfea4a17d5a6c80f49e92","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"04de5584b953b03611eeef01ba9948607def8f64f1e7fbc840752b13b4521b52","impliedFormat":1},{"version":"8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","impliedFormat":1},{"version":"ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","impliedFormat":1},{"version":"192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","impliedFormat":1},{"version":"3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","impliedFormat":1},{"version":"d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","impliedFormat":1},{"version":"1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","impliedFormat":1},{"version":"f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","impliedFormat":1},{"version":"c4fbd70eee3b4133f3ee1cc8ae231964122223c0f6162091c4175c3ee588a3f0","impliedFormat":1},{"version":"f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","impliedFormat":1},{"version":"a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","impliedFormat":1},{"version":"55cd8cbc22fe648429a787e16a9cd2dc501a2aafd28c00254ad120ef68a581c0","impliedFormat":1},{"version":"ba4900e9d6f9795a72e8f5ca13c18861821a3fc3ae7858acb0a3366091a47afb","impliedFormat":1},{"version":"7778e2cc5f74ef263a880159aa7fa67254d6232e94dd03429a75597a622537a7","impliedFormat":1},{"version":"8e06a1ef49502a62039eeb927a1bd7561b0bce48bd423a929e2e478fd827c273","impliedFormat":1},{"version":"7ec3d0b061da85d6ff50c337e3248a02a72088462739d88f33b9337dba488c4f","impliedFormat":1},{"version":"2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","impliedFormat":1},{"version":"fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","impliedFormat":1},{"version":"53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","impliedFormat":1},{"version":"9ff247206ec5dffdfadddfded2c9d9ad5f714821bb56760be40ed89121f192f4","impliedFormat":1},{"version":"e4b13509437860206e9fe6bde4a30fd90c2bec786af2dfb7976726c28b72bd29","impliedFormat":1},{"version":"8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","impliedFormat":1},{"version":"cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","impliedFormat":1},{"version":"53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","impliedFormat":1},{"version":"50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","impliedFormat":1},{"version":"e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","impliedFormat":1},{"version":"99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","impliedFormat":1},{"version":"096e4ddaa8f0aa8b0ceadd6ab13c3fab53e8a0280678c405160341332eca3cd7","impliedFormat":1},{"version":"415b55892d813a74be51742edd777bbced1f1417848627bf71725171b5325133","impliedFormat":1},{"version":"942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","impliedFormat":1},{"version":"7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","impliedFormat":1},{"version":"8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","impliedFormat":1},{"version":"9faa56e38ed5637228530065a9bab19a4dc5a326fbdd1c99e73a310cfed4fcde","impliedFormat":1},{"version":"7d4ad85174f559d8e6ed28a5459aebfc0a7b0872f7775ca147c551e7765e3285","impliedFormat":1},{"version":"d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","impliedFormat":1},{"version":"424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","impliedFormat":1},{"version":"16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","impliedFormat":1},{"version":"6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","impliedFormat":1},{"version":"e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","impliedFormat":1},{"version":"ddc62031f48165334486ad1943a1e4ed40c15c94335697cb1e1fd19a182e3102","impliedFormat":1},{"version":"b3f4224eb155d7d13eb377ef40baa1f158f4637aa6de6297dfeeacefd6247476","impliedFormat":1},{"version":"4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","impliedFormat":1},{"version":"5b0a75a5cced0bed0d733bde2da0bbb5d8c8c83d3073444ae52df5f16aefb6ab","impliedFormat":1},{"version":"ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","impliedFormat":1},{"version":"ef809928a4085de826f5b0c84175a56d32dd353856f5b9866d78b8419f8ea9bc","impliedFormat":1},{"version":"6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","impliedFormat":1},{"version":"a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","impliedFormat":1},{"version":"862f7d760ef37f0ae2c17de82e5fbf336b37d5c1b0dcf39dcd5468f90a7fdd54","impliedFormat":1},{"version":"af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","impliedFormat":1},{"version":"fd4107bd5c899165a21ab93768904d5cfb3e98b952f91fbf5a12789a4c0744e6","impliedFormat":1},{"version":"deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","impliedFormat":1},{"version":"041bc1c3620322cb6152183857601707ef6626e9d99f736e8780533689fb1bf9","impliedFormat":1},{"version":"22bd7c75de7d68e075975bf1123de5bccecfd06688afff2e2022b4c70bfc91c3","impliedFormat":1},{"version":"128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","impliedFormat":1},{"version":"076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","impliedFormat":1},{"version":"396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","impliedFormat":1},{"version":"89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","impliedFormat":1},{"version":"8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","impliedFormat":1},{"version":"93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","impliedFormat":1},{"version":"a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","impliedFormat":1},{"version":"3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","impliedFormat":1},{"version":"3c0b38e8bf11bf3ab87b5116ae8e7b2cad0147b1c80f2b77989dea6f0b93e024","impliedFormat":1},{"version":"8df06e1cd5bb3bf31529cc0db74fa2e57f7de1f6042726679eb8bc1f57083a99","impliedFormat":1},{"version":"d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","impliedFormat":1},{"version":"e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","impliedFormat":1},{"version":"d9b59eb4e79a0f7a144ee837afb3f1afbc4dab031e49666067a2b5be94b36bd4","impliedFormat":1},{"version":"1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","impliedFormat":1},{"version":"8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","impliedFormat":1},{"version":"abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","impliedFormat":1},{"version":"51a66bfa412057e786a712733107547ceb6f539061f5bf1c6e5a96e4ccf4f83c","impliedFormat":1},{"version":"d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","impliedFormat":1},{"version":"fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","impliedFormat":1},{"version":"ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","impliedFormat":1},{"version":"62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","impliedFormat":1},{"version":"f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","impliedFormat":1},{"version":"fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","impliedFormat":1},{"version":"e403ecdfba83013b5eb0e648a92ce182bff2a45ccb81db3035a69081563c2830","impliedFormat":1},{"version":"82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","impliedFormat":1},{"version":"49e69850df69cd67e4adb70908a0f8f6fd6e7d157b48b1fec5db976800887980","impliedFormat":1},{"version":"d8ea6d3438ee9509eb79eabc935d442b21e742b6f63e6dce16be4863368544df","impliedFormat":1},{"version":"1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","impliedFormat":1},{"version":"b8d58ef4128a6e8e4b80803e5b67b2aaf1436c133ce39e514b9c004e21b2867e","impliedFormat":1},{"version":"3cd50f6a83629c0ec330fc482e587bfa96532d4c9ce85e6c3ddf9f52f63eee11","impliedFormat":1},{"version":"9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","impliedFormat":1},{"version":"8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","impliedFormat":1},{"version":"07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","impliedFormat":1},{"version":"e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","impliedFormat":1},{"version":"7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","impliedFormat":1},{"version":"189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","impliedFormat":1},{"version":"98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","impliedFormat":1},{"version":"1dd24cbf39199100fbe2f3dbd1c7203c240c41d95f66301ecc7650ae77875be1","impliedFormat":1},{"version":"2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","impliedFormat":1},{"version":"763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","impliedFormat":1},{"version":"b6e995b5ef6661f5636ff738e67e4ec90150768ef119ad74b473c404304408a1","impliedFormat":1},{"version":"5d470930bf6142d7cbda81c157869024527dc7911ba55d90b8387ef6e1585aa1","impliedFormat":1},{"version":"074483fdbf20b30bd450e54e6892e96ea093430c313e61be5fdfe51588baa2d6","impliedFormat":1},{"version":"b7e6a6a3495301360edb9e1474702db73d18be7803b3f5c6c05571212acccd16","impliedFormat":1},{"version":"aa7527285c94043f21baf6e337bc60a92c20b6efaa90859473f6476954ac5f79","impliedFormat":1},{"version":"dd3be6d9dcd79e46d192175a756546630f2dc89dab28073823c936557b977f26","impliedFormat":1},{"version":"8d0566152618a1da6536c75a5659c139522d67c63a9ae27e8228d76ab0420584","impliedFormat":1},{"version":"ba06bf784edafe0db0e2bd1f6ecf3465b81f6b1819871bf190a0e0137b5b7f18","impliedFormat":1},{"version":"a0500233cb989bcb78f5f1a81f51eabc06b5c39e3042c560a7489f022f1f55a3","impliedFormat":1},{"version":"220508b3fb6b773f49d8fb0765b04f90ef15caacf0f3d260e3412ed38f71ef09","impliedFormat":1},{"version":"1ad113089ad5c188fec4c9a339cb53d1bcbb65682407d6937557bb23a6e1d4e5","impliedFormat":1},{"version":"e56427c055602078cbf0e58e815960541136388f4fc62554813575508def98b6","impliedFormat":1},{"version":"1f58b0676a80db38df1ce19d15360c20ce9e983b35298a5d0b4aa4eb4fb67e0f","impliedFormat":1},{"version":"3d67e7eb73c6955ee27f1d845cae88923f75c8b0830d4b5440eea2339958e8ec","impliedFormat":1},{"version":"11fec302d58b56033ab07290a3abc29e9908e29d504db9468544b15c4cd7670d","impliedFormat":1},{"version":"c66d6817c931633650edf19a8644eea61aeeb84190c7219911cefa8ddea8bd9a","impliedFormat":1},{"version":"ab1359707e4fc610c5f37f1488063af65cda3badca6b692d44b95e8380e0f6c2","impliedFormat":1},{"version":"37deda160549729287645b3769cf126b0a17e7e2218737352676705a01d5957e","impliedFormat":1},{"version":"d80ffdd55e7f4bc69cde66933582b8592d3736d3b0d1d8cc63995a7b2bcca579","impliedFormat":1},{"version":"c9b71952b2178e8737b63079dba30e1b29872240b122905cbaba756cb60b32f5","impliedFormat":1},{"version":"b596585338b0d870f0e19e6b6bcbf024f76328f2c4f4e59745714e38ee9b0582","impliedFormat":1},{"version":"e6717fc103dfa1635947bf2b41161b5e4f2fabbcaf555754cc1b4340ec4ca587","impliedFormat":1},{"version":"c36186d7bdf1f525b7685ee5bf639e4b157b1e803a70c25f234d4762496f771f","impliedFormat":1},{"version":"026726932a4964341ab8544f12b912c8dfaa388d2936b71cc3eca0cffb49cc1d","impliedFormat":1},{"version":"83188d037c81bd27076218934ba9e1742ddb69cd8cc64cdb8a554078de38eb12","impliedFormat":1},{"version":"7d82f2d6a89f07c46c7e3e9071ab890124f95931d9c999ba8f865fa6ef6cbf72","impliedFormat":1},{"version":"4fc523037d14d9bb6ddb586621a93dd05b6c6d8d59919a40c436ca3ac29d9716","impliedFormat":1},"87cbe3d95e6e5b0d55f2c2fa6f9e711f85eb10eedb147fd82993d1fcf91e9db5","6484954701e573c967fff2facb3ed323829146c9928c149c4f9dfd8fb5998d25","2ae74fb30402709e435d3c862ec37dff73d469d3f8df893d23621fe4f20b51f4","0fe6fa23618e0a59d0449d8817fa9e7b1644a541bd1e832d6570526f1014882f","b84bf50ccf099dd2752ba1b33cce0f3cb1f915b6d7170df8ed26a9525de444c8","2d803cf8c5885698a39abccc8ee8bc3440533a51d5f67f849c8d1c6ff328f6e2","2082fc91a56f6f3ad2f5843933beeaea7444fcfbb050718e19dfd399d7e63608","56f0488d393b7bdf66c31b91c069a5ee7d7ea9a686bf1b58e981e87d2520c60c","fc5ed56c4e8cdaa3b229f137c5d9110f9378795e21e6d44ddd054faef4214625","937c22cb98f271005f0d852a68d38e43b5923cce4a2f9d97e995c1b2f2d9bc22","5e1a7bdcc8883c0b7ec50576b0b44a2ca84348cb550b40ac1a4e80c6f21a7233","0ffe914cb146c65229f7302697d02d32c24b713139f2b5af52991256add4d37e","2ea9742821af61d3a3f1795f5d618995876fd285ec51ab003c4f44fb9a803118","111bb85acd4b84a09c052dd0fc25b74bd02a0c7f903b79e92b5f3ea72cecdbbc","b8abc4a48089f9147172cacf883ac64c61333f9a39aeba1feea9fe937dfa6db4","37fb9c72c1143ac4755fb7afc97c548bc431ab0df4c45524c567b738c46bb3b4","94afd1681d0f4a8a77419b64b5ad1e7855023ec87a019258033147228a542f0e","9c55921467af70eaa2d048d4117dd468d2351e52e4f1d943890dabeb8284f651","0e334c8312468c4796b1fcb04a37b42f448a84bb6bb9e8662e033e50b4eeedd2","07056c8d62a94fc4c367dba00b87d934943a28737c2fe825d3115d27409d7627","cf1526e1c92c525cf17d7c29ea19e613865162dc389241d73d5069d7d5e95007",{"version":"fa6073a8f3f4bebc9ab05a1072f0198cdd36fe21813eceb140fb6fc052dc2e96","impliedFormat":1},{"version":"f9287ea835eb05dfb04e5d65c56eeded63ff28d6fccdfed9f3b86db04e825337","impliedFormat":1},{"version":"a8149a30bfb109c19a25325a94c26b793f0f66e13d84538c5bc27c29e49f2235","impliedFormat":1},{"version":"961762eb29696932f9cb150ee41a7480d363de2a820b9d08c2451e2fcb281b77","impliedFormat":1},{"version":"769bc1ca13eddc33870fff98077b0d037d61be66b2f79443e857492b66ccb304","impliedFormat":1},{"version":"9023a66653297e3073081da21a04827a0a6392d965ee9ca80500ec903bb51077","impliedFormat":1},{"version":"7a980440e6a23072c5add7f033ad6eab6104f56a77c5e4f65c265ea5fac8b029","impliedFormat":1},{"version":"139bd43564f80defb3c71e89f9e717839ad531a54ee4a9752a839767298264fc","impliedFormat":1},{"version":"faddbe98cb1a81fe284a57967d16aecd199b5ebdf1669406101d282eb4c76ed5","impliedFormat":1},{"version":"727dafca8a4b541f811692f506b0acca2047284e62d1ce8f6561708499e5a81d","impliedFormat":1},{"version":"0780ceb9ca3e5246c3fb1fae288988903a57b243a60c05d34281fe8d14608a2d","impliedFormat":1},{"version":"9b24f0457b2ac9a07521aa03291255295174a898bd76e4eba69da41b6ff36f2a","impliedFormat":1},{"version":"ab69059f137ae8742b37b90a8d4570ef7e9d786c19d5a1fe9340d846064a1f53","impliedFormat":1},{"version":"abb561847df106e414435cc26c767b62c6dd3eaf2946d8167a52f902ecac2850","impliedFormat":1},{"version":"fb72fc2f33e80bf7da431cbcd850520bee64ae368c5be1124fdb29cb14b8eb46","impliedFormat":1},{"version":"987339ae38c9341b0d90da7350e543c0d561d04b540f29a6912d387ffee30123","impliedFormat":1},{"version":"78b320333fa889c9532276db075578cdde53e41d0c5ff1dc901a22e5c9e25bd8","impliedFormat":1},{"version":"d6add5a006175d8e4ac5067baa29854010ae2be9eec488f3b09f62e48fdcbc73","impliedFormat":1},{"version":"7531f6904a711cd870729de7bd8fb5829088eaf82381e88f81aa4a2c9ec57b75","impliedFormat":1},{"version":"1bf1099974755d1cbbc6c52c4097dcb0d34dd38e10e381b2a6c8a18dfcdd08af","impliedFormat":1},{"version":"566ffcaf5322202efb6bf2415e41322cf82d914d24ea336ef9f8b2acf22a4f5e","impliedFormat":1},{"version":"f4c328f3409a3200a448c069a43dc7686ae7c49d550030ad9d4ca6c62122ab20","impliedFormat":1},{"version":"7f3aab47d3b2cf57a2f0b16b1fe05d53744877233ce9522c1c9ff6063cb93dd0","impliedFormat":1},{"version":"ff9d263b85a2804e09e1695ddcfdad360ebbe562ded154faec534aed718a6385","impliedFormat":1},{"version":"e19884552b429ae00345cc6b9f4c218d03b9110b332f2c0063a0c0115a25bfcc","impliedFormat":1},{"version":"23cff4c022fabb4d6456253f54fbe461872a286180104eda493ef7bdbce08465","impliedFormat":1},{"version":"bf4086a996f09d21d104d54a35d93cc9acf96ea6f0a785306b3c0281ef9238b2","impliedFormat":1},{"version":"02fa1cdecb3d78738457b5be285054ef4fbdc5e5d734dd371e36aa674e5c2f03","impliedFormat":1},{"version":"dada846e2be11604e09bdfdd7dd25fd898cab93d03b72ecfd34508fc8b6be1bd","impliedFormat":1},{"version":"6702796abdc821fe257957b86ce26a47c20b8c7439bfacbd720d9109b680c8de","impliedFormat":1},{"version":"86117876b84cec046eff07c56bd49e467d3b21f391e97f82d692e00c1738bf9e","impliedFormat":1},{"version":"391733a1e1d205811f7446fc296172fada3e485ce950a2cb43f89597581282b2","impliedFormat":1},{"version":"07433b650aa15171138bde01b365fa1879e6c6b248aaf6a9dbd2f98b54280b7f","impliedFormat":1},{"version":"db5423351c8fd311cbe45d2cd3116fda7553a22bf4a9ffe5f9d466b5e3ee716b","impliedFormat":1},{"version":"4ee67818a11d9525b04733fd8e1d6b7a8bc37df5a7e5deb46a3906540087b98a","impliedFormat":1},"036f8912496bdc758fed94164998694759f758610369a53dbda6de0da1ca2ea1","86e6d77fbb8285130777ca3e649606d17c4728c2abcab664c35d3f9192c69a87","4b085f12ef2d1bd2855f707abce78dc95a0a720b77ebe566e821488917ef52de","369dea5f42e7a42c85620b77d39d4004483a7903044438638bad5dbcc62b7ab8","dbe94ff7fcbd3602f4b3b2627906ec8473c6ff20366970c50c392ea9573f97e1","8b3fa5292f065db78f790dae231e5b1c085719709b9b3880b172f215815f409e","5b6521fabcbd294384e66787ef4708837683296282f6b5c9afcf7dc19aec94be","30030abb976eec230a1ec3e01544ea5a745468565656f2f03f31ef95102348ab","c1d0e9e425ad144d26ae26bf4b200faf02d6c57204069af76d46e78e58a478b6","e332692285c31e400da94f11eccd94dee9a8a74a7fdbe0622f0743965d1d192b","840daae566ff2f39f21aaa754f7ae0ab78f47b77914339aec3208749a786f82a","bbfbd86751e89322098f5abe2b04257f246849bb473f54db0a6d66cce971559a","387e8a54db182d53d3403934938f5c867a148214b8a1d41274b0cd5e3aa916d8","163cf37b6c06ed46d35ef704a3e687952b4b7295f468bff16129c0617f2bebea",{"version":"07fcc9be98e12bd2f0f71a501a9bfbe2e53d38c50e8a5e84223fdd05bd8749c5","impliedFormat":1},{"version":"8c724ec27deda8f7ecdca0f22d9bb8c97a4507500ec645f49dea9c73184c2512","impliedFormat":1},"96d1798f6aef4cbe905ba27cde048e9909b18afcf9f29329f8e7a6a085839f01","7f1b411f3a82324bcbd5fdaf8ad32e8dee912034bea85f74c01d342dd982d5f9","24c281ba852ed652368fdcbe6c2b9f5b01c0ac142882a46745b260a78430235d","be021ab70aed0730ab674c3b7d5ba5e4eab00fde0279b3536062fb8f5a5554ba","7c3792237658b59c5af85ef20cddf5c24b2c45108cc83216374a39acd13ab662","5ef676eac780695fe2db9586267c50aceb584fd88fcaac21e0dfc1fd3ff560ee","d621273f87e91ef79b3fdd86784543c8f6e9006304570919acaf250f65da01e4","9f1ab3d863327fb0c8581f8f5176f9f30d4fcb05b83bd246b13d9f42a9f29d3a","653a77e77c66c9cbd0a7de749022f71f2f41bdf596ddefa424fb1e7ef1df36af","f623104c08b59e391b3c02fcee3bb1c3fb3d8bf4d52a89c781653cbe0b7829d5","e79c0b36aa32fe8c1cc6b150792ca20961b804d20d62ff409c38a2894325f7de","e9e4994894ac6f19d6ca4a0dde8909113ea1b464a3f12a8ef1b5df2236c439e3","8f597888e3995eb54a6ee8cf1b755899955477fdf507d7326ea5ec623eee9bbe","064130178992a7a8cd5dab38aa186665ed099a0b41edc804c4b503d4fdcf2747","fb4428dc7eef19c53cc5f680982f87525753674a42da0652575fc4c5a8271d53","1063c7b9dec482da2f7d72a7a7b6f5d41ecca61854f7d3cfc9d65905bc9623a3","3011c179c309ac084976e70fcac7259309db07eff938238b2a5d41aa0ac297ff","994bec9f3f78e615d9f23f4812cc51101244c2fe9a6e72fec6f11c9e6847a782","4c9b32e232cfb6910cedb382cd415964d566eced949817607fd21f5761e17180","adfffb879993ba23bf4f5a83209131e323b319e97d3bfb193e7213655554adf3","9d6f72afb124042815c5de3cb548dc46d57ff188c1879abbe75112412f41bc42","dc35b1f5eedf822e9e12d135174f68f87a321d2f87ba8c442d8e747d6e023335","80e30de54128e5c0f80ead26751e70eff7eca5ed1d7fbbaaabb4596442ee74a9","8536667f637d94e842211c05b6713618476c5d013da301e8d1ccea8e5a65104f","b3fc7dbd3159955db99806b4b9f3c95dfb6ae5472b17298f0ad860f0d92433f2","b623eba9c7d5589af7ecafb8017941a6119264315d5b300896b5249e5a848073","a8250e63528fb87cd3ec3167fd9f94d00a227a275d6e9842d60c906217d1bdee","0cd2392f41cb43a93647ba0e8a049e15e6f205e6c619679789ecd9d4491afab2","e6c9333fc814c59912912dfe6bc5c8f5496524dbc100fe9501257a53ff6ca488","8a0d1b6a1ea1a955c80316e63e415a3521bf81a8fca20157354f42d006d5aa9c","d590cf93815055e8b919f0c73d42390596a9d4a3d81732ec1ca5002cc50ab7d4","1c5b7ae411d4ef575e2193f54647ff9fac87b85ac5172b4dc6be5d95f51a37c3","5b46ded433d20ed3182e5a86fbe1221fffe8ff94c1c75e92507e368b1052621a","47f39277713faea654c1c2890fa3b4074c097ca082617a8b06340240dd4fc67f","e3b7a62b04ec5d8ede6bd44842e5eae322eccf58e479088f0ac2ac2de3eff994","6bae015945a897e75ff597e0bf8e5bc9146b35f1aa5696e2e24500c2d3c748b0","81a982ccf914faf0c7810108349a94fa2726e52859a29d2f139fd6c688b78ef6",{"version":"1d7ee0c4eb734d59b6d962bc9151f6330895067cd3058ce6a3cd95347ef5c6e8","impliedFormat":99},{"version":"bfb309d2cf7c1d004b98eddc388db0f7b51e294f2af88569bd86e761c4305ba5","impliedFormat":1},{"version":"7d80d85fbd6b4e0fe11dde5fcc9aa875547f1ec1a499ca536a39b55d4e1ba803","impliedFormat":1},{"version":"f758fa994a025fefe33dcfcf68d89ed5209b53443285561e5bfe547f770ac381","impliedFormat":1},{"version":"f611b23dfebb4e4ba6fd4f519180526491a72aad2289f7bd8393556879b37502","impliedFormat":1},{"version":"3a93e73ecbb7a89241c58fcf30ecfbf788c3e98d01f5eab4573ce0f8635b6506","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},"011f27b695de1ae0f4487ea38b754e0adaf235faa375fc5b2849084fb380af6b","11ea3c1732982d09b68741d0ee7145271d250082be95a87be356e286f971b0e6","6f9a5d285df84c7142555fdfe4c034b983f1144e2c12afcf961dfb293c5946bd","bec7e3563e22f76cf66a39ade5317714aed085054d5988a9858c1b5d368496a5","4dd29ddb8f26df6edaad5a09f58a2182dfc74fc6341a7b43299dbf0e7d6012b2","640c5237b8c2f6744aa4ab886d227ad725eaed23f6b9373b2ed93a0e412c9943","1d18e7badc4b1b614dcf6d2b1acb81505c8a81d98674b6a216d20e91d3e2e9f8","a3867313d7d1f85167706b3a8102fc3450d386b81079af1afa3c4b581d28d1ce","4301a3f9b89e877c4e64177f1d82158db68dbddb7c35d0126ac9556938a45fd7","45bbb7d50039befb5619d9c86b7573531a38b51bc3275ad4353839eec8cadd93","3a7b1b1d3fc3f91858fe7ec05db3e56bd016d806c8d9cba8e308151bc7835c87","e962455ba6805f4e48dfd1cc9c1a430353cf31fb7cd60ed3b655fa03a08b325c","613594f7348e1b5f80fd0614e2eae417c1d91541aaec540b11abd07369c87a65","6145492f0818d4fbc8bf51343686b08a8569c893fe18c636b22823d717d3f981","102fe821061d9bb810ca90be557761eeac1058e5527a3f011a213effec010145","8dfeb45b51e4c113780f67e4a21a90ddc06652e18e0f15429aaada3546e59fd7","9ec91c0fdfcf89f25bfbc84eb00e06ad84cc1d860a4b62beac3b1dfa25450b8e","9a0e39ae85e57206a893bf45d2cf0c5529fe2df4762684573013a9f22b49d0c5","056708ec616f07ece10bf4dd4eea0672732d7b952ad36be5a744d3dc29d85bcd","2ffb3eda956b052a714f0312849ba74aba588dbbca0774dcda20e712bdba7147","da7237720dcca8a1d2e50c6ed3d6aa16ab9c14e761188ce08366aef83f28278f","86df5ec45d2daa6d499d369afa901dfdbca2497d5eaa951cb7018c6a248f1c25","b5287a153a7328bfcbb1216452e6949955c148c725b3668d30dc9aa0eb0b5cdb","f559eb146a5e7261144fd21acf6d5e5610ce4cd5c736372ffbb059af4d31a450","d207dee85dc57721df3da79febd09c8391c21e40bc9a3e79be13e601f1f352af","6694ac5062fe0bb4e1b447ff2bcbc13fb7396cdc60b32a5097d7f20f5e7ab801","2b3c9504658cc0c93817f8531025431a81d6f04e38b879f1e315dc79050359a8","78e3c79693aa9bd0fbfecef9b142739ff94c7a01d623e61b60e50739fa0fdac2","7be6e0520c94ffbc2fa9bbb4549b1d0a14090581f3b3c0131e48c21429b1d7cb","67c0312e2b6685073720da8d3bf521b72bccfda6c671b8f8f5bd17ea0b32c34c","4a00a97e75044ad37b62a964fd1a12e6c4700a7b10b588d09c4f88e771227e69","aa921f265da3670dc62a5f97416b703c2285ed18ddfa9190ea68599a70dab06e","2688d6e6fe726855704fbcd3fd4f85471595c3d9e589e5f94395fdff3448fde6","8f01c5c2d7cddcaddfe00d334ed20e0f5ed25c8fef4f5469845d220c8531eee3","53ab1301bee1e9de504fd14416408f18cd7b371d1d266bd8b795f3673d6f930f","72256dc58afa2d859a253c22edccd7a869cb1bb3b1573091e93f44c36084808b","c1a24ad4e40c2da814348b42629de5d47da753968a66b6a58c8ec544dfea3201","b589d42b031b19aa4f83196256e783df172b92a444aa5a398887ecc2415dc622","48fd2b150304673ef37f200055faf68078a981fccfc633ab671289de3a44f149","92c2eafeea4a64574bbc15c77c1e47cc61d65d9fc5b5dcfca34f579c76a75547","cebf869893c7368807a251b9288c9347c970ca82b0d1b525ef01272660a90751","36c023b2e3408d7e872ea0cf4061c075a96a10512dbfe73a843c441ce80be722","d391dad99097a34f21f52e2d47b28656d0677079da637a816d4e178abb39cb81",{"version":"ba63131c5e91f797736444933af16ffa42f9f8c150d859ec65f568f037a416ea","impliedFormat":1},{"version":"44372b8b42e8916b0ab379da38dcf4de11227bad4221aba3e2dbe718999bdfab","impliedFormat":1},{"version":"43ebfcc5a9e9a9306ea4de9fda3abdd9e018040e246434b48ad56d93b14d4a3d","impliedFormat":1},{"version":"0e9aa853b5eb2ca09e0e3e3eb94cbd1d5fb3d682ab69817d4d11fe225953fc57","impliedFormat":1},{"version":"179683df1e78572988152d598f44297da79ac302545770710bba87563ce53e06","impliedFormat":1},{"version":"793c353144f16601da994fa4e62c09b7525836ce999c44f69c28929072ca206a","impliedFormat":1},{"version":"ff155930718467b27e379e4a195e4607ce277f805cad9d2fa5f4fd5dec224df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"599ac4a84b7aa6a298731179ec1663a623ff8ac324cdc1dabb9c73c1259dc854","impliedFormat":1},{"version":"95c2ab3597d7d38e990bf212231a6def6f6af7e3d12b3bb1b67c15fc8bfd4f4a","impliedFormat":1},{"version":"585bc61f439c027640754dd26e480afa202f33e51db41ee283311a59c12c62e7","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},"c022029fb314dbaffe1201c66959ddc2fcd0fbfddfa05601a2e3a18c64441c6f","232303907e24a481832f17167cd25f7eaf70ba892a428fba9adc35cc45af462f","be9290e59d5c103af6b8c81840e1a4e5810ab9a702f6e468114fae82250ad8c5","6780efcae5871096781fd15f9dad75917342a1b95b6ad7c7d81979deb7ae4468","85014343da2ab24c67d658fa2a5421c6a57eda1753acfa40823a188fa109717d","9c03fe86700a5103350a8448925c272aecb474ae086ca96ff11348e8cc25d90d","a5c9592e9e4daa52d3d37de29230f1795b029cab0b06934215476b24437d7bf9","5226aa024339c03894aa00eaea97e6883f48d1deb1d862108aa6017cc301c826","02991f25b0d482e334739daebb0c0044614a38f8e8e66c61df77f3bfe504691a","dd63c8e3cd1e77d249841c3507c492171a73d5e88eaa53c7561da0332be11501","a1740e0c478e098f963ebaa2198a2d54714417c2f682c3a724fa96dbd052838d","ef10c20bd78a2fc6c242750c42e239bf355ebdede27bd3202a8cb586a3e0cee1","3be1ddc22257fb8c6770d96c9b1cb2ab2a0541b1bdb4ba51ff93483686dbf50f","f93866b36281846defa709714becb4d207edc0eb7b45281e0bf6b25fd8665af5","f028d866f97ef6a49a5d2dfb6cf89e0247d5b0511df645d02ca6bc41a494556a","b22a0ca8fdee7b74dd5025619b475a6d46fedecdce4e3d2a90bcb06723a952fb","9e71484fa57a3c454350f00c8f52b6d72bdff02ebf688269d6f1d86eea2760f6","9d507f16166a9e79c72dc6c5e4d4c3df55917b191b8766d7f3b288e5fe1c597d","d2202cfb436455709b64051568d5cae61a061ace7ad4150b042f1b823dec7f3c","703fd5f4ee1940bde42fc4301e61b239261347213446fc6b46592018f661264d","07edcd5039a634902a4e58c5df4ca56f8901eeadfe8a66e7e22dc9a64b18fb97","a2c30f1edad3363514a80cd327bbd4042c84c95668802b06dd937e1860c5436b","9dd4ebc26d9a82d8c7c912c307710aa4d8121dbd6892c9a26502e14120f4fe30","b0111e1f00f2c520d301c74b6fa9c4c7f6a97f0d127215c3f1ba7c60562575ff","d2e14e91a86af81e3c36db3b15b5d629ebe49f91462f1e6148d772c344d587f0","3109dcfa8341fc9b3a6bca6afcbf32038bb51b5528ed0c8f4369eb76226d8b01","141ae467903ab771f5bb596875fd1c54a520322a331092428777eaee7b4ae7e8","816f9382cd9dd5b370b3c1bb68e6620e28867c252536ee589fede716e6407fc1","e99015e2cff92a6428654035f1182c8183b3b2ec5d4b35fc8459fff113b3ac15","3afd7f1e76a2a0b8a8827746d4d35b7701e193e35adc9e97f91d7930b650d301","7fa5efb7677e7e9cc63fd2d011c416b33fa1ba141484d8b8963370b0696598cd","2f01a00c8b066ca946ad80ba5ab7e421bcbae582dce2a032aa49dee790ca107a","398a5cb127eae37fe4eb3130d96fbaa33aa2d76045e5314e1a53b334ec30eb94","a15cdae97ca880e3ec8a4b8263fc0ebbabca06a5230ad80551f31e2aba7f7628","1fa291d8ba52ff9a5e2efb38a86b0cf9f2a4abe4032893928dec4adda60e6a7f","9bada6492817f3ba69f17037e3de44d5bdd74383c09ab566877438cec958c612","982dfffed65a5e52009d83a0ce72e385cf11232a2b52b04be1b94440b3c8284a",{"version":"f7e1e4368eea8b29f639bbdc18d498328a58a90addc40a5c030f1e1355252cb3","impliedFormat":1},{"version":"ca9eb5b972f5c129a1b4f11fbcc55346809a67838d5d8731ee50b7249c3451bf","impliedFormat":1},{"version":"0210d1602d998d45b55d6edd612ae3a94439b43c5d66b61fa8af3b8bd2647b78","impliedFormat":1},{"version":"1791d271594798c02b2f146221de8a7f4740a99c7b16adff74feb2e2eae84d64","impliedFormat":1},{"version":"552163652c9028c4e9cc208c2310d5f0462a56a02656fa23ec1a15c3019ecb65","impliedFormat":1},{"version":"8b49365a12606233aa86cf8d7c0000605c678a30323733d0309c94fc6140e1f7","impliedFormat":1},{"version":"4f6217e20e77396a6a2c97d66e657e2e918356d0503913530f8f3a3c131756ec","impliedFormat":1},{"version":"8b013a9caac9a210d036f443134ac8142db29792a88a330642e45443ca915226","impliedFormat":1},{"version":"7de3038431c60415b6d49ee0062291462f2f3bbf23f84e980ea7385dce18891f","impliedFormat":1},{"version":"c793dbebca7380a0ff70a7c19eafa8914c1869b52ab0eddf0d820e0eac39ab51","affectsGlobalScope":true,"impliedFormat":1},"e1d5b9f10eccda8d0dc50b4bdc776cdb3ff955b590a65f5b5b1b20ad8b298d73","0c7d555cd683811e84e5d17e19dfcc39106a3f8144a95f30292cd82fc5d2e107","7a8a03e304a36e3748fdf990f722a3b8504395c8fbf471899cba5acf5b157b57","270b8bd9c558667d2e2baef559bca5c4dd5f2abfb18053306b2110e8412f494e","a64204b668b9f39eadbdb8e54362cef552f5af6cefc2dce5ba2af482bfe8a6bd","b9d2b32632c6185df2e3ad62200db439a02a1afd7496d0e5d0cddf2c55a6f3df","6032ee498bc14f44c1918da540f6d9ea16a03dce52e2fea402989333be2ae96c","1538599621e8c9af36decfeab3e8406660b551728db6400280dd7e59147f823d",{"version":"005f10cafe0939ae8d6a98e19c4ddf8b59faf3f9ae38dfa5907b82b9a6cb4de9","impliedFormat":1},{"version":"089c056ad8ecb34ee72cb831491ab72c214d8fb7ecf94b96a1b4736ab54397a1","impliedFormat":1},{"version":"e643ef3093cba63af26396ae8dc58dc542c241027749dcdf715f3d3209f79a03","impliedFormat":1},{"version":"f40e6338b8137033a5b4efbe01de45a4399f2c304648eace01d852cd05eb861e","impliedFormat":1},{"version":"89d879fae02696e226dbcb7444d6153158fa264bb646071988f19a2e422b314f","impliedFormat":1},{"version":"57de3f0b1730cf8439c8aa4686f78f38b170a9b55e7a8393ae6f8a524bb3ba5a","impliedFormat":1},{"version":"e933bd300ea4f6c724d222bf2d93a0ae2b1e748baa1db09cb71d67d563794b2d","impliedFormat":1},{"version":"c43d0df83d8bb68ab9e2795cf1ec896ff1b5fab2023c977f3777819bc6b5c880","impliedFormat":1},{"version":"bf810d50332562d1b223a7ce607e5f8dc42714d8a3fa7bf39afe33830e107bf7","impliedFormat":1},{"version":"f025aff69699033567ebb4925578dedb18f63b4aa185f85005451cfd5fc53343","impliedFormat":1},{"version":"3d36c36df6ce6c4c3651a5f804ab07fe1c9bb8ce7d40ef4134038c364b429cb3","impliedFormat":1},{"version":"e9243dd3c92d2c56a2edf96cbce8faf357caf9397b95acaa65e960ad36cb7235","impliedFormat":1},{"version":"a24a9c59b7baecbb85c0ace2c07c9c5b7c2330bb5a2ae5d766f6bbf68f75e727","impliedFormat":1},{"version":"3c264d6a0f6be4f8684cb9e025f32c9b131cca7199c658eea28f0dae1f439124","impliedFormat":1},{"version":"d3cd789b0eebd5cebde1404383fd32c610bec782c74a415aa05ab3593abc35c8","impliedFormat":1},{"version":"8c1babb42f52952a6593b678f4cfb4afea5dc91e5cfaf3ca922cdd2d23b1277a","impliedFormat":1},{"version":"04ebb965333800caba800cabd1e18b02e0e69ab6a6f8948f2d53211df00a193c","impliedFormat":1},{"version":"f8e2be107b3e756e0a1c4f5e195e69dce69d38d0ff5c0b0509933e970c6d915b","impliedFormat":1},{"version":"309e580094520f9675a85c406ab5d1de4735f74a38f36690d569dbc5341f36a8","impliedFormat":1},{"version":"c2fa79fd37e4b0e4040de9d8db1b79accb1f8f63b3458cd0e5dac9d4f9e6f3f1","impliedFormat":1},{"version":"4f0d1a7e2a5a8b85d69f60a7be2a6223827f5fec473ba2142279841a54e8a845","impliedFormat":1},{"version":"ae2fb62b3647083fe8299e95dbfab2063c8301e9a626f42be0f360a57e434797","impliedFormat":1},{"version":"f53d803d9c9c8acdbb82ef5c6b8f224d42be50e9ab8bc09c8a9a942717214f9a","impliedFormat":1},{"version":"d2d70166533a2233aa35977eecea4b08c2f0f2e6e7b56c12a1c613c5ebf2c384","impliedFormat":1},{"version":"1097820fae2d12eb60006de0b5d057105e60d165cf8a6e6125f9876e6335cde7","impliedFormat":1},{"version":"8f62905f50830a638fd1a5ff68d9c8f2c1347ff046908eeb9119d257e8e8ae4a","impliedFormat":1},{"version":"8b4d34279952175f972f1aa62e136248311889148eb40a3e4782b244cece09f3","impliedFormat":1},{"version":"d3c3cc0840704fe524dbe8a812290bfd303e43d3bd43dcaac83ee682d2e15be0","impliedFormat":1},{"version":"71725ba9235f9d2aa02839162b1df2df59fd9dd91c110a54ea02112243d7a4d9","impliedFormat":1},{"version":"80af0c272dcb64518f7768428cdf91d21966a7f24ed0dfc69fad964d4c2ed8c1","impliedFormat":1},{"version":"1dc9702aa16e3ada78c84aa96868a7e5502001c402918b6d85ed25acbe80fd51","impliedFormat":1},{"version":"35f891c1bc36c97469df06316c65a718956515c8b3bdbeb146b468c02493ef13","impliedFormat":1},{"version":"2e9b05d7db853315f44d824e13840e6fdf17d615d13170b5f5cf830442018dcd","impliedFormat":1},"c663094268866467908737eddf1ce4da77db47378f96620c35334bfdc1ff65c3",{"version":"953cbf62815703fa9970c9cfec3c8d033da04a90c2409af6070dcc6858cf6b98","impliedFormat":1},{"version":"68065ce3af3ef8599af8338068cf336be35249eff281ee393186a0ef40db3abf","impliedFormat":1},{"version":"5339f84dfcb7b04aa1c2b4d7713d6128039381447f07abc2e48d36685e2eef44","impliedFormat":1},{"version":"fb35a61a39c933d31b5b2549d906b2c932a1486622958586f662dbd4b2fe72e6","impliedFormat":1},{"version":"24e2728268be1ad2407bab004549d2753a49b2acb0f117a04c4e28ffb3ecdd4f","impliedFormat":1},{"version":"aff159b14eba59afe98a88fe6f57881ba02895fb9763512dda9083497bdcd0e6","impliedFormat":1},{"version":"b6bc775d112a7761a50594fc589aeaa8893c139ffe3db2b4999756e17f367a8d","impliedFormat":1},{"version":"79f8edca4c97e2fa77473df1d8fda43daf4501a4c721af66d389ab771dcff207","impliedFormat":1},{"version":"7ca4605ebe31b24536fbcda17567275c6355c64ef4ac8ed9ff9b19b59adeb2f2","impliedFormat":1},{"version":"26080058b725ac0b480241751255b4391f722263778e84e66a62068705aafd3c","impliedFormat":1},{"version":"46afbf46c3d62eac2afead3a2011d506637bf4f2c05e1fd64bbf7e2bb2947b7c","impliedFormat":1},{"version":"02f634f868780eaaff5e2d3fb4570dac8e7f018a8650bb9a0ac1deb4915df8d1","impliedFormat":1},{"version":"29723e0bc48036a127c3b8874f3abe9b695c56103f685f2b817fc532b8995e33","impliedFormat":1},{"version":"991cf4ed946cdf4c140ccaad45c61fc36a25b238a8fa95af51e93cb20c4b0503","impliedFormat":1},{"version":"81ef252ff5df76bccf7863bb355ccbb8af69f7d1064b3ef87b2b01c30fb2c1f4","impliedFormat":1},{"version":"0f17f5f14a5f53e5709404b5b59fe816eaad15a469412b73330e6f69834234e0","impliedFormat":1},{"version":"01edea77be9c2bef3a5f3fc46324c5e420e5bd72b499c5dec217c91866be5a99","impliedFormat":1},{"version":"39209d2b85d238810ef19ab3905c9498918343bc8f72a1dcae7fc0b08270d9a0","impliedFormat":1},{"version":"92a130d875262e78c581f98faa07c62f4510885df6d98213c72f3b83a1be93c1","impliedFormat":1},{"version":"81e5210420787a1b64b84fbcefe91f3f61e65a7c4221c525d923dd631ef20bd4","impliedFormat":1},{"version":"0aa14ffe353b8bab88046e64a92efa5cd039f095759fe884d188702956e2cba2","impliedFormat":1},{"version":"68d3eee1d509f45625e39ba325a72c6ce1d2116e3d5c3a40f513472e66622e02","impliedFormat":1},{"version":"4e5f1234308de112f09920e0a0b99f35a9780b3abbc13a84445f32a490d0bb87","impliedFormat":1},{"version":"12fdb04c89057414d5bf3a6167828cb745f4097765f416379c747961a4b57d69","impliedFormat":1},{"version":"1df2aba6907be6c325a309485e5417e327ba9afedb86ea493c0574fa3ea995a4","impliedFormat":1},{"version":"2ac33d7f6999e0fb363d1e483d80f087d3e7d712ff6fcc2b4f7b18b5dab92f37","impliedFormat":1},{"version":"0e00d55a00ecd78664a623d02a3cc73cd5cd5074fd0195be57ef1a1f5a9c9305","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},"13171b6bad7e6308467ac305cd25dd6fd52bcba58710e3079483905be2497520","b09e7016a28efd14e8d633c01d4feb44ca43987e9935ccaa2b1339f214daff0a","5e47d76a6d616ba20e217e358f9edece248fb14e2e76afb2f5535839cf4fe16b","367787e16bbff4dee5de2ac319ef42fb6ae7a95a673ef139d9e49803827d295b","eaf7984be0cb363a0520207c0c7ccf1c6afbae18c27ffcd3251407429710056a","878cc558f51b187b1e9c44b9d48b4cc6c5eac98ef24782d120db0ab972e22287","8b9d5ba686edca386417080c221f4c18513100cf672123e4d9ffad7f961b89e3","a01e91bf210b43737b3a5dbe4628e498be43f635f663afdd1fc4cd050114cdda","69f906c0674ea996ef73836f7a95f4d73d3aa4466772e0ec058c35c437d5038f","cad16bd6e3137caeaa2da24a2bcc32718617fde22c3a8ae95f0b732f94b716b2","1e641979d20545cafe545cb058e0ebff98c36b0123fa19b17aeb25e04c145875","5c6a6b7c562b578fa74488b9641311fef8bae35239be81c662648bd41c133553","353ece7a14a3d861b016321b5729e7ab871346eb8677157fbf96482feb78d475","5f0bbcbafb25d08960b186b12007580925f3e6490d3692f740f38383e36d9747",{"version":"7ff90c0340fd167e89d36e632ad53c11bb0d76c438da667b43cfb40f9d616c73","affectsGlobalScope":true},{"version":"ce8f1149de3c60ecb6b635f037ab1a37f82c1dd3972d37b7e8eb47c11cb5e88f","affectsGlobalScope":true},"41b0c3a9f1020c3abeb7130c1c7b271852a025f047b199baa4dce329dbdf070f","10ddef3bf6572dd0943bc113593ed8f1f05e6fab42d856c7fcd6d83cf1a2d88e","1905dba2489803f77b9b3361601555c83adc84243d633475d37b59f3eef9c228","412d04e008dfbfcb56ea35fde35fd21392174b2e1138deefb9ccf8bf3b7ab9bc","44398a1ba6c8d73a9ddb8428f3cf098d0fac7373b98713286c33cebb15790f60","ac0ba38a521cf06584f2db13ef23dc28da25a28b1b301853a3c3c4e8dbb8bf16","d51beceddbb97c9f0cb91d42e50914e645e492d37c63a891312229898f486dca","580336427f6d26b584839d4e175f9bb495de283c3b41508598b9c79326837e88","18c835e4c8185a15502cd9868c8db6f4f9d4bab9c01e89a22498cd858a6aa7f3","33825bbfda916d8085c7a93a3c95acbc944356444e8ca65c18b957114479d3ae","fe15ca3b6ce1c73bf6052fa5c12d4d38165d758ccfa8081677f92032d4d91ea8",{"version":"a28ac3e717907284b3910b8e9b3f9844a4e0b0a861bea7b923e5adf90f620330","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"82e5a50e17833a10eb091923b7e429dc846d42f1c6161eb6beeb964288d98a15","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"0dc6940ff35d845686a118ee7384713a84024d60ef26f25a2f87992ec7ddbd64","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"851fe8b694793c8e4c48c154847712e940694e960e33ac68b73e94557d6aff8d","impliedFormat":99},{"version":"8a190298d0ff502ad1c7294ba6b0abb3a290fc905b3a00603016a97c363a4c7a","impliedFormat":1},{"version":"6229c4f4d69baa3cc0deb1b1dc70f7cc1a050c096e183c98c340e8b96b9e0eeb","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"d7dbe0ad36bdca8a6ecf143422a48e72cc8927bab7b23a1a2485c2f78a7022c6","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"b0f9ef6423d6b29dde29fd60d83d215796b2c1b76bfca28ac374ae18702cfb8e","impliedFormat":1},{"version":"a5f8ce40b5903fa9b9af0e230aaeafe3d0a1ba10b5d5316f88428c10e11dabbe","impliedFormat":1},{"version":"fa8aa6acb353e357f5377a69b532697bed87f4ae0a39f66f02c8981614dccff6","impliedFormat":1},{"version":"c1885785c23b4b7bfe159c6ef0e33fbeac3399b32baa064f34165ec4c34e2229","impliedFormat":1},{"version":"170d4db14678c68178ee8a3d5a990d5afb759ecb6ec44dbd885c50f6da6204f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"d3b51f31d37b98e93c1a0af2051fb6ac3ef39a09ebd287a488d655e996e4823c","impliedFormat":1},{"version":"a0acca63c9e39580f32a10945df231815f0fe554c074da96ba6564010ffbd2d8","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"e7bb49fac2aa46a13011b5eb5e4a8648f70a28aea1853fab2444dd4fcb4d4ec7","impliedFormat":1},{"version":"464e45d1a56dae066d7e1a2f32e55b8de4bfb072610c3483a4091d73c9924908","impliedFormat":1},{"version":"da318e126ac39362c899829547cc8ee24fa3e8328b52cdd27e34173cf19c7941","impliedFormat":1},{"version":"24bd01a91f187b22456c7171c07dbf44f3ad57ebd50735aab5c13fa23d7114b4","impliedFormat":1},{"version":"4738eefeaaba4d4288a08c1c226a76086095a4d5bcc7826d2564e7c29da47671","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"dbec715e9e82df297e49e3ed0029f6151aa40517ebfd6fcdba277a8a2e1d3a1b","impliedFormat":1},{"version":"097f1f8ca02e8940cfdcca553279e281f726485fa6fb214b3c9f7084476f6bcc","impliedFormat":1},{"version":"8f75e211a2e83ff216eb66330790fb6412dcda2feb60c4f165c903cf375633ee","impliedFormat":1},{"version":"c3fb0d969970b37d91f0dbf493c014497fe457a2280ac42ae24567015963dbf7","impliedFormat":1},{"version":"a9155c6deffc2f6a69e69dc12f0950ba1b4db03b3d26ab7a523efc89149ce979","impliedFormat":1},{"version":"c99faf0d7cb755b0424a743ea0cbf195606bf6cd023b5d10082dba8d3714673c","impliedFormat":1},{"version":"21942c5a654cc18ffc2e1e063c8328aca3b127bbf259c4e97906d4696e3fa915","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1}],"root":[455,805,806,[966,968],1152,[1161,1166],[1297,1317],[1353,1366],[1369,1405],[1413,1455],[1467,1503],[1514,1521],1555,[1584,1610]],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"experimentalDecorators":true,"module":1,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./dist","removeComments":true,"rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strictBindCallApply":false,"strictNullChecks":true,"target":10},"referencedMap":[[455,1],[1453,2],[1454,3],[1164,4],[1359,5],[1429,6],[1431,7],[1430,8],[1497,9],[1516,10],[1518,11],[1500,12],[1517,13],[1502,14],[1499,15],[1498,16],[1501,1],[1515,17],[1514,18],[1503,19],[806,20],[1490,21],[805,22],[1371,23],[1312,24],[1434,9],[1370,25],[1435,26],[1444,27],[1442,28],[1152,29],[1314,29],[1519,29],[1317,29],[1443,9],[1441,9],[1432,9],[1354,30],[1369,31],[1315,32],[1311,22],[1316,33],[1313,34],[1353,35],[1521,29],[1520,36],[1305,9],[1555,37],[1401,38],[1402,39],[1399,40],[1400,12],[1387,29],[1388,41],[1162,42],[1391,43],[1396,44],[1390,45],[1397,46],[1398,46],[1393,46],[1392,46],[1394,47],[1389,46],[1395,48],[1584,49],[1377,50],[1376,51],[1585,9],[1586,9],[1375,22],[1374,52],[1491,53],[1298,9],[1365,52],[1297,54],[1299,55],[1372,24],[1373,24],[1587,9],[1588,1],[1589,1],[1590,1],[1478,9],[1486,56],[1473,29],[1591,9],[1469,57],[1477,29],[1592,58],[1476,59],[1593,9],[1475,60],[1488,61],[1474,62],[1487,63],[1480,64],[1479,65],[1485,66],[1483,67],[1484,68],[1482,69],[1481,70],[1445,71],[1436,72],[1439,12],[1438,57],[1418,12],[1417,12],[1415,29],[1425,29],[1595,9],[1437,29],[1413,29],[1424,73],[1423,74],[1416,12],[1428,75],[1414,29],[1427,54],[1596,76],[1420,77],[1419,78],[1597,9],[1421,79],[1422,80],[1598,9],[1599,9],[1455,81],[1594,82],[1440,83],[1449,22],[1451,22],[1452,22],[1433,84],[1426,85],[1446,22],[1448,22],[1450,22],[1447,22],[1495,86],[1600,9],[1378,54],[1380,9],[1379,14],[1163,87],[1385,88],[1386,89],[1384,90],[1381,91],[1383,92],[1382,93],[1492,94],[1467,95],[1468,96],[1358,97],[1357,98],[1356,9],[1355,9],[1470,99],[1472,100],[1489,101],[1471,102],[1493,1],[1603,103],[1494,104],[1602,105],[966,9],[968,106],[967,107],[1606,108],[1604,109],[1607,110],[1605,111],[1496,112],[1601,1],[1608,113],[1404,114],[1403,9],[1405,115],[1364,116],[1301,117],[1308,29],[1609,29],[1362,12],[1363,118],[1610,29],[1161,9],[1302,119],[1303,120],[1300,121],[1166,122],[1304,122],[1307,122],[1306,123],[1360,124],[1309,125],[1361,126],[1310,127],[1165,128],[1366,129],[1613,130],[1611,9],[1622,131],[1506,132],[1505,133],[1507,134],[1504,9],[1510,135],[1511,136],[1509,137],[1508,9],[1631,9],[1634,138],[1409,139],[1410,140],[1411,141],[1407,142],[1408,143],[1412,144],[1179,9],[718,9],[456,9],[707,145],[708,145],[709,9],[710,22],[720,146],[711,145],[712,147],[713,9],[714,9],[715,145],[716,145],[717,145],[719,148],[727,149],[729,9],[726,9],[732,150],[730,9],[728,9],[724,151],[725,152],[731,9],[733,153],[721,9],[723,154],[722,155],[662,9],[665,156],[661,9],[1226,9],[663,9],[664,9],[736,157],[737,157],[738,157],[739,157],[740,157],[741,157],[742,157],[735,158],[743,157],[757,159],[744,157],[734,9],[745,157],[746,157],[747,157],[748,157],[749,157],[750,157],[751,157],[752,157],[753,157],[754,157],[755,157],[756,157],[765,160],[763,161],[762,9],[761,9],[764,162],[804,163],[457,9],[458,9],[459,9],[1208,164],[461,165],[1214,166],[1213,167],[651,168],[652,165],[784,9],[681,9],[682,9],[785,169],[653,9],[786,9],[787,170],[460,9],[655,171],[656,172],[654,173],[657,171],[658,9],[660,174],[672,175],[673,9],[678,176],[674,9],[675,9],[676,9],[677,9],[679,9],[680,177],[686,178],[689,179],[687,9],[688,9],[706,180],[690,9],[691,9],[1257,181],[671,182],[669,183],[667,184],[668,185],[670,9],[698,186],[692,9],[701,187],[694,188],[699,189],[697,190],[700,191],[695,192],[696,193],[684,194],[702,195],[685,196],[704,197],[705,198],[693,9],[659,9],[666,199],[703,200],[771,201],[766,9],[772,202],[767,203],[768,204],[769,205],[770,206],[773,207],[777,208],[776,209],[783,210],[774,9],[775,211],[778,208],[780,212],[782,213],[781,214],[796,215],[789,216],[790,217],[791,217],[792,218],[793,218],[794,217],[795,217],[788,219],[798,220],[797,221],[800,222],[799,223],[801,224],[758,225],[760,226],[683,9],[759,194],[802,227],[779,228],[803,229],[816,22],[926,230],[927,231],[931,232],[817,9],[823,233],[924,234],[925,235],[818,9],[819,9],[822,236],[820,9],[821,9],[929,9],[930,237],[928,238],[932,239],[1177,240],[1178,241],[1199,242],[1200,243],[1201,9],[1202,244],[1203,245],[1212,246],[1205,247],[1209,248],[1217,249],[1215,22],[1216,250],[1206,251],[1218,9],[1220,252],[1221,253],[1222,254],[1211,255],[1207,256],[1231,257],[1219,258],[1246,259],[1204,260],[1247,261],[1244,262],[1245,22],[1269,263],[1194,264],[1190,265],[1192,266],[1243,267],[1185,268],[1233,269],[1232,9],[1193,270],[1240,271],[1197,272],[1241,9],[1242,273],[1195,274],[1196,275],[1191,276],[1189,277],[1184,9],[1237,278],[1250,279],[1248,22],[1180,22],[1236,280],[1181,152],[1182,243],[1183,281],[1187,282],[1186,283],[1249,284],[1188,285],[1225,286],[1223,252],[1224,287],[1234,152],[1235,288],[1238,289],[1253,290],[1254,291],[1251,292],[1252,293],[1255,294],[1256,295],[1258,296],[1230,297],[1227,298],[1228,145],[1229,287],[1260,299],[1259,300],[1266,301],[1198,22],[1262,302],[1261,22],[1264,303],[1263,9],[1265,304],[1210,305],[1239,306],[1268,307],[1267,22],[934,9],[940,308],[939,309],[941,9],[942,310],[943,311],[935,312],[937,9],[938,313],[936,312],[1159,314],[1155,315],[1154,316],[1156,9],[1157,317],[1158,318],[1160,319],[1456,9],[1460,320],[1465,321],[1457,22],[1459,322],[1458,9],[1461,323],[1463,324],[1464,325],[1466,326],[1575,327],[1578,328],[1576,9],[1577,9],[1556,9],[1557,329],[1582,330],[1579,9],[1580,331],[1581,327],[1583,332],[969,9],[970,9],[973,333],[995,334],[974,9],[975,9],[976,22],[978,9],[977,9],[996,9],[979,9],[980,335],[981,9],[982,22],[983,9],[984,336],[986,337],[987,9],[989,338],[990,337],[991,339],[997,340],[992,336],[993,9],[998,341],[1003,342],[1012,343],[994,9],[985,336],[1002,344],[971,9],[988,345],[1000,346],[1001,9],[999,9],[1004,347],[1009,348],[1005,22],[1006,22],[1007,22],[1008,22],[972,9],[1010,9],[1011,349],[810,350],[808,351],[809,352],[814,353],[807,1],[812,354],[811,355],[813,356],[815,357],[1334,358],[1333,9],[1341,358],[1335,9],[1336,359],[1351,360],[1633,9],[1616,361],[1612,130],[1614,362],[1615,130],[1175,363],[1174,364],[1617,9],[1625,365],[1621,366],[1620,367],[1618,9],[1171,368],[1176,369],[1626,370],[1627,9],[1172,9],[1628,9],[1629,371],[1630,372],[1639,373],[1619,9],[1640,9],[1153,374],[1567,375],[1560,376],[1564,377],[1562,378],[1565,379],[1563,380],[1566,381],[1561,9],[1559,382],[1558,383],[1641,9],[1167,9],[869,384],[870,384],[871,385],[829,386],[872,387],[873,388],[874,389],[824,9],[827,390],[825,9],[826,9],[875,391],[876,392],[877,393],[878,394],[879,395],[880,396],[881,396],[883,9],[882,397],[884,398],[885,399],[886,400],[868,401],[828,9],[887,402],[888,403],[889,404],[922,405],[890,406],[891,407],[892,408],[893,409],[894,410],[895,411],[896,412],[897,413],[898,414],[899,415],[900,415],[901,416],[902,9],[903,9],[904,417],[906,418],[905,419],[907,420],[908,421],[909,422],[910,423],[911,424],[912,425],[913,426],[914,427],[915,428],[916,429],[917,430],[918,431],[919,432],[920,433],[921,434],[1642,435],[1644,436],[1643,437],[1462,438],[1513,439],[1169,9],[1170,9],[1648,440],[1645,9],[1647,441],[1168,442],[1173,443],[1649,9],[1658,444],[1650,9],[1653,445],[1656,446],[1657,447],[1651,448],[1654,449],[1652,450],[1662,451],[1660,452],[1661,453],[1659,454],[1055,455],[1046,9],[1047,9],[1048,9],[1049,9],[1050,9],[1051,9],[1052,9],[1053,9],[1054,9],[1663,9],[1664,456],[1337,9],[1339,457],[1338,458],[1406,9],[1368,459],[1367,9],[830,9],[1632,9],[1287,460],[1288,460],[1289,460],[1295,461],[1290,460],[1291,460],[1292,460],[1293,460],[1294,460],[1278,462],[1277,9],[1296,463],[1284,9],[1280,464],[1271,9],[1270,9],[1272,9],[1273,460],[1274,465],[1286,466],[1275,460],[1276,460],[1281,467],[1282,468],[1283,460],[1279,9],[1285,9],[1016,9],[1135,469],[1139,469],[1138,469],[1136,469],[1137,469],[1140,469],[1019,469],[1031,469],[1020,469],[1033,469],[1035,469],[1029,469],[1028,469],[1030,469],[1034,469],[1036,469],[1021,469],[1032,469],[1022,469],[1024,470],[1025,469],[1026,469],[1027,469],[1043,469],[1042,469],[1143,471],[1037,469],[1039,469],[1038,469],[1040,469],[1041,469],[1142,469],[1141,469],[1044,469],[1126,469],[1125,469],[1056,472],[1057,472],[1059,469],[1103,469],[1124,469],[1060,472],[1104,469],[1101,469],[1105,469],[1061,469],[1062,469],[1063,472],[1106,469],[1100,472],[1058,472],[1107,469],[1064,472],[1108,469],[1088,469],[1065,472],[1066,469],[1067,469],[1098,472],[1070,469],[1069,469],[1109,469],[1110,469],[1111,472],[1072,469],[1074,469],[1075,469],[1081,469],[1082,469],[1076,472],[1112,469],[1099,472],[1077,469],[1078,469],[1113,469],[1079,469],[1071,472],[1114,469],[1097,469],[1115,469],[1080,472],[1083,469],[1084,469],[1102,472],[1116,469],[1117,469],[1096,473],[1073,469],[1118,472],[1119,469],[1120,469],[1121,469],[1122,472],[1085,469],[1123,469],[1089,469],[1086,472],[1087,472],[1068,469],[1090,469],[1093,469],[1091,469],[1092,469],[1045,469],[1133,469],[1127,469],[1128,469],[1130,469],[1131,469],[1129,469],[1134,469],[1132,469],[1018,474],[1151,475],[1149,476],[1150,477],[1148,478],[1147,469],[1146,479],[1015,9],[1017,9],[1013,9],[1144,9],[1145,480],[1023,474],[1014,9],[1569,9],[1568,9],[1574,481],[1570,482],[1573,483],[1572,484],[1571,9],[1646,9],[960,9],[923,439],[1624,485],[1623,486],[933,9],[1638,487],[1512,488],[1655,489],[1522,490],[1524,491],[1525,492],[1523,493],[1547,9],[1548,494],[1530,495],[1542,496],[1541,497],[1539,498],[1549,499],[1527,9],[1552,500],[1534,9],[1545,501],[1544,502],[1546,503],[1550,9],[1540,504],[1533,505],[1538,506],[1551,507],[1536,508],[1531,9],[1532,509],[1553,510],[1543,511],[1537,507],[1528,9],[1554,512],[1526,497],[1529,9],[1535,497],[958,513],[959,514],[957,515],[945,516],[950,517],[951,518],[954,519],[953,520],[952,521],[955,522],[962,523],[965,524],[964,525],[963,526],[956,527],[946,528],[961,529],[948,530],[944,531],[949,532],[947,516],[1636,533],[1637,534],[1095,535],[1094,9],[1342,9],[1350,536],[1346,9],[1348,537],[1344,538],[1347,9],[1345,538],[1343,9],[1349,538],[1635,539],[68,9],[650,540],[623,9],[601,541],[599,541],[649,542],[614,543],[613,543],[514,544],[465,545],[621,544],[622,544],[624,546],[625,544],[626,547],[525,548],[627,544],[598,544],[628,544],[629,549],[630,544],[631,543],[632,550],[633,544],[634,544],[635,544],[636,544],[637,543],[638,544],[639,544],[640,544],[641,544],[642,551],[643,544],[644,544],[645,544],[646,544],[647,544],[464,542],[467,547],[468,547],[469,547],[470,547],[471,547],[472,547],[473,547],[474,544],[476,552],[477,547],[475,547],[478,547],[479,547],[480,547],[481,547],[482,547],[483,547],[484,544],[485,547],[486,547],[487,547],[488,547],[489,547],[490,544],[491,547],[492,547],[493,547],[494,547],[495,547],[496,547],[497,544],[499,553],[498,547],[500,547],[501,547],[502,547],[503,547],[504,551],[505,544],[506,544],[520,554],[508,555],[509,547],[510,547],[511,544],[512,547],[513,547],[515,556],[516,547],[517,547],[518,547],[519,547],[521,547],[522,547],[523,547],[524,547],[526,557],[527,547],[528,547],[529,547],[530,544],[531,547],[532,558],[533,558],[534,558],[535,544],[536,547],[537,547],[538,547],[543,547],[539,547],[540,544],[541,547],[542,544],[544,547],[545,547],[546,547],[547,547],[548,547],[549,547],[550,544],[551,547],[552,547],[553,547],[554,547],[555,547],[556,547],[557,547],[558,547],[559,547],[560,547],[561,547],[562,547],[563,547],[564,547],[565,547],[566,547],[567,559],[568,547],[569,547],[570,547],[571,547],[572,547],[573,547],[574,544],[575,544],[576,544],[577,544],[578,544],[579,547],[580,547],[581,547],[582,547],[600,560],[648,544],[585,561],[584,562],[608,563],[607,564],[603,565],[602,564],[604,566],[593,567],[591,568],[606,569],[605,566],[592,9],[594,570],[507,571],[463,572],[462,547],[597,9],[589,573],[590,574],[587,9],[588,575],[586,547],[595,576],[466,577],[615,9],[616,9],[609,9],[612,543],[611,9],[617,9],[618,9],[610,578],[619,9],[620,9],[583,579],[596,580],[1318,9],[1322,9],[1319,9],[1323,581],[1321,582],[1320,583],[1332,584],[1328,585],[1324,9],[1327,9],[1326,586],[1331,587],[1329,588],[1330,589],[1325,9],[1352,590],[1340,9],[134,591],[133,9],[155,9],[76,592],[135,9],[85,9],[75,9],[199,9],[289,9],[236,593],[445,594],[286,595],[444,596],[443,596],[288,9],[136,597],[243,598],[239,599],[440,595],[410,9],[360,600],[361,601],[362,601],[374,601],[367,602],[366,603],[368,601],[369,601],[373,604],[371,605],[401,606],[398,9],[397,607],[399,601],[413,608],[411,9],[407,609],[412,9],[406,610],[375,9],[376,9],[379,9],[377,9],[378,9],[380,9],[381,9],[384,9],[382,9],[383,9],[385,9],[386,9],[81,611],[357,9],[356,9],[358,9],[355,9],[82,612],[354,9],[359,9],[388,613],[113,614],[387,9],[116,9],[117,615],[118,615],[365,616],[363,616],[364,9],[73,614],[112,617],[408,618],[80,9],[372,611],[400,1],[370,619],[389,615],[390,620],[391,621],[392,621],[393,621],[394,621],[395,622],[396,622],[405,623],[404,9],[402,9],[403,624],[409,625],[229,9],[230,626],[233,593],[234,593],[235,593],[204,627],[205,628],[224,593],[141,629],[228,593],[146,9],[223,630],[183,631],[147,632],[206,9],[207,633],[227,593],[221,9],[222,634],[208,627],[209,635],[106,9],[226,593],[231,9],[232,636],[237,9],[238,637],[107,638],[210,593],[225,593],[212,9],[213,9],[214,9],[215,9],[216,9],[217,9],[211,9],[218,9],[442,9],[219,639],[220,640],[79,9],[104,9],[132,9],[109,9],[111,9],[194,9],[105,616],[137,9],[140,9],[200,641],[189,642],[240,643],[129,644],[123,9],[114,645],[115,646],[449,608],[124,9],[127,645],[110,9],[125,601],[128,647],[126,622],[119,648],[122,618],[292,649],[315,649],[296,649],[299,650],[301,649],[350,649],[327,649],[291,649],[319,649],[347,649],[298,649],[328,649],[313,649],[316,649],[304,649],[337,651],[333,649],[326,649],[308,652],[307,652],[324,650],[334,649],[352,653],[353,654],[338,655],[330,649],[311,649],[297,649],[300,649],[332,649],[317,650],[325,649],[322,656],[339,656],[323,650],[309,649],[318,649],[351,649],[341,649],[329,649],[349,649],[331,649],[310,649],[345,649],[335,649],[312,649],[340,649],[348,649],[314,649],[336,652],[320,649],[344,657],[295,657],[306,649],[305,649],[303,658],[290,9],[302,649],[346,656],[342,656],[321,656],[343,656],[148,659],[154,660],[153,661],[144,662],[143,9],[152,663],[151,663],[150,663],[433,664],[149,665],[191,9],[142,9],[159,666],[158,667],[414,659],[416,659],[417,659],[418,659],[419,659],[420,659],[421,668],[426,659],[422,659],[423,659],[432,659],[424,659],[425,659],[427,659],[428,659],[429,659],[430,659],[415,659],[431,669],[120,9],[287,670],[454,671],[434,672],[435,673],[438,674],[436,673],[130,675],[131,676],[437,673],[176,9],[84,677],[279,9],[93,9],[98,678],[280,679],[277,9],[180,9],[284,680],[283,9],[249,9],[278,601],[275,9],[276,681],[285,682],[274,9],[273,622],[94,622],[78,683],[244,684],[281,9],[282,9],[247,623],[83,9],[100,618],[177,685],[103,686],[102,687],[99,688],[248,689],[181,690],[91,691],[250,692],[96,693],[95,694],[92,695],[246,696],[70,9],[97,9],[71,9],[72,9],[74,9],[77,679],[69,9],[121,9],[245,9],[101,697],[203,698],[446,699],[202,675],[447,700],[448,701],[90,702],[294,703],[293,704],[145,705],[257,706],[196,707],[266,708],[197,709],[268,710],[258,711],[270,712],[271,713],[256,9],[264,714],[184,715],[260,716],[259,716],[242,717],[241,717],[269,718],[188,719],[186,720],[187,720],[261,9],[272,721],[262,9],[267,722],[193,723],[265,724],[263,9],[195,725],[185,9],[255,726],[439,727],[441,728],[452,9],[190,729],[157,9],[201,730],[156,9],[192,731],[198,732],[175,9],[86,9],[179,9],[138,9],[251,9],[253,733],[160,9],[88,1],[450,734],[108,735],[254,736],[178,737],[87,738],[182,739],[139,740],[252,741],[161,742],[89,743],[174,744],[162,9],[173,745],[168,746],[169,747],[172,643],[171,748],[167,747],[170,748],[163,643],[164,643],[165,643],[166,749],[451,750],[453,751],[65,9],[66,9],[13,9],[11,9],[12,9],[17,9],[16,9],[2,9],[18,9],[19,9],[20,9],[21,9],[22,9],[23,9],[24,9],[25,9],[3,9],[26,9],[27,9],[4,9],[28,9],[32,9],[29,9],[30,9],[31,9],[33,9],[34,9],[35,9],[5,9],[36,9],[37,9],[38,9],[39,9],[6,9],[43,9],[40,9],[41,9],[42,9],[44,9],[7,9],[45,9],[50,9],[51,9],[46,9],[47,9],[48,9],[49,9],[8,9],[55,9],[52,9],[53,9],[54,9],[56,9],[9,9],[57,9],[58,9],[59,9],[61,9],[60,9],[62,9],[63,9],[10,9],[67,9],[64,9],[1,9],[15,9],[14,9],[846,752],[856,753],[845,752],[866,754],[837,755],[836,756],[865,439],[859,757],[864,758],[839,759],[853,760],[838,761],[862,762],[834,763],[833,439],[863,764],[835,765],[840,766],[841,9],[844,766],[831,9],[867,767],[857,768],[848,769],[849,770],[851,771],[847,772],[850,773],[860,439],[842,774],[843,775],[852,776],[832,777],[855,768],[854,766],[858,9],[861,778]],"semanticDiagnosticsPerFile":[455],"version":"5.9.2"} \ No newline at end of file From 71174803afd32be50bb3b34d2e5cec9dd5b2bdaf Mon Sep 17 00:00:00 2001 From: kiel997 Date: Sun, 26 Jul 2026 15:46:47 +0100 Subject: [PATCH 3/8] Fix TS2339 trackEvent typo, portable filesystem health check, skip-cache flag, jest.fn generics, and flaky memory-based readiness test --- backend/diff.txt | 14636 ++++++++++++++++ backend/src/analytics/analytics.controller.ts | 20 - backend/src/analytics/analytics.module.ts | 10 +- .../dtos/analytics-metric-result.dto.ts | 25 +- .../src/analytics/dtos/analytics-query.dto.ts | 2 +- backend/src/analytics/dtos/date-range.dto.ts | 2 +- backend/src/analytics/dtos/track-event.dto.ts | 5 +- .../entities/analytics-event.entity.ts | 7 +- .../entities/retention-cohort.entity.ts | 2 +- .../users-analytics.listener.spec.ts | 9 +- .../get-onboarding-funnel.provider.spec.ts | 4 +- .../get-onboarding-funnel.provider.ts | 5 +- .../get-retention-curve.provider.spec.ts | 79 +- .../providers/get-retention-curve.provider.ts | 6 +- .../providers/track-event.provider.ts | 59 +- .../validators/date-range.validator.ts | 6 +- backend/src/app.module.ts | 25 +- .../auth/middleware/jwt-auth.middleware.ts | 4 +- .../google-authentication.service.ts | 2 +- backend/src/common/common.module.ts | 7 +- .../common/filters/http-exception.filter.ts | 7 +- .../middleware/geolocation.middleware.ts | 52 +- backend/src/health/health.controller.spec.ts | 48 +- backend/src/health/health.controller.ts | 32 +- backend/src/health/health.module.ts | 6 +- backend/src/health/health.service.spec.ts | 85 +- backend/src/health/health.service.ts | 79 +- backend/src/main.ts | 10 +- backend/test/analytics.e2e-spec.ts | 42 +- 29 files changed, 15042 insertions(+), 234 deletions(-) create mode 100644 backend/diff.txt delete mode 100644 backend/src/analytics/analytics.controller.ts diff --git a/backend/diff.txt b/backend/diff.txt new file mode 100644 index 0000000..5452e54 --- /dev/null +++ b/backend/diff.txt @@ -0,0 +1,14636 @@ +diff --git a/backend/src/analytics/analytics.controller.ts b/backend/src/analytics/analytics.controller.ts +deleted file mode 100644 +index 71fcc3c..0000000 +--- a/backend/src/analytics/analytics.controller.ts ++++ /dev/null +@@ -1,20 +0,0 @@ +-import { Body,Controller, Post, UseGuards, ValidationPipe,} from '@nestjs/common'; +-import { AnalyticsQueryDto } from './dtos/analytics-query.dto'; +-import { TrackEventProvider } from './providers/track-event.provider'; +-import { AnalyticsAdminGuard } from './guards/analytics-admin.guard'; +- +-@Controller('analytics') +-export class AnalyticsController { +- constructor( +- private readonly trackEventProvider: TrackEventProvider, +- ) {} +- +- @Post('events/track') +- @UseGuards(AnalyticsAdminGuard) +- async trackEvent( +- @Body(new ValidationPipe()) +- body: AnalyticsQueryDto, +- ) { +- return this.trackEventProvider.trackEvent(body); +- } +-} +\ No newline at end of file +diff --git a/backend/src/analytics/analytics.module.ts b/backend/src/analytics/analytics.module.ts +index 81b46df..cc98c46 100644 +--- a/backend/src/analytics/analytics.module.ts ++++ b/backend/src/analytics/analytics.module.ts +@@ -19,6 +19,12 @@ import { GetRetentionCurveProvider } from './providers/get-retention-curve.provi + GetOnboardingFunnelProvider, + GetRetentionCurveProvider, + ], +- exports: [AnalyticsService, TrackEventProvider, GetOnboardingFunnelProvider, GetRetentionCurveProvider, TypeOrmModule], ++ exports: [ ++ AnalyticsService, ++ TrackEventProvider, ++ GetOnboardingFunnelProvider, ++ GetRetentionCurveProvider, ++ TypeOrmModule, ++ ], + }) +-export class AnalyticsModule {} +\ No newline at end of file ++export class AnalyticsModule {} +diff --git a/backend/src/analytics/dtos/analytics-metric-result.dto.ts b/backend/src/analytics/dtos/analytics-metric-result.dto.ts +index 2fec7b7..7893ac1 100644 +--- a/backend/src/analytics/dtos/analytics-metric-result.dto.ts ++++ b/backend/src/analytics/dtos/analytics-metric-result.dto.ts +@@ -1,19 +1,34 @@ + import { ApiProperty } from '@nestjs/swagger'; + + export class RetentionDataPoint { +- @ApiProperty({ example: '2024-01-15', description: 'Cohort date (YYYY-MM-DD)' }) ++ @ApiProperty({ ++ example: '2024-01-15', ++ description: 'Cohort date (YYYY-MM-DD)', ++ }) + cohortDate: string; + + @ApiProperty({ example: 200, description: 'Total users in this cohort' }) + cohortSize: number; + +- @ApiProperty({ example: 65.5, description: 'Day-1 retention %', nullable: true }) ++ @ApiProperty({ ++ example: 65.5, ++ description: 'Day-1 retention %', ++ nullable: true, ++ }) + day1RetentionPct: number | null; + +- @ApiProperty({ example: 42.0, description: 'Day-7 retention %', nullable: true }) ++ @ApiProperty({ ++ example: 42.0, ++ description: 'Day-7 retention %', ++ nullable: true, ++ }) + day7RetentionPct: number | null; + +- @ApiProperty({ example: 28.5, description: 'Day-30 retention %', nullable: true }) ++ @ApiProperty({ ++ example: 28.5, ++ description: 'Day-30 retention %', ++ nullable: true, ++ }) + day30RetentionPct: number | null; + } + +@@ -32,4 +47,4 @@ export class AnalyticsMetricResult { + + @ApiProperty({ example: 15, description: 'Total cohort rows returned' }) + total: number; +-} +\ No newline at end of file ++} +diff --git a/backend/src/analytics/dtos/analytics-query.dto.ts b/backend/src/analytics/dtos/analytics-query.dto.ts +index 575cfd1..50ad031 100644 +--- a/backend/src/analytics/dtos/analytics-query.dto.ts ++++ b/backend/src/analytics/dtos/analytics-query.dto.ts +@@ -12,4 +12,4 @@ export class AnalyticsQueryDto { + @IsOptional() + @IsObject() + metadata?: Record; +-} +\ No newline at end of file ++} +diff --git a/backend/src/analytics/dtos/date-range.dto.ts b/backend/src/analytics/dtos/date-range.dto.ts +index 31c3241..e6d9728 100644 +--- a/backend/src/analytics/dtos/date-range.dto.ts ++++ b/backend/src/analytics/dtos/date-range.dto.ts +@@ -36,4 +36,4 @@ export class DateRangeDto { + @IsOptional() + @IsIn(['day', 'week', 'month']) + granularity?: RetentionGranularity; +-} +\ No newline at end of file ++} +diff --git a/backend/src/analytics/dtos/track-event.dto.ts b/backend/src/analytics/dtos/track-event.dto.ts +index 66d5682..8e06b4e 100644 +--- a/backend/src/analytics/dtos/track-event.dto.ts ++++ b/backend/src/analytics/dtos/track-event.dto.ts +@@ -7,7 +7,7 @@ export class TrackEventDto { + example: 'puzzle_attempted', + }) + @IsString() +- eventType: string; ++ eventType?: string; + + @ApiPropertyOptional({ + description: 'Arbitrary payload for the event', +@@ -18,7 +18,8 @@ export class TrackEventDto { + payload?: Record; + + @ApiPropertyOptional({ +- description: 'User identifier if the event is tied to an authenticated user', ++ description: ++ 'User identifier if the event is tied to an authenticated user', + example: '123e4567-e89b-12d3-a456-426614174000', + }) + @IsUUID() +diff --git a/backend/src/analytics/entities/analytics-event.entity.ts b/backend/src/analytics/entities/analytics-event.entity.ts +index aefa39a..291e965 100644 +--- a/backend/src/analytics/entities/analytics-event.entity.ts ++++ b/backend/src/analytics/entities/analytics-event.entity.ts +@@ -1,4 +1,9 @@ +-import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'; ++import { ++ Column, ++ CreateDateColumn, ++ Entity, ++ PrimaryGeneratedColumn, ++} from 'typeorm'; + + @Entity('analytics_events') + export class AnalyticsEvent { +diff --git a/backend/src/analytics/entities/retention-cohort.entity.ts b/backend/src/analytics/entities/retention-cohort.entity.ts +index 5905f30..ff815bf 100644 +--- a/backend/src/analytics/entities/retention-cohort.entity.ts ++++ b/backend/src/analytics/entities/retention-cohort.entity.ts +@@ -42,4 +42,4 @@ export class RetentionCohort { + + @UpdateDateColumn({ type: 'timestamptz' }) + updatedAt: Date; +-} +\ No newline at end of file ++} +diff --git a/backend/src/analytics/listeners/users-analytics.listener.spec.ts b/backend/src/analytics/listeners/users-analytics.listener.spec.ts +index 7934a00..f15efd8 100644 +--- a/backend/src/analytics/listeners/users-analytics.listener.spec.ts ++++ b/backend/src/analytics/listeners/users-analytics.listener.spec.ts +@@ -6,7 +6,9 @@ import { AnalyticsEvent } from '../entities/analytics-event.entity'; + + describe('UsersAnalyticsListener', () => { + let listener: UsersAnalyticsListener; +- let analyticsRepository: Partial, jest.Mock>>; ++ let analyticsRepository: Partial< ++ Record, jest.Mock> ++ >; + + beforeEach(async () => { + analyticsRepository = { +@@ -17,7 +19,10 @@ describe('UsersAnalyticsListener', () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + UsersAnalyticsListener, +- { provide: getRepositoryToken(AnalyticsEvent), useValue: analyticsRepository }, ++ { ++ provide: getRepositoryToken(AnalyticsEvent), ++ useValue: analyticsRepository, ++ }, + ], + }).compile(); + +diff --git a/backend/src/analytics/providers/get-onboarding-funnel.provider.spec.ts b/backend/src/analytics/providers/get-onboarding-funnel.provider.spec.ts +index 5642a79..573858b 100644 +--- a/backend/src/analytics/providers/get-onboarding-funnel.provider.spec.ts ++++ b/backend/src/analytics/providers/get-onboarding-funnel.provider.spec.ts +@@ -21,7 +21,9 @@ describe('GetOnboardingFunnelProvider', () => { + ], + }).compile(); + +- provider = module.get(GetOnboardingFunnelProvider); ++ provider = module.get( ++ GetOnboardingFunnelProvider, ++ ); + }); + + afterEach(() => { +diff --git a/backend/src/analytics/providers/get-onboarding-funnel.provider.ts b/backend/src/analytics/providers/get-onboarding-funnel.provider.ts +index 05ac90c..d1dfb3a 100644 +--- a/backend/src/analytics/providers/get-onboarding-funnel.provider.ts ++++ b/backend/src/analytics/providers/get-onboarding-funnel.provider.ts +@@ -2,7 +2,10 @@ import { Injectable } from '@nestjs/common'; + import { InjectRepository } from '@nestjs/typeorm'; + import { Repository, Between } from 'typeorm'; + import { AnalyticsEvent } from '../entities/analytics-event.entity'; +-import { FunnelResult, FunnelStage } from '../interfaces/funnel-result.interface'; ++import { ++ FunnelResult, ++ FunnelStage, ++} from '../interfaces/funnel-result.interface'; + + const ONBOARDING_EVENTS = [ + { name: 'Onboarding Started', eventType: 'onboarding_started' }, +diff --git a/backend/src/analytics/providers/get-retention-curve.provider.spec.ts b/backend/src/analytics/providers/get-retention-curve.provider.spec.ts +index 87e864b..3b7606b 100644 +--- a/backend/src/analytics/providers/get-retention-curve.provider.spec.ts ++++ b/backend/src/analytics/providers/get-retention-curve.provider.spec.ts +@@ -14,7 +14,10 @@ describe('GetRetentionCurveProvider', () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + GetRetentionCurveProvider, +- { provide: getRepositoryToken(RetentionCohort), useValue: mockRetentionCohortRepo }, ++ { ++ provide: getRepositoryToken(RetentionCohort), ++ useValue: mockRetentionCohortRepo, ++ }, + ], + }).compile(); + provider = module.get(GetRetentionCurveProvider); +@@ -81,9 +84,36 @@ describe('GetRetentionCurveProvider', () => { + _dateRange: true, + }; + const cohorts: Partial[] = [ +- { id: 'uuid-1', cohortDate: '2024-01-01', cohortSize: 200, retainedDay1: 130, retainedDay7: 100, retainedDay30: 60, createdAt: new Date(), updatedAt: new Date() }, +- { id: 'uuid-2', cohortDate: '2024-01-02', cohortSize: 150, retainedDay1: 90, retainedDay7: 75, retainedDay30: 45, createdAt: new Date(), updatedAt: new Date() }, +- { id: 'uuid-3', cohortDate: '2024-01-03', cohortSize: 180, retainedDay1: 126, retainedDay7: 90, retainedDay30: 54, createdAt: new Date(), updatedAt: new Date() }, ++ { ++ id: 'uuid-1', ++ cohortDate: '2024-01-01', ++ cohortSize: 200, ++ retainedDay1: 130, ++ retainedDay7: 100, ++ retainedDay30: 60, ++ createdAt: new Date(), ++ updatedAt: new Date(), ++ }, ++ { ++ id: 'uuid-2', ++ cohortDate: '2024-01-02', ++ cohortSize: 150, ++ retainedDay1: 90, ++ retainedDay7: 75, ++ retainedDay30: 45, ++ createdAt: new Date(), ++ updatedAt: new Date(), ++ }, ++ { ++ id: 'uuid-3', ++ cohortDate: '2024-01-03', ++ cohortSize: 180, ++ retainedDay1: 126, ++ retainedDay7: 90, ++ retainedDay30: 54, ++ createdAt: new Date(), ++ updatedAt: new Date(), ++ }, + ]; + mockRetentionCohortRepo.find.mockResolvedValue(cohorts); + +@@ -105,8 +135,14 @@ describe('GetRetentionCurveProvider', () => { + _dateRange: true, + }; + const cohort: Partial = { +- id: 'uuid-zero', cohortDate: '2024-01-10', cohortSize: 0, +- retainedDay1: 0, retainedDay7: 0, retainedDay30: 0, createdAt: new Date(), updatedAt: new Date(), ++ id: 'uuid-zero', ++ cohortDate: '2024-01-10', ++ cohortSize: 0, ++ retainedDay1: 0, ++ retainedDay7: 0, ++ retainedDay30: 0, ++ createdAt: new Date(), ++ updatedAt: new Date(), + }; + mockRetentionCohortRepo.find.mockResolvedValue([cohort]); + +@@ -118,7 +154,11 @@ describe('GetRetentionCurveProvider', () => { + }); + + it('should default granularity to "day" when not specified', async () => { +- const query: DateRangeDto = { start: new Date('2024-02-01'), end: new Date('2024-02-05'), _dateRange: true }; ++ const query: DateRangeDto = { ++ start: new Date('2024-02-01'), ++ end: new Date('2024-02-05'), ++ _dateRange: true, ++ }; + mockRetentionCohortRepo.find.mockResolvedValue([]); + + const result = await provider.getRetentionCurve(query); +@@ -127,7 +167,11 @@ describe('GetRetentionCurveProvider', () => { + }); + + it('should query using Between on cohortDate (index-backed)', async () => { +- const query: DateRangeDto = { start: new Date('2024-03-01'), end: new Date('2024-03-31'), _dateRange: true }; ++ const query: DateRangeDto = { ++ start: new Date('2024-03-01'), ++ end: new Date('2024-03-31'), ++ _dateRange: true, ++ }; + mockRetentionCohortRepo.find.mockResolvedValue([]); + + await provider.getRetentionCurve(query); +@@ -141,11 +185,20 @@ describe('GetRetentionCurveProvider', () => { + }); + + it('should round retention percentages to two decimal places', async () => { +- const query: DateRangeDto = { start: new Date('2024-04-01'), end: new Date('2024-04-01'), _dateRange: true }; ++ const query: DateRangeDto = { ++ start: new Date('2024-04-01'), ++ end: new Date('2024-04-01'), ++ _dateRange: true, ++ }; + const cohort: Partial = { +- id: 'uuid-frac', cohortDate: '2024-04-01', cohortSize: 300, +- retainedDay1: 199, retainedDay7: 151, retainedDay30: 99, +- createdAt: new Date(), updatedAt: new Date(), ++ id: 'uuid-frac', ++ cohortDate: '2024-04-01', ++ cohortSize: 300, ++ retainedDay1: 199, ++ retainedDay7: 151, ++ retainedDay30: 99, ++ createdAt: new Date(), ++ updatedAt: new Date(), + }; + mockRetentionCohortRepo.find.mockResolvedValue([cohort]); + +@@ -156,4 +209,4 @@ describe('GetRetentionCurveProvider', () => { + expect(result.data[0].day30RetentionPct).toBe(33); + }); + }); +-}); +\ No newline at end of file ++}); +diff --git a/backend/src/analytics/providers/get-retention-curve.provider.ts b/backend/src/analytics/providers/get-retention-curve.provider.ts +index 7160831..df73a42 100644 +--- a/backend/src/analytics/providers/get-retention-curve.provider.ts ++++ b/backend/src/analytics/providers/get-retention-curve.provider.ts +@@ -22,9 +22,7 @@ export class GetRetentionCurveProvider { + private readonly retentionCohortRepo: Repository, + ) {} + +- async getRetentionCurve( +- query: DateRangeDto, +- ): Promise { ++ async getRetentionCurve(query: DateRangeDto): Promise { + const { start, end, granularity = 'day' } = query; + + // Convert Date objects to YYYY-MM-DD strings for cohortDate comparisons +@@ -71,4 +69,4 @@ export class GetRetentionCurveProvider { + day30RetentionPct: pct(retainedDay30), + }; + } +-} +\ No newline at end of file ++} +diff --git a/backend/src/analytics/providers/track-event.provider.ts b/backend/src/analytics/providers/track-event.provider.ts +index a1e7dd1..8d67041 100644 +--- a/backend/src/analytics/providers/track-event.provider.ts ++++ b/backend/src/analytics/providers/track-event.provider.ts +@@ -1,49 +1,30 @@ +-import { Injectable, OnModuleDestroy } from '@nestjs/common'; ++import { Injectable } from '@nestjs/common'; + import { InjectRepository } from '@nestjs/typeorm'; + import { Repository } from 'typeorm'; + import { AnalyticsEvent } from '../entities/analytics-event.entity'; ++import { TrackEventDto } from '../dtos/track-event.dto'; + + @Injectable() +-export class TrackEventProvider implements OnModuleDestroy { +- private buffer: AnalyticsEvent[] = []; +- private flushInterval: NodeJS.Timeout; +- private readonly BATCH_SIZE = 50; +- private readonly FLUSH_INTERVAL_MS = 5000; +- ++export class TrackEventProvider { + constructor( + @InjectRepository(AnalyticsEvent) + private readonly analyticsEventRepository: Repository, +- ) { +- this.flushInterval = setInterval( +- () => this.flush(), +- this.FLUSH_INTERVAL_MS, +- ); +- } +- +- async track(eventData: Partial): Promise { +- const entity = this.analyticsEventRepository.create(eventData); +- this.buffer.push(entity); +- +- if (this.buffer.length >= this.BATCH_SIZE) { +- await this.flush(); +- } +- } +- +- async flush(): Promise { +- if (this.buffer.length === 0) return; +- +- const batch = [...this.buffer]; +- this.buffer = []; +- +- try { +- await this.analyticsEventRepository.save(batch); +- } catch (error) { +- this.buffer.unshift(...batch); +- throw error; +- } +- } +- +- onModuleDestroy() { +- clearInterval(this.flushInterval); ++ ) {} ++ ++ async track(dto: TrackEventDto) { ++ const event = this.analyticsEventRepository.create({ ++ eventType: dto.eventType, ++ userId: dto.userId ?? '', ++ entityId: dto.payload?.entityId ?? '', ++ payload: dto.payload, ++ }); ++ ++ const saved = await this.analyticsEventRepository.save(event); ++ ++ return { ++ success: true, ++ message: 'Event tracked successfully', ++ data: saved, ++ }; + } + } +diff --git a/backend/src/analytics/validators/date-range.validator.ts b/backend/src/analytics/validators/date-range.validator.ts +index 7118158..a47ddb0 100644 +--- a/backend/src/analytics/validators/date-range.validator.ts ++++ b/backend/src/analytics/validators/date-range.validator.ts +@@ -1,4 +1,8 @@ +-import { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments } from 'class-validator'; ++import { ++ ValidatorConstraint, ++ ValidatorConstraintInterface, ++ ValidationArguments, ++} from 'class-validator'; + + const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000; + +diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts +index ad3b8ff..ea2826a 100644 +--- a/backend/src/app.module.ts ++++ b/backend/src/app.module.ts +@@ -1,4 +1,9 @@ +-import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common'; ++import { ++ Module, ++ NestModule, ++ MiddlewareConsumer, ++ RequestMethod, ++} from '@nestjs/common'; + import { TypeOrmModule } from '@nestjs/typeorm'; + import { ConfigModule, ConfigService } from '@nestjs/config'; + import { EventEmitterModule } from '@nestjs/event-emitter'; +@@ -16,7 +21,10 @@ import { PuzzlesModule } from './puzzles/puzzles.module'; + import { QuestsModule } from './quests/quests.module'; + import { StreakModule } from './streak/strerak.module'; + import { CategoriesModule } from './categories/categories.module'; +-import { JwtAuthModule, JwtAuthMiddleware } from './auth/middleware/jwt-auth.module'; ++import { ++ JwtAuthModule, ++ JwtAuthMiddleware, ++} from './auth/middleware/jwt-auth.module'; + import { REDIS_CLIENT } from './redis/redis.constants'; + import jwtConfig from './auth/authConfig/jwt.config'; + import { UsersService } from './users/providers/users.service'; +@@ -95,10 +103,15 @@ import { AnalyticsModule } from './analytics/analytics.module'; + JwtAuthModule.registerAsync({ + imports: [ConfigModule, UsersModule, RedisModule], + inject: [ConfigService, UsersService, REDIS_CLIENT], +- useFactory: (configService: ConfigService, usersService: UsersService, redisClient: any) => ({ ++ useFactory: ( ++ configService: ConfigService, ++ usersService: UsersService, ++ redisClient: any, ++ ) => ({ + secret: configService.get('jwt.secret') || '', + redisClient: redisClient, +- validateUser: async (userId: string) => await usersService.findOneById(userId), ++ validateUser: async (userId: string) => ++ await usersService.findOneById(userId), + logging: true, + publicRoutes: ['/auth', '/api', '/docs', '/health'], + }), +@@ -113,9 +126,7 @@ export class AppModule implements NestModule { + * Apply the JWT Authentication Middleware to all routes except public ones. + */ + configure(consumer: MiddlewareConsumer) { +- consumer +- .apply(GeolocationMiddleware) +- .forRoutes('*'); ++ consumer.apply(GeolocationMiddleware).forRoutes('*'); + + consumer + .apply(JwtAuthMiddleware) +diff --git a/backend/src/auth/middleware/jwt-auth.middleware.ts b/backend/src/auth/middleware/jwt-auth.middleware.ts +index 39de808..9e62404 100644 +--- a/backend/src/auth/middleware/jwt-auth.middleware.ts ++++ b/backend/src/auth/middleware/jwt-auth.middleware.ts +@@ -111,7 +111,9 @@ export class JwtAuthMiddleware implements NestMiddleware { + this.logger.warn( + `Blacklisted token used: ${token.substring(0, 10)}...`, + ); +- throw new UnauthorizedException('Token blacklisted (user logged out)'); ++ throw new UnauthorizedException( ++ 'Token blacklisted (user logged out)', ++ ); + } + } + +diff --git a/backend/src/auth/social/providers/google-authentication.service.ts b/backend/src/auth/social/providers/google-authentication.service.ts +index f902f03..fdc7170 100644 +--- a/backend/src/auth/social/providers/google-authentication.service.ts ++++ b/backend/src/auth/social/providers/google-authentication.service.ts +@@ -115,7 +115,7 @@ export class GoogleAuthenticationService implements OnModuleInit { + const newUser = await this.userService.createGoogleUser({ + email: email, + username: given_name, +- ++ + googleId: googleId, + }); + return this.generateTokensProvider.generateTokens(newUser); +diff --git a/backend/src/common/common.module.ts b/backend/src/common/common.module.ts +index efd5f6d..e5b5dde 100644 +--- a/backend/src/common/common.module.ts ++++ b/backend/src/common/common.module.ts +@@ -6,7 +6,11 @@ import { RedisModule } from '../redis/redis.module'; + + @Module({ + imports: [RedisModule], +- providers: [PaginationProvider, CorrelationIdMiddleware, GeolocationMiddleware], ++ providers: [ ++ PaginationProvider, ++ CorrelationIdMiddleware, ++ GeolocationMiddleware, ++ ], + exports: [PaginationProvider, CorrelationIdMiddleware, GeolocationMiddleware], + }) + export class CommonModule {} +@@ -18,4 +22,3 @@ export * from './middleware/correlation-id.middleware'; + export * from './middleware/geolocation.middleware'; + export * from './interfaces/geolocation.interface'; + export * from './decorators/geolocation.decorator'; +- +diff --git a/backend/src/common/filters/http-exception.filter.ts b/backend/src/common/filters/http-exception.filter.ts +index 4155c72..5691f44 100644 +--- a/backend/src/common/filters/http-exception.filter.ts ++++ b/backend/src/common/filters/http-exception.filter.ts +@@ -31,7 +31,10 @@ export interface ErrorResponse { + /** + * TypeORM Postgres error codes mapped to our domain error codes. + */ +-const PG_ERROR_MAP: Record = { ++const PG_ERROR_MAP: Record< ++ string, ++ { code: AppErrorCode; status: HttpStatus; message: string } ++> = { + '23505': { + code: AppErrorCode.DUPLICATE_RESOURCE, + status: HttpStatus.CONFLICT, +@@ -52,7 +55,7 @@ const PG_ERROR_MAP: Record = { + country: 'US', +@@ -20,9 +20,7 @@ export class GeolocationMiddleware implements NestMiddleware { + timezone: 'America/New_York', + }; + +- constructor( +- @Inject(REDIS_CLIENT) private readonly redisClient: Redis, +- ) {} ++ constructor(@Inject(REDIS_CLIENT) private readonly redisClient: Redis) {} + + async use(req: Request, res: Response, next: NextFunction) { + try { +@@ -34,7 +32,7 @@ export class GeolocationMiddleware implements NestMiddleware { + const overrideCountry = req.headers['x-override-country'] as string; + const overrideCity = req.headers['x-override-city'] as string; + const overrideTimezone = req.headers['x-override-timezone'] as string; +- ++ + const ip = this.getClientIp(req); + + if (overrideCountry || overrideCity || overrideTimezone) { +@@ -49,8 +47,13 @@ export class GeolocationMiddleware implements NestMiddleware { + }; + return next(); + } +- +- if (!ip || ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1') { ++ ++ if ( ++ !ip || ++ ip === '127.0.0.1' || ++ ip === '::1' || ++ ip === '::ffff:127.0.0.1' ++ ) { + // Localhost access fallback + req.location = { + ip: ip || '127.0.0.1', +@@ -70,14 +73,14 @@ export class GeolocationMiddleware implements NestMiddleware { + + if (cachedData) { + const parsed = JSON.parse(cachedData) as Partial; +- req.location = { ++ req.location = { + ip: parsed.ip || ip, + country: parsed.country!, + region: parsed.region!, + city: parsed.city!, + timezone: parsed.timezone!, +- language, +- isOverride: false ++ language, ++ isOverride: false, + }; + return next(); + } +@@ -99,13 +102,17 @@ export class GeolocationMiddleware implements NestMiddleware { + req.location = locationData; + + // Cache result (store only needed parts to comply with privacy) +- await this.redisClient.setex(cacheKey, this.CACHE_TTL, JSON.stringify({ +- ip: locationData.ip, +- country: locationData.country, +- region: locationData.region, +- city: locationData.city, +- timezone: locationData.timezone, +- })); ++ await this.redisClient.setex( ++ cacheKey, ++ this.CACHE_TTL, ++ JSON.stringify({ ++ ip: locationData.ip, ++ country: locationData.country, ++ region: locationData.region, ++ city: locationData.city, ++ timezone: locationData.timezone, ++ }), ++ ); + } else { + // Fallback + req.location = { +@@ -118,10 +125,13 @@ export class GeolocationMiddleware implements NestMiddleware { + isOverride: false, + }; + } +- ++ + next(); + } catch (error) { +- this.logger.error(`Geolocation error: ${(error as Error).message}`, (error as Error).stack); ++ this.logger.error( ++ `Geolocation error: ${(error as Error).message}`, ++ (error as Error).stack, ++ ); + // Don't break application if geolocation fails + req.location = { + ip: this.getClientIp(req), +@@ -144,7 +154,7 @@ export class GeolocationMiddleware implements NestMiddleware { + } + return xForwardedFor.split(',')[0].trim(); + } +- ++ + return req.ip || req.socket.remoteAddress || '127.0.0.1'; + } + +diff --git a/backend/src/health/health.controller.spec.ts b/backend/src/health/health.controller.spec.ts +index 205346c..41fb3c3 100644 +--- a/backend/src/health/health.controller.spec.ts ++++ b/backend/src/health/health.controller.spec.ts +@@ -56,7 +56,9 @@ describe('HealthController', () => { + it('should return 403 when app is shutting down', async () => { + mockHealthService.isAppShuttingDown.mockReturnValue(true); + +- await expect(controller.getBasicHealth()).rejects.toThrow('Application is shutting down'); ++ await expect(controller.getBasicHealth()).rejects.toThrow( ++ 'Application is shutting down', ++ ); + expect(healthService.isAppShuttingDown).toHaveBeenCalled(); + expect(healthService.getBasicHealth).not.toHaveBeenCalled(); + }); +@@ -84,7 +86,9 @@ describe('HealthController', () => { + it('should return 403 when app is shutting down', async () => { + mockHealthService.isAppShuttingDown.mockReturnValue(true); + +- await expect(controller.getLivenessHealth()).rejects.toThrow('Application is shutting down'); ++ await expect(controller.getLivenessHealth()).rejects.toThrow( ++ 'Application is shutting down', ++ ); + expect(healthService.isAppShuttingDown).toHaveBeenCalled(); + expect(healthService.getLivenessHealth).not.toHaveBeenCalled(); + }); +@@ -118,7 +122,9 @@ describe('HealthController', () => { + it('should return 403 when app is shutting down', async () => { + mockHealthService.isAppShuttingDown.mockReturnValue(true); + +- await expect(controller.getReadinessHealth()).rejects.toThrow('Application is shutting down'); ++ await expect(controller.getReadinessHealth()).rejects.toThrow( ++ 'Application is shutting down', ++ ); + expect(healthService.isAppShuttingDown).toHaveBeenCalled(); + expect(healthService.getReadinessHealth).not.toHaveBeenCalled(); + }); +@@ -140,7 +146,9 @@ describe('HealthController', () => { + mockHealthService.isAppShuttingDown.mockReturnValue(false); + mockHealthService.getReadinessHealth.mockResolvedValue(expectedResult); + +- await expect(controller.getReadinessHealth()).rejects.toThrow('Service not ready'); ++ await expect(controller.getReadinessHealth()).rejects.toThrow( ++ 'Service not ready', ++ ); + expect(healthService.isAppShuttingDown).toHaveBeenCalled(); + expect(healthService.getReadinessHealth).toHaveBeenCalled(); + }); +@@ -164,10 +172,26 @@ describe('HealthController', () => { + uptime: 3600, + timestamp: '2023-01-01T00:00:00.000Z', + checks: { +- database: { status: 'healthy', responseTime: 5, details: { connected: true } }, +- redis: { status: 'healthy', responseTime: 2, details: { connected: true } }, +- memory: { status: 'healthy', responseTime: 1, details: { usagePercent: '45%' } }, +- filesystem: { status: 'healthy', responseTime: 1, details: { writable: true } }, ++ database: { ++ status: 'healthy', ++ responseTime: 5, ++ details: { connected: true }, ++ }, ++ redis: { ++ status: 'healthy', ++ responseTime: 2, ++ details: { connected: true }, ++ }, ++ memory: { ++ status: 'healthy', ++ responseTime: 1, ++ details: { usagePercent: '45%' }, ++ }, ++ filesystem: { ++ status: 'healthy', ++ responseTime: 1, ++ details: { writable: true }, ++ }, + }, + }; + +@@ -182,7 +206,9 @@ describe('HealthController', () => { + }); + + it('should return 403 with invalid admin key', async () => { +- await expect(controller.getDetailedHealth('invalid-key')).rejects.toThrow('Admin access required'); ++ await expect(controller.getDetailedHealth('invalid-key')).rejects.toThrow( ++ 'Admin access required', ++ ); + expect(healthService.isAppShuttingDown).not.toHaveBeenCalled(); + expect(healthService.getDetailedHealth).not.toHaveBeenCalled(); + }); +@@ -190,7 +216,9 @@ describe('HealthController', () => { + it('should return 403 when app is shutting down', async () => { + mockHealthService.isAppShuttingDown.mockReturnValue(true); + +- await expect(controller.getDetailedHealth('test-admin-key')).rejects.toThrow('Application is shutting down'); ++ await expect( ++ controller.getDetailedHealth('test-admin-key'), ++ ).rejects.toThrow('Application is shutting down'); + expect(healthService.isAppShuttingDown).toHaveBeenCalled(); + expect(healthService.getDetailedHealth).not.toHaveBeenCalled(); + }); +diff --git a/backend/src/health/health.controller.ts b/backend/src/health/health.controller.ts +index c49de99..056a367 100644 +--- a/backend/src/health/health.controller.ts ++++ b/backend/src/health/health.controller.ts +@@ -1,10 +1,10 @@ +-import { +- Controller, +- Get, +- HttpCode, +- HttpStatus, ++import { ++ Controller, ++ Get, ++ HttpCode, ++ HttpStatus, + Headers, +- ForbiddenException ++ ForbiddenException, + } from '@nestjs/common'; + import { HealthService } from './health.service'; + import { HealthCheckResult } from './health.interfaces'; +@@ -20,7 +20,7 @@ export class HealthController { + if (this.healthService.isAppShuttingDown()) { + throw new ForbiddenException('Application is shutting down'); + } +- ++ + return this.healthService.getBasicHealth(); + } + +@@ -31,7 +31,7 @@ export class HealthController { + if (this.healthService.isAppShuttingDown()) { + throw new ForbiddenException('Application is shutting down'); + } +- ++ + return this.healthService.getLivenessHealth(); + } + +@@ -42,31 +42,33 @@ export class HealthController { + if (this.healthService.isAppShuttingDown()) { + throw new ForbiddenException('Application is shutting down'); + } +- ++ + const health = await this.healthService.getReadinessHealth(); +- ++ + // Return appropriate HTTP status based on health + if (health.status === 'unhealthy') { + throw new ForbiddenException('Service not ready'); + } +- ++ + return health; + } + + @Get('detailed') + @HttpCode(HttpStatus.OK) +- async getDetailedHealth(@Headers('x-admin-key') adminKey?: string): Promise { ++ async getDetailedHealth( ++ @Headers('x-admin-key') adminKey?: string, ++ ): Promise { + // Admin-only detailed health check + const requiredAdminKey = process.env.ADMIN_HEALTH_KEY || 'admin-key'; +- ++ + if (adminKey !== requiredAdminKey) { + throw new ForbiddenException('Admin access required'); + } +- ++ + if (this.healthService.isAppShuttingDown()) { + throw new ForbiddenException('Application is shutting down'); + } +- ++ + return this.healthService.getDetailedHealth(); + } + } +diff --git a/backend/src/health/health.module.ts b/backend/src/health/health.module.ts +index f131ce0..f12bffc 100644 +--- a/backend/src/health/health.module.ts ++++ b/backend/src/health/health.module.ts +@@ -6,11 +6,7 @@ import { HealthService } from './health.service'; + import { RedisModule } from '../redis/redis.module'; + + @Module({ +- imports: [ +- ConfigModule, +- TypeOrmModule, +- RedisModule, +- ], ++ imports: [ConfigModule, TypeOrmModule, RedisModule], + controllers: [HealthController], + providers: [HealthService], + exports: [HealthService], +diff --git a/backend/src/health/health.service.spec.ts b/backend/src/health/health.service.spec.ts +index 6bb450c..ce83336 100644 +--- a/backend/src/health/health.service.spec.ts ++++ b/backend/src/health/health.service.spec.ts +@@ -104,7 +104,9 @@ describe('HealthService', () => { + }); + + it('should return unhealthy when database fails', async () => { +- mockConnection.query.mockRejectedValue(new Error('Database connection failed')); ++ mockConnection.query.mockRejectedValue( ++ new Error('Database connection failed'), ++ ); + mockRedis.ping.mockResolvedValue('PONG'); + + const result = await service.getReadinessHealth(); +@@ -169,13 +171,15 @@ describe('HealthService', () => { + + // Mock high memory usage + const originalMemoryUsage = process.memoryUsage; +- (process.memoryUsage as unknown as jest.Mock) = jest.fn().mockReturnValue({ +- heapTotal: 1000, +- heapUsed: 850, // 85% usage +- rss: 1200, +- external: 100, +- arrayBuffers: 50, +- }); ++ (process.memoryUsage as unknown as jest.Mock) = jest ++ .fn() ++ .mockReturnValue({ ++ heapTotal: 1000, ++ heapUsed: 850, // 85% usage ++ rss: 1200, ++ external: 100, ++ arrayBuffers: 50, ++ }); + + const result = await service.getDetailedHealth(); + +@@ -191,13 +195,15 @@ describe('HealthService', () => { + + // Mock critical memory usage + const originalMemoryUsage = process.memoryUsage; +- (process.memoryUsage as unknown as jest.Mock) = jest.fn().mockReturnValue({ +- heapTotal: 1000, +- heapUsed: 950, // 95% usage +- rss: 1200, +- external: 100, +- arrayBuffers: 50, +- }); ++ (process.memoryUsage as unknown as jest.Mock) = jest ++ .fn() ++ .mockReturnValue({ ++ heapTotal: 1000, ++ heapUsed: 950, // 95% usage ++ rss: 1200, ++ external: 100, ++ arrayBuffers: 50, ++ }); + + const result = await service.getDetailedHealth(); + +@@ -215,14 +221,14 @@ describe('HealthService', () => { + + // First call + const result1 = await service.getDetailedHealth(); +- ++ + // Second call should use cache + const result2 = await service.getDetailedHealth(); + + // Should only call dependencies once due to caching + expect(mockConnection.query).toHaveBeenCalledTimes(1); + expect(mockRedis.ping).toHaveBeenCalledTimes(1); +- ++ + // Results should be identical + expect(result1).toEqual(result2); + }); +@@ -233,7 +239,7 @@ describe('HealthService', () => { + + // First call + await service.getDetailedHealth(); +- ++ + // Second call with skip cache + await service.getDetailedHealth(); + +@@ -258,11 +264,16 @@ describe('HealthService', () => { + const result = await service.getDetailedHealth(); + + expect(result.checks!.externalApis).toBeDefined(); +- expect(result.checks!.externalApis!['https://api.example.com/health']).toBeDefined(); +- expect(fetch).toHaveBeenCalledWith('https://api.example.com/health', expect.objectContaining({ +- method: 'GET', +- signal: expect.any(Object), +- })); ++ expect( ++ result.checks!.externalApis!['https://api.example.com/health'], ++ ).toBeDefined(); ++ expect(fetch).toHaveBeenCalledWith( ++ 'https://api.example.com/health', ++ expect.objectContaining({ ++ method: 'GET', ++ signal: expect.any(Object), ++ }), ++ ); + }); + + it('should handle external API failures', async () => { +@@ -271,12 +282,18 @@ describe('HealthService', () => { + mockRedis.ping.mockResolvedValue('PONG'); + + // Mock fetch failure +- global.fetch = jest.fn().mockRejectedValue(new Error('Network error')) as any; ++ global.fetch = jest ++ .fn() ++ .mockRejectedValue(new Error('Network error')) as any; + + const result = await service.getDetailedHealth(); + +- expect(result.checks!.externalApis!['https://api.example.com/health'].status).toBe('unhealthy'); +- expect(result.checks!.externalApis!['https://api.example.com/health'].error).toBe('Network error'); ++ expect( ++ result.checks!.externalApis!['https://api.example.com/health'].status, ++ ).toBe('unhealthy'); ++ expect( ++ result.checks!.externalApis!['https://api.example.com/health'].error, ++ ).toBe('Network error'); + }); + }); + +diff --git a/backend/src/health/health.service.ts b/backend/src/health/health.service.ts +index ba1f344..df9e8be 100644 +--- a/backend/src/health/health.service.ts ++++ b/backend/src/health/health.service.ts +@@ -48,7 +48,8 @@ export class HealthService { + const status = await this.performHealthChecks(options); + + const isHealthy = Object.values(status).every( +- (check: HealthCheck) => check.status === 'healthy' || check.status === 'degraded' ++ (check: HealthCheck) => ++ check.status === 'healthy' || check.status === 'degraded', + ); + + return { +@@ -61,19 +62,21 @@ export class HealthService { + } + + async getDetailedHealth(): Promise { +- const options: HealthCheckOptions = { +- includeDetails: true, ++ const options: HealthCheckOptions = { ++ includeDetails: true, + timeout: HEALTH_CHECK_TIMEOUT, +- skipCache: false ++ skipCache: false, + }; +- ++ + const status = await this.performHealthChecks(options); +- ++ + // Determine overall status +- const statuses = Object.values(status).map((check: HealthCheck) => check.status); ++ const statuses = Object.values(status).map( ++ (check: HealthCheck) => check.status, ++ ); + const hasUnhealthy = statuses.includes('unhealthy'); + const hasDegraded = statuses.includes('degraded'); +- ++ + let overallStatus: 'healthy' | 'degraded' | 'unhealthy'; + if (hasUnhealthy) { + overallStatus = 'unhealthy'; +@@ -92,9 +95,11 @@ export class HealthService { + }; + } + +- private async performHealthChecks(options: HealthCheckOptions): Promise { ++ private async performHealthChecks( ++ options: HealthCheckOptions, ++ ): Promise { + const cacheKey = `health-checks-${JSON.stringify(options)}`; +- ++ + // Check cache first + if (!options.skipCache) { + const cached = this.cache.get(cacheKey); +@@ -111,7 +116,10 @@ export class HealthService { + }; + + // Add external API checks if configured +- const externalApiUrls = this.configService.get('EXTERNAL_API_HEALTH_CHECKS', []); ++ const externalApiUrls = this.configService.get( ++ 'EXTERNAL_API_HEALTH_CHECKS', ++ [], ++ ); + if (externalApiUrls.length > 0) { + status.externalApis = {}; + for (const url of externalApiUrls) { +@@ -130,11 +138,11 @@ export class HealthService { + + private async checkDatabase(): Promise { + const startTime = Date.now(); +- ++ + try { + await this.connection.query('SELECT 1'); + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'healthy', + responseTime, +@@ -145,11 +153,12 @@ export class HealthService { + }; + } catch (error) { + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'unhealthy', + responseTime, +- error: error instanceof Error ? error.message : 'Unknown database error', ++ error: ++ error instanceof Error ? error.message : 'Unknown database error', + details: { + connected: false, + responseTime: `${responseTime}ms`, +@@ -160,11 +169,11 @@ export class HealthService { + + private async checkRedis(): Promise { + const startTime = Date.now(); +- ++ + try { + await this.redis.ping(); + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'healthy', + responseTime, +@@ -175,7 +184,7 @@ export class HealthService { + }; + } catch (error) { + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'unhealthy', + responseTime, +@@ -190,15 +199,15 @@ export class HealthService { + + private async checkMemory(): Promise { + const startTime = Date.now(); +- ++ + try { + const memUsage = process.memoryUsage(); + const totalMemory = memUsage.heapTotal; + const usedMemory = memUsage.heapUsed; + const memoryUsagePercent = (usedMemory / totalMemory) * 100; +- ++ + const responseTime = Date.now() - startTime; +- ++ + // Consider memory usage > 80% as degraded, > 90% as unhealthy + let status: 'healthy' | 'degraded' | 'unhealthy'; + if (memoryUsagePercent > 90) { +@@ -208,7 +217,7 @@ export class HealthService { + } else { + status = 'healthy'; + } +- ++ + return { + status, + responseTime, +@@ -221,7 +230,7 @@ export class HealthService { + }; + } catch (error) { + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'unhealthy', + responseTime, +@@ -232,13 +241,13 @@ export class HealthService { + + private async checkFilesystem(): Promise { + const startTime = Date.now(); +- ++ + try { + const fs = require('fs').promises; + await fs.access('/tmp', fs.constants.W_OK); +- ++ + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'healthy', + responseTime, +@@ -249,11 +258,12 @@ export class HealthService { + }; + } catch (error) { + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'unhealthy', + responseTime, +- error: error instanceof Error ? error.message : 'Unknown filesystem error', ++ error: ++ error instanceof Error ? error.message : 'Unknown filesystem error', + details: { + writable: false, + responseTime: `${responseTime}ms`, +@@ -264,15 +274,15 @@ export class HealthService { + + private async checkExternalApi(url: string): Promise { + const startTime = Date.now(); +- ++ + try { + const response = await fetch(url, { + method: 'GET', + signal: AbortSignal.timeout(HEALTH_CHECK_TIMEOUT), + }); +- ++ + const responseTime = Date.now() - startTime; +- ++ + if (response.ok) { + return { + status: 'healthy', +@@ -295,7 +305,7 @@ export class HealthService { + } + } catch (error) { + const responseTime = Date.now() - startTime; +- ++ + return { + status: 'unhealthy', + responseTime, +diff --git a/backend/src/main.ts b/backend/src/main.ts +index ec9a1de..2b9d609 100644 +--- a/backend/src/main.ts ++++ b/backend/src/main.ts +@@ -19,7 +19,9 @@ async function bootstrap() { + ); + + // Stamp every request with a correlation ID before any other handler runs +- app.use(new CorrelationIdMiddleware().use.bind(new CorrelationIdMiddleware())); ++ app.use( ++ new CorrelationIdMiddleware().use.bind(new CorrelationIdMiddleware()), ++ ); + + // Enable global exception handling (catches ALL errors, not just HttpExceptions) + app.useGlobalFilters(new AllExceptionsFilter()); +@@ -42,13 +44,13 @@ async function bootstrap() { + + // Graceful shutdown handling + const healthService = app.get(HealthService); +- ++ + const gracefulShutdown = async (signal: string) => { + console.log(`\nšŸ›‘ Received ${signal}. Starting graceful shutdown...`); +- ++ + // Signal health checks that we're shutting down + healthService.setIsShuttingDown(); +- ++ + // Wait a moment for load balancers to detect the unhealthy state + setTimeout(async () => { + console.log('šŸ”„ Closing HTTP server...'); +diff --git a/backend/test/analytics.e2e-spec.ts b/backend/test/analytics.e2e-spec.ts +index 0a291a0..138be4e 100644 +--- a/backend/test/analytics.e2e-spec.ts ++++ b/backend/test/analytics.e2e-spec.ts +@@ -4,7 +4,16 @@ import { + ValidationPipe, + } from '@nestjs/common'; + import { Test, TestingModule } from '@nestjs/testing'; +-import * as request from 'supertest'; ++import { ++ afterAll, ++ beforeAll, ++ beforeEach, ++ describe, ++ expect, ++ it, ++ jest, ++} from '@jest/globals'; ++import request from 'supertest'; + import { App } from 'supertest/types'; + import { AnalyticsController } from '../src/analytics/controllers/analytics.controller'; + import { TrackEventProvider } from '../src/analytics/providers/track-event.provider'; +@@ -16,7 +25,14 @@ import { AnalyticsMetricResult } from '../src/analytics/dtos/analytics-metric-re + describe('GET /analytics/users/retention (e2e)', () => { + let app: INestApplication; + +- const mockGetRetentionCurveProvider = { getRetentionCurve: jest.fn() }; ++ const mockGetRetentionCurveProvider: { ++ getRetentionCurve: jest.MockedFunction< ++ (...args: any[]) => Promise ++ >; ++ } = { ++ getRetentionCurve: ++ jest.fn<(...args: any[]) => Promise>(), ++ }; + + const fakeResult: AnalyticsMetricResult = { + startDate: '2024-01-01', +@@ -97,9 +113,9 @@ describe('GET /analytics/users/retention (e2e)', () => { + .expect(200); + + expect(res.body).toEqual(fakeResult); +- expect(mockGetRetentionCurveProvider.getRetentionCurve).toHaveBeenCalledTimes( +- 1, +- ); ++ expect( ++ mockGetRetentionCurveProvider.getRetentionCurve, ++ ).toHaveBeenCalledTimes(1); + }); + + it('returns 403 for a caller without the admin role', async () => { +@@ -111,7 +127,9 @@ describe('GET /analytics/users/retention (e2e)', () => { + }) + .expect(403); + +- expect(mockGetRetentionCurveProvider.getRetentionCurve).not.toHaveBeenCalled(); ++ expect( ++ mockGetRetentionCurveProvider.getRetentionCurve, ++ ).not.toHaveBeenCalled(); + }); + + it('returns 400 with a clear validation message for an invalid granularity', async () => { +@@ -124,7 +142,9 @@ describe('GET /analytics/users/retention (e2e)', () => { + expect(res.body.message).toEqual( + expect.arrayContaining([expect.stringContaining('granularity')]), + ); +- expect(mockGetRetentionCurveProvider.getRetentionCurve).not.toHaveBeenCalled(); ++ expect( ++ mockGetRetentionCurveProvider.getRetentionCurve, ++ ).not.toHaveBeenCalled(); + }); + + it('returns 400 when start is after end', async () => { +@@ -144,7 +164,9 @@ describe('GET /analytics/users/retention (e2e)', () => { + ), + ]), + ); +- expect(mockGetRetentionCurveProvider.getRetentionCurve).not.toHaveBeenCalled(); ++ expect( ++ mockGetRetentionCurveProvider.getRetentionCurve, ++ ).not.toHaveBeenCalled(); + }); + + it('returns 400 for an unrecognized query param', async () => { +@@ -154,6 +176,8 @@ describe('GET /analytics/users/retention (e2e)', () => { + .query({ unknownParam: 'nope' }) + .expect(400); + +- expect(mockGetRetentionCurveProvider.getRetentionCurve).not.toHaveBeenCalled(); ++ expect( ++ mockGetRetentionCurveProvider.getRetentionCurve, ++ ).not.toHaveBeenCalled(); + }); + }); +diff --git a/frontend/app/analytics/page.tsx b/frontend/app/analytics/page.tsx +index 9e0a751..4acdb8c 100644 +--- a/frontend/app/analytics/page.tsx ++++ b/frontend/app/analytics/page.tsx +@@ -16,4 +16,4 @@ export default function AnalyticsPage() { + + + ); +-} +\ No newline at end of file ++} +diff --git a/frontend/app/auth/check-email/page.tsx b/frontend/app/auth/check-email/page.tsx +index 3ecb3f9..03f314c 100644 +--- a/frontend/app/auth/check-email/page.tsx ++++ b/frontend/app/auth/check-email/page.tsx +@@ -7,7 +7,6 @@ import { useToast } from "@/components/ui/ToastProvider"; + import { useState } from "react"; + import Button from "@/components/ui/Button"; + +- + const CheckEmail = () => { + const { showSuccess, showError } = useToast(); + const [isLoading, setIsLoading] = useState(false); +@@ -16,33 +15,47 @@ const CheckEmail = () => { + setIsLoading(true); + + // Get email from session storage or local storage (assuming it was saved during forgot-password) +- const email = sessionStorage.getItem('resetEmail') || localStorage.getItem('resetEmail'); ++ const email = ++ sessionStorage.getItem("resetEmail") || ++ localStorage.getItem("resetEmail"); + + if (!email) { +- showError('Error', 'Email not found. Please go back and try again.'); ++ showError("Error", "Email not found. Please go back and try again."); + setIsLoading(false); + return; + } + + try { +- const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/auth/forgot-password`, { +- method: 'POST', +- headers: { +- 'Content-Type': 'application/json', ++ const response = await fetch( ++ `${process.env.NEXT_PUBLIC_API_URL}/auth/forgot-password`, ++ { ++ method: "POST", ++ headers: { ++ "Content-Type": "application/json", ++ }, ++ body: JSON.stringify({ email }), + }, +- body: JSON.stringify({ email }), +- }); ++ ); + + const data = await response.json(); + + if (response.ok) { +- showSuccess('Success', data.message || 'Password reset link resent to your email.'); ++ showSuccess( ++ "Success", ++ data.message || "Password reset link resent to your email.", ++ ); + } else { +- showError('Error', data.message || 'Failed to resend password reset link.'); ++ showError( ++ "Error", ++ data.message || "Failed to resend password reset link.", ++ ); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (_) { +- showError('Error', 'An unexpected error occurred. Please try again later.'); ++ showError( ++ "Error", ++ "An unexpected error occurred. Please try again later.", ++ ); + } finally { + setIsLoading(false); + } +@@ -61,8 +74,8 @@ const CheckEmail = () => { +
+
+ {/* Mobile header with back arrow */} +-
+-
++
++
+ + + +@@ -79,7 +92,8 @@ const CheckEmail = () => { + {/* Message */} +
+

+- We've sent you a link to your email address to reset your password. Click the link in your inbox to continue. ++ We've sent you a link to your email address to reset your ++ password. Click the link in your inbox to continue. +

+
+ +@@ -90,13 +104,13 @@ const CheckEmail = () => { + disabled={isLoading} + className="w-full h-12 px-[10px] py-[14px] bg-[#3B82F6] hover:bg-[#2663C7] [box-shadow:0px_4px_0px_0px_#2663C7] text-white font-medium rounded-lg transition-colors" + > +- {isLoading ? 'Resending...' : 'Resend Link'} ++ {isLoading ? "Resending..." : "Resend Link"} + +
+
+
+ + ); +-} ++}; + +-export default CheckEmail; +\ No newline at end of file ++export default CheckEmail; +diff --git a/frontend/app/auth/forgot-password/page.tsx b/frontend/app/auth/forgot-password/page.tsx +index c1a4305..89e8f10 100644 +--- a/frontend/app/auth/forgot-password/page.tsx ++++ b/frontend/app/auth/forgot-password/page.tsx +@@ -2,7 +2,7 @@ + + import ErrorBoundary from "@/components/error/ErrorBoundary"; + import Link from "next/link"; +-import Image from 'next/image'; ++import Image from "next/image"; + import { ArrowLeft } from "lucide-react"; + import { useRouter } from "next/navigation"; + import Input from "@/components/ui/Input"; +@@ -14,148 +14,146 @@ const ForgotPassword = () => { + const router = useRouter(); + + const { showSuccess, showError } = useToast(); +- const [formData, setFormData] = useState({ +- email: '', +- }); +- const [isLoading, setIsLoading] = useState(false); +- +- const validateEmail = (email: string) => { +- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; +- return emailRegex.test(email); +- }; +- +- const handleInputChange = (field: string) => ( +- e: React.ChangeEvent +- ) => { +- const value = e.target.value; +- setFormData(prev => ({ +- ...prev, +- [field]: value +- })); +- }; +- +- const handleForgotPassword = async (e: React.FormEvent) => { +- e.preventDefault(); +- setIsLoading(true); +- +- // Validate email before submission +- if (!validateEmail(formData.email)) { +- showError('Invalid Email', 'Please enter a valid email address'); +- setIsLoading(false); +- return; +- } +- +- // Check if email field is empty +- if (!formData.email.trim()) { +- showError('Email Required', 'Please enter your email address'); +- setIsLoading(false); +- return; +- } +- +- try { +- const response = await fetch( +- `${process.env.NEXT_PUBLIC_API_URL}/auth/forgot-password`, +- { +- method: "POST", +- headers: { +- "Content-Type": "application/json", +- }, +- body: JSON.stringify({ email: formData.email }), +- }, +- ); +- +- const data = await response.json(); +- +- if (response.ok) { +- // Store email for resend functionality +- sessionStorage.setItem("resetEmail", formData.email); +- showSuccess( +- "Success", +- data.message || "Password reset link sent to your email.", +- ); +- router.push("/auth/check-email"); +- } else { +- showError( +- "Error", +- data.message || "Failed to send password reset link.", +- ); +- } +- // eslint-disable-next-line @typescript-eslint/no-unused-vars +- } catch (_) { +- showError('Error', 'An unexpected error occurred. Please try again later.'); +- } finally { +- setIsLoading(false); +- } +- } ++ const [formData, setFormData] = useState({ ++ email: "", ++ }); ++ const [isLoading, setIsLoading] = useState(false); ++ ++ const validateEmail = (email: string) => { ++ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; ++ return emailRegex.test(email); ++ }; ++ ++ const handleInputChange = ++ (field: string) => (e: React.ChangeEvent) => { ++ const value = e.target.value; ++ setFormData((prev) => ({ ++ ...prev, ++ [field]: value, ++ })); ++ }; ++ ++ const handleForgotPassword = async (e: React.FormEvent) => { ++ e.preventDefault(); ++ setIsLoading(true); ++ ++ // Validate email before submission ++ if (!validateEmail(formData.email)) { ++ showError("Invalid Email", "Please enter a valid email address"); ++ setIsLoading(false); ++ return; ++ } + ++ // Check if email field is empty ++ if (!formData.email.trim()) { ++ showError("Email Required", "Please enter your email address"); ++ setIsLoading(false); ++ return; ++ } + +- return ( ++ try { ++ const response = await fetch( ++ `${process.env.NEXT_PUBLIC_API_URL}/auth/forgot-password`, ++ { ++ method: "POST", ++ headers: { ++ "Content-Type": "application/json", ++ }, ++ body: JSON.stringify({ email: formData.email }), ++ }, ++ ); ++ ++ const data = await response.json(); ++ ++ if (response.ok) { ++ // Store email for resend functionality ++ sessionStorage.setItem("resetEmail", formData.email); ++ showSuccess( ++ "Success", ++ data.message || "Password reset link sent to your email.", ++ ); ++ router.push("/auth/check-email"); ++ } else { ++ showError( ++ "Error", ++ data.message || "Failed to send password reset link.", ++ ); ++ } ++ // eslint-disable-next-line @typescript-eslint/no-unused-vars ++ } catch (_) { ++ showError( ++ "Error", ++ "An unexpected error occurred. Please try again later.", ++ ); ++ } finally { ++ setIsLoading(false); ++ } ++ }; ++ ++ return ( + +
+- {/* Back Arrow - stays at top on desktop, within main content */} +-
+- +- +- +-
+- {/* Main Content */} +-
+-
+- {/* Mobile header with back arrow */} +-
+-
+- +- Home +- ++ {/* Back Arrow - stays at top on desktop, within main content */} ++
++ ++ ++ ++
++ {/* Main Content */} ++
++
++ {/* Mobile header with back arrow */} ++
++
++ ++ Home ++ ++
++

++ Forgot Password? ++

+
+-

++ ++ {/* Desktop title */} ++

+ Forgot Password? +

+-
+ +- {/* Desktop title */} +-

+- Forgot Password? +-

+- +- {/* Sign-in Form */} +-
+- +- +- {/* Sign In Button */} +- +-
+- +- {/* Sign Up Link */} +-
+- +- Back to Sign in +- ++ {/* Sign-in Form */} ++
++ ++ ++ {/* Sign In Button */} ++ ++
++ ++ {/* Sign Up Link */} ++
++ ++ Back to Sign in ++ ++
+
+
+
+-
+ +- ); +-} +- +-export default ForgotPassword; +\ No newline at end of file ++ ); ++}; ++ ++export default ForgotPassword; +diff --git a/frontend/app/auth/reset-password/[token]/page.tsx b/frontend/app/auth/reset-password/[token]/page.tsx +index acbf7c1..9b6a50b 100644 +--- a/frontend/app/auth/reset-password/[token]/page.tsx ++++ b/frontend/app/auth/reset-password/[token]/page.tsx +@@ -15,13 +15,12 @@ const ResetPassword = () => { + + const { showSuccess, showError } = useToast(); + const [formData, setFormData] = useState({ +- password: '', +- confirmPassword: '', ++ password: "", ++ confirmPassword: "", + }); + const [isLoading, setIsLoading] = useState(false); + +- console.log({token}); +- ++ console.log({ token }); + + // Password validation function + const validatePassword = (password: string) => { +@@ -30,15 +29,14 @@ const ResetPassword = () => { + return passwordRegex.test(password); + }; + +- const handleInputChange = (field: string) => ( +- e: React.ChangeEvent +- ) => { +- const value = e.target.value; +- setFormData(prev => ({ +- ...prev, +- [field]: value +- })); +- }; ++ const handleInputChange = ++ (field: string) => (e: React.ChangeEvent) => { ++ const value = e.target.value; ++ setFormData((prev) => ({ ++ ...prev, ++ [field]: value, ++ })); ++ }; + + const handleResetPassword = async (e: React.FormEvent) => { + e.preventDefault(); +@@ -46,15 +44,15 @@ const ResetPassword = () => { + + // Validate password + if (!formData.password.trim()) { +- showError('Password Required', 'Please enter a new password'); ++ showError("Password Required", "Please enter a new password"); + setIsLoading(false); + return; + } + + if (!validatePassword(formData.password)) { + showError( +- 'Weak Password', +- 'Password must be at least 8 characters with uppercase, lowercase, and number' ++ "Weak Password", ++ "Password must be at least 8 characters with uppercase, lowercase, and number", + ); + setIsLoading(false); + return; +@@ -62,14 +60,14 @@ const ResetPassword = () => { + + // Check if passwords match + if (formData.password !== formData.confirmPassword) { +- showError('Password Mismatch', 'Passwords do not match'); ++ showError("Password Mismatch", "Passwords do not match"); + setIsLoading(false); + return; + } + + // Check if confirm password is empty + if (!formData.confirmPassword.trim()) { +- showError('Confirm Password Required', 'Please confirm your password'); ++ showError("Confirm Password Required", "Please confirm your password"); + setIsLoading(false); + return; + } +@@ -108,14 +106,24 @@ const ResetPassword = () => { + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (_) { +- showError('Error', 'An unexpected error occurred. Please try again later.'); ++ showError( ++ "Error", ++ "An unexpected error occurred. Please try again later.", ++ ); + } finally { + setIsLoading(false); + } + }; + +- const passwordsMatch = formData.password && formData.confirmPassword && formData.password === formData.confirmPassword; +- const isFormValid = formData.password && formData.confirmPassword && passwordsMatch && validatePassword(formData.password); ++ const passwordsMatch = ++ formData.password && ++ formData.confirmPassword && ++ formData.password === formData.confirmPassword; ++ const isFormValid = ++ formData.password && ++ formData.confirmPassword && ++ passwordsMatch && ++ validatePassword(formData.password); + + return ( + +@@ -123,7 +131,7 @@ const ResetPassword = () => { + {/* Main Content */} +
+
+-
++
+

+ New Password +

+@@ -135,7 +143,7 @@ const ResetPassword = () => { + type="password" + placeholder="New Password" + value={formData.password} +- onChange={handleInputChange('password')} ++ onChange={handleInputChange("password")} + /> + + {/* Password Requirements */} +@@ -143,16 +151,32 @@ const ResetPassword = () => { +
+

Password must contain:

+
    +-
  • = 8 ? 'text-[#10B981]' : ''}> ++
  • = 8 ? "text-[#10B981]" : "" ++ } ++ > + At least 8 characters +
  • +-
  • ++
  • + One uppercase letter +
  • +-
  • ++
  • + One lowercase letter +
  • +-
  • ++
  • + One number +
  • +
+@@ -163,7 +187,7 @@ const ResetPassword = () => { + type="password" + placeholder="Confirm Password" + value={formData.confirmPassword} +- onChange={handleInputChange('confirmPassword')} ++ onChange={handleInputChange("confirmPassword")} + /> + + {/* Password Match Indicator */} +@@ -183,7 +207,7 @@ const ResetPassword = () => { + disabled={isLoading || !isFormValid} + className="w-full h-12 px-[10px] py-[14px] bg-[#3B82F6] hover:bg-[#2663C7] [box-shadow:0px_4px_0px_0px_#2663C7] text-white font-medium rounded-lg transition-colors mt-3" + > +- {isLoading ? 'Resetting...' : 'Reset Password'} ++ {isLoading ? "Resetting..." : "Reset Password"} + + +
+@@ -191,6 +215,6 @@ const ResetPassword = () => { +
+ + ); +-} ++}; + + export default ResetPassword; +diff --git a/frontend/app/auth/signin/page.tsx b/frontend/app/auth/signin/page.tsx +index 3c1e3ea..6b87ede 100644 +--- a/frontend/app/auth/signin/page.tsx ++++ b/frontend/app/auth/signin/page.tsx +@@ -1,35 +1,36 @@ +-'use client'; +- +-import React, { useState } from 'react'; +-import { useRouter } from 'next/navigation'; +-import Link from 'next/link'; +-import Input from '@/components/ui/Input'; +-import Button from '@/components/ui/Button'; +-import { Wallet } from 'lucide-react'; +-import Image from 'next/image'; +-import ErrorBoundary from '@/components/error/ErrorBoundary'; +-import { useToast } from '@/components/ui/ToastProvider'; +-import { useStellarWalletAuth } from '@/hooks/useStellarWalletAuth'; +-import { useAuth } from '@/hooks/useAuth'; +-import { WalletType } from '@/lib/stellar/types'; +-import WalletModal, { WalletType as ModalWalletType } from '@/components/ui/WalletModal'; +-import { useWalletModal } from '@/hooks/useWalletModal'; ++"use client"; ++ ++import React, { useState } from "react"; ++import { useRouter } from "next/navigation"; ++import Link from "next/link"; ++import Input from "@/components/ui/Input"; ++import Button from "@/components/ui/Button"; ++import { Wallet } from "lucide-react"; ++import Image from "next/image"; ++import ErrorBoundary from "@/components/error/ErrorBoundary"; ++import { useToast } from "@/components/ui/ToastProvider"; ++import { useStellarWalletAuth } from "@/hooks/useStellarWalletAuth"; ++import { useAuth } from "@/hooks/useAuth"; ++import { WalletType } from "@/lib/stellar/types"; ++import WalletModal, { ++ WalletType as ModalWalletType, ++} from "@/components/ui/WalletModal"; ++import { useWalletModal } from "@/hooks/useWalletModal"; + + const SignInPage = () => { + const router = useRouter(); + const { showSuccess, showError, showInfo, showWarning } = useToast(); +- const { +- isConnecting, +- isSigning, +- isLoggingIn, +- connectAndLogin, +- clearError, +- } = useStellarWalletAuth(); ++ const { isConnecting, isSigning, isLoggingIn, connectAndLogin, clearError } = ++ useStellarWalletAuth(); + const { loginSuccess, loginFailure, setLoading } = useAuth(); +- const { isOpen: isWalletModalOpen, openModal: openWalletModal, closeModal: closeWalletModal } = useWalletModal(); ++ const { ++ isOpen: isWalletModalOpen, ++ openModal: openWalletModal, ++ closeModal: closeWalletModal, ++ } = useWalletModal(); + const [formData, setFormData] = useState({ +- username: '', +- password: '' ++ username: "", ++ password: "", + }); + const [isLoading, setIsLoading] = useState(false); + +@@ -39,15 +40,14 @@ const SignInPage = () => { + return emailRegex.test(email); + }; + +- const handleInputChange = (field: string) => ( +- e: React.ChangeEvent +- ) => { +- const value = e.target.value; +- setFormData(prev => ({ +- ...prev, +- [field]: value +- })); +- }; ++ const handleInputChange = ++ (field: string) => (e: React.ChangeEvent) => { ++ const value = e.target.value; ++ setFormData((prev) => ({ ++ ...prev, ++ [field]: value, ++ })); ++ }; + + const handleSignIn = async (e: React.FormEvent) => { + e.preventDefault(); +@@ -56,7 +56,7 @@ const SignInPage = () => { + + // Validate email before submission + if (!validateEmail(formData.username)) { +- showError('Invalid Email', 'Please enter a valid email address'); ++ showError("Invalid Email", "Please enter a valid email address"); + setIsLoading(false); + setLoading(false); + return; +@@ -64,28 +64,28 @@ const SignInPage = () => { + + // Check if fields are empty + if (!formData.username.trim()) { +- showError('Email Required', 'Please enter your email address'); ++ showError("Email Required", "Please enter your email address"); + setIsLoading(false); + setLoading(false); + return; + } + + if (!formData.password.trim()) { +- showError('Password Required', 'Please enter your password'); ++ showError("Password Required", "Please enter your password"); + setIsLoading(false); + setLoading(false); + return; + } + + try { +- const response = await fetch('http://localhost:3000/auth/signIn', { +- method: 'POST', ++ const response = await fetch("http://localhost:3000/auth/signIn", { ++ method: "POST", + headers: { +- 'Content-Type': 'application/json', ++ "Content-Type": "application/json", + }, + body: JSON.stringify({ + email: formData.username, +- password: formData.password ++ password: formData.password, + }), + }); + +@@ -95,32 +95,33 @@ const SignInPage = () => { + const errorData = await response.json(); + // Handle specific error messages from server + if (response.status === 401) { +- const errorMsg = 'Invalid email or password.'; +- showError('Login Failed', errorMsg); ++ const errorMsg = "Invalid email or password."; ++ showError("Login Failed", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); + } else if (response.status === 404) { +- const errorMsg = 'Account not found.'; +- showError('Account Not Found', errorMsg); ++ const errorMsg = "Account not found."; ++ showError("Account Not Found", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); + } else if (response.status === 400) { +- const errorMsg = errorData.message || 'Invalid input.'; +- showError('Invalid Input', errorMsg); ++ const errorMsg = errorData.message || "Invalid input."; ++ showError("Invalid Input", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); + } else if (response.status >= 500) { +- const errorMsg = 'Server error. Please try again later.'; +- showError('Server Error', errorMsg); ++ const errorMsg = "Server error. Please try again later."; ++ showError("Server Error", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); + } else { +- const errorMsg = errorData.message || 'Login failed. Please try again.'; +- showError('Login Failed', errorMsg); ++ const errorMsg = ++ errorData.message || "Login failed. Please try again."; ++ showError("Login Failed", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); +@@ -128,20 +129,20 @@ const SignInPage = () => { + } catch { + // If response isn't JSON, use status text or default message + if (response.status === 401) { +- const errorMsg = 'Invalid email or password.'; +- showError('Login Failed', errorMsg); ++ const errorMsg = "Invalid email or password."; ++ showError("Login Failed", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); + } else if (response.status === 404) { +- const errorMsg = 'Account not found.'; +- showError('Account Not Found', errorMsg); ++ const errorMsg = "Account not found."; ++ showError("Account Not Found", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); + } else { +- const errorMsg = `Login failed: ${response.statusText || 'Please try again.'}`; +- showError('Login Failed', errorMsg); ++ const errorMsg = `Login failed: ${response.statusText || "Please try again."}`; ++ showError("Login Failed", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); +@@ -157,35 +158,35 @@ const SignInPage = () => { + + if (data.accessToken) { + // Store token in localStorage +- localStorage.setItem('accessToken', data.accessToken); +- ++ localStorage.setItem("accessToken", data.accessToken); ++ + // Update Redux state + const user = { + id: data.user?.id || formData.username, + email: formData.username, +- username: data.user?.username || formData.username.split('@')[0], ++ username: data.user?.username || formData.username.split("@")[0], + }; +- ++ + loginSuccess(user, data.accessToken); +- ++ + // Show success toast +- showSuccess('Login Successful', 'Welcome back!'); ++ showSuccess("Login Successful", "Welcome back!"); + setIsLoading(false); + setLoading(false); +- ++ + // Redirect to dashboard +- router.push('/dashboard'); ++ router.push("/dashboard"); + } else { +- const errorMsg = 'Invalid response from server. Please try again.'; +- showError('Invalid Response', errorMsg); ++ const errorMsg = "Invalid response from server. Please try again."; ++ showError("Invalid Response", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); + } + } catch (error) { +- console.error('Sign in error:', error); +- const errorMsg = 'Network error.'; +- showError('Network Error', errorMsg); ++ console.error("Sign in error:", error); ++ const errorMsg = "Network error."; ++ showError("Network Error", errorMsg); + loginFailure(errorMsg); + setIsLoading(false); + setLoading(false); +@@ -196,46 +197,60 @@ const SignInPage = () => { + }; + + const handleGoogleSignIn = () => { +- showInfo('Google Sign-In', 'Redirecting to Google authentication...'); ++ showInfo("Google Sign-In", "Redirecting to Google authentication..."); + window.location.href = "http://localhost:3000/auth/google-authentication"; + }; + + const handleWalletSelect = async (walletType: ModalWalletType) => { + closeWalletModal(); + +- if (walletType !== 'freighter') { +- showInfo('Coming Soon', `${walletType.charAt(0).toUpperCase() + walletType.slice(1)} wallet support is coming soon!`); ++ if (walletType !== "freighter") { ++ showInfo( ++ "Coming Soon", ++ `${walletType.charAt(0).toUpperCase() + walletType.slice(1)} wallet support is coming soon!`, ++ ); + return; + } + + clearError(); + + try { +- await connectAndLogin('freighter' as WalletType); +- showSuccess('Login Successful', 'Welcome back!'); +- router.push('/dashboard'); ++ await connectAndLogin("freighter" as WalletType); ++ showSuccess("Login Successful", "Welcome back!"); ++ router.push("/dashboard"); + } catch (error) { + console.error("Wallet Connection Error:", error); + +- const isErrorWithCode = (e: unknown): e is { code?: string; message?: string } => { +- return typeof e === 'object' && e !== null; ++ const isErrorWithCode = ( ++ e: unknown, ++ ): e is { code?: string; message?: string } => { ++ return typeof e === "object" && e !== null; + }; + if (isErrorWithCode(error)) { +- if (error?.code === 'WALLET_NOT_INSTALLED') { ++ if (error?.code === "WALLET_NOT_INSTALLED") { + showError( +- 'Wallet Not Installed', +- 'Please install Freighter wallet from freighter.app to continue' ++ "Wallet Not Installed", ++ "Please install Freighter wallet from freighter.app to continue", ++ ); ++ } else if (error?.code === "USER_REJECTED") { ++ showWarning("Request Cancelled", "You cancelled the wallet request"); ++ } else if (error?.code === "NONCE_EXPIRED") { ++ showError("Authentication Expired", "Please try again"); ++ } else if (error?.code === "INVALID_SIGNATURE") { ++ showError( ++ "Authentication Failed", ++ "Invalid signature or expired nonce", ++ ); ++ } else if (error?.code === "NETWORK_ERROR") { ++ showError( ++ "Network Error", ++ "Unable to connect to server. Please try again.", + ); +- } else if (error?.code === 'USER_REJECTED') { +- showWarning('Request Cancelled', 'You cancelled the wallet request'); +- } else if (error?.code === 'NONCE_EXPIRED') { +- showError('Authentication Expired', 'Please try again'); +- } else if (error?.code === 'INVALID_SIGNATURE') { +- showError('Authentication Failed', 'Invalid signature or expired nonce'); +- } else if (error?.code === 'NETWORK_ERROR') { +- showError('Network Error', 'Unable to connect to server. Please try again.'); + } else { +- showError('Login Failed', error?.message || 'An unexpected error occurred'); ++ showError( ++ "Login Failed", ++ error?.message || "An unexpected error occurred", ++ ); + } + } + } +@@ -244,120 +259,136 @@ const SignInPage = () => { + return ( + +
+- {/* Header */} +-
+-
+- {/* Main Content */} +-
+-
+-
+-
+- +- Home +- ++ {/* Header */} ++
++ {/* Main Content */} ++
++
++
++
++ ++ Home ++ ++
++

++ Your journey continues ++

+
+-

+- Your journey continues +-

+-
+ +- {/* Sign-in Form */} +-
+- +- +- +- +- {/* Forgot Password Link */} +-
+- ++ ++ ++ ++ ++ {/* Forgot Password Link */} ++
++ ++ Forgot Password? ++ ++
++ ++ {/* Sign In Button */} ++ ++ ++ ++ {/* Sign Up Link */} ++
++ ++ Don't have an account?{" "} ++ ++ +- Forgot Password? ++ Sign up + +
+ +- {/* Sign In Button */} +- +- +- +- {/* Sign Up Link */} +-
+- Don't have an account? +- +- Sign up +- +-
++ {/* Divider */} ++
Or
+ +- {/* Divider */} +-
Or
+- +- {/* Social Login Buttons */} +-
+- +- +- +-
++ {/* Social Login Buttons */} ++
++ + +- {/* Terms and Privacy */} +-
+- By signing in to Mind Block, you agree to our{' '} +- +- Terms +- +- {' '}and{' '} +- +- Privacy Policy +- ++ ++
++ ++ {/* Terms and Privacy */} ++
++ By signing in to Mind Block, you agree to our{" "} ++ ++ Terms ++ {" "} ++ and{" "} ++ ++ Privacy Policy ++ ++
+
+
+
+-
+ { + const router = useRouter(); + const { showSuccess, showError, showWarning, showInfo } = useToast(); +- const { +- isConnecting, +- isSigning, +- isLoggingIn, +- connectAndLogin, +- clearError, +- } = useStellarWalletAuth(); ++ const { isConnecting, isSigning, isLoggingIn, connectAndLogin, clearError } = ++ useStellarWalletAuth(); + const [formData, setFormData] = useState({ + username: "", + fullName: "", +@@ -127,16 +121,13 @@ const SignUpPage = () => { + + console.log("Sending request with data:", requestBody); // Debug log + +- const response = await fetch( +- "http://localhost:3000/users", +- { +- method: "POST", +- headers: { +- "Content-Type": "application/json", +- }, +- body: JSON.stringify(requestBody), ++ const response = await fetch("http://localhost:3000/users", { ++ method: "POST", ++ headers: { ++ "Content-Type": "application/json", + }, +- ); ++ body: JSON.stringify(requestBody), ++ }); + + // Log response details for debugging + console.log("Response status:", response.status); +@@ -263,8 +254,7 @@ const SignUpPage = () => { + + const handleGoogleSignUp = () => { + showInfo("Google Sign-Up", "Redirecting to Google authentication..."); +- window.location.href = +- "http://localhost:3000/auth/google-authentication"; ++ window.location.href = "http://localhost:3000/auth/google-authentication"; + }; + + const handleWalletConnect = async () => { +@@ -278,36 +268,40 @@ const SignUpPage = () => { + router.push("/dashboard"); + } catch (error) { + console.error("Wallet Connection Error:", error); +- const isErrorWithCode = (e: unknown): e is { code?: string; message?: string } => { +- return typeof e === 'object' && e !== null; ++ const isErrorWithCode = ( ++ e: unknown, ++ ): e is { code?: string; message?: string } => { ++ return typeof e === "object" && e !== null; + }; +- ++ + if (isErrorWithCode(error)) { + if (error.code === "WALLET_NOT_INSTALLED") { +- +- showError( +- "Wallet Not Installed", +- "Please install Freighter wallet from freighter.app to continue", +- ); +- } else if (error?.code === "USER_REJECTED") { +- showWarning("Request Cancelled", "You cancelled the wallet request"); +- } else if (error?.code === "NONCE_EXPIRED") { +- showError("Authentication Expired", "Please try again"); +- } else if (error?.code === "INVALID_SIGNATURE") { +- showError("Authentication Failed", "Invalid signature or expired nonce"); +- } else if (error?.code === "NETWORK_ERROR") { +- showError( +- "Network Error", +- "Unable to connect to server. Please try again.", +- ); +- } else { +- showError( +- "Login Failed", +- error?.message || "An unexpected error occurred", +- ); ++ showError( ++ "Wallet Not Installed", ++ "Please install Freighter wallet from freighter.app to continue", ++ ); ++ } else if (error?.code === "USER_REJECTED") { ++ showWarning("Request Cancelled", "You cancelled the wallet request"); ++ } else if (error?.code === "NONCE_EXPIRED") { ++ showError("Authentication Expired", "Please try again"); ++ } else if (error?.code === "INVALID_SIGNATURE") { ++ showError( ++ "Authentication Failed", ++ "Invalid signature or expired nonce", ++ ); ++ } else if (error?.code === "NETWORK_ERROR") { ++ showError( ++ "Network Error", ++ "Unable to connect to server. Please try again.", ++ ); ++ } else { ++ showError( ++ "Login Failed", ++ error?.message || "An unexpected error occurred", ++ ); ++ } + } + } +- } + }; + + return ( +@@ -460,4 +454,4 @@ const SignUpPage = () => { + ); + }; + +-export default SignUpPage; +\ No newline at end of file ++export default SignUpPage; +diff --git a/frontend/app/coding/page.tsx b/frontend/app/coding/page.tsx +index 09f7d94..213937f 100644 +--- a/frontend/app/coding/page.tsx ++++ b/frontend/app/coding/page.tsx +@@ -1,21 +1,21 @@ +-'use client'; ++"use client"; + +-import { useState } from 'react'; +-import CodeEditorPanel from '@/components/coding/CodeEditorPanel'; +-import { Language } from '@/lib/types/editor'; ++import { useState } from "react"; ++import CodeEditorPanel from "@/components/coding/CodeEditorPanel"; ++import { Language } from "@/lib/types/editor"; + + export default function CodingPage() { +- const [code, setCode] = useState(''); +- const [language, setLanguage] = useState('javascript'); ++ const [code, setCode] = useState(""); ++ const [language, setLanguage] = useState("javascript"); + + const handleCodeChange = (newCode: string) => { + setCode(newCode); +- console.log('Code updated:', newCode); ++ console.log("Code updated:", newCode); + }; + + const handleLanguageChange = (newLanguage: Language) => { + setLanguage(newLanguage); +- console.log('Language changed to:', newLanguage); ++ console.log("Language changed to:", newLanguage); + }; + + return ( +@@ -25,7 +25,7 @@ export default function CodingPage() { +

Code Challenge

+

Write your solution below

+
+- ++ +
+ { + const stats = data?.stats; + const streak = stats?.streak ?? 0; + const points = stats?.points ?? 0; +- const dailyQuestProgress = stats?.dailyQuestProgress ?? { completed: 0, total: 5 }; ++ const dailyQuestProgress = stats?.dailyQuestProgress ?? { ++ completed: 0, ++ total: 5, ++ }; + + // Get categories from context or use empty array + const categories = data?.categories ?? []; + + return ( +
+-
+-
+-
+-
+-
+- Mind Block +-
+- +- mind block +- +-
+- +-
+-
+- +- +- {streak} Day Streak +- +-
+-
+- +- +- {points} Points ++
++
++
++
++
++ Mind Block ++
++ ++ mind block + +
+-
+- ++ ++
++
++ ++ ++ {streak} Day Streak ++ ++
++
++ ++ ++ {points} Points ++ ++
++
++ ++
+
+
+
+-
+
+ +
+diff --git a/frontend/app/friends/add/page.tsx b/frontend/app/friends/add/page.tsx +index 52e9369..10e4781 100644 +--- a/frontend/app/friends/add/page.tsx ++++ b/frontend/app/friends/add/page.tsx +@@ -5,7 +5,9 @@ export default function AddFriendsPage() { +

+ Placeholder Route +

+-

Add Friends

++

++ Add Friends ++

+

+ Friend discovery will be added in a future backend-connected task. +

+diff --git a/frontend/app/friends/friends-content.tsx b/frontend/app/friends/friends-content.tsx +index b9eb91f..49628c1 100644 +--- a/frontend/app/friends/friends-content.tsx ++++ b/frontend/app/friends/friends-content.tsx +@@ -43,7 +43,7 @@ export default function FriendsPageContent() { + + const friends = useMemo( + () => (activeTab === "following" ? followingFriends : followerFriends), +- [activeTab] ++ [activeTab], + ); + + const handleTabChange = (tab: FriendsTab) => { +@@ -64,7 +64,9 @@ export default function FriendsPageContent() { + key={friend.id} + avatar={friend.avatar} + username={friend.username} +- onClick={() => router.push(`/profile?user=${friend.username.toLowerCase()}`)} ++ onClick={() => ++ router.push(`/profile?user=${friend.username.toLowerCase()}`) ++ } + /> + ))} +
+diff --git a/frontend/app/global-error.tsx b/frontend/app/global-error.tsx +index b2bcdcd..6257331 100644 +--- a/frontend/app/global-error.tsx ++++ b/frontend/app/global-error.tsx +@@ -1,7 +1,7 @@ +-'use client'; ++"use client"; + +-import { useEffect } from 'react'; +-import GenericErrorPage from '../components/error/GenericErrorPage'; ++import { useEffect } from "react"; ++import GenericErrorPage from "../components/error/GenericErrorPage"; + + export default function GlobalError({ + error, +@@ -10,17 +10,17 @@ export default function GlobalError({ + }) { + useEffect(() => { + // Log the error to an error reporting service +- console.error('Global error:', error); ++ console.error("Global error:", error); + }, [error]); + + return ( + + +- + + + ); +-} +\ No newline at end of file ++} +diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx +index 5f11f56..f200050 100644 +--- a/frontend/app/layout.tsx ++++ b/frontend/app/layout.tsx +@@ -33,15 +33,13 @@ export default function RootLayout({ + + + +- +- +- +- +- {children} +- +- +- +- ++ ++ ++ ++ {children} ++ ++ ++ + + + +diff --git a/frontend/app/not-found.tsx b/frontend/app/not-found.tsx +index 1459748..8b3ea57 100644 +--- a/frontend/app/not-found.tsx ++++ b/frontend/app/not-found.tsx +@@ -1,4 +1,4 @@ +-import NotFoundPage from '../components/error/NotFoundPage'; ++import NotFoundPage from "../components/error/NotFoundPage"; + + export default function NotFound() { + return ( +@@ -8,4 +8,4 @@ export default function NotFound() { + + + ); +-} +\ No newline at end of file ++} +diff --git a/frontend/app/onboarding/OnboardingContext.tsx b/frontend/app/onboarding/OnboardingContext.tsx +index 6cb90a3..598221e 100644 +--- a/frontend/app/onboarding/OnboardingContext.tsx ++++ b/frontend/app/onboarding/OnboardingContext.tsx +@@ -1,54 +1,62 @@ +-'use client'; +- +-import React, { createContext, useContext, useState, ReactNode } from 'react'; +- +-interface OnboardingData { +- challengeLevel: string; +- challengeTypes: string[]; +- referralSource: string; +- ageGroup: string; +-} +- +-interface OnboardingContextType { +- data: OnboardingData; +- updateData: (section: K, payload: OnboardingData[K]) => void; +- resetData: () => void; +-} +- +-const defaultData: OnboardingData = { +- challengeLevel: '', +- challengeTypes: [], +- referralSource: '', +- ageGroup: '', +-}; +- +-const OnboardingContext = createContext(undefined); +- +-export const OnboardingProvider = ({ children }: { children: ReactNode }) => { +- const [data, setData] = useState(defaultData); +- +- const updateData = (section: K, payload: OnboardingData[K]) => { +- setData((prev) => ({ +- ...prev, +- [section]: payload, +- })); +- }; +- +- const resetData = () => { +- setData(defaultData); +- }; +- +- return ( +- +- {children} +- +- ); +-}; +- +-export const useOnboarding = () => { +- const context = useContext(OnboardingContext); +- if (!context) { +- throw new Error('useOnboarding must be used within an OnboardingProvider'); +- } +- return context; +-}; +\ No newline at end of file ++"use client"; ++ ++import React, { createContext, useContext, useState, ReactNode } from "react"; ++ ++interface OnboardingData { ++ challengeLevel: string; ++ challengeTypes: string[]; ++ referralSource: string; ++ ageGroup: string; ++} ++ ++interface OnboardingContextType { ++ data: OnboardingData; ++ updateData: ( ++ section: K, ++ payload: OnboardingData[K], ++ ) => void; ++ resetData: () => void; ++} ++ ++const defaultData: OnboardingData = { ++ challengeLevel: "", ++ challengeTypes: [], ++ referralSource: "", ++ ageGroup: "", ++}; ++ ++const OnboardingContext = createContext( ++ undefined, ++); ++ ++export const OnboardingProvider = ({ children }: { children: ReactNode }) => { ++ const [data, setData] = useState(defaultData); ++ ++ const updateData = ( ++ section: K, ++ payload: OnboardingData[K], ++ ) => { ++ setData((prev) => ({ ++ ...prev, ++ [section]: payload, ++ })); ++ }; ++ ++ const resetData = () => { ++ setData(defaultData); ++ }; ++ ++ return ( ++ ++ {children} ++ ++ ); ++}; ++ ++export const useOnboarding = () => { ++ const context = useContext(OnboardingContext); ++ if (!context) { ++ throw new Error("useOnboarding must be used within an OnboardingProvider"); ++ } ++ return context; ++}; +diff --git a/frontend/app/onboarding/additional-info/page.tsx b/frontend/app/onboarding/additional-info/page.tsx +index c2ed59a..0840d12 100644 +--- a/frontend/app/onboarding/additional-info/page.tsx ++++ b/frontend/app/onboarding/additional-info/page.tsx +@@ -1,361 +1,412 @@ +-'use client'; +- +-import React, { useState } from 'react'; +-import { useRouter } from 'next/navigation'; +-import Button from '@/components/Button'; +-import { useOnboarding } from '../OnboardingContext'; +-import Image from 'next/image'; +-import { useUpdateUserProfile } from '@/hooks/useUpdateUserProfile'; +-import { useAuth } from '@/hooks/useAuth'; +-import { mapChallengeLevel, mapChallengeType, mapReferralSource, mapAgeGroup } from '@/lib/utils/onboardingMapper'; +- +-// Step 3a: How did you hear about Block Mind? (Selection) +-const referralSources = [ +- 'Google Search', +- 'X (formerly called Twitter)', +- 'Facebook / Instagram', +- 'Friends / family', +- 'Play Store', +- 'App Store', +- 'News / article / blog', +- 'Youtube', +- 'Others' +-]; +- +-// Step 3b: How old are you? (Age Range Selection) +-const ageRanges = [ +- 'From 10 to 17 years old', +- '18 to 24 years old', +- '25 to 34 years old', +- '35 to 44 years old', +- '45 to 54 years old', +- '55 to 64 years old', +- '65+' +-]; +- +-export default function AdditionalInfoPage() { +- const router = useRouter(); +- const { data, updateData, resetData } = useOnboarding(); +- const { updateProfile, isLoading, error, clearError } = useUpdateUserProfile(); +- const { isAuthenticated } = useAuth(); +- const [step, setStep] = useState<'referral' | 'age'>('referral'); +- const [selectedSource, setSelectedSource] = useState(null); +- const [selectedAge, setSelectedAge] = useState(null); +- const [loadingProgress, setLoadingProgress] = useState(0); +- const [showError, setShowError] = useState(false); +- +- const handleSourceSelect = (source: string) => { +- setSelectedSource(source); +- }; +- +- const handleAgeSelect = (age: string) => { +- setSelectedAge(age); +- }; +- +- const handleContinueFromReferral = () => { +- if (selectedSource) { +- updateData('referralSource', selectedSource); +- setStep('age'); +- } +- }; +- +- const handleContinueFromAge = async () => { +- if (!selectedAge) return; +- +- // Check authentication +- if (!isAuthenticated) { +- setShowError(true); +- return; +- } +- +- updateData('ageGroup', selectedAge); +- +- // Prepare data for API with proper enum mapping +- const profileData = { +- challengeLevel: mapChallengeLevel(data.challengeLevel), +- challengeTypes: data.challengeTypes.map(mapChallengeType), +- referralSource: mapReferralSource(selectedSource || data.referralSource), +- ageGroup: mapAgeGroup(selectedAge), +- }; +- +- try { +- await updateProfile(profileData); +- +- // Reset onboarding data after successful save +- resetData(); +- +- // Redirect to dashboard +- router.push('/dashboard'); +- } catch (err) { +- setShowError(true); +- } +- }; +- +- const handleRetry = () => { +- setShowError(false); +- clearError(); +- }; +- +- // Handle loading animation when submitting +- React.useEffect(() => { +- if (!isLoading) { +- setLoadingProgress(0); +- return; +- } +- +- const interval = setInterval(() => { +- setLoadingProgress(prev => { +- if (prev >= 90) { +- return 90; // Stop at 90% until actual completion +- } +- return prev + 2; +- }); +- }, 50); +- +- return () => { +- clearInterval(interval); +- }; +- }, [isLoading]); +- +- // Complete progress bar on success +- React.useEffect(() => { +- if (!isLoading && loadingProgress > 0 && !error) { +- setLoadingProgress(100); +- } +- }, [isLoading, loadingProgress, error]); +- +- // Loading screen with animated progress +- if (isLoading) { +- return ( +-
+- {/* Puzzle Icon */} +-
+- Loading +-
+- +- {/* Message Card */} +-
+- Preparing your account... +-
+- +- {/* Animated Progress Bar */} +-
+-
+-
+-
+- {loadingProgress}% +-
+-
+- ); +- } +- +- // Error screen +- if (showError) { +- return ( +-
+- {/* Error Icon */} +-
+-
+- +- +- +- +- +-
+-
+- +- {/* Error Message */} +-
+-

Something went wrong

+-

+- {error || 'Unable to save your profile. Please try again.'} +-

+-
+- +- {/* Retry Button */} +-
+- +- +-
+-
+- ); +- } +- +- // Step 3a: Referral Source Selection Screen +- if (step === 'referral') { +- return ( +-
+- {/* Top Navigation Bar */} +-
+- +- +- {/* Progress Bar - White track */} +-
+-
+-
+- +-
+-
+- +- {/* Header with Puzzle Icon INLINE with Title */} +-
+- MindBlock +-
+- How do you hear about Block Mind? +-
+-
+- +- {/* Selection Cards - Increased gap */} +-
+- {referralSources.map((source) => ( +- +- ))} +-
+- +-
+- +-
+- +- {/* Background Ambience */} +-
+-
+-
+-
+-
+- ); +- } +- +- // Step 3b: Age Range Selection Screen +- return ( +-
+- {/* Top Navigation Bar */} +-
+- +- +- {/* Progress Bar - White track */} +-
+-
+-
+- +-
+-
+- +- {/* Header with Puzzle Icon INLINE with Title */} +-
+- MindBlock +-
+- How old are you? +-
+-
+- +- {/* Age Range Selection Cards - Increased gap */} +-
+- {ageRanges.map((age) => ( +- +- ))} +-
+- +-
+- +-
+- +- {/* Background Ambience */} +-
+-
+-
+-
+-
+- ); +-} +\ No newline at end of file ++"use client"; ++ ++import React, { useState } from "react"; ++import { useRouter } from "next/navigation"; ++import Button from "@/components/Button"; ++import { useOnboarding } from "../OnboardingContext"; ++import Image from "next/image"; ++import { useUpdateUserProfile } from "@/hooks/useUpdateUserProfile"; ++import { useAuth } from "@/hooks/useAuth"; ++import { ++ mapChallengeLevel, ++ mapChallengeType, ++ mapReferralSource, ++ mapAgeGroup, ++} from "@/lib/utils/onboardingMapper"; ++ ++// Step 3a: How did you hear about Block Mind? (Selection) ++const referralSources = [ ++ "Google Search", ++ "X (formerly called Twitter)", ++ "Facebook / Instagram", ++ "Friends / family", ++ "Play Store", ++ "App Store", ++ "News / article / blog", ++ "Youtube", ++ "Others", ++]; ++ ++// Step 3b: How old are you? (Age Range Selection) ++const ageRanges = [ ++ "From 10 to 17 years old", ++ "18 to 24 years old", ++ "25 to 34 years old", ++ "35 to 44 years old", ++ "45 to 54 years old", ++ "55 to 64 years old", ++ "65+", ++]; ++ ++export default function AdditionalInfoPage() { ++ const router = useRouter(); ++ const { data, updateData, resetData } = useOnboarding(); ++ const { updateProfile, isLoading, error, clearError } = ++ useUpdateUserProfile(); ++ const { isAuthenticated } = useAuth(); ++ const [step, setStep] = useState<"referral" | "age">("referral"); ++ const [selectedSource, setSelectedSource] = useState(null); ++ const [selectedAge, setSelectedAge] = useState(null); ++ const [loadingProgress, setLoadingProgress] = useState(0); ++ const [showError, setShowError] = useState(false); ++ ++ const handleSourceSelect = (source: string) => { ++ setSelectedSource(source); ++ }; ++ ++ const handleAgeSelect = (age: string) => { ++ setSelectedAge(age); ++ }; ++ ++ const handleContinueFromReferral = () => { ++ if (selectedSource) { ++ updateData("referralSource", selectedSource); ++ setStep("age"); ++ } ++ }; ++ ++ const handleContinueFromAge = async () => { ++ if (!selectedAge) return; ++ ++ // Check authentication ++ if (!isAuthenticated) { ++ setShowError(true); ++ return; ++ } ++ ++ updateData("ageGroup", selectedAge); ++ ++ // Prepare data for API with proper enum mapping ++ const profileData = { ++ challengeLevel: mapChallengeLevel(data.challengeLevel), ++ challengeTypes: data.challengeTypes.map(mapChallengeType), ++ referralSource: mapReferralSource(selectedSource || data.referralSource), ++ ageGroup: mapAgeGroup(selectedAge), ++ }; ++ ++ try { ++ await updateProfile(profileData); ++ ++ // Reset onboarding data after successful save ++ resetData(); ++ ++ // Redirect to dashboard ++ router.push("/dashboard"); ++ } catch (err) { ++ setShowError(true); ++ } ++ }; ++ ++ const handleRetry = () => { ++ setShowError(false); ++ clearError(); ++ }; ++ ++ // Handle loading animation when submitting ++ React.useEffect(() => { ++ if (!isLoading) { ++ setLoadingProgress(0); ++ return; ++ } ++ ++ const interval = setInterval(() => { ++ setLoadingProgress((prev) => { ++ if (prev >= 90) { ++ return 90; // Stop at 90% until actual completion ++ } ++ return prev + 2; ++ }); ++ }, 50); ++ ++ return () => { ++ clearInterval(interval); ++ }; ++ }, [isLoading]); ++ ++ // Complete progress bar on success ++ React.useEffect(() => { ++ if (!isLoading && loadingProgress > 0 && !error) { ++ setLoadingProgress(100); ++ } ++ }, [isLoading, loadingProgress, error]); ++ ++ // Loading screen with animated progress ++ if (isLoading) { ++ return ( ++
++ {/* Puzzle Icon */} ++
++ Loading ++
++ ++ {/* Message Card */} ++
++ ++ Preparing your account... ++ ++
++ ++ {/* Animated Progress Bar */} ++
++
++
++
++ ++ {loadingProgress}% ++ ++
++
++ ); ++ } ++ ++ // Error screen ++ if (showError) { ++ return ( ++
++ {/* Error Icon */} ++
++
++ ++ ++ ++ ++ ++
++
++ ++ {/* Error Message */} ++
++

++ Something went wrong ++

++

++ {error || "Unable to save your profile. Please try again."} ++

++
++ ++ {/* Retry Button */} ++
++ ++ ++
++
++ ); ++ } ++ ++ // Step 3a: Referral Source Selection Screen ++ if (step === "referral") { ++ return ( ++
++ {/* Top Navigation Bar */} ++
++ ++ ++ {/* Progress Bar - White track */} ++
++
++
++ ++
++
++ ++ {/* Header with Puzzle Icon INLINE with Title */} ++
++ MindBlock ++
++ ++ How do you hear about Block Mind? ++ ++
++
++ ++ {/* Selection Cards - Increased gap */} ++
++ {referralSources.map((source) => ( ++ ++ ))} ++
++ ++
++ ++
++ ++ {/* Background Ambience */} ++
++
++
++
++
++ ); ++ } ++ ++ // Step 3b: Age Range Selection Screen ++ return ( ++
++ {/* Top Navigation Bar */} ++
++ ++ ++ {/* Progress Bar - White track */} ++
++
++
++ ++
++
++ ++ {/* Header with Puzzle Icon INLINE with Title */} ++
++ MindBlock ++
++ ++ How old are you? ++ ++
++
++ ++ {/* Age Range Selection Cards - Increased gap */} ++
++ {ageRanges.map((age) => ( ++ ++ ))} ++
++ ++
++ ++
++ ++ {/* Background Ambience */} ++
++
++
++
++
++ ); ++} +diff --git a/frontend/app/onboarding/challenge-level/page.tsx b/frontend/app/onboarding/challenge-level/page.tsx +index 55a82a8..e99e682 100644 +--- a/frontend/app/onboarding/challenge-level/page.tsx ++++ b/frontend/app/onboarding/challenge-level/page.tsx +@@ -1,114 +1,142 @@ +-'use client'; +- +-import React from 'react'; +-import { useRouter } from 'next/navigation'; +-import Button from '@/components/Button'; +-import { useOnboarding } from '../OnboardingContext'; +-import Image from 'next/image'; +- +-const levels = [ +- { id: 'BEGINNER', label: 'I am a total beginner', icon: '/icon-level-beginner.svg' }, +- { id: 'INTERMEDIATE', label: 'I am intermediate', icon: '/icon-level-intermediate.svg' }, +- { id: 'ADVANCED', label: 'I am advanced', icon: '/icon-level-advanced.svg' }, +- { id: 'EXPERT', label: 'I am an expert', icon: '/icon-level-expert.svg' }, +-]; +- +-export default function ChallengeLevelPage() { +- const router = useRouter(); +- const { data, updateData } = useOnboarding(); +- +- const handleSelect = (levelId: string) => { +- updateData('challengeLevel', levelId); +- }; +- +- const handleContinue = () => { +- if (data.challengeLevel) { +- router.push('/onboarding/challenge-types'); +- } +- }; +- +- return ( +-
+- {/* Top Navigation Bar */} +-
+- +- +- {/* Progress Bar - White track */} +-
+-
+-
+- +-
+-
+- +- {/* Header with Puzzle Icon INLINE with Title */} +-
+- MindBlock +-
+- Choose Challenge level that matches your skills +-
+-
+- +- {/* Selection Cards - Increased gap */} +-
+- {levels.map((level) => ( +- +- ))} +-
+- +-
+- +-
+- +- {/* Background Ambience */} +-
+-
+-
+-
+-
+- ); +-} ++"use client"; ++ ++import React from "react"; ++import { useRouter } from "next/navigation"; ++import Button from "@/components/Button"; ++import { useOnboarding } from "../OnboardingContext"; ++import Image from "next/image"; ++ ++const levels = [ ++ { ++ id: "BEGINNER", ++ label: "I am a total beginner", ++ icon: "/icon-level-beginner.svg", ++ }, ++ { ++ id: "INTERMEDIATE", ++ label: "I am intermediate", ++ icon: "/icon-level-intermediate.svg", ++ }, ++ { id: "ADVANCED", label: "I am advanced", icon: "/icon-level-advanced.svg" }, ++ { id: "EXPERT", label: "I am an expert", icon: "/icon-level-expert.svg" }, ++]; ++ ++export default function ChallengeLevelPage() { ++ const router = useRouter(); ++ const { data, updateData } = useOnboarding(); ++ ++ const handleSelect = (levelId: string) => { ++ updateData("challengeLevel", levelId); ++ }; ++ ++ const handleContinue = () => { ++ if (data.challengeLevel) { ++ router.push("/onboarding/challenge-types"); ++ } ++ }; ++ ++ return ( ++
++ {/* Top Navigation Bar */} ++
++ ++ ++ {/* Progress Bar - White track */} ++
++
++
++ ++
++
++ ++ {/* Header with Puzzle Icon INLINE with Title */} ++
++ MindBlock ++
++ ++ Choose Challenge level that matches your skills ++ ++
++
++ ++ {/* Selection Cards - Increased gap */} ++
++ {levels.map((level) => ( ++ ++ ))} ++
++ ++
++ ++
++ ++ {/* Background Ambience */} ++
++
++
++
++
++ ); ++} +diff --git a/frontend/app/onboarding/challenge-types/page.tsx b/frontend/app/onboarding/challenge-types/page.tsx +index 0b32133..e28a766 100644 +--- a/frontend/app/onboarding/challenge-types/page.tsx ++++ b/frontend/app/onboarding/challenge-types/page.tsx +@@ -1,121 +1,142 @@ +-'use client'; +- +-import React from 'react'; +-import { useRouter } from 'next/navigation'; +-import Button from '@/components/Button'; +-import Image from 'next/image'; +-import { useOnboarding } from '../OnboardingContext'; +- +-const types = [ +- { id: 'CODING', label: 'Coding Challenges', icon: '/icon-code.svg' }, +- { id: 'LOGIC', label: 'Logic Puzzle', icon: '/icon-puzzle.svg' }, +- { id: 'BLOCKCHAIN', label: 'Blockchain', icon: '/icon-blockchain.svg' }, +-]; +- +-export default function ChallengeTypesPage() { +- const router = useRouter(); +- const { data, updateData } = useOnboarding(); +- +- const handleToggle = (typeId: string) => { +- const current = data.challengeTypes; +- if (current.includes(typeId)) { +- updateData('challengeTypes', current.filter(id => id !== typeId)); +- } else { +- updateData('challengeTypes', [...current, typeId]); +- } +- }; +- +- const handleContinue = () => { +- if (data.challengeTypes.length > 0) { +- router.push('/onboarding/additional-info'); +- } +- }; +- +- return ( +-
+- {/* Top Navigation Bar */} +-
+- +- +- {/* Progress Bar - White track */} +-
+-
+-
+- +-
+-
+- +- {/* Header with Puzzle Icon INLINE with Title */} +-
+- MindBlock +-
+- Choose the Challenge types (select at least one) +-
+-
+- +- {/* Selection Cards - Increased gap */} +-
+- {types.map((type) => { +- const isSelected = data.challengeTypes.includes(type.id); +- return ( +- +- ); +- })} +-
+- +-
+- +-
+- +- {/* Background Ambience */} +-
+-
+-
+-
+-
+- ); +-} ++"use client"; ++ ++import React from "react"; ++import { useRouter } from "next/navigation"; ++import Button from "@/components/Button"; ++import Image from "next/image"; ++import { useOnboarding } from "../OnboardingContext"; ++ ++const types = [ ++ { id: "CODING", label: "Coding Challenges", icon: "/icon-code.svg" }, ++ { id: "LOGIC", label: "Logic Puzzle", icon: "/icon-puzzle.svg" }, ++ { id: "BLOCKCHAIN", label: "Blockchain", icon: "/icon-blockchain.svg" }, ++]; ++ ++export default function ChallengeTypesPage() { ++ const router = useRouter(); ++ const { data, updateData } = useOnboarding(); ++ ++ const handleToggle = (typeId: string) => { ++ const current = data.challengeTypes; ++ if (current.includes(typeId)) { ++ updateData( ++ "challengeTypes", ++ current.filter((id) => id !== typeId), ++ ); ++ } else { ++ updateData("challengeTypes", [...current, typeId]); ++ } ++ }; ++ ++ const handleContinue = () => { ++ if (data.challengeTypes.length > 0) { ++ router.push("/onboarding/additional-info"); ++ } ++ }; ++ ++ return ( ++
++ {/* Top Navigation Bar */} ++
++ ++ ++ {/* Progress Bar - White track */} ++
++
++
++ ++
++
++ ++ {/* Header with Puzzle Icon INLINE with Title */} ++
++ MindBlock ++
++ ++ Choose the Challenge types (select at least one) ++ ++
++
++ ++ {/* Selection Cards - Increased gap */} ++
++ {types.map((type) => { ++ const isSelected = data.challengeTypes.includes(type.id); ++ return ( ++ ++ ); ++ })} ++
++ ++
++ ++
++ ++ {/* Background Ambience */} ++
++
++
++
++
++ ); ++} +diff --git a/frontend/app/onboarding/layout.tsx b/frontend/app/onboarding/layout.tsx +index 2f2bca1..938c308 100644 +--- a/frontend/app/onboarding/layout.tsx ++++ b/frontend/app/onboarding/layout.tsx +@@ -1,15 +1,11 @@ +-'use client'; +- +-import { OnboardingProvider } from './OnboardingContext'; +- +-export default function OnboardingRootLayout({ +- children, +-}: { +- children: React.ReactNode; +-}) { +- return ( +- +- {children} +- +- ); +-} ++"use client"; ++ ++import { OnboardingProvider } from "./OnboardingContext"; ++ ++export default function OnboardingRootLayout({ ++ children, ++}: { ++ children: React.ReactNode; ++}) { ++ return {children}; ++} +diff --git a/frontend/app/onboarding/page.tsx b/frontend/app/onboarding/page.tsx +index 7e09f61..07b23d0 100644 +--- a/frontend/app/onboarding/page.tsx ++++ b/frontend/app/onboarding/page.tsx +@@ -1,18 +1,18 @@ +-'use client'; +- +-import { useEffect } from 'react'; +-import { useRouter } from 'next/navigation'; +- +-export default function OnboardingPage() { +- const router = useRouter(); +- +- useEffect(() => { +- router.replace('/onboarding/challenge-level'); +- }, [router]); +- +- return ( +-
+- {/* Optional loader while redirecting */} +-
+- ); +-} ++"use client"; ++ ++import { useEffect } from "react"; ++import { useRouter } from "next/navigation"; ++ ++export default function OnboardingPage() { ++ const router = useRouter(); ++ ++ useEffect(() => { ++ router.replace("/onboarding/challenge-level"); ++ }, [router]); ++ ++ return ( ++
++ {/* Optional loader while redirecting */} ++
++ ); ++} +diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx +index 74076e0..d0dd7b9 100644 +--- a/frontend/app/page.tsx ++++ b/frontend/app/page.tsx +@@ -1,9 +1,9 @@ +-"use client" ++"use client"; + import React from "react"; + import { useRouter } from "next/navigation"; + import Image from "next/image"; +-import { motion } from 'framer-motion'; +-import { fadeIn, slideUp } from '../lib/animations/variants'; ++import { motion } from "framer-motion"; ++import { fadeIn, slideUp } from "../lib/animations/variants"; + + const MindBlockLanding = () => { + const router = useRouter(); +diff --git a/frontend/app/profile/page.tsx b/frontend/app/profile/page.tsx +index 693de2e..a6bc093 100644 +--- a/frontend/app/profile/page.tsx ++++ b/frontend/app/profile/page.tsx +@@ -1,11 +1,9 @@ + "use client"; + //_________________________________________________________// + +- // This Page will be adjusted after the wave ++// This Page will be adjusted after the wave + //_________________________________________________________// + +- +- + import Button from "@/components/Button"; + import { ProfileHeader } from "@/components/profile/ProfileHeader"; + import { ProfileOverview } from "@/components/profile/ProfileOverview"; +@@ -70,7 +68,6 @@ export default function ProfilePage() { + + {/* Main Content */} +
+- + {/* Left Column - Profile Info & Overview */} +
+ {/* Profile Header Card */} +@@ -118,4 +115,3 @@ export default function ProfilePage() { +
+ ); + } +- +diff --git a/frontend/app/puzzle-list/page.tsx b/frontend/app/puzzle-list/page.tsx +index c130fb9..f086380 100644 +--- a/frontend/app/puzzle-list/page.tsx ++++ b/frontend/app/puzzle-list/page.tsx +@@ -1,41 +1,49 @@ +-'use client'; ++"use client"; + +-import React, { useCallback, useEffect, useState, useMemo } from 'react'; +-import { useRouter, useSearchParams } from 'next/navigation'; +-import FilterBar from '@/components/puzzles/FilterBar'; +-import { usePuzzles } from '@/hooks/usePuzzles'; +-import type { PuzzleDifficulty, PuzzleFilters } from '@/lib/types/puzzles'; +-import { Puzzle as PuzzleIcon, Clock, Zap } from 'lucide-react'; +-import Pagination from '@/components/ui/Pagination'; ++import React, { useCallback, useEffect, useState, useMemo } from "react"; ++import { useRouter, useSearchParams } from "next/navigation"; ++import FilterBar from "@/components/puzzles/FilterBar"; ++import { usePuzzles } from "@/hooks/usePuzzles"; ++import type { PuzzleDifficulty, PuzzleFilters } from "@/lib/types/puzzles"; ++import { Puzzle as PuzzleIcon, Clock, Zap } from "lucide-react"; ++import Pagination from "@/components/ui/Pagination"; + + // ─── Helpers ──────────────────────────────────────────────────────────────── + + const DIFFICULTY_COLORS: Record = { +- BEGINNER: 'text-green-400 bg-green-400/10 border-green-400/20', +- INTERMEDIATE: 'text-yellow-400 bg-yellow-400/10 border-yellow-400/20', +- ADVANCED: 'text-orange-400 bg-orange-400/10 border-orange-400/20', +- EXPERT: 'text-red-400 bg-red-400/10 border-red-400/20', ++ BEGINNER: "text-green-400 bg-green-400/10 border-green-400/20", ++ INTERMEDIATE: "text-yellow-400 bg-yellow-400/10 border-yellow-400/20", ++ ADVANCED: "text-orange-400 bg-orange-400/10 border-orange-400/20", ++ EXPERT: "text-red-400 bg-red-400/10 border-red-400/20", + }; + + const VALID_DIFFICULTIES: PuzzleDifficulty[] = [ +- 'ALL', 'BEGINNER', 'INTERMEDIATE', 'ADVANCED', 'EXPERT', ++ "ALL", ++ "BEGINNER", ++ "INTERMEDIATE", ++ "ADVANCED", ++ "EXPERT", + ]; + + const ITEMS_PER_PAGE_OPTIONS = [10, 20, 50]; + + function parseFiltersFromParams(params: URLSearchParams): PuzzleFilters { +- const category = params.get('category') ?? ''; +- const rawDiff = (params.get('difficulty') ?? '').toUpperCase() as PuzzleDifficulty; +- const difficulty = VALID_DIFFICULTIES.includes(rawDiff) ? rawDiff : 'ALL'; ++ const category = params.get("category") ?? ""; ++ const rawDiff = ( ++ params.get("difficulty") ?? "" ++ ).toUpperCase() as PuzzleDifficulty; ++ const difficulty = VALID_DIFFICULTIES.includes(rawDiff) ? rawDiff : "ALL"; + return { categoryId: category, difficulty }; + } + + function parsePaginationFromParams(params: URLSearchParams) { +- const page = parseInt(params.get('page') ?? '1', 10); +- const itemsPerPage = parseInt(params.get('itemsPerPage') ?? '10', 10); ++ const page = parseInt(params.get("page") ?? "1", 10); ++ const itemsPerPage = parseInt(params.get("itemsPerPage") ?? "10", 10); + return { + currentPage: Math.max(1, page), +- itemsPerPage: ITEMS_PER_PAGE_OPTIONS.includes(itemsPerPage) ? itemsPerPage : 10, ++ itemsPerPage: ITEMS_PER_PAGE_OPTIONS.includes(itemsPerPage) ++ ? itemsPerPage ++ : 10, + }; + } + +@@ -57,7 +65,9 @@ const PuzzleCard: React.FC = ({ + type, + timeLimit, + }) => { +- const diffClass = DIFFICULTY_COLORS[difficulty] ?? 'text-slate-400 bg-slate-400/10 border-slate-400/20'; ++ const diffClass = ++ DIFFICULTY_COLORS[difficulty] ?? ++ "text-slate-400 bg-slate-400/10 border-slate-400/20"; + + return ( +
+@@ -93,15 +103,15 @@ const PuzzleCard: React.FC = ({ + // ─── Main Content Component (Uses useSearchParams) ────────────────────────────── + + function PuzzleListContent() { +- const router = useRouter(); ++ const router = useRouter(); + const searchParams = useSearchParams(); + + const [filters, setFilters] = useState(() => +- parseFiltersFromParams(searchParams) ++ parseFiltersFromParams(searchParams), + ); + + const [pagination, setPagination] = useState(() => +- parsePaginationFromParams(searchParams) ++ parsePaginationFromParams(searchParams), + ); + + // Keep local state in sync if the browser URL changes externally (back/forward) +@@ -112,15 +122,24 @@ function PuzzleListContent() { + + // Sync filters & pagination → URL + const updateURL = useCallback( +- (nextFilters: PuzzleFilters, nextPagination: { currentPage: number; itemsPerPage: number }) => { ++ ( ++ nextFilters: PuzzleFilters, ++ nextPagination: { currentPage: number; itemsPerPage: number }, ++ ) => { + const params = new URLSearchParams(); +- if (nextFilters.categoryId) params.set('category', nextFilters.categoryId); +- if (nextFilters.difficulty !== 'ALL') params.set('difficulty', nextFilters.difficulty); +- if (nextPagination.currentPage > 1) params.set('page', nextPagination.currentPage.toString()); +- if (nextPagination.itemsPerPage !== 10) params.set('itemsPerPage', nextPagination.itemsPerPage.toString()); ++ if (nextFilters.categoryId) ++ params.set("category", nextFilters.categoryId); ++ if (nextFilters.difficulty !== "ALL") ++ params.set("difficulty", nextFilters.difficulty); ++ if (nextPagination.currentPage > 1) ++ params.set("page", nextPagination.currentPage.toString()); ++ if (nextPagination.itemsPerPage !== 10) ++ params.set("itemsPerPage", nextPagination.itemsPerPage.toString()); + + const query = params.toString(); +- router.push(query ? `/puzzle-list?${query}` : '/puzzle-list', { scroll: false }); ++ router.push(query ? `/puzzle-list?${query}` : "/puzzle-list", { ++ scroll: false, ++ }); + }, + [router], + ); +@@ -143,9 +162,9 @@ function PuzzleListContent() { + const newPagination = { ...pagination, currentPage: page }; + setPagination(newPagination); + updateURL(filters, newPagination); +- ++ + // Scroll to top smoothly +- window.scrollTo({ top: 0, behavior: 'smooth' }); ++ window.scrollTo({ top: 0, behavior: "smooth" }); + }, + [filters, pagination, updateURL], + ); +@@ -162,8 +181,8 @@ function PuzzleListContent() { + + // Build query params for usePuzzles — omit 'ALL' (no filter) + const puzzleQuery = { +- ...(filters.categoryId && { categoryId: filters.categoryId }), +- ...(filters.difficulty !== 'ALL' && { difficulty: filters.difficulty }), ++ ...(filters.categoryId && { categoryId: filters.categoryId }), ++ ...(filters.difficulty !== "ALL" && { difficulty: filters.difficulty }), + }; + + const { data: puzzles, isLoading, isError, error } = usePuzzles(puzzleQuery); +@@ -171,7 +190,7 @@ function PuzzleListContent() { + // Calculate pagination + const paginatedData = useMemo(() => { + if (!puzzles) return []; +- ++ + const startIndex = (pagination.currentPage - 1) * pagination.itemsPerPage; + const endIndex = startIndex + pagination.itemsPerPage; + return puzzles.slice(startIndex, endIndex); +@@ -200,11 +219,16 @@ function PuzzleListContent() { + {!isLoading && !isError && puzzles && ( +
+

+- {puzzles.length} puzzle{puzzles.length !== 1 ? 's' : ''} found ++ {puzzles.length} puzzle{puzzles.length !== 1 ? "s" : ""} found + {totalPages > 1 && ( + +- Showing {((pagination.currentPage - 1) * pagination.itemsPerPage) + 1}- +- {Math.min(pagination.currentPage * pagination.itemsPerPage, puzzles.length)} of {puzzles.length} ++ Showing{" "} ++ {(pagination.currentPage - 1) * pagination.itemsPerPage + 1}- ++ {Math.min( ++ pagination.currentPage * pagination.itemsPerPage, ++ puzzles.length, ++ )}{" "} ++ of {puzzles.length} + + )} +

+@@ -213,10 +237,12 @@ function PuzzleListContent() { + Items per page: + +- ++ + +- ++ + +- ++ + +
+- ++ + +diff --git a/frontend/components/StaggeredList.tsx b/frontend/components/StaggeredList.tsx +index e6b4364..4ef1bad 100644 +--- a/frontend/components/StaggeredList.tsx ++++ b/frontend/components/StaggeredList.tsx +@@ -1,13 +1,9 @@ +-import { motion } from 'framer-motion'; +-import { staggerContainer, slideUp } from '../lib/animations/variants'; ++import { motion } from "framer-motion"; ++import { staggerContainer, slideUp } from "../lib/animations/variants"; + + const StaggeredList = ({ items }: { items: string[] }) => { + return ( +- ++ + {items.map((item, index) => ( + + {item} +@@ -17,4 +13,4 @@ const StaggeredList = ({ items }: { items: string[] }) => { + ); + }; + +-export default StaggeredList; +\ No newline at end of file ++export default StaggeredList; +diff --git a/frontend/components/StreakDayIndicator.tsx b/frontend/components/StreakDayIndicator.tsx +index 7267e51..93fdd58 100644 +--- a/frontend/components/StreakDayIndicator.tsx ++++ b/frontend/components/StreakDayIndicator.tsx +@@ -2,44 +2,53 @@ import React from "react"; + import Image from "next/image"; + + export interface StreakDayIndicatorProps { +- status: 'empty' | 'completed' | 'streak'; +- isToday?: boolean; +- inStreakRun?: boolean; ++ status: "empty" | "completed" | "streak"; ++ isToday?: boolean; ++ inStreakRun?: boolean; + } + + export const StreakDayIndicator: React.FC = ({ +- status, +- isToday = false, +- inStreakRun = false, ++ status, ++ isToday = false, ++ inStreakRun = false, + }) => { +- // Base classes for the perfect circle shape to ensure no layout shift +- const baseClasses = "flex items-center justify-center w-[24px] h-[24px] md:w-[28px] md:h-[28px] rounded-full z-10 shrink-0"; +- +- // Status-specific classes +- let statusClasses = ""; +- if (status === "empty") { +- statusClasses = "bg-[#E6E6E6]"; +- } else if (status === "completed") { +- statusClasses = "bg-[#FACC15]"; +- } else if (status === "streak") { +- statusClasses = "bg-[#FACC15] shadow-lg shadow-[#FACC15]/50"; +- } ++ // Base classes for the perfect circle shape to ensure no layout shift ++ const baseClasses = ++ "flex items-center justify-center w-[24px] h-[24px] md:w-[28px] md:h-[28px] rounded-full z-10 shrink-0"; + +- // isToday styling (adding ring to distinguish) +- const todayClasses = isToday ? "ring-2 ring-white ring-offset-2 ring-offset-[#050C16]" : ""; ++ // Status-specific classes ++ let statusClasses = ""; ++ if (status === "empty") { ++ statusClasses = "bg-[#E6E6E6]"; ++ } else if (status === "completed") { ++ statusClasses = "bg-[#FACC15]"; ++ } else if (status === "streak") { ++ statusClasses = "bg-[#FACC15] shadow-lg shadow-[#FACC15]/50"; ++ } + +- return ( +-
+- {/* Optional highlighted background for streak run */} +- {inStreakRun && status === "streak" && ( +-
+- )} +- +-
+- {status === "streak" && ( +- streak fire +- )} +-
+-
+- ); ++ // isToday styling (adding ring to distinguish) ++ const todayClasses = isToday ++ ? "ring-2 ring-white ring-offset-2 ring-offset-[#050C16]" ++ : ""; ++ ++ return ( ++
++ {/* Optional highlighted background for streak run */} ++ {inStreakRun && status === "streak" && ( ++
++ )} ++ ++
++ {status === "streak" && ( ++ streak fire ++ )} ++
++
++ ); + }; +diff --git a/frontend/components/StreakFooter.tsx b/frontend/components/StreakFooter.tsx +index a2365b4..8d4c344 100644 +--- a/frontend/components/StreakFooter.tsx ++++ b/frontend/components/StreakFooter.tsx +@@ -1,16 +1,16 @@ + import React from "react"; + + interface StreakFooterProps { +- onContinue: () => void; ++ onContinue: () => void; + } + + export const StreakFooter: React.FC = ({ onContinue }) => { +- return ( +- +- ); ++ return ( ++ ++ ); + }; +diff --git a/frontend/components/StreakHeader.tsx b/frontend/components/StreakHeader.tsx +index 637299f..9961fef 100644 +--- a/frontend/components/StreakHeader.tsx ++++ b/frontend/components/StreakHeader.tsx +@@ -2,24 +2,24 @@ import React from "react"; + import Image from "next/image"; + + interface StreakHeaderProps { +- streakCount: number; ++ streakCount: number; + } + + export const StreakHeader: React.FC = ({ streakCount }) => { +- return ( +-
+-
+- Flame +-
+-

+- {streakCount} Day Streak +-

+-
+- ); ++ return ( ++
++
++ Flame ++
++

++ {streakCount} Day Streak ++

++
++ ); + }; +diff --git a/frontend/components/StreakNavbar.tsx b/frontend/components/StreakNavbar.tsx +index ab56cb8..bea5c1d 100644 +--- a/frontend/components/StreakNavbar.tsx ++++ b/frontend/components/StreakNavbar.tsx +@@ -1,51 +1,48 @@ +-'use client'; ++"use client"; + +-import Image from 'next/image'; +-import Link from 'next/link'; ++import Image from "next/image"; ++import Link from "next/link"; + + interface StreakNavbarProps { +- streakCount: number; +- points: number; ++ streakCount: number; ++ points: number; + } + +-export default function StreakNavbar({ streakCount, points }: StreakNavbarProps) { +- return ( +-
++ ++ ); + } +diff --git a/frontend/components/StreakScreen.tsx b/frontend/components/StreakScreen.tsx +index b4f37a1..ae837fc 100644 +--- a/frontend/components/StreakScreen.tsx ++++ b/frontend/components/StreakScreen.tsx +@@ -5,24 +5,23 @@ import { WeeklyCalendar, DayData } from "./WeeklyCalendar"; + import { StreakFooter } from "./StreakFooter"; + + interface StreakScreenProps { +- streakCount: number; +- weekData: DayData[]; +- onContinue: () => void; ++ streakCount: number; ++ weekData: DayData[]; ++ onContinue: () => void; + } + + export const StreakScreen: React.FC = ({ +- streakCount, +- weekData, +- onContinue, ++ streakCount, ++ weekData, ++ onContinue, + }) => { +- return ( +-
+-
+- +- +- +-
+-
+- ); ++ return ( ++
++
++ ++ ++ ++
++
++ ); + }; +- +diff --git a/frontend/components/StreakSummaryCard.tsx b/frontend/components/StreakSummaryCard.tsx +index 9cb1a25..91e2083 100644 +--- a/frontend/components/StreakSummaryCard.tsx ++++ b/frontend/components/StreakSummaryCard.tsx +@@ -3,62 +3,62 @@ import Image from "next/image"; + import clsx from "clsx"; + + interface StreakSummaryCardProps { +- streakCount: number; +- isActive?: boolean; +- className?: string; ++ streakCount: number; ++ isActive?: boolean; ++ className?: string; + } + + export const StreakSummaryCard: React.FC = ({ +- streakCount, +- isActive = true, +- className, ++ streakCount, ++ isActive = true, ++ className, + }) => { +- return ( +-
+- {/* Flame Icon */} +-
+- Streak flame +-
++ return ( ++
++ {/* Flame Icon */} ++
++ Streak flame ++
+ +- {/* Streak Badge */} +-
+- +- {streakCount} +- +-
++ {/* Streak Badge */} ++
++ ++ {streakCount} ++ ++
+ +- {/* Streak Label */} +-

+- day streak! +-

+-
+- ); ++ {/* Streak Label */} ++

++ day streak! ++

++
++ ); + }; +diff --git a/frontend/components/WeeklyCalendar.tsx b/frontend/components/WeeklyCalendar.tsx +index d614feb..9f53bc0 100644 +--- a/frontend/components/WeeklyCalendar.tsx ++++ b/frontend/components/WeeklyCalendar.tsx +@@ -2,29 +2,34 @@ import React from "react"; + import { StreakDayIndicator } from "./StreakDayIndicator"; + + export interface DayData { +- day: string; +- completed: boolean; ++ day: string; ++ completed: boolean; + } + + interface WeeklyCalendarProps { +- days: DayData[]; ++ days: DayData[]; + } + + export const WeeklyCalendar: React.FC = ({ days }) => { +- return ( +-
+-
+- {days.map((dayData, index) => ( +-
+- +- {dayData.day} +- +- +-
+- ))} +-
+-
+- ); ++ return ( ++
++
++ {days.map((dayData, index) => ( ++
++ ++ {dayData.day} ++ ++ ++
++ ))} ++
++
++ ); + }; +diff --git a/frontend/components/analytics/DauMauChart.tsx b/frontend/components/analytics/DauMauChart.tsx +index bce5f0e..7ddd2a9 100644 +--- a/frontend/components/analytics/DauMauChart.tsx ++++ b/frontend/components/analytics/DauMauChart.tsx +@@ -148,7 +148,11 @@ export default function DauMauChart() { + > + + +- ++ + +
+ ); +-} +\ No newline at end of file ++} +diff --git a/frontend/components/coding/CodeEditor.tsx b/frontend/components/coding/CodeEditor.tsx +index 8c8e4b5..ddf6af7 100644 +--- a/frontend/components/coding/CodeEditor.tsx ++++ b/frontend/components/coding/CodeEditor.tsx +@@ -1,6 +1,6 @@ +-import Editor from '@monaco-editor/react'; +-import { Language } from '@/lib/types/editor'; +-import { MONACO_LANGUAGE_MAP } from '@/lib/constants/codeTemplates'; ++import Editor from "@monaco-editor/react"; ++import { Language } from "@/lib/types/editor"; ++import { MONACO_LANGUAGE_MAP } from "@/lib/constants/codeTemplates"; + + interface CodeEditorProps { + code: string; +@@ -26,21 +26,21 @@ export default function CodeEditor({ + options={{ + minimap: { enabled: false }, + fontSize: 14, +- lineNumbers: 'on', ++ lineNumbers: "on", + scrollBeyondLastLine: false, + automaticLayout: true, + tabSize: 2, +- wordWrap: 'on', ++ wordWrap: "on", + readOnly, + quickSuggestions: true, + suggestOnTriggerCharacters: true, +- acceptSuggestionOnEnter: 'on', ++ acceptSuggestionOnEnter: "on", + padding: { top: 16, bottom: 16 }, + lineDecorationsWidth: 0, + lineNumbersMinChars: 3, + glyphMargin: false, + folding: true, +- renderLineHighlight: 'all', ++ renderLineHighlight: "all", + scrollbar: { + verticalScrollbarSize: 10, + horizontalScrollbarSize: 10, +diff --git a/frontend/components/coding/CodeEditorPanel.tsx b/frontend/components/coding/CodeEditorPanel.tsx +index 1a20395..2a2b62d 100644 +--- a/frontend/components/coding/CodeEditorPanel.tsx ++++ b/frontend/components/coding/CodeEditorPanel.tsx +@@ -1,11 +1,11 @@ +-'use client'; ++"use client"; + +-import { useState, useEffect } from 'react'; +-import { Code, Maximize2, ChevronUp } from 'lucide-react'; +-import { Language } from '@/lib/types/editor'; +-import { CODE_TEMPLATES } from '@/lib/constants/codeTemplates'; +-import LanguageSelector from './LanguageSelector'; +-import CodeEditor from './CodeEditor'; ++import { useState, useEffect } from "react"; ++import { Code, Maximize2, ChevronUp } from "lucide-react"; ++import { Language } from "@/lib/types/editor"; ++import { CODE_TEMPLATES } from "@/lib/constants/codeTemplates"; ++import LanguageSelector from "./LanguageSelector"; ++import CodeEditor from "./CodeEditor"; + + interface CodeEditorPanelProps { + initialCode?: string; +@@ -17,14 +17,14 @@ interface CodeEditorPanelProps { + + export default function CodeEditorPanel({ + initialCode, +- language: initialLanguage = 'javascript', ++ language: initialLanguage = "javascript", + onCodeChange, + onLanguageChange, + readOnly = false, + }: CodeEditorPanelProps) { + const [language, setLanguage] = useState(initialLanguage); + const [code, setCode] = useState( +- initialCode || CODE_TEMPLATES[initialLanguage] ++ initialCode || CODE_TEMPLATES[initialLanguage], + ); + const [autoComplete, setAutoComplete] = useState(true); + const [isSaved, setIsSaved] = useState(true); +@@ -49,7 +49,7 @@ export default function CodeEditorPanel({ + }; + + const handleCodeChange = (value: string | undefined) => { +- const newCode = value || ''; ++ const newCode = value || ""; + setCode(newCode); + setIsSaved(false); + onCodeChange?.(newCode); +@@ -67,8 +67,14 @@ export default function CodeEditorPanel({ +

Code

+
+
+- +- ++ ++ +
+
+ +@@ -83,12 +89,12 @@ export default function CodeEditorPanel({ + +@@ -122,7 +128,7 @@ export default function CodeEditorPanel({ + +
+ +- {isSaved ? 'Saved' : 'Saving...'} ++ {isSaved ? "Saved" : "Saving..."} + +
+
+diff --git a/frontend/components/coding/LanguageSelector.tsx b/frontend/components/coding/LanguageSelector.tsx +index 2aaee40..cf0f0e1 100644 +--- a/frontend/components/coding/LanguageSelector.tsx ++++ b/frontend/components/coding/LanguageSelector.tsx +@@ -1,13 +1,13 @@ +-import { ChevronDown } from 'lucide-react'; +-import { Language } from '@/lib/types/editor'; +-import { LANGUAGE_LABELS } from '@/lib/constants/codeTemplates'; ++import { ChevronDown } from "lucide-react"; ++import { Language } from "@/lib/types/editor"; ++import { LANGUAGE_LABELS } from "@/lib/constants/codeTemplates"; + + interface LanguageSelectorProps { + selectedLanguage: Language; + onLanguageChange: (language: Language) => void; + } + +-const languages: Language[] = ['javascript', 'python', 'cpp', 'csharp']; ++const languages: Language[] = ["javascript", "python", "cpp", "csharp"]; + + export default function LanguageSelector({ + selectedLanguage, +diff --git a/frontend/components/coding/OutputDisplay.tsx b/frontend/components/coding/OutputDisplay.tsx +index f025151..db114c9 100644 +--- a/frontend/components/coding/OutputDisplay.tsx ++++ b/frontend/components/coding/OutputDisplay.tsx +@@ -1,37 +1,39 @@ +-import React from 'react'; ++import React from "react"; + + interface OutputDisplayProps { + output: string; +- status?: 'pending' | 'correct' | 'wrong'; ++ status?: "pending" | "correct" | "wrong"; + errorMessage?: string; + } + +-const OutputDisplay: React.FC = ({ +- output, ++const OutputDisplay: React.FC = ({ ++ output, + status, +- errorMessage ++ errorMessage, + }) => { +- const isError = status === 'wrong'; +- const isPending = status === 'pending'; +- ++ const isError = status === "wrong"; ++ const isPending = status === "pending"; ++ + let displayText = output; +- let textColor = 'text-gray-300'; +- ++ let textColor = "text-gray-300"; ++ + if (isError && errorMessage) { + displayText = errorMessage; +- textColor = 'text-red-400'; ++ textColor = "text-red-400"; + } else if (isPending) { +- displayText = 'Waiting for your solution...'; +- textColor = 'text-gray-500'; ++ displayText = "Waiting for your solution..."; ++ textColor = "text-gray-500"; + } +- ++ + return ( +
+-
++      
+         {displayText}
+       
+
+ ); + }; + +-export default OutputDisplay; +\ No newline at end of file ++export default OutputDisplay; +diff --git a/frontend/components/coding/TestCaseHeader.tsx b/frontend/components/coding/TestCaseHeader.tsx +index b83d50c..b90d629 100644 +--- a/frontend/components/coding/TestCaseHeader.tsx ++++ b/frontend/components/coding/TestCaseHeader.tsx +@@ -1,23 +1,23 @@ +-import React from 'react'; +-import { ChevronDown, ChevronUp } from 'lucide-react'; ++import React from "react"; ++import { ChevronDown, ChevronUp } from "lucide-react"; + + interface TestCaseHeaderProps { + expanded: boolean; + toggleExpanded: () => void; + } + +-const TestCaseHeader: React.FC = ({ +- expanded, +- toggleExpanded ++const TestCaseHeader: React.FC = ({ ++ expanded, ++ toggleExpanded, + }) => { + return ( +-
{ +- if (e.key === 'Enter' || e.key === ' ') { ++ if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + toggleExpanded(); + } +@@ -26,18 +26,16 @@ const TestCaseHeader: React.FC = ({ +

+ Testcase +

+- +
+ ); + }; + +-export default TestCaseHeader; +\ No newline at end of file ++export default TestCaseHeader; +diff --git a/frontend/components/coding/TestCasePanel.tsx b/frontend/components/coding/TestCasePanel.tsx +index 9ec0ed2..1a84600 100644 +--- a/frontend/components/coding/TestCasePanel.tsx ++++ b/frontend/components/coding/TestCasePanel.tsx +@@ -1,15 +1,15 @@ +-import React, { useState } from 'react'; +-import TestCaseHeader from './TestCaseHeader'; +-import TestCaseTabs from './TestCaseTabs'; +-import OutputDisplay from './OutputDisplay'; +-import ValidationStatus from './ValidationStatus'; ++import React, { useState } from "react"; ++import TestCaseHeader from "./TestCaseHeader"; ++import TestCaseTabs from "./TestCaseTabs"; ++import OutputDisplay from "./OutputDisplay"; ++import ValidationStatus from "./ValidationStatus"; + + interface TestCase { + id: string; + input: string; + expectedOutput: string; + actualOutput?: string; +- status?: 'pending' | 'correct' | 'wrong'; ++ status?: "pending" | "correct" | "wrong"; + errorMessage?: string; + } + +@@ -19,13 +19,13 @@ interface TestCasePanelProps { + onTabChange?: (caseIndex: number) => void; + } + +-const TestCasePanel: React.FC = ({ +- testCases = [], +- activeCase = 0, +- onTabChange ++const TestCasePanel: React.FC = ({ ++ testCases = [], ++ activeCase = 0, ++ onTabChange, + }) => { + const [expanded, setExpanded] = useState(true); +- ++ + const activeTestCase = testCases[activeCase] || testCases[0]; + + const handleTabChange = (index: number) => { +@@ -37,9 +37,9 @@ const TestCasePanel: React.FC = ({ + if (!expanded) { + return ( +
+- setExpanded(!expanded)} ++ setExpanded(!expanded)} + /> +
+ ); +@@ -47,28 +47,32 @@ const TestCasePanel: React.FC = ({ + + return ( +
+- setExpanded(!expanded)} ++ setExpanded(!expanded)} + /> +- ++ +
+- +- ++ +
+- +- ++ + {activeTestCase && ( +
+- +@@ -80,4 +84,4 @@ const TestCasePanel: React.FC = ({ + ); + }; + +-export default TestCasePanel; +\ No newline at end of file ++export default TestCasePanel; +diff --git a/frontend/components/coding/TestCaseTabs.tsx b/frontend/components/coding/TestCaseTabs.tsx +index 90e9e22..4710592 100644 +--- a/frontend/components/coding/TestCaseTabs.tsx ++++ b/frontend/components/coding/TestCaseTabs.tsx +@@ -1,12 +1,12 @@ +-import React from 'react'; +-import { Plus } from 'lucide-react'; ++import React from "react"; ++import { Plus } from "lucide-react"; + + interface TestCase { + id: string; + input: string; + expectedOutput: string; + actualOutput?: string; +- status?: 'pending' | 'correct' | 'wrong'; ++ status?: "pending" | "correct" | "wrong"; + errorMessage?: string; + } + +@@ -16,16 +16,16 @@ interface TestCaseTabsProps { + onTabChange: (index: number) => void; + } + +-const TestCaseTabs: React.FC = ({ +- testCases, +- activeCase, +- onTabChange ++const TestCaseTabs: React.FC = ({ ++ testCases, ++ activeCase, ++ onTabChange, + }) => { + const handleKeyDown = (e: React.KeyboardEvent, index: number) => { +- if (e.key === 'ArrowRight') { ++ if (e.key === "ArrowRight") { + const nextIndex = (index + 1) % testCases.length; + onTabChange(nextIndex); +- } else if (e.key === 'ArrowLeft') { ++ } else if (e.key === "ArrowLeft") { + const prevIndex = (index - 1 + testCases.length) % testCases.length; + onTabChange(prevIndex); + } +@@ -38,8 +38,8 @@ const TestCaseTabs: React.FC = ({ + key={testCase.id} + className={`px-3 py-2 text-sm font-medium rounded-t-md transition-colors border-b-2 ${ + activeCase === index +- ? 'bg-teal-600/20 border-teal-500 text-teal-400' +- : 'bg-gray-800/50 border-transparent text-gray-400 hover:text-gray-200' ++ ? "bg-teal-600/20 border-teal-500 text-teal-400" ++ : "bg-gray-800/50 border-transparent text-gray-400 hover:text-gray-200" + }`} + onClick={() => onTabChange(index)} + onKeyDown={(e) => handleKeyDown(e, index)} +@@ -60,4 +60,4 @@ const TestCaseTabs: React.FC = ({ + ); + }; + +-export default TestCaseTabs; +\ No newline at end of file ++export default TestCaseTabs; +diff --git a/frontend/components/coding/ValidationStatus.tsx b/frontend/components/coding/ValidationStatus.tsx +index a6c9dd2..a8cacdd 100644 +--- a/frontend/components/coding/ValidationStatus.tsx ++++ b/frontend/components/coding/ValidationStatus.tsx +@@ -1,20 +1,20 @@ +-import React from 'react'; +-import { Check, X } from 'lucide-react'; ++import React from "react"; ++import { Check, X } from "lucide-react"; + + interface ValidationStatusProps { +- status?: 'pending' | 'correct' | 'wrong'; ++ status?: "pending" | "correct" | "wrong"; + errorMessage?: string; + } + +-const ValidationStatus: React.FC = ({ +- status, +- errorMessage ++const ValidationStatus: React.FC = ({ ++ status, ++ errorMessage, + }) => { +- if (status === 'pending') { ++ if (status === "pending") { + return null; // Don't show anything for pending state + } + +- if (status === 'correct') { ++ if (status === "correct") { + return ( +
+
+@@ -25,7 +25,7 @@ const ValidationStatus: React.FC = ({ + ); + } + +- if (status === 'wrong') { ++ if (status === "wrong") { + return ( +
+
+@@ -44,4 +44,4 @@ const ValidationStatus: React.FC = ({ + return null; // Default case - no status + }; + +-export default ValidationStatus; +\ No newline at end of file ++export default ValidationStatus; +diff --git a/frontend/components/dashboard/DashboardHeader.tsx b/frontend/components/dashboard/DashboardHeader.tsx +index 542d3a1..3bca119 100644 +--- a/frontend/components/dashboard/DashboardHeader.tsx ++++ b/frontend/components/dashboard/DashboardHeader.tsx +@@ -5,7 +5,10 @@ interface DashboardHeaderProps { + pointsLabel: string; + } + +-const DashboardHeader = ({ streakLabel, pointsLabel }: DashboardHeaderProps) => { ++const DashboardHeader = ({ ++ streakLabel, ++ pointsLabel, ++}: DashboardHeaderProps) => { + return ( +
+
+diff --git a/frontend/components/error/ErrorBoundary.tsx b/frontend/components/error/ErrorBoundary.tsx +index 8aad7fb..7f92f7a 100644 +--- a/frontend/components/error/ErrorBoundary.tsx ++++ b/frontend/components/error/ErrorBoundary.tsx +@@ -1,6 +1,6 @@ +-'use client'; ++"use client"; + +-import React, { Component, ErrorInfo, ReactNode } from 'react'; ++import React, { Component, ErrorInfo, ReactNode } from "react"; + + interface Props { + children: ReactNode; +@@ -25,25 +25,25 @@ class ErrorBoundary extends Component { + } + + componentDidCatch(error: Error, errorInfo: ErrorInfo) { +- console.error('ErrorBoundary caught an error:', error, errorInfo); +- ++ console.error("ErrorBoundary caught an error:", error, errorInfo); ++ + // Log error to an error reporting service + this.logErrorToService(error, errorInfo); +- ++ + // Call the optional onError prop + if (this.props.onError) { + this.props.onError(error, errorInfo); + } +- ++ + this.setState({ errorInfo }); + } +- ++ + logErrorToService = (error: Error, errorInfo: ErrorInfo) => { + // In the future, this could send to an error tracking service like Sentry + // For now, we'll just log to console +- console.group('Error Report'); +- console.error('Error:', error); +- console.error('Error Info:', errorInfo); ++ console.group("Error Report"); ++ console.error("Error:", error); ++ console.error("Error Info:", errorInfo); + console.groupEnd(); + }; + +@@ -52,57 +52,72 @@ class ErrorBoundary extends Component { + }; + + handleGoHome = () => { +- window.location.href = '/'; ++ window.location.href = "/"; + }; + + render() { + if (this.state.hasError) { +- return this.props.fallback || ( +-
+-
+-
+-
+- +- +- ++ return ( ++ this.props.fallback || ( ++
++
++
++
++ ++ ++ ++
++

++ Something went wrong ++

++

++ We're sorry, but something unexpected happened. ++

+
+-

Something went wrong

+-

+- We're sorry, but something unexpected happened. +-

+-
+- +-
+- +- ++ ++
++ ++ ++
++ ++ {/* Show error details in development */} ++ {process.env.NODE_ENV === "development" && this.state.error && ( ++
++ Error Details ++

{this.state.error.toString()}

++ {this.state.errorInfo && ( ++
++
++                        {this.state.errorInfo.componentStack}
++                      
++
++ )} ++
++ )} +
+- +- {/* Show error details in development */} +- {process.env.NODE_ENV === 'development' && this.state.error && ( +-
+- Error Details +-

{this.state.error.toString()}

+- {this.state.errorInfo && ( +-
+-
+-                      {this.state.errorInfo.componentStack}
+-                    
+-
+- )} +-
+- )} +
+-
++ ) + ); + } + +@@ -111,4 +126,3 @@ class ErrorBoundary extends Component { + } + + export default ErrorBoundary; +- +diff --git a/frontend/components/error/GenericErrorPage.tsx b/frontend/components/error/GenericErrorPage.tsx +index db74e79..bb28a5a 100644 +--- a/frontend/components/error/GenericErrorPage.tsx ++++ b/frontend/components/error/GenericErrorPage.tsx +@@ -1,12 +1,12 @@ +-'use client'; ++"use client"; + +-import { useRouter } from 'next/navigation'; +-import { useState } from 'react'; ++import { useRouter } from "next/navigation"; ++import { useState } from "react"; + +-const GenericErrorPage = ({ +- title = "Something went wrong", ++const GenericErrorPage = ({ ++ title = "Something went wrong", + message = "We're sorry, but an unexpected error occurred. Please try again.", +- showRefresh = true ++ showRefresh = true, + }) => { + const router = useRouter(); + const [isRefreshing, setIsRefreshing] = useState(false); +@@ -19,7 +19,7 @@ const GenericErrorPage = ({ + }; + + const handleGoHome = () => { +- router.push('/'); ++ router.push("/"); + }; + + return ( +@@ -27,14 +27,23 @@ const GenericErrorPage = ({ +
+
+
+- +- ++ ++ + +
+

{title}

+-

+- {message} +-

++

{message}

+

+ Our team has been notified of the issue. +

+@@ -46,15 +55,15 @@ const GenericErrorPage = ({ + onClick={handleRetry} + disabled={isRefreshing} + className={`w-full px-6 py-3 rounded-lg transition-colors ${ +- isRefreshing +- ? 'bg-gray-600 cursor-not-allowed' +- : 'bg-blue-600 hover:bg-blue-700' ++ isRefreshing ++ ? "bg-gray-600 cursor-not-allowed" ++ : "bg-blue-600 hover:bg-blue-700" + } text-white`} + > +- {isRefreshing ? 'Refreshing...' : 'Try Again'} ++ {isRefreshing ? "Refreshing..." : "Try Again"} + + )} +- ++ + + +- ++ +
+- {username} ++ ++ {username} ++ +
+ + +diff --git a/frontend/components/onboarding/OnboardingLayout.tsx b/frontend/components/onboarding/OnboardingLayout.tsx +index 2478006..90cc060 100644 +--- a/frontend/components/onboarding/OnboardingLayout.tsx ++++ b/frontend/components/onboarding/OnboardingLayout.tsx +@@ -1,87 +1,86 @@ +-'use client'; +- +-import React from 'react'; +-import { useRouter } from 'next/navigation'; +-import { ArrowLeft } from 'lucide-react'; +-import Image from 'next/image'; +- +-interface OnboardingLayoutProps { +- children: React.ReactNode; +- currentStep: number; +- totalSteps?: number; +- title?: string; +- onBack?: () => void; +-} +- +-const OnboardingLayout: React.FC = ({ +- children, +- currentStep, +- totalSteps = 4, +- onBack, +-}) => { +- const router = useRouter(); +- +- const handleBack = () => { +- if (onBack) { +- onBack(); +- } else { +- router.back(); +- } +- }; +- +- const progressPercentage = (currentStep / totalSteps) * 100; +- +- return ( +-
+- {/* Top Navigation Bar */} +-
+- +- +- {/* Progress Bar */} +-
+-
+-
+- +- {/* Placeholder for symmetry or explicit step count if needed */} +-
+-
+- +- {/* Main Content Area */} +-
+- +- {/* Puzzle Icon Header */} +-
+- {/* Using tile.svg as the main logo/puzzle piece */} +-
+- MindBlock +-
+-
+- +- {children} +-
+- +- {/* Background Ambience (Optional) */} +-
+-
+-
+-
+-
+- ); +-}; +- +-export default OnboardingLayout; ++"use client"; ++ ++import React from "react"; ++import { useRouter } from "next/navigation"; ++import { ArrowLeft } from "lucide-react"; ++import Image from "next/image"; ++ ++interface OnboardingLayoutProps { ++ children: React.ReactNode; ++ currentStep: number; ++ totalSteps?: number; ++ title?: string; ++ onBack?: () => void; ++} ++ ++const OnboardingLayout: React.FC = ({ ++ children, ++ currentStep, ++ totalSteps = 4, ++ onBack, ++}) => { ++ const router = useRouter(); ++ ++ const handleBack = () => { ++ if (onBack) { ++ onBack(); ++ } else { ++ router.back(); ++ } ++ }; ++ ++ const progressPercentage = (currentStep / totalSteps) * 100; ++ ++ return ( ++
++ {/* Top Navigation Bar */} ++
++ ++ ++ {/* Progress Bar */} ++
++
++
++ ++ {/* Placeholder for symmetry or explicit step count if needed */} ++
++
++ ++ {/* Main Content Area */} ++
++ {/* Puzzle Icon Header */} ++
++ {/* Using tile.svg as the main logo/puzzle piece */} ++
++ MindBlock ++
++
++ ++ {children} ++
++ ++ {/* Background Ambience (Optional) */} ++
++
++
++
++
++ ); ++}; ++ ++export default OnboardingLayout; +diff --git a/frontend/components/profile/AchievementPreview.tsx b/frontend/components/profile/AchievementPreview.tsx +index bae93af..76b6d12 100644 +--- a/frontend/components/profile/AchievementPreview.tsx ++++ b/frontend/components/profile/AchievementPreview.tsx +@@ -51,4 +51,3 @@ export function AchievementPreview({ + + ); + } +- +diff --git a/frontend/components/profile/FollowButton.tsx b/frontend/components/profile/FollowButton.tsx +index e6e3ce5..a546164 100644 +--- a/frontend/components/profile/FollowButton.tsx ++++ b/frontend/components/profile/FollowButton.tsx +@@ -38,7 +38,12 @@ export function FollowButton({ + } + + return ( +- + ); + } +- +diff --git a/frontend/components/profile/OverviewCard.tsx b/frontend/components/profile/OverviewCard.tsx +index f0e75bd..9ee062c 100644 +--- a/frontend/components/profile/OverviewCard.tsx ++++ b/frontend/components/profile/OverviewCard.tsx +@@ -1,4 +1,3 @@ + import { StatCard } from "./StatCard"; + + export { StatCard as OverviewCard }; +- +diff --git a/frontend/components/profile/OverviewGrid.tsx b/frontend/components/profile/OverviewGrid.tsx +index fb8ac5d..71bd0b1 100644 +--- a/frontend/components/profile/OverviewGrid.tsx ++++ b/frontend/components/profile/OverviewGrid.tsx +@@ -1,4 +1,3 @@ + import { ProfileOverview } from "./ProfileOverview"; + + export { ProfileOverview as OverviewGrid }; +- +diff --git a/frontend/components/profile/ProfileOverview.tsx b/frontend/components/profile/ProfileOverview.tsx +index a3db05d..697fa34 100644 +--- a/frontend/components/profile/ProfileOverview.tsx ++++ b/frontend/components/profile/ProfileOverview.tsx +@@ -28,7 +28,7 @@ export function ProfileOverview({ + label: "Total Points", + }, + { +- iconSrc: "/trophy.svg", ++ iconSrc: "/trophy.svg", + iconAlt: "trophy", + value: `#${rank}`, + label: "Rank", +@@ -51,7 +51,13 @@ export function ProfileOverview({ + key={stat.label} + icon={ +
+- {stat.iconAlt} ++ {stat.iconAlt} +
+ } + value={stat.value} +diff --git a/frontend/components/profile/ProfileStats.tsx b/frontend/components/profile/ProfileStats.tsx +index 20e5e77..d8ac90d 100644 +--- a/frontend/components/profile/ProfileStats.tsx ++++ b/frontend/components/profile/ProfileStats.tsx +@@ -34,4 +34,3 @@ export function ProfileStats({ +
+ ); + } +- +diff --git a/frontend/components/profile/UserProfileView.tsx b/frontend/components/profile/UserProfileView.tsx +index 3a00645..2a4a116 100644 +--- a/frontend/components/profile/UserProfileView.tsx ++++ b/frontend/components/profile/UserProfileView.tsx +@@ -1,11 +1,7 @@ + "use client"; + + import { X, Share2 } from "lucide-react"; +-import { +- Avatar, +- AvatarFallback, +- AvatarImage, +-} from "@radix-ui/react-avatar"; ++import { Avatar, AvatarFallback, AvatarImage } from "@radix-ui/react-avatar"; + import { FollowButton } from "./FollowButton"; + import { ProfileStats } from "./ProfileStats"; + import { OverviewGrid } from "./OverviewGrid"; +@@ -78,7 +74,8 @@ export function UserProfileView(props: UserProfileViewProps) { + type="button" + onClick={onClose} + aria-label="Close profile" +- className="absolute left-4 top-4 flex h-8 w-8 items-center justify-center rounded-full border border-gray-800 bg-[#050C16] text-gray-300 hover:bg-gray-800"> ++ className="absolute left-4 top-4 flex h-8 w-8 items-center justify-center rounded-full border border-gray-800 bg-[#050C16] text-gray-300 hover:bg-gray-800" ++ > + + + +@@ -86,7 +83,10 @@ export function UserProfileView(props: UserProfileViewProps) { + {/* Avatar & basic info */} +
+ +- ++ + + {initials} + +@@ -122,24 +122,25 @@ export function UserProfileView(props: UserProfileViewProps) { + type="button" + onClick={onShare} + aria-label="Share profile" +- className="flex h-11 w-11 items-center justify-center rounded-xl border border-gray-800 bg-[#050C16] text-gray-200 transition-colors hover:border-[#3B82F6] hover:text-[#3B82F6]"> ++ className="flex h-11 w-11 items-center justify-center rounded-xl border border-gray-800 bg-[#050C16] text-gray-200 transition-colors hover:border-[#3B82F6] hover:text-[#3B82F6]" ++ > + + +
+ +
+- {/* Overview grid */} +- +- ++ {/* Overview grid */} ++ ++ + +- {/* Achievements preview */} +- +
+@@ -148,4 +149,3 @@ export function UserProfileView(props: UserProfileViewProps) { +
+ ); + } +- +diff --git a/frontend/components/puzzles/CategoryFilter.tsx b/frontend/components/puzzles/CategoryFilter.tsx +index a7153f6..9106f56 100644 +--- a/frontend/components/puzzles/CategoryFilter.tsx ++++ b/frontend/components/puzzles/CategoryFilter.tsx +@@ -1,7 +1,7 @@ +-'use client'; ++"use client"; + +-import React from 'react'; +-import { useCategories } from '@/hooks/useCategories'; ++import React from "react"; ++import { useCategories } from "@/hooks/useCategories"; + + interface CategoryFilterProps { + selectedCategoryId: string; // '' means "All" +@@ -40,14 +40,21 @@ const CategoryFilter: React.FC = ({ + `} + > + + +- {!isLoading && !isError && categories?.map((cat) => ( +- +- ))} ++ {!isLoading && ++ !isError && ++ categories?.map((cat) => ( ++ ++ ))} + + + {/* Custom chevron icon */} +diff --git a/frontend/components/puzzles/DifficultyFilter.tsx b/frontend/components/puzzles/DifficultyFilter.tsx +index 9c66a18..a2da524 100644 +--- a/frontend/components/puzzles/DifficultyFilter.tsx ++++ b/frontend/components/puzzles/DifficultyFilter.tsx +@@ -1,7 +1,7 @@ +-'use client'; ++"use client"; + +-import React from 'react'; +-import type { PuzzleDifficulty } from '@/lib/types/puzzles'; ++import React from "react"; ++import type { PuzzleDifficulty } from "@/lib/types/puzzles"; + + interface DifficultyOption { + value: PuzzleDifficulty; +@@ -10,11 +10,11 @@ interface DifficultyOption { + } + + const DIFFICULTY_OPTIONS: DifficultyOption[] = [ +- { value: 'ALL', label: 'All', dotColor: 'bg-slate-400' }, +- { value: 'BEGINNER', label: 'Beginner', dotColor: 'bg-green-400' }, +- { value: 'INTERMEDIATE', label: 'Intermediate', dotColor: 'bg-yellow-400' }, +- { value: 'ADVANCED', label: 'Advanced', dotColor: 'bg-orange-400' }, +- { value: 'EXPERT', label: 'Expert', dotColor: 'bg-red-500' }, ++ { value: "ALL", label: "All", dotColor: "bg-slate-400" }, ++ { value: "BEGINNER", label: "Beginner", dotColor: "bg-green-400" }, ++ { value: "INTERMEDIATE", label: "Intermediate", dotColor: "bg-yellow-400" }, ++ { value: "ADVANCED", label: "Advanced", dotColor: "bg-orange-400" }, ++ { value: "EXPERT", label: "Expert", dotColor: "bg-red-500" }, + ]; + + interface DifficultyFilterProps { +@@ -45,8 +45,8 @@ const DifficultyFilter: React.FC = ({ + border transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-[#3B82F6]/50 + ${ + isActive +- ? 'border-[#3B82F6] bg-[#3B82F6]/15 text-white' +- : 'border-white/10 bg-white/5 text-slate-400 hover:border-white/25 hover:text-slate-200' ++ ? "border-[#3B82F6] bg-[#3B82F6]/15 text-white" ++ : "border-white/10 bg-white/5 text-slate-400 hover:border-white/25 hover:text-slate-200" + } + `} + > +diff --git a/frontend/components/puzzles/FilterBar.tsx b/frontend/components/puzzles/FilterBar.tsx +index 139b13f..3805674 100644 +--- a/frontend/components/puzzles/FilterBar.tsx ++++ b/frontend/components/puzzles/FilterBar.tsx +@@ -1,11 +1,11 @@ +-'use client'; ++"use client"; + +-import React from 'react'; +-import type { PuzzleDifficulty, PuzzleFilters } from '@/lib/types/puzzles'; +-import DifficultyFilter from './DifficultyFilter'; +-import CategoryFilter from './CategoryFilter'; +-import Button from '@/components/ui/Button'; +-import { X } from 'lucide-react'; ++import React from "react"; ++import type { PuzzleDifficulty, PuzzleFilters } from "@/lib/types/puzzles"; ++import DifficultyFilter from "./DifficultyFilter"; ++import CategoryFilter from "./CategoryFilter"; ++import Button from "@/components/ui/Button"; ++import { X } from "lucide-react"; + + interface FilterBarProps { + filters: PuzzleFilters; +@@ -13,13 +13,13 @@ interface FilterBarProps { + } + + const DEFAULT_FILTERS: PuzzleFilters = { +- categoryId: '', +- difficulty: 'ALL', ++ categoryId: "", ++ difficulty: "ALL", + }; + + const FilterBar: React.FC = ({ filters, onFiltersChange }) => { + const hasActiveFilters = +- filters.categoryId !== '' || filters.difficulty !== 'ALL'; ++ filters.categoryId !== "" || filters.difficulty !== "ALL"; + + const handleCategoryChange = (categoryId: string) => { + onFiltersChange({ ...filters, categoryId }); +diff --git a/frontend/components/puzzles/PuzzleCard.tsx b/frontend/components/puzzles/PuzzleCard.tsx +index cad653e..2de9954 100644 +--- a/frontend/components/puzzles/PuzzleCard.tsx ++++ b/frontend/components/puzzles/PuzzleCard.tsx +@@ -1,8 +1,8 @@ +-'use client'; ++"use client"; + +-import React from 'react'; +-import { useRouter } from 'next/navigation'; +-import type { Puzzle } from '@/lib/types/puzzles'; ++import React from "react"; ++import { useRouter } from "next/navigation"; ++import type { Puzzle } from "@/lib/types/puzzles"; + + interface PuzzleCardProps { + puzzle: Puzzle; +@@ -10,35 +10,56 @@ interface PuzzleCardProps { + + const TYPE_CONFIG = { + logic: { +- label: 'Logic', +- icon: '🧠', +- className: 'bg-purple-500/15 text-purple-300 border-purple-500/25', ++ label: "Logic", ++ icon: "🧠", ++ className: "bg-purple-500/15 text-purple-300 border-purple-500/25", + }, + coding: { +- label: 'Coding', +- icon: 'šŸ’»', +- className: 'bg-blue-500/15 text-blue-300 border-blue-500/25', ++ label: "Coding", ++ icon: "šŸ’»", ++ className: "bg-blue-500/15 text-blue-300 border-blue-500/25", + }, + blockchain: { +- label: 'Blockchain', +- icon: 'ā›“ļø', +- className: 'bg-emerald-500/15 text-emerald-300 border-emerald-500/25', ++ label: "Blockchain", ++ icon: "ā›“ļø", ++ className: "bg-emerald-500/15 text-emerald-300 border-emerald-500/25", + }, + } as const; + + const DIFFICULTY_CONFIG = { +- ALL: { label: 'All', className: 'bg-slate-500/15 text-slate-300 border-slate-500/25', dot: 'bg-slate-400' }, +- BEGINNER: { label: 'Beginner', className: 'bg-green-500/15 text-green-300 border-green-500/25', dot: 'bg-green-400' }, +- INTERMEDIATE: { label: 'Intermediate', className: 'bg-yellow-500/15 text-yellow-300 border-yellow-500/25', dot: 'bg-yellow-400' }, +- ADVANCED: { label: 'Advanced', className: 'bg-orange-500/15 text-orange-300 border-orange-500/25', dot: 'bg-orange-400' }, +- EXPERT: { label: 'Expert', className: 'bg-red-500/15 text-red-300 border-red-500/25', dot: 'bg-red-500' }, ++ ALL: { ++ label: "All", ++ className: "bg-slate-500/15 text-slate-300 border-slate-500/25", ++ dot: "bg-slate-400", ++ }, ++ BEGINNER: { ++ label: "Beginner", ++ className: "bg-green-500/15 text-green-300 border-green-500/25", ++ dot: "bg-green-400", ++ }, ++ INTERMEDIATE: { ++ label: "Intermediate", ++ className: "bg-yellow-500/15 text-yellow-300 border-yellow-500/25", ++ dot: "bg-yellow-400", ++ }, ++ ADVANCED: { ++ label: "Advanced", ++ className: "bg-orange-500/15 text-orange-300 border-orange-500/25", ++ dot: "bg-orange-400", ++ }, ++ EXPERT: { ++ label: "Expert", ++ className: "bg-red-500/15 text-red-300 border-red-500/25", ++ dot: "bg-red-500", ++ }, + } as const; + + const PuzzleCard: React.FC = ({ puzzle }) => { + const router = useRouter(); + + const typeConfig = TYPE_CONFIG[puzzle.type] ?? TYPE_CONFIG.logic; +- const diffConfig = DIFFICULTY_CONFIG[puzzle.difficulty] ?? DIFFICULTY_CONFIG.BEGINNER; ++ const diffConfig = ++ DIFFICULTY_CONFIG[puzzle.difficulty] ?? DIFFICULTY_CONFIG.BEGINNER; + + return ( +
+diff --git a/frontend/components/quiz/LevelComplete.tsx b/frontend/components/quiz/LevelComplete.tsx +index dc1ea89..e30fa4e 100644 +--- a/frontend/components/quiz/LevelComplete.tsx ++++ b/frontend/components/quiz/LevelComplete.tsx +@@ -28,7 +28,9 @@ export function LevelComplete({ + level = 3, + }: LevelCompleteProps) { + return ( +-
++
+ + +
+@@ -43,7 +45,9 @@ export function LevelComplete({ + label="NICE" + value={`${correctAnswers}/${totalQuestions}`} + color="#14B8A6" +- icon={} ++ icon={ ++ ++ } + delay={100} + /> + +
+
{icon}
+- {value} ++ ++ {value} ++ +
+
+ ); +@@ -113,7 +128,10 @@ interface CompletionFooterProps { + isLoading?: boolean; + } + +-export function CompletionFooter({ onClaim, isLoading = false }: CompletionFooterProps) { ++export function CompletionFooter({ ++ onClaim, ++ isLoading = false, ++}: CompletionFooterProps) { + return ( +
+ + {error &&
{error}
} +- {isSuccess &&
Points successfully claimed!
} ++ {isSuccess && ( ++
Points successfully claimed!
++ )} +
+ ); + } +diff --git a/frontend/components/ui/Button.tsx b/frontend/components/ui/Button.tsx +index be40297..c35f9be 100644 +--- a/frontend/components/ui/Button.tsx ++++ b/frontend/components/ui/Button.tsx +@@ -1,8 +1,8 @@ +-import React from 'react'; ++import React from "react"; + + interface ButtonProps { + children: React.ReactNode; +- type?: 'button' | 'submit'; ++ type?: "button" | "submit"; + disabled?: boolean; + onClick?: () => void; + className?: string; +@@ -10,10 +10,10 @@ interface ButtonProps { + + const Button: React.FC = ({ + children, +- type = 'button', ++ type = "button", + disabled = false, + onClick, +- className = '', ++ className = "", + }) => { + return ( + + )} +
+diff --git a/frontend/components/ui/Pagination.tsx b/frontend/components/ui/Pagination.tsx +index 598c283..d68378a 100644 +--- a/frontend/components/ui/Pagination.tsx ++++ b/frontend/components/ui/Pagination.tsx +@@ -1,7 +1,7 @@ +-'use client'; ++"use client"; + +-import React, { useMemo } from 'react'; +-import { ChevronLeft, ChevronRight } from 'lucide-react'; ++import React, { useMemo } from "react"; ++import { ChevronLeft, ChevronRight } from "lucide-react"; + + interface PaginationProps { + currentPage: number; +@@ -23,33 +23,33 @@ const Pagination: React.FC = ({ + } + + const pages: (number | string)[] = []; +- ++ + // Always show first page + pages.push(1); +- ++ + if (currentPage <= 4) { + // Show pages 2-5 when current is near start + for (let i = 2; i <= 5; i++) { + pages.push(i); + } +- pages.push('...'); ++ pages.push("..."); + pages.push(totalPages); + } else if (currentPage >= totalPages - 3) { + // Show ellipsis and last 4 pages when current is near end +- pages.push('...'); ++ pages.push("..."); + for (let i = totalPages - 4; i <= totalPages; i++) { + pages.push(i); + } + } else { + // Show ellipsis on both sides with current page in middle +- pages.push('...'); ++ pages.push("..."); + for (let i = currentPage - 1; i <= currentPage + 1; i++) { + pages.push(i); + } +- pages.push('...'); ++ pages.push("..."); + pages.push(totalPages); + } +- ++ + return pages; + }, [currentPage, totalPages]); + +@@ -83,9 +83,10 @@ const Pagination: React.FC = ({ + disabled={currentPage === 1} + className={` + flex items-center gap-1 px-3 py-2 text-sm font-medium rounded-lg border transition-all duration-200 +- ${currentPage === 1 +- ? 'text-slate-500 border-slate-700 cursor-not-allowed' +- : 'text-slate-300 border-slate-600 hover:border-[#3B82F6]/40 hover:text-white hover:bg-white/[0.05]' ++ ${ ++ currentPage === 1 ++ ? "text-slate-500 border-slate-700 cursor-not-allowed" ++ : "text-slate-300 border-slate-600 hover:border-[#3B82F6]/40 hover:text-white hover:bg-white/[0.05]" + } + `} + aria-label="Previous page" +@@ -96,8 +97,8 @@ const Pagination: React.FC = ({ + + {/* Page Numbers */} +
+- {pageNumbers.map((page, index) => ( +- page === '...' ? ( ++ {pageNumbers.map((page, index) => ++ page === "..." ? ( + + ... + +@@ -107,18 +108,19 @@ const Pagination: React.FC = ({ + onClick={() => handlePageClick(page as number)} + className={` + px-3 py-2 text-sm font-medium rounded-lg border transition-all duration-200 +- ${currentPage === page +- ? 'bg-[#3B82F6] text-white border-[#3B82F6]' +- : 'text-slate-300 border-slate-600 hover:border-[#3B82F6]/40 hover:text-white hover:bg-white/[0.05]' ++ ${ ++ currentPage === page ++ ? "bg-[#3B82F6] text-white border-[#3B82F6]" ++ : "text-slate-300 border-slate-600 hover:border-[#3B82F6]/40 hover:text-white hover:bg-white/[0.05]" + } + `} + aria-label={`Go to page ${page}`} +- aria-current={currentPage === page ? 'page' : undefined} ++ aria-current={currentPage === page ? "page" : undefined} + > + {page} + +- ) +- ))} ++ ), ++ )} +
+ + {/* Next Button */} +@@ -127,9 +129,10 @@ const Pagination: React.FC = ({ + disabled={currentPage === totalPages} + className={` + flex items-center gap-1 px-3 py-2 text-sm font-medium rounded-lg border transition-all duration-200 +- ${currentPage === totalPages +- ? 'text-slate-500 border-slate-700 cursor-not-allowed' +- : 'text-slate-300 border-slate-600 hover:border-[#3B82F6]/40 hover:text-white hover:bg-white/[0.05]' ++ ${ ++ currentPage === totalPages ++ ? "text-slate-500 border-slate-700 cursor-not-allowed" ++ : "text-slate-300 border-slate-600 hover:border-[#3B82F6]/40 hover:text-white hover:bg-white/[0.05]" + } + `} + aria-label="Next page" +@@ -152,7 +155,7 @@ const Pagination: React.FC = ({ + }} + className="bg-slate-800 border border-slate-600 rounded px-2 py-1 text-slate-300 focus:outline-none focus:border-[#3B82F6]/40" + > +- {ITEMS_PER_PAGE_OPTIONS.map(option => ( ++ {ITEMS_PER_PAGE_OPTIONS.map((option) => ( + +diff --git a/frontend/components/ui/Toast.tsx b/frontend/components/ui/Toast.tsx +index 0ba76ee..c5c09c4 100644 +--- a/frontend/components/ui/Toast.tsx ++++ b/frontend/components/ui/Toast.tsx +@@ -1,11 +1,11 @@ +-'use client'; ++"use client"; + +-import React, { useEffect } from 'react'; +-import { X, CheckCircle, AlertCircle, Info, AlertTriangle } from 'lucide-react'; ++import React, { useEffect } from "react"; ++import { X, CheckCircle, AlertCircle, Info, AlertTriangle } from "lucide-react"; + + export interface Toast { + id: string; +- type: 'success' | 'error' | 'warning' | 'info'; ++ type: "success" | "error" | "warning" | "info"; + title: string; + message?: string; + duration?: number; +@@ -27,13 +27,13 @@ const ToastComponent: React.FC = ({ toast, onRemove }) => { + + const getIcon = () => { + switch (toast.type) { +- case 'success': ++ case "success": + return ; +- case 'error': ++ case "error": + return ; +- case 'warning': ++ case "warning": + return ; +- case 'info': ++ case "info": + return ; + default: + return ; +@@ -42,31 +42,31 @@ const ToastComponent: React.FC = ({ toast, onRemove }) => { + + const getBackgroundColor = () => { + switch (toast.type) { +- case 'success': +- return 'bg-green-500/10 border-green-500/20'; +- case 'error': +- return 'bg-red-500/10 border-red-500/20'; +- case 'warning': +- return 'bg-yellow-500/10 border-yellow-500/20'; +- case 'info': +- return 'bg-blue-500/10 border-blue-500/20'; ++ case "success": ++ return "bg-green-500/10 border-green-500/20"; ++ case "error": ++ return "bg-red-500/10 border-red-500/20"; ++ case "warning": ++ return "bg-yellow-500/10 border-yellow-500/20"; ++ case "info": ++ return "bg-blue-500/10 border-blue-500/20"; + default: +- return 'bg-blue-500/10 border-blue-500/20'; ++ return "bg-blue-500/10 border-blue-500/20"; + } + }; + + const getTextColor = () => { + switch (toast.type) { +- case 'success': +- return 'text-green-400'; +- case 'error': +- return 'text-red-400'; +- case 'warning': +- return 'text-yellow-400'; +- case 'info': +- return 'text-blue-400'; ++ case "success": ++ return "text-green-400"; ++ case "error": ++ return "text-red-400"; ++ case "warning": ++ return "text-yellow-400"; ++ case "info": ++ return "text-blue-400"; + default: +- return 'text-blue-400'; ++ return "text-blue-400"; + } + }; + +@@ -108,4 +108,3 @@ const ToastComponent: React.FC = ({ toast, onRemove }) => { + }; + + export default ToastComponent; +- +diff --git a/frontend/components/ui/ToastProvider.tsx b/frontend/components/ui/ToastProvider.tsx +index 0bbff79..cd87421 100644 +--- a/frontend/components/ui/ToastProvider.tsx ++++ b/frontend/components/ui/ToastProvider.tsx +@@ -1,10 +1,16 @@ +-'use client'; ++"use client"; + +-import React, { createContext, useContext, useState, useCallback, ReactNode } from 'react'; +-import ToastComponent, { Toast } from './Toast'; ++import React, { ++ createContext, ++ useContext, ++ useState, ++ useCallback, ++ ReactNode, ++} from "react"; ++import ToastComponent, { Toast } from "./Toast"; + + interface ToastContextType { +- showToast: (toast: Omit) => void; ++ showToast: (toast: Omit) => void; + showSuccess: (title: string, message?: string) => void; + showError: (title: string, message?: string) => void; + showWarning: (title: string, message?: string) => void; +@@ -17,7 +23,7 @@ const ToastContext = createContext(undefined); + export const useToast = () => { + const context = useContext(ToastContext); + if (!context) { +- throw new Error('useToast must be used within a ToastProvider'); ++ throw new Error("useToast must be used within a ToastProvider"); + } + return context; + }; +@@ -30,35 +36,47 @@ export const ToastProvider: React.FC = ({ children }) => { + const [toasts, setToasts] = useState([]); + + const removeToast = useCallback((id: string) => { +- setToasts(prev => prev.filter(toast => toast.id !== id)); ++ setToasts((prev) => prev.filter((toast) => toast.id !== id)); + }, []); + +- const showToast = useCallback((toast: Omit) => { ++ const showToast = useCallback((toast: Omit) => { + const id = Math.random().toString(36).substr(2, 9); + const newToast: Toast = { + ...toast, + id, + duration: toast.duration || 5000, + }; +- +- setToasts(prev => [...prev, newToast]); ++ ++ setToasts((prev) => [...prev, newToast]); + }, []); + +- const showSuccess = useCallback((title: string, message?: string) => { +- showToast({ type: 'success', title, message }); +- }, [showToast]); ++ const showSuccess = useCallback( ++ (title: string, message?: string) => { ++ showToast({ type: "success", title, message }); ++ }, ++ [showToast], ++ ); + +- const showError = useCallback((title: string, message?: string) => { +- showToast({ type: 'error', title, message }); +- }, [showToast]); ++ const showError = useCallback( ++ (title: string, message?: string) => { ++ showToast({ type: "error", title, message }); ++ }, ++ [showToast], ++ ); + +- const showWarning = useCallback((title: string, message?: string) => { +- showToast({ type: 'warning', title, message }); +- }, [showToast]); ++ const showWarning = useCallback( ++ (title: string, message?: string) => { ++ showToast({ type: "warning", title, message }); ++ }, ++ [showToast], ++ ); + +- const showInfo = useCallback((title: string, message?: string) => { +- showToast({ type: 'info', title, message }); +- }, [showToast]); ++ const showInfo = useCallback( ++ (title: string, message?: string) => { ++ showToast({ type: "info", title, message }); ++ }, ++ [showToast], ++ ); + + return ( + = ({ children }) => { + {children} + {/* Toast Container */} +
+- {toasts.map(toast => ( +- ++ {toasts.map((toast) => ( ++ + ))} +
+
+ ); + }; +- +diff --git a/frontend/components/ui/WalletModal.tsx b/frontend/components/ui/WalletModal.tsx +index 29dcbb0..9733358 100644 +--- a/frontend/components/ui/WalletModal.tsx ++++ b/frontend/components/ui/WalletModal.tsx +@@ -1,17 +1,22 @@ +-'use client'; ++"use client"; + +-import React, { useEffect, useCallback, useRef } from 'react'; +-import { X } from 'lucide-react'; +-import WalletOption from './wallet/WalletOption'; ++import React, { useEffect, useCallback, useRef } from "react"; ++import { X } from "lucide-react"; ++import WalletOption from "./wallet/WalletOption"; + import { + PhantomIcon, + MetaMaskIcon, + CoinbaseIcon, + TrustIcon, + FreighterIcon, +-} from './wallet/WalletIcons'; ++} from "./wallet/WalletIcons"; + +-export type WalletType = 'phantom' | 'metamask' | 'coinbase' | 'trust' | 'freighter'; ++export type WalletType = ++ | "phantom" ++ | "metamask" ++ | "coinbase" ++ | "trust" ++ | "freighter"; + + export interface WalletModalProps { + isOpen: boolean; +@@ -28,44 +33,55 @@ interface WalletConfig { + + const WALLETS: WalletConfig[] = [ + { +- id: 'freighter', +- name: 'Freighter', ++ id: "freighter", ++ name: "Freighter", + icon: , +- isDetected: typeof window !== 'undefined' && !!(window as unknown as Record).freighter, ++ isDetected: ++ typeof window !== "undefined" && ++ !!(window as unknown as Record).freighter, + }, + { +- id: 'phantom', +- name: 'Phantom', ++ id: "phantom", ++ name: "Phantom", + icon: , +- isDetected: typeof window !== 'undefined' && !!(window as unknown as Record).phantom, ++ isDetected: ++ typeof window !== "undefined" && ++ !!(window as unknown as Record).phantom, + }, + { +- id: 'metamask', +- name: 'MetaMask', ++ id: "metamask", ++ name: "MetaMask", + icon: , + isDetected: +- typeof window !== 'undefined' && +- !!(window as unknown as { ethereum?: { isMetaMask?: boolean } }).ethereum?.isMetaMask, ++ typeof window !== "undefined" && ++ !!(window as unknown as { ethereum?: { isMetaMask?: boolean } }).ethereum ++ ?.isMetaMask, + }, + { +- id: 'coinbase', +- name: 'Coinbase Wallet', ++ id: "coinbase", ++ name: "Coinbase Wallet", + icon: , + isDetected: +- typeof window !== 'undefined' && +- !!(window as unknown as { ethereum?: { isCoinbaseWallet?: boolean } }).ethereum?.isCoinbaseWallet, ++ typeof window !== "undefined" && ++ !!(window as unknown as { ethereum?: { isCoinbaseWallet?: boolean } }) ++ .ethereum?.isCoinbaseWallet, + }, + { +- id: 'trust', +- name: 'Trust', ++ id: "trust", ++ name: "Trust", + icon: , + isDetected: +- typeof window !== 'undefined' && +- !!(window as unknown as { ethereum?: { isTrust?: boolean } }).ethereum?.isTrust, ++ typeof window !== "undefined" && ++ !!(window as unknown as { ethereum?: { isTrust?: boolean } }).ethereum ++ ?.isTrust, + }, + ]; + +-const WalletModal: React.FC = ({ isOpen, onClose, onSelect }) => { ++const WalletModal: React.FC = ({ ++ isOpen, ++ onClose, ++ onSelect, ++}) => { + const modalRef = useRef(null); + const closeButtonRef = useRef(null); + +@@ -74,11 +90,11 @@ const WalletModal: React.FC = ({ isOpen, onClose, onSelect }) + if (!isOpen) return; + + const handleKeyDown = (e: KeyboardEvent) => { +- if (e.key === 'Escape') onClose(); ++ if (e.key === "Escape") onClose(); + }; + +- document.addEventListener('keydown', handleKeyDown); +- return () => document.removeEventListener('keydown', handleKeyDown); ++ document.addEventListener("keydown", handleKeyDown); ++ return () => document.removeEventListener("keydown", handleKeyDown); + }, [isOpen, onClose]); + + // Focus close button on open, restore focus on close +@@ -93,40 +109,37 @@ const WalletModal: React.FC = ({ isOpen, onClose, onSelect }) + // Prevent body scroll when modal is open + useEffect(() => { + if (isOpen) { +- document.body.style.overflow = 'hidden'; ++ document.body.style.overflow = "hidden"; + } else { +- document.body.style.overflow = ''; ++ document.body.style.overflow = ""; + } + return () => { +- document.body.style.overflow = ''; ++ document.body.style.overflow = ""; + }; + }, [isOpen]); + + // Focus trap within modal +- const handleTabKey = useCallback( +- (e: React.KeyboardEvent) => { +- if (e.key !== 'Tab' || !modalRef.current) return; +- +- const focusable = modalRef.current.querySelectorAll( +- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' +- ); +- const first = focusable[0]; +- const last = focusable[focusable.length - 1]; +- +- if (e.shiftKey) { +- if (document.activeElement === first) { +- e.preventDefault(); +- last?.focus(); +- } +- } else { +- if (document.activeElement === last) { +- e.preventDefault(); +- first?.focus(); +- } ++ const handleTabKey = useCallback((e: React.KeyboardEvent) => { ++ if (e.key !== "Tab" || !modalRef.current) return; ++ ++ const focusable = modalRef.current.querySelectorAll( ++ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])', ++ ); ++ const first = focusable[0]; ++ const last = focusable[focusable.length - 1]; ++ ++ if (e.shiftKey) { ++ if (document.activeElement === first) { ++ e.preventDefault(); ++ last?.focus(); + } +- }, +- [] +- ); ++ } else { ++ if (document.activeElement === last) { ++ e.preventDefault(); ++ first?.focus(); ++ } ++ } ++ }, []); + + const handleBackdropClick = (e: React.MouseEvent) => { + if (e.target === e.currentTarget) onClose(); +diff --git a/frontend/components/ui/wallet/WalletIcons.tsx b/frontend/components/ui/wallet/WalletIcons.tsx +index 2e94944..73bd2e3 100644 +--- a/frontend/components/ui/wallet/WalletIcons.tsx ++++ b/frontend/components/ui/wallet/WalletIcons.tsx +@@ -1,6 +1,8 @@ +-import React from 'react'; ++import React from "react"; + +-export const PhantomIcon: React.FC<{ className?: string }> = ({ className }) => ( ++export const PhantomIcon: React.FC<{ className?: string }> = ({ ++ className, ++}) => ( + = ({ className }) => + + ); + +-export const MetaMaskIcon: React.FC<{ className?: string }> = ({ className }) => ( ++export const MetaMaskIcon: React.FC<{ className?: string }> = ({ ++ className, ++}) => ( + = ({ className }) => + aria-hidden="true" + > + +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + ); + +-export const CoinbaseIcon: React.FC<{ className?: string }> = ({ className }) => ( ++export const CoinbaseIcon: React.FC<{ className?: string }> = ({ ++ className, ++}) => ( + = ({ className }) => ( + + ); + +-export const FreighterIcon: React.FC<{ className?: string }> = ({ className }) => ( ++export const FreighterIcon: React.FC<{ className?: string }> = ({ ++ className, ++}) => ( + = ({ className }) = + aria-hidden="true" + > + +- +- ++ ++ + + ); +diff --git a/frontend/components/ui/wallet/WalletOption.tsx b/frontend/components/ui/wallet/WalletOption.tsx +index 6c36a95..c402772 100644 +--- a/frontend/components/ui/wallet/WalletOption.tsx ++++ b/frontend/components/ui/wallet/WalletOption.tsx +@@ -1,6 +1,6 @@ +-'use client'; ++"use client"; + +-import React from 'react'; ++import React from "react"; + + export interface WalletOptionProps { + name: string; +@@ -9,12 +9,17 @@ export interface WalletOptionProps { + onClick: () => void; + } + +-const WalletOption: React.FC = ({ name, icon, isDetected, onClick }) => { ++const WalletOption: React.FC = ({ ++ name, ++ icon, ++ isDetected, ++ onClick, ++}) => { + return ( +