{"version":3,"file":"index-DzOcJ-5w.js","sources":["../../src/images/crypto-logo.png","../../src/components/Logo.vue","../../src/components/ui/InplaceReplaceTransition.vue","../../src/components/ui/Modal.vue","../../src/constants.ts","../../src/injectionTokens.ts","../../src/hooks/auth.ts","../../src/hooks/metadata.ts","../../src/hooks/periodicRefetch.ts","../../src/components/ui/DiscordModal.vue","../../src/util/i18n.ts","../../src/components/ui/LocaleSelector.vue","../../src/util/file.ts","../../src/components/ui/VPNModal.vue","../../src/util/misc.ts","../../src/components/Header.vue","../../src/components/Menu.vue","../../src/components/Layout.vue","../../src/api/runtime.ts","../../src/api/models/ChallengeDifficulty.ts","../../src/api/models/HandlerCategoryResponse.ts","../../src/api/models/HandlerFlagSolveDto.ts","../../src/api/models/HandlerChallengeSolvesDto.ts","../../src/api/models/HandlerCategorySolvesDto.ts","../../src/api/models/HandlerChallengeIdentifier.ts","../../src/api/models/HandlerExposedEndpointDto.ts","../../src/api/models/OrchestratorChallengeState.ts","../../src/api/models/HandlerChallengeInstanceDto.ts","../../src/api/models/HandlerChallengeResponse.ts","../../src/api/models/HandlerChallengeScoreDto.ts","../../src/api/models/HandlerErrorCode.ts","../../src/api/models/HandlerErrorResponse.ts","../../src/api/models/HandlerFlagSubmission.ts","../../src/api/models/SubmissionStatus.ts","../../src/api/models/HandlerFlagSubmissionResponse.ts","../../src/api/models/HandlerFlugzeugEnabledResponse.ts","../../src/api/models/UserFlugzeugStatus.ts","../../src/api/models/HandlerFlugzeugResponse.ts","../../src/api/models/HandlerHealthResponseDetail.ts","../../src/api/models/HandlerHealthResponse.ts","../../src/api/models/HandlerMetadataResponse.ts","../../src/api/models/HandlerScoreGroupDto.ts","../../src/api/models/HandlerScoreboardEntryDto.ts","../../src/api/models/HandlerScoreboardDto.ts","../../src/api/models/HandlerSelectScoreGroupDto.ts","../../src/api/models/HandlerSingleChallengeResponse.ts","../../src/api/models/HandlerSolveTimesDto.ts","../../src/api/models/HandlerUserRunningChallenges.ts","../../src/api/models/HandlerUserVPN.ts","../../src/api/models/HandlerUserScore.ts","../../src/api/models/HandlerUserResponse.ts","../../src/api/apis/CategoriesApi.ts","../../src/api/apis/ChallengesApi.ts","../../src/api/apis/DefaultApi.ts","../../src/api/apis/ScoreApi.ts","../../src/api/apis/UsersApi.ts","../../src/util/error.ts","../../src/components/MetadataProvider.vue","../../src/util/api.ts","../../src/components/ui/Spinner.vue","../../src/util/oidc.ts","../../src/components/auth/UserProvider.vue","../../src/components/ChallengeEndpoints.vue","../../src/components/FlagSubmission.vue","../../src/components/MarkdownContent/katex-plugin.ts","../../src/components/MarkdownContent/MarkdownContent.vue","../../src/components/PageContentContainer.vue","../../src/components/Challenge.vue","../../src/components/Flugzeug.vue","../../src/components/Scoreboard.vue","../../src/components/SolvesCalendar.vue","../../src/components/auth/Dummy.vue","../../src/components/ScoreGroupSelector.vue","../../src/components/landing-page/CountDown.vue","../../src/images/waiting-for-start.jpg","../../src/components/home/Home.vue","../../src/util/sentry.ts","../../src/pages/ctf/main.ts"],"sourcesContent":["export default \"__VITE_ASSET__C32J2X1g__\"","\n","\n\n\n","\n\n\n\n\n","/**\n * How often data in components should be re-fetched.\n */\nexport const FLUGSICHERUNG_RELOAD_DATA_INTERVAL = 10_000 // ms\n\n/**\n * The CTF's name.\n */\nexport const CTF_TITLE = 'Cryptogra.HPI'\nexport const CTF_TITLE_DATIV = CTF_TITLE\n\n/**\n * The CTF's start date.\n * Used for the landing page.\n */\nexport const CTF_START = new Date(Date.UTC(2024, 3, 9, 11, 0, 0, 0))\n\n/**\n * The CTF's end date.\n * Used for the landing page.\n */\nexport const CTF_END = new Date(Date.UTC(2024, 4, 8, 21, 59, 59, 0))\n\n/**\n * The end for post play time.\n * Used for the landing page.\n */\nexport const CTF_POST_PLAY_TIME_END = new Date(CTF_END.getTime() + 14 * 24 * 60 * 60 * 1000)\n\n/**\n * Name and extension that are used for the VPN config file when downloaded via the UI.\n */\nexport const VPN_CONFIG_FILE_NAME = 'crypto-vpn'\nexport const VPN_CONFIG_FILE_EXTENSION = 'conf'\n\n/**\n * Registration link.\n */\nexport const REGISTER_LINK = 'https://ctf.cryptogra.hpi.de/'\n\n/**\n * The number of challenges that are available in the CTF (total).\n */\nexport const CTF_NUMBER_CHALLENGES = 21\n\n/**\n * The number of challenges that are available at the start (without any flags).\n */\nexport const CTF_NUMBER_CHALLENGES_START = 'einige'\n\n/**\n * General contact E-Mail address.\n */\nexport const CTF_CONTACT_EMAIL = 'andrey.sidorenko@student.hpi.de'\nexport const CTF_CONTACT_EMAIL_LINK = `mailto:${CTF_CONTACT_EMAIL}`\n\n/**\n * Discord\n */\nexport const CTF_DISCORD_SERVER_ADDRESS = ''\n\n/**\n * Advertisement Videos.\n */\nexport const CTF_YOUTUBE_VIDEO = 'https://www.youtube-nocookie.com/embed/x3YQYSfEYyw?rel=0'\n\n/**\n * The duration of the fireworks animation after competition start.\n * Given in milliseconds.\n */\nexport const FIREWORKS_ANIMATION_DURATION = 24 * 60 * 60 * 1000\n","/**\n * This file contains symbols for injecting globals.\n */\n\nimport { DeepReadonly, InjectionKey, Ref, readonly } from 'vue'\n\nimport { type User, type CompetitionMetadata } from '@/hooks'\nimport { Api } from '@/util/api'\n\nexport const AUTHENTICATION_INJECTION_TOKEN = Symbol('authentication') as InjectionKey<{\n user: Readonly<{user: DeepReadonly>, refetch: () => Promise }>,\n api: ReturnType>>,\n}>\n\nexport const COMPETITION_METADATA_INJECTION_TOKEN = Symbol('metadata') as\n InjectionKey<{ metadata: Readonly>, refetch: () => Promise }>\n","import { inject } from 'vue'\n\nimport { HandlerChallengeIdentifier } from '@/api'\nimport { AUTHENTICATION_INJECTION_TOKEN } from '@/injectionTokens'\n\nexport type User = {\n isInitialized: boolean,\n id: string;\n displayName: string;\n vpnConnected: boolean;\n vpnIpAddress: string;\n rank: number;\n points: number;\n numSolvedFlags: number;\n runningChallengeInstances: HandlerChallengeIdentifier[];\n completedChallenges: HandlerChallengeIdentifier[];\n maximumChallengeInstances: number | null;\n hasSelectedGroup: boolean;\n externalId: string;\n}\n\nconst getInjection = () => {\n const authInjection = inject(AUTHENTICATION_INJECTION_TOKEN)\n if (!authInjection) {\n throw new Error(`Could not inject ${AUTHENTICATION_INJECTION_TOKEN.description}`)\n }\n return authInjection\n}\n\n/**\n * Retrieves the currently logged in user.\n *\n * @returns A reference to the user.\n */\nexport const useUser = (): typeof authInjection.user => {\n const authInjection = getInjection()\n return authInjection.user\n}\n\n/**\n * Retrieves an API instance.\n *\n * @returns An authenticated API instance.\n */\nexport const useApi = (): typeof authInjection.api => {\n const authInjection = getInjection()\n const api = authInjection.api\n return api\n}\n","import { inject } from 'vue'\n\nimport { COMPETITION_METADATA_INJECTION_TOKEN } from '@/injectionTokens'\n\nexport class CompetitionMetadata {\n // The constructor is not useless. It provides the variables.\n // eslint-disable-next-line no-useless-constructor\n constructor(\n readonly isInitialized: boolean,\n readonly ctfStart: Date,\n readonly ctfEnd: Date,\n readonly ctfPostPlayEnd: Date,\n readonly flagPrefix: string,\n readonly isFlugzeugEnabled: boolean,\n ) {}\n\n public get ctfHasStarted(): boolean {\n return Date.now() >= this.ctfStart.getTime()\n }\n\n public get ctfHasEnded(): boolean {\n return Date.now() >= this.ctfEnd.getTime()\n }\n\n public get postPlayTimeHasEnded(): boolean {\n return Date.now() >= this.ctfPostPlayEnd.getTime()\n }\n\n public get isDuringPlayTime(): boolean {\n return this.ctfHasStarted && !this.postPlayTimeHasEnded\n }\n}\n\nexport const useMetadata = (): NonNullable => {\n const metadata = inject(COMPETITION_METADATA_INJECTION_TOKEN)\n if (!metadata) {\n throw new Error(`Could not inject ${COMPETITION_METADATA_INJECTION_TOKEN.description}`)\n }\n return metadata\n}\n","import { Ref, ShallowRef, onBeforeUnmount, onMounted, readonly, ref, shallowRef } from 'vue'\n\ntype PeriodicCallback = () => Promise | T\n\ntype Periodic = {\n /**\n * Trigger forces the callback to be executed and resets the timeout.\n */\n trigger: () => Promise,\n /**\n * Resets the error and restarts the periodic.\n */\n reset: () => void,\n /**\n * When the callback threw an error, the error is stored here.\n */\n lastError: Readonly>>,\n /**\n * Holds the value of the callback.\n */\n value: ReturnType>>>,\n /**\n * Whether the callback is currently being executed.\n */\n isLoading: Readonly>\n}\n\nexport const usePeriodic = (\n cb: PeriodicCallback,\n periodMs: number,\n): Periodic => {\n const lastError = ref(null)\n const value = shallowRef(null) as ShallowRef\n const isLoading = ref(false)\n // The abortController helps to abort already running periodic fetches.\n const abortController = ref(new AbortController())\n\n const restartPeriodic = async () => {\n if (!abortController.value.signal.aborted) {\n // Prevent multiple loops from running.\n abortController.value.abort('restarting periodic fetch')\n }\n abortController.value = new AbortController()\n const periodic = async (abortSignal: AbortSignal) => {\n if (abortSignal.aborted) {\n return\n }\n try {\n isLoading.value = true\n value.value = await Promise.resolve(cb())\n } catch (ex) {\n lastError.value = ex\n } finally {\n isLoading.value = false\n }\n const timeout = setTimeout(() => { periodic(abortSignal) }, periodMs)\n abortSignal.addEventListener('abort', () => {\n clearTimeout(timeout)\n })\n if (lastError.value !== null || abortSignal.aborted) {\n clearTimeout(timeout)\n }\n }\n await periodic(abortController.value.signal)\n }\n\n // Lifecycle management.\n onMounted(restartPeriodic)\n onBeforeUnmount(() => {\n abortController.value.abort('stopping periodic because of unmount')\n })\n\n // Additional utility functions.\n const trigger = async () => {\n abortController.value.abort('refetch triggered')\n await restartPeriodic()\n }\n\n const reset = () => {\n lastError.value = null\n restartPeriodic()\n }\n\n return {\n lastError: readonly(lastError),\n value: readonly(value),\n trigger,\n reset,\n isLoading: readonly(isLoading),\n }\n}\n","\n\n\n\n\n","// Internationalization setup.\n// Adapted from the example at https://github.com/intlify/vue-i18n-next/blob/master/examples/lazy-loading/vite/src/i18n.ts\n\nimport { isRef } from 'vue'\nimport { createI18n } from 'vue-i18n'\nimport type {\n I18n,\n I18nOptions,\n VueI18n,\n Composer,\n I18nMode,\n} from 'vue-i18n'\n\nimport de from '../locales/de.json'\nimport en from '../locales/en.json'\ntype MessageSchema = typeof en\nexport const supportedLocales = ['en', 'de'] as const\nexport type SupportedLocale = typeof supportedLocales[number]\nconst defaultLocale: SupportedLocale = 'en'\n\nconst storageKey = 'lang'\n\nfunction isComposer(\n instance: VueI18n | Composer,\n mode: I18nMode,\n): instance is Composer {\n return mode === 'composition' && isRef(instance.locale)\n}\n\nexport function getLocale(i18n: I18n): string {\n if (isComposer(i18n.global, i18n.mode)) {\n return i18n.global.locale.value\n } else {\n return i18n.global.locale\n }\n}\n\nexport function setupI18n(\n options: I18nOptions<{ message: MessageSchema }, SupportedLocale> = {},\n): typeof i18n {\n const browserLocale = getBrowserLocale()\n const initialLocale = getSavedLocale() ?? options.locale ?? browserLocale\n const enhancedOptions = {\n fallbackLocale: defaultLocale,\n ...options,\n legacy: false,\n locale: initialLocale,\n messages: {\n en,\n de,\n },\n } satisfies I18nOptions<{ message: MessageSchema }, SupportedLocale>\n const i18n = createI18n, Record, SupportedLocale\n >(\n enhancedOptions,\n )\n setLocale(i18n, enhancedOptions.locale as SupportedLocale)\n return i18n\n}\n\nfunction setLocale(i18n: I18n, locale: SupportedLocale): void {\n saveLocale(locale)\n if (isComposer(i18n.global, i18n.mode)) {\n i18n.global.locale.value = locale\n } else {\n i18n.global.locale = locale\n }\n}\n\nfunction getSavedLocale(): SupportedLocale | null {\n const locale = localStorage.getItem(storageKey) as SupportedLocale\n if (!supportedLocales.includes(locale)) {\n return null\n }\n return locale\n}\n\nexport function saveLocale(locale: string): void {\n localStorage.setItem(storageKey, locale)\n}\n\nfunction getBrowserLocale(): SupportedLocale {\n const browserSupportedLocales = [...(navigator.languages ?? []), navigator.language]\n for (const locale of browserSupportedLocales) {\n // Match, e.g., en-US and en-GB to en.\n const parsedLocale = new Intl.Locale(locale)\n const foundLocale = supportedLocales.find((l) => l === parsedLocale.baseName || l === parsedLocale.language)\n if (foundLocale) {\n return foundLocale\n }\n }\n return 'en'\n}\n","\n\n\n","// When downloading a file from a remote server which requires authentication using some token,\n// the only way to do that seems to be using this hack, also employed by FileSaver.js ...\n// https://github.com/eligrey/FileSaver.js/wiki/Saving-a-remote-file\n// https://stackoverflow.com/a/19328891\nexport function saveAs(data: BlobPart, filename: string): void {\n const blob = new Blob([data], { type: 'application/octet-stream' })\n\n const link = document.createElement('a')\n link.download = filename\n link.href = URL.createObjectURL(blob)\n link.click()\n URL.revokeObjectURL(link.href)\n\n // We don't need to delete this link element here, since we didn't insert it in the DOM.\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\n}\n","\n\n\n\n\n","export function ordinalSuffix(locale: string, num: number): string {\n const ordinalRules = new Intl.PluralRules(locale, {\n type: 'ordinal',\n })\n const suffixes = {\n zero: '',\n one: 'st',\n two: 'nd',\n few: 'rd',\n other: 'th',\n many: 'th',\n }\n return suffixes[ordinalRules.select(num)]\n}\n","\n\n\n","\n\n\n\n\n","\n\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nexport const BASE_PATH = \"http://localhost\".replace(/\\/+$/, \"\");\n\nexport interface ConfigurationParameters {\n basePath?: string; // override base path\n fetchApi?: FetchAPI; // override for fetch implementation\n middleware?: Middleware[]; // middleware to apply before/after fetch requests\n queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings\n username?: string; // parameter for basic security\n password?: string; // parameter for basic security\n apiKey?: string | Promise | ((name: string) => string | Promise); // parameter for apiKey security\n accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string | Promise); // parameter for oauth2 security\n headers?: HTTPHeaders; //header params we want to use on every request\n credentials?: RequestCredentials; //value for the credentials param we want to use on each request\n}\n\nexport class Configuration {\n constructor(private configuration: ConfigurationParameters = {}) {}\n\n set config(configuration: Configuration) {\n this.configuration = configuration;\n }\n\n get basePath(): string {\n return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;\n }\n\n get fetchApi(): FetchAPI | undefined {\n return this.configuration.fetchApi;\n }\n\n get middleware(): Middleware[] {\n return this.configuration.middleware || [];\n }\n\n get queryParamsStringify(): (params: HTTPQuery) => string {\n return this.configuration.queryParamsStringify || querystring;\n }\n\n get username(): string | undefined {\n return this.configuration.username;\n }\n\n get password(): string | undefined {\n return this.configuration.password;\n }\n\n get apiKey(): ((name: string) => string | Promise) | undefined {\n const apiKey = this.configuration.apiKey;\n if (apiKey) {\n return typeof apiKey === 'function' ? apiKey : () => apiKey;\n }\n return undefined;\n }\n\n get accessToken(): ((name?: string, scopes?: string[]) => string | Promise) | undefined {\n const accessToken = this.configuration.accessToken;\n if (accessToken) {\n return typeof accessToken === 'function' ? accessToken : async () => accessToken;\n }\n return undefined;\n }\n\n get headers(): HTTPHeaders | undefined {\n return this.configuration.headers;\n }\n\n get credentials(): RequestCredentials | undefined {\n return this.configuration.credentials;\n }\n}\n\nexport const DefaultConfig = new Configuration();\n\n/**\n * This is the base class for all generated API classes.\n */\nexport class BaseAPI {\n\n private static readonly jsonRegex = new RegExp('^(:?application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(:?;.*)?$', 'i');\n private middleware: Middleware[];\n\n constructor(protected configuration = DefaultConfig) {\n this.middleware = configuration.middleware;\n }\n\n withMiddleware(this: T, ...middlewares: Middleware[]) {\n const next = this.clone();\n next.middleware = next.middleware.concat(...middlewares);\n return next;\n }\n\n withPreMiddleware(this: T, ...preMiddlewares: Array) {\n const middlewares = preMiddlewares.map((pre) => ({ pre }));\n return this.withMiddleware(...middlewares);\n }\n\n withPostMiddleware(this: T, ...postMiddlewares: Array) {\n const middlewares = postMiddlewares.map((post) => ({ post }));\n return this.withMiddleware(...middlewares);\n }\n\n /**\n * Check if the given MIME is a JSON MIME.\n * JSON MIME examples:\n * application/json\n * application/json; charset=UTF8\n * APPLICATION/JSON\n * application/vnd.company+json\n * @param mime - MIME (Multipurpose Internet Mail Extensions)\n * @return True if the given MIME is JSON, false otherwise.\n */\n protected isJsonMime(mime: string | null | undefined): boolean {\n if (!mime) {\n return false;\n }\n return BaseAPI.jsonRegex.test(mime);\n }\n\n protected async request(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction): Promise {\n const { url, init } = await this.createFetchParams(context, initOverrides);\n const response = await this.fetchApi(url, init);\n if (response && (response.status >= 200 && response.status < 300)) {\n return response;\n }\n throw new ResponseError(response, 'Response returned an error code');\n }\n\n private async createFetchParams(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction) {\n let url = this.configuration.basePath + context.path;\n if (context.query !== undefined && Object.keys(context.query).length !== 0) {\n // only add the querystring to the URL if there are query parameters.\n // this is done to avoid urls ending with a \"?\" character which buggy webservers\n // do not handle correctly sometimes.\n url += '?' + this.configuration.queryParamsStringify(context.query);\n }\n\n const headers = Object.assign({}, this.configuration.headers, context.headers);\n Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {});\n\n const initOverrideFn =\n typeof initOverrides === \"function\"\n ? initOverrides\n : async () => initOverrides;\n\n const initParams = {\n method: context.method,\n headers,\n body: context.body,\n credentials: this.configuration.credentials,\n };\n\n const overriddenInit: RequestInit = {\n ...initParams,\n ...(await initOverrideFn({\n init: initParams,\n context,\n }))\n };\n\n let body: any;\n if (isFormData(overriddenInit.body)\n || (overriddenInit.body instanceof URLSearchParams)\n || isBlob(overriddenInit.body)) {\n body = overriddenInit.body;\n } else if (this.isJsonMime(headers['Content-Type'])) {\n body = JSON.stringify(overriddenInit.body);\n } else {\n body = overriddenInit.body;\n }\n\n const init: RequestInit = {\n ...overriddenInit,\n body\n };\n\n return { url, init };\n }\n\n private fetchApi = async (url: string, init: RequestInit) => {\n let fetchParams = { url, init };\n for (const middleware of this.middleware) {\n if (middleware.pre) {\n fetchParams = await middleware.pre({\n fetch: this.fetchApi,\n ...fetchParams,\n }) || fetchParams;\n }\n }\n let response: Response | undefined = undefined;\n try {\n response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init);\n } catch (e) {\n for (const middleware of this.middleware) {\n if (middleware.onError) {\n response = await middleware.onError({\n fetch: this.fetchApi,\n url: fetchParams.url,\n init: fetchParams.init,\n error: e,\n response: response ? response.clone() : undefined,\n }) || response;\n }\n }\n if (response === undefined) {\n if (e instanceof Error) {\n throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response');\n } else {\n throw e;\n }\n }\n }\n for (const middleware of this.middleware) {\n if (middleware.post) {\n response = await middleware.post({\n fetch: this.fetchApi,\n url: fetchParams.url,\n init: fetchParams.init,\n response: response.clone(),\n }) || response;\n }\n }\n return response;\n }\n\n /**\n * Create a shallow clone of `this` by constructing a new instance\n * and then shallow cloning data members.\n */\n private clone(this: T): T {\n const constructor = this.constructor as any;\n const next = new constructor(this.configuration);\n next.middleware = this.middleware.slice();\n return next;\n }\n};\n\nfunction isBlob(value: any): value is Blob {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n\nfunction isFormData(value: any): value is FormData {\n return typeof FormData !== \"undefined\" && value instanceof FormData;\n}\n\nexport class ResponseError extends Error {\n override name: \"ResponseError\" = \"ResponseError\";\n constructor(public response: Response, msg?: string) {\n super(msg);\n }\n}\n\nexport class FetchError extends Error {\n override name: \"FetchError\" = \"FetchError\";\n constructor(public cause: Error, msg?: string) {\n super(msg);\n }\n}\n\nexport class RequiredError extends Error {\n override name: \"RequiredError\" = \"RequiredError\";\n constructor(public field: string, msg?: string) {\n super(msg);\n }\n}\n\nexport const COLLECTION_FORMATS = {\n csv: \",\",\n ssv: \" \",\n tsv: \"\\t\",\n pipes: \"|\",\n};\n\nexport type FetchAPI = WindowOrWorkerGlobalScope['fetch'];\n\nexport type Json = any;\nexport type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';\nexport type HTTPHeaders = { [key: string]: string };\nexport type HTTPQuery = { [key: string]: string | number | null | boolean | Array | Set | HTTPQuery };\nexport type HTTPBody = Json | FormData | URLSearchParams;\nexport type HTTPRequestInit = { headers?: HTTPHeaders; method: HTTPMethod; credentials?: RequestCredentials; body?: HTTPBody };\nexport type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original';\n\nexport type InitOverrideFunction = (requestContext: { init: HTTPRequestInit, context: RequestOpts }) => Promise\n\nexport interface FetchParams {\n url: string;\n init: RequestInit;\n}\n\nexport interface RequestOpts {\n path: string;\n method: HTTPMethod;\n headers: HTTPHeaders;\n query?: HTTPQuery;\n body?: HTTPBody;\n}\n\nexport function querystring(params: HTTPQuery, prefix: string = ''): string {\n return Object.keys(params)\n .map(key => querystringSingleKey(key, params[key], prefix))\n .filter(part => part.length > 0)\n .join('&');\n}\n\nfunction querystringSingleKey(key: string, value: string | number | null | undefined | boolean | Array | Set | HTTPQuery, keyPrefix: string = ''): string {\n const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);\n if (value instanceof Array) {\n const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue)))\n .join(`&${encodeURIComponent(fullKey)}=`);\n return `${encodeURIComponent(fullKey)}=${multiValue}`;\n }\n if (value instanceof Set) {\n const valueAsArray = Array.from(value);\n return querystringSingleKey(key, valueAsArray, keyPrefix);\n }\n if (value instanceof Date) {\n return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`;\n }\n if (value instanceof Object) {\n return querystring(value as HTTPQuery, fullKey);\n }\n return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;\n}\n\nexport function mapValues(data: any, fn: (item: any) => any) {\n return Object.keys(data).reduce(\n (acc, key) => ({ ...acc, [key]: fn(data[key]) }),\n {}\n );\n}\n\nexport function canConsumeForm(consumes: Consume[]): boolean {\n for (const consume of consumes) {\n if ('multipart/form-data' === consume.contentType) {\n return true;\n }\n }\n return false;\n}\n\nexport interface Consume {\n contentType: string;\n}\n\nexport interface RequestContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n}\n\nexport interface ResponseContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n response: Response;\n}\n\nexport interface ErrorContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n error: unknown;\n response?: Response;\n}\n\nexport interface Middleware {\n pre?(context: RequestContext): Promise;\n post?(context: ResponseContext): Promise;\n onError?(context: ErrorContext): Promise;\n}\n\nexport interface ApiResponse {\n raw: Response;\n value(): Promise;\n}\n\nexport interface ResponseTransformer {\n (json: any): T;\n}\n\nexport class JSONApiResponse {\n constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {}\n\n async value(): Promise {\n return this.transformer(await this.raw.json());\n }\n}\n\nexport class VoidApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise {\n return undefined;\n }\n}\n\nexport class BlobApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise {\n return await this.raw.blob();\n };\n}\n\nexport class TextApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise {\n return await this.raw.text();\n };\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\n/**\n * \n * @export\n */\nexport const ChallengeDifficulty = {\n DifficultyEasy: 1,\n DifficultyMedium: 2,\n DifficultyHard: 3\n} as const;\nexport type ChallengeDifficulty = typeof ChallengeDifficulty[keyof typeof ChallengeDifficulty];\n\n\nexport function instanceOfChallengeDifficulty(value: any): boolean {\n for (const key in ChallengeDifficulty) {\n if (Object.prototype.hasOwnProperty.call(ChallengeDifficulty, key)) {\n if (ChallengeDifficulty[key as keyof typeof ChallengeDifficulty] === value) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function ChallengeDifficultyFromJSON(json: any): ChallengeDifficulty {\n return ChallengeDifficultyFromJSONTyped(json, false);\n}\n\nexport function ChallengeDifficultyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChallengeDifficulty {\n return json as ChallengeDifficulty;\n}\n\nexport function ChallengeDifficultyToJSON(value?: ChallengeDifficulty | null): any {\n return value as any;\n}\n\nexport function ChallengeDifficultyToJSONTyped(value: any, ignoreDiscriminator: boolean): ChallengeDifficulty {\n return value as ChallengeDifficulty;\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * The response for a single category.\n * @export\n * @interface HandlerCategoryResponse\n */\nexport interface HandlerCategoryResponse {\n /**\n * The description of the category.\n * @type {string}\n * @memberof HandlerCategoryResponse\n */\n description: string;\n /**\n * The full name of the category.\n * @type {string}\n * @memberof HandlerCategoryResponse\n */\n name: string;\n /**\n * The order of the category within the category list.\n * @type {number}\n * @memberof HandlerCategoryResponse\n */\n order: number;\n /**\n * The unique slug of the category.\n * @type {string}\n * @memberof HandlerCategoryResponse\n */\n slug: string;\n}\n\n/**\n * Check if a given object implements the HandlerCategoryResponse interface.\n */\nexport function instanceOfHandlerCategoryResponse(value: object): value is HandlerCategoryResponse {\n if (!('description' in value) || value['description'] === undefined) return false;\n if (!('name' in value) || value['name'] === undefined) return false;\n if (!('order' in value) || value['order'] === undefined) return false;\n if (!('slug' in value) || value['slug'] === undefined) return false;\n return true;\n}\n\nexport function HandlerCategoryResponseFromJSON(json: any): HandlerCategoryResponse {\n return HandlerCategoryResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerCategoryResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerCategoryResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'description': json['description'],\n 'name': json['name'],\n 'order': json['order'],\n 'slug': json['slug'],\n };\n}\n\n export function HandlerCategoryResponseToJSON(json: any): HandlerCategoryResponse {\n return HandlerCategoryResponseToJSONTyped(json, false);\n }\n\n export function HandlerCategoryResponseToJSONTyped(value?: HandlerCategoryResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'description': value['description'],\n 'name': value['name'],\n 'order': value['order'],\n 'slug': value['slug'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerFlagSolveDto\n */\nexport interface HandlerFlagSolveDto {\n /**\n * The timestamps when this flag was successfully submitted.\n * @type {Array}\n * @memberof HandlerFlagSolveDto\n */\n solveTimes: Array;\n}\n\n/**\n * Check if a given object implements the HandlerFlagSolveDto interface.\n */\nexport function instanceOfHandlerFlagSolveDto(value: object): value is HandlerFlagSolveDto {\n if (!('solveTimes' in value) || value['solveTimes'] === undefined) return false;\n return true;\n}\n\nexport function HandlerFlagSolveDtoFromJSON(json: any): HandlerFlagSolveDto {\n return HandlerFlagSolveDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerFlagSolveDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerFlagSolveDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'solveTimes': json['solveTimes'],\n };\n}\n\n export function HandlerFlagSolveDtoToJSON(json: any): HandlerFlagSolveDto {\n return HandlerFlagSolveDtoToJSONTyped(json, false);\n }\n\n export function HandlerFlagSolveDtoToJSONTyped(value?: HandlerFlagSolveDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'solveTimes': value['solveTimes'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerFlagSolveDto } from './HandlerFlagSolveDto';\nimport {\n HandlerFlagSolveDtoFromJSON,\n HandlerFlagSolveDtoFromJSONTyped,\n HandlerFlagSolveDtoToJSON,\n HandlerFlagSolveDtoToJSONTyped,\n} from './HandlerFlagSolveDto';\n\n/**\n * \n * @export\n * @interface HandlerChallengeSolvesDto\n */\nexport interface HandlerChallengeSolvesDto {\n /**\n * All solves for the flags in that challenge.\n * @type {Array}\n * @memberof HandlerChallengeSolvesDto\n */\n flagSolves: Array;\n /**\n * The challenge's name.\n * @type {string}\n * @memberof HandlerChallengeSolvesDto\n */\n name: string;\n}\n\n/**\n * Check if a given object implements the HandlerChallengeSolvesDto interface.\n */\nexport function instanceOfHandlerChallengeSolvesDto(value: object): value is HandlerChallengeSolvesDto {\n if (!('flagSolves' in value) || value['flagSolves'] === undefined) return false;\n if (!('name' in value) || value['name'] === undefined) return false;\n return true;\n}\n\nexport function HandlerChallengeSolvesDtoFromJSON(json: any): HandlerChallengeSolvesDto {\n return HandlerChallengeSolvesDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerChallengeSolvesDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerChallengeSolvesDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'flagSolves': ((json['flagSolves'] as Array).map(HandlerFlagSolveDtoFromJSON)),\n 'name': json['name'],\n };\n}\n\n export function HandlerChallengeSolvesDtoToJSON(json: any): HandlerChallengeSolvesDto {\n return HandlerChallengeSolvesDtoToJSONTyped(json, false);\n }\n\n export function HandlerChallengeSolvesDtoToJSONTyped(value?: HandlerChallengeSolvesDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'flagSolves': ((value['flagSolves'] as Array).map(HandlerFlagSolveDtoToJSON)),\n 'name': value['name'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerChallengeSolvesDto } from './HandlerChallengeSolvesDto';\nimport {\n HandlerChallengeSolvesDtoFromJSON,\n HandlerChallengeSolvesDtoFromJSONTyped,\n HandlerChallengeSolvesDtoToJSON,\n HandlerChallengeSolvesDtoToJSONTyped,\n} from './HandlerChallengeSolvesDto';\n\n/**\n * \n * @export\n * @interface HandlerCategorySolvesDto\n */\nexport interface HandlerCategorySolvesDto {\n /**\n * All solves for the challenges in that category.\n * @type {Array}\n * @memberof HandlerCategorySolvesDto\n */\n challengeSolves: Array;\n /**\n * The category's name.\n * @type {string}\n * @memberof HandlerCategorySolvesDto\n */\n name: string;\n}\n\n/**\n * Check if a given object implements the HandlerCategorySolvesDto interface.\n */\nexport function instanceOfHandlerCategorySolvesDto(value: object): value is HandlerCategorySolvesDto {\n if (!('challengeSolves' in value) || value['challengeSolves'] === undefined) return false;\n if (!('name' in value) || value['name'] === undefined) return false;\n return true;\n}\n\nexport function HandlerCategorySolvesDtoFromJSON(json: any): HandlerCategorySolvesDto {\n return HandlerCategorySolvesDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerCategorySolvesDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerCategorySolvesDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'challengeSolves': ((json['challengeSolves'] as Array).map(HandlerChallengeSolvesDtoFromJSON)),\n 'name': json['name'],\n };\n}\n\n export function HandlerCategorySolvesDtoToJSON(json: any): HandlerCategorySolvesDto {\n return HandlerCategorySolvesDtoToJSONTyped(json, false);\n }\n\n export function HandlerCategorySolvesDtoToJSONTyped(value?: HandlerCategorySolvesDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'challengeSolves': ((value['challengeSolves'] as Array).map(HandlerChallengeSolvesDtoToJSON)),\n 'name': value['name'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerChallengeIdentifier\n */\nexport interface HandlerChallengeIdentifier {\n /**\n * The slug of the challenge's category.\n * @type {string}\n * @memberof HandlerChallengeIdentifier\n */\n categorySlug: string;\n /**\n * The slug of the challenge.\n * @type {string}\n * @memberof HandlerChallengeIdentifier\n */\n challengeSlug: string;\n}\n\n/**\n * Check if a given object implements the HandlerChallengeIdentifier interface.\n */\nexport function instanceOfHandlerChallengeIdentifier(value: object): value is HandlerChallengeIdentifier {\n if (!('categorySlug' in value) || value['categorySlug'] === undefined) return false;\n if (!('challengeSlug' in value) || value['challengeSlug'] === undefined) return false;\n return true;\n}\n\nexport function HandlerChallengeIdentifierFromJSON(json: any): HandlerChallengeIdentifier {\n return HandlerChallengeIdentifierFromJSONTyped(json, false);\n}\n\nexport function HandlerChallengeIdentifierFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerChallengeIdentifier {\n if (json == null) {\n return json;\n }\n return {\n \n 'categorySlug': json['categorySlug'],\n 'challengeSlug': json['challengeSlug'],\n };\n}\n\n export function HandlerChallengeIdentifierToJSON(json: any): HandlerChallengeIdentifier {\n return HandlerChallengeIdentifierToJSONTyped(json, false);\n }\n\n export function HandlerChallengeIdentifierToJSONTyped(value?: HandlerChallengeIdentifier | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'categorySlug': value['categorySlug'],\n 'challengeSlug': value['challengeSlug'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerExposedEndpointDto\n */\nexport interface HandlerExposedEndpointDto {\n /**\n * The IP address of the exposed port.\n * @type {string}\n * @memberof HandlerExposedEndpointDto\n */\n ip: string;\n /**\n * The port itself.\n * If empty, only the IP is to be exposed.\n * @type {number}\n * @memberof HandlerExposedEndpointDto\n */\n port: number | null;\n /**\n * The name of the protocol the port is supposed to provide.\n * @type {string}\n * @memberof HandlerExposedEndpointDto\n */\n protocol: string | null;\n /**\n * A short title explaining what this port is supposed to provide.\n * @type {string}\n * @memberof HandlerExposedEndpointDto\n */\n title: string;\n}\n\n/**\n * Check if a given object implements the HandlerExposedEndpointDto interface.\n */\nexport function instanceOfHandlerExposedEndpointDto(value: object): value is HandlerExposedEndpointDto {\n if (!('ip' in value) || value['ip'] === undefined) return false;\n if (!('port' in value) || value['port'] === undefined) return false;\n if (!('protocol' in value) || value['protocol'] === undefined) return false;\n if (!('title' in value) || value['title'] === undefined) return false;\n return true;\n}\n\nexport function HandlerExposedEndpointDtoFromJSON(json: any): HandlerExposedEndpointDto {\n return HandlerExposedEndpointDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerExposedEndpointDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerExposedEndpointDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'ip': json['ip'],\n 'port': json['port'],\n 'protocol': json['protocol'],\n 'title': json['title'],\n };\n}\n\n export function HandlerExposedEndpointDtoToJSON(json: any): HandlerExposedEndpointDto {\n return HandlerExposedEndpointDtoToJSONTyped(json, false);\n }\n\n export function HandlerExposedEndpointDtoToJSONTyped(value?: HandlerExposedEndpointDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'ip': value['ip'],\n 'port': value['port'],\n 'protocol': value['protocol'],\n 'title': value['title'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\n/**\n * \n * @export\n */\nexport const OrchestratorChallengeState = {\n StateNotRunning: 'not-running',\n StateStarting: 'starting',\n StateRunning: 'running',\n StateStopping: 'stopping'\n} as const;\nexport type OrchestratorChallengeState = typeof OrchestratorChallengeState[keyof typeof OrchestratorChallengeState];\n\n\nexport function instanceOfOrchestratorChallengeState(value: any): boolean {\n for (const key in OrchestratorChallengeState) {\n if (Object.prototype.hasOwnProperty.call(OrchestratorChallengeState, key)) {\n if (OrchestratorChallengeState[key as keyof typeof OrchestratorChallengeState] === value) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function OrchestratorChallengeStateFromJSON(json: any): OrchestratorChallengeState {\n return OrchestratorChallengeStateFromJSONTyped(json, false);\n}\n\nexport function OrchestratorChallengeStateFromJSONTyped(json: any, ignoreDiscriminator: boolean): OrchestratorChallengeState {\n return json as OrchestratorChallengeState;\n}\n\nexport function OrchestratorChallengeStateToJSON(value?: OrchestratorChallengeState | null): any {\n return value as any;\n}\n\nexport function OrchestratorChallengeStateToJSONTyped(value: any, ignoreDiscriminator: boolean): OrchestratorChallengeState {\n return value as OrchestratorChallengeState;\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerExposedEndpointDto } from './HandlerExposedEndpointDto';\nimport {\n HandlerExposedEndpointDtoFromJSON,\n HandlerExposedEndpointDtoFromJSONTyped,\n HandlerExposedEndpointDtoToJSON,\n HandlerExposedEndpointDtoToJSONTyped,\n} from './HandlerExposedEndpointDto';\nimport type { OrchestratorChallengeState } from './OrchestratorChallengeState';\nimport {\n OrchestratorChallengeStateFromJSON,\n OrchestratorChallengeStateFromJSONTyped,\n OrchestratorChallengeStateToJSON,\n OrchestratorChallengeStateToJSONTyped,\n} from './OrchestratorChallengeState';\n\n/**\n * \n * @export\n * @interface HandlerChallengeInstanceDto\n */\nexport interface HandlerChallengeInstanceDto {\n /**\n * Endpoints that are exposed to the participant.\n * @type {Array}\n * @memberof HandlerChallengeInstanceDto\n */\n exposedEndpoints: Array;\n /**\n * The timestamp when the challenge instance will be stopped without prior prolonging.\n * @type {string}\n * @memberof HandlerChallengeInstanceDto\n */\n scheduledStopTime: string;\n /**\n * The state of the challenge. Is it stopped, starting, etc.?\n * @type {OrchestratorChallengeState}\n * @memberof HandlerChallengeInstanceDto\n */\n state: OrchestratorChallengeState;\n}\n\n\n\n/**\n * Check if a given object implements the HandlerChallengeInstanceDto interface.\n */\nexport function instanceOfHandlerChallengeInstanceDto(value: object): value is HandlerChallengeInstanceDto {\n if (!('exposedEndpoints' in value) || value['exposedEndpoints'] === undefined) return false;\n if (!('scheduledStopTime' in value) || value['scheduledStopTime'] === undefined) return false;\n if (!('state' in value) || value['state'] === undefined) return false;\n return true;\n}\n\nexport function HandlerChallengeInstanceDtoFromJSON(json: any): HandlerChallengeInstanceDto {\n return HandlerChallengeInstanceDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerChallengeInstanceDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerChallengeInstanceDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'exposedEndpoints': ((json['exposedEndpoints'] as Array).map(HandlerExposedEndpointDtoFromJSON)),\n 'scheduledStopTime': json['scheduledStopTime'],\n 'state': OrchestratorChallengeStateFromJSON(json['state']),\n };\n}\n\n export function HandlerChallengeInstanceDtoToJSON(json: any): HandlerChallengeInstanceDto {\n return HandlerChallengeInstanceDtoToJSONTyped(json, false);\n }\n\n export function HandlerChallengeInstanceDtoToJSONTyped(value?: HandlerChallengeInstanceDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'exposedEndpoints': ((value['exposedEndpoints'] as Array).map(HandlerExposedEndpointDtoToJSON)),\n 'scheduledStopTime': value['scheduledStopTime'],\n 'state': OrchestratorChallengeStateToJSON(value['state']),\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { ChallengeDifficulty } from './ChallengeDifficulty';\nimport {\n ChallengeDifficultyFromJSON,\n ChallengeDifficultyFromJSONTyped,\n ChallengeDifficultyToJSON,\n ChallengeDifficultyToJSONTyped,\n} from './ChallengeDifficulty';\n\n/**\n * The response for a single challenge.\n * @export\n * @interface HandlerChallengeResponse\n */\nexport interface HandlerChallengeResponse {\n /**\n * The unique slug of the category.\n * @type {string}\n * @memberof HandlerChallengeResponse\n */\n categorySlug: string;\n /**\n * The difficulty of the challenge.\n * @type {ChallengeDifficulty}\n * @memberof HandlerChallengeResponse\n */\n difficulty: ChallengeDifficulty;\n /**\n * The name of the challenge.\n * @type {string}\n * @memberof HandlerChallengeResponse\n */\n name: string;\n /**\n * The order of the challenge within the category.\n * @type {number}\n * @memberof HandlerChallengeResponse\n */\n order: number;\n /**\n * The slug of the challenge. It is unique for its category.\n * @type {string}\n * @memberof HandlerChallengeResponse\n */\n slug: string;\n}\n\n\n\n/**\n * Check if a given object implements the HandlerChallengeResponse interface.\n */\nexport function instanceOfHandlerChallengeResponse(value: object): value is HandlerChallengeResponse {\n if (!('categorySlug' in value) || value['categorySlug'] === undefined) return false;\n if (!('difficulty' in value) || value['difficulty'] === undefined) return false;\n if (!('name' in value) || value['name'] === undefined) return false;\n if (!('order' in value) || value['order'] === undefined) return false;\n if (!('slug' in value) || value['slug'] === undefined) return false;\n return true;\n}\n\nexport function HandlerChallengeResponseFromJSON(json: any): HandlerChallengeResponse {\n return HandlerChallengeResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerChallengeResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerChallengeResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'categorySlug': json['categorySlug'],\n 'difficulty': ChallengeDifficultyFromJSON(json['difficulty']),\n 'name': json['name'],\n 'order': json['order'],\n 'slug': json['slug'],\n };\n}\n\n export function HandlerChallengeResponseToJSON(json: any): HandlerChallengeResponse {\n return HandlerChallengeResponseToJSONTyped(json, false);\n }\n\n export function HandlerChallengeResponseToJSONTyped(value?: HandlerChallengeResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'categorySlug': value['categorySlug'],\n 'difficulty': ChallengeDifficultyToJSON(value['difficulty']),\n 'name': value['name'],\n 'order': value['order'],\n 'slug': value['slug'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerChallengeScoreDto\n */\nexport interface HandlerChallengeScoreDto {\n /**\n * Whether the current participant has completed the challenge.\n * @type {boolean}\n * @memberof HandlerChallengeScoreDto\n */\n isCompleted: boolean;\n /**\n * The participants points.\n * @type {number}\n * @memberof HandlerChallengeScoreDto\n */\n points: number;\n /**\n * The total reachable points for this challenge.\n * @type {number}\n * @memberof HandlerChallengeScoreDto\n */\n pointsTotal: number;\n /**\n * The participant's number of solved flags.\n * @type {number}\n * @memberof HandlerChallengeScoreDto\n */\n solvedFlags: number;\n /**\n * The number of flags for the challenge.\n * @type {number}\n * @memberof HandlerChallengeScoreDto\n */\n totalFlags: number;\n}\n\n/**\n * Check if a given object implements the HandlerChallengeScoreDto interface.\n */\nexport function instanceOfHandlerChallengeScoreDto(value: object): value is HandlerChallengeScoreDto {\n if (!('isCompleted' in value) || value['isCompleted'] === undefined) return false;\n if (!('points' in value) || value['points'] === undefined) return false;\n if (!('pointsTotal' in value) || value['pointsTotal'] === undefined) return false;\n if (!('solvedFlags' in value) || value['solvedFlags'] === undefined) return false;\n if (!('totalFlags' in value) || value['totalFlags'] === undefined) return false;\n return true;\n}\n\nexport function HandlerChallengeScoreDtoFromJSON(json: any): HandlerChallengeScoreDto {\n return HandlerChallengeScoreDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerChallengeScoreDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerChallengeScoreDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'isCompleted': json['isCompleted'],\n 'points': json['points'],\n 'pointsTotal': json['pointsTotal'],\n 'solvedFlags': json['solvedFlags'],\n 'totalFlags': json['totalFlags'],\n };\n}\n\n export function HandlerChallengeScoreDtoToJSON(json: any): HandlerChallengeScoreDto {\n return HandlerChallengeScoreDtoToJSONTyped(json, false);\n }\n\n export function HandlerChallengeScoreDtoToJSONTyped(value?: HandlerChallengeScoreDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'isCompleted': value['isCompleted'],\n 'points': value['points'],\n 'pointsTotal': value['pointsTotal'],\n 'solvedFlags': value['solvedFlags'],\n 'totalFlags': value['totalFlags'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\n/**\n * \n * @export\n */\nexport const HandlerErrorCode = {\n errorCodeUnknown: 'UNKNOWN',\n errorCodeNotFound: 'NOT_FOUND',\n errorCodeValidationFailed: 'VALIDATION_FAILED',\n errorCodeNoScoreGroupSelected: 'NO_SCORE_GROUP_SELECTED',\n errorCodeAccessTimeRestricted: 'TIME_RESTRICTED',\n errorCodeMaximumNumberChallengeInstancesReached: 'MAXIMUM_NUMBER_CHALLENGE_INSTANCES_REACHED',\n errorCodeCannotProlongChallengeInstance: 'CANNOT_PROLONG_CHALLENGE_INSTANCE'\n} as const;\nexport type HandlerErrorCode = typeof HandlerErrorCode[keyof typeof HandlerErrorCode];\n\n\nexport function instanceOfHandlerErrorCode(value: any): boolean {\n for (const key in HandlerErrorCode) {\n if (Object.prototype.hasOwnProperty.call(HandlerErrorCode, key)) {\n if (HandlerErrorCode[key as keyof typeof HandlerErrorCode] === value) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function HandlerErrorCodeFromJSON(json: any): HandlerErrorCode {\n return HandlerErrorCodeFromJSONTyped(json, false);\n}\n\nexport function HandlerErrorCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerErrorCode {\n return json as HandlerErrorCode;\n}\n\nexport function HandlerErrorCodeToJSON(value?: HandlerErrorCode | null): any {\n return value as any;\n}\n\nexport function HandlerErrorCodeToJSONTyped(value: any, ignoreDiscriminator: boolean): HandlerErrorCode {\n return value as HandlerErrorCode;\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerErrorCode } from './HandlerErrorCode';\nimport {\n HandlerErrorCodeFromJSON,\n HandlerErrorCodeFromJSONTyped,\n HandlerErrorCodeToJSON,\n HandlerErrorCodeToJSONTyped,\n} from './HandlerErrorCode';\n\n/**\n * \n * @export\n * @interface HandlerErrorResponse\n */\nexport interface HandlerErrorResponse {\n /**\n * An error code.\n * @type {HandlerErrorCode}\n * @memberof HandlerErrorResponse\n */\n code: HandlerErrorCode;\n /**\n * A descriptive message.\n * @type {string}\n * @memberof HandlerErrorResponse\n */\n message: string;\n /**\n * Whether the request was successful.\n * @type {boolean}\n * @memberof HandlerErrorResponse\n */\n ok: boolean;\n}\n\n\n\n/**\n * Check if a given object implements the HandlerErrorResponse interface.\n */\nexport function instanceOfHandlerErrorResponse(value: object): value is HandlerErrorResponse {\n if (!('code' in value) || value['code'] === undefined) return false;\n if (!('message' in value) || value['message'] === undefined) return false;\n if (!('ok' in value) || value['ok'] === undefined) return false;\n return true;\n}\n\nexport function HandlerErrorResponseFromJSON(json: any): HandlerErrorResponse {\n return HandlerErrorResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerErrorResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerErrorResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'code': HandlerErrorCodeFromJSON(json['code']),\n 'message': json['message'],\n 'ok': json['ok'],\n };\n}\n\n export function HandlerErrorResponseToJSON(json: any): HandlerErrorResponse {\n return HandlerErrorResponseToJSONTyped(json, false);\n }\n\n export function HandlerErrorResponseToJSONTyped(value?: HandlerErrorResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'code': HandlerErrorCodeToJSON(value['code']),\n 'message': value['message'],\n 'ok': value['ok'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * A flag submission.\n * @export\n * @interface HandlerFlagSubmission\n */\nexport interface HandlerFlagSubmission {\n /**\n * \n * @type {string}\n * @memberof HandlerFlagSubmission\n */\n flag: string;\n}\n\n/**\n * Check if a given object implements the HandlerFlagSubmission interface.\n */\nexport function instanceOfHandlerFlagSubmission(value: object): value is HandlerFlagSubmission {\n if (!('flag' in value) || value['flag'] === undefined) return false;\n return true;\n}\n\nexport function HandlerFlagSubmissionFromJSON(json: any): HandlerFlagSubmission {\n return HandlerFlagSubmissionFromJSONTyped(json, false);\n}\n\nexport function HandlerFlagSubmissionFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerFlagSubmission {\n if (json == null) {\n return json;\n }\n return {\n \n 'flag': json['flag'],\n };\n}\n\n export function HandlerFlagSubmissionToJSON(json: any): HandlerFlagSubmission {\n return HandlerFlagSubmissionToJSONTyped(json, false);\n }\n\n export function HandlerFlagSubmissionToJSONTyped(value?: HandlerFlagSubmission | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'flag': value['flag'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\n/**\n * \n * @export\n */\nexport const SubmissionStatus = {\n Accepted: 1,\n Rejected: 2,\n Resubmitted: 3\n} as const;\nexport type SubmissionStatus = typeof SubmissionStatus[keyof typeof SubmissionStatus];\n\n\nexport function instanceOfSubmissionStatus(value: any): boolean {\n for (const key in SubmissionStatus) {\n if (Object.prototype.hasOwnProperty.call(SubmissionStatus, key)) {\n if (SubmissionStatus[key as keyof typeof SubmissionStatus] === value) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function SubmissionStatusFromJSON(json: any): SubmissionStatus {\n return SubmissionStatusFromJSONTyped(json, false);\n}\n\nexport function SubmissionStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): SubmissionStatus {\n return json as SubmissionStatus;\n}\n\nexport function SubmissionStatusToJSON(value?: SubmissionStatus | null): any {\n return value as any;\n}\n\nexport function SubmissionStatusToJSONTyped(value: any, ignoreDiscriminator: boolean): SubmissionStatus {\n return value as SubmissionStatus;\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { SubmissionStatus } from './SubmissionStatus';\nimport {\n SubmissionStatusFromJSON,\n SubmissionStatusFromJSONTyped,\n SubmissionStatusToJSON,\n SubmissionStatusToJSONTyped,\n} from './SubmissionStatus';\n\n/**\n * A flag submission response.\n * @export\n * @interface HandlerFlagSubmissionResponse\n */\nexport interface HandlerFlagSubmissionResponse {\n /**\n * Whether the flag was accepted.\n * @type {SubmissionStatus}\n * @memberof HandlerFlagSubmissionResponse\n */\n status: SubmissionStatus;\n}\n\n\n\n/**\n * Check if a given object implements the HandlerFlagSubmissionResponse interface.\n */\nexport function instanceOfHandlerFlagSubmissionResponse(value: object): value is HandlerFlagSubmissionResponse {\n if (!('status' in value) || value['status'] === undefined) return false;\n return true;\n}\n\nexport function HandlerFlagSubmissionResponseFromJSON(json: any): HandlerFlagSubmissionResponse {\n return HandlerFlagSubmissionResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerFlagSubmissionResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerFlagSubmissionResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'status': SubmissionStatusFromJSON(json['status']),\n };\n}\n\n export function HandlerFlagSubmissionResponseToJSON(json: any): HandlerFlagSubmissionResponse {\n return HandlerFlagSubmissionResponseToJSONTyped(json, false);\n }\n\n export function HandlerFlagSubmissionResponseToJSONTyped(value?: HandlerFlagSubmissionResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'status': SubmissionStatusToJSON(value['status']),\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * The response containing whether the flugzeug is enabled.\n * @export\n * @interface HandlerFlugzeugEnabledResponse\n */\nexport interface HandlerFlugzeugEnabledResponse {\n /**\n * Whether the flugzeug is enabled.\n * @type {boolean}\n * @memberof HandlerFlugzeugEnabledResponse\n */\n enabled: boolean;\n}\n\n/**\n * Check if a given object implements the HandlerFlugzeugEnabledResponse interface.\n */\nexport function instanceOfHandlerFlugzeugEnabledResponse(value: object): value is HandlerFlugzeugEnabledResponse {\n if (!('enabled' in value) || value['enabled'] === undefined) return false;\n return true;\n}\n\nexport function HandlerFlugzeugEnabledResponseFromJSON(json: any): HandlerFlugzeugEnabledResponse {\n return HandlerFlugzeugEnabledResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerFlugzeugEnabledResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerFlugzeugEnabledResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'enabled': json['enabled'],\n };\n}\n\n export function HandlerFlugzeugEnabledResponseToJSON(json: any): HandlerFlugzeugEnabledResponse {\n return HandlerFlugzeugEnabledResponseToJSONTyped(json, false);\n }\n\n export function HandlerFlugzeugEnabledResponseToJSONTyped(value?: HandlerFlugzeugEnabledResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'enabled': value['enabled'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\n/**\n * \n * @export\n */\nexport const UserFlugzeugStatus = {\n Provisioning: 'provisioning',\n Starting: 'starting',\n Running: 'running',\n Stopping: 'stopping',\n Stopped: 'stopped',\n Error: 'error'\n} as const;\nexport type UserFlugzeugStatus = typeof UserFlugzeugStatus[keyof typeof UserFlugzeugStatus];\n\n\nexport function instanceOfUserFlugzeugStatus(value: any): boolean {\n for (const key in UserFlugzeugStatus) {\n if (Object.prototype.hasOwnProperty.call(UserFlugzeugStatus, key)) {\n if (UserFlugzeugStatus[key as keyof typeof UserFlugzeugStatus] === value) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function UserFlugzeugStatusFromJSON(json: any): UserFlugzeugStatus {\n return UserFlugzeugStatusFromJSONTyped(json, false);\n}\n\nexport function UserFlugzeugStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): UserFlugzeugStatus {\n return json as UserFlugzeugStatus;\n}\n\nexport function UserFlugzeugStatusToJSON(value?: UserFlugzeugStatus | null): any {\n return value as any;\n}\n\nexport function UserFlugzeugStatusToJSONTyped(value: any, ignoreDiscriminator: boolean): UserFlugzeugStatus {\n return value as UserFlugzeugStatus;\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { UserFlugzeugStatus } from './UserFlugzeugStatus';\nimport {\n UserFlugzeugStatusFromJSON,\n UserFlugzeugStatusFromJSONTyped,\n UserFlugzeugStatusToJSON,\n UserFlugzeugStatusToJSONTyped,\n} from './UserFlugzeugStatus';\n\n/**\n * The flugzeug response for the user.\n * @export\n * @interface HandlerFlugzeugResponse\n */\nexport interface HandlerFlugzeugResponse {\n /**\n * The current status of the flugzeug.\n * @type {UserFlugzeugStatus}\n * @memberof HandlerFlugzeugResponse\n */\n status: UserFlugzeugStatus;\n /**\n * The timestamp at which the flugzeug will be stopped as UTC timestamp.\n * @type {string}\n * @memberof HandlerFlugzeugResponse\n */\n stopTimestamp: string;\n /**\n * The URL at which the flugzeug can be controlled.\n * @type {string}\n * @memberof HandlerFlugzeugResponse\n */\n url: string;\n}\n\n\n\n/**\n * Check if a given object implements the HandlerFlugzeugResponse interface.\n */\nexport function instanceOfHandlerFlugzeugResponse(value: object): value is HandlerFlugzeugResponse {\n if (!('status' in value) || value['status'] === undefined) return false;\n if (!('stopTimestamp' in value) || value['stopTimestamp'] === undefined) return false;\n if (!('url' in value) || value['url'] === undefined) return false;\n return true;\n}\n\nexport function HandlerFlugzeugResponseFromJSON(json: any): HandlerFlugzeugResponse {\n return HandlerFlugzeugResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerFlugzeugResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerFlugzeugResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'status': UserFlugzeugStatusFromJSON(json['status']),\n 'stopTimestamp': json['stopTimestamp'],\n 'url': json['url'],\n };\n}\n\n export function HandlerFlugzeugResponseToJSON(json: any): HandlerFlugzeugResponse {\n return HandlerFlugzeugResponseToJSONTyped(json, false);\n }\n\n export function HandlerFlugzeugResponseToJSONTyped(value?: HandlerFlugzeugResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'status': UserFlugzeugStatusToJSON(value['status']),\n 'stopTimestamp': value['stopTimestamp'],\n 'url': value['url'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerHealthResponseDetail\n */\nexport interface HandlerHealthResponseDetail {\n /**\n * \n * @type {string}\n * @memberof HandlerHealthResponseDetail\n */\n description: string;\n /**\n * The API version (only when operational)\n * @type {string}\n * @memberof HandlerHealthResponseDetail\n */\n release?: string;\n}\n\n/**\n * Check if a given object implements the HandlerHealthResponseDetail interface.\n */\nexport function instanceOfHandlerHealthResponseDetail(value: object): value is HandlerHealthResponseDetail {\n if (!('description' in value) || value['description'] === undefined) return false;\n return true;\n}\n\nexport function HandlerHealthResponseDetailFromJSON(json: any): HandlerHealthResponseDetail {\n return HandlerHealthResponseDetailFromJSONTyped(json, false);\n}\n\nexport function HandlerHealthResponseDetailFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerHealthResponseDetail {\n if (json == null) {\n return json;\n }\n return {\n \n 'description': json['description'],\n 'release': json['release'] == null ? undefined : json['release'],\n };\n}\n\n export function HandlerHealthResponseDetailToJSON(json: any): HandlerHealthResponseDetail {\n return HandlerHealthResponseDetailToJSONTyped(json, false);\n }\n\n export function HandlerHealthResponseDetailToJSONTyped(value?: HandlerHealthResponseDetail | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'description': value['description'],\n 'release': value['release'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerHealthResponseDetail } from './HandlerHealthResponseDetail';\nimport {\n HandlerHealthResponseDetailFromJSON,\n HandlerHealthResponseDetailFromJSONTyped,\n HandlerHealthResponseDetailToJSON,\n HandlerHealthResponseDetailToJSONTyped,\n} from './HandlerHealthResponseDetail';\n\n/**\n * The health response.\n * @export\n * @interface HandlerHealthResponse\n */\nexport interface HandlerHealthResponse {\n /**\n * Additional details regarding the health status.\n * @type {HandlerHealthResponseDetail}\n * @memberof HandlerHealthResponse\n */\n detail: HandlerHealthResponseDetail;\n /**\n * General status of the API:\n * * operational - The API is functional.\n * * degraded - The API is not available.\n * @type {string}\n * @memberof HandlerHealthResponse\n */\n message: HandlerHealthResponseMessageEnum;\n}\n\n\n/**\n * @export\n */\nexport const HandlerHealthResponseMessageEnum = {\n Operational: 'operational',\n Degraded: 'degraded'\n} as const;\nexport type HandlerHealthResponseMessageEnum = typeof HandlerHealthResponseMessageEnum[keyof typeof HandlerHealthResponseMessageEnum];\n\n\n/**\n * Check if a given object implements the HandlerHealthResponse interface.\n */\nexport function instanceOfHandlerHealthResponse(value: object): value is HandlerHealthResponse {\n if (!('detail' in value) || value['detail'] === undefined) return false;\n if (!('message' in value) || value['message'] === undefined) return false;\n return true;\n}\n\nexport function HandlerHealthResponseFromJSON(json: any): HandlerHealthResponse {\n return HandlerHealthResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerHealthResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerHealthResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'detail': HandlerHealthResponseDetailFromJSON(json['detail']),\n 'message': json['message'],\n };\n}\n\n export function HandlerHealthResponseToJSON(json: any): HandlerHealthResponse {\n return HandlerHealthResponseToJSONTyped(json, false);\n }\n\n export function HandlerHealthResponseToJSONTyped(value?: HandlerHealthResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'detail': HandlerHealthResponseDetailToJSON(value['detail']),\n 'message': value['message'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * The metadata response.\n * @export\n * @interface HandlerMetadataResponse\n */\nexport interface HandlerMetadataResponse {\n /**\n * \n * @type {string}\n * @memberof HandlerMetadataResponse\n */\n ctfEnd: string;\n /**\n * \n * @type {string}\n * @memberof HandlerMetadataResponse\n */\n ctfPostPlayEnd: string;\n /**\n * \n * @type {string}\n * @memberof HandlerMetadataResponse\n */\n ctfStart: string;\n /**\n * \n * @type {string}\n * @memberof HandlerMetadataResponse\n */\n flagPrefix: string;\n}\n\n/**\n * Check if a given object implements the HandlerMetadataResponse interface.\n */\nexport function instanceOfHandlerMetadataResponse(value: object): value is HandlerMetadataResponse {\n if (!('ctfEnd' in value) || value['ctfEnd'] === undefined) return false;\n if (!('ctfPostPlayEnd' in value) || value['ctfPostPlayEnd'] === undefined) return false;\n if (!('ctfStart' in value) || value['ctfStart'] === undefined) return false;\n if (!('flagPrefix' in value) || value['flagPrefix'] === undefined) return false;\n return true;\n}\n\nexport function HandlerMetadataResponseFromJSON(json: any): HandlerMetadataResponse {\n return HandlerMetadataResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerMetadataResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerMetadataResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'ctfEnd': json['ctfEnd'],\n 'ctfPostPlayEnd': json['ctfPostPlayEnd'],\n 'ctfStart': json['ctfStart'],\n 'flagPrefix': json['flagPrefix'],\n };\n}\n\n export function HandlerMetadataResponseToJSON(json: any): HandlerMetadataResponse {\n return HandlerMetadataResponseToJSONTyped(json, false);\n }\n\n export function HandlerMetadataResponseToJSONTyped(value?: HandlerMetadataResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'ctfEnd': value['ctfEnd'],\n 'ctfPostPlayEnd': value['ctfPostPlayEnd'],\n 'ctfStart': value['ctfStart'],\n 'flagPrefix': value['flagPrefix'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerScoreGroupDto\n */\nexport interface HandlerScoreGroupDto {\n /**\n * A description of the score group. Can be markdown.\n * @type {string}\n * @memberof HandlerScoreGroupDto\n */\n description: string;\n /**\n * The display name of the score group.\n * @type {string}\n * @memberof HandlerScoreGroupDto\n */\n name: string;\n /**\n * The identifier of the score group.\n * @type {string}\n * @memberof HandlerScoreGroupDto\n */\n slug: string;\n}\n\n/**\n * Check if a given object implements the HandlerScoreGroupDto interface.\n */\nexport function instanceOfHandlerScoreGroupDto(value: object): value is HandlerScoreGroupDto {\n if (!('description' in value) || value['description'] === undefined) return false;\n if (!('name' in value) || value['name'] === undefined) return false;\n if (!('slug' in value) || value['slug'] === undefined) return false;\n return true;\n}\n\nexport function HandlerScoreGroupDtoFromJSON(json: any): HandlerScoreGroupDto {\n return HandlerScoreGroupDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerScoreGroupDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerScoreGroupDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'description': json['description'],\n 'name': json['name'],\n 'slug': json['slug'],\n };\n}\n\n export function HandlerScoreGroupDtoToJSON(json: any): HandlerScoreGroupDto {\n return HandlerScoreGroupDtoToJSONTyped(json, false);\n }\n\n export function HandlerScoreGroupDtoToJSONTyped(value?: HandlerScoreGroupDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'description': value['description'],\n 'name': value['name'],\n 'slug': value['slug'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerScoreboardEntryDto\n */\nexport interface HandlerScoreboardEntryDto {\n /**\n * The number of solved flags.\n * @type {number}\n * @memberof HandlerScoreboardEntryDto\n */\n flags: number;\n /**\n * The ID of the participant.\n * @type {string}\n * @memberof HandlerScoreboardEntryDto\n */\n participantId: string;\n /**\n * The Name of the participant.\n * @type {string}\n * @memberof HandlerScoreboardEntryDto\n */\n participantName: string;\n /**\n * The participant's points.\n * @type {number}\n * @memberof HandlerScoreboardEntryDto\n */\n points: number;\n /**\n * The participant's rank.\n * @type {number}\n * @memberof HandlerScoreboardEntryDto\n */\n rank: number;\n}\n\n/**\n * Check if a given object implements the HandlerScoreboardEntryDto interface.\n */\nexport function instanceOfHandlerScoreboardEntryDto(value: object): value is HandlerScoreboardEntryDto {\n if (!('flags' in value) || value['flags'] === undefined) return false;\n if (!('participantId' in value) || value['participantId'] === undefined) return false;\n if (!('participantName' in value) || value['participantName'] === undefined) return false;\n if (!('points' in value) || value['points'] === undefined) return false;\n if (!('rank' in value) || value['rank'] === undefined) return false;\n return true;\n}\n\nexport function HandlerScoreboardEntryDtoFromJSON(json: any): HandlerScoreboardEntryDto {\n return HandlerScoreboardEntryDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerScoreboardEntryDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerScoreboardEntryDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'flags': json['flags'],\n 'participantId': json['participantId'],\n 'participantName': json['participantName'],\n 'points': json['points'],\n 'rank': json['rank'],\n };\n}\n\n export function HandlerScoreboardEntryDtoToJSON(json: any): HandlerScoreboardEntryDto {\n return HandlerScoreboardEntryDtoToJSONTyped(json, false);\n }\n\n export function HandlerScoreboardEntryDtoToJSONTyped(value?: HandlerScoreboardEntryDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'flags': value['flags'],\n 'participantId': value['participantId'],\n 'participantName': value['participantName'],\n 'points': value['points'],\n 'rank': value['rank'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerScoreboardEntryDto } from './HandlerScoreboardEntryDto';\nimport {\n HandlerScoreboardEntryDtoFromJSON,\n HandlerScoreboardEntryDtoFromJSONTyped,\n HandlerScoreboardEntryDtoToJSON,\n HandlerScoreboardEntryDtoToJSONTyped,\n} from './HandlerScoreboardEntryDto';\n\n/**\n * \n * @export\n * @interface HandlerScoreboardDto\n */\nexport interface HandlerScoreboardDto {\n /**\n * The collection of scoreboard entries.\n * @type {Array}\n * @memberof HandlerScoreboardDto\n */\n entries: Array;\n}\n\n/**\n * Check if a given object implements the HandlerScoreboardDto interface.\n */\nexport function instanceOfHandlerScoreboardDto(value: object): value is HandlerScoreboardDto {\n if (!('entries' in value) || value['entries'] === undefined) return false;\n return true;\n}\n\nexport function HandlerScoreboardDtoFromJSON(json: any): HandlerScoreboardDto {\n return HandlerScoreboardDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerScoreboardDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerScoreboardDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'entries': ((json['entries'] as Array).map(HandlerScoreboardEntryDtoFromJSON)),\n };\n}\n\n export function HandlerScoreboardDtoToJSON(json: any): HandlerScoreboardDto {\n return HandlerScoreboardDtoToJSONTyped(json, false);\n }\n\n export function HandlerScoreboardDtoToJSONTyped(value?: HandlerScoreboardDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'entries': ((value['entries'] as Array).map(HandlerScoreboardEntryDtoToJSON)),\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerSelectScoreGroupDto\n */\nexport interface HandlerSelectScoreGroupDto {\n /**\n * The slug of the score group to select.\n * @type {string}\n * @memberof HandlerSelectScoreGroupDto\n */\n scoreGroup: string;\n}\n\n/**\n * Check if a given object implements the HandlerSelectScoreGroupDto interface.\n */\nexport function instanceOfHandlerSelectScoreGroupDto(value: object): value is HandlerSelectScoreGroupDto {\n if (!('scoreGroup' in value) || value['scoreGroup'] === undefined) return false;\n return true;\n}\n\nexport function HandlerSelectScoreGroupDtoFromJSON(json: any): HandlerSelectScoreGroupDto {\n return HandlerSelectScoreGroupDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerSelectScoreGroupDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerSelectScoreGroupDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'scoreGroup': json['scoreGroup'],\n };\n}\n\n export function HandlerSelectScoreGroupDtoToJSON(json: any): HandlerSelectScoreGroupDto {\n return HandlerSelectScoreGroupDtoToJSONTyped(json, false);\n }\n\n export function HandlerSelectScoreGroupDtoToJSONTyped(value?: HandlerSelectScoreGroupDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'scoreGroup': value['scoreGroup'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { ChallengeDifficulty } from './ChallengeDifficulty';\nimport {\n ChallengeDifficultyFromJSON,\n ChallengeDifficultyFromJSONTyped,\n ChallengeDifficultyToJSON,\n ChallengeDifficultyToJSONTyped,\n} from './ChallengeDifficulty';\n\n/**\n * The response for a single challenge.\n * @export\n * @interface HandlerSingleChallengeResponse\n */\nexport interface HandlerSingleChallengeResponse {\n /**\n * \n * @type {boolean}\n * @memberof HandlerSingleChallengeResponse\n */\n canBeStarted?: boolean;\n /**\n * The unique slug of the category.\n * @type {string}\n * @memberof HandlerSingleChallengeResponse\n */\n categorySlug: string;\n /**\n * The description of the challenge.\n * @type {string}\n * @memberof HandlerSingleChallengeResponse\n */\n description: string;\n /**\n * The difficulty of the challenge.\n * @type {ChallengeDifficulty}\n * @memberof HandlerSingleChallengeResponse\n */\n difficulty: ChallengeDifficulty;\n /**\n * The name of the challenge.\n * @type {string}\n * @memberof HandlerSingleChallengeResponse\n */\n name: string;\n /**\n * The order of the challenge within the category.\n * @type {number}\n * @memberof HandlerSingleChallengeResponse\n */\n order: number;\n /**\n * The slug of the challenge. It is unique for its category.\n * @type {string}\n * @memberof HandlerSingleChallengeResponse\n */\n slug: string;\n /**\n * The full URL to the archive of static files associated with this challenge.\n * `null` if there are no static files associated to this challenge.\n * @type {string}\n * @memberof HandlerSingleChallengeResponse\n */\n staticFilesArchiveUrl?: string;\n}\n\n\n\n/**\n * Check if a given object implements the HandlerSingleChallengeResponse interface.\n */\nexport function instanceOfHandlerSingleChallengeResponse(value: object): value is HandlerSingleChallengeResponse {\n if (!('categorySlug' in value) || value['categorySlug'] === undefined) return false;\n if (!('description' in value) || value['description'] === undefined) return false;\n if (!('difficulty' in value) || value['difficulty'] === undefined) return false;\n if (!('name' in value) || value['name'] === undefined) return false;\n if (!('order' in value) || value['order'] === undefined) return false;\n if (!('slug' in value) || value['slug'] === undefined) return false;\n return true;\n}\n\nexport function HandlerSingleChallengeResponseFromJSON(json: any): HandlerSingleChallengeResponse {\n return HandlerSingleChallengeResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerSingleChallengeResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerSingleChallengeResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'canBeStarted': json['canBeStarted'] == null ? undefined : json['canBeStarted'],\n 'categorySlug': json['categorySlug'],\n 'description': json['description'],\n 'difficulty': ChallengeDifficultyFromJSON(json['difficulty']),\n 'name': json['name'],\n 'order': json['order'],\n 'slug': json['slug'],\n 'staticFilesArchiveUrl': json['staticFilesArchiveUrl'] == null ? undefined : json['staticFilesArchiveUrl'],\n };\n}\n\n export function HandlerSingleChallengeResponseToJSON(json: any): HandlerSingleChallengeResponse {\n return HandlerSingleChallengeResponseToJSONTyped(json, false);\n }\n\n export function HandlerSingleChallengeResponseToJSONTyped(value?: HandlerSingleChallengeResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'canBeStarted': value['canBeStarted'],\n 'categorySlug': value['categorySlug'],\n 'description': value['description'],\n 'difficulty': ChallengeDifficultyToJSON(value['difficulty']),\n 'name': value['name'],\n 'order': value['order'],\n 'slug': value['slug'],\n 'staticFilesArchiveUrl': value['staticFilesArchiveUrl'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerCategorySolvesDto } from './HandlerCategorySolvesDto';\nimport {\n HandlerCategorySolvesDtoFromJSON,\n HandlerCategorySolvesDtoFromJSONTyped,\n HandlerCategorySolvesDtoToJSON,\n HandlerCategorySolvesDtoToJSONTyped,\n} from './HandlerCategorySolvesDto';\n\n/**\n * \n * @export\n * @interface HandlerSolveTimesDto\n */\nexport interface HandlerSolveTimesDto {\n /**\n * The categories.\n * @type {Array}\n * @memberof HandlerSolveTimesDto\n */\n categories: Array;\n}\n\n/**\n * Check if a given object implements the HandlerSolveTimesDto interface.\n */\nexport function instanceOfHandlerSolveTimesDto(value: object): value is HandlerSolveTimesDto {\n if (!('categories' in value) || value['categories'] === undefined) return false;\n return true;\n}\n\nexport function HandlerSolveTimesDtoFromJSON(json: any): HandlerSolveTimesDto {\n return HandlerSolveTimesDtoFromJSONTyped(json, false);\n}\n\nexport function HandlerSolveTimesDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerSolveTimesDto {\n if (json == null) {\n return json;\n }\n return {\n \n 'categories': ((json['categories'] as Array).map(HandlerCategorySolvesDtoFromJSON)),\n };\n}\n\n export function HandlerSolveTimesDtoToJSON(json: any): HandlerSolveTimesDto {\n return HandlerSolveTimesDtoToJSONTyped(json, false);\n }\n\n export function HandlerSolveTimesDtoToJSONTyped(value?: HandlerSolveTimesDto | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'categories': ((value['categories'] as Array).map(HandlerCategorySolvesDtoToJSON)),\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerChallengeIdentifier } from './HandlerChallengeIdentifier';\nimport {\n HandlerChallengeIdentifierFromJSON,\n HandlerChallengeIdentifierFromJSONTyped,\n HandlerChallengeIdentifierToJSON,\n HandlerChallengeIdentifierToJSONTyped,\n} from './HandlerChallengeIdentifier';\n\n/**\n * \n * @export\n * @interface HandlerUserRunningChallenges\n */\nexport interface HandlerUserRunningChallenges {\n /**\n * The maximum number of challenge instances that are allowed to run simultaneously.\n * If unset or null, the number of challenges is not restricted.\n * @type {number}\n * @memberof HandlerUserRunningChallenges\n */\n maximum?: number | null;\n /**\n * The currently running challenge instances.\n * @type {Array}\n * @memberof HandlerUserRunningChallenges\n */\n running: Array;\n}\n\n/**\n * Check if a given object implements the HandlerUserRunningChallenges interface.\n */\nexport function instanceOfHandlerUserRunningChallenges(value: object): value is HandlerUserRunningChallenges {\n if (!('running' in value) || value['running'] === undefined) return false;\n return true;\n}\n\nexport function HandlerUserRunningChallengesFromJSON(json: any): HandlerUserRunningChallenges {\n return HandlerUserRunningChallengesFromJSONTyped(json, false);\n}\n\nexport function HandlerUserRunningChallengesFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerUserRunningChallenges {\n if (json == null) {\n return json;\n }\n return {\n \n 'maximum': json['maximum'] == null ? undefined : json['maximum'],\n 'running': ((json['running'] as Array).map(HandlerChallengeIdentifierFromJSON)),\n };\n}\n\n export function HandlerUserRunningChallengesToJSON(json: any): HandlerUserRunningChallenges {\n return HandlerUserRunningChallengesToJSONTyped(json, false);\n }\n\n export function HandlerUserRunningChallengesToJSONTyped(value?: HandlerUserRunningChallenges | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'maximum': value['maximum'],\n 'running': ((value['running'] as Array).map(HandlerChallengeIdentifierToJSON)),\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerUserVPN\n */\nexport interface HandlerUserVPN {\n /**\n * \n * @type {boolean}\n * @memberof HandlerUserVPN\n */\n connected: boolean;\n /**\n * \n * @type {string}\n * @memberof HandlerUserVPN\n */\n ipv4Address: string;\n}\n\n/**\n * Check if a given object implements the HandlerUserVPN interface.\n */\nexport function instanceOfHandlerUserVPN(value: object): value is HandlerUserVPN {\n if (!('connected' in value) || value['connected'] === undefined) return false;\n if (!('ipv4Address' in value) || value['ipv4Address'] === undefined) return false;\n return true;\n}\n\nexport function HandlerUserVPNFromJSON(json: any): HandlerUserVPN {\n return HandlerUserVPNFromJSONTyped(json, false);\n}\n\nexport function HandlerUserVPNFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerUserVPN {\n if (json == null) {\n return json;\n }\n return {\n \n 'connected': json['connected'],\n 'ipv4Address': json['ipv4Address'],\n };\n}\n\n export function HandlerUserVPNToJSON(json: any): HandlerUserVPN {\n return HandlerUserVPNToJSONTyped(json, false);\n }\n\n export function HandlerUserVPNToJSONTyped(value?: HandlerUserVPN | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'connected': value['connected'],\n 'ipv4Address': value['ipv4Address'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface HandlerUserScore\n */\nexport interface HandlerUserScore {\n /**\n * The number of solved flags.\n * @type {number}\n * @memberof HandlerUserScore\n */\n numSolvedFlags: number;\n /**\n * The user's points.\n * @type {number}\n * @memberof HandlerUserScore\n */\n points: number;\n /**\n * The user's rank.\n * @type {number}\n * @memberof HandlerUserScore\n */\n rank: number;\n}\n\n/**\n * Check if a given object implements the HandlerUserScore interface.\n */\nexport function instanceOfHandlerUserScore(value: object): value is HandlerUserScore {\n if (!('numSolvedFlags' in value) || value['numSolvedFlags'] === undefined) return false;\n if (!('points' in value) || value['points'] === undefined) return false;\n if (!('rank' in value) || value['rank'] === undefined) return false;\n return true;\n}\n\nexport function HandlerUserScoreFromJSON(json: any): HandlerUserScore {\n return HandlerUserScoreFromJSONTyped(json, false);\n}\n\nexport function HandlerUserScoreFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerUserScore {\n if (json == null) {\n return json;\n }\n return {\n \n 'numSolvedFlags': json['numSolvedFlags'],\n 'points': json['points'],\n 'rank': json['rank'],\n };\n}\n\n export function HandlerUserScoreToJSON(json: any): HandlerUserScore {\n return HandlerUserScoreToJSONTyped(json, false);\n }\n\n export function HandlerUserScoreToJSONTyped(value?: HandlerUserScore | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'numSolvedFlags': value['numSolvedFlags'],\n 'points': value['points'],\n 'rank': value['rank'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\nimport type { HandlerUserRunningChallenges } from './HandlerUserRunningChallenges';\nimport {\n HandlerUserRunningChallengesFromJSON,\n HandlerUserRunningChallengesFromJSONTyped,\n HandlerUserRunningChallengesToJSON,\n HandlerUserRunningChallengesToJSONTyped,\n} from './HandlerUserRunningChallenges';\nimport type { HandlerChallengeIdentifier } from './HandlerChallengeIdentifier';\nimport {\n HandlerChallengeIdentifierFromJSON,\n HandlerChallengeIdentifierFromJSONTyped,\n HandlerChallengeIdentifierToJSON,\n HandlerChallengeIdentifierToJSONTyped,\n} from './HandlerChallengeIdentifier';\nimport type { HandlerUserVPN } from './HandlerUserVPN';\nimport {\n HandlerUserVPNFromJSON,\n HandlerUserVPNFromJSONTyped,\n HandlerUserVPNToJSON,\n HandlerUserVPNToJSONTyped,\n} from './HandlerUserVPN';\nimport type { HandlerUserScore } from './HandlerUserScore';\nimport {\n HandlerUserScoreFromJSON,\n HandlerUserScoreFromJSONTyped,\n HandlerUserScoreToJSON,\n HandlerUserScoreToJSONTyped,\n} from './HandlerUserScore';\n\n/**\n * The user response.\n * @export\n * @interface HandlerUserResponse\n */\nexport interface HandlerUserResponse {\n /**\n * The list of completed challenges for this participant.\n * @type {Array}\n * @memberof HandlerUserResponse\n */\n completedChallenges: Array;\n /**\n * The code used for identifying users in third-party systems.\n * @type {string}\n * @memberof HandlerUserResponse\n */\n externalId: string;\n /**\n * Whether the user selected a score group.\n * @type {boolean}\n * @memberof HandlerUserResponse\n */\n hasSelectedScoreGroup: boolean;\n /**\n * The ID of the user.\n * @type {string}\n * @memberof HandlerUserResponse\n */\n id: string;\n /**\n * Information about running challenge instances.\n * @type {HandlerUserRunningChallenges}\n * @memberof HandlerUserResponse\n */\n runningChallenges: HandlerUserRunningChallenges;\n /**\n * The user's score.\n * \n * This is `null`, when there is no score available.\n * @type {HandlerUserScore}\n * @memberof HandlerUserResponse\n */\n score: HandlerUserScore | null;\n /**\n * The chosen scoring group of the user.´\n * @type {string}\n * @memberof HandlerUserResponse\n */\n scoreGroup: string;\n /**\n * The name of the user.\n * @type {string}\n * @memberof HandlerUserResponse\n */\n username: string;\n /**\n * The VPN configuration of the user.\n * @type {HandlerUserVPN}\n * @memberof HandlerUserResponse\n */\n vpn: HandlerUserVPN;\n}\n\n/**\n * Check if a given object implements the HandlerUserResponse interface.\n */\nexport function instanceOfHandlerUserResponse(value: object): value is HandlerUserResponse {\n if (!('completedChallenges' in value) || value['completedChallenges'] === undefined) return false;\n if (!('externalId' in value) || value['externalId'] === undefined) return false;\n if (!('hasSelectedScoreGroup' in value) || value['hasSelectedScoreGroup'] === undefined) return false;\n if (!('id' in value) || value['id'] === undefined) return false;\n if (!('runningChallenges' in value) || value['runningChallenges'] === undefined) return false;\n if (!('score' in value) || value['score'] === undefined) return false;\n if (!('scoreGroup' in value) || value['scoreGroup'] === undefined) return false;\n if (!('username' in value) || value['username'] === undefined) return false;\n if (!('vpn' in value) || value['vpn'] === undefined) return false;\n return true;\n}\n\nexport function HandlerUserResponseFromJSON(json: any): HandlerUserResponse {\n return HandlerUserResponseFromJSONTyped(json, false);\n}\n\nexport function HandlerUserResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): HandlerUserResponse {\n if (json == null) {\n return json;\n }\n return {\n \n 'completedChallenges': ((json['completedChallenges'] as Array).map(HandlerChallengeIdentifierFromJSON)),\n 'externalId': json['externalId'],\n 'hasSelectedScoreGroup': json['hasSelectedScoreGroup'],\n 'id': json['id'],\n 'runningChallenges': HandlerUserRunningChallengesFromJSON(json['runningChallenges']),\n 'score': HandlerUserScoreFromJSON(json['score']),\n 'scoreGroup': json['scoreGroup'],\n 'username': json['username'],\n 'vpn': HandlerUserVPNFromJSON(json['vpn']),\n };\n}\n\n export function HandlerUserResponseToJSON(json: any): HandlerUserResponse {\n return HandlerUserResponseToJSONTyped(json, false);\n }\n\n export function HandlerUserResponseToJSONTyped(value?: HandlerUserResponse | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'completedChallenges': ((value['completedChallenges'] as Array).map(HandlerChallengeIdentifierToJSON)),\n 'externalId': value['externalId'],\n 'hasSelectedScoreGroup': value['hasSelectedScoreGroup'],\n 'id': value['id'],\n 'runningChallenges': HandlerUserRunningChallengesToJSON(value['runningChallenges']),\n 'score': HandlerUserScoreToJSON(value['score']),\n 'scoreGroup': value['scoreGroup'],\n 'username': value['username'],\n 'vpn': HandlerUserVPNToJSON(value['vpn']),\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport type {\n HandlerCategoryResponse,\n HandlerErrorResponse,\n} from '../models/index';\nimport {\n HandlerCategoryResponseFromJSON,\n HandlerCategoryResponseToJSON,\n HandlerErrorResponseFromJSON,\n HandlerErrorResponseToJSON,\n} from '../models/index';\n\nexport interface V1CategoriesSlugGetRequest {\n slug: string;\n}\n\n/**\n * \n */\nexport class CategoriesApi extends runtime.BaseAPI {\n\n /**\n * Get all categories.\n */\n async v1CategoriesGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/categories/`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(HandlerCategoryResponseFromJSON));\n }\n\n /**\n * Get all categories.\n */\n async v1CategoriesGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const response = await this.v1CategoriesGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Get one category.\n */\n async v1CategoriesSlugGetRaw(requestParameters: V1CategoriesSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1CategoriesSlugGet().'\n );\n }\n\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/categories/{slug}`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerCategoryResponseFromJSON(jsonValue));\n }\n\n /**\n * Get one category.\n */\n async v1CategoriesSlugGet(requestParameters: V1CategoriesSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1CategoriesSlugGetRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport type {\n HandlerChallengeInstanceDto,\n HandlerChallengeResponse,\n HandlerErrorResponse,\n HandlerFlagSubmission,\n HandlerFlagSubmissionResponse,\n HandlerSingleChallengeResponse,\n} from '../models/index';\nimport {\n HandlerChallengeInstanceDtoFromJSON,\n HandlerChallengeInstanceDtoToJSON,\n HandlerChallengeResponseFromJSON,\n HandlerChallengeResponseToJSON,\n HandlerErrorResponseFromJSON,\n HandlerErrorResponseToJSON,\n HandlerFlagSubmissionFromJSON,\n HandlerFlagSubmissionToJSON,\n HandlerFlagSubmissionResponseFromJSON,\n HandlerFlagSubmissionResponseToJSON,\n HandlerSingleChallengeResponseFromJSON,\n HandlerSingleChallengeResponseToJSON,\n} from '../models/index';\n\nexport interface V1ChallengesSlugGetRequest {\n slug: string;\n category: string;\n}\n\nexport interface V1ChallengesSlugInstanceDeleteRequest {\n slug: string;\n category: string;\n}\n\nexport interface V1ChallengesSlugInstanceGetRequest {\n slug: string;\n category: string;\n}\n\nexport interface V1ChallengesSlugInstanceProlongPostRequest {\n slug: string;\n category: string;\n}\n\nexport interface V1ChallengesSlugInstancePutRequest {\n slug: string;\n category: string;\n}\n\nexport interface V1ChallengesSlugSolvePostRequest {\n slug: string;\n category: string;\n flag: HandlerFlagSubmission;\n}\n\n/**\n * \n */\nexport class ChallengesApi extends runtime.BaseAPI {\n\n /**\n * Get all challenges.\n */\n async v1ChallengesGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/challenges/`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(HandlerChallengeResponseFromJSON));\n }\n\n /**\n * Get all challenges.\n */\n async v1ChallengesGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const response = await this.v1ChallengesGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Get one challenge.\n */\n async v1ChallengesSlugGetRaw(requestParameters: V1ChallengesSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1ChallengesSlugGet().'\n );\n }\n\n if (requestParameters['category'] == null) {\n throw new runtime.RequiredError(\n 'category',\n 'Required parameter \"category\" was null or undefined when calling v1ChallengesSlugGet().'\n );\n }\n\n const queryParameters: any = {};\n\n if (requestParameters['category'] != null) {\n queryParameters['category'] = requestParameters['category'];\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/challenges/{slug}`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerSingleChallengeResponseFromJSON(jsonValue));\n }\n\n /**\n * Get one challenge.\n */\n async v1ChallengesSlugGet(requestParameters: V1ChallengesSlugGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1ChallengesSlugGetRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n /**\n * Stop a challenge for the current user (if running).\n */\n async v1ChallengesSlugInstanceDeleteRaw(requestParameters: V1ChallengesSlugInstanceDeleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1ChallengesSlugInstanceDelete().'\n );\n }\n\n if (requestParameters['category'] == null) {\n throw new runtime.RequiredError(\n 'category',\n 'Required parameter \"category\" was null or undefined when calling v1ChallengesSlugInstanceDelete().'\n );\n }\n\n const queryParameters: any = {};\n\n if (requestParameters['category'] != null) {\n queryParameters['category'] = requestParameters['category'];\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/challenges/{slug}/instance`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'DELETE',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Stop a challenge for the current user (if running).\n */\n async v1ChallengesSlugInstanceDelete(requestParameters: V1ChallengesSlugInstanceDeleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1ChallengesSlugInstanceDeleteRaw(requestParameters, initOverrides);\n }\n\n /**\n * Get the instance of a challenge for the current user. (Is it stopped, starting, etc.)\n */\n async v1ChallengesSlugInstanceGetRaw(requestParameters: V1ChallengesSlugInstanceGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1ChallengesSlugInstanceGet().'\n );\n }\n\n if (requestParameters['category'] == null) {\n throw new runtime.RequiredError(\n 'category',\n 'Required parameter \"category\" was null or undefined when calling v1ChallengesSlugInstanceGet().'\n );\n }\n\n const queryParameters: any = {};\n\n if (requestParameters['category'] != null) {\n queryParameters['category'] = requestParameters['category'];\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/challenges/{slug}/instance`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerChallengeInstanceDtoFromJSON(jsonValue));\n }\n\n /**\n * Get the instance of a challenge for the current user. (Is it stopped, starting, etc.)\n */\n async v1ChallengesSlugInstanceGet(requestParameters: V1ChallengesSlugInstanceGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1ChallengesSlugInstanceGetRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n /**\n * Prolong a challenge instance.\n */\n async v1ChallengesSlugInstanceProlongPostRaw(requestParameters: V1ChallengesSlugInstanceProlongPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1ChallengesSlugInstanceProlongPost().'\n );\n }\n\n if (requestParameters['category'] == null) {\n throw new runtime.RequiredError(\n 'category',\n 'Required parameter \"category\" was null or undefined when calling v1ChallengesSlugInstanceProlongPost().'\n );\n }\n\n const queryParameters: any = {};\n\n if (requestParameters['category'] != null) {\n queryParameters['category'] = requestParameters['category'];\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/challenges/{slug}/instance/prolong`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Prolong a challenge instance.\n */\n async v1ChallengesSlugInstanceProlongPost(requestParameters: V1ChallengesSlugInstanceProlongPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1ChallengesSlugInstanceProlongPostRaw(requestParameters, initOverrides);\n }\n\n /**\n * Start a challenge for the current user (if not already running).\n */\n async v1ChallengesSlugInstancePutRaw(requestParameters: V1ChallengesSlugInstancePutRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1ChallengesSlugInstancePut().'\n );\n }\n\n if (requestParameters['category'] == null) {\n throw new runtime.RequiredError(\n 'category',\n 'Required parameter \"category\" was null or undefined when calling v1ChallengesSlugInstancePut().'\n );\n }\n\n const queryParameters: any = {};\n\n if (requestParameters['category'] != null) {\n queryParameters['category'] = requestParameters['category'];\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/challenges/{slug}/instance`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'PUT',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Start a challenge for the current user (if not already running).\n */\n async v1ChallengesSlugInstancePut(requestParameters: V1ChallengesSlugInstancePutRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1ChallengesSlugInstancePutRaw(requestParameters, initOverrides);\n }\n\n /**\n * Submit a flag.\n */\n async v1ChallengesSlugSolvePostRaw(requestParameters: V1ChallengesSlugSolvePostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1ChallengesSlugSolvePost().'\n );\n }\n\n if (requestParameters['category'] == null) {\n throw new runtime.RequiredError(\n 'category',\n 'Required parameter \"category\" was null or undefined when calling v1ChallengesSlugSolvePost().'\n );\n }\n\n if (requestParameters['flag'] == null) {\n throw new runtime.RequiredError(\n 'flag',\n 'Required parameter \"flag\" was null or undefined when calling v1ChallengesSlugSolvePost().'\n );\n }\n\n const queryParameters: any = {};\n\n if (requestParameters['category'] != null) {\n queryParameters['category'] = requestParameters['category'];\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n const response = await this.request({\n path: `/v1/challenges/{slug}/solve`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: HandlerFlagSubmissionToJSON(requestParameters['flag']),\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerFlagSubmissionResponseFromJSON(jsonValue));\n }\n\n /**\n * Submit a flag.\n */\n async v1ChallengesSlugSolvePost(requestParameters: V1ChallengesSlugSolvePostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1ChallengesSlugSolvePostRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport type {\n HandlerErrorResponse,\n HandlerHealthResponse,\n HandlerMetadataResponse,\n} from '../models/index';\nimport {\n HandlerErrorResponseFromJSON,\n HandlerErrorResponseToJSON,\n HandlerHealthResponseFromJSON,\n HandlerHealthResponseToJSON,\n HandlerMetadataResponseFromJSON,\n HandlerMetadataResponseToJSON,\n} from '../models/index';\n\n/**\n * \n */\nexport class DefaultApi extends runtime.BaseAPI {\n\n /**\n * Get API health.\n */\n async v1HealthGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/health`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerHealthResponseFromJSON(jsonValue));\n }\n\n /**\n * Get API health.\n */\n async v1HealthGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1HealthGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Get CTF metadata.\n */\n async v1MetadataGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/metadata`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerMetadataResponseFromJSON(jsonValue));\n }\n\n /**\n * Get CTF metadata.\n */\n async v1MetadataGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1MetadataGetRaw(initOverrides);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport type {\n HandlerChallengeScoreDto,\n HandlerErrorResponse,\n HandlerScoreboardDto,\n HandlerSolveTimesDto,\n} from '../models/index';\nimport {\n HandlerChallengeScoreDtoFromJSON,\n HandlerChallengeScoreDtoToJSON,\n HandlerErrorResponseFromJSON,\n HandlerErrorResponseToJSON,\n HandlerScoreboardDtoFromJSON,\n HandlerScoreboardDtoToJSON,\n HandlerSolveTimesDtoFromJSON,\n HandlerSolveTimesDtoToJSON,\n} from '../models/index';\n\nexport interface V1ChallengesSlugScoreGetRequest {\n slug: string;\n category: string;\n}\n\n/**\n * \n */\nexport class ScoreApi extends runtime.BaseAPI {\n\n /**\n * Retrieves the current participant\\'s score for the given challenge.\n * Get score for a particular challenge.\n */\n async v1ChallengesSlugScoreGetRaw(requestParameters: V1ChallengesSlugScoreGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['slug'] == null) {\n throw new runtime.RequiredError(\n 'slug',\n 'Required parameter \"slug\" was null or undefined when calling v1ChallengesSlugScoreGet().'\n );\n }\n\n if (requestParameters['category'] == null) {\n throw new runtime.RequiredError(\n 'category',\n 'Required parameter \"category\" was null or undefined when calling v1ChallengesSlugScoreGet().'\n );\n }\n\n const queryParameters: any = {};\n\n if (requestParameters['category'] != null) {\n queryParameters['category'] = requestParameters['category'];\n }\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/challenges/{slug}/score`.replace(`{${\"slug\"}}`, encodeURIComponent(String(requestParameters['slug']))),\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerChallengeScoreDtoFromJSON(jsonValue));\n }\n\n /**\n * Retrieves the current participant\\'s score for the given challenge.\n * Get score for a particular challenge.\n */\n async v1ChallengesSlugScoreGet(requestParameters: V1ChallengesSlugScoreGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1ChallengesSlugScoreGetRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n /**\n * Get scoreboard.\n */\n async v1StatsScoreboardGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/stats/scoreboard`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerScoreboardDtoFromJSON(jsonValue));\n }\n\n /**\n * Get scoreboard.\n */\n async v1StatsScoreboardGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1StatsScoreboardGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Get statistics about when which flags were submitted.\n */\n async v1StatsSolvetimesGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/stats/solvetimes`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerSolveTimesDtoFromJSON(jsonValue));\n }\n\n /**\n * Get statistics about when which flags were submitted.\n */\n async v1StatsSolvetimesGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1StatsSolvetimesGetRaw(initOverrides);\n return await response.value();\n }\n\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Flugsicherung API\n * This API is used for CTF hosting.\n *\n * The version of the OpenAPI document: 1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport type {\n HandlerErrorResponse,\n HandlerFlugzeugEnabledResponse,\n HandlerFlugzeugResponse,\n HandlerScoreGroupDto,\n HandlerSelectScoreGroupDto,\n HandlerUserResponse,\n} from '../models/index';\nimport {\n HandlerErrorResponseFromJSON,\n HandlerErrorResponseToJSON,\n HandlerFlugzeugEnabledResponseFromJSON,\n HandlerFlugzeugEnabledResponseToJSON,\n HandlerFlugzeugResponseFromJSON,\n HandlerFlugzeugResponseToJSON,\n HandlerScoreGroupDtoFromJSON,\n HandlerScoreGroupDtoToJSON,\n HandlerSelectScoreGroupDtoFromJSON,\n HandlerSelectScoreGroupDtoToJSON,\n HandlerUserResponseFromJSON,\n HandlerUserResponseToJSON,\n} from '../models/index';\n\nexport interface V1UserScoregroupPutRequest {\n scoreGroup: HandlerSelectScoreGroupDto;\n}\n\n/**\n * \n */\nexport class UsersApi extends runtime.BaseAPI {\n\n /**\n * Return available score groups for selection.\n */\n async v1ScoregroupsGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/scoregroups`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(HandlerScoreGroupDtoFromJSON));\n }\n\n /**\n * Return available score groups for selection.\n */\n async v1ScoregroupsGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const response = await this.v1ScoregroupsGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Delete the user\\'s flugzeug\n */\n async v1UserFlugzeugDeleteRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/flugzeug`,\n method: 'DELETE',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Delete the user\\'s flugzeug\n */\n async v1UserFlugzeugDelete(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1UserFlugzeugDeleteRaw(initOverrides);\n }\n\n /**\n * Get information about whether the flugzeug is enabled.\n */\n async v1UserFlugzeugEnabledGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/flugzeug/enabled`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerFlugzeugEnabledResponseFromJSON(jsonValue));\n }\n\n /**\n * Get information about whether the flugzeug is enabled.\n */\n async v1UserFlugzeugEnabledGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1UserFlugzeugEnabledGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Get information about user flugzeug VM.\n */\n async v1UserFlugzeugGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/flugzeug`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerFlugzeugResponseFromJSON(jsonValue));\n }\n\n /**\n * Get information about user flugzeug VM.\n */\n async v1UserFlugzeugGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1UserFlugzeugGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Create a new flugzeug for the user.\n */\n async v1UserFlugzeugPostRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/flugzeug`,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Create a new flugzeug for the user.\n */\n async v1UserFlugzeugPost(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1UserFlugzeugPostRaw(initOverrides);\n }\n\n /**\n * Prolong the user\\'s flugzeug\n */\n async v1UserFlugzeugProlongPostRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/flugzeug/prolong`,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Prolong the user\\'s flugzeug\n */\n async v1UserFlugzeugProlongPost(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1UserFlugzeugProlongPostRaw(initOverrides);\n }\n\n /**\n * Start the user\\'s flugzeug\n */\n async v1UserFlugzeugStartPutRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/flugzeug/start`,\n method: 'PUT',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Start the user\\'s flugzeug\n */\n async v1UserFlugzeugStartPut(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1UserFlugzeugStartPutRaw(initOverrides);\n }\n\n /**\n * Stop the user\\'s flugzeug\n */\n async v1UserFlugzeugStopPutRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/flugzeug/stop`,\n method: 'PUT',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Stop the user\\'s flugzeug\n */\n async v1UserFlugzeugStopPut(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1UserFlugzeugStopPutRaw(initOverrides);\n }\n\n /**\n * Get user information.\n */\n async v1UserGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => HandlerUserResponseFromJSON(jsonValue));\n }\n\n /**\n * Get user information.\n */\n async v1UserGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1UserGetRaw(initOverrides);\n return await response.value();\n }\n\n /**\n * Set the score group for the current user.\n */\n async v1UserScoregroupPutRaw(requestParameters: V1UserScoregroupPutRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n if (requestParameters['scoreGroup'] == null) {\n throw new runtime.RequiredError(\n 'scoreGroup',\n 'Required parameter \"scoreGroup\" was null or undefined when calling v1UserScoregroupPut().'\n );\n }\n\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n const response = await this.request({\n path: `/v1/user/scoregroup`,\n method: 'PUT',\n headers: headerParameters,\n query: queryParameters,\n body: HandlerSelectScoreGroupDtoToJSON(requestParameters['scoreGroup']),\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Set the score group for the current user.\n */\n async v1UserScoregroupPut(requestParameters: V1UserScoregroupPutRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n await this.v1UserScoregroupPutRaw(requestParameters, initOverrides);\n }\n\n /**\n * Get user vpn configuration.\n */\n async v1UserVpnConfigGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n const response = await this.request({\n path: `/v1/user/vpn/config`,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n if (this.isJsonMime(response.headers.get('content-type'))) {\n return new runtime.JSONApiResponse(response);\n } else {\n return new runtime.TextApiResponse(response) as any;\n }\n }\n\n /**\n * Get user vpn configuration.\n */\n async v1UserVpnConfigGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {\n const response = await this.v1UserVpnConfigGetRaw(initOverrides);\n return await response.value();\n }\n\n}\n","import { HandlerErrorCode, HandlerErrorResponse, ResponseError, instanceOfHandlerErrorResponse } from '@/api'\n\nexport const isErrorResponse = (o: unknown): o is HandlerErrorResponse => {\n return typeof o === 'object' && !!o && instanceOfHandlerErrorResponse(o) && (o as {ok: boolean}).ok === false\n}\n\nexport const extractErrorResponse = async (o: unknown): Promise => {\n if (!(o instanceof ResponseError)) {\n return null\n }\n const body: unknown = await o.response.clone().json()\n if (!isErrorResponse(body)) {\n return null\n }\n return body\n}\n\nexport const isScoreGroupSelectionError = (err: HandlerErrorResponse | null): boolean => {\n return !!err && err.code === HandlerErrorCode.errorCodeNoScoreGroupSelected\n}\n\nexport const isTimeRestrictedError = (err: HandlerErrorResponse | null): boolean => {\n return !!err && err.code === HandlerErrorCode.errorCodeAccessTimeRestricted\n}\n\nexport const isMaximumNumberChallengeInstancesReachedError = (err: HandlerErrorResponse | null): boolean => {\n return !!err && err.code === HandlerErrorCode.errorCodeMaximumNumberChallengeInstancesReached\n}\n\nexport const isCannotProlongChallengeInstanceError = (err: HandlerErrorResponse | null): boolean => {\n return !!err && err.code === HandlerErrorCode.errorCodeCannotProlongChallengeInstance\n}\n","\n\n\n","import { ref } from 'vue'\n\nimport {\n Configuration,\n ErrorContext,\n Middleware,\n DefaultApi,\n ChallengesApi,\n CategoriesApi,\n UsersApi,\n FetchParams,\n RequestContext,\n ScoreApi,\n} from '@/api'\n\nconst retryPeriod = 2 // in seconds\nconst requestTimeout = 15 // in seconds\n\nexport const networkErrorsPresent = ref(0)\n\nconst isNetworkErrorException = (exc: unknown): boolean => {\n return exc instanceof TypeError && (\n exc.message.includes('NetworkError') || // Firefox\n exc.message.includes('Failed to fetch') || // Chrome\n exc.message.includes('Load failed') // Safari\n )\n}\n\nconst isTimeout = (exc: unknown): boolean => {\n // See https://developer.mozilla.org/en-US/docs/Web/API/AbortController\n return (exc instanceof DOMException && exc.name === 'AbortError')\n}\n\nconst getTimeout = (): AbortSignal => {\n const abortController = new AbortController()\n setTimeout(() => {\n abortController.abort()\n }, requestTimeout * 1000)\n return abortController.signal\n}\n\nexport class APIMiddleware implements Middleware {\n pre(context: RequestContext): Promise {\n // Apply a global timeout for non-responding APIs.\n return Promise.resolve({\n ...context,\n init: {\n ...context.init,\n signal: getTimeout(),\n },\n })\n }\n\n async onError?(context: ErrorContext): Promise {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access\n if (isNetworkErrorException(context.error) || isTimeout(context.error)) {\n networkErrorsPresent.value++\n\n // Retry request if we encounter a network error\n while (true) {\n await new Promise(resolve => setTimeout(resolve, retryPeriod * 1000))\n try {\n const result = await fetch(\n context.url,\n {\n ...context.init,\n // Need to create a new timeout for the retry.\n signal: getTimeout(),\n },\n )\n networkErrorsPresent.value--\n return result\n } catch (exc) {\n // TODO: log if timeout.\n // ensure to throw exception if we get another Exception\n if (!isNetworkErrorException(exc) && !isTimeout(exc)) {\n throw exc\n }\n }\n }\n }\n\n return context.response\n }\n}\n\nexport type Api = {\n categories: CategoriesApi,\n challenges: ChallengesApi,\n default: DefaultApi,\n score: ScoreApi,\n users: UsersApi,\n}\n\nfunction getBasePath(): string {\n const basePath = import.meta.env.VITE_API_BASE_URL || window.API_BASE_URL\n if (!basePath) {\n throw new Error('Please set VITE_API_BASE_URL.')\n }\n return basePath\n}\n\nexport function produceAPI(accessToken: string): Api {\n const basePath = getBasePath()\n const config = new Configuration({\n basePath,\n headers: {\n authorization: `Bearer ${accessToken}`,\n },\n middleware: [\n new APIMiddleware(),\n ],\n })\n return {\n categories: new CategoriesApi(config),\n challenges: new ChallengesApi(config),\n default: new DefaultApi(config),\n score: new ScoreApi(config),\n users: new UsersApi(config),\n }\n}\n","\n\n\n","import * as Sentry from '@sentry/vue'\nimport { UserManager, InMemoryWebStorage, WebStorageStateStore } from 'oidc-client-ts'\nimport { NavigationGuard } from 'vue-router'\n\nexport type User = {\n id: string;\n displayName: string;\n vpnConnected: boolean;\n vpnIpAddress: string;\n rank: number;\n points: number;\n}\n\nconst loginRedirectURL = () => `${window.location.protocol}//${window.location.host}/auth/redirect`\nconst logoutRedirectURL = () => `${window.location.protocol}//${window.location.host}/`\n\ntype OnTokenChangeCallback = (newToken: string | null) => void\n\nexport class OidcAuthService {\n private userManager: UserManager\n private _token: string | null\n private tokenChangeListeners: OnTokenChangeCallback[]\n\n private constructor() {\n const clientId = (import.meta.env.VITE_OIDC_CLIENT_ID || window.OIDC_CLIENT_ID)?.trim()\n if (!clientId) {\n throw new Error('Please set OIDC_CLIENT_ID.')\n }\n const issuer = (import.meta.env.VITE_OIDC_ISSUER_URL || window.OIDC_ISSUER_URL)?.trim()\n if (!issuer) {\n throw new Error('Please set OIDC_ISSUER_URL.')\n }\n\n this.userManager = new UserManager({\n client_id: clientId,\n authority: issuer,\n redirect_uri: loginRedirectURL(),\n userStore: new WebStorageStateStore({ store: new InMemoryWebStorage() }),\n post_logout_redirect_uri: logoutRedirectURL(),\n })\n\n this.userManager.events.addUserLoaded(async (newUser) => {\n await this.userManager.storeUser(newUser)\n this.accessToken = newUser.access_token\n })\n\n this.userManager.events.addSilentRenewError(async (error) => {\n Sentry.captureMessage('Silent renew failed', {\n level: 'warning',\n extra: {\n error,\n },\n })\n await this.userManager.signoutRedirect()\n await this.reset()\n })\n\n this._token = null\n this.tokenChangeListeners = []\n }\n\n // Singleton\n private static instance = new OidcAuthService()\n public static default(): OidcAuthService {\n return this.instance\n }\n\n async reset(): Promise {\n this.accessToken = null\n return this.userManager.removeUser()\n }\n\n async login(): Promise {\n try {\n await this.userManager.signinRedirect()\n } catch (ex) {\n throw new Error('login failed', { cause: ex })\n }\n }\n\n async logout(): Promise {\n try {\n await this.userManager.signoutRedirect()\n } catch (ex) {\n throw new Error('handling logout', { cause: ex })\n }\n }\n\n async handleOidcRedirect(): Promise {\n try {\n const user = await this.userManager.signinRedirectCallback()\n this.accessToken = user.access_token\n } catch (ex) {\n throw new Error('handling redirect', { cause: ex })\n }\n }\n\n public get accessToken(): string | null {\n return this._token\n }\n\n private set accessToken(token: string | null) {\n this._token = token\n // Notify the listeners.\n for (const listener of this.tokenChangeListeners) {\n listener(token)\n }\n }\n\n public addOnTokenChangedListener(cb: OnTokenChangeCallback): void {\n this.tokenChangeListeners.push(cb)\n cb(this.accessToken)\n }\n\n public removeOnTokenChangedListener(cb: OnTokenChangeCallback): void {\n const idx = this.tokenChangeListeners.indexOf(cb)\n if (idx !== -1) {\n this.tokenChangeListeners.splice(idx, 1)\n }\n }\n}\n\nexport const authGuard: NavigationGuard = (to) => {\n const isAuthenticated = !!OidcAuthService.default().accessToken\n if (!isAuthenticated && to.name !== 'afterLoginRedirect' && to.name !== 'login') {\n return { name: 'login' }\n }\n}\n","\n\n\n","\n\n\n\n\n","\n\n\n\n\n","import katex from 'katex'\nimport MarkdownIt from 'markdown-it'\nimport { type StateBlock, type StateInline } from 'markdown-it'\n\nexport const KatexPlugin = (md: MarkdownIt): void => {\n // Catch all math blocks. Make sure to be checked before fences,\n // as we have our own custom fence.\n md.block.ruler.before('fence', 'math_block', mathBlockRuler)\n // And catch math inline (inline stuff is being processed after blocks).\n md.inline.ruler.before('backticks', 'math_inline', mathInlineRuler)\n\n md.renderer.rules.math_block = (tokens, idx) => renderMath(tokens[idx].content, true)\n md.renderer.rules.math_inline = (tokens, idx) => renderMath(tokens[idx].content, false)\n}\n\nfunction renderMath(\n content: string,\n isBlock: boolean,\n): string {\n try {\n return katex.renderToString(content, {\n displayMode: isBlock,\n })\n } catch (ex) {\n if (ex instanceof Error) {\n return `Error rendering maths: ${ex.message}`\n }\n return 'Error rendering maths'\n }\n}\n\nfunction mathInlineRuler(state: StateInline, silent: boolean): boolean {\n if (state.src[state.pos] !== '$') {\n return false\n }\n\n const startDelimiter = checkInlineOpeningDelimiter(state, state.pos)\n if (!startDelimiter.canOpen) {\n if (!silent) {\n // Pending text is flushed as text node.\n state.pending += '$'\n }\n state.pos += 1\n return true\n }\n\n let startDelimiterText: string\n let endDelimiterText: string\n let delimiterLength: number\n\n switch (startDelimiter.type) {\n case 'singleDollar':\n startDelimiterText = endDelimiterText = '$'\n delimiterLength = 1\n break\n case 'dollarBacktick':\n startDelimiterText = '$`'\n endDelimiterText = '`$'\n delimiterLength = 2\n break\n }\n\n const inlineMathStart = state.pos + delimiterLength\n\n // Find end of inline block while skipping properly escaped delimiters.\n const closingDelimiterPosition = findClosingDelimiter(state, inlineMathStart, startDelimiter.type)\n\n // We did not find a closing delimiter, ignore the starting delimiter.\n if (closingDelimiterPosition === -1) {\n if (!silent) {\n state.pending += startDelimiterText\n }\n state.pos += delimiterLength\n return true\n }\n\n // Also ignore empty content by also skipping the end delimiter.\n if (closingDelimiterPosition - inlineMathStart === 0) {\n if (!silent) {\n state.pending += `${startDelimiterText}${endDelimiterText}`\n }\n state.pos += delimiterLength * 2\n return true\n }\n\n // Add a new token which will be rendered later.\n if (!silent) {\n const token = state.push('math_inline', 'math', 0)\n token.markup = startDelimiterText\n token.content = state.src.slice(inlineMathStart, closingDelimiterPosition)\n }\n\n // Continue after the math block.\n state.pos = closingDelimiterPosition + delimiterLength\n return true\n}\n\ntype InlineDelimiterType = 'dollarBacktick' | 'singleDollar'\n\n// A Unicode whitespace character is a character in the Unicode Zs general category, or a tab (U+0009), line feed (U+000A),\n// form feed (U+000C), or carriage return (U+000D).\n// See https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run.\n// \"For purposes of this definition, the beginning and the end of the line count as Unicode whitespace.\"\nconst isWhitespaceRegex = /^[\\p{Zs}\\t\\n\\f\\r]$/u\nconst isUnicodePunctuationCharRegex = /^[\\p{P}\\p{S}]$/u\n\n/**\n * Checks whether the string at the given position contains a left flanking delimiter run.\n * See https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run.\n */\nfunction isLeftFlankingDelimiterRun(str: string, position: number) {\n const nextChar = position >= str.length ? ' ' : str.charAt(position + 1)\n const previousChar = position > 0 ? str.charAt(position - 1) : ' '\n\n const isFollowedByWhitespace = isWhitespaceRegex.test(nextChar)\n const isFollowedByPunctuation = isUnicodePunctuationCharRegex.test(nextChar)\n const isPreceededByWhitespace = isWhitespaceRegex.test(previousChar)\n const isPreceededByPunctuation = isUnicodePunctuationCharRegex.test(previousChar)\n // (1) not followed by Unicode whitespace\n // and 2(a) not followed by a Unicode punctuation character\n // or 2(b) followed by a Unicode punctuation character and preceded by Unicode whitespace or a Unicode punctuation character.\n return !isFollowedByWhitespace &&\n ((!isFollowedByPunctuation) || (isFollowedByPunctuation && (isPreceededByPunctuation || isPreceededByWhitespace)))\n}\n\n/**\n * Checks whether the string at the given position contains a right flanking delimiter run.\n * See https://spec.commonmark.org/0.31.2/#right-flanking-delimiter-run.\n */\nfunction isRightFlankingDelimiterRun(str: string, position: number) {\n const nextChar = position >= str.length ? ' ' : str.charAt(position + 1)\n const previousChar = position > 0 ? str.charAt(position - 1) : ' '\n\n const isFollowedByWhitespace = isWhitespaceRegex.test(nextChar)\n const isFollowedByPunctuation = isUnicodePunctuationCharRegex.test(nextChar)\n const isPreceededByWhitespace = isWhitespaceRegex.test(previousChar)\n const isPreceededByPunctuation = isUnicodePunctuationCharRegex.test(previousChar)\n // (1) not preceded by Unicode whitespace\n // and 2(a) not preceded by a Unicode punctuation character\n // or 2(b) preceded by a Unicode punctuation character and followed by Unicode whitespace or a Unicode punctuation character.\n return !isPreceededByWhitespace &&\n ((!isPreceededByPunctuation) || (isPreceededByPunctuation && (isFollowedByWhitespace || isFollowedByPunctuation)))\n}\n\nfunction checkInlineOpeningDelimiter(\n state: StateInline,\n position: number,\n): { canOpen: false } | { canOpen: true, type: InlineDelimiterType } {\n const maxPosition = state.posMax\n\n const nextChar = position + 1 <= maxPosition ? state.src.charAt(position + 1) : -1\n if (!isLeftFlankingDelimiterRun(state.src, position)) {\n return {\n canOpen: false,\n }\n }\n switch (nextChar) {\n case '`':\n return {\n canOpen: true,\n type: 'dollarBacktick',\n }\n default:\n return {\n canOpen: true,\n type: 'singleDollar',\n }\n }\n}\n\nfunction findClosingDelimiter(\n state: StateInline,\n searchStartPosition: number,\n openingDelimiterType: InlineDelimiterType,\n): number {\n let match: number = searchStartPosition\n\n let searchString: string\n switch (openingDelimiterType) {\n case 'singleDollar':\n searchString = '$'\n break\n case 'dollarBacktick':\n searchString = '`$'\n break\n }\n\n while ((match = state.src.indexOf(searchString, match)) !== -1) {\n // Check for escape characters.\n let position = match - 1\n while (state.src[position] === '\\\\') {\n position -= 1\n }\n\n // If the number of escapes is even, then we found a valid end delimiter,\n // as double escapes do no escape.\n if (((match - position) % 2) === 1 && isRightFlankingDelimiterRun(state.src, match)) {\n break\n }\n match += 1\n }\n\n if (match === -1) {\n return -1\n }\n\n return match\n}\n\ntype BlockDelimiter = {\n start: string,\n end: string,\n}\nconst blockDelimiters: BlockDelimiter[] = [\n {\n start: '$$',\n end: '$$',\n },\n {\n start: '```math',\n end: '```',\n },\n]\n\nfunction mathBlockRuler(state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n for (const delimiter of blockDelimiters) {\n let position = state.bMarks[startLine] + state.tShift[startLine]\n let maxPosition = state.eMarks[startLine]\n let lastPos\n let found = false\n\n // We at least need enough characters for the start delimiter.\n if (position + delimiter.start.length > maxPosition) {\n continue\n }\n // Check for the start delimiter.\n if (state.src.slice(position, position + delimiter.start.length) !== delimiter.start) {\n continue\n }\n\n position += delimiter.start.length\n let firstLine = state.src.slice(position, maxPosition)\n let lastLine: string | null = null\n\n if (silent) {\n return true\n }\n\n // Check for the end delimiter ending the line.\n // This would be a single line expression.\n if (firstLine.trim().slice(-delimiter.end.length) === delimiter.end) {\n firstLine = firstLine.trim().slice(0, -delimiter.end.length)\n found = true\n }\n\n // Search for the end delimiter in the following lines.\n let line: number = startLine\n while (!found) {\n line++\n\n if (line >= endLine) {\n break\n }\n\n position = state.bMarks[line] + state.tShift[line]\n maxPosition = state.eMarks[line]\n\n if (state.src.slice(position, maxPosition).trim().slice(-delimiter.end.length) === delimiter.end) {\n lastPos = state.src.slice(0, maxPosition).lastIndexOf(delimiter.end)\n lastLine = state.src.slice(position, lastPos)\n found = true\n }\n }\n\n if (!found) {\n // No end delimiter found, also ignore opening delimiter.\n continue\n }\n\n const lineAfterBlockEnd = line + 1\n const token = state.push('math_block', 'math', 0)\n token.block = true\n token.content = (firstLine && firstLine.trim() ? firstLine + '\\n' : '') +\n state.getLines(startLine + 1, line, state.tShift[startLine], true) +\n (lastLine && lastLine.trim() ? lastLine : '')\n token.map = [startLine, lineAfterBlockEnd]\n token.markup = delimiter.start\n\n // Go to the line after the end of the block\n state.line = lineAfterBlockEnd\n\n return true\n }\n\n return false\n}\n","\n\n\n\n\n","\n\n\n","\n \n \n \n \n \n\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n","\n\n\n\n\n","\n\n\n\n\n","export default \"__VITE_ASSET__CahSIPE7__\"","\n\n\n\n\n","import { ErrorEvent } from '@sentry/types'\nimport * as Sentry from '@sentry/vue'\nimport { App } from 'vue'\n\nexport function initSentry(app: App): void {\n const dsn = import.meta.env.VITE_SENTRY_DSN || window.SENTRY_DSN\n if (!dsn) {\n // eslint-disable-next-line no-console\n console.log('Not enabling Sentry as no DSN is set.')\n return\n }\n const environment = import.meta.env.VITE_SENTRY_ENVIRONMENT || window.SENTRY_ENVIRONMENT || 'unknown'\n const release = import.meta.env.VITE_SENTRY_RELEASE || window.SENTRY_RELEASE || 'unknown'\n Sentry.init({\n app,\n dsn,\n environment,\n release,\n logErrors: true,\n ignoreErrors: [\n 'ResizeObserver loop limit exceeded', // https://stackoverflow.com/a/50387233/8155769\n 'ResizeObserver loop completed with undelivered notifications.', // Same as above, but Firefox\n ],\n beforeSend(event: ErrorEvent): PromiseLike | ErrorEvent | null {\n if (event.exception && event.event_id) {\n Sentry.showReportDialog({ eventId: event.event_id })\n }\n return event\n },\n })\n}\n","import { createApp } from 'vue'\nimport { createRouter, createWebHistory } from 'vue-router'\n\nimport App from './App.vue'\n\nimport ChallengeComponent from '@/components/Challenge.vue'\nimport FlugzeugComponent from '@/components/Flugzeug.vue'\nimport ScoreboardComponent from '@/components/Scoreboard.vue'\nimport SolvesCalendarComponent from '@/components/SolvesCalendar.vue'\nimport DummyComponent from '@/components/auth/Dummy.vue'\nimport HomeComponent from '@/components/home'\nimport { setupI18n } from '@/util/i18n'\nimport { authGuard } from '@/util/oidc'\nimport { initSentry } from '@/util/sentry'\n\nconst router = createRouter({\n history: createWebHistory(),\n routes: [\n {\n path: '/',\n children: [\n {\n path: '',\n name: 'home',\n component: HomeComponent,\n },\n {\n path: 'scoreboard',\n name: 'scoreboard',\n component: ScoreboardComponent,\n },\n {\n path: 'solves-calendar',\n name: 'solves-calendar',\n component: SolvesCalendarComponent,\n },\n {\n path: 'flugzeug',\n name: 'flugzeug',\n component: FlugzeugComponent,\n },\n {\n path: 'challenge/:category/:slug',\n name: 'challenge',\n component: ChallengeComponent,\n },\n {\n path: 'auth/',\n // All auth routes are handled by the UserProviderComponent.\n // Just need an empty component for vue-router to work...\n children: [\n {\n name: 'login',\n path: 'login',\n component: DummyComponent,\n },\n {\n name: 'afterLoginRedirect',\n path: 'redirect',\n component: DummyComponent,\n },\n {\n name: 'logout',\n path: 'logout',\n component: DummyComponent,\n },\n ],\n },\n ],\n },\n ],\n})\n\nconst app = createApp(App)\n\n// Enforce authentication.\nrouter.beforeEach(authGuard)\n\napp.use(router)\ninitSentry(app)\n\n// Enable i18n\nconst i18n = setupI18n({})\napp.use(i18n)\n\napp.mount('#app')\n"],"names":["_imports_0","_sfc_render","_ctx","_cache","props","__props","enterActiveClass","computed","leaveActiveClass","modalRef","ref","emits","__emit","watch","newValue","oldValue","nextTick","closeModal","onKeyUp","e","FLUGSICHERUNG_RELOAD_DATA_INTERVAL","CTF_TITLE","CTF_END","VPN_CONFIG_FILE_NAME","VPN_CONFIG_FILE_EXTENSION","CTF_DISCORD_SERVER_ADDRESS","AUTHENTICATION_INJECTION_TOKEN","COMPETITION_METADATA_INJECTION_TOKEN","getInjection","authInjection","inject","useUser","useApi","CompetitionMetadata","isInitialized","ctfStart","ctfEnd","ctfPostPlayEnd","flagPrefix","isFlugzeugEnabled","useMetadata","metadata","usePeriodic","cb","periodMs","lastError","value","shallowRef","isLoading","abortController","restartPeriodic","periodic","abortSignal","ex","timeout","onMounted","onBeforeUnmount","trigger","reset","readonly","copyTimeout","user","copied","copyToClipboard","supportedLocales","defaultLocale","storageKey","isComposer","instance","mode","isRef","setupI18n","options","browserLocale","getBrowserLocale","initialLocale","getSavedLocale","enhancedOptions","en","de","i18n","createI18n","setLocale","locale","saveLocale","browserSupportedLocales","parsedLocale","foundLocale","l","useI18n","watchEffect","saveAs","data","filename","blob","link","api","osSelector","downloadVPNConfig","response","ordinalSuffix","num","ordinalRules","isVPNModalOpen","isDiscordModalOpen","handleMenuToggle","newState","generalCategory","HomeIcon","StarIcon","PaperAirplaneIcon","challengeCategories","newMetadata","fetchCategories","fetchChallenges","additionalCategories","category","_a","challenge","challengeMenu","challengeRunning","val","challengeCompleted","a","b","order","menuCategories","clonedLinks","mobileMenuState","BASE_PATH","Configuration","configuration","querystring","apiKey","accessToken","DefaultConfig","_BaseAPI","__publicField","url","init","fetchParams","middleware","FetchError","middlewares","next","preMiddlewares","pre","postMiddlewares","post","mime","context","initOverrides","ResponseError","headers","key","initOverrideFn","initParams","overriddenInit","body","isFormData","isBlob","constructor","BaseAPI","msg","cause","RequiredError","field","params","prefix","querystringSingleKey","part","keyPrefix","fullKey","multiValue","singleValue","valueAsArray","JSONApiResponse","raw","transformer","jsonValue","VoidApiResponse","TextApiResponse","ChallengeDifficultyFromJSON","json","ChallengeDifficultyFromJSONTyped","ignoreDiscriminator","HandlerCategoryResponseFromJSON","HandlerCategoryResponseFromJSONTyped","HandlerFlagSolveDtoFromJSON","HandlerFlagSolveDtoFromJSONTyped","HandlerChallengeSolvesDtoFromJSON","HandlerChallengeSolvesDtoFromJSONTyped","HandlerCategorySolvesDtoFromJSON","HandlerCategorySolvesDtoFromJSONTyped","HandlerChallengeIdentifierFromJSON","HandlerChallengeIdentifierFromJSONTyped","HandlerExposedEndpointDtoFromJSON","HandlerExposedEndpointDtoFromJSONTyped","OrchestratorChallengeState","OrchestratorChallengeStateFromJSON","OrchestratorChallengeStateFromJSONTyped","HandlerChallengeInstanceDtoFromJSON","HandlerChallengeInstanceDtoFromJSONTyped","HandlerChallengeResponseFromJSON","HandlerChallengeResponseFromJSONTyped","HandlerChallengeScoreDtoFromJSON","HandlerChallengeScoreDtoFromJSONTyped","HandlerErrorCode","instanceOfHandlerErrorResponse","HandlerFlagSubmissionToJSON","HandlerFlagSubmissionToJSONTyped","SubmissionStatus","SubmissionStatusFromJSON","SubmissionStatusFromJSONTyped","HandlerFlagSubmissionResponseFromJSON","HandlerFlagSubmissionResponseFromJSONTyped","HandlerFlugzeugEnabledResponseFromJSON","HandlerFlugzeugEnabledResponseFromJSONTyped","UserFlugzeugStatus","UserFlugzeugStatusFromJSON","UserFlugzeugStatusFromJSONTyped","HandlerFlugzeugResponseFromJSON","HandlerFlugzeugResponseFromJSONTyped","HandlerHealthResponseDetailFromJSON","HandlerHealthResponseDetailFromJSONTyped","HandlerHealthResponseFromJSON","HandlerHealthResponseFromJSONTyped","HandlerMetadataResponseFromJSON","HandlerMetadataResponseFromJSONTyped","HandlerScoreGroupDtoFromJSON","HandlerScoreGroupDtoFromJSONTyped","HandlerScoreboardEntryDtoFromJSON","HandlerScoreboardEntryDtoFromJSONTyped","HandlerScoreboardDtoFromJSON","HandlerScoreboardDtoFromJSONTyped","HandlerSelectScoreGroupDtoToJSON","HandlerSelectScoreGroupDtoToJSONTyped","HandlerSingleChallengeResponseFromJSON","HandlerSingleChallengeResponseFromJSONTyped","HandlerSolveTimesDtoFromJSON","HandlerSolveTimesDtoFromJSONTyped","HandlerUserRunningChallengesFromJSON","HandlerUserRunningChallengesFromJSONTyped","HandlerUserVPNFromJSON","HandlerUserVPNFromJSONTyped","HandlerUserScoreFromJSON","HandlerUserScoreFromJSONTyped","HandlerUserResponseFromJSON","HandlerUserResponseFromJSONTyped","CategoriesApi","runtime.BaseAPI","queryParameters","headerParameters","runtime.JSONApiResponse","requestParameters","runtime.RequiredError","ChallengesApi","runtime.VoidApiResponse","DefaultApi","ScoreApi","UsersApi","runtime.TextApiResponse","isErrorResponse","o","extractErrorResponse","isScoreGroupSelectionError","err","isTimeRestrictedError","isMaximumNumberChallengeInstancesReachedError","isCannotProlongChallengeInstanceError","reloadMetadata","fetchedMetadata","flugzeugIsEnabled","triggerRefetch","provide","retryPeriod","requestTimeout","networkErrorsPresent","isNetworkErrorException","exc","isTimeout","getTimeout","APIMiddleware","resolve","result","getBasePath","basePath","produceAPI","config","loginRedirectURL","logoutRedirectURL","_OidcAuthService","clientId","issuer","_b","UserManager","WebStorageStateStore","InMemoryWebStorage","newUser","error","Sentry.captureMessage","token","listener","idx","OidcAuthService","authGuard","to","currentUser","hasAuthenticatedApi","periodicUserRefetch","fetchedUser","_c","hasUser","tokenChangedListener","newToken","route","useRoute","router","useRouter","onBeforeMount","onUnmounted","handleLogin","handleLogout","handleRedirect","handleAuthRoute","Sentry.captureException","Sentry.getCurrentScope","Sentry.setUser","isHTTP","endpoint","isSSH","FLAG_ROTATION_FACTOR","emit","flagState","flag","progress","submittingFlag","submitFlag","request","flagResponse","clearFlagSubmissionResult","clearSubmitForm","getFlagRotation","n","total","getFlagYTranslation","rotation","KatexPlugin","md","mathBlockRuler","mathInlineRuler","tokens","renderMath","content","isBlock","katex","state","silent","startDelimiter","checkInlineOpeningDelimiter","startDelimiterText","endDelimiterText","delimiterLength","inlineMathStart","closingDelimiterPosition","findClosingDelimiter","isWhitespaceRegex","isUnicodePunctuationCharRegex","isLeftFlankingDelimiterRun","str","position","nextChar","previousChar","isFollowedByWhitespace","isFollowedByPunctuation","isPreceededByWhitespace","isPreceededByPunctuation","isRightFlankingDelimiterRun","maxPosition","searchStartPosition","openingDelimiterType","match","searchString","blockDelimiters","startLine","endLine","delimiter","lastPos","found","firstLine","lastLine","line","lineAfterBlockEnd","slugify","markdownConverter","markdownit","lang","highlightedCode","highlight","markdownitAnchor","rawHtml","DOMPurify","challengeSlug","categorySlug","refetchUser","challengeMeta","processingChallengeState","processingChallengeProlong","hasProlongError","vpnModalOpen","metaPeriodic","updateChallengeMeta","remainingMinutes","loadChallenge","newData","startChallenge","prolongChallenge","stopChallenge","staticFilesUrl","currentChallenge","KASM_FULLSCREEN_ACTION","PHRASE_CYCLE","forwardIcon","ForwardIcon","playIcon","PlayIcon","stopIcon","StopIcon","trashIcon","TrashIcon","TAKING_LONG_PHRASE","PROVISIONING_PHRASE","STARTING_PHRASES","STOPPING_PHRASES","flugzeug","processingStart","processingProlong","processingStop","processingDelete","loadingLabel","loadingNumber","flugzeugFrame","showStart","starting","showStop","running","stopping","iframeSrc","websocketPath","updateFlugzeug","syncHandleFullscreen","event","handleFullscreen","updateRemainingTime","updateLoadingSpinner","stop","now","remainingSeconds","phrases","phraseIndex","startFlugzeug","prolongFlugzeug","stopFlugzeug","deleteFlugzeug","isKasmEvent","loadScoreboard","scoreboardData","scoreboard","tmpScoreboardData","toRaw","entry","positionForRank","participantEntry","CELL_DIMENSIONS_PX","calendar","tooltip","parentDiv","tooltipData","CELL_SPACING","update","allDays","days","current","end","getDay","date","day","categories","flags","solves","solvesPerDay","catA","catB","challengeA","challengeB","maximumSolves","lerp","start","fraction","solvesToColor","r","g","positionTooltip","parentRect","y","tooltipRect","parentRightDiff","windowRightDiff","parentBottomDiff","windowBottomDiff","openTooltip","target","closeTooltip","refetchMetadata","scoreGroups","processingScoreGroup","saveScoreGroup","scoreGroup","toggleDays","hours","toggleHours","minutes","toggleMinutes","seconds","toggleSeconds","interval","count","dateDiffSeconds","newSeconds","newMinutes","newHours","newDays","digits","type","_d","nextDigits","imgUrl","initSentry","app","dsn","environment","Sentry.init","Sentry.showReportDialog","createRouter","createWebHistory","HomeComponent","ScoreboardComponent","SolvesCalendarComponent","FlugzeugComponent","ChallengeComponent","DummyComponent","createApp","App"],"mappings":"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"}