@ickb/sdk 1000.0.81 → 9000.0.1

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 (157) hide show
  1. package/README.md +81 -32
  2. package/dist/constants.d.ts +13 -22
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +80 -76
  5. package/dist/constants.js.map +1 -1
  6. package/dist/conversion/estimate.d.ts +39 -0
  7. package/dist/conversion/estimate.d.ts.map +1 -0
  8. package/dist/conversion/estimate.js +117 -0
  9. package/dist/conversion/estimate.js.map +1 -0
  10. package/dist/conversion/maturity.d.ts +15 -0
  11. package/dist/conversion/maturity.d.ts.map +1 -0
  12. package/dist/conversion/maturity.js +112 -0
  13. package/dist/conversion/maturity.js.map +1 -0
  14. package/dist/conversion/plans.d.ts +20 -0
  15. package/dist/conversion/plans.d.ts.map +1 -0
  16. package/dist/conversion/plans.js +106 -0
  17. package/dist/conversion/plans.js.map +1 -0
  18. package/dist/conversion/projection.d.ts +22 -0
  19. package/dist/conversion/projection.d.ts.map +1 -0
  20. package/dist/conversion/projection.js +91 -0
  21. package/dist/conversion/projection.js.map +1 -0
  22. package/dist/conversion/types.d.ts +252 -0
  23. package/dist/conversion/types.d.ts.map +1 -0
  24. package/dist/conversion/types.js +2 -0
  25. package/dist/conversion/types.js.map +1 -0
  26. package/dist/conversion/withdrawal_ring.d.ts +36 -0
  27. package/dist/conversion/withdrawal_ring.d.ts.map +1 -0
  28. package/dist/conversion/withdrawal_ring.js +87 -0
  29. package/dist/conversion/withdrawal_ring.js.map +1 -0
  30. package/dist/dao.d.ts +86 -0
  31. package/dist/dao.d.ts.map +1 -0
  32. package/dist/dao.js +113 -0
  33. package/dist/dao.js.map +1 -0
  34. package/dist/index.d.ts +51 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +20 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/logic.d.ts +85 -0
  39. package/dist/logic.d.ts.map +1 -0
  40. package/dist/logic.js +184 -0
  41. package/dist/logic.js.map +1 -0
  42. package/dist/order/cells.d.ts +207 -0
  43. package/dist/order/cells.d.ts.map +1 -0
  44. package/dist/order/cells.js +427 -0
  45. package/dist/order/cells.js.map +1 -0
  46. package/dist/order/conversion.d.ts +43 -0
  47. package/dist/order/conversion.d.ts.map +1 -0
  48. package/dist/order/conversion.js +123 -0
  49. package/dist/order/conversion.js.map +1 -0
  50. package/dist/order/fee.d.ts +9 -0
  51. package/dist/order/fee.d.ts.map +1 -0
  52. package/dist/order/fee.js +24 -0
  53. package/dist/order/fee.js.map +1 -0
  54. package/dist/order/fill.d.ts +36 -0
  55. package/dist/order/fill.d.ts.map +1 -0
  56. package/dist/order/fill.js +53 -0
  57. package/dist/order/fill.js.map +1 -0
  58. package/dist/order/info.d.ts +62 -0
  59. package/dist/order/info.d.ts.map +1 -0
  60. package/dist/order/info.js +99 -0
  61. package/dist/order/info.js.map +1 -0
  62. package/dist/order/master.d.ts +49 -0
  63. package/dist/order/master.d.ts.map +1 -0
  64. package/dist/order/master.js +27 -0
  65. package/dist/order/master.js.map +1 -0
  66. package/dist/order/matcher.d.ts +43 -0
  67. package/dist/order/matcher.d.ts.map +1 -0
  68. package/dist/order/matcher.js +123 -0
  69. package/dist/order/matcher.js.map +1 -0
  70. package/dist/order/order.d.ts +59 -0
  71. package/dist/order/order.d.ts.map +1 -0
  72. package/dist/order/order.js +239 -0
  73. package/dist/order/order.js.map +1 -0
  74. package/dist/order/order_data.d.ts +51 -0
  75. package/dist/order/order_data.d.ts.map +1 -0
  76. package/dist/order/order_data.js +64 -0
  77. package/dist/order/order_data.js.map +1 -0
  78. package/dist/order/ratio.d.ts +42 -0
  79. package/dist/order/ratio.d.ts.map +1 -0
  80. package/dist/order/ratio.js +82 -0
  81. package/dist/order/ratio.js.map +1 -0
  82. package/dist/order/relative.d.ts +43 -0
  83. package/dist/order/relative.d.ts.map +1 -0
  84. package/dist/order/relative.js +54 -0
  85. package/dist/order/relative.js.map +1 -0
  86. package/dist/owned_owner.d.ts +113 -0
  87. package/dist/owned_owner.d.ts.map +1 -0
  88. package/dist/owned_owner.js +280 -0
  89. package/dist/owned_owner.js.map +1 -0
  90. package/dist/sdk.d.ts +71 -42
  91. package/dist/sdk.d.ts.map +1 -1
  92. package/dist/sdk.js +388 -209
  93. package/dist/sdk.js.map +1 -1
  94. package/dist/send/sign_and_send_transaction.d.ts +46 -0
  95. package/dist/send/sign_and_send_transaction.d.ts.map +1 -0
  96. package/dist/send/sign_and_send_transaction.js +101 -0
  97. package/dist/send/sign_and_send_transaction.js.map +1 -0
  98. package/dist/send/wait_transaction.d.ts +41 -0
  99. package/dist/send/wait_transaction.d.ts.map +1 -0
  100. package/dist/send/wait_transaction.js +204 -0
  101. package/dist/send/wait_transaction.js.map +1 -0
  102. package/dist/udt.d.ts +123 -0
  103. package/dist/udt.d.ts.map +1 -0
  104. package/dist/udt.js +244 -0
  105. package/dist/udt.js.map +1 -0
  106. package/dist/utils/chain.d.ts +38 -0
  107. package/dist/utils/chain.d.ts.map +1 -0
  108. package/dist/utils/chain.js +20 -0
  109. package/dist/utils/chain.js.map +1 -0
  110. package/dist/utils/codec.d.ts +19 -0
  111. package/dist/utils/codec.d.ts.map +1 -0
  112. package/dist/utils/codec.js +66 -0
  113. package/dist/utils/codec.js.map +1 -0
  114. package/dist/utils/transaction_header.d.ts +17 -0
  115. package/dist/utils/transaction_header.d.ts.map +1 -0
  116. package/dist/utils/transaction_header.js +44 -0
  117. package/dist/utils/transaction_header.js.map +1 -0
  118. package/dist/utils/utils.d.ts +126 -0
  119. package/dist/utils/utils.d.ts.map +1 -0
  120. package/dist/utils/utils.js +151 -0
  121. package/dist/utils/utils.js.map +1 -0
  122. package/package.json +19 -26
  123. package/src/constants.ts +84 -181
  124. package/src/conversion/estimate.ts +157 -0
  125. package/src/conversion/maturity.ts +159 -0
  126. package/src/conversion/plans.ts +144 -0
  127. package/src/conversion/projection.ts +128 -0
  128. package/src/conversion/types.ts +287 -0
  129. package/src/conversion/withdrawal_ring.ts +126 -0
  130. package/src/dao.ts +172 -0
  131. package/src/index.ts +89 -3
  132. package/src/logic.ts +295 -0
  133. package/src/order/cells.ts +520 -0
  134. package/src/order/conversion.ts +173 -0
  135. package/src/order/fee.ts +30 -0
  136. package/src/order/fill.ts +83 -0
  137. package/src/order/info.ts +178 -0
  138. package/src/order/master.ts +42 -0
  139. package/src/order/matcher.ts +191 -0
  140. package/src/order/order.ts +302 -0
  141. package/src/order/order_data.ts +128 -0
  142. package/src/order/ratio.ts +144 -0
  143. package/src/order/relative.ts +106 -0
  144. package/src/owned_owner.ts +394 -0
  145. package/src/sdk.ts +555 -440
  146. package/src/send/sign_and_send_transaction.ts +120 -0
  147. package/src/send/wait_transaction.ts +271 -0
  148. package/src/udt.ts +317 -0
  149. package/src/utils/chain.ts +43 -0
  150. package/src/utils/codec.ts +74 -0
  151. package/src/utils/transaction_header.ts +66 -0
  152. package/src/utils/utils.ts +237 -0
  153. package/dist/codec.d.ts +0 -3
  154. package/dist/codec.d.ts.map +0 -1
  155. package/dist/codec.js +0 -58
  156. package/dist/codec.js.map +0 -1
  157. package/src/codec.ts +0 -138
@@ -0,0 +1,239 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { findCells } from "../utils/utils.js";
3
+ import { attestResolvedOrderGroup, MasterCell, OrderCell, OrderGroup, validatedOrderGroup, } from "./cells.js";
4
+ import { Info } from "./info.js";
5
+ import { OrderData } from "./order_data.js";
6
+ import { Relative } from "./relative.js";
7
+ /**
8
+ * Builds and scans iCKB Stack order cells for one order script deployment.
9
+ */
10
+ export class OrderManager {
11
+ /** Order lock script this manager scans and builds for. */
12
+ script;
13
+ /** Cell deps required to execute the order script. */
14
+ cellDeps;
15
+ /** UDT type script accepted by this order market. */
16
+ udtScript;
17
+ /**
18
+ * Creates an order manager for one order script, its cell deps, and UDT type.
19
+ */
20
+ constructor(script, cellDeps, udtScript) {
21
+ this.script = script;
22
+ this.cellDeps = cellDeps;
23
+ this.udtScript = udtScript;
24
+ }
25
+ /** Returns true when the cell is an order cell for this manager's scripts. */
26
+ isOrder(cell) {
27
+ return (cell.cellOutput.lock.eq(this.script) &&
28
+ Boolean(cell.cellOutput.type?.eq(this.udtScript)));
29
+ }
30
+ /**
31
+ * Adds a new order cell and its master cell to a partial transaction.
32
+ *
33
+ * @remarks
34
+ * The order output is locked by the order script and typed by the configured
35
+ * UDT. The following master output is typed by the order script and locked by
36
+ * the caller-provided lock.
37
+ */
38
+ mint(txLike, lock, infoLike, { ckbValue, udtValue }) {
39
+ const tx = ccc.Transaction.from(txLike);
40
+ const data = OrderData.from({
41
+ udtValue,
42
+ master: { type: "relative", value: Relative.create(1n) },
43
+ info: Info.from(infoLike),
44
+ });
45
+ data.validate();
46
+ if (ckbValue < 0n) {
47
+ throw new Error("ckbValue invalid, negative");
48
+ }
49
+ tx.addCellDeps(this.cellDeps);
50
+ const outputCount = tx.addOutput({ lock: this.script, type: this.udtScript }, data.toBytes());
51
+ const orderOutput = tx.outputs[outputCount - 1];
52
+ if (orderOutput === undefined) {
53
+ throw new Error("Failed to append order output");
54
+ }
55
+ orderOutput.capacity += ckbValue;
56
+ tx.addOutput({ lock, type: this.script });
57
+ return tx;
58
+ }
59
+ /**
60
+ * Adds inputs and partial outputs for a chosen match.
61
+ */
62
+ addMatch(txLike, match) {
63
+ const tx = ccc.Transaction.from(txLike);
64
+ const partials = match.partials.map((partial) => this.validatedPartial(partial));
65
+ let ckbDelta = 0n;
66
+ let udtDelta = 0n;
67
+ for (const { group, ckbOut, udtOut } of partials) {
68
+ ckbDelta += group.order.ckbValue - ckbOut;
69
+ udtDelta += group.order.udtValue - udtOut;
70
+ }
71
+ if (match.ckbDelta !== ckbDelta || match.udtDelta !== udtDelta) {
72
+ throw new Error("Match deltas do not match partial order accounting");
73
+ }
74
+ if (partials.length === 0) {
75
+ return tx;
76
+ }
77
+ tx.addCellDeps(this.cellDeps);
78
+ for (const { group, ckbOut, udtOut } of partials) {
79
+ const { order } = group;
80
+ tx.addInput(order.cell);
81
+ tx.addOutput({ lock: this.script, type: this.udtScript, capacity: ckbOut }, OrderData.from({
82
+ udtValue: udtOut,
83
+ master: { type: "absolute", value: order.getMaster() },
84
+ info: order.data.info,
85
+ }).toBytes());
86
+ }
87
+ return tx;
88
+ }
89
+ /**
90
+ * Adds order groups and their master cells as melt inputs.
91
+ *
92
+ * @remarks Melts exactly the groups it is given: callers pass fulfilled groups
93
+ * to collect and a live group to cancel it.
94
+ */
95
+ melt(txLike, groups) {
96
+ const tx = ccc.Transaction.from(txLike);
97
+ const selected = groups.map(validatedOrderGroup);
98
+ if (selected.length === 0) {
99
+ return tx;
100
+ }
101
+ for (const group of selected) {
102
+ if (!this.isOrder(group.order.cell)) {
103
+ throw new Error(`Melt order ${group.order.cell.outPoint.toHex()} does not match this order manager`);
104
+ }
105
+ }
106
+ tx.addCellDeps(this.cellDeps);
107
+ for (const group of selected) {
108
+ tx.addInput(group.order.cell);
109
+ tx.addInput(group.master.cell);
110
+ }
111
+ return tx;
112
+ }
113
+ /**
114
+ * Finds valid order groups by scanning order cells and master cells. Unresolved or
115
+ * invalid groups are skipped.
116
+ */
117
+ async findOrders(client) {
118
+ const [orders, masters] = await Promise.all([
119
+ this.findSimpleOrders(client),
120
+ this.findAllMasters(client),
121
+ ]);
122
+ const rawGroups = new Map(masters.map((master) => [
123
+ master.cell.outPoint.toHex(),
124
+ { master, orders: new Array() },
125
+ ]));
126
+ for (const order of orders) {
127
+ rawGroups.get(order.getMaster().toHex())?.orders.push(order);
128
+ }
129
+ // Each group's origin is one transaction read; resolving them together turns a book of
130
+ // fifty orders from seconds of round trips into one.
131
+ const groups = await Promise.all([...rawGroups.values()]
132
+ .filter((rawGroup) => rawGroup.orders.length > 0)
133
+ .map(async ({ master, orders: candidates }) => this.resolveOrderGroup(client, master, candidates)));
134
+ return groups.filter((group) => group !== undefined);
135
+ }
136
+ async findSimpleOrders(client) {
137
+ const cells = await findCells(client, {
138
+ script: this.script,
139
+ scriptType: "lock",
140
+ filter: { script: this.udtScript },
141
+ scriptSearchMode: "exact",
142
+ withData: true,
143
+ });
144
+ return cells.flatMap((cell) => {
145
+ const order = OrderCell.tryFrom(cell);
146
+ return order !== undefined && this.isOrder(cell) ? [order] : [];
147
+ });
148
+ }
149
+ async findAllMasters(client) {
150
+ // An exact type search returns master cells only, so nothing re-filters here.
151
+ const cells = await findCells(client, {
152
+ script: this.script,
153
+ scriptType: "type",
154
+ scriptSearchMode: "exact",
155
+ withData: true,
156
+ });
157
+ return cells.map((cell) => new MasterCell(cell));
158
+ }
159
+ /** Resolves one master and its descendant orders into a validated order group. */
160
+ async resolveOrderGroup(client, master, orders) {
161
+ const found = await this.findOrigin(client, master.cell.outPoint);
162
+ const order = found?.origin.resolve(orders);
163
+ if (found === undefined || order === undefined) {
164
+ return undefined;
165
+ }
166
+ const group = OrderGroup.tryFrom(master, order, found.origin, found.blockNumber);
167
+ // A dual-ratio order, valid on chain but placed by nothing in the stack, is left to
168
+ // whoever placed it: neither matched, estimated, shown nor melted here.
169
+ if (group === undefined || group.order.data.info.isDualRatio()) {
170
+ return undefined;
171
+ }
172
+ return attestResolvedOrderGroup(group);
173
+ }
174
+ /**
175
+ * The mint order created beside the master, read from the master's transaction: the
176
+ * client cache first, then the node, recording the response for the next read. The
177
+ * response's block number dates the order; an uncommitted origin has none.
178
+ */
179
+ async findOrigin(client, master) {
180
+ const { txHash, index: masterIndex } = master;
181
+ const response = await cachedTransactionResponse(client, txHash);
182
+ if (response === undefined) {
183
+ return undefined;
184
+ }
185
+ let origin;
186
+ for (const [i, output] of [...response.transaction.outputCells].entries()) {
187
+ const index = BigInt(i);
188
+ if (index === masterIndex) {
189
+ continue;
190
+ }
191
+ const cell = ccc.Cell.from({
192
+ cellOutput: output.cellOutput,
193
+ outputData: output.outputData,
194
+ outPoint: { txHash, index },
195
+ });
196
+ const order = OrderCell.tryFrom(cell);
197
+ if (order === undefined ||
198
+ !this.isOrder(cell) ||
199
+ !order.data.isMint() ||
200
+ !order.getMaster().eq(master)) {
201
+ continue;
202
+ }
203
+ if (origin !== undefined) {
204
+ // Two mint orders pointing at one master: the group is ambiguous, skip it.
205
+ return undefined;
206
+ }
207
+ origin = order;
208
+ }
209
+ return origin === undefined
210
+ ? undefined
211
+ : { origin, blockNumber: response.blockNumber };
212
+ }
213
+ validatedPartial({ group, ckbOut, udtOut, }) {
214
+ const validated = validatedOrderGroup(group);
215
+ const outPoint = validated.order.cell.outPoint.toHex();
216
+ if (!this.isOrder(validated.order.cell)) {
217
+ throw new Error(`Match order ${outPoint} does not match this order manager`);
218
+ }
219
+ if (ckbOut < 0n) {
220
+ throw new Error(`Match order ${outPoint} has negative CKB output`);
221
+ }
222
+ if (udtOut < 0n) {
223
+ throw new Error(`Match order ${outPoint} has negative UDT output`);
224
+ }
225
+ return { group: validated, ckbOut, udtOut };
226
+ }
227
+ }
228
+ async function cachedTransactionResponse(client, txHash) {
229
+ // As CCC's own readers do, trust the cache only once the transaction is in a block: the
230
+ // cache also holds what CCC records at broadcast and what a lagging node answered, and a
231
+ // long-lived client would otherwise keep that answer for good.
232
+ const cached = await client.cache.getTransactionResponse(txHash);
233
+ if (cached?.blockNumber !== undefined) {
234
+ return cached;
235
+ }
236
+ // CCC's read records a found response in the cache itself.
237
+ return client.getTransaction(txHash);
238
+ }
239
+ //# sourceMappingURL=order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../src/order/order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { Info, type InfoLike } from "./info.js";
3
+ import { type Master, type MasterLike } from "./master.js";
4
+ /**
5
+ * Wire shape for order cell data.
6
+ */
7
+ export interface OrderDataLike {
8
+ /** UDT amount held by the order cell. */
9
+ udtValue: ccc.FixedPointLike;
10
+ /** Relative or absolute pointer to the master cell. */
11
+ master: MasterLike;
12
+ /** Price and minimum-match metadata. */
13
+ info: InfoLike;
14
+ }
15
+ /**
16
+ * Serialized order cell payload.
17
+ */
18
+ export interface OrderData {
19
+ /** UDT amount held by the order cell. */
20
+ udtValue: ccc.FixedPoint;
21
+ /** Master-cell pointer. */
22
+ master: Master;
23
+ /** Price and minimum-match metadata. */
24
+ info: Info;
25
+ /** Creates a copy of this order payload. */
26
+ clone(): OrderData;
27
+ /** Returns whether another value has the same order payload. */
28
+ eq(other: OrderDataLike): boolean;
29
+ /** Resolves a relative master against `current`, or returns the absolute master. */
30
+ getMaster(current: ccc.OutPoint): ccc.OutPoint;
31
+ /** Returns the CKB hash of the serialized order payload. */
32
+ hash(): ccc.Hex;
33
+ /** Returns whether the master pointer is relative to the current output. */
34
+ isMint(): boolean;
35
+ /** Serializes the order payload to bytes. */
36
+ toBytes(): ccc.Bytes;
37
+ /** Serializes the order payload to full-width hexadecimal. */
38
+ toHex(): ccc.Hex;
39
+ /** Throws if the UDT value, master pointer, or info is invalid. */
40
+ validate(): void;
41
+ }
42
+ /** CCC-backed order-data constructor and codec. */
43
+ export declare const OrderData: {
44
+ byteLength?: number;
45
+ new (udtValue: ccc.FixedPoint, master: Master, info: Info): OrderData;
46
+ decode: (encoded: ccc.BytesLike) => OrderData;
47
+ encode: (data: OrderDataLike) => ccc.Bytes;
48
+ from: (data: OrderDataLike) => OrderData;
49
+ fromBytes: (encoded: ccc.BytesLike) => OrderData;
50
+ };
51
+ //# sourceMappingURL=order_data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order_data.d.ts","sourceRoot":"","sources":["../../src/order/order_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC;IAC7B,uDAAuD;IACvD,MAAM,EAAE,UAAU,CAAC;IACnB,wCAAwC;IACxC,IAAI,EAAE,QAAQ,CAAC;CAChB;AAUD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC;IACzB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,EAAE,IAAI,CAAC;IACX,4CAA4C;IAC5C,KAAK,IAAI,SAAS,CAAC;IACnB,gEAAgE;IAChE,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAClC,oFAAoF;IACpF,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC/C,4DAA4D;IAC5D,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;IAChB,4EAA4E;IAC5E,MAAM,IAAI,OAAO,CAAC;IAClB,6CAA6C;IAC7C,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC;IACrB,8DAA8D;IAC9D,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IACjB,mEAAmE;IACnE,QAAQ,IAAI,IAAI,CAAC;CAClB;AA2DD,mDAAmD;AAEnD,eAAO,MAAM,SAAS,EAAE;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACtE,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,GAAG,CAAC,KAAK,CAAC;IAC3C,IAAI,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,CAAC;IACzC,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC;CACxB,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { ccc, mol } from "@ckb-ccc/core";
2
+ import { CheckedUint128LE } from "../utils/codec.js";
3
+ import { Info } from "./info.js";
4
+ import { MasterCodec, masterFrom, masterValidate, } from "./master.js";
5
+ const maxUint128 = (1n << 128n) - 1n;
6
+ const OrderDataCodec = mol.struct({
7
+ udtValue: CheckedUint128LE,
8
+ master: MasterCodec,
9
+ info: Info,
10
+ });
11
+ const OrderBase = ccc.Entity.Base();
12
+ // eslint-disable-next-line @typescript-eslint/no-shadow -- Preserve the runtime constructor name.
13
+ const OrderDataImplementation = class OrderData extends OrderBase {
14
+ static {
15
+ ccc.codec(OrderDataCodec)(this);
16
+ }
17
+ /** UDT amount held by the order cell. */
18
+ udtValue;
19
+ /** Master-cell pointer. */
20
+ master;
21
+ /** Price and minimum-match metadata. */
22
+ info;
23
+ /** Creates normalized order data. */
24
+ constructor(udtValue, master, info) {
25
+ super();
26
+ this.udtValue = udtValue;
27
+ this.master = master;
28
+ this.info = info;
29
+ }
30
+ /** Normalizes an `OrderDataLike` wire object or existing entity into `OrderData`. */
31
+ static from(data) {
32
+ if (data instanceof OrderData) {
33
+ return data;
34
+ }
35
+ const { udtValue, master, info } = data;
36
+ return new OrderData(ccc.numFrom(udtValue), masterFrom(master), Info.from(info));
37
+ }
38
+ /** Throws when the order payload is not internally valid. */
39
+ validate() {
40
+ if (this.udtValue < 0n) {
41
+ throw new Error("udtValue invalid, negative");
42
+ }
43
+ if (this.udtValue > maxUint128) {
44
+ throw new Error("udtValue exceeds Uint128");
45
+ }
46
+ masterValidate(this.master);
47
+ this.info.validate();
48
+ }
49
+ /** Returns true when the master pointer is relative to the current output. */
50
+ isMint() {
51
+ return this.master.type === "relative";
52
+ }
53
+ /** Resolves the master out point relative to the current order out point. */
54
+ getMaster(current) {
55
+ const { type, value } = this.master;
56
+ return type === "relative"
57
+ ? new ccc.OutPoint(current.txHash, current.index + value.distance)
58
+ : value;
59
+ }
60
+ };
61
+ /** CCC-backed order-data constructor and codec. */
62
+ // eslint-disable-next-line @typescript-eslint/no-redeclare -- The public type and runtime constructor intentionally share a name.
63
+ export const OrderData = OrderDataImplementation;
64
+ //# sourceMappingURL=order_data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order_data.js","sourceRoot":"","sources":["../../src/order/order_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,GAGf,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AAcrC,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,WAAW;IACnB,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAA4B,CAAC;AA8B9D,kGAAkG;AAClG,MAAM,uBAAuB,GAAG,MAAM,SAAU,SAAQ,SAAS;IAC/D;QACE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,yCAAyC;IACzB,QAAQ,CAAiB;IACzC,2BAA2B;IACX,MAAM,CAAS;IAC/B,wCAAwC;IACxB,IAAI,CAAO;IAE3B,qCAAqC;IACrC,YAAY,QAAwB,EAAE,MAAc,EAAE,IAAU;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,qFAAqF;IAC9E,MAAM,CAAU,IAAI,CAAC,IAAmB;QAC7C,IAAI,IAAI,YAAY,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACxC,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,6DAA6D;IACtD,QAAQ;QACb,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;IAED,8EAA8E;IACvE,MAAM;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;IACzC,CAAC;IAED,6EAA6E;IACtE,SAAS,CAAC,OAAqB;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACpC,OAAO,IAAI,KAAK,UAAU;YACxB,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAClE,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC;CACF,CAAC;AAEF,mDAAmD;AACnD,kIAAkI;AAClI,MAAM,CAAC,MAAM,SAAS,GAOlB,uBAAuB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ import { type ExchangeRatio } from "../utils/utils.js";
3
+ /**
4
+ * Serialized exchange ratio used by order info.
5
+ *
6
+ * @remarks
7
+ * A ratio is either empty (`0, 0`) or populated with both scales greater than
8
+ * zero. Mixed empty/populated values are invalid.
9
+ */
10
+ export interface Ratio extends ExchangeRatio {
11
+ /** Creates a copy of this ratio. */
12
+ clone(): Ratio;
13
+ /** Compares effective CKB-to-UDT prices, returning their numeric ordering. */
14
+ compare(other: Ratio): number;
15
+ /** Converts an amount in the selected direction, rounding up only when requested. */
16
+ convert(isCkb2Udt: boolean, amount: ccc.FixedPoint, mustCeil: boolean): ccc.FixedPoint;
17
+ /** Returns whether another value has the same scales. */
18
+ eq(other: ExchangeRatio): boolean;
19
+ /** Returns the CKB hash of the serialized ratio. */
20
+ hash(): ccc.Hex;
21
+ /** Returns whether both scales are zero. */
22
+ isEmpty(): boolean;
23
+ /** Returns whether both scales are positive. */
24
+ isPopulated(): boolean;
25
+ /** Serializes the ratio to bytes. */
26
+ toBytes(): ccc.Bytes;
27
+ /** Serializes the ratio to full-width hexadecimal. */
28
+ toHex(): ccc.Hex;
29
+ /** Throws unless both scales fit Uint64 and are both zero or both positive. */
30
+ validate(): void;
31
+ }
32
+ /** CCC-backed ratio constructor and codec. */
33
+ export declare const Ratio: {
34
+ byteLength?: number;
35
+ new (ckbScale: ccc.Num, udtScale: ccc.Num): Ratio;
36
+ decode: (encoded: ccc.BytesLike) => Ratio;
37
+ empty: () => Ratio;
38
+ encode: (ratio: ExchangeRatio) => ccc.Bytes;
39
+ from: (ratio: ExchangeRatio) => Ratio;
40
+ fromBytes: (encoded: ccc.BytesLike) => Ratio;
41
+ };
42
+ //# sourceMappingURL=ratio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratio.d.ts","sourceRoot":"","sources":["../../src/order/ratio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWtE;;;;;;GAMG;AACH,MAAM,WAAW,KAAM,SAAQ,aAAa;IAC1C,oCAAoC;IACpC,KAAK,IAAI,KAAK,CAAC;IACf,8EAA8E;IAC9E,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,qFAAqF;IACrF,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC;IACvF,yDAAyD;IACzD,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAClC,oDAAoD;IACpD,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;IAChB,4CAA4C;IAC5C,OAAO,IAAI,OAAO,CAAC;IACnB,gDAAgD;IAChD,WAAW,IAAI,OAAO,CAAC;IACvB,qCAAqC;IACrC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC;IACrB,sDAAsD;IACtD,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IACjB,+EAA+E;IAC/E,QAAQ,IAAI,IAAI,CAAC;CAClB;AA4FD,8CAA8C;AAE9C,eAAO,MAAM,KAAK,EAAE;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;IAClD,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC;IAC1C,KAAK,EAAE,MAAM,KAAK,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,CAAC,KAAK,CAAC;IAC5C,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,KAAK,CAAC;IACtC,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC;CACxB,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { ccc, mol } from "@ckb-ccc/core";
2
+ import { CheckedUint64LE } from "../utils/codec.js";
3
+ import { compareBigInt } from "../utils/utils.js";
4
+ const maxUint64 = (1n << 64n) - 1n;
5
+ const RatioCodec = mol.struct({
6
+ ckbScale: CheckedUint64LE,
7
+ udtScale: CheckedUint64LE,
8
+ });
9
+ const RatioBase = ccc.Entity.Base();
10
+ // eslint-disable-next-line @typescript-eslint/no-shadow -- Preserve the runtime constructor name.
11
+ const RatioImplementation = class Ratio extends RatioBase {
12
+ static {
13
+ ccc.codec(RatioCodec)(this);
14
+ }
15
+ /** CKB-side scale. */
16
+ ckbScale;
17
+ /** UDT-side scale. */
18
+ udtScale;
19
+ /** Creates a ratio from raw scales. */
20
+ constructor(ckbScale, udtScale) {
21
+ super();
22
+ this.ckbScale = ckbScale;
23
+ this.udtScale = udtScale;
24
+ }
25
+ /** Normalizes an exchange ratio wire object or existing entity into `Ratio`. */
26
+ static from(ratio) {
27
+ if (ratio instanceof Ratio) {
28
+ return ratio;
29
+ }
30
+ const { ckbScale, udtScale } = ratio;
31
+ return new Ratio(ckbScale, udtScale);
32
+ }
33
+ /** Throws when the ratio is neither empty nor fully populated. */
34
+ validate() {
35
+ if (this.ckbScale < 0n ||
36
+ this.ckbScale > maxUint64 ||
37
+ this.udtScale < 0n ||
38
+ this.udtScale > maxUint64) {
39
+ throw new Error("Ratio scale exceeds Uint64");
40
+ }
41
+ if (!this.isEmpty() && !this.isPopulated()) {
42
+ throw new Error("Ratio invalid: not empty, not populated");
43
+ }
44
+ }
45
+ /** Returns true for the sentinel empty ratio. */
46
+ isEmpty() {
47
+ return this.ckbScale === 0n && this.udtScale === 0n;
48
+ }
49
+ /** Returns true when both scales are positive. */
50
+ isPopulated() {
51
+ return this.ckbScale > 0n && this.udtScale > 0n;
52
+ }
53
+ /** Creates the sentinel empty ratio. */
54
+ static empty() {
55
+ return new Ratio(0n, 0n);
56
+ }
57
+ /** Compares two populated ratios by effective CKB-to-UDT price. */
58
+ compare(other) {
59
+ if (this.udtScale === other.udtScale) {
60
+ return compareBigInt(this.ckbScale, other.ckbScale);
61
+ }
62
+ if (this.ckbScale === other.ckbScale) {
63
+ return compareBigInt(other.udtScale, this.udtScale);
64
+ }
65
+ return compareBigInt(this.ckbScale * other.udtScale, other.ckbScale * this.udtScale);
66
+ }
67
+ /** Converts an amount in the requested direction with optional ceiling. */
68
+ convert(isCkb2Udt, amount, mustCeil) {
69
+ if (!this.isPopulated()) {
70
+ throw new Error("Invalid midpoint ExchangeRatio");
71
+ }
72
+ let { ckbScale: aScale, udtScale: bScale } = this;
73
+ if (!isCkb2Udt) {
74
+ [aScale, bScale] = [bScale, aScale];
75
+ }
76
+ return (amount * aScale + (mustCeil ? bScale - 1n : 0n)) / bScale;
77
+ }
78
+ };
79
+ /** CCC-backed ratio constructor and codec. */
80
+ // eslint-disable-next-line @typescript-eslint/no-redeclare -- The public type and runtime constructor intentionally share a name.
81
+ export const Ratio = RatioImplementation;
82
+ //# sourceMappingURL=ratio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratio.js","sourceRoot":"","sources":["../../src/order/ratio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { ccc } from "@ckb-ccc/core";
2
+ /**
3
+ * Wire shape for a relative master pointer.
4
+ */
5
+ export interface RelativeLike {
6
+ /** Must be the 32-byte zero padding used by the standard encoding. */
7
+ padding: ccc.BytesLike;
8
+ /** Signed output-index distance from the current order to its master. */
9
+ distance: ccc.NumLike;
10
+ }
11
+ /**
12
+ * Relative pointer from an order output to its master output.
13
+ */
14
+ export interface Relative {
15
+ /** Standard zero padding. */
16
+ padding: ccc.Bytes;
17
+ /** Signed output-index distance to the master output. */
18
+ distance: ccc.Num;
19
+ /** Creates a copy of this relative pointer. */
20
+ clone(): Relative;
21
+ /** Returns whether another value has the same padding and distance. */
22
+ eq(other: RelativeLike): boolean;
23
+ /** Returns the CKB hash of the serialized relative pointer. */
24
+ hash(): ccc.Hex;
25
+ /** Serializes the relative pointer to bytes. */
26
+ toBytes(): ccc.Bytes;
27
+ /** Serializes the relative pointer to full-width hexadecimal. */
28
+ toHex(): ccc.Hex;
29
+ /** Throws unless padding is canonical and distance fits Int32. */
30
+ validate(): void;
31
+ }
32
+ /** CCC-backed relative-pointer constructor and codec. */
33
+ export declare const Relative: {
34
+ byteLength?: number;
35
+ new (padding: ccc.Bytes, distance: ccc.Num): Relative;
36
+ create: (distance: ccc.Num) => Relative;
37
+ decode: (encoded: ccc.BytesLike) => Relative;
38
+ encode: (relative: RelativeLike) => ccc.Bytes;
39
+ from: (relative: RelativeLike) => Relative;
40
+ fromBytes: (encoded: ccc.BytesLike) => Relative;
41
+ padding: () => ccc.Bytes;
42
+ };
43
+ //# sourceMappingURL=relative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative.d.ts","sourceRoot":"","sources":["../../src/order/relative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,MAAM,eAAe,CAAC;AAMzC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;IACvB,yEAAyE;IACzE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;CACvB;AASD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,6BAA6B;IAC7B,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC;IACnB,yDAAyD;IACzD,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC;IAClB,+CAA+C;IAC/C,KAAK,IAAI,QAAQ,CAAC;IAClB,uEAAuE;IACvE,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;IACjC,+DAA+D;IAC/D,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;IAChB,gDAAgD;IAChD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC;IACrB,iEAAiE;IACjE,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IACjB,kEAAkE;IAClE,QAAQ,IAAI,IAAI,CAAC;CAClB;AAmDD,yDAAyD;AAEzD,eAAO,MAAM,QAAQ,EAAE;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC;IACtD,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC;IACxC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC;IAC7C,MAAM,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,GAAG,CAAC,KAAK,CAAC;IAC9C,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,QAAQ,CAAC;IAC3C,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC;IAChD,OAAO,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC;CACD,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { ccc, mol } from "@ckb-ccc/core";
2
+ import { CheckedInt32LE } from "../utils/codec.js";
3
+ const minInt32 = -(1n << 31n);
4
+ const maxInt32 = (1n << 31n) - 1n;
5
+ const RelativeCodec = mol.struct({
6
+ padding: mol.Byte32,
7
+ distance: CheckedInt32LE,
8
+ });
9
+ const RelativeBase = ccc.Entity.Base();
10
+ // eslint-disable-next-line @typescript-eslint/no-shadow -- Preserve the runtime constructor name.
11
+ const RelativeImplementation = class Relative extends RelativeBase {
12
+ static {
13
+ ccc.codec(RelativeCodec)(this);
14
+ }
15
+ /** Standard zero padding. */
16
+ padding;
17
+ /** Signed output-index distance to the master output. */
18
+ distance;
19
+ /** Creates a normalized relative pointer. */
20
+ constructor(padding, distance) {
21
+ super();
22
+ this.padding = padding;
23
+ this.distance = distance;
24
+ }
25
+ /** Normalizes a relative pointer wire object or existing entity into `Relative`. */
26
+ static from(relative) {
27
+ if (relative instanceof Relative) {
28
+ return relative;
29
+ }
30
+ const { padding, distance } = relative;
31
+ return new Relative(ccc.bytesFrom(padding), ccc.numFrom(distance));
32
+ }
33
+ /** Creates a relative pointer with standard zero padding. */
34
+ static create(distance) {
35
+ return new Relative(Relative.padding(), distance);
36
+ }
37
+ /** Returns the standard 32-byte zero padding. */
38
+ static padding() {
39
+ return new Uint8Array(32);
40
+ }
41
+ /** Throws when padding is not the standard 32-byte zero value. */
42
+ validate() {
43
+ if (this.padding.length !== 32 || this.padding.some((x) => x !== 0)) {
44
+ throw new Error("Relative master invalid, non standard padding");
45
+ }
46
+ if (this.distance < minInt32 || this.distance > maxInt32) {
47
+ throw new Error("Relative master distance exceeds Int32");
48
+ }
49
+ }
50
+ };
51
+ /** CCC-backed relative-pointer constructor and codec. */
52
+ // eslint-disable-next-line @typescript-eslint/no-redeclare -- The public type and runtime constructor intentionally share a name.
53
+ export const Relative = RelativeImplementation;
54
+ //# sourceMappingURL=relative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative.js","sourceRoot":"","sources":["../../src/order/relative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAC9B,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AAYlC,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM;IACnB,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAA0B,CAAC;AAwB/D,kGAAkG;AAClG,MAAM,sBAAsB,GAAG,MAAM,QAAS,SAAQ,YAAY;IAChE;QACE,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,6BAA6B;IACb,OAAO,CAAY;IACnC,yDAAyD;IACzC,QAAQ,CAAU;IAElC,6CAA6C;IAC7C,YAAY,OAAkB,EAAE,QAAiB;QAC/C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,oFAAoF;IAC7E,MAAM,CAAU,IAAI,CAAC,QAAsB;QAChD,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QACvC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,MAAM,CAAC,QAAiB;QACpC,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,iDAAiD;IAC1C,MAAM,CAAC,OAAO;QACnB,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,kEAAkE;IAC3D,QAAQ;QACb,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,yDAAyD;AACzD,kIAAkI;AAClI,MAAM,CAAC,MAAM,QAAQ,GASjB,sBAAsB,CAAC"}