@bitgo-beta/utxo-ord 1.0.1-beta.162 → 1.0.1-beta.1621

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 (63) hide show
  1. package/dist/cjs/src/OrdOutput.d.ts.map +1 -0
  2. package/dist/cjs/src/OrdOutput.js +197 -0
  3. package/dist/{src → cjs/src}/OutputLayout.d.ts +3 -3
  4. package/dist/cjs/src/OutputLayout.d.ts.map +1 -0
  5. package/dist/cjs/src/OutputLayout.js +246 -0
  6. package/dist/{src → cjs/src}/SatPoint.d.ts +1 -1
  7. package/dist/cjs/src/SatPoint.d.ts.map +1 -0
  8. package/dist/cjs/src/SatPoint.js +48 -0
  9. package/dist/cjs/src/SatRange.d.ts.map +1 -0
  10. package/dist/cjs/src/SatRange.js +58 -0
  11. package/dist/cjs/src/combinations.d.ts.map +1 -0
  12. package/dist/cjs/src/combinations.js +13 -0
  13. package/dist/cjs/src/index.d.ts.map +1 -0
  14. package/dist/cjs/src/index.js +49 -0
  15. package/dist/{src → cjs/src}/inscriptions.d.ts +0 -1
  16. package/dist/cjs/src/inscriptions.d.ts.map +1 -0
  17. package/dist/cjs/src/inscriptions.js +202 -0
  18. package/dist/{src → cjs/src}/psbt.d.ts +6 -7
  19. package/dist/cjs/src/psbt.d.ts.map +1 -0
  20. package/dist/cjs/src/psbt.js +154 -0
  21. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  22. package/dist/esm/OrdOutput.d.ts +65 -0
  23. package/dist/esm/OrdOutput.js +192 -0
  24. package/dist/esm/OutputLayout.d.ts +47 -0
  25. package/dist/esm/OutputLayout.d.ts.map +1 -0
  26. package/dist/esm/OutputLayout.js +240 -0
  27. package/dist/esm/SatPoint.d.ts +13 -0
  28. package/dist/esm/SatPoint.d.ts.map +1 -0
  29. package/dist/esm/SatPoint.js +43 -0
  30. package/dist/esm/SatRange.d.ts +26 -0
  31. package/dist/esm/SatRange.js +53 -0
  32. package/dist/esm/combinations.d.ts +2 -0
  33. package/dist/esm/combinations.js +10 -0
  34. package/dist/esm/index.d.ts +10 -0
  35. package/dist/esm/index.js +10 -0
  36. package/dist/esm/inscriptions.d.ts +31 -0
  37. package/dist/esm/inscriptions.d.ts.map +1 -0
  38. package/dist/esm/inscriptions.js +164 -0
  39. package/dist/esm/psbt.d.ts +67 -0
  40. package/dist/esm/psbt.d.ts.map +1 -0
  41. package/dist/esm/psbt.js +147 -0
  42. package/package.json +26 -9
  43. package/dist/src/OrdOutput.js +0 -197
  44. package/dist/src/OutputLayout.d.ts.map +0 -1
  45. package/dist/src/OutputLayout.js +0 -248
  46. package/dist/src/SatPoint.d.ts.map +0 -1
  47. package/dist/src/SatPoint.js +0 -49
  48. package/dist/src/SatRange.js +0 -58
  49. package/dist/src/combinations.js +0 -14
  50. package/dist/src/index.js +0 -23
  51. package/dist/src/inscriptions.d.ts.map +0 -1
  52. package/dist/src/inscriptions.js +0 -169
  53. package/dist/src/psbt.d.ts.map +0 -1
  54. package/dist/src/psbt.js +0 -150
  55. package/dist/tsconfig.tsbuildinfo +0 -1
  56. /package/dist/{src → cjs/src}/OrdOutput.d.ts +0 -0
  57. /package/dist/{src → cjs/src}/SatRange.d.ts +0 -0
  58. /package/dist/{src → cjs/src}/combinations.d.ts +0 -0
  59. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  60. /package/dist/{src → esm}/OrdOutput.d.ts.map +0 -0
  61. /package/dist/{src → esm}/SatRange.d.ts.map +0 -0
  62. /package/dist/{src → esm}/combinations.d.ts.map +0 -0
  63. /package/dist/{src → esm}/index.d.ts.map +0 -0
@@ -0,0 +1,147 @@
1
+ import { bitgo, address } from '@bitgo-beta/utxo-lib';
2
+ import { Dimensions, VirtualSizes } from '@bitgo-beta/unspents';
3
+ import { OrdOutput } from './OrdOutput';
4
+ import { parseSatPoint } from './SatPoint';
5
+ import { SatRange } from './SatRange';
6
+ import { getOrdOutputsForLayout, toArray, findOutputLayout } from './OutputLayout';
7
+ import { powerset } from './combinations';
8
+ export const DefaultInscriptionConstraints = {
9
+ minChangeOutput: BigInt(10000),
10
+ minInscriptionOutput: BigInt(10000),
11
+ maxInscriptionOutput: BigInt(20000),
12
+ };
13
+ export function createPsbtFromOutputLayout(network, inputBuilder, unspents, outputs, outputLayout) {
14
+ const psbt = bitgo.createPsbtForNetwork({ network: network });
15
+ if (unspents.length === 0) {
16
+ throw new Error(`must provide at least one unspent`);
17
+ }
18
+ unspents.forEach((u) => bitgo.addWalletUnspentToPsbt(psbt, u, inputBuilder.walletKeys, inputBuilder.signer, inputBuilder.cosigner));
19
+ const ordInput = OrdOutput.joinAll(unspents.map((u) => new OrdOutput(u.value)));
20
+ const ordOutputs = getOrdOutputsForLayout(ordInput, outputLayout);
21
+ toArray(ordOutputs).forEach((ordOutput) => {
22
+ if (ordOutput === null) {
23
+ return;
24
+ }
25
+ switch (ordOutput) {
26
+ // skip padding outputs and fee output (virtual)
27
+ case null:
28
+ case ordOutputs.feeOutput:
29
+ return;
30
+ // add padding outputs
31
+ case ordOutputs.firstChangeOutput:
32
+ case ordOutputs.secondChangeOutput:
33
+ const { chain, index } = ordOutput === ordOutputs.firstChangeOutput ? outputs.changeOutputs[0] : outputs.changeOutputs[1];
34
+ bitgo.addWalletOutputToPsbt(psbt, inputBuilder.walletKeys, chain, index, ordOutput.value);
35
+ break;
36
+ // add actual inscription output
37
+ case ordOutputs.inscriptionOutput:
38
+ let { inscriptionRecipient } = outputs;
39
+ if (typeof inscriptionRecipient === 'string') {
40
+ inscriptionRecipient = address.toOutputScript(inscriptionRecipient, network);
41
+ }
42
+ psbt.addOutput({
43
+ script: inscriptionRecipient,
44
+ value: ordOutput.value,
45
+ });
46
+ break;
47
+ }
48
+ });
49
+ return psbt;
50
+ }
51
+ function toSatRange(p) {
52
+ const { offset } = parseSatPoint(p);
53
+ return new SatRange(offset, offset);
54
+ }
55
+ function getFee(vsize, rateSatPerKB) {
56
+ return BigInt(Math.ceil((vsize * rateSatPerKB) / 1000));
57
+ }
58
+ /**
59
+ * @param inputs - inscription input must come first
60
+ * @param satPoint - location of the inscription
61
+ * @param outputs
62
+ * @param constraints
63
+ * @param minimizeInputs
64
+ */
65
+ export function findOutputLayoutForWalletUnspents(inputs, satPoint, outputs, constraints, { minimizeInputs = false } = {}) {
66
+ if (minimizeInputs) {
67
+ return findSmallestOutputLayoutForWalletUnspents(inputs, satPoint, outputs, constraints);
68
+ }
69
+ if (inputs.length === 0) {
70
+ throw new Error(`must provide at least one input`);
71
+ }
72
+ if (outputs.changeOutputs[0].chain !== outputs.changeOutputs[1].chain) {
73
+ // otherwise our fee calc is too complicated
74
+ throw new Error(`wallet outputs must be on same chain`);
75
+ }
76
+ const { minChangeOutput = DefaultInscriptionConstraints.minChangeOutput, minInscriptionOutput = DefaultInscriptionConstraints.minInscriptionOutput, maxInscriptionOutput = DefaultInscriptionConstraints.maxInscriptionOutput, } = constraints;
77
+ // Join all the inputs into a single inscriptionOutput.
78
+ // For the purposes of finding a layout there is no difference.
79
+ const inscriptionOutput = OrdOutput.joinAll(inputs.map((i) => new OrdOutput(i.value, i === inputs[0] ? [toSatRange(satPoint)] : [])));
80
+ const layout = findOutputLayout(inscriptionOutput, {
81
+ minChangeOutput,
82
+ minInscriptionOutput,
83
+ maxInscriptionOutput,
84
+ feeFixed: getFee(VirtualSizes.txSegOverheadVSize +
85
+ Dimensions.fromUnspents(inputs, {
86
+ p2tr: { scriptPathLevel: 1 },
87
+ p2trMusig2: { scriptPathLevel: undefined },
88
+ }).getInputsVSize(), constraints.feeRateSatKB),
89
+ feePerOutput: getFee(Dimensions.fromOutputOnChain(outputs.changeOutputs[0].chain).getOutputsVSize(), constraints.feeRateSatKB),
90
+ });
91
+ return layout ? { inputs, layout } : undefined;
92
+ }
93
+ export const MAX_UNSPENTS_FOR_OUTPUT_LAYOUT = 5;
94
+ /**
95
+ * @param inputs - inscription input must come first
96
+ * @param satPoint - location of the inscription
97
+ * @param outputs
98
+ * @param constraints
99
+ */
100
+ function findSmallestOutputLayoutForWalletUnspents(inputs, satPoint, outputs, constraints) {
101
+ if (MAX_UNSPENTS_FOR_OUTPUT_LAYOUT < inputs.length) {
102
+ throw new Error(`input array is too large`);
103
+ }
104
+ // create powerset of all supplementary inputs and find the cheapest result
105
+ const inputsArr = [inputs, ...powerset(inputs.slice(1)).map((s) => [inputs[0], ...s])];
106
+ return inputsArr
107
+ .map((inputs) => findOutputLayoutForWalletUnspents(inputs, satPoint, outputs, constraints))
108
+ .reduce((best, next) => {
109
+ if (best === undefined) {
110
+ return next;
111
+ }
112
+ if (next === undefined) {
113
+ return best;
114
+ }
115
+ return best.layout.feeOutput < next.layout.feeOutput ? best : next;
116
+ });
117
+ }
118
+ export class ErrorNoLayout extends Error {
119
+ constructor() {
120
+ super('Could not find output layout for inscription passing transaction');
121
+ }
122
+ }
123
+ /**
124
+ * @param network
125
+ * @param inputBuilder
126
+ * @param unspent
127
+ * @param satPoint
128
+ * @param outputs
129
+ * @param constraints
130
+ * @param supplementaryUnspents - additional inputs to cover fee.
131
+ * @param [minimizeInputs=true] - try to find input combination with minimal fees. Limits supplementaryUnspents to 4.
132
+ */
133
+ export function createPsbtForSingleInscriptionPassingTransaction(network, inputBuilder, unspent, satPoint, outputs, constraints, { supplementaryUnspents = [], minimizeInputs = true, } = {}) {
134
+ // support for legacy call style
135
+ if (Array.isArray(unspent)) {
136
+ if (unspent.length !== 1) {
137
+ throw new Error(`can only pass single unspent`);
138
+ }
139
+ unspent = unspent[0];
140
+ }
141
+ const result = findOutputLayoutForWalletUnspents([unspent, ...supplementaryUnspents], satPoint, outputs, constraints, { minimizeInputs });
142
+ if (!result) {
143
+ throw new ErrorNoLayout();
144
+ }
145
+ return createPsbtFromOutputLayout(network, inputBuilder, result.inputs, outputs, result.layout);
146
+ }
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQVksTUFBTSxZQUFZLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsc0JBQXNCLEVBQWdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWlDMUMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsZUFBZSxFQUFFLE1BQU0sQ0FBQyxLQUFNLENBQUM7SUFDL0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEtBQU0sQ0FBQztJQUNwQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsS0FBTSxDQUFDO0NBQ3JDLENBQUM7QUFFRixNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE9BQWdCLEVBQ2hCLFlBQWdDLEVBQ2hDLFFBQXlCLEVBQ3pCLE9BQXNDLEVBQ3RDLFlBQTBCO0lBRTFCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFB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QUM7SUFFRCxPQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZXR3b3JrLCBiaXRnbywgYWRkcmVzcyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IERpbWVuc2lvbnMsIFZpcnR1YWxTaXplcyB9IGZyb20gJ0BiaXRnby1iZXRhL3Vuc3BlbnRzJztcblxuaW1wb3J0IHsgT3JkT3V0cHV0IH0gZnJvbSAnLi9PcmRPdXRwdXQnO1xuaW1wb3J0IHsgcGFyc2VTYXRQb2ludCwgU2F0UG9pbnQgfSBmcm9tICcuL1NhdFBvaW50JztcbmltcG9ydCB7IFNhdFJhbmdlIH0gZnJvbSAnLi9TYXRSYW5nZSc7XG5pbXBvcnQgeyBnZXRPcmRPdXRwdXRzRm9yTGF5b3V0LCBPdXRwdXRMYXlvdXQsIHRvQXJyYXksIGZpbmRPdXRwdXRMYXlvdXQgfSBmcm9tICcuL091dHB1dExheW91dCc7XG5pbXBvcnQgeyBwb3dlcnNldCB9IGZyb20gJy4vY29tYmluYXRpb25zJztcblxudHlwZSBXYWxsZXRVbnNwZW50ID0gYml0Z28uV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuXG5leHBvcnQgdHlwZSBXYWxsZXRPdXRwdXRQYXRoID0ge1xuICBjaGFpbjogYml0Z28uQ2hhaW5Db2RlO1xuICBpbmRleDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgV2FsbGV0SW5wdXRCdWlsZGVyID0ge1xuICB3YWxsZXRLZXlzOiBiaXRnby5Sb290V2FsbGV0S2V5cztcbiAgc2lnbmVyOiBiaXRnby5LZXlOYW1lO1xuICBjb3NpZ25lcjogYml0Z28uS2V5TmFtZTtcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIGFsbCBvdXRwdXRzIG9mIGFuIGluc2NyaXB0aW9uIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzID0ge1xuICBpbnNjcmlwdGlvblJlY2lwaWVudDogc3RyaW5nIHwgQnVmZmVyO1xuICBjaGFuZ2VPdXRwdXRzOiBbV2FsbGV0T3V0cHV0UGF0aCwgV2FsbGV0T3V0cHV0UGF0aF07XG59O1xuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCB0eXBlIEluc2NyaXB0aW9uT3V0cHV0cyA9IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzO1xuXG5leHBvcnQgdHlwZSBJbnNjcmlwdGlvblRyYW5zYWN0aW9uQ29uc3RyYWludHMgPSB7XG4gIGZlZVJhdGVTYXRLQjogbnVtYmVyO1xuICBtaW5DaGFuZ2VPdXRwdXQ/OiBiaWdpbnQ7XG4gIG1pbkluc2NyaXB0aW9uT3V0cHV0PzogYmlnaW50O1xuICBtYXhJbnNjcmlwdGlvbk91dHB1dD86IGJpZ2ludDtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0SW5zY3JpcHRpb25Db25zdHJhaW50cyA9IHtcbiAgbWluQ2hhbmdlT3V0cHV0OiBCaWdJbnQoMTBfMDAwKSxcbiAgbWluSW5zY3JpcHRpb25PdXRwdXQ6IEJpZ0ludCgxMF8wMDApLFxuICBtYXhJbnNjcmlwdGlvbk91dHB1dDogQmlnSW50KDIwXzAwMCksXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHNidEZyb21PdXRwdXRMYXlvdXQoXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIGlucHV0QnVpbGRlcjogV2FsbGV0SW5wdXRCdWlsZGVyLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudFtdLFxuICBvdXRwdXRzOiBJbnNjcmlwdGlvblRyYW5zYWN0aW9uT3V0cHV0cyxcbiAgb3V0cHV0TGF5b3V0OiBPdXRwdXRMYXlvdXRcbik6IGJpdGdvLlV0eG9Qc2J0IHtcbiAgY29uc3QgcHNidCA9IGJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHsgbmV0d29yazogbmV0d29yayB9KTtcbiAgaWYgKHVuc3BlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSB1bnNwZW50YCk7XG4gIH1cbiAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT5cbiAgICBiaXRnby5hZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHUsIGlucHV0QnVpbGRlci53YWxsZXRLZXlzLCBpbnB1dEJ1aWxkZXIuc2lnbmVyLCBpbnB1dEJ1aWxkZXIuY29zaWduZXIpXG4gICk7XG4gIGNvbnN0IG9yZElucHV0ID0gT3JkT3V0cHV0LmpvaW5BbGwodW5zcGVudHMubWFwKCh1KSA9PiBuZXcgT3JkT3V0cHV0KHUudmFsdWUpKSk7XG4gIGNvbnN0IG9yZE91dHB1dHMgPSBnZXRPcmRPdXRwdXRzRm9yTGF5b3V0KG9yZElucHV0LCBvdXRwdXRMYXlvdXQpO1xuICB0b0FycmF5KG9yZE91dHB1dHMpLmZvckVhY2goKG9yZE91dHB1dCkgPT4ge1xuICAgIGlmIChvcmRPdXRwdXQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChvcmRPdXRwdXQpIHtcbiAgICAgIC8vIHNraXAgcGFkZGluZyBvdXRwdXRzIGFuZCBmZWUgb3V0cHV0ICh2aXJ0dWFsKVxuICAgICAgY2FzZSBudWxsOlxuICAgICAgY2FzZSBvcmRPdXRwdXRzLmZlZU91dHB1dDpcbiAgICAgICAgcmV0dXJuO1xuICAgICAgLy8gYWRkIHBhZGRpbmcgb3V0cHV0c1xuICAgICAgY2FzZSBvcmRPdXRwdXRzLmZpcnN0Q2hhbmdlT3V0cHV0OlxuICAgICAgY2FzZSBvcmRPdXRwdXRzLnNlY29uZENoYW5nZU91dHB1dDpcbiAgICAgICAgY29uc3QgeyBjaGFpbiwgaW5kZXggfSA9XG4gICAgICAgICAgb3JkT3V0cHV0ID09PSBvcmRPdXRwdXRzLmZpcnN0Q2hhbmdlT3V0cHV0ID8gb3V0cHV0cy5jaGFuZ2VPdXRwdXRzWzBdIDogb3V0cHV0cy5jaGFuZ2VPdXRwdXRzWzFdO1xuICAgICAgICBiaXRnby5hZGRXYWxsZXRPdXRwdXRUb1BzYnQocHNidCwgaW5wdXRCdWlsZGVyLndhbGxldEtleXMsIGNoYWluLCBpbmRleCwgb3JkT3V0cHV0LnZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBhZGQgYWN0dWFsIGluc2NyaXB0aW9uIG91dHB1dFxuICAgICAgY2FzZSBvcmRPdXRwdXRzLmluc2NyaXB0aW9uT3V0cHV0OlxuICAgICAgICBsZXQgeyBpbnNjcmlwdGlvblJlY2lwaWVudCB9ID0gb3V0cHV0cztcbiAgICAgICAgaWYgKHR5cGVvZiBpbnNjcmlwdGlvblJlY2lwaWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpbnNjcmlwdGlvblJlY2lwaWVudCA9IGFkZHJlc3MudG9PdXRwdXRTY3JpcHQoaW5zY3JpcHRpb25SZWNpcGllbnQsIG5ldHdvcmspO1xuICAgICAgICB9XG4gICAgICAgIHBzYnQuYWRkT3V0cHV0KHtcbiAgICAgICAgICBzY3JpcHQ6IGluc2NyaXB0aW9uUmVjaXBpZW50LFxuICAgICAgICAgIHZhbHVlOiBvcmRPdXRwdXQudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHNidDtcbn1cblxuZnVuY3Rpb24gdG9TYXRSYW5nZShwOiBTYXRQb2ludCkge1xuICBjb25zdCB7IG9mZnNldCB9ID0gcGFyc2VTYXRQb2ludChwKTtcbiAgcmV0dXJuIG5ldyBTYXRSYW5nZShvZmZzZXQsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIGdldEZlZSh2c2l6ZTogbnVtYmVyLCByYXRlU2F0UGVyS0I6IG51bWJlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoTWF0aC5jZWlsKCh2c2l6ZSAqIHJhdGVTYXRQZXJLQikgLyAxMDAwKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGlucHV0cyAtIGluc2NyaXB0aW9uIGlucHV0IG11c3QgY29tZSBmaXJzdFxuICogQHBhcmFtIHNhdFBvaW50IC0gbG9jYXRpb24gb2YgdGhlIGluc2NyaXB0aW9uXG4gKiBAcGFyYW0gb3V0cHV0c1xuICogQHBhcmFtIGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0gbWluaW1pemVJbnB1dHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPdXRwdXRMYXlvdXRGb3JXYWxsZXRVbnNwZW50cyhcbiAgaW5wdXRzOiBXYWxsZXRVbnNwZW50W10sXG4gIHNhdFBvaW50OiBTYXRQb2ludCxcbiAgb3V0cHV0czogSW5zY3JpcHRpb25UcmFuc2FjdGlvbk91dHB1dHMsXG4gIGNvbnN0cmFpbnRzOiBJbnNjcmlwdGlvblRyYW5zYWN0aW9uQ29uc3RyYWludHMsXG4gIHsgbWluaW1pemVJbnB1dHMgPSBmYWxzZSB9ID0ge31cbik6IHsgaW5wdXRzOiBXYWxsZXRVbnNwZW50W107IGxheW91dDogT3V0cHV0TGF5b3V0IH0gfCB1bmRlZmluZWQge1xuICBpZiAobWluaW1pemVJbnB1dHMpIHtcbiAgICByZXR1cm4gZmluZFNtYWxsZXN0T3V0cHV0TGF5b3V0Rm9yV2FsbGV0VW5zcGVudHMoaW5wdXRzLCBzYXRQb2ludCwgb3V0cHV0cywgY29uc3RyYWludHMpO1xuICB9XG5cbiAgaWYgKGlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgaW5wdXRgKTtcbiAgfVxuXG4gIGlmIChvdXRwdXRzLmNoYW5nZU91dHB1dHNbMF0uY2hhaW4gIT09IG91dHB1dHMuY2hhbmdlT3V0cHV0c1sxXS5jaGFpbikge1xuICAgIC8vIG90aGVyd2lzZSBvdXIgZmVlIGNhbGMgaXMgdG9vIGNvbXBsaWNhdGVkXG4gICAgdGhyb3cgbmV3IEVycm9yKGB3YWxsZXQgb3V0cHV0cyBtdXN0IGJlIG9uIHNhbWUgY2hhaW5gKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBtaW5DaGFuZ2VPdXRwdXQgPSBEZWZhdWx0SW5zY3JpcHRpb25Db25zdHJhaW50cy5taW5DaGFuZ2VPdXRwdXQsXG4gICAgbWluSW5zY3JpcHRpb25PdXRwdXQgPSBEZWZhdWx0SW5zY3JpcHRpb25Db25zdHJhaW50cy5taW5JbnNjcmlwdGlvbk91dHB1dCxcbiAgICBtYXhJbnNjcmlwdGlvbk91dHB1dCA9IERlZmF1bHRJbnNjcmlwdGlvbkNvbnN0cmFpbnRzLm1heEluc2NyaXB0aW9uT3V0cHV0LFxuICB9ID0gY29uc3RyYWludHM7XG5cbiAgLy8gSm9pbiBhbGwgdGhlIGlucHV0cyBpbnRvIGEgc2luZ2xlIGluc2NyaXB0aW9uT3V0cHV0LlxuICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIGZpbmRpbmcgYSBsYXlvdXQgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZS5cbiAgY29uc3QgaW5zY3JpcHRpb25PdXRwdXQgPSBPcmRPdXRwdXQuam9pbkFsbChcbiAgICBpbnB1dHMubWFwKChpKSA9PiBuZXcgT3JkT3V0cHV0KGkudmFsdWUsIGkgPT09IGlucHV0c1swXSA/IFt0b1NhdFJhbmdlKHNhdFBvaW50KV0gOiBbXSkpXG4gICk7XG4gIGNvbnN0IGxheW91dCA9IGZpbmRPdXRwdXRMYXlvdXQoaW5zY3JpcHRpb25PdXRwdXQsIHtcbiAgICBtaW5DaGFuZ2VPdXRwdXQsXG4gICAgbWluSW5zY3JpcHRpb25PdXRwdXQsXG4gICAgbWF4SW5zY3JpcHRpb25PdXRwdXQsXG4gICAgZmVlRml4ZWQ6IGdldEZlZShcbiAgICAgIFZpcnR1YWxTaXplcy50eFNlZ092ZXJoZWFkVlNpemUgK1xuICAgICAgICBEaW1lbnNpb25zLmZyb21VbnNwZW50cyhpbnB1dHMsIHtcbiAgICAgICAgICBwMnRyOiB7IHNjcmlwdFBhdGhMZXZlbDogMSB9LFxuICAgICAgICAgIHAydHJNdXNpZzI6IHsgc2NyaXB0UGF0aExldmVsOiB1bmRlZmluZWQgfSxcbiAgICAgICAgfSkuZ2V0SW5wdXRzVlNpemUoKSxcbiAgICAgIGNvbnN0cmFpbnRzLmZlZVJhdGVTYXRLQlxuICAgICksXG4gICAgZmVlUGVyT3V0cHV0OiBnZXRGZWUoXG4gICAgICBEaW1lbnNpb25zLmZyb21PdXRwdXRPbkNoYWluKG91dHB1dHMuY2hhbmdlT3V0cHV0c1swXS5jaGFpbikuZ2V0T3V0cHV0c1ZTaXplKCksXG4gICAgICBjb25zdHJhaW50cy5mZWVSYXRlU2F0S0JcbiAgICApLFxuICB9KTtcblxuICByZXR1cm4gbGF5b3V0ID8geyBpbnB1dHMsIGxheW91dCB9IDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY29uc3QgTUFYX1VOU1BFTlRTX0ZPUl9PVVRQVVRfTEFZT1VUID0gNTtcblxuLyoqXG4gKiBAcGFyYW0gaW5wdXRzIC0gaW5zY3JpcHRpb24gaW5wdXQgbXVzdCBjb21lIGZpcnN0XG4gKiBAcGFyYW0gc2F0UG9pbnQgLSBsb2NhdGlvbiBvZiB0aGUgaW5zY3JpcHRpb25cbiAqIEBwYXJhbSBvdXRwdXRzXG4gKiBAcGFyYW0gY29uc3RyYWludHNcbiAqL1xuZnVuY3Rpb24gZmluZFNtYWxsZXN0T3V0cHV0TGF5b3V0Rm9yV2FsbGV0VW5zcGVudHMoXG4gIGlucHV0czogV2FsbGV0VW5zcGVudFtdLFxuICBzYXRQb2ludDogU2F0UG9pbnQsXG4gIG91dHB1dHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzLFxuICBjb25zdHJhaW50czogSW5zY3JpcHRpb25UcmFuc2FjdGlvbkNvbnN0cmFpbnRzXG4pOiB7IGlucHV0czogV2FsbGV0VW5zcGVudFtdOyBsYXlvdXQ6IE91dHB1dExheW91dCB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKE1BWF9VTlNQRU5UU19GT1JfT1VUUFVUX0xBWU9VVCA8IGlucHV0cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGFycmF5IGlzIHRvbyBsYXJnZWApO1xuICB9XG4gIC8vIGNyZWF0ZSBwb3dlcnNldCBvZiBhbGwgc3VwcGxlbWVudGFyeSBpbnB1dHMgYW5kIGZpbmQgdGhlIGNoZWFwZXN0IHJlc3VsdFxuICBjb25zdCBpbnB1dHNBcnIgPSBbaW5wdXRzLCAuLi5wb3dlcnNldChpbnB1dHMuc2xpY2UoMSkpLm1hcCgocykgPT4gW2lucHV0c1swXSwgLi4uc10pXTtcbiAgcmV0dXJuIGlucHV0c0FyclxuICAgIC5tYXAoKGlucHV0cykgPT4gZmluZE91dHB1dExheW91dEZvcldhbGxldFVuc3BlbnRzKGlucHV0cywgc2F0UG9pbnQsIG91dHB1dHMsIGNvbnN0cmFpbnRzKSlcbiAgICAucmVkdWNlKChiZXN0LCBuZXh0KSA9PiB7XG4gICAgICBpZiAoYmVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfVxuICAgICAgaWYgKG5leHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYmVzdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiZXN0LmxheW91dC5mZWVPdXRwdXQgPCBuZXh0LmxheW91dC5mZWVPdXRwdXQgPyBiZXN0IDogbmV4dDtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yTm9MYXlvdXQgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdDb3VsZCBub3QgZmluZCBvdXRwdXQgbGF5b3V0IGZvciBpbnNjcmlwdGlvbiBwYXNzaW5nIHRyYW5zYWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHBhcmFtIGlucHV0QnVpbGRlclxuICogQHBhcmFtIHVuc3BlbnRcbiAqIEBwYXJhbSBzYXRQb2ludFxuICogQHBhcmFtIG91dHB1dHNcbiAqIEBwYXJhbSBjb25zdHJhaW50c1xuICogQHBhcmFtIHN1cHBsZW1lbnRhcnlVbnNwZW50cyAtIGFkZGl0aW9uYWwgaW5wdXRzIHRvIGNvdmVyIGZlZS5cbiAqIEBwYXJhbSBbbWluaW1pemVJbnB1dHM9dHJ1ZV0gLSB0cnkgdG8gZmluZCBpbnB1dCBjb21iaW5hdGlvbiB3aXRoIG1pbmltYWwgZmVlcy4gTGltaXRzIHN1cHBsZW1lbnRhcnlVbnNwZW50cyB0byA0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHNidEZvclNpbmdsZUluc2NyaXB0aW9uUGFzc2luZ1RyYW5zYWN0aW9uKFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICBpbnB1dEJ1aWxkZXI6IFdhbGxldElucHV0QnVpbGRlcixcbiAgdW5zcGVudDogV2FsbGV0VW5zcGVudCB8IFdhbGxldFVuc3BlbnRbXSxcbiAgc2F0UG9pbnQ6IFNhdFBvaW50LFxuICBvdXRwdXRzOiBJbnNjcmlwdGlvblRyYW5zYWN0aW9uT3V0cHV0cyxcbiAgY29uc3RyYWludHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25Db25zdHJhaW50cyxcbiAge1xuICAgIHN1cHBsZW1lbnRhcnlVbnNwZW50cyA9IFtdLFxuICAgIG1pbmltaXplSW5wdXRzID0gdHJ1ZSxcbiAgfToge1xuICAgIHN1cHBsZW1lbnRhcnlVbnNwZW50cz86IFdhbGxldFVuc3BlbnRbXTtcbiAgICBtaW5pbWl6ZUlucHV0cz86IGJvb2xlYW47XG4gIH0gPSB7fVxuKTogYml0Z28uVXR4b1BzYnQge1xuICAvLyBzdXBwb3J0IGZvciBsZWdhY3kgY2FsbCBzdHlsZVxuICBpZiAoQXJyYXkuaXNBcnJheSh1bnNwZW50KSkge1xuICAgIGlmICh1bnNwZW50Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4gb25seSBwYXNzIHNpbmdsZSB1bnNwZW50YCk7XG4gICAgfVxuICAgIHVuc3BlbnQgPSB1bnNwZW50WzBdO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gZmluZE91dHB1dExheW91dEZvcldhbGxldFVuc3BlbnRzKFxuICAgIFt1bnNwZW50LCAuLi5zdXBwbGVtZW50YXJ5VW5zcGVudHNdLFxuICAgIHNhdFBvaW50LFxuICAgIG91dHB1dHMsXG4gICAgY29uc3RyYWludHMsXG4gICAgeyBtaW5pbWl6ZUlucHV0cyB9XG4gICk7XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3JOb0xheW91dCgpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBzYnRGcm9tT3V0cHV0TGF5b3V0KG5ldHdvcmssIGlucHV0QnVpbGRlciwgcmVzdWx0LmlucHV0cywgb3V0cHV0cywgcmVzdWx0LmxheW91dCk7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,11 +1,26 @@
1
1
  {
2
2
  "name": "@bitgo-beta/utxo-ord",
3
3
  "description": "Utilities for building ordinals with BitGo utxo-lib",
4
- "main": "./dist/src/index.js",
5
- "types": "./dist/src/index.d.ts",
6
- "version": "1.0.1-beta.162",
4
+ "main": "./dist/cjs/src/index.js",
5
+ "module": "./dist/esm/index.js",
6
+ "browser": "./dist/esm/index.js",
7
+ "types": "./dist/cjs/src/index.d.ts",
8
+ "version": "1.0.1-beta.1621",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/esm/index.d.ts",
13
+ "default": "./dist/esm/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/cjs/src/index.d.ts",
17
+ "default": "./dist/cjs/src/index.js"
18
+ }
19
+ }
20
+ },
7
21
  "files": [
8
- "dist/**/*"
22
+ "dist/cjs",
23
+ "dist/esm"
9
24
  ],
10
25
  "keywords": [
11
26
  "bitgo",
@@ -16,7 +31,9 @@
16
31
  ],
17
32
  "scripts": {
18
33
  "prepare": "npm run build",
19
- "build": "yarn tsc --build --incremental --verbose .",
34
+ "build": "npm run build:cjs && npm run build:esm",
35
+ "build:cjs": "yarn tsc --build --incremental --verbose .",
36
+ "build:esm": "yarn tsc --project tsconfig.esm.json",
20
37
  "lint": "eslint --quiet .",
21
38
  "unit-test": "mocha --recursive test",
22
39
  "fmt": "prettier --write '{src,test}/**/*.{ts,js}'",
@@ -28,9 +45,9 @@
28
45
  "directory": "modules/utxo-ord"
29
46
  },
30
47
  "dependencies": {
31
- "@bitgo-beta/sdk-core": "8.2.1-beta.88",
32
- "@bitgo-beta/unspents": "0.13.2-beta.88",
33
- "@bitgo-beta/utxo-lib": "8.0.3-beta.88"
48
+ "@bitgo-beta/sdk-core": "8.2.1-beta.1549",
49
+ "@bitgo-beta/unspents": "0.13.2-beta.1550",
50
+ "@bitgo-beta/utxo-lib": "8.0.3-beta.1551"
34
51
  },
35
52
  "lint-staged": {
36
53
  "*.{js,ts}": [
@@ -42,5 +59,5 @@
42
59
  "access": "public"
43
60
  },
44
61
  "license": "MIT",
45
- "gitHead": "12128df775339e01246966776373f51c0c3da9ed"
62
+ "gitHead": "a0ef9cf0b9cf86c14082a94faab3d5b4d1ecbda0"
46
63
  }
@@ -1,197 +0,0 @@
1
- "use strict";
2
- /*
3
-
4
- Classes used for tracking sats across transactions.
5
-
6
- https://github.com/casey/ord/blob/master/bip.mediawiki#design
7
-
8
- > The ordinal numbers of sats in transaction inputs are transferred to output sats in
9
- > first-in-first-out order, according to the size and order of the transactions inputs and outputs.
10
-
11
-
12
- Sample scenario:
13
- inputs i0, i1, i2
14
- outputs u0, u1
15
- inscriptions r0, r1, r2, r3, r4
16
-
17
-
18
- createOutputs(
19
- [i0, i1],
20
- [
21
- [u0, [r0, r1]],
22
- [u1, [r2, r3]],
23
- ]
24
- );
25
-
26
- r4 is donated to the miner
27
-
28
- ┌────────┬────────┐
29
- │ i0 │ u0 │
30
- │ │ │
31
- │ r0 ┼ │
32
- │ │ │
33
- ├────────┤ │
34
- │ i1 │ │
35
- │ r1 ┼ │
36
- │ │ │
37
- │ ├────────┤
38
- │ │ u1 │
39
- │ r2 ┼ │
40
- │ │ │
41
- ├────────┤ │
42
- │ i2 │ │
43
- │ r3 ┼ │
44
- │ │ │
45
- │ │ │
46
- │ ├────────┘
47
- │ │
48
- │ r4 ┼
49
- │ │
50
- └────────┘
51
-
52
- */
53
- Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.OrdOutput = exports.InvalidOrdOutput = void 0;
55
- const SatRange_1 = require("./SatRange");
56
- class InvalidOrdOutput extends Error {
57
- constructor(message, value, ordinals) {
58
- super(message);
59
- this.value = value;
60
- this.ordinals = ordinals;
61
- }
62
- }
63
- exports.InvalidOrdOutput = InvalidOrdOutput;
64
- /**
65
- * The ordinal metadata for an output
66
- */
67
- class OrdOutput {
68
- /**
69
- * @param value - the input value
70
- * @param ordinals - The ordinal ranges of an output, relative to the first satoshi.
71
- * Required to be ordered and non-overlapping.
72
- * Not required to be exhaustive.
73
- */
74
- constructor(value, ordinals = []) {
75
- this.value = value;
76
- this.ordinals = ordinals;
77
- const maxRange = this.asSatRange();
78
- ordinals.forEach((r, i) => {
79
- if (!maxRange.isSupersetOf(r)) {
80
- throw new InvalidOrdOutput(`range ${r} outside output maxRange ${maxRange}`, value, ordinals);
81
- }
82
- if (0 < i) {
83
- const prevRange = ordinals[i - 1];
84
- if (r.start <= prevRange.end) {
85
- throw new InvalidOrdOutput(`SatRange #${i - 1} ${prevRange} overlaps SatRange #${i} ${r}`, value, ordinals);
86
- }
87
- }
88
- });
89
- }
90
- /**
91
- * @param other
92
- * @return OrdOutput extended by other.value and SatRanges shifted by this.value
93
- */
94
- joinedWith(other) {
95
- return new OrdOutput(this.value + other.value, [
96
- ...this.ordinals,
97
- ...other.ordinals.map((r) => r.shiftedBy(this.value)),
98
- ]);
99
- }
100
- /**
101
- * @param ords
102
- * @return single OrdOutput containing all SatRanges, shifted by preceding output values
103
- */
104
- static joinAll(ords) {
105
- if (ords.length === 0) {
106
- throw new TypeError(`empty input`);
107
- }
108
- return ords.reduce((a, b) => a.joinedWith(b));
109
- }
110
- asSatRange() {
111
- return new SatRange_1.SatRange(BigInt(0), this.value - BigInt(1));
112
- }
113
- /**
114
- * @param r
115
- * @return new OrdOutput with all ranges fully contained in _r_. SatRanges are aligned to new start.
116
- */
117
- fromSatRange(r) {
118
- return new OrdOutput(r.size(), this.ordinals.flatMap((s) => {
119
- if (r.intersectsWith(s)) {
120
- if (!r.isSupersetOf(s)) {
121
- throw new Error(`partial overlap in ${r} and ${s}`);
122
- }
123
- return s.shiftedBy(-r.start);
124
- }
125
- return [];
126
- }));
127
- }
128
- /**
129
- * @param value
130
- * @return first OrdOutput with value `value`, second OrdOutput with remaining value.
131
- * With respective SatRanges
132
- */
133
- splitAt(value) {
134
- if (this.value < value) {
135
- throw new Error(`must split at value inside range`);
136
- }
137
- return [
138
- this.fromSatRange(new SatRange_1.SatRange(BigInt(0), value - BigInt(1))),
139
- this.fromSatRange(new SatRange_1.SatRange(value, this.value - BigInt(1))),
140
- ];
141
- }
142
- /**
143
- * Like splitAt but returns _null_ where a zero-sized OrdOutput would be
144
- * @param value
145
- */
146
- splitAtAllowZero(value) {
147
- if (value === BigInt(0)) {
148
- return [null, this.fromSatRange(this.asSatRange())];
149
- }
150
- if (value === this.value) {
151
- return [this.fromSatRange(this.asSatRange()), null];
152
- }
153
- return this.splitAt(value);
154
- }
155
- /**
156
- * Split output successively at values.
157
- * @param values
158
- * @param exact - when set, ensure that value sum matches _this.value_
159
- * @param allowZero - when set, return _null_ for zero-sized values
160
- * @return (OrdOutput | null)[]. Zero-sized outputs are substituted with _null_.
161
- */
162
- splitAllWithParams(values, { exact = false, allowZero = false }) {
163
- if (values.length === 0) {
164
- throw new Error(`invalid argument`);
165
- }
166
- if (exact) {
167
- const valueSum = values.reduce((a, b) => a + b, BigInt(0));
168
- if (this.value !== valueSum) {
169
- throw new Error(`value sum ${valueSum} does not match this.value ${this.value}`);
170
- }
171
- return this.splitAllWithParams(values.slice(0, -1), { allowZero, exact: false });
172
- }
173
- const [v, ...rest] = values;
174
- const [a, b] = allowZero ? this.splitAtAllowZero(v) : this.splitAt(v);
175
- if (rest.length) {
176
- if (b === null) {
177
- throw new Error(`invalid remainder`);
178
- }
179
- else {
180
- return [a, ...b.splitAllWithParams(rest, { exact, allowZero })];
181
- }
182
- }
183
- else {
184
- return [a, b];
185
- }
186
- }
187
- /**
188
- * Split output successively at values.
189
- * @param values
190
- * @return OrdOutput[] with length _values.length + 1_
191
- */
192
- splitAll(values) {
193
- return this.splitAllWithParams(values, { exact: false, allowZero: false });
194
- }
195
- }
196
- exports.OrdOutput = OrdOutput;
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JkT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL09yZE91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHOzs7QUFFSCx5Q0FBc0M7QUFFdEMsTUFBYSxnQkFBaUIsU0FBUSxLQUFLO0lBQ3pDLFlBQVksT0FBZSxFQUFTLEtBQWEsRUFBUyxRQUFvQjtRQUM1RSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEbUIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFTLGFBQVEsR0FBUixRQUFRLENBQVk7SUFFOUUsQ0FBQztDQUNGO0FBSkQsNENBSUM7QUFFRDs7R0FFRztBQUNILE1BQWEsU0FBUztJQUNwQjs7Ozs7T0FLRztJQUNILFlBQW1CLEtBQWEsRUFBUyxXQUF1QixFQUFFO1FBQS9DLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUNoRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0IsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQy9GO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNULE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUM1QixNQUFNLElBQUksZ0JBQWdCLENBQUMsYUFB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QUU7WUFDZixJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqRTtTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxNQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUExSUQsOEJBMElDIiwic291cmNlc0NvbnRlbnQiOlsiLypcblxuQ2xhc3NlcyB1c2VkIGZvciB0cmFja2luZyBzYXRzIGFjcm9zcyB0cmFuc2FjdGlvbnMuXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9jYXNleS9vcmQvYmxvYi9tYXN0ZXIvYmlwLm1lZGlhd2lraSNkZXNpZ25cblxuPiBUaGUgb3JkaW5hbCBudW1iZXJzIG9mIHNhdHMgaW4gdHJhbnNhY3Rpb24gaW5wdXRzIGFyZSB0cmFuc2ZlcnJlZCB0byBvdXRwdXQgc2F0cyBpblxuPiBmaXJzdC1pbi1maXJzdC1vdXQgb3JkZXIsIGFjY29yZGluZyB0byB0aGUgc2l6ZSBhbmQgb3JkZXIgb2YgdGhlIHRyYW5zYWN0aW9ucyBpbnB1dHMgYW5kIG91dHB1dHMuXG5cblxuU2FtcGxlIHNjZW5hcmlvOlxuICAgaW5wdXRzICAgICAgICAgaTAsIGkxLCBpMlxuICAgb3V0cHV0cyAgICAgICAgdTAsIHUxXG4gICBpbnNjcmlwdGlvbnMgICByMCwgcjEsIHIyLCByMywgcjRcblxuXG5jcmVhdGVPdXRwdXRzKFxuICBbaTAsIGkxXSxcbiAgW1xuICAgIFt1MCwgW3IwLCByMV1dLFxuICAgIFt1MSwgW3IyLCByM11dLFxuICBdXG4pO1xuXG4gIHI0IGlzIGRvbmF0ZWQgdG8gdGhlIG1pbmVyXG5cbiAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIOKUgiBpMCAgICAg4pSCIHUwICAgICDilIJcbiAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHIwIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkICAgICAgICDilIJcbiAg4pSCIGkxICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHIxIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAg4pSCICAgICAgICDilIIgdTEgICAgIOKUglxuICDilIIgICAgIHIyIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkICAgICAgICDilIJcbiAg4pSCIGkyICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHIzIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHI0IOKUvFxuICDilIIgICAgICAgIOKUglxuICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilJhcblxuICovXG5cbmltcG9ydCB7IFNhdFJhbmdlIH0gZnJvbSAnLi9TYXRSYW5nZSc7XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkT3JkT3V0cHV0IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyB2YWx1ZTogYmlnaW50LCBwdWJsaWMgb3JkaW5hbHM6IFNhdFJhbmdlW10pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBvcmRpbmFsIG1ldGFkYXRhIGZvciBhbiBvdXRwdXRcbiAqL1xuZXhwb3J0IGNsYXNzIE9yZE91dHB1dCB7XG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgLSB0aGUgaW5wdXQgdmFsdWVcbiAgICogQHBhcmFtIG9yZGluYWxzIC0gVGhlIG9yZGluYWwgcmFuZ2VzIG9mIGFuIG91dHB1dCwgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IHNhdG9zaGkuXG4gICAqICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkIHRvIGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy5cbiAgICogICAgICAgICAgICAgICAgICAgTm90IHJlcXVpcmVkIHRvIGJlIGV4aGF1c3RpdmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IGJpZ2ludCwgcHVibGljIG9yZGluYWxzOiBTYXRSYW5nZVtdID0gW10pIHtcbiAgICBjb25zdCBtYXhSYW5nZSA9IHRoaXMuYXNTYXRSYW5nZSgpO1xuICAgIG9yZGluYWxzLmZvckVhY2goKHIsIGkpID0+IHtcbiAgICAgIGlmICghbWF4UmFuZ2UuaXNTdXBlcnNldE9mKHIpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3JkT3V0cHV0KGByYW5nZSAke3J9IG91dHNpZGUgb3V0cHV0IG1heFJhbmdlICR7bWF4UmFuZ2V9YCwgdmFsdWUsIG9yZGluYWxzKTtcbiAgICAgIH1cbiAgICAgIGlmICgwIDwgaSkge1xuICAgICAgICBjb25zdCBwcmV2UmFuZ2UgPSBvcmRpbmFsc1tpIC0gMV07XG4gICAgICAgIGlmIChyLnN0YXJ0IDw9IHByZXZSYW5nZS5lbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9yZE91dHB1dChgU2F0UmFuZ2UgIyR7aSAtIDF9ICR7cHJldlJhbmdlfSBvdmVybGFwcyBTYXRSYW5nZSAjJHtpfSAke3J9YCwgdmFsdWUsIG9yZGluYWxzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvdGhlclxuICAgKiBAcmV0dXJuIE9yZE91dHB1dCBleHRlbmRlZCBieSBvdGhlci52YWx1ZSBhbmQgU2F0UmFuZ2VzIHNoaWZ0ZWQgYnkgdGhpcy52YWx1ZVxuICAgKi9cbiAgam9pbmVkV2l0aChvdGhlcjogT3JkT3V0cHV0KTogT3JkT3V0cHV0IHtcbiAgICByZXR1cm4gbmV3IE9yZE91dHB1dCh0aGlzLnZhbHVlICsgb3RoZXIudmFsdWUsIFtcbiAgICAgIC4uLnRoaXMub3JkaW5hbHMsXG4gICAgICAuLi5vdGhlci5vcmRpbmFscy5tYXAoKHIpID0+IHIuc2hpZnRlZEJ5KHRoaXMudmFsdWUpKSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3Jkc1xuICAgKiBAcmV0dXJuIHNpbmdsZSBPcmRPdXRwdXQgY29udGFpbmluZyBhbGwgU2F0UmFuZ2VzLCBzaGlmdGVkIGJ5IHByZWNlZGluZyBvdXRwdXQgdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgam9pbkFsbChvcmRzOiBPcmRPdXRwdXRbXSk6IE9yZE91dHB1dCB7XG4gICAgaWYgKG9yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBlbXB0eSBpbnB1dGApO1xuICAgIH1cbiAgICByZXR1cm4gb3Jkcy5yZWR1Y2UoKGEsIGIpID0+IGEuam9pbmVkV2l0aChiKSk7XG4gIH1cblxuICBhc1NhdFJhbmdlKCk6IFNhdFJhbmdlIHtcbiAgICByZXR1cm4gbmV3IFNhdFJhbmdlKEJpZ0ludCgwKSwgdGhpcy52YWx1ZSAtIEJpZ0ludCgxKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHJcbiAgICogQHJldHVybiBuZXcgT3JkT3V0cHV0IHdpdGggYWxsIHJhbmdlcyBmdWxseSBjb250YWluZWQgaW4gX3JfLiBTYXRSYW5nZXMgYXJlIGFsaWduZWQgdG8gbmV3IHN0YXJ0LlxuICAgKi9cbiAgZnJvbVNhdFJhbmdlKHI6IFNhdFJhbmdlKTogT3JkT3V0cHV0IHtcbiAgICByZXR1cm4gbmV3IE9yZE91dHB1dChcbiAgICAgIHIuc2l6ZSgpLFxuICAgICAgdGhpcy5vcmRpbmFscy5mbGF0TWFwKChzKSA9PiB7XG4gICAgICAgIGlmIChyLmludGVyc2VjdHNXaXRoKHMpKSB7XG4gICAgICAgICAgaWYgKCFyLmlzU3VwZXJzZXRPZihzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXJ0aWFsIG92ZXJsYXAgaW4gJHtyfSBhbmQgJHtzfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcy5zaGlmdGVkQnkoLXIuc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHJldHVybiBmaXJzdCBPcmRPdXRwdXQgd2l0aCB2YWx1ZSBgdmFsdWVgLCBzZWNvbmQgT3JkT3V0cHV0IHdpdGggcmVtYWluaW5nIHZhbHVlLlxuICAgKiAgICAgICAgIFdpdGggcmVzcGVjdGl2ZSBTYXRSYW5nZXNcbiAgICovXG4gIHNwbGl0QXQodmFsdWU6IGJpZ2ludCk6IFtPcmRPdXRwdXQsIE9yZE91dHB1dF0ge1xuICAgIGlmICh0aGlzLnZhbHVlIDwgdmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBzcGxpdCBhdCB2YWx1ZSBpbnNpZGUgcmFuZ2VgKTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuZnJvbVNhdFJhbmdlKG5ldyBTYXRSYW5nZShCaWdJbnQoMCksIHZhbHVlIC0gQmlnSW50KDEpKSksXG4gICAgICB0aGlzLmZyb21TYXRSYW5nZShuZXcgU2F0UmFuZ2UodmFsdWUsIHRoaXMudmFsdWUgLSBCaWdJbnQoMSkpKSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIExpa2Ugc3BsaXRBdCBidXQgcmV0dXJucyBfbnVsbF8gd2hlcmUgYSB6ZXJvLXNpemVkIE9yZE91dHB1dCB3b3VsZCBiZVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHNwbGl0QXRBbGxvd1plcm8odmFsdWU6IGJpZ2ludCk6IFtPcmRPdXRwdXQgfCBudWxsLCBPcmRPdXRwdXQgfCBudWxsXSB7XG4gICAgaWYgKHZhbHVlID09PSBCaWdJbnQoMCkpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgdGhpcy5mcm9tU2F0UmFuZ2UodGhpcy5hc1NhdFJhbmdlKCkpXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnZhbHVlKSB7XG4gICAgICByZXR1cm4gW3RoaXMuZnJvbVNhdFJhbmdlKHRoaXMuYXNTYXRSYW5nZSgpKSwgbnVsbF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwbGl0QXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IG91dHB1dCBzdWNjZXNzaXZlbHkgYXQgdmFsdWVzLlxuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqIEBwYXJhbSBleGFjdCAtIHdoZW4gc2V0LCBlbnN1cmUgdGhhdCB2YWx1ZSBzdW0gbWF0Y2hlcyBfdGhpcy52YWx1ZV9cbiAgICogQHBhcmFtIGFsbG93WmVybyAtIHdoZW4gc2V0LCByZXR1cm4gX251bGxfIGZvciB6ZXJvLXNpemVkIHZhbHVlc1xuICAgKiBAcmV0dXJuIChPcmRPdXRwdXQgfCBudWxsKVtdLiBaZXJvLXNpemVkIG91dHB1dHMgYXJlIHN1YnN0aXR1dGVkIHdpdGggX251bGxfLlxuICAgKi9cbiAgc3BsaXRBbGxXaXRoUGFyYW1zKFxuICAgIHZhbHVlczogYmlnaW50W10sXG4gICAgeyBleGFjdCA9IGZhbHNlLCBhbGxvd1plcm8gPSBmYWxzZSB9OiB7IGFsbG93WmVybz86IGJvb2xlYW47IGV4YWN0PzogYm9vbGVhbiB9XG4gICk6IChPcmRPdXRwdXQgfCBudWxsKVtdIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFyZ3VtZW50YCk7XG4gICAgfVxuICAgIGlmIChleGFjdCkge1xuICAgICAgY29uc3QgdmFsdWVTdW0gPSB2YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgQmlnSW50KDApKTtcbiAgICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZVN1bSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlIHN1bSAke3ZhbHVlU3VtfSBkb2VzIG5vdCBtYXRjaCB0aGlzLnZhbHVlICR7dGhpcy52YWx1ZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNwbGl0QWxsV2l0aFBhcmFtcyh2YWx1ZXMuc2xpY2UoMCwgLTEpLCB7IGFsbG93WmVybywgZXhhY3Q6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBjb25zdCBbdiwgLi4ucmVzdF0gPSB2YWx1ZXM7XG4gICAgY29uc3QgW2EsIGJdID0gYWxsb3daZXJvID8gdGhpcy5zcGxpdEF0QWxsb3daZXJvKHYpIDogdGhpcy5zcGxpdEF0KHYpO1xuICAgIGlmIChyZXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHJlbWFpbmRlcmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFthLCAuLi5iLnNwbGl0QWxsV2l0aFBhcmFtcyhyZXN0LCB7IGV4YWN0LCBhbGxvd1plcm8gfSldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW2EsIGJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBvdXRwdXQgc3VjY2Vzc2l2ZWx5IGF0IHZhbHVlcy5cbiAgICogQHBhcmFtIHZhbHVlc1xuICAgKiBAcmV0dXJuIE9yZE91dHB1dFtdIHdpdGggbGVuZ3RoIF92YWx1ZXMubGVuZ3RoICsgMV9cbiAgICovXG4gIHNwbGl0QWxsKHZhbHVlczogYmlnaW50W10pOiBPcmRPdXRwdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3BsaXRBbGxXaXRoUGFyYW1zKHZhbHVlcywgeyBleGFjdDogZmFsc2UsIGFsbG93WmVybzogZmFsc2UgfSkgYXMgT3JkT3V0cHV0W107XG4gIH1cbn1cbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"OutputLayout.d.ts","sourceRoot":"","sources":["../../src/OutputLayout.ts"],"names":[],"mappings":"AAkGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAiBxC;;GAEG;AACH,aAAK,UAAU,CAAC,CAAC,IAAI;IACnB,+CAA+C;IAC/C,iBAAiB,EAAE,CAAC,CAAC;IACrB,qEAAqE;IACrE,iBAAiB,EAAE,CAAC,CAAC;IACrB,+CAA+C;IAC/C,kBAAkB,EAAE,CAAC,CAAC;IACtB,4DAA4D;IAC5D,SAAS,EAAE,CAAC,CAAC;CACd,CAAC;AAEF,+CAA+C;AAC/C,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAEzD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,iBAAiB,EAAE,CAAC,EACpB,iBAAiB,EAAE,CAAC,EACpB,kBAAkB,EAAE,CAAC,EACrB,SAAS,EAAE,CAAC,GACX,UAAU,CAAC,CAAC,CAAC,CAOf;AAED,+BAA+B;AAC/B,oBAAY,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,YAAY,GACnB,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,CAO9B;AA0BD;;GAEG;AACH,oBAAY,WAAW,GAAG;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AA2DF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,GAC5C,YAAY,GAAG,SAAS,CAkC1B"}