{"version":3,"file":"InternalGraphQLAPI.mjs","sources":["../../../src/internals/InternalGraphQLAPI.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { parse, print, } from 'graphql';\nimport { catchError } from 'rxjs';\nimport { AmplifyUrl, getAmplifyUserAgent, } from '@aws-amplify/core/internals/utils';\nimport { isCancelError as isCancelErrorREST } from '@aws-amplify/api-rest';\nimport { cancel as cancelREST, post, updateRequestToBeCancellable, } from '@aws-amplify/api-rest/internals';\nimport { AWSAppSyncRealTimeProvider } from '../Providers/AWSAppSyncRealTimeProvider';\nimport { resolveConfig, resolveLibraryOptions } from '../utils';\nimport { repackageUnauthorizedError } from '../utils/errors/repackageAuthError';\nimport { NO_ENDPOINT } from '../utils/errors/constants';\nimport { GraphQLApiError, createGraphQLResultWithError } from '../utils/errors';\nimport { isGraphQLResponseWithErrors } from './utils/runtimeTypeGuards/isGraphQLResponseWithErrors';\nimport { headerBasedAuth } from './graphqlAuth';\nconst USER_AGENT_HEADER = 'x-amz-user-agent';\nconst isAmplifyInstance = (amplify) => {\n    return typeof amplify !== 'function';\n};\n/**\n * Export Cloud Logic APIs\n */\nexport class InternalGraphQLAPIClass {\n    constructor() {\n        /**\n         * @private\n         */\n        this.appSyncRealTime = new Map();\n        this._api = {\n            post,\n            cancelREST,\n            isCancelErrorREST,\n            updateRequestToBeCancellable,\n        };\n    }\n    getModuleName() {\n        return 'InternalGraphQLAPI';\n    }\n    /**\n     * to get the operation type\n     * @param operation\n     */\n    getGraphqlOperationType(operation) {\n        const doc = parse(operation);\n        const definitions = doc.definitions;\n        const [{ operation: operationType }] = definitions;\n        return operationType;\n    }\n    /**\n     * Executes a GraphQL operation\n     *\n     * @param options - GraphQL Options\n     * @param [additionalHeaders] - headers to merge in after any `libraryConfigHeaders` set in the config\n     * @returns An Observable if the query is a subscription query, else a promise of the graphql result.\n     */\n    graphql(amplify, { query: paramQuery, variables = {}, authMode, authToken, endpoint, apiKey, }, additionalHeaders, customUserAgentDetails) {\n        const query = typeof paramQuery === 'string'\n            ? parse(paramQuery)\n            : parse(print(paramQuery));\n        const [operationDef = {}] = query.definitions.filter(def => def.kind === 'OperationDefinition');\n        const { operation: operationType } = operationDef;\n        const headers = additionalHeaders || {};\n        switch (operationType) {\n            case 'query':\n            case 'mutation': {\n                const abortController = new AbortController();\n                let responsePromise;\n                if (isAmplifyInstance(amplify)) {\n                    responsePromise = this._graphql(amplify, { query, variables, authMode, apiKey, endpoint }, headers, abortController, customUserAgentDetails, authToken);\n                }\n                else {\n                    // NOTE: this wrapper function must be await-able so the Amplify server context manager can\n                    // destroy the context only after it completes\n                    const wrapper = async (amplifyInstance) => {\n                        const result = await this._graphql(amplifyInstance, { query, variables, authMode, apiKey, endpoint }, headers, abortController, customUserAgentDetails, authToken);\n                        return result;\n                    };\n                    responsePromise = amplify(wrapper);\n                }\n                this._api.updateRequestToBeCancellable(responsePromise, abortController);\n                return responsePromise;\n            }\n            case 'subscription':\n                return this._graphqlSubscribe(amplify, { query, variables, authMode, apiKey, endpoint }, headers, customUserAgentDetails, authToken);\n            default:\n                throw new Error(`invalid operation type: ${operationType}`);\n        }\n    }\n    async _graphql(amplify, { query, variables, authMode: authModeOverride, endpoint: endpointOverride, apiKey: apiKeyOverride, }, additionalHeaders = {}, abortController, customUserAgentDetails, authToken) {\n        const { apiKey, region, endpoint: appSyncGraphqlEndpoint, customEndpoint, customEndpointRegion, defaultAuthMode, } = resolveConfig(amplify);\n        const initialAuthMode = authModeOverride || defaultAuthMode || 'iam';\n        // identityPool is an alias for iam. TODO: remove 'iam' in v7\n        const authMode = initialAuthMode === 'identityPool' ? 'iam' : initialAuthMode;\n        /**\n         * Retrieve library options from Amplify configuration.\n         * `customHeaders` here are from the Amplify configuration options,\n         * and are for non-AppSync endpoints only. These are *not* the same as\n         * `additionalHeaders`, which are custom headers that are either 1)\n         * included when configuring the API client or 2) passed along with\n         * individual requests.\n         */\n        const { headers: customHeaders, withCredentials } = resolveLibraryOptions(amplify);\n        /**\n         * Client or request-specific custom headers that may or may not be\n         * returned by a function:\n         */\n        let additionalCustomHeaders;\n        if (typeof additionalHeaders === 'function') {\n            const requestOptions = {\n                method: 'POST',\n                url: new AmplifyUrl(endpointOverride || customEndpoint || appSyncGraphqlEndpoint || '').toString(),\n                queryString: print(query),\n            };\n            additionalCustomHeaders = await additionalHeaders(requestOptions);\n        }\n        else {\n            additionalCustomHeaders = additionalHeaders;\n        }\n        // if an authorization header is set, have the explicit authToken take precedence\n        if (authToken) {\n            additionalCustomHeaders = {\n                ...additionalCustomHeaders,\n                Authorization: authToken,\n            };\n        }\n        const authHeaders = await headerBasedAuth(amplify, authMode, apiKeyOverride ?? apiKey, additionalCustomHeaders);\n        const headers = {\n            ...(!customEndpoint && authHeaders),\n            /**\n             * Custom endpoint headers.\n             * If there is both a custom endpoint and custom region present, we get the headers.\n             * If there is a custom endpoint but no region, we return an empty object.\n             * If neither are present, we return an empty object.\n             */\n            ...((customEndpoint && (customEndpointRegion ? authHeaders : {})) || {}),\n            // Custom headers included in Amplify configuration options:\n            ...(customHeaders &&\n                (await customHeaders({\n                    query: print(query),\n                    variables,\n                }))),\n            // Custom headers from individual requests or API client configuration:\n            ...additionalCustomHeaders,\n            // User agent headers:\n            ...(!customEndpoint && {\n                [USER_AGENT_HEADER]: getAmplifyUserAgent(customUserAgentDetails),\n            }),\n        };\n        const body = {\n            query: print(query),\n            variables: variables || null,\n        };\n        let signingServiceInfo;\n        /**\n         * We do not send the signing service info to the REST API under the\n         * following conditions (i.e. it will not sign the request):\n         *   - there is a custom endpoint but no region\n         *   - the auth mode is `none`, or `apiKey`\n         *   - the auth mode is a type other than the types listed below\n         */\n        if ((customEndpoint && !customEndpointRegion) ||\n            (authMode !== 'oidc' &&\n                authMode !== 'userPool' &&\n                authMode !== 'iam' &&\n                authMode !== 'lambda')) {\n            signingServiceInfo = undefined;\n        }\n        else {\n            signingServiceInfo = {\n                service: !customEndpointRegion ? 'appsync' : 'execute-api',\n                region: !customEndpointRegion ? region : customEndpointRegion,\n            };\n        }\n        const endpoint = endpointOverride || customEndpoint || appSyncGraphqlEndpoint;\n        if (!endpoint) {\n            throw createGraphQLResultWithError(new GraphQLApiError(NO_ENDPOINT));\n        }\n        let response;\n        try {\n            // \t// // See the inline doc of the REST `post()` API for possible errors to be thrown.\n            // \t// // As these errors are catastrophic they should be caught and handled by GraphQL\n            // \t// // API consumers.\n            const { body: responseBody } = await this._api.post(amplify, {\n                url: new AmplifyUrl(endpoint),\n                options: {\n                    headers,\n                    body,\n                    signingServiceInfo,\n                    withCredentials,\n                },\n                abortController,\n            });\n            response = await responseBody.json();\n        }\n        catch (error) {\n            if (this.isCancelError(error)) {\n                throw error;\n            }\n            response = createGraphQLResultWithError(error);\n        }\n        if (isGraphQLResponseWithErrors(response)) {\n            throw repackageUnauthorizedError(response);\n        }\n        return response;\n    }\n    /**\n     * Checks to see if an error thrown is from an api request cancellation\n     * @param {any} error - Any error\n     * @return {boolean} - A boolean indicating if the error was from an api request cancellation\n     */\n    isCancelError(error) {\n        return this._api.isCancelErrorREST(error);\n    }\n    /**\n     * Cancels an inflight request. Only applicable for graphql queries and mutations\n     * @param {any} request - request to cancel\n     * @returns - A boolean indicating if the request was cancelled\n     */\n    cancel(request, message) {\n        return this._api.cancelREST(request, message);\n    }\n    _graphqlSubscribe(amplify, { query, variables, authMode: authModeOverride, apiKey: apiKeyOverride, endpoint, }, additionalHeaders = {}, customUserAgentDetails, authToken) {\n        const config = resolveConfig(amplify);\n        const initialAuthMode = authModeOverride || config?.defaultAuthMode || 'iam';\n        // identityPool is an alias for iam. TODO: remove 'iam' in v7\n        const authMode = initialAuthMode === 'identityPool' ? 'iam' : initialAuthMode;\n        /**\n         * Retrieve library options from Amplify configuration.\n         * `libraryConfigHeaders` are from the Amplify configuration options,\n         * and will not be overwritten by other custom headers. These are *not*\n         * the same as `additionalHeaders`, which are custom headers that are\n         * either 1)included when configuring the API client or 2) passed along\n         * with individual requests.\n         */\n        const { headers: libraryConfigHeaders } = resolveLibraryOptions(amplify);\n        const appSyncGraphqlEndpoint = endpoint ?? config?.endpoint;\n        // TODO: This could probably be an exception. But, lots of tests rely on\n        // attempting to connect to nowhere. So, I'm treating as the opposite of\n        // a Chesterton's fence for now. (A fence I shouldn't build, because I don't\n        // know why somethings depends on its absence!)\n        const memoKey = appSyncGraphqlEndpoint ?? 'none';\n        const realtimeProvider = this.appSyncRealTime.get(memoKey) ?? new AWSAppSyncRealTimeProvider();\n        this.appSyncRealTime.set(memoKey, realtimeProvider);\n        return realtimeProvider\n            .subscribe({\n            query: print(query),\n            variables,\n            appSyncGraphqlEndpoint,\n            region: config?.region,\n            authenticationType: authMode,\n            apiKey: apiKeyOverride ?? config?.apiKey,\n            additionalHeaders,\n            authToken,\n            libraryConfigHeaders,\n        }, customUserAgentDetails)\n            .pipe(catchError(e => {\n            if (e.errors) {\n                throw repackageUnauthorizedError(e);\n            }\n            throw e;\n        }));\n    }\n}\nexport const InternalGraphQLAPI = new InternalGraphQLAPIClass();\n"],"names":["cancelREST","isCancelErrorREST"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AAaA,MAAM,iBAAiB,GAAG,kBAAkB;AAC5C,MAAM,iBAAiB,GAAG,CAAC,OAAO,KAAK;AACvC,IAAI,OAAO,OAAO,OAAO,KAAK,UAAU;AACxC,CAAC;AACD;AACA;AACA;AACO,MAAM,uBAAuB,CAAC;AACrC,IAAI,WAAW,GAAG;AAClB;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;AACxC,QAAQ,IAAI,CAAC,IAAI,GAAG;AACpB,YAAY,IAAI;AAChB,wBAAYA,MAAU;AACtB,+BAAYC,aAAiB;AAC7B,YAAY,4BAA4B;AACxC,SAAS;AACT,IAAI;AACJ,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,oBAAoB;AACnC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,SAAS,EAAE;AACvC,QAAQ,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;AACpC,QAAQ,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;AAC3C,QAAQ,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,WAAW;AAC1D,QAAQ,OAAO,aAAa;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,EAAE,iBAAiB,EAAE,sBAAsB,EAAE;AAC/I,QAAQ,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK;AAC5C,cAAc,KAAK,CAAC,UAAU;AAC9B,cAAc,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,CAAC;AACvG,QAAQ,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,YAAY;AACzD,QAAQ,MAAM,OAAO,GAAG,iBAAiB,IAAI,EAAE;AAC/C,QAAQ,QAAQ,aAAa;AAC7B,YAAY,KAAK,OAAO;AACxB,YAAY,KAAK,UAAU,EAAE;AAC7B,gBAAgB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;AAC7D,gBAAgB,IAAI,eAAe;AACnC,gBAAgB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;AAChD,oBAAoB,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,SAAS,CAAC;AAC3K,gBAAgB;AAChB,qBAAqB;AACrB;AACA;AACA,oBAAoB,MAAM,OAAO,GAAG,OAAO,eAAe,KAAK;AAC/D,wBAAwB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,SAAS,CAAC;AAC1L,wBAAwB,OAAO,MAAM;AACrC,oBAAoB,CAAC;AACrB,oBAAoB,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;AACtD,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,eAAe,EAAE,eAAe,CAAC;AACxF,gBAAgB,OAAO,eAAe;AACtC,YAAY;AACZ,YAAY,KAAK,cAAc;AAC/B,gBAAgB,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,CAAC;AACpJ,YAAY;AACZ,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC,CAAC;AAC3E;AACA,IAAI;AACJ,IAAI,MAAM,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,GAAG,EAAE,iBAAiB,GAAG,EAAE,EAAE,eAAe,EAAE,sBAAsB,EAAE,SAAS,EAAE;AAC/M,QAAQ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC;AACnJ,QAAQ,MAAM,eAAe,GAAG,gBAAgB,IAAI,eAAe,IAAI,KAAK;AAC5E;AACA,QAAQ,MAAM,QAAQ,GAAG,eAAe,KAAK,cAAc,GAAG,KAAK,GAAG,eAAe;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAC1F;AACA;AACA;AACA;AACA,QAAQ,IAAI,uBAAuB;AACnC,QAAQ,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE;AACrD,YAAY,MAAM,cAAc,GAAG;AACnC,gBAAgB,MAAM,EAAE,MAAM;AAC9B,gBAAgB,GAAG,EAAE,IAAI,UAAU,CAAC,gBAAgB,IAAI,cAAc,IAAI,sBAAsB,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;AAClH,gBAAgB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;AACzC,aAAa;AACb,YAAY,uBAAuB,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC;AAC7E,QAAQ;AACR,aAAa;AACb,YAAY,uBAAuB,GAAG,iBAAiB;AACvD,QAAQ;AACR;AACA,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,uBAAuB,GAAG;AACtC,gBAAgB,GAAG,uBAAuB;AAC1C,gBAAgB,aAAa,EAAE,SAAS;AACxC,aAAa;AACb,QAAQ;AACR,QAAQ,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,IAAI,MAAM,EAAE,uBAAuB,CAAC;AACvH,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAI,CAAC,cAAc,KAAK,oBAAoB,GAAG,WAAW,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AACpF;AACA,YAAY,IAAI,aAAa;AAC7B,iBAAiB,MAAM,aAAa,CAAC;AACrC,oBAAoB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AACvC,oBAAoB,SAAS;AAC7B,iBAAiB,CAAC,CAAC,CAAC;AACpB;AACA,YAAY,GAAG,uBAAuB;AACtC;AACA,YAAY,IAAI,CAAC,cAAc,IAAI;AACnC,gBAAgB,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,sBAAsB,CAAC;AAChF,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,MAAM,IAAI,GAAG;AACrB,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AAC/B,YAAY,SAAS,EAAE,SAAS,IAAI,IAAI;AACxC,SAAS;AACT,QAAQ,IAAI,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,IAAI,CAAC,oBAAoB;AACpD,aAAa,QAAQ,KAAK,MAAM;AAChC,gBAAgB,QAAQ,KAAK,UAAU;AACvC,gBAAgB,QAAQ,KAAK,KAAK;AAClC,gBAAgB,QAAQ,KAAK,QAAQ,CAAC,EAAE;AACxC,YAAY,kBAAkB,GAAG,SAAS;AAC1C,QAAQ;AACR,aAAa;AACb,YAAY,kBAAkB,GAAG;AACjC,gBAAgB,OAAO,EAAE,CAAC,oBAAoB,GAAG,SAAS,GAAG,aAAa;AAC1E,gBAAgB,MAAM,EAAE,CAAC,oBAAoB,GAAG,MAAM,GAAG,oBAAoB;AAC7E,aAAa;AACb,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,gBAAgB,IAAI,cAAc,IAAI,sBAAsB;AACrF,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,MAAM,4BAA4B,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;AAChF,QAAQ;AACR,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI;AACZ;AACA;AACA;AACA,YAAY,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACzE,gBAAgB,GAAG,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC;AAC7C,gBAAgB,OAAO,EAAE;AACzB,oBAAoB,OAAO;AAC3B,oBAAoB,IAAI;AACxB,oBAAoB,kBAAkB;AACtC,oBAAoB,eAAe;AACnC,iBAAiB;AACjB,gBAAgB,eAAe;AAC/B,aAAa,CAAC;AACd,YAAY,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;AAChD,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAC3C,gBAAgB,MAAM,KAAK;AAC3B,YAAY;AACZ,YAAY,QAAQ,GAAG,4BAA4B,CAAC,KAAK,CAAC;AAC1D,QAAQ;AACR,QAAQ,IAAI,2BAA2B,CAAC,QAAQ,CAAC,EAAE;AACnD,YAAY,MAAM,0BAA0B,CAAC,QAAQ,CAAC;AACtD,QAAQ;AACR,QAAQ,OAAO,QAAQ;AACvB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;AACrD,IAAI;AACJ,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,GAAG,EAAE,iBAAiB,GAAG,EAAE,EAAE,sBAAsB,EAAE,SAAS,EAAE;AAC/K,QAAQ,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAQ,MAAM,eAAe,GAAG,gBAAgB,IAAI,MAAM,EAAE,eAAe,IAAI,KAAK;AACpF;AACA,QAAQ,MAAM,QAAQ,GAAG,eAAe,KAAK,cAAc,GAAG,KAAK,GAAG,eAAe;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAChF,QAAQ,MAAM,sBAAsB,GAAG,QAAQ,IAAI,MAAM,EAAE,QAAQ;AACnE;AACA;AACA;AACA;AACA,QAAQ,MAAM,OAAO,GAAG,sBAAsB,IAAI,MAAM;AACxD,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,0BAA0B,EAAE;AACtG,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAC3D,QAAQ,OAAO;AACf,aAAa,SAAS,CAAC;AACvB,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AAC/B,YAAY,SAAS;AACrB,YAAY,sBAAsB;AAClC,YAAY,MAAM,EAAE,MAAM,EAAE,MAAM;AAClC,YAAY,kBAAkB,EAAE,QAAQ;AACxC,YAAY,MAAM,EAAE,cAAc,IAAI,MAAM,EAAE,MAAM;AACpD,YAAY,iBAAiB;AAC7B,YAAY,SAAS;AACrB,YAAY,oBAAoB;AAChC,SAAS,EAAE,sBAAsB;AACjC,aAAa,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI;AAClC,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE;AAC1B,gBAAgB,MAAM,0BAA0B,CAAC,CAAC,CAAC;AACnD,YAAY;AACZ,YAAY,MAAM,CAAC;AACnB,QAAQ,CAAC,CAAC,CAAC;AACX,IAAI;AACJ;AACY,MAAC,kBAAkB,GAAG,IAAI,uBAAuB;;;;"}