@d8x/perpetuals-sdk 0.7.7 → 0.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/abi/IPyth.json +471 -0
- package/dist/cjs/abi/OracleFactory.json +457 -0
- package/dist/cjs/accountTrade.js +134 -243
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.js +144 -290
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/config/priceFeedConfig.json +1 -1
- package/dist/cjs/contracts/IPyth.d.ts +234 -0
- package/dist/cjs/contracts/IPyth.js +3 -0
- package/dist/cjs/contracts/IPyth.js.map +1 -0
- package/dist/cjs/contracts/OracleFactory.d.ts +288 -0
- package/dist/cjs/contracts/OracleFactory.js +3 -0
- package/dist/cjs/contracts/OracleFactory.js.map +1 -0
- package/dist/cjs/contracts/factories/ERC20__factory.js +9 -12
- package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +9 -12
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPyth__factory.d.ts +367 -0
- package/dist/cjs/contracts/factories/IPyth__factory.js +489 -0
- package/dist/cjs/contracts/factories/IPyth__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +9 -12
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +9 -12
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +9 -12
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +361 -0
- package/dist/cjs/contracts/factories/OracleFactory__factory.js +475 -0
- package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/ShareToken__factory.js +9 -12
- package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/index.d.ts +2 -0
- package/dist/cjs/contracts/factories/index.js +5 -1
- package/dist/cjs/contracts/factories/index.js.map +1 -1
- package/dist/cjs/contracts/index.d.ts +4 -0
- package/dist/cjs/contracts/index.js +6 -2
- package/dist/cjs/contracts/index.js.map +1 -1
- package/dist/cjs/d8XMath.js +65 -66
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +14 -12
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/liquidatorTool.js +80 -137
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/liquidityProviderTool.js +33 -65
- package/dist/cjs/liquidityProviderTool.js.map +1 -1
- package/dist/cjs/marketData.js +635 -978
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.js +10 -22
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/orderReferrerTool.js +200 -323
- package/dist/cjs/orderReferrerTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.js +404 -550
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/perpetualEventHandler.js +129 -190
- package/dist/cjs/perpetualEventHandler.js.map +1 -1
- package/dist/cjs/priceFeeds.js +223 -335
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/traderDigests.js +20 -23
- package/dist/cjs/traderDigests.js.map +1 -1
- package/dist/cjs/traderInterface.js +54 -87
- package/dist/cjs/traderInterface.js.map +1 -1
- package/dist/cjs/triangulator.js +34 -38
- package/dist/cjs/triangulator.js.map +1 -1
- package/dist/cjs/utils.js +18 -32
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/writeAccessHandler.js +78 -112
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/abi/IPyth.json +471 -0
- package/dist/esm/abi/OracleFactory.json +457 -0
- package/dist/esm/accountTrade.js +126 -237
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.js +136 -284
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/config/priceFeedConfig.json +1 -1
- package/dist/esm/contracts/IPyth.d.ts +234 -0
- package/dist/esm/contracts/IPyth.js +2 -0
- package/dist/esm/contracts/IPyth.js.map +1 -0
- package/dist/esm/contracts/OracleFactory.d.ts +288 -0
- package/dist/esm/contracts/OracleFactory.js +2 -0
- package/dist/esm/contracts/OracleFactory.js.map +1 -0
- package/dist/esm/contracts/factories/ERC20__factory.js +8 -12
- package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +8 -12
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPyth__factory.d.ts +367 -0
- package/dist/esm/contracts/factories/IPyth__factory.js +485 -0
- package/dist/esm/contracts/factories/IPyth__factory.js.map +1 -0
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +8 -12
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js +8 -12
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js +8 -12
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +361 -0
- package/dist/esm/contracts/factories/OracleFactory__factory.js +471 -0
- package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -0
- package/dist/esm/contracts/factories/ShareToken__factory.js +8 -12
- package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/esm/contracts/factories/index.d.ts +2 -0
- package/dist/esm/contracts/factories/index.js +2 -0
- package/dist/esm/contracts/factories/index.js.map +1 -1
- package/dist/esm/contracts/index.d.ts +4 -0
- package/dist/esm/contracts/index.js +2 -0
- package/dist/esm/contracts/index.js.map +1 -1
- package/dist/esm/d8XMath.js +63 -64
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/liquidatorTool.js +77 -136
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/liquidityProviderTool.js +29 -63
- package/dist/esm/liquidityProviderTool.js.map +1 -1
- package/dist/esm/marketData.js +626 -971
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.js +36 -48
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/orderReferrerTool.js +194 -319
- package/dist/esm/orderReferrerTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.js +394 -542
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/perpetualEventHandler.js +126 -188
- package/dist/esm/perpetualEventHandler.js.map +1 -1
- package/dist/esm/priceFeeds.js +218 -332
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/traderDigests.js +15 -19
- package/dist/esm/traderDigests.js.map +1 -1
- package/dist/esm/traderInterface.js +48 -83
- package/dist/esm/traderInterface.js.map +1 -1
- package/dist/esm/triangulator.js +34 -39
- package/dist/esm/triangulator.js.map +1 -1
- package/dist/esm/utils.js +16 -30
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/writeAccessHandler.js +69 -105
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/package.json +1 -1
- package/src/abi/IPyth.json +471 -0
- package/src/abi/OracleFactory.json +457 -0
- package/src/accountTrade.ts +1 -6
- package/src/config/priceFeedConfig.json +1 -1
- package/src/contracts/IPyth.ts +571 -0
- package/src/contracts/OracleFactory.ts +708 -0
- package/src/contracts/factories/IPyth__factory.ts +489 -0
- package/src/contracts/factories/{zkevmTestnet/ShareToken__factory.ts → OracleFactory__factory.ts} +222 -206
- package/src/contracts/factories/index.ts +2 -0
- package/src/contracts/index.ts +4 -0
- package/src/index.ts +2 -0
- package/src/orderReferrerTool.ts +1 -3
- package/src/priceFeeds.ts +1 -1
- package/src/version.ts +1 -1
- package/src/contracts/factories/zkevmTestnet/IPerpetualManager__factory.ts +0 -5804
- package/src/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.ts +0 -263
- package/src/contracts/factories/zkevmTestnet/LimitOrderBook__factory.ts +0 -1131
- package/src/contracts/factories/zkevmTestnet/index.ts +0 -7
- package/src/contracts/zkevmTestnet/IPerpetualManager.ts +0 -7109
- package/src/contracts/zkevmTestnet/LimitOrderBook.ts +0 -1341
- package/src/contracts/zkevmTestnet/LimitOrderBookFactory.ts +0 -472
- package/src/contracts/zkevmTestnet/ShareToken.ts +0 -695
- package/src/contracts/zkevmTestnet/index.ts +0 -7
package/dist/esm/d8XMath.js
CHANGED
|
@@ -11,7 +11,7 @@ import { DECIMALS, ONE_64x64 } from "./nodeSDKTypes";
|
|
|
11
11
|
* @returns {number} x/2^64 in number-format (float)
|
|
12
12
|
*/
|
|
13
13
|
export function ABDK29ToFloat(x) {
|
|
14
|
-
return Number(x) /
|
|
14
|
+
return Number(x) / 2 ** 29;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Convert ABK64x64 bigint-format to float.
|
|
@@ -21,18 +21,18 @@ export function ABDK29ToFloat(x) {
|
|
|
21
21
|
*/
|
|
22
22
|
export function ABK64x64ToFloat(x) {
|
|
23
23
|
if (typeof x == "number") {
|
|
24
|
-
return x /
|
|
24
|
+
return x / 2 ** 29;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
let s = x.lt(0) ? -1 : 1;
|
|
27
27
|
x = x.mul(s);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
let xInt = x.div(ONE_64x64);
|
|
29
|
+
let dec18 = BigNumber.from(10).pow(BigNumber.from(18));
|
|
30
|
+
let xDec = x.sub(xInt.mul(ONE_64x64));
|
|
31
31
|
xDec = xDec.mul(dec18).div(ONE_64x64);
|
|
32
|
-
|
|
32
|
+
let k = 18 - xDec.toString().length;
|
|
33
33
|
// console.assert(k >= 0);
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
let sPad = "0".repeat(k);
|
|
35
|
+
let NumberStr = xInt.toString() + "." + sPad + xDec.toString();
|
|
36
36
|
return parseFloat(NumberStr) * s;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
@@ -42,14 +42,14 @@ export function ABK64x64ToFloat(x) {
|
|
|
42
42
|
*/
|
|
43
43
|
export function decNToFloat(x, numDec) {
|
|
44
44
|
//x: BigNumber in DecN format to float
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
const DECIMALS = BigNumber.from(10).pow(BigNumber.from(numDec));
|
|
46
|
+
let s = x.lt(0) ? -1 : 1;
|
|
47
47
|
x = x.mul(s);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
let xInt = x.div(DECIMALS);
|
|
49
|
+
let xDec = x.sub(xInt.mul(DECIMALS));
|
|
50
|
+
let k = numDec - xDec.toString().length;
|
|
51
|
+
let sPad = "0".repeat(k);
|
|
52
|
+
let NumberStr = xInt.toString() + "." + sPad + xDec.toString();
|
|
53
53
|
return parseFloat(NumberStr) * s;
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
@@ -59,13 +59,13 @@ export function decNToFloat(x, numDec) {
|
|
|
59
59
|
*/
|
|
60
60
|
export function dec18ToFloat(x) {
|
|
61
61
|
//x: BigNumber in Dec18 format to float
|
|
62
|
-
|
|
62
|
+
let s = x.lt(0) ? -1 : 1;
|
|
63
63
|
x = x.mul(s);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
let xInt = x.div(DECIMALS);
|
|
65
|
+
let xDec = x.sub(xInt.mul(DECIMALS));
|
|
66
|
+
let k = 18 - xDec.toString().length;
|
|
67
|
+
let sPad = "0".repeat(k);
|
|
68
|
+
let NumberStr = xInt.toString() + "." + sPad + xDec.toString();
|
|
69
69
|
return parseFloat(NumberStr) * s;
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
@@ -79,15 +79,15 @@ export function floatToABK64x64(x) {
|
|
|
79
79
|
if (x === 0) {
|
|
80
80
|
return BigNumber.from(0);
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
let sg = Math.sign(x);
|
|
83
83
|
x = Math.abs(x);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
84
|
+
let strX = Number(x).toFixed(18);
|
|
85
|
+
const arrX = strX.split(".");
|
|
86
|
+
let xInt = BigNumber.from(arrX[0]);
|
|
87
|
+
let xDec = BigNumber.from(arrX[1]);
|
|
88
|
+
let xIntBig = xInt.mul(ONE_64x64);
|
|
89
|
+
let dec18 = BigNumber.from(10).pow(BigNumber.from(18));
|
|
90
|
+
let xDecBig = xDec.mul(ONE_64x64).div(dec18);
|
|
91
91
|
return xIntBig.add(xDecBig).mul(sg);
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
@@ -100,13 +100,13 @@ export function floatToDec18(x) {
|
|
|
100
100
|
if (x === 0) {
|
|
101
101
|
return BigNumber.from(0);
|
|
102
102
|
}
|
|
103
|
-
|
|
103
|
+
let sg = Math.sign(x);
|
|
104
104
|
x = Math.abs(x);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
let strX = x.toFixed(18);
|
|
106
|
+
const arrX = strX.split(".");
|
|
107
|
+
let xInt = BigNumber.from(arrX[0]);
|
|
108
|
+
let xDec = BigNumber.from(arrX[1]);
|
|
109
|
+
let xIntBig = xInt.mul(DECIMALS);
|
|
110
110
|
return xIntBig.add(xDec).mul(sg);
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
@@ -120,13 +120,13 @@ export function floatToDecN(x, decimals) {
|
|
|
120
120
|
if (x === 0) {
|
|
121
121
|
return BigNumber.from(0);
|
|
122
122
|
}
|
|
123
|
-
|
|
123
|
+
let sg = Math.sign(x);
|
|
124
124
|
x = Math.abs(x);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
125
|
+
let strX = x.toFixed(decimals);
|
|
126
|
+
const arrX = strX.split(".");
|
|
127
|
+
let xInt = BigNumber.from(arrX[0]);
|
|
128
|
+
let xDec = BigNumber.from(arrX[1]);
|
|
129
|
+
let xIntBig = xInt.mul(BigNumber.from(10).pow(BigNumber.from(decimals)));
|
|
130
130
|
return xIntBig.add(xDec).mul(sg);
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
@@ -136,13 +136,13 @@ export function floatToDecN(x, decimals) {
|
|
|
136
136
|
* @returns number of decimals
|
|
137
137
|
*/
|
|
138
138
|
export function countDecimalsOf(x, precision) {
|
|
139
|
-
|
|
139
|
+
let decimalPart = x - Math.floor(x);
|
|
140
140
|
if (decimalPart == 0) {
|
|
141
141
|
return 0;
|
|
142
142
|
}
|
|
143
|
-
|
|
143
|
+
let decimalPartStr = decimalPart.toFixed(precision);
|
|
144
144
|
// remove trailing zeros
|
|
145
|
-
|
|
145
|
+
let c = decimalPartStr.charAt(decimalPartStr.length - 1);
|
|
146
146
|
while (c == "0") {
|
|
147
147
|
decimalPartStr = decimalPartStr.substring(0, decimalPartStr.length - 1);
|
|
148
148
|
c = decimalPartStr.charAt(decimalPartStr.length - 1);
|
|
@@ -163,13 +163,12 @@ export function countDecimalsOf(x, precision) {
|
|
|
163
163
|
* @param precision optional lot size precision (e.g. if 0.01999 should be 0.02 then precision could be 5)
|
|
164
164
|
* @returns formated number string
|
|
165
165
|
*/
|
|
166
|
-
export function roundToLotString(x, lot, precision) {
|
|
167
|
-
if (precision === void 0) { precision = 7; }
|
|
166
|
+
export function roundToLotString(x, lot, precision = 7) {
|
|
168
167
|
// round lot to precision
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
let lotRounded = Math.round(lot / 10 ** -precision) * 10 ** -precision;
|
|
169
|
+
let v = Math.round(x / lotRounded) * lotRounded;
|
|
171
170
|
// number of digits of rounded lot
|
|
172
|
-
|
|
171
|
+
let numDig = countDecimalsOf(lotRounded, precision);
|
|
173
172
|
return v.toFixed(numDig);
|
|
174
173
|
}
|
|
175
174
|
/**
|
|
@@ -220,8 +219,8 @@ export function calculateLiquidationPriceCollateralQuanto(LockedInValueQC, posit
|
|
|
220
219
|
// m_r = (Sm * Pi - L + cash * S3) / (Sm * |Pi|)
|
|
221
220
|
// m_r = [Sm * Pi - L + cash * S3(0) * (1 + sign(Pi) (Sm / Sm(0) - 1)] / (Sm * |Pi|)
|
|
222
221
|
// -> Sm * (m_r |Pi| - Pi - cash * S3(0) * sign(Pi) / Sm(0)) = - L + cash * S3(0) * (1 - sign(Pi))
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
let numerator = -LockedInValueQC + cash_cc * S3 * (1 - Math.sign(position));
|
|
223
|
+
let denominator = maintenance_margin_rate * Math.abs(position) - position - (cash_cc * S3 * Math.sign(position)) / Sm;
|
|
225
224
|
return numerator / denominator;
|
|
226
225
|
}
|
|
227
226
|
/**
|
|
@@ -236,8 +235,8 @@ export function calculateLiquidationPriceCollateralQuanto(LockedInValueQC, posit
|
|
|
236
235
|
export function calculateLiquidationPriceCollateralQuote(LockedInValueQC, position, cash_cc, maintenance_margin_rate) {
|
|
237
236
|
// m_r = (Sm * Pi - L + cash ) / (Sm * |Pi|)
|
|
238
237
|
// -> Sm * (m_r |Pi| - Pi) = - L + cash
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
let numerator = -LockedInValueQC + cash_cc;
|
|
239
|
+
let denominator = maintenance_margin_rate * Math.abs(position) - position;
|
|
241
240
|
return numerator / denominator;
|
|
242
241
|
}
|
|
243
242
|
/**
|
|
@@ -257,15 +256,15 @@ export function getMarginRequiredForLeveragedTrade(targetLeverage, currentPositi
|
|
|
257
256
|
// we solve for margin in:
|
|
258
257
|
// |new position| * Sm / leverage + fee rate * |trade amount| * S2 = margin * S3 + current position * Sm - L + trade amount * (Sm - trade price)
|
|
259
258
|
// --> M S3 = |P'|Sm/L + FeeQC - PnL + (P'-P)(Price - Sm) = pos value / leverage + fees + price impact - pnl
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
259
|
+
let isClosing = currentPosition != 0 && currentPosition * tradeAmount < 0 && currentPosition * (currentPosition + tradeAmount) >= 0;
|
|
260
|
+
let feesCC = (feeRate * Math.abs(tradeAmount) * indexPriceS2) / indexPriceS3;
|
|
261
|
+
let collRequired = feesCC;
|
|
263
262
|
if (!isClosing) {
|
|
264
263
|
if (targetLeverage == undefined || targetLeverage <= 0) {
|
|
265
264
|
throw Error("opening trades must have positive leverage");
|
|
266
265
|
}
|
|
267
266
|
// unrealized pnl (could be + or -) - price impact premium (+)
|
|
268
|
-
|
|
267
|
+
let pnlQC = currentPosition * markPrice - currentLockedInValue - tradeAmount * (tradePrice - markPrice);
|
|
269
268
|
collRequired +=
|
|
270
269
|
Math.max(0, (Math.abs(currentPosition + tradeAmount) * markPrice) / targetLeverage - pnlQC) / indexPriceS3;
|
|
271
270
|
}
|
|
@@ -275,8 +274,8 @@ export function getMaxSignedPositionSize(marginCollateral, currentPosition, curr
|
|
|
275
274
|
// we solve for new position in:
|
|
276
275
|
// |new position| * Sm / leverage + fee rate * |trade amount| * S2 = margin * S3 + current position * Sm - L + trade amount * (Sm - entry price)
|
|
277
276
|
// |trade amount| = (new position - current position) * direction
|
|
278
|
-
|
|
279
|
-
|
|
277
|
+
let availableCash = marginCollateral * indexPriceS3 + currentPosition * markPrice - currentLockedInValue;
|
|
278
|
+
let effectiveMarginRate = markPrice * initialMarginRate + feeRate * indexPriceS2 + direction * (limitPrice - markPrice);
|
|
280
279
|
return availableCash / effectiveMarginRate;
|
|
281
280
|
}
|
|
282
281
|
/**
|
|
@@ -291,8 +290,8 @@ export function getMaxSignedPositionSize(marginCollateral, currentPosition, curr
|
|
|
291
290
|
* @returns Leverage of the resulting position
|
|
292
291
|
*/
|
|
293
292
|
export function getNewPositionLeverage(tradeAmount, marginCollateral, currentPosition, currentLockedInValue, price, indexPriceS3, markPrice) {
|
|
294
|
-
|
|
295
|
-
|
|
293
|
+
let newPosition = tradeAmount + currentPosition;
|
|
294
|
+
let pnlQC = currentPosition * markPrice - currentLockedInValue + tradeAmount * (markPrice - price);
|
|
296
295
|
return (Math.abs(newPosition) * markPrice) / (marginCollateral * indexPriceS3 + pnlQC);
|
|
297
296
|
}
|
|
298
297
|
/**
|
|
@@ -310,11 +309,11 @@ export function getNewPositionLeverage(tradeAmount, marginCollateral, currentPos
|
|
|
310
309
|
* @returns {number} Amount to be deposited to have the given leverage when trading into position pos before fees
|
|
311
310
|
*/
|
|
312
311
|
export function getDepositAmountForLvgTrade(pos0, b0, tradeAmnt, targetLvg, price, S3, S2Mark) {
|
|
313
|
-
|
|
312
|
+
let pnl = (tradeAmnt * (S2Mark - price)) / S3;
|
|
314
313
|
if (targetLvg == 0) {
|
|
315
314
|
targetLvg = (Math.abs(pos0) * S2Mark) / S3 / b0;
|
|
316
315
|
}
|
|
317
|
-
|
|
316
|
+
let b = (Math.abs(pos0 + tradeAmnt) * S2Mark) / S3 / targetLvg;
|
|
318
317
|
return -(b0 + pnl - b);
|
|
319
318
|
}
|
|
320
319
|
//# sourceMappingURL=d8XMath.js.map
|
package/dist/esm/d8XMath.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"d8XMath.js","sourceRoot":"","sources":["../../src/d8XMath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErD;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,CAAqB;IACjD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"d8XMath.js","sourceRoot":"","sources":["../../src/d8XMath.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -11,5 +11,6 @@ import WriteAccessHandler from "./writeAccessHandler";
|
|
|
11
11
|
import LiquidatorTool from "./liquidatorTool";
|
|
12
12
|
import TraderInterface from "./traderInterface";
|
|
13
13
|
import PerpetualEventHandler from "./perpetualEventHandler";
|
|
14
|
-
|
|
14
|
+
import PriceFeeds from "./priceFeeds";
|
|
15
|
+
export { AccountTrade, BrokerTool, LiquidityProviderTool, MarketData, OrderReferrerTool, PerpetualDataHandler, WriteAccessHandler, LiquidatorTool, TraderInterface, PerpetualEventHandler, PriceFeeds, };
|
|
15
16
|
export * from "./version";
|
package/dist/esm/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import WriteAccessHandler from "./writeAccessHandler";
|
|
|
11
11
|
import LiquidatorTool from "./liquidatorTool";
|
|
12
12
|
import TraderInterface from "./traderInterface";
|
|
13
13
|
import PerpetualEventHandler from "./perpetualEventHandler";
|
|
14
|
-
|
|
14
|
+
import PriceFeeds from "./priceFeeds";
|
|
15
|
+
export { AccountTrade, BrokerTool, LiquidityProviderTool, MarketData, OrderReferrerTool, PerpetualDataHandler, WriteAccessHandler, LiquidatorTool, TraderInterface, PerpetualEventHandler, PriceFeeds, };
|
|
15
16
|
export * from "./version";
|
|
16
17
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAE1B,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAE1B,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,UAAU,GACX,CAAC;AAEF,cAAc,WAAW,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __assign, __awaiter, __extends, __generator } from "tslib";
|
|
2
1
|
import { ABK64x64ToFloat, floatToABK64x64 } from "./d8XMath";
|
|
3
2
|
import WriteAccessHandler from "./writeAccessHandler";
|
|
4
3
|
/**
|
|
@@ -6,8 +5,7 @@ import WriteAccessHandler from "./writeAccessHandler";
|
|
|
6
5
|
* and executes smart-contract interactions that require gas-payments.
|
|
7
6
|
* @extends WriteAccessHandler
|
|
8
7
|
*/
|
|
9
|
-
|
|
10
|
-
__extends(LiquidatorTool, _super);
|
|
8
|
+
export default class LiquidatorTool extends WriteAccessHandler {
|
|
11
9
|
/**
|
|
12
10
|
* Constructs a LiquidatorTool instance for a given configuration and private key.
|
|
13
11
|
* @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.
|
|
@@ -28,8 +26,8 @@ var LiquidatorTool = /** @class */ (function (_super) {
|
|
|
28
26
|
*
|
|
29
27
|
* @param {string | Signer} signer Private key or ethers Signer of the account
|
|
30
28
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
constructor(config, signer) {
|
|
30
|
+
super(config, signer);
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* Liquidate a trader.
|
|
@@ -56,37 +54,27 @@ var LiquidatorTool = /** @class */ (function (_super) {
|
|
|
56
54
|
*
|
|
57
55
|
* @returns Transaction object.
|
|
58
56
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
case 2:
|
|
81
|
-
if (!overrides || overrides.value == undefined) {
|
|
82
|
-
overrides = __assign({ value: priceFeedData.timestamps.length * this.PRICE_UPDATE_FEE_GWEI }, overrides);
|
|
83
|
-
}
|
|
84
|
-
return [4 /*yield*/, this._liquidateByAMM(perpID, liquidatorAddr, traderAddr, priceFeedData, overrides)];
|
|
85
|
-
case 3: return [2 /*return*/, _a.sent()];
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
};
|
|
57
|
+
async liquidateTrader(symbol, traderAddr, liquidatorAddr = "", priceFeedData, overrides) {
|
|
58
|
+
// this operation spends gas, so signer is required
|
|
59
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
60
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
61
|
+
}
|
|
62
|
+
// liquidator is signer unless specified otherwise
|
|
63
|
+
if (liquidatorAddr == "") {
|
|
64
|
+
liquidatorAddr = this.traderAddr;
|
|
65
|
+
}
|
|
66
|
+
let perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
67
|
+
if (priceFeedData == undefined) {
|
|
68
|
+
priceFeedData = await this.fetchLatestFeedPriceInfo(symbol);
|
|
69
|
+
}
|
|
70
|
+
if (!overrides || overrides.value == undefined) {
|
|
71
|
+
overrides = {
|
|
72
|
+
value: priceFeedData.timestamps.length * this.PRICE_UPDATE_FEE_GWEI,
|
|
73
|
+
...overrides,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return await this._liquidateByAMM(perpID, liquidatorAddr, traderAddr, priceFeedData, overrides);
|
|
77
|
+
}
|
|
90
78
|
/**
|
|
91
79
|
* Check if the collateral of a trader is above the maintenance margin ("maintenance margin safe").
|
|
92
80
|
* If not, the position can be liquidated.
|
|
@@ -112,45 +100,35 @@ var LiquidatorTool = /** @class */ (function (_super) {
|
|
|
112
100
|
* @returns {boolean} True if the trader is maintenance margin safe in the perpetual.
|
|
113
101
|
* False means that the trader's position can be liquidated.
|
|
114
102
|
*/
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
pos = ABK64x64ToFloat(traderState[idx_marginAccountPositionBC]);
|
|
145
|
-
marginbalance = ABK64x64ToFloat(traderState[idx_marginBalance]);
|
|
146
|
-
coll2quote = ABK64x64ToFloat(traderState[idx_collateralToQuoteConversion]);
|
|
147
|
-
base2collateral = indexPrices[0] / coll2quote;
|
|
148
|
-
threshold = Math.abs(pos * base2collateral * maintMgnRate);
|
|
149
|
-
return [2 /*return*/, marginbalance >= threshold];
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
};
|
|
103
|
+
async isMaintenanceMarginSafe(symbol, traderAddr, indexPrices, overrides) {
|
|
104
|
+
if (this.proxyContract == null) {
|
|
105
|
+
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
106
|
+
}
|
|
107
|
+
const idx_notional = 4;
|
|
108
|
+
let perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
109
|
+
if (indexPrices == undefined) {
|
|
110
|
+
// fetch from API
|
|
111
|
+
let obj = await this.priceFeedGetter.fetchPricesForPerpetual(symbol);
|
|
112
|
+
indexPrices = [obj.idxPrices[0], obj.idxPrices[1]];
|
|
113
|
+
}
|
|
114
|
+
let traderState = await this.proxyContract.getTraderState(perpID, traderAddr, indexPrices.map((x) => floatToABK64x64(x)), overrides || {});
|
|
115
|
+
if (traderState[idx_notional].eq(0)) {
|
|
116
|
+
// trader does not have open position
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
// calculate margin from traderstate
|
|
120
|
+
const idx_maintenanceMgnRate = 10;
|
|
121
|
+
const idx_marginAccountPositionBC = 4;
|
|
122
|
+
const idx_collateralToQuoteConversion = 9;
|
|
123
|
+
const idx_marginBalance = 0;
|
|
124
|
+
const maintMgnRate = ABK64x64ToFloat(traderState[idx_maintenanceMgnRate]);
|
|
125
|
+
const pos = ABK64x64ToFloat(traderState[idx_marginAccountPositionBC]);
|
|
126
|
+
const marginbalance = ABK64x64ToFloat(traderState[idx_marginBalance]);
|
|
127
|
+
const coll2quote = ABK64x64ToFloat(traderState[idx_collateralToQuoteConversion]);
|
|
128
|
+
const base2collateral = indexPrices[0] / coll2quote;
|
|
129
|
+
const threshold = Math.abs(pos * base2collateral * maintMgnRate);
|
|
130
|
+
return marginbalance >= threshold;
|
|
131
|
+
}
|
|
154
132
|
/**
|
|
155
133
|
*
|
|
156
134
|
* @param perpetualId Perpetual id.
|
|
@@ -160,16 +138,9 @@ var LiquidatorTool = /** @class */ (function (_super) {
|
|
|
160
138
|
* @param options E.g., Gas limit, fee.
|
|
161
139
|
* @ignore
|
|
162
140
|
*/
|
|
163
|
-
|
|
164
|
-
return
|
|
165
|
-
|
|
166
|
-
switch (_a.label) {
|
|
167
|
-
case 0: return [4 /*yield*/, this.proxyContract.liquidateByAMM(perpetualId, liquidatorAddr, traderAddr, priceFeedData.priceFeedVaas, priceFeedData.timestamps, overrides)];
|
|
168
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
};
|
|
141
|
+
async _liquidateByAMM(perpetualId, liquidatorAddr, traderAddr, priceFeedData, overrides) {
|
|
142
|
+
return await this.proxyContract.liquidateByAMM(perpetualId, liquidatorAddr, traderAddr, priceFeedData.priceFeedVaas, priceFeedData.timestamps, overrides);
|
|
143
|
+
}
|
|
173
144
|
/**
|
|
174
145
|
* Total number of active accounts for this symbol, i.e. accounts with positions that are currently open.
|
|
175
146
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -190,24 +161,14 @@ var LiquidatorTool = /** @class */ (function (_super) {
|
|
|
190
161
|
*
|
|
191
162
|
* @returns {number} Number of active accounts.
|
|
192
163
|
*/
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
203
|
-
return [4 /*yield*/, this.proxyContract.countActivePerpAccounts(perpID, overrides || {})];
|
|
204
|
-
case 1:
|
|
205
|
-
numAccounts = _a.sent();
|
|
206
|
-
return [2 /*return*/, Number(numAccounts)];
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
};
|
|
164
|
+
async countActivePerpAccounts(symbol, overrides) {
|
|
165
|
+
if (this.proxyContract == null) {
|
|
166
|
+
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
167
|
+
}
|
|
168
|
+
let perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
169
|
+
let numAccounts = await this.proxyContract.countActivePerpAccounts(perpID, overrides || {});
|
|
170
|
+
return Number(numAccounts);
|
|
171
|
+
}
|
|
211
172
|
/**
|
|
212
173
|
* Get addresses of active accounts by chunks.
|
|
213
174
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -230,22 +191,13 @@ var LiquidatorTool = /** @class */ (function (_super) {
|
|
|
230
191
|
*
|
|
231
192
|
* @returns {string[]} Array of addresses at locations 'from', 'from'+1 ,..., 'to'-1.
|
|
232
193
|
*/
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
241
|
-
}
|
|
242
|
-
perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
243
|
-
return [4 /*yield*/, this.proxyContract.getActivePerpAccountsByChunks(perpID, from, to, overrides || {})];
|
|
244
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
};
|
|
194
|
+
async getActiveAccountsByChunks(symbol, from, to, overrides) {
|
|
195
|
+
if (this.proxyContract == null) {
|
|
196
|
+
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
197
|
+
}
|
|
198
|
+
let perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
199
|
+
return await this.proxyContract.getActivePerpAccountsByChunks(perpID, from, to, overrides || {});
|
|
200
|
+
}
|
|
249
201
|
/**
|
|
250
202
|
* Addresses for all the active accounts in this perpetual symbol.
|
|
251
203
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -266,21 +218,10 @@ var LiquidatorTool = /** @class */ (function (_super) {
|
|
|
266
218
|
*
|
|
267
219
|
* @returns {string[]} Array of addresses.
|
|
268
220
|
*/
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
case 1:
|
|
276
|
-
totalAccounts = _a.sent();
|
|
277
|
-
return [4 /*yield*/, this.getActiveAccountsByChunks(symbol, 0, totalAccounts, overrides)];
|
|
278
|
-
case 2: return [2 /*return*/, _a.sent()];
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
};
|
|
283
|
-
return LiquidatorTool;
|
|
284
|
-
}(WriteAccessHandler));
|
|
285
|
-
export default LiquidatorTool;
|
|
221
|
+
async getAllActiveAccounts(symbol, overrides) {
|
|
222
|
+
// checks are done inside the intermediate functions
|
|
223
|
+
let totalAccounts = await this.countActivePerpAccounts(symbol);
|
|
224
|
+
return await this.getActiveAccountsByChunks(symbol, 0, totalAccounts, overrides);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
286
227
|
//# sourceMappingURL=liquidatorTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liquidatorTool.js","sourceRoot":"","sources":["../../src/liquidatorTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"liquidatorTool.js","sourceRoot":"","sources":["../../src/liquidatorTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,kBAAkB;IAC5D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAmB,MAAqB,EAAE,MAAuB;QAC/D,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,KAAK,CAAC,eAAe,CAC1B,MAAc,EACd,UAAkB,EAClB,iBAAyB,EAAE,EAC3B,aAAmC,EACnC,SAA4B;QAE5B,mDAAmD;QACnD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YACrD,MAAM,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACpF;QACD,kDAAkD;QAClD,IAAI,cAAc,IAAI,EAAE,EAAE;YACxB,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;SAClC;QACD,IAAI,MAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrF,IAAI,aAAa,IAAI,SAAS,EAAE;YAC9B,aAAa,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;SAC7D;QACD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE;YAC9C,SAAS,GAAG;gBACV,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB;gBACnE,GAAG,SAAS;aACO,CAAC;SACvB;QACD,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAClG,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,KAAK,CAAC,uBAAuB,CAClC,MAAc,EACd,UAAkB,EAClB,WAA8B,EAC9B,SAAyB;QAEzB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,MAAM,KAAK,CAAC,2DAA2D,CAAC,CAAC;SAC1E;QACD,MAAM,YAAY,GAAG,CAAC,CAAC;QACvB,IAAI,MAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrF,IAAI,WAAW,IAAI,SAAS,EAAE;YAC5B,iBAAiB;YACjB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YACrE,WAAW,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACpD;QACD,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CACvD,MAAM,EACN,UAAU,EACV,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAA2B,EACpE,SAAS,IAAI,EAAE,CAChB,CAAC;QACF,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACnC,qCAAqC;YACrC,OAAO,IAAI,CAAC;SACb;QACD,oCAAoC;QACpC,MAAM,sBAAsB,GAAG,EAAE,CAAC;QAClC,MAAM,2BAA2B,GAAG,CAAC,CAAC;QACtC,MAAM,+BAA+B,GAAG,CAAC,CAAC;QAC1C,MAAM,iBAAiB,GAAG,CAAC,CAAC;QAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACjF,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,eAAe,GAAG,YAAY,CAAC,CAAC;QACjE,OAAO,aAAa,IAAI,SAAS,CAAC;IACpC,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,eAAe,CAC1B,WAAmB,EACnB,cAAsB,EACtB,UAAkB,EAClB,aAAkC,EAClC,SAA4B;QAE5B,OAAO,MAAM,IAAI,CAAC,aAAc,CAAC,cAAc,CAC7C,WAAW,EACX,cAAc,EACd,UAAU,EACV,aAAa,CAAC,aAAa,EAC3B,aAAa,CAAC,UAAU,EACxB,SAAS,CACV,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACI,KAAK,CAAC,uBAAuB,CAAC,MAAc,EAAE,SAAyB;QAC5E,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,MAAM,KAAK,CAAC,2DAA2D,CAAC,CAAC;SAC1E;QACD,IAAI,MAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrF,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;QAC5F,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,KAAK,CAAC,yBAAyB,CACpC,MAAc,EACd,IAAY,EACZ,EAAU,EACV,SAAyB;QAEzB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,MAAM,KAAK,CAAC,2DAA2D,CAAC,CAAC;SAC1E;QACD,IAAI,MAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrF,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACI,KAAK,CAAC,oBAAoB,CAAC,MAAc,EAAE,SAAyB;QACzE,oDAAoD;QACpD,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACnF,CAAC;CACF"}
|