field-redactor 1.2.0 → 1.5.0
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/.github/workflows/ci.yml +38 -0
- package/CHANGELOG.md +156 -0
- package/README.md +64 -670
- package/dist/configValidator.d.ts +10 -0
- package/dist/configValidator.d.ts.map +1 -0
- package/dist/configValidator.js +94 -0
- package/dist/configValidator.js.map +1 -0
- package/dist/copyOnWriteHelpers.d.ts +20 -0
- package/dist/copyOnWriteHelpers.d.ts.map +1 -0
- package/dist/copyOnWriteHelpers.js +58 -0
- package/dist/copyOnWriteHelpers.js.map +1 -0
- package/dist/customObjectManager.d.ts +13 -7
- package/dist/customObjectManager.d.ts.map +1 -1
- package/dist/customObjectManager.js +30 -29
- package/dist/customObjectManager.js.map +1 -1
- package/dist/dryRun.d.ts +8 -0
- package/dist/dryRun.d.ts.map +1 -0
- package/dist/dryRun.js +75 -0
- package/dist/dryRun.js.map +1 -0
- package/dist/dryRunAttribution.d.ts +8 -0
- package/dist/dryRunAttribution.d.ts.map +1 -0
- package/dist/dryRunAttribution.js +106 -0
- package/dist/dryRunAttribution.js.map +1 -0
- package/dist/fieldRedactor.d.ts +43 -5
- package/dist/fieldRedactor.d.ts.map +1 -1
- package/dist/fieldRedactor.js +124 -24
- package/dist/fieldRedactor.js.map +1 -1
- package/dist/fieldRedactorConfigBuilder.d.ts +49 -0
- package/dist/fieldRedactorConfigBuilder.d.ts.map +1 -0
- package/dist/fieldRedactorConfigBuilder.js +98 -0
- package/dist/fieldRedactorConfigBuilder.js.map +1 -0
- package/dist/fieldRedactorDeps.d.ts +17 -0
- package/dist/fieldRedactorDeps.d.ts.map +1 -0
- package/dist/fieldRedactorDeps.js +41 -0
- package/dist/fieldRedactorDeps.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/jsonWalk.d.ts +11 -0
- package/dist/jsonWalk.d.ts.map +1 -0
- package/dist/jsonWalk.js +86 -0
- package/dist/jsonWalk.js.map +1 -0
- package/dist/objectRedactor.d.ts +9 -34
- package/dist/objectRedactor.d.ts.map +1 -1
- package/dist/objectRedactor.js +11 -298
- package/dist/objectRedactor.js.map +1 -1
- package/dist/objectRedactorCow.d.ts +35 -0
- package/dist/objectRedactorCow.d.ts.map +1 -0
- package/dist/objectRedactorCow.js +300 -0
- package/dist/objectRedactorCow.js.map +1 -0
- package/dist/objectRedactorCustomObject.d.ts +49 -0
- package/dist/objectRedactorCustomObject.d.ts.map +1 -0
- package/dist/objectRedactorCustomObject.js +138 -0
- package/dist/objectRedactorCustomObject.js.map +1 -0
- package/dist/objectRedactorHelpers.d.ts +9 -0
- package/dist/objectRedactorHelpers.d.ts.map +1 -0
- package/dist/objectRedactorHelpers.js +58 -0
- package/dist/objectRedactorHelpers.js.map +1 -0
- package/dist/objectRedactorMutation.d.ts +10 -0
- package/dist/objectRedactorMutation.d.ts.map +1 -0
- package/dist/objectRedactorMutation.js +89 -0
- package/dist/objectRedactorMutation.js.map +1 -0
- package/dist/objectRedactorSync.d.ts +2 -0
- package/dist/objectRedactorSync.d.ts.map +1 -0
- package/dist/objectRedactorSync.js +7 -0
- package/dist/objectRedactorSync.js.map +1 -0
- package/dist/objectRedactorTraversal.d.ts +57 -0
- package/dist/objectRedactorTraversal.d.ts.map +1 -0
- package/dist/objectRedactorTraversal.js +576 -0
- package/dist/objectRedactorTraversal.js.map +1 -0
- package/dist/presets.d.ts +22 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +50 -0
- package/dist/presets.js.map +1 -0
- package/dist/primitiveRedactor.d.ts +13 -8
- package/dist/primitiveRedactor.d.ts.map +1 -1
- package/dist/primitiveRedactor.js +32 -27
- package/dist/primitiveRedactor.js.map +1 -1
- package/dist/redactionRules.d.ts +23 -0
- package/dist/redactionRules.d.ts.map +1 -0
- package/dist/redactionRules.js +76 -0
- package/dist/redactionRules.js.map +1 -0
- package/dist/regexUtils.d.ts +3 -0
- package/dist/regexUtils.d.ts.map +1 -0
- package/dist/regexUtils.js +8 -0
- package/dist/regexUtils.js.map +1 -0
- package/dist/secretManager.d.ts +12 -6
- package/dist/secretManager.d.ts.map +1 -1
- package/dist/secretManager.js +40 -14
- package/dist/secretManager.js.map +1 -1
- package/dist/types.d.ts +103 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -1
- package/dist/types.js.map +1 -1
- package/dist/valuePatternMatcher.d.ts +15 -0
- package/dist/valuePatternMatcher.d.ts.map +1 -0
- package/dist/valuePatternMatcher.js +30 -0
- package/dist/valuePatternMatcher.js.map +1 -0
- package/docs/guides/anti-patterns.md +107 -0
- package/docs/guides/metadata-redaction.md +112 -0
- package/docs/guides/migration-1.2-to-1.5.md +106 -0
- package/docs/guides/secret-key-modes.md +108 -0
- package/docs/guides/value-pattern-redaction.md +58 -0
- package/docs/reference/config.md +135 -0
- package/docs/release-notes/2.0.0.md +19 -0
- package/docs/release-notes/2.1.0.md +17 -0
- package/docs/release-notes/2.2.0.md +16 -0
- package/docs/release-notes/2.3.0.md +17 -0
- package/docs/release-notes/2.3.1.md +17 -0
- package/docs/release-notes/2.4.0.md +30 -0
- package/docs/release-notes/2.5.0.md +33 -0
- package/docs/release-notes/2.5.1.md +17 -0
- package/docs/release-notes/README.md +30 -0
- package/docs/release-notes/v1.0.0.md +17 -0
- package/docs/release-notes/v1.1.0.md +18 -0
- package/docs/release-notes/v1.2.0.md +18 -0
- package/docs/release-notes/v1.2.1.md +16 -0
- package/docs/release-notes/v1.2.2.md +19 -0
- package/docs/release-notes/v1.3.0.md +112 -0
- package/docs/release-notes/v1.5.0.md +88 -0
- package/jest.config.js +4 -1
- package/package.json +3 -3
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createContainerMutation = void 0;
|
|
4
|
+
const createObjectCopyState = (source) => ({
|
|
5
|
+
source,
|
|
6
|
+
current: source,
|
|
7
|
+
copied: false
|
|
8
|
+
});
|
|
9
|
+
const createArrayCopyState = (source) => ({
|
|
10
|
+
source,
|
|
11
|
+
current: source,
|
|
12
|
+
copied: false
|
|
13
|
+
});
|
|
14
|
+
const finishObjectCopy = (state) => state.copied ? state.current : state.source;
|
|
15
|
+
const finishArrayCopy = (state) => state.copied ? state.current : state.source;
|
|
16
|
+
const ensureObjectCopy = (state) => {
|
|
17
|
+
if (!state.copied) {
|
|
18
|
+
state.current = Object.assign({}, state.source);
|
|
19
|
+
state.copied = true;
|
|
20
|
+
}
|
|
21
|
+
return state.current;
|
|
22
|
+
};
|
|
23
|
+
const ensureArrayCopy = (state) => {
|
|
24
|
+
if (!state.copied) {
|
|
25
|
+
state.current = state.source.slice();
|
|
26
|
+
state.copied = true;
|
|
27
|
+
}
|
|
28
|
+
return state.current;
|
|
29
|
+
};
|
|
30
|
+
const createContainerMutation = (source, copyOnWrite) => {
|
|
31
|
+
if (!copyOnWrite) {
|
|
32
|
+
const record = source;
|
|
33
|
+
return {
|
|
34
|
+
copyOnWrite: false,
|
|
35
|
+
source,
|
|
36
|
+
set(key, value) {
|
|
37
|
+
record[key] = value;
|
|
38
|
+
},
|
|
39
|
+
remove(key) {
|
|
40
|
+
delete record[key];
|
|
41
|
+
},
|
|
42
|
+
result() {
|
|
43
|
+
return source;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (Array.isArray(source)) {
|
|
48
|
+
const state = createArrayCopyState(source);
|
|
49
|
+
return {
|
|
50
|
+
copyOnWrite: true,
|
|
51
|
+
source,
|
|
52
|
+
set(key, value) {
|
|
53
|
+
const index = Number(key);
|
|
54
|
+
if (source[index] !== value) {
|
|
55
|
+
ensureArrayCopy(state)[index] = value;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
remove(key) {
|
|
59
|
+
const index = Number(key);
|
|
60
|
+
if (index < source.length) {
|
|
61
|
+
delete ensureArrayCopy(state)[index];
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
result() {
|
|
65
|
+
return finishArrayCopy(state);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const state = createObjectCopyState(source);
|
|
70
|
+
return {
|
|
71
|
+
copyOnWrite: true,
|
|
72
|
+
source,
|
|
73
|
+
set(key, value) {
|
|
74
|
+
if (source[key] !== value) {
|
|
75
|
+
ensureObjectCopy(state)[key] = value;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
remove(key) {
|
|
79
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
80
|
+
delete ensureObjectCopy(state)[key];
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
result() {
|
|
84
|
+
return finishObjectCopy(state);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
exports.createContainerMutation = createContainerMutation;
|
|
89
|
+
//# sourceMappingURL=objectRedactorMutation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectRedactorMutation.js","sourceRoot":"","sources":["../src/objectRedactorMutation.ts"],"names":[],"mappings":";;;AAsBA,MAAM,qBAAqB,GAAG,CAAuB,MAAS,EAAsB,EAAE,CAAC,CAAC;IACtF,MAAM;IACN,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;CACd,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAsB,MAAS,EAAqB,EAAE,CAAC,CAAC;IACnF,MAAM;IACN,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;CACd,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAuB,KAAyB,EAAK,EAAE,CAC9E,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAE9C,MAAM,eAAe,GAAG,CAAsB,KAAwB,EAAK,EAAE,CAC3E,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAE9C,MAAM,gBAAgB,GAAG,CAAuB,KAAyB,EAAc,EAAE;IACvF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,OAAO,qBAAQ,KAAK,CAAC,MAAM,CAAE,CAAC;QACpC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAsB,KAAwB,EAAa,EAAE;IACnF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAO,CAAC;QAC1C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC;AAEK,MAAM,uBAAuB,GAAG,CACrC,MAAS,EACT,WAAoB,EACE,EAAE;IACxB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAoB,CAAC;QACpC,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,MAAM;YACN,GAAG,CAAC,GAAG,EAAE,KAAK;gBACZ,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;YACD,MAAM,CAAC,GAAG;gBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,MAAM;gBACJ,OAAO,MAAM,CAAC;YAChB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,MAAM;YACN,GAAG,CAAC,GAAG,EAAE,KAAK;gBACZ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC5B,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBACxC,CAAC;YACH,CAAC;YACD,MAAM,CAAC,GAAG;gBACR,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC1B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,MAAM;gBACJ,OAAO,eAAe,CAAC,KAAK,CAAM,CAAC;YACrC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,MAAM;QACN,GAAG,CAAC,GAAG,EAAE,KAAK;YACZ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC1B,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvC,CAAC;QACH,CAAC;QACD,MAAM,CAAC,GAAG;YACR,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;gBACtD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,MAAM;YACJ,OAAO,gBAAgB,CAAC,KAAK,CAAM,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AA9DW,QAAA,uBAAuB,2BA8DlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectRedactorSync.d.ts","sourceRoot":"","sources":["../src/objectRedactorSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,IAAI,2BAA2B,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObjectRedactorSyncTraversal = exports.ObjectRedactorTraversal = void 0;
|
|
4
|
+
var objectRedactorTraversal_1 = require("./objectRedactorTraversal");
|
|
5
|
+
Object.defineProperty(exports, "ObjectRedactorTraversal", { enumerable: true, get: function () { return objectRedactorTraversal_1.ObjectRedactorTraversal; } });
|
|
6
|
+
Object.defineProperty(exports, "ObjectRedactorSyncTraversal", { enumerable: true, get: function () { return objectRedactorTraversal_1.ObjectRedactorTraversal; } });
|
|
7
|
+
//# sourceMappingURL=objectRedactorSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectRedactorSync.js","sourceRoot":"","sources":["../src/objectRedactorSync.ts"],"names":[],"mappings":";;;AAAA,qEAA4H;AAAnH,kIAAA,uBAAuB,OAAA;AAAE,sIAAA,uBAAuB,OAA+B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { TraversableJson } from './types';
|
|
2
|
+
import { SecretManager } from './secretManager';
|
|
3
|
+
import { CustomObjectManager } from './customObjectManager';
|
|
4
|
+
import { PrimitiveRedactor } from './primitiveRedactor';
|
|
5
|
+
import { ValuePatternMatcher } from './valuePatternMatcher';
|
|
6
|
+
/**
|
|
7
|
+
* Unified JSON traversal for in-place and copy-on-write redaction.
|
|
8
|
+
* Sync paths avoid Promise allocation; async paths use the same ContainerMutation adapter.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ObjectRedactorTraversal {
|
|
11
|
+
private readonly primitiveRedactor;
|
|
12
|
+
private readonly secretManager;
|
|
13
|
+
private readonly customObjManager;
|
|
14
|
+
private readonly valuePatternMatcher;
|
|
15
|
+
constructor(primitiveRedactor: PrimitiveRedactor, secretManager: SecretManager, customObjManager: CustomObjectManager, valuePatternMatcher: ValuePatternMatcher);
|
|
16
|
+
usesAsyncRedactor(): boolean;
|
|
17
|
+
redactInPlace<T extends TraversableJson>(value: T): T;
|
|
18
|
+
redactCopyOnWrite<T extends TraversableJson>(value: T): T;
|
|
19
|
+
redactInPlaceAsync<T extends TraversableJson>(value: T): Promise<T>;
|
|
20
|
+
private redact;
|
|
21
|
+
private redactSecretFields;
|
|
22
|
+
private redactArrayInObject;
|
|
23
|
+
private redactObjectsInArray;
|
|
24
|
+
private redactAllArrayValues;
|
|
25
|
+
private redactNestedObject;
|
|
26
|
+
private handleCustomObject;
|
|
27
|
+
private handleCustomObjectValueIfArray;
|
|
28
|
+
private handleCustomObjectArrayValueIfStringKeySpecified;
|
|
29
|
+
private handleCustomObjectArrayValueIfMatchTypeSpecified;
|
|
30
|
+
private handleCustomObjectValueIfObject;
|
|
31
|
+
private handleCustomObjectObjectValueIfStringKeySpecified;
|
|
32
|
+
private handleCustomObjectObjectValueIfMatchTypeSpecified;
|
|
33
|
+
private handleCustomObjectValueIfPrimitive;
|
|
34
|
+
private handleCustomObjectPrimitiveValueIfMatchTypeSpecified;
|
|
35
|
+
private handleCustomObjectPrimitiveValueIfStringKeySpecified;
|
|
36
|
+
private redactPrimitiveValueIfSecret;
|
|
37
|
+
private redactPrimitive;
|
|
38
|
+
private redactAsync;
|
|
39
|
+
private redactSecretFieldsAsync;
|
|
40
|
+
private redactArrayInObjectAsync;
|
|
41
|
+
private redactObjectsInArrayAsync;
|
|
42
|
+
private redactAllArrayValuesAsync;
|
|
43
|
+
private redactNestedObjectAsync;
|
|
44
|
+
private handleCustomObjectAsync;
|
|
45
|
+
private handleCustomObjectValueIfArrayAsync;
|
|
46
|
+
private handleCustomObjectArrayValueIfStringKeySpecifiedAsync;
|
|
47
|
+
private handleCustomObjectArrayValueIfMatchTypeSpecifiedAsync;
|
|
48
|
+
private handleCustomObjectValueIfObjectAsync;
|
|
49
|
+
private handleCustomObjectObjectValueIfStringKeySpecifiedAsync;
|
|
50
|
+
private handleCustomObjectObjectValueIfMatchTypeSpecifiedAsync;
|
|
51
|
+
private handleCustomObjectValueIfPrimitiveAsync;
|
|
52
|
+
private handleCustomObjectPrimitiveValueIfMatchTypeSpecifiedAsync;
|
|
53
|
+
private handleCustomObjectPrimitiveValueIfStringKeySpecifiedAsync;
|
|
54
|
+
private redactPrimitiveValueIfSecretAsync;
|
|
55
|
+
private redactPrimitiveAsync;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=objectRedactorTraversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectRedactorTraversal.d.ts","sourceRoot":"","sources":["../src/objectRedactorTraversal.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,eAAe,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAiB5D;;;GAGG;AACH,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAHnB,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,mBAAmB,EACrC,mBAAmB,EAAE,mBAAmB;IAG3D,iBAAiB,IAAI,OAAO;IAI5B,aAAa,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAIrD,iBAAiB,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAIzD,kBAAkB,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAInE,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,8BAA8B;IAStC,OAAO,CAAC,gDAAgD;IAsBxD,OAAO,CAAC,gDAAgD;IAqBxD,OAAO,CAAC,+BAA+B;IASvC,OAAO,CAAC,iDAAiD;IA8BzD,OAAO,CAAC,iDAAiD;IA2BzD,OAAO,CAAC,kCAAkC;IAkB1C,OAAO,CAAC,oDAAoD;IAa5D,OAAO,CAAC,oDAAoD;IAe5D,OAAO,CAAC,4BAA4B;IAepC,OAAO,CAAC,eAAe;YAIT,WAAW;YAYX,uBAAuB;YA6BvB,wBAAwB;YAcxB,yBAAyB;YAoBzB,yBAAyB;YA6BzB,uBAAuB;YAkBvB,uBAAuB;YAgBvB,mCAAmC;YAiBnC,qDAAqD;YAyBrD,qDAAqD;YAuBrD,oCAAoC;YAiBpC,sDAAsD;YA8BtD,sDAAsD;YA2BtD,uCAAuC;YAkBvC,yDAAyD;YAezD,yDAAyD;YAezD,iCAAiC;IAe/C,OAAO,CAAC,oBAAoB;CAG7B"}
|