@ape.swap/bonds-sdk 6.0.7 → 6.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -35,7 +35,7 @@ const ListTag = ({ text = '', marketingCampaign }) => {
|
|
|
35
35
|
'&:hover': {
|
|
36
36
|
background: 'rgb(20 18 29 / 0.36)',
|
|
37
37
|
},
|
|
38
|
-
}, children: [text === 'Selling Fast' && jsx(Svg, { icon: 'SellingFast', width:
|
|
38
|
+
}, children: [text === 'Selling Fast' && jsx(Svg, { icon: 'SellingFast', width: 12 }), text === 'Short Supply' && jsx(Svg, { icon: icons.SHORT_SUPPLY, width: 20 }), text === 'New Offer' && jsx(Svg, { icon: 'NewOffer', width: 20 }), text === 'Whale Activity' && jsx(Svg, { icon: 'WhaleActivity', width: 20 }), text.toUpperCase()] }));
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export { ListTag as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListTag.js","sources":["../../../../src/components/uikit-sdk/Tag/ListTag.tsx"],"sourcesContent":["import React from 'react'\nimport Flex from '../Flex'\nimport { MCTagStyles } from '../../../utils/campaignStyles'\nimport { MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport Svg from '../Svg'\nimport { icons } from '../Svg/types'\n\nconst bg = {\n ['Selling Fast']: '#14121D',\n ['Short Supply']: '#14121D',\n ['New Offer']: '#14121D',\n ['Whale Activity']: '#14121D',\n}\n\nconst colorMap = {\n ['Selling Fast']: '#EA901B',\n ['Short Supply']: '#FCA384',\n ['New Offer']: '#AA80F9',\n ['Whale Activity']: '#8EE3FF',\n}\n\nconst ListTag = ({ text = '', marketingCampaign }: { text?: string; marketingCampaign?: MarketingCampaign }) => {\n return (\n <Flex\n className=\"list-tag\"\n sx={{\n //@ts-ignore\n background: bg[text] || '#3C6AB530',\n //@ts-ignore\n color: colorMap[text] || '#3b78d3',\n fontSize: '10px',\n fontWeight: 600,\n alignItems: 'center',\n lineHeight: '15px',\n p: '2px 6px',\n borderRadius: '5px',\n width: 'fit-content',\n zIndex: 2,\n gap: '5px',\n ...MCTagStyles[marketingCampaign!],\n '&:hover': {\n background: 'rgb(20 18 29 / 0.36)',\n },\n }}\n >\n {text === 'Selling Fast' && <Svg icon={'SellingFast'} width={
|
|
1
|
+
{"version":3,"file":"ListTag.js","sources":["../../../../src/components/uikit-sdk/Tag/ListTag.tsx"],"sourcesContent":["import React from 'react'\nimport Flex from '../Flex'\nimport { MCTagStyles } from '../../../utils/campaignStyles'\nimport { MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport Svg from '../Svg'\nimport { icons } from '../Svg/types'\n\nconst bg = {\n ['Selling Fast']: '#14121D',\n ['Short Supply']: '#14121D',\n ['New Offer']: '#14121D',\n ['Whale Activity']: '#14121D',\n}\n\nconst colorMap = {\n ['Selling Fast']: '#EA901B',\n ['Short Supply']: '#FCA384',\n ['New Offer']: '#AA80F9',\n ['Whale Activity']: '#8EE3FF',\n}\n\nconst ListTag = ({ text = '', marketingCampaign }: { text?: string; marketingCampaign?: MarketingCampaign }) => {\n return (\n <Flex\n className=\"list-tag\"\n sx={{\n //@ts-ignore\n background: bg[text] || '#3C6AB530',\n //@ts-ignore\n color: colorMap[text] || '#3b78d3',\n fontSize: '10px',\n fontWeight: 600,\n alignItems: 'center',\n lineHeight: '15px',\n p: '2px 6px',\n borderRadius: '5px',\n width: 'fit-content',\n zIndex: 2,\n gap: '5px',\n ...MCTagStyles[marketingCampaign!],\n '&:hover': {\n background: 'rgb(20 18 29 / 0.36)',\n },\n }}\n >\n {text === 'Selling Fast' && <Svg icon={'SellingFast'} width={12} />}\n {text === 'Short Supply' && <Svg icon={icons.SHORT_SUPPLY} width={20} />}\n {text === 'New Offer' && <Svg icon={'NewOffer'} width={20} />}\n {text === 'Whale Activity' && <Svg icon={'WhaleActivity'} width={20} />}\n {text.toUpperCase()}\n </Flex>\n )\n}\n\nexport default ListTag\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAOA,MAAM,EAAE,GAAG;IACT,CAAC,cAAc,GAAG,SAAS;IAC3B,CAAC,cAAc,GAAG,SAAS;IAC3B,CAAC,WAAW,GAAG,SAAS;IACxB,CAAC,gBAAgB,GAAG,SAAS;CAC9B;AAED,MAAM,QAAQ,GAAG;IACf,CAAC,cAAc,GAAG,SAAS;IAC3B,CAAC,cAAc,GAAG,SAAS;IAC3B,CAAC,WAAW,GAAG,SAAS;IACxB,CAAC,gBAAgB,GAAG,SAAS;CAC9B;AAED,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,iBAAiB,EAA4D,KAAI;IAC7G,QACEA,KAAC,IAAI,EAAA,EACH,SAAS,EAAC,UAAU,EACpB,EAAE,EAAE;;AAEF,YAAA,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW;;AAEnC,YAAA,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS;AAClC,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,UAAU,EAAE,MAAM;AAClB,YAAA,CAAC,EAAE,SAAS;AACZ,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,GAAG,EAAE,KAAK;YACV,GAAG,WAAW,CAAC,iBAAkB,CAAC;AAClC,YAAA,SAAS,EAAE;AACT,gBAAA,UAAU,EAAE,sBAAsB;AACnC,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,CAEA,IAAI,KAAK,cAAc,IAAIC,IAAC,GAAG,EAAA,EAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,GAAI,EAClE,IAAI,KAAK,cAAc,IAAIA,GAAA,CAAC,GAAG,EAAA,EAAC,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,EAAA,CAAI,EACvE,IAAI,KAAK,WAAW,IAAIA,GAAA,CAAC,GAAG,EAAA,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAA,CAAI,EAC5D,IAAI,KAAK,gBAAgB,IAAIA,GAAA,CAAC,GAAG,EAAA,EAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAA,CAAI,EACtE,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA,CACd;AAEX;;;;"}
|
|
@@ -55,7 +55,6 @@ const calculateBondsData = async (queryClient) => {
|
|
|
55
55
|
// Fetch EVM & SOL data from realtime
|
|
56
56
|
let evmSolBondsData = [];
|
|
57
57
|
try {
|
|
58
|
-
throw new Error('asd');
|
|
59
58
|
// For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.
|
|
60
59
|
const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`);
|
|
61
60
|
evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond) => chains.includes(bond.chainId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsDataPreTGE } from './fetchBondsData/fetchBondsDataPreTGE'\nimport { fetchBondsDataEVM } from './fetchBondsData/fetchBondsDataEVM'\nimport { fetchBondsDataAptos } from './fetchBondsData/fetchBondsDataAptos'\nimport { fetchBondsDataSUI } from './fetchBondsData/fetchBondsDataSui'\nimport { fetchBondsDataSOL } from './fetchBondsData/fetchBondsDataSOL'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList && !!tokenPricesKey,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 0,\n staleTime: 25000, // i.e. 25 sec\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // ----------------------- Step 1 -----------------------\n // Fetch necessary data from the queryClient\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]) as Partial<Record<ChainId, TokenPrices[]>>\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n\n // ----------------------- Step 2 -----------------------\n // Fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\n
|
|
1
|
+
{"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsDataPreTGE } from './fetchBondsData/fetchBondsDataPreTGE'\nimport { fetchBondsDataEVM } from './fetchBondsData/fetchBondsDataEVM'\nimport { fetchBondsDataAptos } from './fetchBondsData/fetchBondsDataAptos'\nimport { fetchBondsDataSUI } from './fetchBondsData/fetchBondsDataSui'\nimport { fetchBondsDataSOL } from './fetchBondsData/fetchBondsDataSOL'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList && !!tokenPricesKey,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 0,\n staleTime: 25000, // i.e. 25 sec\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // ----------------------- Step 1 -----------------------\n // Fetch necessary data from the queryClient\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]) as Partial<Record<ChainId, TokenPrices[]>>\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n\n // ----------------------- Step 2 -----------------------\n // Fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\n // For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.\n const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`)\n evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond: BondsData) => chains.includes(bond.chainId))\n } catch {\n // Fallback strategy\n if (bondList) {\n console.time('Fallback BondsData')\n const billData = await Promise.all([\n ...chains\n .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)\n .map(async (chainId: ChainId) => {\n if (!reducedBonds[chainId]) return []\n return chainId === ChainId.SOL\n ? await fetchBondsDataSOL(reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n : await fetchBondsDataEVM(chainId, reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n }),\n ...chains.map(async (chainId: ChainId) => {\n const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? []\n return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl)\n }),\n ])\n console.timeEnd('Fallback BondsData')\n evmSolBondsData = billData.flat()\n }\n }\n\n // ----------------------- Step 3 -----------------------\n // Fetch Aptos & Sui Bonds data\n let aptosBonds: BondsData[] = []\n let suiBonds: BondsData[] = []\n\n try {\n if (reducedBonds && tokenPrices) {\n const includesAptos = chains.includes(ChainId.APTOS)\n const includesSui = chains.includes(ChainId.SUI)\n\n if (includesAptos && includesSui) {\n const [aptos, sui] = await Promise.all([\n fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]),\n fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]),\n ])\n aptosBonds = aptos\n suiBonds = sui\n } else if (includesAptos) {\n aptosBonds = await fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS])\n } else if (includesSui) {\n suiBonds = await fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI])\n }\n }\n } catch (e) {\n console.error(e)\n }\n\n return [...evmSolBondsData, ...aptosBonds, ...suiBonds]\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAgBc,SAAU,YAAY,GAAA;IAClC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;IACzC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,kBAAkB,EAAE;IACjD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE;AAC9C,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,MAAM;AAC7D,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AAEpC,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AACjC,QAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC,WAAW,CAAC;QAC9C,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,cAAc;AACvD,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,kBAAkB,EAAE,KAAK;AACzB,QAAA,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,KAAK;AACjB,KAAA,CAAC;AACJ;MAEa,kBAAkB,GAAG,OAAO,WAAwB,KAA0B;;;AAGzF,IAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AACvF,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;AAC1C,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAkB;AACpF,IAAA,MAAM,UAAU,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAmB;AAC/F,IAAA,MAAM,WAAW,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAA4C;AACnH,IAAA,IAAI,CAAC,WAAW;AAAE,QAAA,OAAO,EAAE;IAC3B,MAAM,YAAY,GAAG,QAAQ,EAAE,MAAM,CAAgC,CAAC,GAAG,EAAE,IAAI,KAAI;AACjF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACjB,YAAA,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;QACnB;QACA,IAAI,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAClG,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB;AACA,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;;;IAIN,IAAI,eAAe,GAAgB,EAAE;AAErC,IAAA,IAAI;;QAEF,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,cAAc,CAAA,MAAA,CAAQ,CAAC;QACtE,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAe,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7G;AAAE,IAAA,MAAM;;QAEN,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAClC,YAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACjC,gBAAA,GAAG;AACA,qBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG;AACtD,qBAAA,GAAG,CAAC,OAAO,OAAgB,KAAI;AAC9B,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAAE,wBAAA,OAAO,EAAE;AACrC,oBAAA,OAAO,OAAO,KAAK,OAAO,CAAC;AACzB,0BAAE,MAAM,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;AAC7E,0BAAE,MAAM,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;AAC3F,gBAAA,CAAC,CAAC;gBACJ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,OAAgB,KAAI;AACvC,oBAAA,MAAM,aAAa,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE;oBAClF,OAAO,MAAM,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC;AAChF,gBAAA,CAAC,CAAC;AACH,aAAA,CAAC;AACF,YAAA,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACrC,YAAA,eAAe,GAAG,QAAQ,CAAC,IAAI,EAAE;QACnC;IACF;;;IAIA,IAAI,UAAU,GAAgB,EAAE;IAChC,IAAI,QAAQ,GAAgB,EAAE;AAE9B,IAAA,IAAI;AACF,QAAA,IAAI,YAAY,IAAI,WAAW,EAAE;YAC/B,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YACpD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;AAEhD,YAAA,IAAI,aAAa,IAAI,WAAW,EAAE;gBAChC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACrC,oBAAA,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5E,oBAAA,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvE,iBAAA,CAAC;gBACF,UAAU,GAAG,KAAK;gBAClB,QAAQ,GAAG,GAAG;YAChB;iBAAO,IAAI,aAAa,EAAE;AACxB,gBAAA,UAAU,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjG;iBAAO,IAAI,WAAW,EAAE;AACtB,gBAAA,QAAQ,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzF;QACF;IACF;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB;IAEA,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC;AACzD;;;;"}
|