@livefolio/sdk 0.2.4 → 0.2.5
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/strategy/index.d.ts +2 -0
- package/dist/strategy/index.d.ts.map +1 -1
- package/dist/strategy/index.js +7 -1
- package/dist/strategy/index.js.map +1 -1
- package/dist/strategy/livefolio.d.ts +25 -0
- package/dist/strategy/livefolio.d.ts.map +1 -0
- package/dist/strategy/livefolio.js +67 -0
- package/dist/strategy/livefolio.js.map +1 -0
- package/package.json +1 -1
package/dist/strategy/index.d.ts
CHANGED
|
@@ -8,4 +8,6 @@ export { compileRules } from './rules';
|
|
|
8
8
|
export { evaluateIndicator, evaluateSignal, evaluateAllocation, evaluate, getEvaluationDate, indicatorKey, signalKey } from './evaluate';
|
|
9
9
|
export { extractSymbols, INDICATOR_SYMBOL_MAP } from './symbols';
|
|
10
10
|
export { utcToET, isAtMarketClose } from './time';
|
|
11
|
+
export { canonicalizeLivefolioDefinition, hashLivefolioDefinition, deriveLivefolioLinkId, hashLivefolioStrategyDraft, ensureLivefolioStrategy, } from './livefolio';
|
|
12
|
+
export type { LivefolioEnsureAdapter, LivefolioEnsureAdapterInput, LivefolioEnsureAdapterResult, } from './livefolio';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,SAAS,EACT,OAAO,EACP,MAAM,EACN,UAAU,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACzI,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,SAAS,EACT,OAAO,EACP,MAAM,EACN,UAAU,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACzI,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EACL,+BAA+B,EAC/B,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,aAAa,CAAC"}
|
package/dist/strategy/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isAtMarketClose = exports.utcToET = exports.INDICATOR_SYMBOL_MAP = exports.extractSymbols = exports.signalKey = exports.indicatorKey = exports.getEvaluationDate = exports.evaluate = exports.evaluateAllocation = exports.evaluateSignal = exports.evaluateIndicator = exports.compileRules = exports.backtestRulesWithMarketData = exports.backtestWithMarketData = exports.backtest = exports.stream = exports.evaluateCached = exports.getMany = exports.get = exports.createStrategy = void 0;
|
|
3
|
+
exports.ensureLivefolioStrategy = exports.hashLivefolioStrategyDraft = exports.deriveLivefolioLinkId = exports.hashLivefolioDefinition = exports.canonicalizeLivefolioDefinition = exports.isAtMarketClose = exports.utcToET = exports.INDICATOR_SYMBOL_MAP = exports.extractSymbols = exports.signalKey = exports.indicatorKey = exports.getEvaluationDate = exports.evaluate = exports.evaluateAllocation = exports.evaluateSignal = exports.evaluateIndicator = exports.compileRules = exports.backtestRulesWithMarketData = exports.backtestWithMarketData = exports.backtest = exports.stream = exports.evaluateCached = exports.getMany = exports.get = exports.createStrategy = void 0;
|
|
4
4
|
var client_1 = require("./client");
|
|
5
5
|
Object.defineProperty(exports, "createStrategy", { enumerable: true, get: function () { return client_1.createStrategy; } });
|
|
6
6
|
var get_1 = require("./get");
|
|
@@ -30,4 +30,10 @@ Object.defineProperty(exports, "INDICATOR_SYMBOL_MAP", { enumerable: true, get:
|
|
|
30
30
|
var time_1 = require("./time");
|
|
31
31
|
Object.defineProperty(exports, "utcToET", { enumerable: true, get: function () { return time_1.utcToET; } });
|
|
32
32
|
Object.defineProperty(exports, "isAtMarketClose", { enumerable: true, get: function () { return time_1.isAtMarketClose; } });
|
|
33
|
+
var livefolio_1 = require("./livefolio");
|
|
34
|
+
Object.defineProperty(exports, "canonicalizeLivefolioDefinition", { enumerable: true, get: function () { return livefolio_1.canonicalizeLivefolioDefinition; } });
|
|
35
|
+
Object.defineProperty(exports, "hashLivefolioDefinition", { enumerable: true, get: function () { return livefolio_1.hashLivefolioDefinition; } });
|
|
36
|
+
Object.defineProperty(exports, "deriveLivefolioLinkId", { enumerable: true, get: function () { return livefolio_1.deriveLivefolioLinkId; } });
|
|
37
|
+
Object.defineProperty(exports, "hashLivefolioStrategyDraft", { enumerable: true, get: function () { return livefolio_1.hashLivefolioStrategyDraft; } });
|
|
38
|
+
Object.defineProperty(exports, "ensureLivefolioStrategy", { enumerable: true, get: function () { return livefolio_1.ensureLivefolioStrategy; } });
|
|
33
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":";;;AA2CA,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,6BAAqC;AAA5B,0FAAA,GAAG,OAAA;AAAE,8FAAA,OAAO,OAAA;AACrB,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AACvB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,uCAA2F;AAAlF,oGAAA,QAAQ,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AACtE,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,uCAAyI;AAAhI,6GAAA,iBAAiB,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,qGAAA,SAAS,OAAA;AACpH,qCAAiE;AAAxD,yGAAA,cAAc,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAC7C,+BAAkD;AAAzC,+FAAA,OAAO,OAAA;AAAE,uGAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":";;;AA2CA,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,6BAAqC;AAA5B,0FAAA,GAAG,OAAA;AAAE,8FAAA,OAAO,OAAA;AACrB,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AACvB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,uCAA2F;AAAlF,oGAAA,QAAQ,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AACtE,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,uCAAyI;AAAhI,6GAAA,iBAAiB,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,qGAAA,SAAS,OAAA;AACpH,qCAAiE;AAAxD,yGAAA,cAAc,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAC7C,+BAAkD;AAAzC,+FAAA,OAAO,OAAA;AAAE,uGAAA,eAAe,OAAA;AAEjC,yCAMqB;AALnB,4HAAA,+BAA+B,OAAA;AAC/B,oHAAA,uBAAuB,OAAA;AACvB,kHAAA,qBAAqB,OAAA;AACrB,uHAAA,0BAA0B,OAAA;AAC1B,oHAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { StrategyDraft } from './types';
|
|
2
|
+
export type CanonicalJson = string | number | boolean | null | CanonicalJson[] | {
|
|
3
|
+
[key: string]: CanonicalJson;
|
|
4
|
+
};
|
|
5
|
+
export interface LivefolioEnsureAdapterInput<TDefinition extends CanonicalJson> {
|
|
6
|
+
definition: TDefinition;
|
|
7
|
+
definitionHash: string;
|
|
8
|
+
linkId: string;
|
|
9
|
+
}
|
|
10
|
+
export interface LivefolioEnsureAdapterResult {
|
|
11
|
+
strategyId: number;
|
|
12
|
+
linkId: string;
|
|
13
|
+
created: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface LivefolioEnsureAdapter<TDefinition extends CanonicalJson> {
|
|
16
|
+
ensureStrategy(input: LivefolioEnsureAdapterInput<TDefinition>): Promise<LivefolioEnsureAdapterResult>;
|
|
17
|
+
}
|
|
18
|
+
export declare function canonicalizeLivefolioDefinition<TDefinition extends CanonicalJson>(definition: TDefinition): CanonicalJson;
|
|
19
|
+
export declare function hashLivefolioDefinition<TDefinition extends CanonicalJson>(definition: TDefinition): string;
|
|
20
|
+
export declare function deriveLivefolioLinkId(definitionHash: string): string;
|
|
21
|
+
export declare function hashLivefolioStrategyDraft(draft: StrategyDraft): string;
|
|
22
|
+
export declare function ensureLivefolioStrategy<TDefinition extends CanonicalJson>(definition: TDefinition, adapter: LivefolioEnsureAdapter<TDefinition>): Promise<LivefolioEnsureAdapterResult & {
|
|
23
|
+
definitionHash: string;
|
|
24
|
+
}>;
|
|
25
|
+
//# sourceMappingURL=livefolio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"livefolio.d.ts","sourceRoot":"","sources":["../../src/strategy/livefolio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,aAAa,EAAE,GACf;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,2BAA2B,CAAC,WAAW,SAAS,aAAa;IAC5E,UAAU,EAAE,WAAW,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB,CAAC,WAAW,SAAS,aAAa;IACvE,cAAc,CAAC,KAAK,EAAE,2BAA2B,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;CACxG;AAkCD,wBAAgB,+BAA+B,CAAC,WAAW,SAAS,aAAa,EAC/E,UAAU,EAAE,WAAW,GACtB,aAAa,CAEf;AAED,wBAAgB,uBAAuB,CAAC,WAAW,SAAS,aAAa,EAAE,UAAU,EAAE,WAAW,GAAG,MAAM,CAG1G;AAED,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAEvE;AAED,wBAAsB,uBAAuB,CAAC,WAAW,SAAS,aAAa,EAC7E,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,sBAAsB,CAAC,WAAW,CAAC,GAC3C,OAAO,CAAC,4BAA4B,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAcpE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canonicalizeLivefolioDefinition = canonicalizeLivefolioDefinition;
|
|
4
|
+
exports.hashLivefolioDefinition = hashLivefolioDefinition;
|
|
5
|
+
exports.deriveLivefolioLinkId = deriveLivefolioLinkId;
|
|
6
|
+
exports.hashLivefolioStrategyDraft = hashLivefolioStrategyDraft;
|
|
7
|
+
exports.ensureLivefolioStrategy = ensureLivefolioStrategy;
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
function normalizeCanonical(value) {
|
|
10
|
+
if (value === null)
|
|
11
|
+
return null;
|
|
12
|
+
if (typeof value === 'string' || typeof value === 'boolean') {
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
if (typeof value === 'number') {
|
|
16
|
+
if (!Number.isFinite(value)) {
|
|
17
|
+
throw new Error('Livefolio definition cannot include non-finite numbers.');
|
|
18
|
+
}
|
|
19
|
+
return Object.is(value, -0) ? 0 : value;
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(value)) {
|
|
22
|
+
return value.map((item) => normalizeCanonical(item));
|
|
23
|
+
}
|
|
24
|
+
if (typeof value === 'object') {
|
|
25
|
+
const obj = value;
|
|
26
|
+
const out = {};
|
|
27
|
+
for (const key of Object.keys(obj).sort()) {
|
|
28
|
+
const next = obj[key];
|
|
29
|
+
if (next === undefined)
|
|
30
|
+
continue;
|
|
31
|
+
out[key] = normalizeCanonical(next);
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
throw new Error(`Unsupported value in livefolio definition: ${String(value)}`);
|
|
36
|
+
}
|
|
37
|
+
function canonicalizeLivefolioDefinition(definition) {
|
|
38
|
+
return normalizeCanonical(definition);
|
|
39
|
+
}
|
|
40
|
+
function hashLivefolioDefinition(definition) {
|
|
41
|
+
const canonical = canonicalizeLivefolioDefinition(definition);
|
|
42
|
+
return (0, crypto_1.createHash)('sha256').update(JSON.stringify(canonical)).digest('hex');
|
|
43
|
+
}
|
|
44
|
+
function deriveLivefolioLinkId(definitionHash) {
|
|
45
|
+
if (!definitionHash || definitionHash.length < 12) {
|
|
46
|
+
throw new Error('definitionHash must be at least 12 characters.');
|
|
47
|
+
}
|
|
48
|
+
return `lf-${definitionHash.slice(0, 12)}`;
|
|
49
|
+
}
|
|
50
|
+
function hashLivefolioStrategyDraft(draft) {
|
|
51
|
+
return hashLivefolioDefinition(draft);
|
|
52
|
+
}
|
|
53
|
+
async function ensureLivefolioStrategy(definition, adapter) {
|
|
54
|
+
const canonical = canonicalizeLivefolioDefinition(definition);
|
|
55
|
+
const definitionHash = hashLivefolioDefinition(canonical);
|
|
56
|
+
const linkId = deriveLivefolioLinkId(definitionHash);
|
|
57
|
+
const result = await adapter.ensureStrategy({
|
|
58
|
+
definition: canonical,
|
|
59
|
+
definitionHash,
|
|
60
|
+
linkId,
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
...result,
|
|
64
|
+
definitionHash,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=livefolio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"livefolio.js","sourceRoot":"","sources":["../../src/strategy/livefolio.ts"],"names":[],"mappings":";;AA2DA,0EAIC;AAED,0DAGC;AAED,sDAKC;AAED,gEAEC;AAED,0DAiBC;AAlGD,mCAAoC;AA2BpC,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,GAAG,GAAkC,EAAE,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YACjC,GAAG,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAgB,+BAA+B,CAC7C,UAAuB;IAEvB,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,uBAAuB,CAAoC,UAAuB;IAChG,MAAM,SAAS,GAAG,+BAA+B,CAAC,UAAU,CAAC,CAAC;IAC9D,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,qBAAqB,CAAC,cAAsB;IAC1D,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,SAAgB,0BAA0B,CAAC,KAAoB;IAC7D,OAAO,uBAAuB,CAAC,KAAiC,CAAC,CAAC;AACpE,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,UAAuB,EACvB,OAA4C;IAE5C,MAAM,SAAS,GAAG,+BAA+B,CAAC,UAAU,CAAgB,CAAC;IAC7E,MAAM,cAAc,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC;QAC1C,UAAU,EAAE,SAAS;QACrB,cAAc;QACd,MAAM;KACP,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,MAAM;QACT,cAAc;KACf,CAAC;AACJ,CAAC"}
|