@brightchain/brightchain-api-lib 0.14.0 → 0.15.0

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.
Files changed (242) hide show
  1. package/package.json +5 -5
  2. package/src/index.d.ts +3 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +5 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/application.d.ts +1 -0
  7. package/src/lib/application.d.ts.map +1 -1
  8. package/src/lib/application.js +23 -0
  9. package/src/lib/application.js.map +1 -1
  10. package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
  11. package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
  12. package/src/lib/auth/aclEnforcedAvailability.js +87 -0
  13. package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
  14. package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
  15. package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
  16. package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
  17. package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
  18. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
  19. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
  20. package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
  21. package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
  22. package/src/lib/auth/index.d.ts +7 -0
  23. package/src/lib/auth/index.d.ts.map +1 -0
  24. package/src/lib/auth/index.js +13 -0
  25. package/src/lib/auth/index.js.map +1 -0
  26. package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
  27. package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
  28. package/src/lib/auth/poolAclBootstrap.js +64 -0
  29. package/src/lib/auth/poolAclBootstrap.js.map +1 -0
  30. package/src/lib/auth/poolAclStore.d.ts +77 -0
  31. package/src/lib/auth/poolAclStore.d.ts.map +1 -0
  32. package/src/lib/auth/poolAclStore.js +189 -0
  33. package/src/lib/auth/poolAclStore.js.map +1 -0
  34. package/src/lib/auth/poolAclUpdater.d.ts +79 -0
  35. package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
  36. package/src/lib/auth/poolAclUpdater.js +144 -0
  37. package/src/lib/auth/poolAclUpdater.js.map +1 -0
  38. package/src/lib/availability/availabilityService.d.ts +2 -2
  39. package/src/lib/availability/availabilityService.d.ts.map +1 -1
  40. package/src/lib/availability/availabilityService.js +12 -5
  41. package/src/lib/availability/availabilityService.js.map +1 -1
  42. package/src/lib/availability/blockRegistry.d.ts +45 -3
  43. package/src/lib/availability/blockRegistry.d.ts.map +1 -1
  44. package/src/lib/availability/blockRegistry.js +123 -5
  45. package/src/lib/availability/blockRegistry.js.map +1 -1
  46. package/src/lib/availability/discoveryProtocol.d.ts +30 -1
  47. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
  48. package/src/lib/availability/discoveryProtocol.js +76 -0
  49. package/src/lib/availability/discoveryProtocol.js.map +1 -1
  50. package/src/lib/availability/gossipService.d.ts +45 -6
  51. package/src/lib/availability/gossipService.d.ts.map +1 -1
  52. package/src/lib/availability/gossipService.js +177 -5
  53. package/src/lib/availability/gossipService.js.map +1 -1
  54. package/src/lib/availability/reconciliationService.d.ts +88 -1
  55. package/src/lib/availability/reconciliationService.d.ts.map +1 -1
  56. package/src/lib/availability/reconciliationService.js +246 -48
  57. package/src/lib/availability/reconciliationService.js.map +1 -1
  58. package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
  59. package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
  60. package/src/lib/blockFetch/blockFetcher.js +279 -0
  61. package/src/lib/blockFetch/blockFetcher.js.map +1 -0
  62. package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
  63. package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
  64. package/src/lib/blockFetch/fetchQueue.js +204 -0
  65. package/src/lib/blockFetch/fetchQueue.js.map +1 -0
  66. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
  67. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
  68. package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
  69. package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
  70. package/src/lib/blockFetch/index.d.ts +10 -0
  71. package/src/lib/blockFetch/index.d.ts.map +1 -0
  72. package/src/lib/blockFetch/index.js +13 -0
  73. package/src/lib/blockFetch/index.js.map +1 -0
  74. package/src/lib/controllers/api/brightpass.d.ts +72 -0
  75. package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
  76. package/src/lib/controllers/api/brightpass.js +577 -0
  77. package/src/lib/controllers/api/brightpass.js.map +1 -0
  78. package/src/lib/controllers/api/channels.d.ts +122 -0
  79. package/src/lib/controllers/api/channels.d.ts.map +1 -0
  80. package/src/lib/controllers/api/channels.js +701 -0
  81. package/src/lib/controllers/api/channels.js.map +1 -0
  82. package/src/lib/controllers/api/conversations.d.ts +89 -0
  83. package/src/lib/controllers/api/conversations.d.ts.map +1 -0
  84. package/src/lib/controllers/api/conversations.js +259 -0
  85. package/src/lib/controllers/api/conversations.js.map +1 -0
  86. package/src/lib/controllers/api/emails.d.ts +122 -0
  87. package/src/lib/controllers/api/emails.d.ts.map +1 -0
  88. package/src/lib/controllers/api/emails.js +494 -0
  89. package/src/lib/controllers/api/emails.js.map +1 -0
  90. package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
  91. package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
  92. package/src/lib/controllers/api/explodingMessages.js +378 -0
  93. package/src/lib/controllers/api/explodingMessages.js.map +1 -0
  94. package/src/lib/controllers/api/groups.d.ts +94 -0
  95. package/src/lib/controllers/api/groups.d.ts.map +1 -0
  96. package/src/lib/controllers/api/groups.js +484 -0
  97. package/src/lib/controllers/api/groups.js.map +1 -0
  98. package/src/lib/controllers/api/index.d.ts +6 -0
  99. package/src/lib/controllers/api/index.d.ts.map +1 -1
  100. package/src/lib/controllers/api/index.js +6 -0
  101. package/src/lib/controllers/api/index.js.map +1 -1
  102. package/src/lib/controllers/api/messages.d.ts.map +1 -1
  103. package/src/lib/controllers/api/messages.js +2 -1
  104. package/src/lib/controllers/api/messages.js.map +1 -1
  105. package/src/lib/controllers/api/sync.d.ts +38 -2
  106. package/src/lib/controllers/api/sync.d.ts.map +1 -1
  107. package/src/lib/controllers/api/sync.js +89 -0
  108. package/src/lib/controllers/api/sync.js.map +1 -1
  109. package/src/lib/controllers/crypto/gitController.d.ts +70 -0
  110. package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
  111. package/src/lib/controllers/crypto/gitController.js +306 -0
  112. package/src/lib/controllers/crypto/gitController.js.map +1 -0
  113. package/src/lib/controllers/crypto/index.d.ts +3 -0
  114. package/src/lib/controllers/crypto/index.d.ts.map +1 -0
  115. package/src/lib/controllers/crypto/index.js +6 -0
  116. package/src/lib/controllers/crypto/index.js.map +1 -0
  117. package/src/lib/controllers/crypto/walletController.d.ts +64 -0
  118. package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
  119. package/src/lib/controllers/crypto/walletController.js +260 -0
  120. package/src/lib/controllers/crypto/walletController.js.map +1 -0
  121. package/src/lib/controllers/identity/deviceController.d.ts +96 -0
  122. package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
  123. package/src/lib/controllers/identity/deviceController.js +355 -0
  124. package/src/lib/controllers/identity/deviceController.js.map +1 -0
  125. package/src/lib/controllers/identity/directoryController.d.ts +75 -0
  126. package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
  127. package/src/lib/controllers/identity/directoryController.js +288 -0
  128. package/src/lib/controllers/identity/directoryController.js.map +1 -0
  129. package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
  130. package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
  131. package/src/lib/controllers/identity/identityProofController.js +454 -0
  132. package/src/lib/controllers/identity/identityProofController.js.map +1 -0
  133. package/src/lib/controllers/identity/index.d.ts +4 -0
  134. package/src/lib/controllers/identity/index.d.ts.map +1 -0
  135. package/src/lib/controllers/identity/index.js +7 -0
  136. package/src/lib/controllers/identity/index.js.map +1 -0
  137. package/src/lib/controllers/index.d.ts +2 -0
  138. package/src/lib/controllers/index.d.ts.map +1 -1
  139. package/src/lib/controllers/index.js +2 -0
  140. package/src/lib/controllers/index.js.map +1 -1
  141. package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
  142. package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
  143. package/src/lib/encryption/encryptedMetadataService.js +224 -0
  144. package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
  145. package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
  146. package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
  147. package/src/lib/encryption/encryptionAwareReplication.js +116 -0
  148. package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
  149. package/src/lib/encryption/errors.d.ts +49 -0
  150. package/src/lib/encryption/errors.d.ts.map +1 -0
  151. package/src/lib/encryption/errors.js +80 -0
  152. package/src/lib/encryption/errors.js.map +1 -0
  153. package/src/lib/encryption/index.d.ts +6 -0
  154. package/src/lib/encryption/index.d.ts.map +1 -0
  155. package/src/lib/encryption/index.js +9 -0
  156. package/src/lib/encryption/index.js.map +1 -0
  157. package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
  158. package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
  159. package/src/lib/encryption/poolEncryptionService.js +252 -0
  160. package/src/lib/encryption/poolEncryptionService.js.map +1 -0
  161. package/src/lib/encryption/poolKeyManager.d.ts +82 -0
  162. package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
  163. package/src/lib/encryption/poolKeyManager.js +156 -0
  164. package/src/lib/encryption/poolKeyManager.js.map +1 -0
  165. package/src/lib/environment.d.ts +3 -0
  166. package/src/lib/environment.d.ts.map +1 -1
  167. package/src/lib/environment.js +5 -0
  168. package/src/lib/environment.js.map +1 -1
  169. package/src/lib/interfaces/environment.d.ts +7 -1
  170. package/src/lib/interfaces/environment.d.ts.map +1 -1
  171. package/src/lib/interfaces/index.d.ts +0 -1
  172. package/src/lib/interfaces/index.d.ts.map +1 -1
  173. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
  174. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
  175. package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
  176. package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
  177. package/src/lib/interfaces/requests/index.d.ts +1 -0
  178. package/src/lib/interfaces/requests/index.d.ts.map +1 -1
  179. package/src/lib/routers/api.d.ts +54 -1
  180. package/src/lib/routers/api.d.ts.map +1 -1
  181. package/src/lib/routers/api.js +77 -0
  182. package/src/lib/routers/api.js.map +1 -1
  183. package/src/lib/services/blockStore.d.ts +5 -2
  184. package/src/lib/services/blockStore.d.ts.map +1 -1
  185. package/src/lib/services/blockStore.js +4 -0
  186. package/src/lib/services/blockStore.js.map +1 -1
  187. package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
  188. package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
  189. package/src/lib/services/brightpass/auditLogger.js +184 -0
  190. package/src/lib/services/brightpass/auditLogger.js.map +1 -0
  191. package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
  192. package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
  193. package/src/lib/services/brightpass/vaultEncryption.js +144 -0
  194. package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
  195. package/src/lib/services/brightpass.d.ts +294 -0
  196. package/src/lib/services/brightpass.d.ts.map +1 -0
  197. package/src/lib/services/brightpass.js +1260 -0
  198. package/src/lib/services/brightpass.js.map +1 -0
  199. package/src/lib/services/eventNotificationSystem.d.ts +69 -3
  200. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  201. package/src/lib/services/eventNotificationSystem.js +200 -0
  202. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  203. package/src/lib/services/expirationScheduler.d.ts +90 -0
  204. package/src/lib/services/expirationScheduler.d.ts.map +1 -0
  205. package/src/lib/services/expirationScheduler.js +131 -0
  206. package/src/lib/services/expirationScheduler.js.map +1 -0
  207. package/src/lib/services/fecUsageExample.d.ts +2 -2
  208. package/src/lib/services/index.d.ts +2 -0
  209. package/src/lib/services/index.d.ts.map +1 -1
  210. package/src/lib/services/index.js +2 -0
  211. package/src/lib/services/index.js.map +1 -1
  212. package/src/lib/services/paginationService.d.ts +18 -0
  213. package/src/lib/services/paginationService.d.ts.map +1 -0
  214. package/src/lib/services/paginationService.js +32 -0
  215. package/src/lib/services/paginationService.js.map +1 -0
  216. package/src/lib/services/presenceService.d.ts +76 -0
  217. package/src/lib/services/presenceService.d.ts.map +1 -0
  218. package/src/lib/services/presenceService.js +143 -0
  219. package/src/lib/services/presenceService.js.map +1 -0
  220. package/src/lib/services/wireConversationPromotion.d.ts +23 -0
  221. package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
  222. package/src/lib/services/wireConversationPromotion.js +26 -0
  223. package/src/lib/services/wireConversationPromotion.js.map +1 -0
  224. package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
  225. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  226. package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
  227. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  228. package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
  229. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  230. package/src/lib/stores/diskBlockAsyncStore.js +297 -10
  231. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  232. package/src/lib/utils/communicationValidation.d.ts +44 -0
  233. package/src/lib/utils/communicationValidation.d.ts.map +1 -0
  234. package/src/lib/utils/communicationValidation.js +291 -0
  235. package/src/lib/utils/communicationValidation.js.map +1 -0
  236. package/src/lib/utils/emailValidation.d.ts +19 -0
  237. package/src/lib/utils/emailValidation.d.ts.map +1 -0
  238. package/src/lib/utils/emailValidation.js +232 -0
  239. package/src/lib/utils/emailValidation.js.map +1 -0
  240. package/src/lib/interfaces/blockStore.d.ts +0 -7
  241. package/src/lib/interfaces/blockStore.d.ts.map +0 -1
  242. package/src/lib/interfaces/blockStore.js.map +0 -1
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @see Requirements 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8
9
9
  */
10
- import { BlockManifest, IReconciliationService, PendingSyncItem, ReconciliationConfig, ReconciliationEventHandler, ReconciliationResult, SyncVectorEntry } from '@brightchain/brightchain-lib';
10
+ import { BlockManifest, CBLIndexManifest, ICBLIndexEntry, IReconciliationService, PendingSyncItem, PoolId, PoolScopedManifest, ReconciliationConfig, ReconciliationEventHandler, ReconciliationResult, SyncVectorEntry } from '@brightchain/brightchain-lib';
11
11
  /**
12
12
  * Interface for peer manifest operations.
13
13
  * Abstracts network communication for reconciliation.
@@ -73,6 +73,77 @@ export interface IManifestProvider {
73
73
  * @param nodeId - The node to check
74
74
  */
75
75
  getBlockTimestamp(blockId: string, nodeId: string): Promise<Date | null>;
76
+ /**
77
+ * Get the local pool-scoped manifest.
78
+ * Returns undefined if the provider does not support pool-scoped manifests,
79
+ * in which case the flat manifest is used for backward compatibility.
80
+ */
81
+ getLocalPoolScopedManifest?(): PoolScopedManifest;
82
+ /**
83
+ * Get pool-scoped manifest from a peer.
84
+ * Returns undefined if the peer does not support pool-scoped manifests.
85
+ *
86
+ * @param peerId - The peer to get manifest from
87
+ * @param sinceTimestamp - Optional timestamp to get changes since
88
+ * @param timeoutMs - Timeout in milliseconds
89
+ */
90
+ getPeerPoolScopedManifest?(peerId: string, sinceTimestamp?: Date, timeoutMs?: number): Promise<PoolScopedManifest | undefined>;
91
+ /**
92
+ * Check if a pool has an active deletion tombstone locally.
93
+ *
94
+ * @param poolId - The pool ID to check
95
+ * @returns true if the pool has an active tombstone
96
+ */
97
+ hasTombstone?(poolId: PoolId): boolean;
98
+ /**
99
+ * Store a block in a specific pool.
100
+ * Used during pool-scoped reconciliation to place synchronized blocks
101
+ * in the correct pool namespace.
102
+ *
103
+ * @param poolId - The pool to store the block in
104
+ * @param blockId - The block ID to store
105
+ * @param peerId - The peer the block was fetched from
106
+ * @param data - The block data (if available from the peer)
107
+ */
108
+ storeBlockInPool?(poolId: PoolId, blockId: string, peerId: string, data?: Uint8Array): Promise<void>;
109
+ /**
110
+ * Update location metadata for a block with pool context.
111
+ *
112
+ * @param blockId - The block ID to update
113
+ * @param nodeId - The node ID that has the block
114
+ * @param timestamp - When the block was seen
115
+ * @param poolId - The pool the block belongs to
116
+ */
117
+ updateBlockLocationWithPool?(blockId: string, nodeId: string, timestamp: Date, poolId: PoolId): Promise<void>;
118
+ /**
119
+ * Get the local CBL index manifest for a specific pool.
120
+ * Returns undefined if the provider does not support CBL index reconciliation.
121
+ *
122
+ * @param poolId - The pool to get the CBL index manifest for
123
+ * @returns The local CBL index manifest, or undefined if not supported
124
+ * @see Requirements 8.4
125
+ */
126
+ getLocalCBLIndexManifest?(poolId: PoolId): Promise<CBLIndexManifest | undefined>;
127
+ /**
128
+ * Get a peer's CBL index manifest for a specific pool.
129
+ * Returns undefined if the peer does not support CBL index reconciliation.
130
+ *
131
+ * @param peerId - The peer to get the manifest from
132
+ * @param poolId - The pool to get the CBL index manifest for
133
+ * @returns The peer's CBL index manifest, or undefined if not supported
134
+ * @see Requirements 8.4
135
+ */
136
+ getPeerCBLIndexManifest?(peerId: string, poolId: PoolId): Promise<CBLIndexManifest | undefined>;
137
+ /**
138
+ * Fetch a full CBL index entry from a peer by magnet URL.
139
+ * Used during reconciliation to retrieve entries missing locally.
140
+ *
141
+ * @param peerId - The peer to fetch from
142
+ * @param magnetUrl - The magnet URL of the entry to fetch
143
+ * @returns The full CBL index entry, or null if not found
144
+ * @see Requirements 8.4
145
+ */
146
+ fetchCBLIndexEntry?(peerId: string, magnetUrl: string): Promise<ICBLIndexEntry | null>;
76
147
  }
77
148
  /**
78
149
  * Reconciliation Service Implementation
@@ -120,8 +191,24 @@ export declare class ReconciliationService implements IReconciliationService {
120
191
  reconcile(peerIds: string[]): Promise<ReconciliationResult>;
121
192
  /**
122
193
  * Reconcile with a single peer.
194
+ * Uses pool-scoped manifests when the provider supports them,
195
+ * falling back to flat manifests for backward compatibility.
196
+ *
197
+ * @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
123
198
  */
124
199
  private reconcileWithPeer;
200
+ /**
201
+ * Attempt pool-scoped reconciliation with a peer.
202
+ * Returns null if the provider doesn't support pool-scoped manifests.
203
+ *
204
+ * @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
205
+ */
206
+ private tryPoolScopedReconciliation;
207
+ /**
208
+ * Reconcile with a peer using flat (non-pool-scoped) manifests.
209
+ * This is the original reconciliation logic, preserved for backward compatibility.
210
+ */
211
+ private reconcileWithFlatManifest;
125
212
  /**
126
213
  * Resolve orphaned blocks by checking if any reconnected peers have them.
127
214
  */
@@ -1 +1 @@
1
- {"version":3,"file":"reconciliationService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconciliationService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAEhB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,MAAM,EACN,kBAAkB,EAClB,oBAAoB,EAGpB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAKtC;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC;IAEzB;;OAEG;IACH,gBAAgB,IAAI,aAAa,CAAC;IAElC;;;;;;OAMG;IACH,eAAe,CACb,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,IAAI,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B;;;;;;OAMG;IACH,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,GACd,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;OAKG;IACH,yBAAyB,CACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;IAEnE;;;;;OAKG;IACH,4BAA4B,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAC5D,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzC;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE,CAAC;IAEhC;;;;;OAKG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAIzE;;;;OAIG;IACH,0BAA0B,CAAC,IAAI,kBAAkB,CAAC;IAElD;;;;;;;OAOG;IACH,yBAAyB,CAAC,CACxB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,IAAI,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;IAE3C;;;;;OAKG;IACH,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvC;;;;;;;;;OASG;IACH,gBAAgB,CAAC,CACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;;;OAOG;IACH,2BAA2B,CAAC,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAAC;IAIjB;;;;;;;OAOG;IACH,wBAAwB,CAAC,CACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAEzC;;;;;;;;OAQG;IACH,uBAAuB,CAAC,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAEzC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACnC;AAgCD;;;;;;;;GAQG;AACH,qBAAa,qBAAsB,YAAW,sBAAsB;IA6BhE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAEjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IA9BzB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;IAEvE;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8C;IAE5E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;;;;;OAMG;gBAEgB,gBAAgB,EAAE,iBAAiB,EACpD,QAAQ,EAAE,MAAM,EACC,MAAM,GAAE,oBAAoD;IAK/E;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAuHjE;;;;;;OAMG;YACW,iBAAiB;IAmE/B;;;;;OAKG;YACW,2BAA2B;IA0NzC;;;OAGG;YACW,yBAAyB;IA4FvC;;OAEG;YACW,qBAAqB;IA0DnC;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIrD;;;;OAIG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAIjD;;;;;;OAMG;IACH,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,EACf,gBAAgB,EAAE,MAAM,GACvB,IAAI;IAQP;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU1C;;;;OAIG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAIxC;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAWlD;;;;OAIG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC9C;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAI7B;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBzC;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCtC;;;;OAIG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9C;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3C;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAIlD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAInD;;;;OAIG;IACH,SAAS,IAAI,oBAAoB;IAIjC;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;YACW,qBAAqB;IAOnC;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -63,6 +63,10 @@ class ReconciliationService {
63
63
  let orphansResolved = 0;
64
64
  let conflictsResolved = 0;
65
65
  let peersReconciled = 0;
66
+ let totalCBLIndexEntriesMerged = 0;
67
+ // Aggregate pool stats and skipped pools across all peers
68
+ const aggregatedPoolStats = new Map();
69
+ const aggregatedSkippedPools = new Set();
66
70
  // Emit start event
67
71
  this.emitEvent({
68
72
  type: 'reconciliation_started',
@@ -79,6 +83,29 @@ class ReconciliationService {
79
83
  blocksDiscovered += result.blocksDiscovered;
80
84
  blocksUpdated += result.blocksUpdated;
81
85
  conflictsResolved += result.conflictsResolved;
86
+ // Merge per-peer pool stats
87
+ if (result.poolStats) {
88
+ for (const [poolId, stats] of result.poolStats) {
89
+ const existing = aggregatedPoolStats.get(poolId);
90
+ if (existing) {
91
+ existing.blocksDiscovered += stats.blocksDiscovered;
92
+ existing.blocksUpdated += stats.blocksUpdated;
93
+ }
94
+ else {
95
+ aggregatedPoolStats.set(poolId, { ...stats });
96
+ }
97
+ }
98
+ }
99
+ // Merge per-peer skipped pools
100
+ if (result.skippedPools) {
101
+ for (const poolId of result.skippedPools) {
102
+ aggregatedSkippedPools.add(poolId);
103
+ }
104
+ }
105
+ // Merge CBL index entries merged count
106
+ if (result.cblIndexEntriesMerged) {
107
+ totalCBLIndexEntriesMerged += result.cblIndexEntriesMerged;
108
+ }
82
109
  }
83
110
  else if (result.error) {
84
111
  errors.push(result.error);
@@ -107,6 +134,18 @@ class ReconciliationService {
107
134
  conflictsResolved,
108
135
  errors,
109
136
  duration: Date.now() - startTime,
137
+ // Include pool stats if any pool-scoped reconciliation occurred
138
+ ...(aggregatedPoolStats.size > 0
139
+ ? { poolStats: aggregatedPoolStats }
140
+ : {}),
141
+ // Include skipped pools if any were skipped
142
+ ...(aggregatedSkippedPools.size > 0
143
+ ? { skippedPools: Array.from(aggregatedSkippedPools) }
144
+ : {}),
145
+ // Include CBL index entries merged count if any were merged
146
+ ...(totalCBLIndexEntriesMerged > 0
147
+ ? { cblIndexEntriesMerged: totalCBLIndexEntriesMerged }
148
+ : {}),
110
149
  };
111
150
  // Emit completion event
112
151
  this.emitEvent({
@@ -118,6 +157,10 @@ class ReconciliationService {
118
157
  }
119
158
  /**
120
159
  * Reconcile with a single peer.
160
+ * Uses pool-scoped manifests when the provider supports them,
161
+ * falling back to flat manifests for backward compatibility.
162
+ *
163
+ * @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
121
164
  */
122
165
  async reconcileWithPeer(peerId) {
123
166
  this.emitEvent({
@@ -129,55 +172,19 @@ class ReconciliationService {
129
172
  // Get sync vector for delta sync
130
173
  const syncVector = this.getSyncVector(peerId);
131
174
  const sinceTimestamp = syncVector?.lastSyncTimestamp;
132
- // Exchange manifests
133
- const peerManifest = await this.manifestProvider.getPeerManifest(peerId, sinceTimestamp, this.config.manifestExchangeTimeoutMs);
134
- const localManifest = this.manifestProvider.getLocalManifest();
135
- // Find new blocks on peer
136
- const localBlockSet = new Set(localManifest.blockIds);
137
- const newBlocks = peerManifest.blockIds.filter((id) => !localBlockSet.has(id));
138
- let blocksDiscovered = 0;
139
- let blocksUpdated = 0;
140
- let conflictsResolved = 0;
141
- // Update location metadata for discovered blocks
142
- for (const blockId of newBlocks) {
143
- await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
144
- blocksDiscovered++;
145
- }
146
- // Update location metadata for blocks we both have
147
- const sharedBlocks = peerManifest.blockIds.filter((id) => localBlockSet.has(id));
148
- for (const blockId of sharedBlocks) {
149
- // Check for conflicts using last-write-wins
150
- const localTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, this.manifestProvider.getLocalNodeId());
151
- const peerTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, peerId);
152
- if (localTimestamp && peerTimestamp) {
153
- if (peerTimestamp > localTimestamp) {
154
- // Peer has newer version - this is a conflict resolved by last-write-wins
155
- this.emitEvent({
156
- type: 'conflict_resolved',
157
- timestamp: new Date(),
158
- blockId,
159
- winningNodeId: peerId,
160
- });
161
- conflictsResolved++;
162
- }
163
- }
164
- await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
165
- blocksUpdated++;
175
+ // Try pool-scoped reconciliation first
176
+ const poolScopedResult = await this.tryPoolScopedReconciliation(peerId, sinceTimestamp);
177
+ if (poolScopedResult) {
178
+ this.emitEvent({
179
+ type: 'peer_reconciliation_completed',
180
+ timestamp: new Date(),
181
+ peerId,
182
+ blocksDiscovered: poolScopedResult.blocksDiscovered,
183
+ });
184
+ return poolScopedResult;
166
185
  }
167
- // Update sync vector
168
- this.updateSyncVector(peerId, new Date(), peerManifest.checksum);
169
- this.emitEvent({
170
- type: 'peer_reconciliation_completed',
171
- timestamp: new Date(),
172
- peerId,
173
- blocksDiscovered,
174
- });
175
- return {
176
- success: true,
177
- blocksDiscovered,
178
- blocksUpdated,
179
- conflictsResolved,
180
- };
186
+ // Fall back to flat manifest reconciliation
187
+ return await this.reconcileWithFlatManifest(peerId, sinceTimestamp);
181
188
  }
182
189
  catch (error) {
183
190
  const errorMessage = error instanceof Error ? error.message : 'Unknown error';
@@ -199,6 +206,197 @@ class ReconciliationService {
199
206
  };
200
207
  }
201
208
  }
209
+ /**
210
+ * Attempt pool-scoped reconciliation with a peer.
211
+ * Returns null if the provider doesn't support pool-scoped manifests.
212
+ *
213
+ * @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
214
+ */
215
+ async tryPoolScopedReconciliation(peerId, sinceTimestamp) {
216
+ // Check if provider supports pool-scoped manifests
217
+ if (!this.manifestProvider.getLocalPoolScopedManifest ||
218
+ !this.manifestProvider.getPeerPoolScopedManifest) {
219
+ return null;
220
+ }
221
+ const peerManifest = await this.manifestProvider.getPeerPoolScopedManifest(peerId, sinceTimestamp, this.config.manifestExchangeTimeoutMs);
222
+ // If peer doesn't support pool-scoped manifests, fall back
223
+ if (!peerManifest) {
224
+ return null;
225
+ }
226
+ const localManifest = this.manifestProvider.getLocalPoolScopedManifest();
227
+ const poolStats = new Map();
228
+ const skippedPools = [];
229
+ let totalBlocksDiscovered = 0;
230
+ let totalBlocksUpdated = 0;
231
+ let totalConflictsResolved = 0;
232
+ // Build a set of all local blocks per pool for efficient lookup
233
+ const localBlocksByPool = new Map();
234
+ for (const [poolId, blockIds] of localManifest.pools) {
235
+ localBlocksByPool.set(poolId, new Set(blockIds));
236
+ }
237
+ // Compare manifests per-pool (Req 3.1, 3.2)
238
+ for (const [poolId, peerBlockIds] of peerManifest.pools) {
239
+ // Skip pools with active deletion tombstones (Req 3.4)
240
+ if (this.manifestProvider.hasTombstone?.(poolId)) {
241
+ skippedPools.push(poolId);
242
+ continue;
243
+ }
244
+ const localBlockSet = localBlocksByPool.get(poolId) ?? new Set();
245
+ let poolDiscovered = 0;
246
+ let poolUpdated = 0;
247
+ // Find blocks the peer has that we don't in this pool
248
+ const missingBlocks = peerBlockIds.filter((blockId) => !localBlockSet.has(blockId));
249
+ // Store missing blocks in the correct pool (Req 3.2, 3.3)
250
+ for (const blockId of missingBlocks) {
251
+ if (this.manifestProvider.storeBlockInPool) {
252
+ await this.manifestProvider.storeBlockInPool(poolId, blockId, peerId);
253
+ }
254
+ // Update location metadata with pool context
255
+ if (this.manifestProvider.updateBlockLocationWithPool) {
256
+ await this.manifestProvider.updateBlockLocationWithPool(blockId, peerId, peerManifest.generatedAt, poolId);
257
+ }
258
+ else {
259
+ await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
260
+ }
261
+ poolDiscovered++;
262
+ }
263
+ // Update location metadata for shared blocks in this pool
264
+ const sharedBlocks = peerBlockIds.filter((blockId) => localBlockSet.has(blockId));
265
+ for (const blockId of sharedBlocks) {
266
+ // Check for conflicts using last-write-wins
267
+ const localTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, this.manifestProvider.getLocalNodeId());
268
+ const peerTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, peerId);
269
+ if (localTimestamp && peerTimestamp && peerTimestamp > localTimestamp) {
270
+ this.emitEvent({
271
+ type: 'conflict_resolved',
272
+ timestamp: new Date(),
273
+ blockId,
274
+ winningNodeId: peerId,
275
+ });
276
+ totalConflictsResolved++;
277
+ }
278
+ if (this.manifestProvider.updateBlockLocationWithPool) {
279
+ await this.manifestProvider.updateBlockLocationWithPool(blockId, peerId, peerManifest.generatedAt, poolId);
280
+ }
281
+ else {
282
+ await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
283
+ }
284
+ poolUpdated++;
285
+ }
286
+ // Record per-pool stats (Req 3.6)
287
+ if (poolDiscovered > 0 || poolUpdated > 0) {
288
+ poolStats.set(poolId, {
289
+ blocksDiscovered: poolDiscovered,
290
+ blocksUpdated: poolUpdated,
291
+ });
292
+ }
293
+ totalBlocksDiscovered += poolDiscovered;
294
+ totalBlocksUpdated += poolUpdated;
295
+ }
296
+ // === CBL Index Manifest Reconciliation (Req 8.4) ===
297
+ let totalCBLIndexEntriesMerged = 0;
298
+ if (this.manifestProvider.getLocalCBLIndexManifest &&
299
+ this.manifestProvider.getPeerCBLIndexManifest &&
300
+ this.manifestProvider.fetchCBLIndexEntry) {
301
+ // Exchange CBL index manifests for each pool in the peer's manifest
302
+ for (const [poolId] of peerManifest.pools) {
303
+ // Skip pools with active deletion tombstones
304
+ if (this.manifestProvider.hasTombstone?.(poolId)) {
305
+ continue;
306
+ }
307
+ try {
308
+ const peerCBLManifest = await this.manifestProvider.getPeerCBLIndexManifest(peerId, poolId);
309
+ if (!peerCBLManifest || peerCBLManifest.entries.length === 0) {
310
+ continue;
311
+ }
312
+ const localCBLManifest = await this.manifestProvider.getLocalCBLIndexManifest(poolId);
313
+ if (!localCBLManifest) {
314
+ continue;
315
+ }
316
+ // Find entries in the peer manifest that are missing locally
317
+ const localMagnetUrls = new Set(localCBLManifest.entries.map((e) => e.magnetUrl));
318
+ const missingEntries = peerCBLManifest.entries.filter((re) => !localMagnetUrls.has(re.magnetUrl));
319
+ // Fetch and merge missing entries
320
+ for (const missing of missingEntries) {
321
+ const fullEntry = await this.manifestProvider.fetchCBLIndexEntry(peerId, missing.magnetUrl);
322
+ if (fullEntry) {
323
+ totalCBLIndexEntriesMerged++;
324
+ }
325
+ }
326
+ }
327
+ catch {
328
+ // CBL index reconciliation is best-effort; log and continue
329
+ }
330
+ }
331
+ }
332
+ // Update sync vector
333
+ this.updateSyncVector(peerId, new Date(), peerManifest.checksum);
334
+ return {
335
+ success: true,
336
+ blocksDiscovered: totalBlocksDiscovered,
337
+ blocksUpdated: totalBlocksUpdated,
338
+ conflictsResolved: totalConflictsResolved,
339
+ poolStats,
340
+ skippedPools,
341
+ ...(totalCBLIndexEntriesMerged > 0
342
+ ? { cblIndexEntriesMerged: totalCBLIndexEntriesMerged }
343
+ : {}),
344
+ };
345
+ }
346
+ /**
347
+ * Reconcile with a peer using flat (non-pool-scoped) manifests.
348
+ * This is the original reconciliation logic, preserved for backward compatibility.
349
+ */
350
+ async reconcileWithFlatManifest(peerId, sinceTimestamp) {
351
+ // Exchange manifests
352
+ const peerManifest = await this.manifestProvider.getPeerManifest(peerId, sinceTimestamp, this.config.manifestExchangeTimeoutMs);
353
+ const localManifest = this.manifestProvider.getLocalManifest();
354
+ // Find new blocks on peer
355
+ const localBlockSet = new Set(localManifest.blockIds);
356
+ const newBlocks = peerManifest.blockIds.filter((id) => !localBlockSet.has(id));
357
+ let blocksDiscovered = 0;
358
+ let blocksUpdated = 0;
359
+ let conflictsResolved = 0;
360
+ // Update location metadata for discovered blocks
361
+ for (const blockId of newBlocks) {
362
+ await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
363
+ blocksDiscovered++;
364
+ }
365
+ // Update location metadata for blocks we both have
366
+ const sharedBlocks = peerManifest.blockIds.filter((id) => localBlockSet.has(id));
367
+ for (const blockId of sharedBlocks) {
368
+ // Check for conflicts using last-write-wins
369
+ const localTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, this.manifestProvider.getLocalNodeId());
370
+ const peerTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, peerId);
371
+ if (localTimestamp && peerTimestamp) {
372
+ if (peerTimestamp > localTimestamp) {
373
+ this.emitEvent({
374
+ type: 'conflict_resolved',
375
+ timestamp: new Date(),
376
+ blockId,
377
+ winningNodeId: peerId,
378
+ });
379
+ conflictsResolved++;
380
+ }
381
+ }
382
+ await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
383
+ blocksUpdated++;
384
+ }
385
+ // Update sync vector
386
+ this.updateSyncVector(peerId, new Date(), peerManifest.checksum);
387
+ this.emitEvent({
388
+ type: 'peer_reconciliation_completed',
389
+ timestamp: new Date(),
390
+ peerId,
391
+ blocksDiscovered,
392
+ });
393
+ return {
394
+ success: true,
395
+ blocksDiscovered,
396
+ blocksUpdated,
397
+ conflictsResolved,
398
+ };
399
+ }
202
400
  /**
203
401
  * Resolve orphaned blocks by checking if any reconnected peers have them.
204
402
  */
@@ -1 +1 @@
1
- {"version":3,"file":"reconciliationService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconciliationService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,kEAesC;AACtC,2BAAgC;AAChC,0CAAyD;AACzD,+BAAqC;AAkOrC;;;;;;;;GAQG;AACH,MAAa,qBAAqB;IAqBhC;;;;;;OAMG;IACH,YACmB,gBAAmC,EACpD,QAAgB,EACC,SAA+B,+CAA6B;QAF5D,qBAAgB,GAAhB,gBAAgB,CAAmB;QAEnC,WAAM,GAAN,MAAM,CAAsD;QA9B/E;;WAEG;QACc,gBAAW,GAAiC,IAAI,GAAG,EAAE,CAAC;QAEvE;;WAEG;QACK,qBAAgB,GAAsB,EAAE,CAAC;QAEjD;;WAEG;QACc,kBAAa,GAAoC,IAAI,GAAG,EAAE,CAAC;QAmB1E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,OAAiB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAA0B,EAAE,CAAC;QACzC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,0BAA0B,GAAG,CAAC,CAAC;QAEnC,0DAA0D;QAC1D,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAGhC,CAAC;QACJ,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;QAEjD,mBAAmB;QACnB,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,wBAAwB;YAC9B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,OAAO;SACR,CAAC,CAAC;QAEH,0CAA0C;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAC5B,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,4BAA4B,CACzC,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CACtD,CAAC;YAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,eAAe,EAAE,CAAC;oBAClB,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC;oBAC5C,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC;oBACtC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,CAAC;oBAE9C,4BAA4B;oBAC5B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;wBACrB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;4BAC/C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;4BACjD,IAAI,QAAQ,EAAE,CAAC;gCACb,QAAQ,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC;gCACpD,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC;4BAChD,CAAC;iCAAM,CAAC;gCACN,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;4BAChD,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,+BAA+B;oBAC/B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;wBACxB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;4BACzC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACrC,CAAC;oBACH,CAAC;oBAED,uCAAuC;oBACvC,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;wBACjC,0BAA0B,IAAI,MAAM,CAAC,qBAAqB,CAAC;oBAC7D,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxD,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,6BAA6B;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;aAC3G,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAyB;YACnC,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,eAAe;YACf,gBAAgB;YAChB,aAAa;YACb,eAAe;YACf,iBAAiB;YACjB,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAChC,gEAAgE;YAChE,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC;gBAC9B,CAAC,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE;gBACpC,CAAC,CAAC,EAAE,CAAC;YACP,4CAA4C;YAC5C,GAAG,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAC;gBACjC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE;gBACtD,CAAC,CAAC,EAAE,CAAC;YACP,4DAA4D;YAC5D,GAAG,CAAC,0BAA0B,GAAG,CAAC;gBAChC,CAAC,CAAC,EAAE,qBAAqB,EAAE,0BAA0B,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,0BAA0B;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAa5C,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,6BAA6B;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAG,UAAU,EAAE,iBAAiB,CAAC;YAErD,uCAAuC;YACvC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAC7D,MAAM,EACN,cAAc,CACf,CAAC;YAEF,IAAI,gBAAgB,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,+BAA+B;oBACrC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,MAAM;oBACN,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB;iBACpD,CAAC,CAAC;gBAEH,OAAO,gBAAgB,CAAC;YAC1B,CAAC;YAED,4CAA4C;YAC5C,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAE3D,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,4BAA4B;gBAClC,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,MAAM;gBACN,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,gBAAgB,EAAE,CAAC;gBACnB,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;gBACpB,KAAK,EAAE;oBACL,MAAM;oBACN,KAAK,EAAE,YAAY;iBACpB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,2BAA2B,CACvC,MAAc,EACd,cAAqB;QAUrB,mDAAmD;QACnD,IACE,CAAC,IAAI,CAAC,gBAAgB,CAAC,0BAA0B;YACjD,CAAC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAChD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CACxE,MAAM,EACN,cAAc,EACd,IAAI,CAAC,MAAM,CAAC,yBAAyB,CACtC,CAAC;QAEF,2DAA2D;QAC3D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,CAAC;QAEzE,MAAM,SAAS,GAAG,IAAI,GAAG,EAGtB,CAAC;QACJ,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,qBAAqB,GAAG,CAAC,CAAC;QAC9B,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAE/B,gEAAgE;QAChE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuB,CAAC;QACzD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACrD,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YACxD,uDAAuD;YACvD,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;YAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YACzE,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,IAAI,WAAW,GAAG,CAAC,CAAC;YAEpB,sDAAsD;YACtD,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CACvC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CACzC,CAAC;YAEF,0DAA0D;YAC1D,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;oBAC3C,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxE,CAAC;gBAED,6CAA6C;gBAC7C,IAAI,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC;oBACtD,MAAM,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CACrD,OAAO,EACP,MAAM,EACN,YAAY,CAAC,WAAW,EACxB,MAAM,CACP,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAC7C,OAAO,EACP,MAAM,EACN,YAAY,CAAC,WAAW,CACzB,CAAC;gBACJ,CAAC;gBAED,cAAc,EAAE,CAAC;YACnB,CAAC;YAED,0DAA0D;YAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACnD,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAC3B,CAAC;YAEF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;gBACnC,4CAA4C;gBAC5C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAClE,OAAO,EACP,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CACvC,CAAC;gBACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CACjE,OAAO,EACP,MAAM,CACP,CAAC;gBAEF,IAAI,cAAc,IAAI,aAAa,IAAI,aAAa,GAAG,cAAc,EAAE,CAAC;oBACtE,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,mBAAmB;wBACzB,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,OAAO;wBACP,aAAa,EAAE,MAAM;qBACtB,CAAC,CAAC;oBACH,sBAAsB,EAAE,CAAC;gBAC3B,CAAC;gBAED,IAAI,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC;oBACtD,MAAM,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CACrD,OAAO,EACP,MAAM,EACN,YAAY,CAAC,WAAW,EACxB,MAAM,CACP,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAC7C,OAAO,EACP,MAAM,EACN,YAAY,CAAC,WAAW,CACzB,CAAC;gBACJ,CAAC;gBAED,WAAW,EAAE,CAAC;YAChB,CAAC;YAED,kCAAkC;YAClC,IAAI,cAAc,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC1C,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;oBACpB,gBAAgB,EAAE,cAAc;oBAChC,aAAa,EAAE,WAAW;iBAC3B,CAAC,CAAC;YACL,CAAC;YAED,qBAAqB,IAAI,cAAc,CAAC;YACxC,kBAAkB,IAAI,WAAW,CAAC;QACpC,CAAC;QAED,sDAAsD;QACtD,IAAI,0BAA0B,GAAG,CAAC,CAAC;QAEnC,IACE,IAAI,CAAC,gBAAgB,CAAC,wBAAwB;YAC9C,IAAI,CAAC,gBAAgB,CAAC,uBAAuB;YAC7C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EACxC,CAAC;YACD,oEAAoE;YACpE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC1C,6CAA6C;gBAC7C,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjD,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,eAAe,GACnB,MAAM,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAEtE,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC7D,SAAS;oBACX,CAAC;oBAED,MAAM,gBAAgB,GACpB,MAAM,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;oBAE/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACtB,SAAS;oBACX,CAAC;oBAED,6DAA6D;oBAC7D,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CACjD,CAAC;oBAEF,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CACnD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAC3C,CAAC;oBAEF,kCAAkC;oBAClC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;wBACrC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAC9D,MAAM,EACN,OAAO,CAAC,SAAS,CAClB,CAAC;wBAEF,IAAI,SAAS,EAAE,CAAC;4BACd,0BAA0B,EAAE,CAAC;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,4DAA4D;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEjE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,gBAAgB,EAAE,qBAAqB;YACvC,aAAa,EAAE,kBAAkB;YACjC,iBAAiB,EAAE,sBAAsB;YACzC,SAAS;YACT,YAAY;YACZ,GAAG,CAAC,0BAA0B,GAAG,CAAC;gBAChC,CAAC,CAAC,EAAE,qBAAqB,EAAE,0BAA0B,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,yBAAyB,CACrC,MAAc,EACd,cAAqB;QAQrB,qBAAqB;QACrB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAC9D,MAAM,EACN,cAAc,EACd,IAAI,CAAC,MAAM,CAAC,yBAAyB,CACtC,CAAC;QAEF,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;QAE/D,0BAA0B;QAC1B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAC5C,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAC/B,CAAC;QAEF,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAE1B,iDAAiD;QACjD,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAC7C,OAAO,EACP,MAAM,EACN,YAAY,CAAC,WAAW,CACzB,CAAC;YACF,gBAAgB,EAAE,CAAC;QACrB,CAAC;QAED,mDAAmD;QACnD,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACvD,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CACtB,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,4CAA4C;YAC5C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAClE,OAAO,EACP,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CACvC,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CACjE,OAAO,EACP,MAAM,CACP,CAAC;YAEF,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;gBACpC,IAAI,aAAa,GAAG,cAAc,EAAE,CAAC;oBACnC,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,mBAAmB;wBACzB,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,OAAO;wBACP,aAAa,EAAE,MAAM;qBACtB,CAAC,CAAC;oBACH,iBAAiB,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAC7C,OAAO,EACP,MAAM,EACN,YAAY,CAAC,WAAW,CACzB,CAAC;YACF,aAAa,EAAE,CAAC;QAClB,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEjE,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,+BAA+B;YACrC,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM;YACN,gBAAgB;SACjB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,gBAAgB;YAChB,aAAa;YACb,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB;QAIjC,MAAM,MAAM,GAA0B,EAAE,CAAC;QACzC,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,gBAAgB,GACpB,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;YACpD,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;YAEnE,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;gBACvC,6CAA6C;gBAC7C,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC;wBACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAC9D,MAAM,EACN,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,yBAAyB,CACtC,CAAC;wBAEF,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC5C,6CAA6C;4BAC7C,MAAM,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,CACtD,OAAO,EACP,QAAQ,CACT,CAAC;4BACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAC7C,OAAO,EACP,MAAM,EACN,YAAY,CAAC,WAAW,CACzB,CAAC;4BAEF,IAAI,CAAC,SAAS,CAAC;gCACb,IAAI,EAAE,iBAAiB;gCACvB,SAAS,EAAE,IAAI,IAAI,EAAE;gCACrB,OAAO;gCACP,YAAY,EAAE,MAAM;6BACrB,CAAC,CAAC;4BAEH,QAAQ,EAAE,CAAC;4BACX,MAAM,CAAC,oCAAoC;wBAC7C,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,gCAAgC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;aACxG,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB,CACd,MAAc,EACd,SAAe,EACf,gBAAwB;QAExB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE;YAC3B,MAAM;YACN,iBAAiB,EAAE,SAAS;YAC5B,oBAAoB,EAAE,gBAAgB;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,MAAc;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC3B,MAAM;gBACN,iBAAiB,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,+BAA+B;gBAC/D,oBAAoB,EAAE,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,mBAAmB;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,qBAAqB,CAAC,IAAqB;QACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,yCAAyC;QACzC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YACxE,IAAI,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBACxC,6CAA6C;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,uBAAuB;QAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;QACnE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,wBAAwB;QAClC,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClD,MAAM,cAAc,GAAsB,EAAE,CAAC;QAE7C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,mCAAmC;YACnC,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBACvD,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM;gBACR,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAClD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAEjE,MAAM,IAAI,GAAmB;YAC3B,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACnD,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;gBACrB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,EAAE;gBACxD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;aACjD,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,IAAI,GAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEjD,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,CAAC,OAAO,EAAE,CACxD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE;oBAC3B,MAAM;oBACN,iBAAiB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBACpD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC3F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,uBAAuB;QAC3B,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAEvE,MAAM,IAAI,GAAyB;YACjC,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBACvC,8DAA8D;aAC/D,CAAC,CAAC;YACH,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB;QACxB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAEvE,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,IAAI,GAAyB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvD,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACb,gDAAgD,IAAI,CAAC,OAAO,EAAE,CAC/D,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;aACpC,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACjG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAmC;QACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,OAAmC;QAC1C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAA0B;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAClD,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,UAAU,CAAI,KAAU,EAAE,SAAiB;QACjD,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;CACF;AAr6BD,sDAq6BC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @fileoverview BlockFetcher Implementation
3
+ *
4
+ * Retrieves block data from remote nodes with:
5
+ * - Checksum verification
6
+ * - Retry logic with exponential backoff
7
+ * - Node health tracking (cooldown)
8
+ * - Pool-scoped storage via putInPool
9
+ * - Pool metadata validation (PoolMismatchError on mismatch)
10
+ *
11
+ * @see cross-node-eventual-consistency design, Section 9
12
+ * @see pool-scoped-whitening requirements 7.1, 7.2, 7.3, 7.4
13
+ */
14
+ import { BlockFetcherConfig, BlockFetchResult, IAvailabilityService, IBlockFetcher, IBlockFetchTransport, IBlockStore, IFetchQueue, IGossipService, PoolId } from '@brightchain/brightchain-lib';
15
+ /**
16
+ * BlockFetcher retrieves blocks from remote nodes, verifies checksums,
17
+ * stores them in the correct pool, and validates pool metadata.
18
+ *
19
+ * Pool-scoped fetch behavior (Requirements 7.1–7.4):
20
+ * - When poolId is provided, fetched blocks are stored via putInPool(poolId, data)
21
+ * - The fetcher verifies that the block's metadata poolId matches the requested poolId
22
+ * - PoolMismatchError is thrown when metadata doesn't match
23
+ * - Tuple reconstruction callers pass the same poolId for all blocks
24
+ */
25
+ export declare class BlockFetcher implements IBlockFetcher {
26
+ private readonly transport;
27
+ private readonly availabilityService;
28
+ private readonly store;
29
+ private readonly config;
30
+ private readonly gossipService?;
31
+ private readonly fetchQueue?;
32
+ private readonly nodeCooldowns;
33
+ private readonly checksumService;
34
+ private running;
35
+ /**
36
+ * Bound handler for gossip announcements, stored so we can unsubscribe in stop().
37
+ * Only set when proactiveFetchEnabled is true and gossipService is provided.
38
+ */
39
+ private announcementHandler;
40
+ constructor(transport: IBlockFetchTransport, availabilityService: IAvailabilityService, store: IBlockStore, config?: BlockFetcherConfig, gossipService?: IGossipService | undefined, fetchQueue?: IFetchQueue | undefined);
41
+ /**
42
+ * Fetch a block from remote nodes and store it locally.
43
+ *
44
+ * The entire operation is bounded by `fetchTimeoutMs` (Req 1.6).
45
+ *
46
+ * When poolId is provided:
47
+ * 1. The block is stored in the specified pool via putInPool (Req 7.1)
48
+ * 2. After storage, the block's metadata poolId is verified against the requested poolId (Req 7.2)
49
+ * 3. If metadata doesn't match, the block is rejected with PoolMismatchError (Req 7.3)
50
+ *
51
+ * For tuple reconstruction, callers pass the same poolId for all blocks (Req 7.4).
52
+ */
53
+ fetchBlock(blockId: string, poolId?: PoolId): Promise<BlockFetchResult>;
54
+ /**
55
+ * Core fetch logic: query locations, filter cooldowns, try nodes in order.
56
+ */
57
+ private doFetchBlock;
58
+ /**
59
+ * Try fetching a block from a single node with retries.
60
+ * Returns a successful BlockFetchResult or null if all retries failed.
61
+ */
62
+ private tryFetchFromNode;
63
+ /**
64
+ * Store a fetched block. When poolId is provided and the store supports pools,
65
+ * the block is stored in the specified pool via putInPool (Req 7.1).
66
+ * Otherwise falls back to the standard put method.
67
+ */
68
+ private storeBlock;
69
+ /**
70
+ * Validate that the stored block's metadata poolId matches the requested poolId.
71
+ * Throws PoolMismatchError if there's a mismatch (Req 7.2, 7.3).
72
+ */
73
+ private validatePoolMetadata;
74
+ /** Check if a node is currently available (not in cooldown) */
75
+ isNodeAvailable(nodeId: string): boolean;
76
+ /** Mark a node as unavailable for the configured cooldown period */
77
+ markNodeUnavailable(nodeId: string): void;
78
+ /** Get the current configuration */
79
+ getConfig(): BlockFetcherConfig;
80
+ /** Start the fetcher and subscribe to gossip announcements if proactive fetching is enabled */
81
+ start(): void;
82
+ /** Stop the fetcher, unsubscribe from gossip, and clean up */
83
+ stop(): void;
84
+ /** Whether the fetcher is currently running */
85
+ isRunning(): boolean;
86
+ /**
87
+ * Handle a gossip announcement for proactive fetching.
88
+ * Checks if the block is already local; if not, enqueues a low-priority fetch.
89
+ *
90
+ * @see Requirements 6.1, 6.2
91
+ */
92
+ private handleProactiveAnnouncement;
93
+ /**
94
+ * Race the fetch operation against fetchTimeoutMs (Req 1.6).
95
+ * Returns a FetchTimeoutError result if the timeout fires first.
96
+ */
97
+ private withTimeout;
98
+ private sleep;
99
+ }
100
+ //# sourceMappingURL=blockFetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockFetcher.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/blockFetch/blockFetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,kBAAkB,EAElB,gBAAgB,EAGhB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,cAAc,EAGd,MAAM,EAEP,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;;;GASG;AACH,qBAAa,YAAa,YAAW,aAAa;IAY9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAhB9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAC1E,OAAO,CAAC,OAAO,CAAS;IAExB;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAoC;gBAG5C,SAAS,EAAE,oBAAoB,EAC/B,mBAAmB,EAAE,oBAAoB,EACzC,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAiD,EACzD,aAAa,CAAC,EAAE,cAAc,YAAA,EAC9B,UAAU,CAAC,EAAE,WAAW,YAAA;IAG3C;;;;;;;;;;;OAWG;IACU,UAAU,CACrB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC;IAI5B;;OAEG;YACW,YAAY;IAsC1B;;;OAGG;YACW,gBAAgB;IAqE9B;;;;OAIG;YACW,UAAU;IAYxB;;;OAGG;YACW,oBAAoB;IAUlC,+DAA+D;IACxD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAY/C,oEAAoE;IAC7D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhD,oCAAoC;IAC7B,SAAS,IAAI,kBAAkB;IAItC,+FAA+F;IACxF,KAAK,IAAI,IAAI;IAepB,8DAA8D;IACvD,IAAI,IAAI,IAAI;IASnB,+CAA+C;IACxC,SAAS,IAAI,OAAO;IAI3B;;;;;OAKG;YACW,2BAA2B;IA6BzC;;;OAGG;IACH,OAAO,CAAC,WAAW;IAmCnB,OAAO,CAAC,KAAK;CAGd"}