@clober/v2-sdk 0.0.2-b → 0.0.3-a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/approval.js +0 -26
- package/dist/cjs/approval.js.map +1 -1
- package/dist/cjs/call.js +0 -208
- package/dist/cjs/call.js.map +1 -1
- package/dist/cjs/constants/fee.js +2 -2
- package/dist/cjs/constants/fee.js.map +1 -1
- package/dist/cjs/index.js +6 -19
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/model/book.js +145 -112
- package/dist/cjs/model/book.js.map +1 -1
- package/dist/cjs/model/fee-policy.js +71 -21
- package/dist/cjs/model/fee-policy.js.map +1 -1
- package/dist/cjs/model/market.js +235 -171
- package/dist/cjs/model/market.js.map +1 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/signature.js +0 -33
- package/dist/cjs/signature.js.map +1 -1
- package/dist/cjs/utils/market.js +0 -3
- package/dist/cjs/utils/market.js.map +1 -1
- package/dist/cjs/utils/math.js +1 -28
- package/dist/cjs/utils/math.js.map +1 -1
- package/dist/cjs/view.js +0 -92
- package/dist/cjs/view.js.map +1 -1
- package/dist/esm/model/book.js +147 -112
- package/dist/esm/model/book.js.map +1 -1
- package/dist/esm/model/fee-policy.js +71 -21
- package/dist/esm/model/fee-policy.js.map +1 -1
- package/dist/esm/model/market.js +241 -171
- package/dist/esm/model/market.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +5 -11
- package/dist/cjs/tsconfig.build.tsbuildinfo +0 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +0 -1
package/dist/cjs/model/book.js
CHANGED
|
@@ -6,125 +6,158 @@ const fee_1 = require("../constants/fee");
|
|
|
6
6
|
const math_1 = require("../utils/math");
|
|
7
7
|
const decimals_1 = require("../utils/decimals");
|
|
8
8
|
class Book {
|
|
9
|
-
id;
|
|
10
|
-
base;
|
|
11
|
-
unit;
|
|
12
|
-
quote;
|
|
13
|
-
depths;
|
|
14
9
|
constructor({ id, base, quote, unit, depths, }) {
|
|
10
|
+
Object.defineProperty(this, "id", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: void 0
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "base", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "unit", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(this, "quote", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: void 0
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(this, "depths", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: void 0
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(this, "take", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: ({ limitPrice, amountOut, }) => {
|
|
45
|
+
let takenQuoteAmount = 0n;
|
|
46
|
+
let spendBaseAmount = 0n;
|
|
47
|
+
if (this.depths.length === 0) {
|
|
48
|
+
return {
|
|
49
|
+
takenQuoteAmount,
|
|
50
|
+
spendBaseAmount,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const ticks = this.depths
|
|
54
|
+
.sort((a, b) => Number(b.tick) - Number(a.tick))
|
|
55
|
+
.map((depth) => depth.tick);
|
|
56
|
+
let index = 0;
|
|
57
|
+
let tick = ticks[index];
|
|
58
|
+
while (tick > -8388608n) {
|
|
59
|
+
if (limitPrice > (0, tick_1.toPrice)(tick)) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
let maxAmount = fee_1.TAKER_DEFAULT_POLICY.usesQuote
|
|
63
|
+
? fee_1.TAKER_DEFAULT_POLICY.calculateOriginalAmount(amountOut - takenQuoteAmount, true)
|
|
64
|
+
: amountOut - takenQuoteAmount;
|
|
65
|
+
maxAmount = (0, math_1.divide)(maxAmount, this.unit, true);
|
|
66
|
+
if (maxAmount === 0n) {
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
const currentDepth = this.depths.find((depth) => depth.tick === tick);
|
|
70
|
+
let quoteAmount = (currentDepth.rawAmount > maxAmount
|
|
71
|
+
? maxAmount
|
|
72
|
+
: currentDepth.rawAmount) * this.unit;
|
|
73
|
+
let baseAmount = (0, decimals_1.quoteToBase)(tick, quoteAmount, true);
|
|
74
|
+
if (fee_1.TAKER_DEFAULT_POLICY.usesQuote) {
|
|
75
|
+
quoteAmount =
|
|
76
|
+
quoteAmount - fee_1.TAKER_DEFAULT_POLICY.calculateFee(quoteAmount, false);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
baseAmount =
|
|
80
|
+
baseAmount + fee_1.TAKER_DEFAULT_POLICY.calculateFee(baseAmount, false);
|
|
81
|
+
}
|
|
82
|
+
if (quoteAmount === 0n) {
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
takenQuoteAmount += quoteAmount;
|
|
86
|
+
spendBaseAmount += baseAmount;
|
|
87
|
+
if (amountOut <= takenQuoteAmount) {
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
index++;
|
|
91
|
+
tick = ticks[index];
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
takenQuoteAmount,
|
|
95
|
+
spendBaseAmount,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
Object.defineProperty(this, "spend", {
|
|
100
|
+
enumerable: true,
|
|
101
|
+
configurable: true,
|
|
102
|
+
writable: true,
|
|
103
|
+
value: ({ limitPrice, amountIn, }) => {
|
|
104
|
+
let takenQuoteAmount = 0n;
|
|
105
|
+
let spendBaseAmount = 0n;
|
|
106
|
+
if (this.depths.length === 0) {
|
|
107
|
+
return {
|
|
108
|
+
takenQuoteAmount,
|
|
109
|
+
spendBaseAmount,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const ticks = this.depths
|
|
113
|
+
.sort((a, b) => Number(b.tick) - Number(a.tick))
|
|
114
|
+
.map((depth) => depth.tick);
|
|
115
|
+
let index = 0;
|
|
116
|
+
let tick = ticks[index];
|
|
117
|
+
while (spendBaseAmount <= amountIn && tick > -8388608n) {
|
|
118
|
+
if (limitPrice > (0, tick_1.toPrice)(tick)) {
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
let maxAmount = fee_1.TAKER_DEFAULT_POLICY.usesQuote
|
|
122
|
+
? amountIn - spendBaseAmount
|
|
123
|
+
: fee_1.TAKER_DEFAULT_POLICY.calculateOriginalAmount(amountIn - spendBaseAmount, false);
|
|
124
|
+
maxAmount = (0, decimals_1.baseToQuote)(tick, maxAmount, false) / this.unit;
|
|
125
|
+
if (maxAmount === 0n) {
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
const currentDepth = this.depths.find((depth) => depth.tick === tick);
|
|
129
|
+
let quoteAmount = (currentDepth.rawAmount > maxAmount
|
|
130
|
+
? maxAmount
|
|
131
|
+
: currentDepth.rawAmount) * this.unit;
|
|
132
|
+
let baseAmount = (0, decimals_1.quoteToBase)(tick, quoteAmount, true);
|
|
133
|
+
if (fee_1.TAKER_DEFAULT_POLICY.usesQuote) {
|
|
134
|
+
quoteAmount =
|
|
135
|
+
quoteAmount - fee_1.TAKER_DEFAULT_POLICY.calculateFee(quoteAmount, false);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
baseAmount =
|
|
139
|
+
baseAmount + fee_1.TAKER_DEFAULT_POLICY.calculateFee(baseAmount, false);
|
|
140
|
+
}
|
|
141
|
+
if (baseAmount === 0n) {
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
takenQuoteAmount += quoteAmount;
|
|
145
|
+
spendBaseAmount += baseAmount;
|
|
146
|
+
index++;
|
|
147
|
+
tick = ticks[index];
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
takenQuoteAmount,
|
|
151
|
+
spendBaseAmount,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
});
|
|
15
155
|
this.id = id;
|
|
16
156
|
this.base = base;
|
|
17
157
|
this.unit = unit;
|
|
18
158
|
this.quote = quote;
|
|
19
159
|
this.depths = depths;
|
|
20
160
|
}
|
|
21
|
-
take = ({ limitPrice, amountOut, // quote
|
|
22
|
-
}) => {
|
|
23
|
-
let takenQuoteAmount = 0n;
|
|
24
|
-
let spendBaseAmount = 0n;
|
|
25
|
-
if (this.depths.length === 0) {
|
|
26
|
-
return {
|
|
27
|
-
takenQuoteAmount,
|
|
28
|
-
spendBaseAmount,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
const ticks = this.depths
|
|
32
|
-
.sort((a, b) => Number(b.tick) - Number(a.tick))
|
|
33
|
-
.map((depth) => depth.tick);
|
|
34
|
-
let index = 0;
|
|
35
|
-
let tick = ticks[index];
|
|
36
|
-
while (tick > -8388608n) {
|
|
37
|
-
if (limitPrice > (0, tick_1.toPrice)(tick)) {
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
let maxAmount = fee_1.TAKER_DEFAULT_POLICY.usesQuote
|
|
41
|
-
? fee_1.TAKER_DEFAULT_POLICY.calculateOriginalAmount(amountOut - takenQuoteAmount, true)
|
|
42
|
-
: amountOut - takenQuoteAmount;
|
|
43
|
-
maxAmount = (0, math_1.divide)(maxAmount, this.unit, true);
|
|
44
|
-
if (maxAmount === 0n) {
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
const currentDepth = this.depths.find((depth) => depth.tick === tick);
|
|
48
|
-
let quoteAmount = (currentDepth.rawAmount > maxAmount
|
|
49
|
-
? maxAmount
|
|
50
|
-
: currentDepth.rawAmount) * this.unit;
|
|
51
|
-
let baseAmount = (0, decimals_1.quoteToBase)(tick, quoteAmount, true);
|
|
52
|
-
if (fee_1.TAKER_DEFAULT_POLICY.usesQuote) {
|
|
53
|
-
quoteAmount =
|
|
54
|
-
quoteAmount - fee_1.TAKER_DEFAULT_POLICY.calculateFee(quoteAmount, false);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
baseAmount =
|
|
58
|
-
baseAmount + fee_1.TAKER_DEFAULT_POLICY.calculateFee(baseAmount, false);
|
|
59
|
-
}
|
|
60
|
-
if (quoteAmount === 0n) {
|
|
61
|
-
break;
|
|
62
|
-
}
|
|
63
|
-
takenQuoteAmount += quoteAmount;
|
|
64
|
-
spendBaseAmount += baseAmount;
|
|
65
|
-
if (amountOut <= takenQuoteAmount) {
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
index++;
|
|
69
|
-
tick = ticks[index];
|
|
70
|
-
}
|
|
71
|
-
return {
|
|
72
|
-
takenQuoteAmount,
|
|
73
|
-
spendBaseAmount,
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
spend = ({ limitPrice, amountIn, // base
|
|
77
|
-
}) => {
|
|
78
|
-
let takenQuoteAmount = 0n;
|
|
79
|
-
let spendBaseAmount = 0n;
|
|
80
|
-
if (this.depths.length === 0) {
|
|
81
|
-
return {
|
|
82
|
-
takenQuoteAmount,
|
|
83
|
-
spendBaseAmount,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const ticks = this.depths
|
|
87
|
-
.sort((a, b) => Number(b.tick) - Number(a.tick))
|
|
88
|
-
.map((depth) => depth.tick);
|
|
89
|
-
let index = 0;
|
|
90
|
-
let tick = ticks[index];
|
|
91
|
-
while (spendBaseAmount <= amountIn && tick > -8388608n) {
|
|
92
|
-
if (limitPrice > (0, tick_1.toPrice)(tick)) {
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
let maxAmount = fee_1.TAKER_DEFAULT_POLICY.usesQuote
|
|
96
|
-
? amountIn - spendBaseAmount
|
|
97
|
-
: fee_1.TAKER_DEFAULT_POLICY.calculateOriginalAmount(amountIn - spendBaseAmount, false);
|
|
98
|
-
maxAmount = (0, decimals_1.baseToQuote)(tick, maxAmount, false) / this.unit;
|
|
99
|
-
if (maxAmount === 0n) {
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
const currentDepth = this.depths.find((depth) => depth.tick === tick);
|
|
103
|
-
let quoteAmount = (currentDepth.rawAmount > maxAmount
|
|
104
|
-
? maxAmount
|
|
105
|
-
: currentDepth.rawAmount) * this.unit;
|
|
106
|
-
let baseAmount = (0, decimals_1.quoteToBase)(tick, quoteAmount, true);
|
|
107
|
-
if (fee_1.TAKER_DEFAULT_POLICY.usesQuote) {
|
|
108
|
-
quoteAmount =
|
|
109
|
-
quoteAmount - fee_1.TAKER_DEFAULT_POLICY.calculateFee(quoteAmount, false);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
baseAmount =
|
|
113
|
-
baseAmount + fee_1.TAKER_DEFAULT_POLICY.calculateFee(baseAmount, false);
|
|
114
|
-
}
|
|
115
|
-
if (baseAmount === 0n) {
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
takenQuoteAmount += quoteAmount;
|
|
119
|
-
spendBaseAmount += baseAmount;
|
|
120
|
-
index++;
|
|
121
|
-
tick = ticks[index];
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
takenQuoteAmount,
|
|
125
|
-
spendBaseAmount,
|
|
126
|
-
};
|
|
127
|
-
};
|
|
128
161
|
}
|
|
129
162
|
exports.Book = Book;
|
|
130
163
|
//# sourceMappingURL=book.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"book.js","sourceRoot":"","sources":["../../../src/model/book.ts"],"names":[],"mappings":";;;AAAA,wCAAuC;AACvC,0CAAuD;AACvD,wCAAsC;AACtC,gDAA4D;AA2B5D,MAAa,IAAI;
|
|
1
|
+
{"version":3,"file":"book.js","sourceRoot":"","sources":["../../../src/model/book.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,52 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.FeePolicy = void 0;
|
|
4
4
|
const math_1 = require("../utils/math");
|
|
5
5
|
class FeePolicy {
|
|
6
|
-
static MAX_FEE_RATE = 500000n;
|
|
7
|
-
static MIN_FEE_RATE = -500000n;
|
|
8
|
-
static RATE_MASK = 0x7fffffn;
|
|
9
|
-
RATE_PRECISION = 10n ** 6n;
|
|
10
|
-
usesQuote;
|
|
11
|
-
value;
|
|
12
|
-
rate;
|
|
13
6
|
constructor(usesQuote, rate) {
|
|
7
|
+
Object.defineProperty(this, "RATE_PRECISION", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: 10n ** 6n
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(this, "usesQuote", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: void 0
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(this, "value", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true,
|
|
23
|
+
value: void 0
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(this, "rate", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true,
|
|
29
|
+
value: void 0
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(this, "calculateFee", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true,
|
|
35
|
+
value: (amount, reverseRounding) => {
|
|
36
|
+
const positive = this.rate > 0n;
|
|
37
|
+
const absRate = positive ? this.rate : -this.rate;
|
|
38
|
+
const absFee = (0, math_1.divide)(amount * absRate, this.RATE_PRECISION, reverseRounding ? !positive : positive);
|
|
39
|
+
return positive ? absFee : -absFee;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(this, "calculateOriginalAmount", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
writable: true,
|
|
46
|
+
value: (amount, reverseFee) => {
|
|
47
|
+
const positive = this.rate > 0;
|
|
48
|
+
const divider = this.RATE_PRECISION + (reverseFee ? -this.rate : this.rate);
|
|
49
|
+
return (0, math_1.divide)(amount * this.RATE_PRECISION, divider, positive);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
14
52
|
this.usesQuote = usesQuote;
|
|
15
53
|
this.rate = rate;
|
|
16
54
|
if (rate > FeePolicy.MAX_FEE_RATE || rate < FeePolicy.MIN_FEE_RATE) {
|
|
@@ -23,20 +61,32 @@ class FeePolicy {
|
|
|
23
61
|
const usesQuote = value >> 23n > 0n;
|
|
24
62
|
return new FeePolicy(usesQuote, FeePolicy.getRateFromValue(value));
|
|
25
63
|
}
|
|
26
|
-
static getRateFromValue = (value) => {
|
|
27
|
-
return (value & FeePolicy.RATE_MASK) - FeePolicy.MAX_FEE_RATE;
|
|
28
|
-
};
|
|
29
|
-
calculateFee = (amount, reverseRounding) => {
|
|
30
|
-
const positive = this.rate > 0n;
|
|
31
|
-
const absRate = positive ? this.rate : -this.rate;
|
|
32
|
-
const absFee = (0, math_1.divide)(amount * absRate, this.RATE_PRECISION, reverseRounding ? !positive : positive);
|
|
33
|
-
return positive ? absFee : -absFee;
|
|
34
|
-
};
|
|
35
|
-
calculateOriginalAmount = (amount, reverseFee) => {
|
|
36
|
-
const positive = this.rate > 0;
|
|
37
|
-
const divider = this.RATE_PRECISION + (reverseFee ? -this.rate : this.rate);
|
|
38
|
-
return (0, math_1.divide)(amount * this.RATE_PRECISION, divider, positive);
|
|
39
|
-
};
|
|
40
64
|
}
|
|
41
65
|
exports.FeePolicy = FeePolicy;
|
|
66
|
+
Object.defineProperty(FeePolicy, "MAX_FEE_RATE", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
configurable: true,
|
|
69
|
+
writable: true,
|
|
70
|
+
value: 500000n
|
|
71
|
+
});
|
|
72
|
+
Object.defineProperty(FeePolicy, "MIN_FEE_RATE", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
configurable: true,
|
|
75
|
+
writable: true,
|
|
76
|
+
value: -500000n
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(FeePolicy, "RATE_MASK", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
configurable: true,
|
|
81
|
+
writable: true,
|
|
82
|
+
value: 0x7fffffn
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(FeePolicy, "getRateFromValue", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
configurable: true,
|
|
87
|
+
writable: true,
|
|
88
|
+
value: (value) => {
|
|
89
|
+
return (value & FeePolicy.RATE_MASK) - FeePolicy.MAX_FEE_RATE;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
42
92
|
//# sourceMappingURL=fee-policy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee-policy.js","sourceRoot":"","sources":["../../../src/model/fee-policy.ts"],"names":[],"mappings":";;;AAAA,wCAAsC;AAEtC,MAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"fee-policy.js","sourceRoot":"","sources":["../../../src/model/fee-policy.ts"],"names":[],"mappings":";;;AAAA,wCAAsC;AAEtC,MAAa,SAAS;IASpB,YAAY,SAAkB,EAAE,IAAY;QALnC;;;;mBAAiB,GAAG,IAAI,EAAE;WAAA;QAC5B;;;;;WAAkB;QAClB;;;;;WAAa;QACb;;;;;WAAY;QAsBZ;;;;mBAAe,CAAC,MAAc,EAAE,eAAwB,EAAU,EAAE;gBACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;gBAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;gBACjD,MAAM,MAAM,GAAG,IAAA,aAAM,EACnB,MAAM,GAAG,OAAO,EAChB,IAAI,CAAC,cAAc,EACnB,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CACvC,CAAA;gBACD,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YACpC,CAAC;WAAA;QAEM;;;;mBAA0B,CAC/B,MAAc,EACd,UAAmB,EACX,EAAE;gBACV,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC3E,OAAO,IAAA,aAAM,EAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;YAChE,CAAC;WAAA;QArCC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,IAAI,IAAI,GAAG,SAAS,CAAC,YAAY,IAAI,IAAI,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACrC,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;IACrD,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,KAAa;QAC9B,MAAM,SAAS,GAAG,KAAK,IAAI,GAAG,GAAG,EAAE,CAAA;QACnC,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;IACpE,CAAC;;AAvBH,8BAgDC;AA/CiB;;;;WAAe,OAAO;EAAV,CAAU;AACtB;;;;WAAe,CAAC,OAAO;EAAX,CAAW;AACvB;;;;WAAY,SAAS;EAAZ,CAAY;AAsBtB;;;;WAAmB,CAAC,KAAa,EAAU,EAAE;QAC1D,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,YAAY,CAAA;IAC/D,CAAC;EAF8B,CAE9B"}
|