@explorins/pers-sdk 2.0.7 → 2.0.11
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.
- package/README.md +113 -59
- package/dist/analytics/index.d.ts +0 -2
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/models/index.d.ts +1 -10
- package/dist/analytics/models/index.d.ts.map +1 -1
- package/dist/analytics.cjs +44 -29
- package/dist/analytics.cjs.map +1 -1
- package/dist/analytics.js +45 -2
- package/dist/analytics.js.map +1 -1
- package/dist/business/index.d.ts +0 -1
- package/dist/business/index.d.ts.map +1 -1
- package/dist/business.cjs +7 -774
- package/dist/business.cjs.map +1 -1
- package/dist/business.js +3 -751
- package/dist/business.js.map +1 -1
- package/dist/campaign/index.d.ts +0 -1
- package/dist/campaign/index.d.ts.map +1 -1
- package/dist/campaign.cjs +429 -29
- package/dist/campaign.cjs.map +1 -1
- package/dist/campaign.js +431 -3
- package/dist/campaign.js.map +1 -1
- package/dist/chunks/business-membership-service-8KC_qRj7.cjs +756 -0
- package/dist/chunks/business-membership-service-8KC_qRj7.cjs.map +1 -0
- package/dist/chunks/business-membership-service-D6vaVQTR.js +751 -0
- package/dist/chunks/business-membership-service-D6vaVQTR.js.map +1 -0
- package/dist/chunks/{web3-chain-service-BeBjALg2.cjs → index-B-g2JPVK.cjs} +1 -220
- package/dist/chunks/index-B-g2JPVK.cjs.map +1 -0
- package/dist/chunks/{web3-chain-service-DKHCnHQX.js → index-CKm_V5XE.js} +2 -219
- package/dist/chunks/index-CKm_V5XE.js.map +1 -0
- package/dist/chunks/payment-service-Bkw7ZXev.cjs +214 -0
- package/dist/chunks/payment-service-Bkw7ZXev.cjs.map +1 -0
- package/dist/chunks/payment-service-IvM6rryM.js +211 -0
- package/dist/chunks/payment-service-IvM6rryM.js.map +1 -0
- package/dist/chunks/{pers-sdk-JIExM712.js → pers-sdk-DYnIZvcx.js} +12 -291
- package/dist/chunks/pers-sdk-DYnIZvcx.js.map +1 -0
- package/dist/chunks/{pers-sdk-h-uoLpBx.cjs → pers-sdk-Dr9W8stD.cjs} +38 -318
- package/dist/chunks/pers-sdk-Dr9W8stD.cjs.map +1 -0
- package/dist/chunks/redemption-service-D-hBqh42.js +339 -0
- package/dist/chunks/redemption-service-D-hBqh42.js.map +1 -0
- package/dist/chunks/redemption-service-rMB6T2W5.cjs +342 -0
- package/dist/chunks/redemption-service-rMB6T2W5.cjs.map +1 -0
- package/dist/chunks/tenant-service-CsRA3O2V.js +163 -0
- package/dist/chunks/tenant-service-CsRA3O2V.js.map +1 -0
- package/dist/chunks/tenant-service-fj-pkXTw.cjs +166 -0
- package/dist/chunks/tenant-service-fj-pkXTw.cjs.map +1 -0
- package/dist/chunks/{transaction-request.builder-DrqTWcyC.cjs → transaction-request.builder-BwWmfHXm.cjs} +6 -6
- package/dist/chunks/{transaction-request.builder-DrqTWcyC.cjs.map → transaction-request.builder-BwWmfHXm.cjs.map} +1 -1
- package/dist/chunks/{transaction-request.builder-DltmruUC.js → transaction-request.builder-C1FPWmYN.js} +6 -6
- package/dist/chunks/{transaction-request.builder-DltmruUC.js.map → transaction-request.builder-C1FPWmYN.js.map} +1 -1
- package/dist/chunks/web3-chain-service-D68-0WaW.cjs +224 -0
- package/dist/chunks/web3-chain-service-D68-0WaW.cjs.map +1 -0
- package/dist/chunks/web3-chain-service-DuvxmKSj.js +221 -0
- package/dist/chunks/web3-chain-service-DuvxmKSj.js.map +1 -0
- package/dist/chunks/{explorer.utils-Cx3wrqAj.cjs → web3-manager-C_cFaMCm.cjs} +411 -144
- package/dist/chunks/web3-manager-C_cFaMCm.cjs.map +1 -0
- package/dist/chunks/{explorer.utils-BkS3k8hX.js → web3-manager-OExwBWB7.js} +412 -146
- package/dist/chunks/web3-manager-OExwBWB7.js.map +1 -0
- package/dist/core.cjs +18 -21
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +10 -12
- package/dist/core.js.map +1 -1
- package/dist/donation/index.d.ts +0 -1
- package/dist/donation/index.d.ts.map +1 -1
- package/dist/donation.cjs +48 -29
- package/dist/donation.cjs.map +1 -1
- package/dist/donation.js +50 -3
- package/dist/donation.js.map +1 -1
- package/dist/index.cjs +43 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -15
- package/dist/index.js.map +1 -1
- package/dist/managers/analytics-manager.d.ts +1 -1
- package/dist/managers/index.d.ts +0 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/web3-manager.d.ts +1 -1
- package/dist/managers/web3-manager.d.ts.map +1 -1
- package/dist/node.cjs +10 -13
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +10 -13
- package/dist/node.js.map +1 -1
- package/dist/package.json +4 -10
- package/dist/payment/index.d.ts +0 -1
- package/dist/payment/index.d.ts.map +1 -1
- package/dist/payment.cjs +5 -232
- package/dist/payment.cjs.map +1 -1
- package/dist/payment.js +3 -210
- package/dist/payment.js.map +1 -1
- package/dist/pers-sdk.d.ts +1 -13
- package/dist/pers-sdk.d.ts.map +1 -1
- package/dist/redemption/index.d.ts +0 -1
- package/dist/redemption/index.d.ts.map +1 -1
- package/dist/redemption/services/redemption-service.d.ts +1 -2
- package/dist/redemption/services/redemption-service.d.ts.map +1 -1
- package/dist/redemption.cjs +5 -360
- package/dist/redemption.cjs.map +1 -1
- package/dist/redemption.js +3 -338
- package/dist/redemption.js.map +1 -1
- package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +15 -21
- package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -1
- package/dist/tenant/index.d.ts +0 -1
- package/dist/tenant/index.d.ts.map +1 -1
- package/dist/tenant.cjs +5 -184
- package/dist/tenant.cjs.map +1 -1
- package/dist/tenant.js +3 -162
- package/dist/tenant.js.map +1 -1
- package/dist/token/index.d.ts +0 -1
- package/dist/token/index.d.ts.map +1 -1
- package/dist/token.cjs +1 -25
- package/dist/token.cjs.map +1 -1
- package/dist/token.js +1 -1
- package/dist/transaction/models/transaction-request.builder.d.ts +4 -4
- package/dist/transaction/models/transaction-request.builder.d.ts.map +1 -1
- package/dist/transaction.cjs +1 -1
- package/dist/transaction.js +1 -1
- package/dist/user/index.d.ts +0 -1
- package/dist/user/index.d.ts.map +1 -1
- package/dist/user-status/index.d.ts +0 -1
- package/dist/user-status/index.d.ts.map +1 -1
- package/dist/user-status.cjs +0 -25
- package/dist/user-status.cjs.map +1 -1
- package/dist/user-status.js +0 -1
- package/dist/user-status.js.map +1 -1
- package/dist/user.cjs +209 -29
- package/dist/user.cjs.map +1 -1
- package/dist/user.js +211 -3
- package/dist/user.js.map +1 -1
- package/dist/web3/index.d.ts +1 -0
- package/dist/web3/index.d.ts.map +1 -1
- package/dist/web3-chain/index.d.ts +0 -1
- package/dist/web3-chain/index.d.ts.map +1 -1
- package/dist/web3-chain.cjs +14 -29
- package/dist/web3-chain.cjs.map +1 -1
- package/dist/web3-chain.js +16 -3
- package/dist/web3-chain.js.map +1 -1
- package/dist/web3-manager.cjs +13 -0
- package/dist/web3-manager.cjs.map +1 -0
- package/dist/web3-manager.js +7 -0
- package/dist/web3-manager.js.map +1 -0
- package/dist/web3.cjs +10 -6
- package/dist/web3.cjs.map +1 -1
- package/dist/web3.js +4 -1
- package/dist/web3.js.map +1 -1
- package/package.json +4 -10
- package/dist/chunks/analytics-service-CitlimKJ.cjs +0 -49
- package/dist/chunks/analytics-service-CitlimKJ.cjs.map +0 -1
- package/dist/chunks/analytics-service-CxyrOwel.js +0 -46
- package/dist/chunks/analytics-service-CxyrOwel.js.map +0 -1
- package/dist/chunks/campaign-service-CdEz0jpP.cjs +0 -435
- package/dist/chunks/campaign-service-CdEz0jpP.cjs.map +0 -1
- package/dist/chunks/campaign-service-DrTAqFZM.js +0 -432
- package/dist/chunks/campaign-service-DrTAqFZM.js.map +0 -1
- package/dist/chunks/donation-service--6cnTvWq.cjs +0 -54
- package/dist/chunks/donation-service--6cnTvWq.cjs.map +0 -1
- package/dist/chunks/donation-service-xiXZ2Eto.js +0 -51
- package/dist/chunks/donation-service-xiXZ2Eto.js.map +0 -1
- package/dist/chunks/explorer.utils-BkS3k8hX.js.map +0 -1
- package/dist/chunks/explorer.utils-Cx3wrqAj.cjs.map +0 -1
- package/dist/chunks/index-BtDNXaFq.js +0 -13
- package/dist/chunks/index-BtDNXaFq.js.map +0 -1
- package/dist/chunks/index-CMk3Aqkk.cjs +0 -15
- package/dist/chunks/index-CMk3Aqkk.cjs.map +0 -1
- package/dist/chunks/pers-sdk-JIExM712.js.map +0 -1
- package/dist/chunks/pers-sdk-h-uoLpBx.cjs.map +0 -1
- package/dist/chunks/user-service-BGP3SZpk.js +0 -212
- package/dist/chunks/user-service-BGP3SZpk.js.map +0 -1
- package/dist/chunks/user-service-gITOx4qj.cjs +0 -215
- package/dist/chunks/user-service-gITOx4qj.cjs.map +0 -1
- package/dist/chunks/web3-chain-service-BeBjALg2.cjs.map +0 -1
- package/dist/chunks/web3-chain-service-DKHCnHQX.js.map +0 -1
|
@@ -2,149 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var ethers = require('@explorins/web3-ts/ethers');
|
|
4
4
|
var index = require('./index-B6-bbNnd.cjs');
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* Web3InfrastructureApi - Infrastructure implementation for blockchain operations
|
|
8
|
-
* Uses @explorins/web3-ts for Web3 interactions
|
|
9
|
-
*/
|
|
10
|
-
class Web3InfrastructureApi {
|
|
11
|
-
constructor(web3ChainService) {
|
|
12
|
-
this.web3ChainService = web3ChainService;
|
|
13
|
-
}
|
|
14
|
-
async getTokenBalance(request) {
|
|
15
|
-
try {
|
|
16
|
-
if (request.tokenId !== null)
|
|
17
|
-
request.tokenId = request.tokenId.toString();
|
|
18
|
-
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
19
|
-
const contract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
20
|
-
return await ethers.getAccountTokenBalance(contract, request.accountAddress, request.tokenId);
|
|
21
|
-
}
|
|
22
|
-
catch (error) {
|
|
23
|
-
console.error(`Failed to get token balance for ${request.accountAddress} for ${request.contractAddress} and tokenId ${request.tokenId}, return 0 instead:`, error);
|
|
24
|
-
return 0;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async getTokenUri(request) {
|
|
28
|
-
try {
|
|
29
|
-
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
30
|
-
const contract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
31
|
-
const tokenId = Number(request.tokenId);
|
|
32
|
-
const tokenUri = await ethers.getTokenUri(contract, tokenId);
|
|
33
|
-
return String(tokenUri);
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error(`Failed to get token URI for tokenId ${request.tokenId}:`, error);
|
|
37
|
-
throw error;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
async getTokenOfOwnerByIndex(request) {
|
|
41
|
-
try {
|
|
42
|
-
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
43
|
-
const tokenContract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
44
|
-
const tokenId = await ethers.getTokenOfOwnerByIndex(tokenContract, request.accountAddress, request.tokenIndex);
|
|
45
|
-
return String(tokenId);
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
console.error(`Failed to get token by index ${request.tokenIndex} for ${request.accountAddress}:`, error);
|
|
49
|
-
throw error;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* IPFSInfrastructureApi - Infrastructure implementation for IPFS operations
|
|
56
|
-
* Uses Web3ChainService for IPFS gateway resolution with centralized caching
|
|
57
|
-
*/
|
|
58
|
-
class IPFSInfrastructureApi {
|
|
59
|
-
constructor(web3ChainService) {
|
|
60
|
-
this.web3ChainService = web3ChainService;
|
|
61
|
-
this.defaultIpfsGatewayDomain = 'pers.mypinata.cloud';
|
|
62
|
-
this.cache = index.globalCacheService.createNamespace('ipfs');
|
|
63
|
-
}
|
|
64
|
-
async getIpfsGatewayDomain(chainId) {
|
|
65
|
-
const cacheKey = `gateway:${chainId}`;
|
|
66
|
-
return this.cache.getOrSet(cacheKey, async () => {
|
|
67
|
-
try {
|
|
68
|
-
const chainData = await this.web3ChainService.getChainDataWithCache(chainId);
|
|
69
|
-
return chainData.ipfsGatewayDomain || this.defaultIpfsGatewayDomain;
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
console.warn(`Failed to get chain data for chainId ${chainId}, using default IPFS gateway:`, error);
|
|
73
|
-
return this.defaultIpfsGatewayDomain;
|
|
74
|
-
}
|
|
75
|
-
}, index.CacheTTL.GATEWAY);
|
|
76
|
-
}
|
|
77
|
-
async resolveIPFSUrl(url, chainId) {
|
|
78
|
-
if (url.startsWith('ipfs://')) {
|
|
79
|
-
const gateway = await this.getIpfsGatewayDomain(chainId);
|
|
80
|
-
return url.replace('ipfs://', `https://${gateway}/ipfs/`);
|
|
81
|
-
}
|
|
82
|
-
return url;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Fetch metadata from tokenURI, resolve all IPFS URLs, and normalize to SDK format.
|
|
86
|
-
*
|
|
87
|
-
* NORMALIZATION BOUNDARY: This is the single place where ERC metadata standard
|
|
88
|
-
* (snake_case: image, animation_url) is converted to SDK format (camelCase: imageUrl, animationUrl).
|
|
89
|
-
* All downstream consumers receive normalized SDK format with resolved HTTPS URLs.
|
|
90
|
-
*
|
|
91
|
-
* @param tokenUri - Token URI (can be ipfs:// or https://)
|
|
92
|
-
* @param chainId - Chain ID for IPFS gateway selection
|
|
93
|
-
* @returns Normalized TokenMetadata with resolved HTTPS URLs, or null on error
|
|
94
|
-
*/
|
|
95
|
-
async fetchAndProcessMetadata(tokenUri, chainId) {
|
|
96
|
-
try {
|
|
97
|
-
const resolvedUri = await this.resolveIPFSUrl(tokenUri, chainId);
|
|
98
|
-
const response = await fetch(resolvedUri);
|
|
99
|
-
if (!response.ok) {
|
|
100
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
101
|
-
}
|
|
102
|
-
const rawMetadata = await response.json();
|
|
103
|
-
// Resolve IPFS URLs for media fields
|
|
104
|
-
const resolvedImageUrl = rawMetadata.image
|
|
105
|
-
? await this.resolveIPFSUrl(rawMetadata.image, chainId)
|
|
106
|
-
: '';
|
|
107
|
-
const resolvedAnimationUrl = rawMetadata.animation_url
|
|
108
|
-
? await this.resolveIPFSUrl(rawMetadata.animation_url, chainId)
|
|
109
|
-
: undefined;
|
|
110
|
-
// Extract custom properties (anything not in ERC standard)
|
|
111
|
-
const customProperties = Object.fromEntries(Object.entries(rawMetadata).filter(([key]) => !['name', 'description', 'image', 'animation_url', 'external_url', 'attributes'].includes(key)));
|
|
112
|
-
// Return normalized SDK format (typed as TokenMetadata)
|
|
113
|
-
return {
|
|
114
|
-
name: rawMetadata.name || '',
|
|
115
|
-
description: rawMetadata.description || '',
|
|
116
|
-
imageUrl: resolvedImageUrl,
|
|
117
|
-
animationUrl: resolvedAnimationUrl,
|
|
118
|
-
externalUrl: rawMetadata.external_url || undefined,
|
|
119
|
-
attributes: rawMetadata.attributes || [],
|
|
120
|
-
...customProperties
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
console.error('Error fetching metadata:', error);
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
async fetchFromUrl(url) {
|
|
129
|
-
try {
|
|
130
|
-
const response = await fetch(url);
|
|
131
|
-
if (!response.ok) {
|
|
132
|
-
throw new Error(`Failed to fetch from ${url}: ${response.statusText}`);
|
|
133
|
-
}
|
|
134
|
-
return await response.json();
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
console.error(`Error fetching from URL ${url}:`, error);
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Clear IPFS cache for this service
|
|
143
|
-
*/
|
|
144
|
-
clearCache() {
|
|
145
|
-
this.cache.clear();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
5
|
+
var web3ChainService = require('./web3-chain-service-D68-0WaW.cjs');
|
|
6
|
+
var persShared = require('@explorins/pers-shared');
|
|
148
7
|
|
|
149
8
|
// type ContractAnalysis = ReturnType<ContractDomainService['analyzeContract']>;
|
|
150
9
|
/**
|
|
@@ -501,6 +360,149 @@ class Web3ApplicationService {
|
|
|
501
360
|
}
|
|
502
361
|
}
|
|
503
362
|
|
|
363
|
+
/**
|
|
364
|
+
* Web3InfrastructureApi - Infrastructure implementation for blockchain operations
|
|
365
|
+
* Uses @explorins/web3-ts for Web3 interactions
|
|
366
|
+
*/
|
|
367
|
+
class Web3InfrastructureApi {
|
|
368
|
+
constructor(web3ChainService) {
|
|
369
|
+
this.web3ChainService = web3ChainService;
|
|
370
|
+
}
|
|
371
|
+
async getTokenBalance(request) {
|
|
372
|
+
try {
|
|
373
|
+
if (request.tokenId !== null)
|
|
374
|
+
request.tokenId = request.tokenId.toString();
|
|
375
|
+
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
376
|
+
const contract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
377
|
+
return await ethers.getAccountTokenBalance(contract, request.accountAddress, request.tokenId);
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
console.error(`Failed to get token balance for ${request.accountAddress} for ${request.contractAddress} and tokenId ${request.tokenId}, return 0 instead:`, error);
|
|
381
|
+
return 0;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
async getTokenUri(request) {
|
|
385
|
+
try {
|
|
386
|
+
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
387
|
+
const contract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
388
|
+
const tokenId = Number(request.tokenId);
|
|
389
|
+
const tokenUri = await ethers.getTokenUri(contract, tokenId);
|
|
390
|
+
return String(tokenUri);
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
console.error(`Failed to get token URI for tokenId ${request.tokenId}:`, error);
|
|
394
|
+
throw error;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
async getTokenOfOwnerByIndex(request) {
|
|
398
|
+
try {
|
|
399
|
+
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
400
|
+
const tokenContract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
401
|
+
const tokenId = await ethers.getTokenOfOwnerByIndex(tokenContract, request.accountAddress, request.tokenIndex);
|
|
402
|
+
return String(tokenId);
|
|
403
|
+
}
|
|
404
|
+
catch (error) {
|
|
405
|
+
console.error(`Failed to get token by index ${request.tokenIndex} for ${request.accountAddress}:`, error);
|
|
406
|
+
throw error;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* IPFSInfrastructureApi - Infrastructure implementation for IPFS operations
|
|
413
|
+
* Uses Web3ChainService for IPFS gateway resolution with centralized caching
|
|
414
|
+
*/
|
|
415
|
+
class IPFSInfrastructureApi {
|
|
416
|
+
constructor(web3ChainService) {
|
|
417
|
+
this.web3ChainService = web3ChainService;
|
|
418
|
+
this.defaultIpfsGatewayDomain = 'pers.mypinata.cloud';
|
|
419
|
+
this.cache = index.globalCacheService.createNamespace('ipfs');
|
|
420
|
+
}
|
|
421
|
+
async getIpfsGatewayDomain(chainId) {
|
|
422
|
+
const cacheKey = `gateway:${chainId}`;
|
|
423
|
+
return this.cache.getOrSet(cacheKey, async () => {
|
|
424
|
+
try {
|
|
425
|
+
const chainData = await this.web3ChainService.getChainDataWithCache(chainId);
|
|
426
|
+
return chainData.ipfsGatewayDomain || this.defaultIpfsGatewayDomain;
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
console.warn(`Failed to get chain data for chainId ${chainId}, using default IPFS gateway:`, error);
|
|
430
|
+
return this.defaultIpfsGatewayDomain;
|
|
431
|
+
}
|
|
432
|
+
}, index.CacheTTL.GATEWAY);
|
|
433
|
+
}
|
|
434
|
+
async resolveIPFSUrl(url, chainId) {
|
|
435
|
+
if (url.startsWith('ipfs://')) {
|
|
436
|
+
const gateway = await this.getIpfsGatewayDomain(chainId);
|
|
437
|
+
return url.replace('ipfs://', `https://${gateway}/ipfs/`);
|
|
438
|
+
}
|
|
439
|
+
return url;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Fetch metadata from tokenURI, resolve all IPFS URLs, and normalize to SDK format.
|
|
443
|
+
*
|
|
444
|
+
* NORMALIZATION BOUNDARY: This is the single place where ERC metadata standard
|
|
445
|
+
* (snake_case: image, animation_url) is converted to SDK format (camelCase: imageUrl, animationUrl).
|
|
446
|
+
* All downstream consumers receive normalized SDK format with resolved HTTPS URLs.
|
|
447
|
+
*
|
|
448
|
+
* @param tokenUri - Token URI (can be ipfs:// or https://)
|
|
449
|
+
* @param chainId - Chain ID for IPFS gateway selection
|
|
450
|
+
* @returns Normalized TokenMetadata with resolved HTTPS URLs, or null on error
|
|
451
|
+
*/
|
|
452
|
+
async fetchAndProcessMetadata(tokenUri, chainId) {
|
|
453
|
+
try {
|
|
454
|
+
const resolvedUri = await this.resolveIPFSUrl(tokenUri, chainId);
|
|
455
|
+
const response = await fetch(resolvedUri);
|
|
456
|
+
if (!response.ok) {
|
|
457
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
458
|
+
}
|
|
459
|
+
const rawMetadata = await response.json();
|
|
460
|
+
// Resolve IPFS URLs for media fields
|
|
461
|
+
const resolvedImageUrl = rawMetadata.image
|
|
462
|
+
? await this.resolveIPFSUrl(rawMetadata.image, chainId)
|
|
463
|
+
: '';
|
|
464
|
+
const resolvedAnimationUrl = rawMetadata.animation_url
|
|
465
|
+
? await this.resolveIPFSUrl(rawMetadata.animation_url, chainId)
|
|
466
|
+
: undefined;
|
|
467
|
+
// Extract custom properties (anything not in ERC standard)
|
|
468
|
+
const customProperties = Object.fromEntries(Object.entries(rawMetadata).filter(([key]) => !['name', 'description', 'image', 'animation_url', 'external_url', 'attributes'].includes(key)));
|
|
469
|
+
// Return normalized SDK format (typed as TokenMetadata)
|
|
470
|
+
return {
|
|
471
|
+
name: rawMetadata.name || '',
|
|
472
|
+
description: rawMetadata.description || '',
|
|
473
|
+
imageUrl: resolvedImageUrl,
|
|
474
|
+
animationUrl: resolvedAnimationUrl,
|
|
475
|
+
externalUrl: rawMetadata.external_url || undefined,
|
|
476
|
+
attributes: rawMetadata.attributes || [],
|
|
477
|
+
...customProperties
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
console.error('Error fetching metadata:', error);
|
|
482
|
+
return null;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
async fetchFromUrl(url) {
|
|
486
|
+
try {
|
|
487
|
+
const response = await fetch(url);
|
|
488
|
+
if (!response.ok) {
|
|
489
|
+
throw new Error(`Failed to fetch from ${url}: ${response.statusText}`);
|
|
490
|
+
}
|
|
491
|
+
return await response.json();
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
console.error(`Error fetching from URL ${url}:`, error);
|
|
495
|
+
throw error;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Clear IPFS cache for this service
|
|
500
|
+
*/
|
|
501
|
+
clearCache() {
|
|
502
|
+
this.cache.clear();
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
504
506
|
/**
|
|
505
507
|
* Generate explorer URL for a given address or transaction
|
|
506
508
|
*
|
|
@@ -557,9 +559,274 @@ async function getExplorerUrlByChainId(getChainData, chainId, address, type) {
|
|
|
557
559
|
return getExplorerUrl(chainData, address, type);
|
|
558
560
|
}
|
|
559
561
|
|
|
562
|
+
/**
|
|
563
|
+
* Web3 Manager - Clean, high-level interface for Web3 operations
|
|
564
|
+
*
|
|
565
|
+
* Provides a simplified API for common Web3 blockchain tasks while maintaining
|
|
566
|
+
* access to the full Web3 SDK for advanced use cases.
|
|
567
|
+
*
|
|
568
|
+
* ## Supported Token Standards
|
|
569
|
+
*
|
|
570
|
+
* - **ERC-20**: Fungible tokens (credits, points). Query balance with `getTokenBalance()`.
|
|
571
|
+
* - **ERC-721**: Non-fungible tokens (unique NFTs). Supports enumeration - no tokenIds needed.
|
|
572
|
+
* - **ERC-1155**: Multi-token standard (rewards, collectibles). Requires specific tokenIds.
|
|
573
|
+
*
|
|
574
|
+
* ## Recommended: Use Helper Methods
|
|
575
|
+
*
|
|
576
|
+
* For most use cases, use `getAccountOwnedTokensFromContract()` which automatically
|
|
577
|
+
* handles token type detection and tokenId extraction:
|
|
578
|
+
*
|
|
579
|
+
* ```typescript
|
|
580
|
+
* const result = await sdk.web3.getAccountOwnedTokensFromContract(walletAddress, token);
|
|
581
|
+
* console.log(`Wallet owns ${result.totalOwned} tokens`);
|
|
582
|
+
* ```
|
|
583
|
+
*
|
|
584
|
+
* ## Manual Approach (Advanced)
|
|
585
|
+
*
|
|
586
|
+
* For ERC-1155 tokens, tokenIds are extracted from `token.metadata[].tokenMetadataIncrementalId`:
|
|
587
|
+
*
|
|
588
|
+
* ```typescript
|
|
589
|
+
* const tokenIds = token.metadata?.map(meta => meta.tokenMetadataIncrementalId.toString());
|
|
590
|
+
* const collection = await sdk.web3.getTokenCollection({
|
|
591
|
+
* accountAddress: walletAddress,
|
|
592
|
+
* contractAddress: token.contractAddress,
|
|
593
|
+
* abi: token.abi,
|
|
594
|
+
* chainId: token.chainId,
|
|
595
|
+
* tokenIds // Required for ERC-1155, optional for ERC-721
|
|
596
|
+
* });
|
|
597
|
+
* ```
|
|
598
|
+
*/
|
|
599
|
+
class Web3Manager {
|
|
600
|
+
// TODO: Add PersEventEmitter support for blockchain events
|
|
601
|
+
// When ready, add:
|
|
602
|
+
// 1. constructor param: private events?: PersEventEmitter
|
|
603
|
+
// 2. Subscribe to contract events (Transfer, Approval, etc.)
|
|
604
|
+
// 3. Emit via: this.events?.emitSuccess({ domain: 'web3', type: 'NFT_TRANSFERRED', ... })
|
|
605
|
+
// 4. Filter to only user's address (not all transfers)
|
|
606
|
+
// 5. Add cleanup for event listeners on SDK destroy
|
|
607
|
+
constructor(apiClient) {
|
|
608
|
+
this.apiClient = apiClient;
|
|
609
|
+
// Initialize Web3 Chain service
|
|
610
|
+
const web3ChainApi = new web3ChainService.Web3ChainApi(apiClient);
|
|
611
|
+
this.web3ChainService = new web3ChainService.Web3ChainService(web3ChainApi);
|
|
612
|
+
// Initialize Web3 Application service
|
|
613
|
+
const web3InfrastructureApi = new Web3InfrastructureApi(this.web3ChainService);
|
|
614
|
+
const ipfsInfrastructureApi = new IPFSInfrastructureApi(this.web3ChainService);
|
|
615
|
+
this.web3ApplicationService = new Web3ApplicationService(web3InfrastructureApi, ipfsInfrastructureApi);
|
|
616
|
+
}
|
|
617
|
+
/**
|
|
618
|
+
* Get token balance for a specific token
|
|
619
|
+
*
|
|
620
|
+
* @param request - Token balance request parameters
|
|
621
|
+
* @returns Promise resolving to token balance
|
|
622
|
+
*/
|
|
623
|
+
async getTokenBalance(request) {
|
|
624
|
+
return this.web3ApplicationService.getSpecificTokenBalance(request);
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Get token metadata
|
|
628
|
+
*
|
|
629
|
+
* @param request - Token metadata request parameters
|
|
630
|
+
* @returns Promise resolving to token metadata or null if not found
|
|
631
|
+
*/
|
|
632
|
+
async getTokenMetadata(request) {
|
|
633
|
+
return this.web3ApplicationService.getTokenMetadata(request);
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Get token collection
|
|
637
|
+
*
|
|
638
|
+
* @param request - Token collection request parameters
|
|
639
|
+
* @returns Promise resolving to token collection
|
|
640
|
+
*/
|
|
641
|
+
async getTokenCollection(request) {
|
|
642
|
+
return this.web3ApplicationService.getTokenCollection(request);
|
|
643
|
+
}
|
|
644
|
+
/**
|
|
645
|
+
* Resolve IPFS URL to accessible URL
|
|
646
|
+
*
|
|
647
|
+
* @param url - IPFS URL to resolve
|
|
648
|
+
* @param chainId - Chain ID for context
|
|
649
|
+
* @returns Promise resolving to accessible URL
|
|
650
|
+
*/
|
|
651
|
+
async resolveIPFSUrl(url, chainId) {
|
|
652
|
+
return this.web3ApplicationService.resolveIPFSUrl(url, chainId);
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Fetch and process token metadata
|
|
656
|
+
*
|
|
657
|
+
* @param tokenUri - Token URI to fetch metadata from
|
|
658
|
+
* @param chainId - Chain ID for context
|
|
659
|
+
* @returns Promise resolving to processed metadata or null if not found
|
|
660
|
+
*/
|
|
661
|
+
async fetchAndProcessMetadata(tokenUri, chainId) {
|
|
662
|
+
return this.web3ApplicationService.fetchAndProcessMetadata(tokenUri, chainId);
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* Get blockchain chain data by chain ID
|
|
666
|
+
*
|
|
667
|
+
* @param chainId - Chain ID to get data for
|
|
668
|
+
* @returns Promise resolving to chain data or null if not found
|
|
669
|
+
*/
|
|
670
|
+
async getChainDataById(chainId) {
|
|
671
|
+
return this.web3ChainService.getChainDataWithCache(chainId);
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Get explorer URL for a given address or transaction
|
|
675
|
+
*
|
|
676
|
+
* @param chainId - Chain ID to get explorer URL for
|
|
677
|
+
* @param address - Address or transaction hash
|
|
678
|
+
* @param type - Type of explorer URL ('address' or 'tx')
|
|
679
|
+
* @returns Promise resolving to explorer URL
|
|
680
|
+
*/
|
|
681
|
+
async getExplorerUrl(chainId, address, type) {
|
|
682
|
+
return getExplorerUrlByChainId((id) => this.getChainDataById(id), chainId, address, type);
|
|
683
|
+
}
|
|
684
|
+
/**
|
|
685
|
+
* Get the full Web3 SDK for advanced operations
|
|
686
|
+
*
|
|
687
|
+
* @returns Web3SDK instance
|
|
688
|
+
*/
|
|
689
|
+
getWeb3ApplicationService() {
|
|
690
|
+
return this.web3ApplicationService;
|
|
691
|
+
}
|
|
692
|
+
// ==========================================
|
|
693
|
+
// HELPER METHODS
|
|
694
|
+
// ==========================================
|
|
695
|
+
/**
|
|
696
|
+
* Extract tokenIds from a TokenDTO's metadata.
|
|
697
|
+
*
|
|
698
|
+
* Extracts `tokenMetadataIncrementalId` from each metadata entry. This is
|
|
699
|
+
* particularly useful for ERC-1155 tokens which require specific tokenIds
|
|
700
|
+
* to query balances, but works with any token that has metadata.
|
|
701
|
+
*
|
|
702
|
+
* **Note:** For most use cases, prefer `getAccountOwnedTokensFromContract()`
|
|
703
|
+
* which handles tokenId extraction automatically.
|
|
704
|
+
*
|
|
705
|
+
* @param token - Token definition containing metadata array
|
|
706
|
+
* @returns Array of tokenId strings, or undefined if no metadata
|
|
707
|
+
*
|
|
708
|
+
* @example Manual token collection request
|
|
709
|
+
* ```typescript
|
|
710
|
+
* const rewardToken = (await sdk.tokens.getRewardTokens())[0];
|
|
711
|
+
* const tokenIds = sdk.web3.extractTokenIds(rewardToken);
|
|
712
|
+
*
|
|
713
|
+
* if (tokenIds) {
|
|
714
|
+
* const collection = await sdk.web3.getTokenCollection({
|
|
715
|
+
* accountAddress: walletAddress,
|
|
716
|
+
* contractAddress: rewardToken.contractAddress,
|
|
717
|
+
* abi: rewardToken.abi,
|
|
718
|
+
* chainId: rewardToken.chainId,
|
|
719
|
+
* tokenIds
|
|
720
|
+
* });
|
|
721
|
+
* }
|
|
722
|
+
* ```
|
|
723
|
+
*
|
|
724
|
+
* @see {@link getAccountOwnedTokensFromContract} - Recommended helper that handles this automatically
|
|
725
|
+
*/
|
|
726
|
+
extractTokenIds(token) {
|
|
727
|
+
if (!token.metadata || token.metadata.length === 0) {
|
|
728
|
+
return undefined;
|
|
729
|
+
}
|
|
730
|
+
return token.metadata.map(meta => meta.tokenMetadataIncrementalId.toString());
|
|
731
|
+
}
|
|
732
|
+
/**
|
|
733
|
+
* Get owned tokens from a specific token contract for any blockchain address.
|
|
734
|
+
*
|
|
735
|
+
* **Recommended method** for querying token balances. Automatically handles:
|
|
736
|
+
* - Token type detection (ERC-20, ERC-721, ERC-1155)
|
|
737
|
+
* - TokenId extraction from metadata (uses `extractTokenIds()` internally for ERC-1155)
|
|
738
|
+
* - Building the collection request
|
|
739
|
+
* - Filtering to only tokens with balance > 0
|
|
740
|
+
*
|
|
741
|
+
* Works with any valid blockchain address - can query user wallets, external
|
|
742
|
+
* wallets, contract addresses, or any other address holding tokens.
|
|
743
|
+
*
|
|
744
|
+
* @param accountAddress - Any valid blockchain address (wallet, contract, etc.)
|
|
745
|
+
* @param token - Token definition (from getRewardTokens, getStatusTokens, etc.)
|
|
746
|
+
* @param maxTokens - Maximum tokens to retrieve (default: 50)
|
|
747
|
+
* @returns Promise resolving to collection result with owned tokens
|
|
748
|
+
*
|
|
749
|
+
* @example Query user's wallet
|
|
750
|
+
* ```typescript
|
|
751
|
+
* const userWallet = user.wallets[0].address;
|
|
752
|
+
* const result = await sdk.web3.getAccountOwnedTokensFromContract(userWallet, rewardToken);
|
|
753
|
+
* console.log(`User owns ${result.totalOwned} tokens`);
|
|
754
|
+
* ```
|
|
755
|
+
*
|
|
756
|
+
* @example Query any external wallet
|
|
757
|
+
* ```typescript
|
|
758
|
+
* const externalWallet = '0x1234...abcd';
|
|
759
|
+
* const result = await sdk.web3.getAccountOwnedTokensFromContract(externalWallet, rewardToken);
|
|
760
|
+
* console.log(`Wallet owns ${result.totalOwned} tokens`);
|
|
761
|
+
* ```
|
|
762
|
+
*
|
|
763
|
+
* @see {@link extractTokenIds} - Low-level helper used internally for ERC-1155
|
|
764
|
+
* @see {@link buildCollectionRequest} - For manual request building
|
|
765
|
+
*/
|
|
766
|
+
async getAccountOwnedTokensFromContract(accountAddress, token, maxTokens = 50) {
|
|
767
|
+
// For ERC-1155, extract tokenIds from metadata
|
|
768
|
+
const tokenIds = token.type === persShared.NativeTokenTypes.ERC1155 ? this.extractTokenIds(token) : undefined;
|
|
769
|
+
const collection = await this.getTokenCollection({
|
|
770
|
+
accountAddress: accountAddress,
|
|
771
|
+
contractAddress: token.contractAddress,
|
|
772
|
+
abi: token.abi,
|
|
773
|
+
chainId: token.chainId,
|
|
774
|
+
tokenIds,
|
|
775
|
+
maxTokens
|
|
776
|
+
});
|
|
777
|
+
// Filter to only owned tokens (hasBalance: true)
|
|
778
|
+
// For ERC721, include all since they're enumerated
|
|
779
|
+
const ownedTokens = token.type === persShared.NativeTokenTypes.ERC721
|
|
780
|
+
? collection.tokens
|
|
781
|
+
: collection.tokens.filter(t => t.hasBalance);
|
|
782
|
+
// Calculate total owned:
|
|
783
|
+
// - ERC-1155: sum balances (can own multiple copies of same tokenId)
|
|
784
|
+
// - ERC-721: count unique tokens (each token is unique, balance always 1)
|
|
785
|
+
const totalOwned = token.type === persShared.NativeTokenTypes.ERC1155
|
|
786
|
+
? ownedTokens.reduce((sum, t) => sum + (t.balance || 0), 0)
|
|
787
|
+
: ownedTokens.length;
|
|
788
|
+
return {
|
|
789
|
+
token,
|
|
790
|
+
ownedTokens,
|
|
791
|
+
totalOwned
|
|
792
|
+
};
|
|
793
|
+
}
|
|
794
|
+
/**
|
|
795
|
+
* Build a TokenCollectionRequest from a TokenDTO.
|
|
796
|
+
*
|
|
797
|
+
* Automatically handles ERC-1155 tokenId extraction from metadata.
|
|
798
|
+
* Use this when you need more control over the request than
|
|
799
|
+
* `getAccountOwnedTokensFromContract` provides.
|
|
800
|
+
*
|
|
801
|
+
* Works with any valid blockchain address - user wallets, external wallets, etc.
|
|
802
|
+
*
|
|
803
|
+
* @param accountAddress - Any valid blockchain address (wallet, contract, etc.)
|
|
804
|
+
* @param token - Token definition
|
|
805
|
+
* @param maxTokens - Maximum tokens to retrieve
|
|
806
|
+
* @returns TokenCollectionRequest ready for getTokenCollection()
|
|
807
|
+
*
|
|
808
|
+
* @example
|
|
809
|
+
* ```typescript
|
|
810
|
+
* const request = sdk.web3.buildCollectionRequest(walletAddress, rewardToken);
|
|
811
|
+
* const collection = await sdk.web3.getTokenCollection(request);
|
|
812
|
+
* ```
|
|
813
|
+
*/
|
|
814
|
+
buildCollectionRequest(accountAddress, token, maxTokens = 50) {
|
|
815
|
+
return {
|
|
816
|
+
accountAddress: accountAddress,
|
|
817
|
+
contractAddress: token.contractAddress,
|
|
818
|
+
abi: token.abi,
|
|
819
|
+
chainId: token.chainId,
|
|
820
|
+
tokenIds: token.type === persShared.NativeTokenTypes.ERC1155 ? this.extractTokenIds(token) : undefined,
|
|
821
|
+
maxTokens
|
|
822
|
+
};
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
|
|
560
826
|
exports.IPFSInfrastructureApi = IPFSInfrastructureApi;
|
|
561
827
|
exports.Web3ApplicationService = Web3ApplicationService;
|
|
562
828
|
exports.Web3InfrastructureApi = Web3InfrastructureApi;
|
|
829
|
+
exports.Web3Manager = Web3Manager;
|
|
563
830
|
exports.getExplorerUrl = getExplorerUrl;
|
|
564
831
|
exports.getExplorerUrlByChainId = getExplorerUrlByChainId;
|
|
565
|
-
//# sourceMappingURL=
|
|
832
|
+
//# sourceMappingURL=web3-manager-C_cFaMCm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web3-manager-C_cFaMCm.cjs","sources":["../../src/web3/domain/services/token-domain.service.ts","../../src/web3/domain/services/metadata-domain.service.ts","../../src/web3/domain/services/contract-domain.service.ts","../../src/web3/application/web3-application.service.ts","../../src/web3/infrastructure/api/web3-api.ts","../../src/web3/infrastructure/api/ipfs-api.ts","../../src/web3/utils/explorer.utils.ts","../../src/managers/web3-manager.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["globalCacheService","convertAbiToInterface","CacheTTL","createSafeContract","getAccountTokenBalance","getTokenUri","getTokenOfOwnerByIndex","Web3ChainApi","Web3ChainService","NativeTokenTypes"],"mappings":";;;;;;;AASA;AAEA;;AAEG;MACU,kBAAkB,CAAA;AAG7B,IAAA,WAAA,CACU,OAA8B,EAC9B,eAAsC,EACtC,eAAsC,EAAA;QAFtC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,eAAe,GAAf,eAAe;AALjB,QAAA,IAAA,CAAA,KAAK,GAAGA,wBAAkB,CAAC,eAAe,CAAC,cAAc,CAAC;IAOlE;IAEA,MAAM,eAAe,CAAC,MAMrB,EAAA;QACC,MAAM,GAAG,GAAGC,4BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAC,GAAG,MAAM,EAAE,GAAG,EAAC,CAAC;QAEpE,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO;YACP,UAAU,EAAE,OAAO,GAAG,CAAC;AACvB,YAAA,QAAQ,EAAE;SACX;IACH;IAEA,MAAM,gBAAgB,CAAC,MAKtB,EAAA;AAKC,QAAA,MAAM,QAAQ,GAAG,CAAA,SAAA,EAAY,MAAM,CAAC,eAAe,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,EAAE;QAEzF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAW;AAC9C,YAAA,IAAI;gBACF,MAAM,GAAG,GAAGA,4BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,GAAG,MAAM,EAAE,GAAG,EAAC,CAAC;gBAEjE,MAAM,QAAQ,GAAG;AACf,sBAAE,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO;sBAC3E,IAAI;gBAER,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;YACxD;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,gBAAA,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpE;AACF,QAAA,CAAC,EAAEC,cAAQ,CAAC,QAAQ,CAAC;IACvB;IAEA,MAAM,mBAAmB,CAAC,MAMzB,EAAA;QACC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACxD,YAAA,IAAI,CAAC,eAAe,CAAC,EAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM;AAC7B,SAAA,CAAC;QAEF,OAAO;AACL,YAAA,GAAG,aAAa;YAChB,QAAQ,EAAE,cAAc,CAAC;SAC1B;IACH;IAEA,MAAM,uBAAuB,CAAC,MAM7B,EAAA;;AAEC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,EAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;QACzD;;AAGA,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;IACzC;IAEA,MAAM,kBAAkB,CAAC,MAQxB,EAAA;;QAEC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YACrD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,2CAA2C,CAAC;QAClF;AAEA,QAAA,IAAI;YACF,MAAM,GAAG,GAAGD,4BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;;AAGvD,YAAA,IAAI,QAAQ,CAAC,SAAS,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;oBAC5B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,+CAA+C,CAAC;gBACtF;AACA,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;YAC/E;;AAGA,YAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACrB,gBAAA,IAAI,QAAQ,CAAC,cAAc,EAAE;AAC3B,oBAAA,MAAM,EAAC,QAAQ,EAAE,SAAS,EAAC,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC;AAE7E,oBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,wBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,0BAA0B,GAAG,iBAAiB,CAAC;oBACjG;AAEA,oBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;gBACvE;AAAO,qBAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;AAClC,oBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;gBAC9E;qBAAO;oBACL,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,yDAAyD,CAAC;gBAChG;YACF;AAEA,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA,oCAAA,EAAuC,QAAQ,CAAC,QAAQ,cAAc,QAAQ,CAAC,SAAS,CAAA,CAAA,CAAG,CAAC;QAClI;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,eAAe;AACxE,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;YACnD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA,6BAAA,EAAgC,OAAO,CAAA,CAAE,CAAC;QAChF;IACF;AAEA;;AAEG;AACK,IAAA,MAAM,uBAAuB,CAAC,MAKrC,EAAE,GAAc,EAAA;AACf,QAAA,MAAM,iBAAiB,GAAG,CAAA,UAAA,EAAa,MAAM,CAAC,eAAe,CAAA,CAAA,EAAI,MAAM,CAAC,cAAc,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,EAAE;;QAG1G,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AACxD,YAAA,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE;AAC1B,SAAA,CAAC;AAEF,QAAA,IAAI,cAAc,KAAK,CAAC,EAAE;;AAExB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACpC,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAC;QACzC;;QAGA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2D,iBAAiB,CAAC;AAC1G,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,QAAQ;AAElE,QAAA,IAAI,MAAM,IAAI,QAAQ,GAAGC,cAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE;YAC5E,OAAO,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAC;QACrD;;AAGA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC;AACnF,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC;;QAG5E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,EAAEA,cAAQ,CAAC,KAAK,CAAC;AAE7G,QAAA,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAC;IACrC;AAEQ,IAAA,MAAM,wBAAwB,CAAC,MAItC,EAAE,GAAc,EAAE,SAAiB,EAAA;;AAElC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACxD,YAAA,MAAM,mBAAmB,GAAG,CAAA,YAAA,EAAe,MAAM,CAAC,eAAe,CAAA,CAAA,EAAI,MAAM,CAAC,cAAc,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,EAAE;AAEnH,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,mBAAmB,EACnB,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;AACxC,gBAAA,GAAG,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE;AAC7B,aAAA,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;;AAEf,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC,EACFA,cAAQ,CAAC,KAAK;aACf;AACH,QAAA,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAmB,EAAE,KAAK,IAAI,CAAC;IAC1D;IAEQ,MAAM,iBAAiB,CAAC,MAK/B,EAAE,QAAkB,EAAE,SAAiB,EAAE,aAAqC,EAAA;QAC7E,MAAM,MAAM,GAAmB,EAAE;QACjC,MAAM,MAAM,GAAa,EAAE;;AAG3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;AACnD,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;;YAG9C,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,IAAG;AAC1C,gBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;;oBAE/B,OAAO,OAAO,CAAC,OAAO,CAAC;wBACrB,OAAO;AACP,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,QAAQ,EAAE;AACX,qBAAA,CAAC;gBACJ;qBAAO;;oBAEL,OAAO,IAAI,CAAC,eAAe,CAAC,EAAC,GAAG,MAAM,EAAE,OAAO,EAAC;yBAC7C,KAAK,CAAC,KAAK,IAAG;wBACb,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;AAC3C,wBAAA,OAAO,IAAI;AACb,oBAAA,CAAC,CAAC;gBACN;AACF,YAAA,CAAC,CAAC;YAEF,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AACzD,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAC9C,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CACnC;;AAGD,YAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,gBAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,IAC5C,IAAI,CAAC,gBAAgB,CAAC;oBACpB,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,OAAO,EAAE,KAAK,CAAC,OAAQ;oBACvB,OAAO,EAAE,MAAM,CAAC;iBACjB;AACA,qBAAA,IAAI,CAAC,QAAQ,KAAK;oBACjB,OAAO,EAAE,KAAK,CAAC,OAAQ;oBACvB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,QAAQ,EAAE,QAAQ,CAAC;AACH,iBAAA,CAAA;qBACjB,KAAK,CAAC,KAAK,IAAG;AACb,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,KAAK,CAAC,OAAO,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC,OAAO,CAAC;oBAC1E,OAAO;wBACL,OAAO,EAAE,KAAK,CAAC,OAAQ;wBACvB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;AAC5B,wBAAA,QAAQ,EAAE;qBACK;gBACnB,CAAC,CAAC,CACH;gBAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACvD,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;YAC7B;QACF;QAEA,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,YAAA,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,eAAe,EAAE,MAAM,CAAC,MAAM;YAC9B,MAAM;AACN,YAAA,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAG,MAAM,CAAC,MAAM,wBAAwB,GAAG;SACtE;IACH;IAEQ,eAAe,CAAC,MAGvB,EAAE,IAAa,EAAA;QACd,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,MAAM,EAAE,EAAE;YACV;SACD;IACH;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;AACD;;AC1TD;;AAEG;MACU,qBAAqB,CAAA;AAGhC,IAAA,WAAA,CAAoB,OAA8B,EAAA;QAA9B,IAAA,CAAA,OAAO,GAAP,OAAO;AAFnB,QAAA,IAAA,CAAA,KAAK,GAAGF,wBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC;IAET;AAErD,IAAA,MAAM,uBAAuB,CAAC,QAAgB,EAAE,OAAe,EAAA;AAC7D,QAAA,MAAM,QAAQ,GAAG,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAA,EAAI,OAAO,EAAE;QAE/C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,QAAQ,EACR,YAAW;AACT,YAAA,IAAI;gBACF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC;YACtE;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,QAAQ,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAChE,gBAAA,OAAO,IAAI;YACb;AACF,QAAA,CAAC,EACDE,cAAQ,CAAC,QAAQ,CAClB;IACH;AAEA,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,OAAe,EAAA;AAC/C,QAAA,MAAM,QAAQ,GAAG,CAAA,QAAA,EAAW,GAAG,CAAA,CAAA,EAAI,OAAO,EAAE;QAE5C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,QAAQ,EACR,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAC/CA,cAAQ,CAAC,OAAO,CACjB;IACH;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;AACD;;AC1CD;;AAEG;MACU,qBAAqB,CAAA;AAChC,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,eAAe,CAAC,GAAa,EAAA;AAU3B,QAAA,MAAM,QAAQ,GAAGD,4BAAqB,CAAC,GAAG,CAAC;AAC3C,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,IAAK,IAAY,CAAC,IAAI,CAAC;;QAG3G,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChD,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;AACxD,QAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,WAAW,IAAI,eAAe;;QAG7D,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC5D,MAAM,wBAAwB,GAAG,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,QAAA,MAAM,SAAS,GAAG,iBAAiB,IAAI,wBAAwB,IAAI,MAAM;QAEzE,OAAO;AACL,YAAA,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnF,UAAU;AACV,YAAA,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3C,WAAW;AACX,YAAA,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC7E,YAAA,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvC,QAAQ;YACR;SACD;IACH;AACD;;ACRD;;;;AAIG;MACU,sBAAsB,CAAA;IAKjC,WAAA,CACE,OAA8B,EAC9B,OAA8B,EAAA;;AAG9B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,EAAE;QACxD,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAC9C,OAAO,EACP,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,qBAAqB,CAC3B;IACH;AAEA;;AAEG;IACH,MAAM,uBAAuB,CAAC,OAA4B,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC;AACrD,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;YAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,OAAO,EAAE,OAAO,CAAC;AAClB,SAAA,CAAC;IACJ;AAEA;;;;;;;;;;AAUG;IACH,MAAM,gBAAgB,CAAC,OAA4B,EAAA;QACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;YAClE,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,OAAO,EAAE,OAAO,CAAC;AAClB,SAAA,CAAC;;QAGF,OAAO,YAAY,CAAC,QAAQ;IAC9B;AAEA;;AAEG;IACH,MAAM,kBAAkB,CAAC,OAA+B,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;AAChD,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;YAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC;AACnB,SAAA,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,OAAe,EAAA;QAC/C,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;IAChE;AAEA;;;;;AAKG;AACH,IAAA,MAAM,uBAAuB,CAAC,QAAgB,EAAE,OAAe,EAAA;QAC7D,OAAO,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC9E;AACD;;ACtHD;;;AAGG;MACU,qBAAqB,CAAA;AAEhC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;IAEzD,MAAM,eAAe,CAAC,OAMrB,EAAA;AACC,QAAA,IAAI;AACF,YAAA,IAAG,OAAO,CAAC,OAAO,KAAK,IAAI;gBAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzE,YAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC;AAE9F,YAAA,MAAM,QAAQ,GAAGE,yBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC;AAEzF,YAAA,OAAO,MAAMC,6BAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC;QACxF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,CAAC,cAAc,CAAA,KAAA,EAAQ,OAAO,CAAC,eAAe,CAAA,aAAA,EAAgB,OAAO,CAAC,OAAO,qBAAqB,EAAE,KAAK,CAAC;AAClK,YAAA,OAAO,CAAC;QACV;IACF;IAEA,MAAM,WAAW,CAAC,OAKjB,EAAA;AACC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC;AAC9F,YAAA,MAAM,QAAQ,GAAGD,yBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,GAAU,EAAE,cAAqB,CAAC;YAEvG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAME,kBAAW,CAAC,QAAQ,EAAE,OAAO,CAAC;AAErD,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,CAAC,OAAO,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAC/E,YAAA,MAAM,KAAK;QACb;IACF;IAEA,MAAM,sBAAsB,CAAC,OAM5B,EAAA;AACC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC;AAC9F,YAAA,MAAM,aAAa,GAAGF,yBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,GAAU,EAAE,cAAqB,CAAC;AAE5G,YAAA,MAAM,OAAO,GAAG,MAAMG,6BAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC;AACvG,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,6BAAA,EAAgC,OAAO,CAAC,UAAU,CAAA,KAAA,EAAQ,OAAO,CAAC,cAAc,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AACzG,YAAA,MAAM,KAAK;QACb;IACF;AACD;;ACvED;;;AAGG;MACU,qBAAqB,CAAA;AAIhC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAHnB,IAAA,CAAA,wBAAwB,GAAG,qBAAqB;AACzD,QAAA,IAAA,CAAA,KAAK,GAAGN,wBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC;IAED;IAEzD,MAAM,oBAAoB,CAAC,OAAe,EAAA;AACxC,QAAA,MAAM,QAAQ,GAAG,CAAA,QAAA,EAAW,OAAO,EAAE;QAErC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,QAAQ,EACR,YAAW;AACT,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAC5E,gBAAA,OAAO,SAAS,CAAC,iBAAiB,IAAI,IAAI,CAAC,wBAAwB;YACrE;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,CAAA,qCAAA,EAAwC,OAAO,CAAA,6BAAA,CAA+B,EAAE,KAAK,CAAC;gBACnG,OAAO,IAAI,CAAC,wBAAwB;YACtC;AACF,QAAA,CAAC,EACDE,cAAQ,CAAC,OAAO,CACjB;IACH;AAEA,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,OAAe,EAAA;AAC/C,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YACxD,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA,QAAA,EAAW,OAAO,CAAA,MAAA,CAAQ,CAAC;QAC3D;AACA,QAAA,OAAO,GAAG;IACZ;AAEA;;;;;;;;;;AAUG;AACH,IAAA,MAAM,uBAAuB,CAAC,QAAgB,EAAE,OAAe,EAAA;AAC7D,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChE,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;YAC3D;AAEA,YAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;AAGzC,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC;kBACjC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO;kBACpD,EAAE;AACN,YAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC;kBACrC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO;kBAC5D,SAAS;;AAGb,YAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CACzC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KACvC,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC/F,CACF;;YAGD,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;AAC5B,gBAAA,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;AAC1C,gBAAA,QAAQ,EAAE,gBAAgB;AAC1B,gBAAA,YAAY,EAAE,oBAAoB;AAClC,gBAAA,WAAW,EAAE,WAAW,CAAC,YAAY,IAAI,SAAS;AAClD,gBAAA,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AACxC,gBAAA,GAAG;aACa;QACpB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,YAAA,OAAO,IAAI;QACb;IACF;IAEA,MAAM,YAAY,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,GAAG,CAAA,EAAA,EAAK,QAAQ,CAAC,UAAU,CAAA,CAAE,CAAC;YACxE;AAEA,YAAA,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE;QAC9B;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AACvD,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;AACD;;AC/GD;;;;;;;AAOG;SACa,cAAc,CAC5B,SAA2B,EAC3B,OAAe,EACf,IAAsB,EAAA;AAEtB,IAAA,IAAI,SAAS,EAAE,WAAW,EAAE;QAC1B,OAAO,CAAA,EAAG,SAAS,CAAC,WAAW,IAAI,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;IACtD;;AAGA,IAAA,MAAM,OAAO,GAAG,SAAS,EAAE,OAAO;IAClC,IAAI,GAAG,GAAG,EAAE;IACZ,QAAQ,OAAO;AACb,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,GAAG,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YAC/C;AACF,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,GAAG,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACvD;AACF,QAAA,KAAK,EAAE;AACL,YAAA,GAAG,GAAG,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YAC9C;AACF,QAAA,KAAK,EAAE;AACL,YAAA,GAAG,GAAG,CAAA,4BAAA,EAA+B,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACtD;AACF,QAAA,KAAK,GAAG;AACN,YAAA,GAAG,GAAG,CAAA,wCAAA,EAA2C,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YAClE;AACF,QAAA,KAAK,KAAK;AACR,YAAA,GAAG,GAAG,CAAA,uCAAA,EAA0C,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACjE;AACF,QAAA,KAAK,KAAK;AACR,YAAA,GAAG,GAAG,CAAA,4BAAA,EAA+B,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACtD;AACF,QAAA;AACE,YAAA,GAAG,GAAG,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;;AAEnD,IAAA,OAAO,GAAG;AACZ;AAEA;;;;;;;;AAQG;AACI,eAAe,uBAAuB,CAC3C,YAA4D,EAC5D,OAAe,EACf,OAAe,EACf,IAAsB,EAAA;AAEtB,IAAA,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;IAC7C,OAAO,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AACjD;;ACvCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCG;MACU,WAAW,CAAA;;;;;;;;AAYtB,IAAA,WAAA,CAAoB,SAAwB,EAAA;QAAxB,IAAA,CAAA,SAAS,GAAT,SAAS;;AAE3B,QAAA,MAAM,YAAY,GAAG,IAAIK,6BAAY,CAAC,SAAS,CAAC;QAChD,IAAI,CAAC,gBAAgB,GAAG,IAAIC,iCAAgB,CAAC,YAAY,CAAC;;QAG1D,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC9E,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC9E,IAAI,CAAC,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACxG;AAEA;;;;;AAKG;IACH,MAAM,eAAe,CAAC,OAA4B,EAAA;QAChD,OAAO,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,OAAO,CAAC;IACrE;AAEA;;;;;AAKG;IACH,MAAM,gBAAgB,CAAC,OAA4B,EAAA;QACjD,OAAO,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAC9D;AAEA;;;;;AAKG;IACH,MAAM,kBAAkB,CAAC,OAA+B,EAAA;QACtD,OAAO,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAChE;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,OAAe,EAAA;QAC/C,OAAO,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;IACjE;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,uBAAuB,CAAC,QAAgB,EAAE,OAAe,EAAA;QAC7D,OAAO,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC/E;AAEA;;;;;AAKG;IACH,MAAM,gBAAgB,CAAC,OAAe,EAAA;QACpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,OAAO,CAAC;IAC7D;AAEA;;;;;;;AAOG;AACH,IAAA,MAAM,cAAc,CAClB,OAAe,EACf,OAAe,EACf,IAAsB,EAAA;QAEtB,OAAO,uBAAuB,CAC5B,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EACjC,OAAO,EACP,OAAO,EACP,IAAI,CACL;IACH;AAEA;;;;AAIG;IACH,yBAAyB,GAAA;QACvB,OAAO,IAAI,CAAC,sBAAsB;IACpC;;;;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACH,IAAA,eAAe,CAAC,KAAe,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC;IAC/E;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;IACH,MAAM,iCAAiC,CACrC,cAAsB,EACtB,KAAe,EACf,YAAoB,EAAE,EAAA;;QAGtB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAKC,2BAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,SAAS;AAElG,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC;AAC/C,YAAA,cAAc,EAAE,cAAc;YAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ;YACR;AACD,SAAA,CAAC;;;QAIF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,KAAKA,2BAAgB,CAAC;cAChD,UAAU,CAAC;AACb,cAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;;;;QAK/C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAKA,2BAAgB,CAAC;cAC/C,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;AAC1D,cAAE,WAAW,CAAC,MAAM;QAEtB,OAAO;YACL,KAAK;YACL,WAAW;YACX;SACD;IACH;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,sBAAsB,CACpB,cAAsB,EACtB,KAAe,EACf,YAAoB,EAAE,EAAA;QAEtB,OAAO;AACL,YAAA,cAAc,EAAE,cAAc;YAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAKA,2BAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,SAAS;YAC3F;SACD;IACH;AACD;;;;;;;;;"}
|