@sentio/runtime 2.39.7-rc.8 → 2.40.0-rc.1

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 (96) hide show
  1. package/lib/chunk-LMUCLUM5.js +78161 -0
  2. package/lib/index.d.ts +308 -9
  3. package/lib/index.js +92 -9
  4. package/lib/processor-runner.d.ts +0 -2
  5. package/lib/processor-runner.js +51457 -129
  6. package/package.json +5 -25
  7. package/src/db-context.ts +165 -7
  8. package/src/gen/processor/protos/processor.ts +361 -1
  9. package/src/plugin.ts +30 -4
  10. package/src/processor-runner.ts +26 -2
  11. package/src/provider.ts +166 -0
  12. package/src/service.ts +147 -28
  13. package/src/tsup.config.ts +14 -0
  14. package/lib/chain-config.d.ts +0 -6
  15. package/lib/chain-config.d.ts.map +0 -1
  16. package/lib/chain-config.js +0 -2
  17. package/lib/chain-config.js.map +0 -1
  18. package/lib/db-context.d.ts +0 -16
  19. package/lib/db-context.d.ts.map +0 -1
  20. package/lib/db-context.js +0 -56
  21. package/lib/db-context.js.map +0 -1
  22. package/lib/decode-benchmark.d.ts +0 -3
  23. package/lib/decode-benchmark.d.ts.map +0 -1
  24. package/lib/decode-benchmark.js +0 -20
  25. package/lib/decode-benchmark.js.map +0 -1
  26. package/lib/endpoints.d.ts +0 -9
  27. package/lib/endpoints.d.ts.map +0 -1
  28. package/lib/endpoints.js +0 -9
  29. package/lib/endpoints.js.map +0 -1
  30. package/lib/full-service.d.ts +0 -655
  31. package/lib/full-service.d.ts.map +0 -1
  32. package/lib/full-service.js +0 -137
  33. package/lib/full-service.js.map +0 -1
  34. package/lib/gen/google/protobuf/empty.d.ts +0 -17
  35. package/lib/gen/google/protobuf/empty.d.ts.map +0 -1
  36. package/lib/gen/google/protobuf/empty.js +0 -40
  37. package/lib/gen/google/protobuf/empty.js.map +0 -1
  38. package/lib/gen/google/protobuf/struct.d.ts +0 -77
  39. package/lib/gen/google/protobuf/struct.d.ts.map +0 -1
  40. package/lib/gen/google/protobuf/struct.js +0 -429
  41. package/lib/gen/google/protobuf/struct.js.map +0 -1
  42. package/lib/gen/google/protobuf/timestamp.d.ts +0 -19
  43. package/lib/gen/google/protobuf/timestamp.d.ts.map +0 -1
  44. package/lib/gen/google/protobuf/timestamp.js +0 -83
  45. package/lib/gen/google/protobuf/timestamp.js.map +0 -1
  46. package/lib/gen/processor/protos/processor.d.ts +0 -1470
  47. package/lib/gen/processor/protos/processor.d.ts.map +0 -1
  48. package/lib/gen/processor/protos/processor.js +0 -8512
  49. package/lib/gen/processor/protos/processor.js.map +0 -1
  50. package/lib/gen/service/common/protos/common.d.ts +0 -1698
  51. package/lib/gen/service/common/protos/common.d.ts.map +0 -1
  52. package/lib/gen/service/common/protos/common.js +0 -11383
  53. package/lib/gen/service/common/protos/common.js.map +0 -1
  54. package/lib/global-config.d.ts +0 -8
  55. package/lib/global-config.d.ts.map +0 -1
  56. package/lib/global-config.js +0 -23
  57. package/lib/global-config.js.map +0 -1
  58. package/lib/global-config.test.d.ts +0 -2
  59. package/lib/global-config.test.d.ts.map +0 -1
  60. package/lib/global-config.test.js.map +0 -1
  61. package/lib/index.d.ts.map +0 -1
  62. package/lib/index.js.map +0 -1
  63. package/lib/logger.d.ts +0 -2
  64. package/lib/logger.d.ts.map +0 -1
  65. package/lib/logger.js +0 -39
  66. package/lib/logger.js.map +0 -1
  67. package/lib/logger.test.d.ts +0 -2
  68. package/lib/logger.test.d.ts.map +0 -1
  69. package/lib/logger.test.js.map +0 -1
  70. package/lib/plugin.d.ts +0 -29
  71. package/lib/plugin.d.ts.map +0 -1
  72. package/lib/plugin.js +0 -58
  73. package/lib/plugin.js.map +0 -1
  74. package/lib/processor-runner.d.ts.map +0 -1
  75. package/lib/processor-runner.js.map +0 -1
  76. package/lib/seq-mode.test.d.ts +0 -3
  77. package/lib/seq-mode.test.d.ts.map +0 -1
  78. package/lib/seq-mode.test.js.map +0 -1
  79. package/lib/service.d.ts +0 -179
  80. package/lib/service.d.ts.map +0 -1
  81. package/lib/service.js +0 -179
  82. package/lib/service.js.map +0 -1
  83. package/lib/service.test.d.ts +0 -3
  84. package/lib/service.test.d.ts.map +0 -1
  85. package/lib/service.test.js.map +0 -1
  86. package/lib/state-storage.test.d.ts +0 -2
  87. package/lib/state-storage.test.d.ts.map +0 -1
  88. package/lib/state-storage.test.js.map +0 -1
  89. package/lib/state.d.ts +0 -23
  90. package/lib/state.d.ts.map +0 -1
  91. package/lib/state.js +0 -61
  92. package/lib/state.js.map +0 -1
  93. package/lib/utils.d.ts +0 -6
  94. package/lib/utils.d.ts.map +0 -1
  95. package/lib/utils.js +0 -23
  96. package/lib/utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.test.js","sourceRoot":"","sources":["../src/service.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,OAAO,EAAe,WAAW,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAC7F,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,MAAM,CAAC,MAAM,YAAY,GAA6B,EAAE,CAAA;AAExD,gBAAgB;AAChB,IAAI,WAAwB,CAAA;AAE5B,MAAM,UAAW,SAAQ,MAAM;IAC7B,KAAK,CAAC,cAAc,CAAC,OAAoB;QACvC,WAAW,GAAG,OAAO,CAAA;QACrB,OAAO,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC;IACD,iBAAiB,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CACjE;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,KAAK,IAAI,EAAE;QACtD,aAAa,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAA;QACnC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC,WAAW,CAAC,CAAA;IAEzD,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,QAAQ,GAAgB;YAC5B,IAAI,EAAE;gBACJ,GAAG,EAAE,IAAI,UAAU,EAAE;gBACrB,QAAQ,EAAE;oBACR,KAAK,EAAE;wBACL,MAAM,EAAE,KAAK;qBACd;iBACF;aACF;YACD,WAAW,EAAE,WAAW,CAAC,OAAO;YAChC,UAAU,EAAE,CAAC,CAAC,CAAC;SAChB,CAAA;QAED,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;QACrE,MAAM,CAAC,WAAW,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO,CAAC,CAAA;QACvD,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=state-storage.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-storage.test.d.ts","sourceRoot":"","sources":["../src/state-storage.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-storage.test.js","sourceRoot":"","sources":["../src/state-storage.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,KAAK,CAAC,KAAK,EAAE,CAAA;IAEb,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC7B,gBAAgB;QAChB,MAAM,SAAU,SAAQ,eAAoB;YAC1C,MAAM,CAAC,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAA;;QAEnC,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAC5C,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;QAEvB,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAC5D,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACjB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE5C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;QACnD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/lib/state.d.ts DELETED
@@ -1,23 +0,0 @@
1
- export declare class State {
2
- stateMap: Map<string, any>;
3
- static INSTANCE: State;
4
- static reset(): void;
5
- }
6
- export declare abstract class StateStorage<T> {
7
- protected constructor();
8
- abstract initValue(): T;
9
- key(): string;
10
- getOrRegister(): T;
11
- }
12
- export declare abstract class MapStateStorage<T> extends StateStorage<Map<string, T>> {
13
- initValue(): Map<string, T>;
14
- getValue(key: string): T | undefined;
15
- getValues(): T[];
16
- getOrSetValue(key: string, value: T): T;
17
- }
18
- export declare abstract class ListStateStorage<T> extends StateStorage<T[]> {
19
- initValue(): never[];
20
- getValues(): T[];
21
- addValue(value: T): T;
22
- }
23
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,QAAQ,mBAAyB;IAEjC,MAAM,CAAC,QAAQ,QAAc;IAE7B,MAAM,CAAC,KAAK;CAGb;AAED,8BAAsB,YAAY,CAAC,CAAC;IAGlC,SAAS;IAIT,QAAQ,CAAC,SAAS,IAAI,CAAC;IAEvB,GAAG,IAAI,MAAM;IAIb,aAAa,IAAI,CAAC;CAQnB;AAED,8BAAsB,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3E,SAAS;IAIT,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAKpC,SAAS,IAAI,CAAC,EAAE;IAKhB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;CAUxC;AAED,8BAAsB,gBAAgB,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,EAAE,CAAC;IACjE,SAAS;IAIT,SAAS,IAAI,CAAC,EAAE;IAIhB,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;CAKtB"}
package/lib/state.js DELETED
@@ -1,61 +0,0 @@
1
- export class State {
2
- stateMap = new Map();
3
- static INSTANCE = new State();
4
- static reset() {
5
- State.INSTANCE = new State();
6
- }
7
- }
8
- export class StateStorage {
9
- // TODO learn how to define single instance for all subclasses
10
- constructor() {
11
- //
12
- }
13
- key() {
14
- return this.constructor.name;
15
- }
16
- getOrRegister() {
17
- let metricState = State.INSTANCE.stateMap.get(this.key());
18
- if (!metricState) {
19
- metricState = this.initValue();
20
- State.INSTANCE.stateMap.set(this.key(), metricState);
21
- }
22
- return metricState;
23
- }
24
- }
25
- export class MapStateStorage extends StateStorage {
26
- initValue() {
27
- return new Map();
28
- }
29
- getValue(key) {
30
- const m = this.getOrRegister();
31
- return m.get(key);
32
- }
33
- getValues() {
34
- const m = this.getOrRegister();
35
- return Array.from(m.values());
36
- }
37
- getOrSetValue(key, value) {
38
- const m = this.getOrRegister();
39
- const oldValue = m.get(key);
40
- if (oldValue) {
41
- console.warn(key, 'has been registered twice, use the previous one');
42
- return oldValue;
43
- }
44
- m.set(key, value);
45
- return value;
46
- }
47
- }
48
- export class ListStateStorage extends StateStorage {
49
- initValue() {
50
- return [];
51
- }
52
- getValues() {
53
- return this.getOrRegister();
54
- }
55
- addValue(value) {
56
- const m = this.getOrRegister();
57
- m.push(value);
58
- return value;
59
- }
60
- }
61
- //# sourceMappingURL=state.js.map
package/lib/state.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,KAAK;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAA;IAEjC,MAAM,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAA;IAE7B,MAAM,CAAC,KAAK;QACV,KAAK,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAA;IAC9B,CAAC;;AAGH,MAAM,OAAgB,YAAY;IAChC,8DAA8D;IAE9D;QACE,EAAE;IACJ,CAAC;IAID,GAAG;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,aAAa;QACX,IAAI,WAAW,GAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC9B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAA;QACtD,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;CACF;AAED,MAAM,OAAgB,eAAmB,SAAQ,YAA4B;IAC3E,SAAS;QACP,OAAO,IAAI,GAAG,EAAa,CAAA;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,CAAC;IAED,SAAS;QACP,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,KAAQ;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,iDAAiD,CAAC,CAAA;YACpE,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAED,MAAM,OAAgB,gBAAoB,SAAQ,YAAiB;IACjE,SAAS;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,EAAE,CAAA;IAC7B,CAAC;IAED,QAAQ,CAAC,KAAQ;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
package/lib/utils.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import { ProcessResult } from '@sentio/protos';
2
- import { Required } from 'utility-types';
3
- export declare function mergeProcessResults(results: ProcessResult[]): Required<ProcessResult, 'states'>;
4
- export declare function errorString(e: Error): string;
5
- export declare const USER_PROCESSOR = "user_processor";
6
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAK9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAgB/F;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAE5C;AAED,eAAO,MAAM,cAAc,mBAAmB,CAAA"}
package/lib/utils.js DELETED
@@ -1,23 +0,0 @@
1
- // TODO better handling this, because old proto doesn't have this
2
- import { StateResult, ProcessResult as ProcessResultFull } from './gen/processor/protos/processor.js';
3
- export function mergeProcessResults(results) {
4
- const res = {
5
- ...ProcessResultFull.create(),
6
- states: StateResult.create(),
7
- };
8
- for (const r of results) {
9
- res.counters = res.counters.concat(r.counters);
10
- res.gauges = res.gauges.concat(r.gauges);
11
- res.events = res.events.concat(r.events);
12
- res.exports = res.exports.concat(r.exports);
13
- res.states = {
14
- configUpdated: res.states?.configUpdated || r.states?.configUpdated || false,
15
- };
16
- }
17
- return res;
18
- }
19
- export function errorString(e) {
20
- return e.message + '\n' + e.stack;
21
- }
22
- export const USER_PROCESSOR = 'user_processor';
23
- //# sourceMappingURL=utils.js.map
package/lib/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,OAAO,EAAE,WAAW,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAIrG,MAAM,UAAU,mBAAmB,CAAC,OAAwB;IAC1D,MAAM,GAAG,GAAG;QACV,GAAG,iBAAiB,CAAC,MAAM,EAAE;QAC7B,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE;KAC7B,CAAA;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC9C,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACxC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACxC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAC3C,GAAG,CAAC,MAAM,GAAG;YACX,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,IAAI,KAAK;SAC7E,CAAA;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAA;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAA"}