@chainlink/external-adapter-framework 2.14.3 → 2.14.4

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.
@@ -94,7 +94,7 @@ export default class extends Generator.default {
94
94
  // Copy overrides
95
95
  this.fs.copyTpl(this.templatePath('src/config/overrides.json'), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/src/config/overrides.json`), this.props);
96
96
  // Create endpoint and transport files
97
- Object.values(this.props.endpoints).forEach(({ inputEndpointName, inputTransports, endpointAliases }) => {
97
+ Object.values(this.props.endpoints).forEach(({ inputEndpointName, inputTransports, endpointAliases, normalizedEndpointNameCap }) => {
98
98
  if (inputTransports.length > 1) {
99
99
  // Router endpoints
100
100
  this.fs.copyTpl(this.templatePath('src/endpoint/endpoint-router.ts.ejs'), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/src/endpoint/${inputEndpointName}.ts`), {
@@ -105,7 +105,7 @@ export default class extends Generator.default {
105
105
  includeComments: this.props.includeComments,
106
106
  });
107
107
  inputTransports.forEach(transport => {
108
- this.fs.copyTpl(this.templatePath(`src/transport/${transport.type}.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/src/transport/${inputEndpointName}-${transport.type}.ts`), { inputEndpointName, includeComments: this.props.includeComments });
108
+ this.fs.copyTpl(this.templatePath(`src/transport/${transport.type}.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/src/transport/${inputEndpointName}-${transport.type}.ts`), { inputEndpointName, normalizedEndpointNameCap, includeComments: this.props.includeComments });
109
109
  });
110
110
  }
111
111
  else {
@@ -117,7 +117,7 @@ export default class extends Generator.default {
117
117
  adapterName: this.props.adapterName,
118
118
  includeComments: this.props.includeComments,
119
119
  });
120
- this.fs.copyTpl(this.templatePath(`src/transport/${inputTransports[0].type}.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/src/transport/${inputEndpointName}.ts`), { inputEndpointName, includeComments: this.props.includeComments });
120
+ this.fs.copyTpl(this.templatePath(`src/transport/${inputTransports[0].type}.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/src/transport/${inputEndpointName}.ts`), { inputEndpointName, normalizedEndpointNameCap, includeComments: this.props.includeComments });
121
121
  }
122
122
  });
123
123
  // Create endpoint barrel file
@@ -131,7 +131,12 @@ export default class extends Generator.default {
131
131
  // Create test files
132
132
  // Create adapter.test.ts if there is at least one endpoint with httpTransport
133
133
  if (httpEndpoints.length) {
134
- this.fs.copyTpl(this.templatePath(`test/adapter.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/adapter.test.ts`), { endpoints: httpEndpoints, transportName: 'rest', setBgExecuteMsEnv: false });
134
+ this.fs.copyTpl(this.templatePath(`test/integration/adapter.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/adapter.test.ts`), { endpoints: httpEndpoints, transportName: 'rest', setBgExecuteMsEnv: false });
135
+ // Create http unit test files
136
+ for (const { inputEndpointName, normalizedEndpointNameCap, inputTransports } of httpEndpoints) {
137
+ const transportFileBaseName = inputTransports.length > 1 ? `${inputEndpointName}-http` : inputEndpointName;
138
+ this.fs.copyTpl(this.templatePath(`test/unit/http.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/unit/${transportFileBaseName}.test.ts`), { inputEndpointName, normalizedEndpointNameCap, transportFileBaseName });
139
+ }
135
140
  }
136
141
  // Create adapter.test.ts or adapter-ws.test.ts if there is at least one endpoint with wsTransport
137
142
  if (wsEndpoints.length) {
@@ -139,7 +144,7 @@ export default class extends Generator.default {
139
144
  if (httpEndpoints.length || customFgEndpoints.length || customBgEndpoints.length) {
140
145
  fileName = 'adapter-ws.test.ts';
141
146
  }
142
- this.fs.copyTpl(this.templatePath(`test/adapter-ws.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/${fileName}`), { endpoints: wsEndpoints });
147
+ this.fs.copyTpl(this.templatePath(`test/integration/adapter-ws.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/${fileName}`), { endpoints: wsEndpoints });
143
148
  }
144
149
  // Create adapter.test.ts or adapter-custom.test.ts if there is at least one endpoint with customTransport.
145
150
  // Custom transport integration tests use the same template as http, but in separate file. This is not ideal
@@ -150,17 +155,17 @@ export default class extends Generator.default {
150
155
  if (httpEndpoints.length || wsEndpoints.length) {
151
156
  fileName = 'adapter-custom-fg.test.ts';
152
157
  }
153
- this.fs.copyTpl(this.templatePath(`test/adapter.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/${fileName}`), { endpoints: customFgEndpoints, transportName: 'customfg', setBgExecuteMsEnv: false });
158
+ this.fs.copyTpl(this.templatePath(`test/integration/adapter.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/${fileName}`), { endpoints: customFgEndpoints, transportName: 'customfg', setBgExecuteMsEnv: false });
154
159
  }
155
160
  if (customBgEndpoints.length) {
156
161
  let fileName = 'adapter.test.ts';
157
162
  if (httpEndpoints.length || wsEndpoints.length || customFgEndpoints.length) {
158
163
  fileName = 'adapter-custom-bg.test.ts';
159
164
  }
160
- this.fs.copyTpl(this.templatePath(`test/adapter.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/${fileName}`), { endpoints: customBgEndpoints, transportName: 'custombg', setBgExecuteMsEnv: true });
165
+ this.fs.copyTpl(this.templatePath(`test/integration/adapter.test.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/${fileName}`), { endpoints: customBgEndpoints, transportName: 'custombg', setBgExecuteMsEnv: true });
161
166
  }
162
167
  // Copy test fixtures
163
- this.fs.copyTpl(this.templatePath(`test/fixtures.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/fixtures.ts`), {
168
+ this.fs.copyTpl(this.templatePath(`test/integration/fixtures.ts.ejs`), this.destinationPath(`${this.args[0]}/${this.props.adapterName}/test/integration/fixtures.ts`), {
164
169
  includeWsFixtures: wsEndpoints.length > 0,
165
170
  includeHttpFixtures: httpEndpoints.length > 0 || customBgEndpoints.length > 0 || customFgEndpoints.length > 0,
166
171
  });
@@ -23,75 +23,81 @@ export type HttpTransportTypes = BaseEndpointTypes & {
23
23
  // HttpTransport is used to fetch and process data from a Provider using HTTP(S) protocol. It usually needs two methods
24
24
  // `prepareRequests` and `parseResponse`
25
25
  <% } -%>
26
- export const httpTransport = new HttpTransport<HttpTransportTypes>({
26
+ export class <%= normalizedEndpointNameCap %>HttpTransport extends HttpTransport<HttpTransportTypes> {
27
+ constructor() {
28
+ super({
27
29
  <% if (includeComments) { -%>
28
- // `prepareRequests` method receives request payloads sent to associated endpoint alongside adapter config(environment variables)
29
- // and should return 'request information' to the Data Provider. Use this method to construct one or many requests, and the framework
30
- // will send them to Data Provider
31
- <% } -%>
32
- prepareRequests: (params, config) => {
33
- return params.map((param) => {
34
- return {
35
- <% if (includeComments) { -%>
36
- // `params` are parameters associated to this single request and will also be available in the 'parseResponse' method.
37
- <% } -%>
38
- params: [param],
39
- <% if (includeComments) { -%>
40
- // `request` contains any valid axios request configuration
41
- <% } -%>
42
- request: {
43
- baseURL: config.API_ENDPOINT,
44
- url: '/cryptocurrency/price',
45
- headers: {
46
- 'X_API_KEY': config.API_KEY,
47
- },
48
- params: {
49
- symbol: param.base.toUpperCase(),
50
- convert: param.quote.toUpperCase(),
51
- },
52
- },
53
- }
54
- })
55
- },
56
- <% if (includeComments) { -%>
57
- // `parseResponse` takes the 'params' specified in the `prepareRequests` and the 'response' from Data Provider and should return
58
- // an array of response objects to be stored in cache. Use this method to construct a list of response objects for every parameter in 'params'
59
- // and the framework will save them in cache and return to user
60
- <% } -%>
61
- parseResponse: (params, response) => {
62
- <% if (includeComments) { -%>
63
- // For each 'param' a new response object is created and returned as an array
64
- <% } -%>
65
- return params.map((param) => {
66
- <% if (includeComments) { -%>
67
- // In case error was received, it's a good practice to return meaningful information to user
68
- <% } -%>
69
- const baseSymbol = param.base.toUpperCase()
70
- if (!response.data || !response.data[baseSymbol]) {
71
- return {
72
- params: param,
73
- response: {
74
- errorMessage: `The data provider didn't return any value for ${param.base}/${param.quote}`,
75
- statusCode: 502,
76
- },
77
- }
78
- }
30
+ // `prepareRequests` method receives request payloads sent to associated endpoint alongside adapter config(environment variables)
31
+ // and should return 'request information' to the Data Provider. Use this method to construct one or many requests, and the framework
32
+ // will send them to Data Provider
33
+ <% } -%>
34
+ prepareRequests: (params, config) => {
35
+ return params.map((param) => {
36
+ return {
37
+ <% if (includeComments) { -%>
38
+ // `params` are parameters associated to this single request and will also be available in the 'parseResponse' method.
39
+ <% } -%>
40
+ params: [param],
41
+ <% if (includeComments) { -%>
42
+ // `request` contains any valid axios request configuration
43
+ <% } -%>
44
+ request: {
45
+ baseURL: config.API_ENDPOINT,
46
+ url: '/cryptocurrency/price',
47
+ headers: {
48
+ 'X_API_KEY': config.API_KEY,
49
+ },
50
+ params: {
51
+ symbol: param.base.toUpperCase(),
52
+ convert: param.quote.toUpperCase(),
53
+ },
54
+ },
55
+ }
56
+ })
57
+ },
58
+ <% if (includeComments) { -%>
59
+ // `parseResponse` takes the 'params' specified in the `prepareRequests` and the 'response' from Data Provider and should return
60
+ // an array of response objects to be stored in cache. Use this method to construct a list of response objects for every parameter in 'params'
61
+ // and the framework will save them in cache and return to user
62
+ <% } -%>
63
+ parseResponse: (params, response) => {
64
+ <% if (includeComments) { -%>
65
+ // For each 'param' a new response object is created and returned as an array
66
+ <% } -%>
67
+ return params.map((param) => {
68
+ <% if (includeComments) { -%>
69
+ // In case error was received, it's a good practice to return meaningful information to user
70
+ <% } -%>
71
+ const baseSymbol = param.base.toUpperCase()
72
+ if (!response.data || !response.data[baseSymbol]) {
73
+ return {
74
+ params: param,
75
+ response: {
76
+ errorMessage: `The data provider didn't return any value for ${param.base}/${param.quote}`,
77
+ statusCode: 502,
78
+ },
79
+ }
80
+ }
79
81
 
80
- const result = response.data[baseSymbol].price
81
- <% if (includeComments) { -%>
82
- // Response objects, whether successful or errors, contain two properties, 'params' and 'response'. 'response' is what will be
83
- // stored in the cache and returned as adapter response and 'params' determines the identifier so that the next request with same 'params'
84
- // will immediately return the response from the cache
85
- <% } -%>
86
- return {
87
- params: param,
88
- response: {
89
- result,
90
- data: {
91
- result
82
+ const result = response.data[baseSymbol].price
83
+ <% if (includeComments) { -%>
84
+ // Response objects, whether successful or errors, contain two properties, 'params' and 'response'. 'response' is what will be
85
+ // stored in the cache and returned as adapter response and 'params' determines the identifier so that the next request with same 'params'
86
+ // will immediately return the response from the cache
87
+ <% } -%>
88
+ return {
89
+ params: param,
90
+ response: {
91
+ result,
92
+ data: {
93
+ result,
94
+ },
95
+ },
92
96
  }
93
- },
94
- }
97
+ })
98
+ },
95
99
  })
96
- },
97
- })
100
+ }
101
+ }
102
+
103
+ export const httpTransport = new <%= normalizedEndpointNameCap %>HttpTransport()
@@ -0,0 +1,157 @@
1
+ import { EndpointContext } from '@chainlink/external-adapter-framework/adapter'
2
+ import { calculateHttpRequestKey } from '@chainlink/external-adapter-framework/cache'
3
+ import { metrics } from '@chainlink/external-adapter-framework/metrics'
4
+ import { TransportDependencies } from '@chainlink/external-adapter-framework/transports'
5
+ import { LoggerFactoryProvider } from '@chainlink/external-adapter-framework/util'
6
+ import { makeStub } from '@chainlink/external-adapter-framework/util/testing-utils'
7
+ import { inputParameters } from '../../src/endpoint/<%= inputEndpointName %>'
8
+ import { <%= normalizedEndpointNameCap %>HttpTransport, HttpTransportTypes } from '../../src/transport/<%= transportFileBaseName %>'
9
+
10
+ const log = jest.fn()
11
+ const debugLog = jest.fn()
12
+ const logger = {
13
+ fatal: log,
14
+ error: log,
15
+ warn: log,
16
+ info: log,
17
+ debug: debugLog,
18
+ trace: debugLog,
19
+ msgPrefix: 'mock-logger',
20
+ }
21
+
22
+ const loggerFactory = { child: () => logger }
23
+
24
+ LoggerFactoryProvider.set(loggerFactory)
25
+ metrics.initialize()
26
+
27
+ describe('<%= normalizedEndpointNameCap %>HttpTransport', () => {
28
+ const transportName = 'default_single_transport'
29
+ const endpointName = '<%= inputEndpointName %>'
30
+ const apiKey = 'test-api-key'
31
+ const apiUrl = 'http://api.example.com'
32
+
33
+ const adapterSettings = makeStub('adapterSettings', {
34
+ API_ENDPOINT: apiUrl,
35
+ API_KEY: apiKey,
36
+ CACHE_MAX_AGE: 90_000,
37
+ MAX_COMMON_KEY_SIZE: 300,
38
+ WARMUP_SUBSCRIPTION_TTL: 10_000,
39
+ } as unknown as HttpTransportTypes['Settings'])
40
+
41
+ const subscriptionSet = makeStub('subscriptionSet', {
42
+ getAll: jest.fn(),
43
+ })
44
+
45
+ const subscriptionSetFactory = makeStub('subscriptionSetFactory', {
46
+ buildSet() {
47
+ return subscriptionSet
48
+ },
49
+ })
50
+
51
+ const requester = makeStub('requester', {
52
+ request: jest.fn(),
53
+ })
54
+
55
+ const responseCache = {
56
+ write: jest.fn(),
57
+ }
58
+ const dependencies = makeStub('dependencies', {
59
+ requester,
60
+ responseCache,
61
+ subscriptionSetFactory,
62
+ } as unknown as TransportDependencies<HttpTransportTypes>)
63
+
64
+ let transport: <%= normalizedEndpointNameCap %>HttpTransport
65
+
66
+ const requestKeyForParams = (params: typeof inputParameters.validated) => {
67
+ const requestKey = calculateHttpRequestKey<HttpTransportTypes>({
68
+ context: {
69
+ adapterSettings,
70
+ inputParameters,
71
+ endpointName,
72
+ },
73
+ data: [params],
74
+ transportName,
75
+ })
76
+ return requestKey
77
+ }
78
+
79
+ beforeEach(async () => {
80
+ jest.restoreAllMocks()
81
+ jest.useFakeTimers()
82
+
83
+ transport = new <%= normalizedEndpointNameCap %>HttpTransport()
84
+
85
+ await transport.initialize(dependencies, adapterSettings, endpointName, transportName)
86
+ })
87
+
88
+ afterEach(() => {
89
+ expect(log).not.toHaveBeenCalled()
90
+ })
91
+
92
+ it('should make the request', async () => {
93
+ const btcPrice = 75_000
94
+ const params = makeStub('params', {
95
+ base: 'BTC',
96
+ quote: 'USD',
97
+ })
98
+ subscriptionSet.getAll.mockReturnValue([params])
99
+
100
+ const context = makeStub('context', {
101
+ adapterSettings,
102
+ endpointName,
103
+ } as EndpointContext<HttpTransportTypes>)
104
+
105
+ const response = makeStub('response', {
106
+ response: {
107
+ data: {
108
+ BTC: {
109
+ price: btcPrice,
110
+ },
111
+ cost: undefined,
112
+ },
113
+ },
114
+ timestamps: {},
115
+ })
116
+
117
+ requester.request.mockResolvedValue(response)
118
+
119
+ await transport.backgroundExecute(context)
120
+
121
+ const expectedRequestConfig = {
122
+ headers: {
123
+ X_API_KEY: adapterSettings.API_KEY,
124
+ },
125
+ baseURL: adapterSettings.API_ENDPOINT,
126
+ url: '/cryptocurrency/price',
127
+ params: {
128
+ symbol: params.base,
129
+ convert: params.quote,
130
+ },
131
+ }
132
+ const expectedRequestKey = requestKeyForParams(params)
133
+
134
+ const expectedResponse = {
135
+ result: btcPrice,
136
+ data: {
137
+ result: btcPrice,
138
+ },
139
+ timestamps: {},
140
+ }
141
+
142
+ expect(requester.request).toHaveBeenCalledWith(
143
+ expectedRequestKey,
144
+ expectedRequestConfig,
145
+ undefined,
146
+ )
147
+ expect(requester.request).toHaveBeenCalledTimes(1)
148
+
149
+ expect(responseCache.write).toHaveBeenCalledWith(transportName, [
150
+ {
151
+ params,
152
+ response: expectedResponse,
153
+ },
154
+ ])
155
+ expect(responseCache.write).toHaveBeenCalledTimes(1)
156
+ })
157
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chainlink/external-adapter-framework",
3
- "version": "2.14.3",
3
+ "version": "2.14.4",
4
4
  "main": "dist/index.js",
5
5
  "license": "MIT",
6
6
  "repository": "git://github.com/smartcontractkit/ea-framework-js.git",
@@ -36,6 +36,7 @@ export declare function runPeriodicAsyncBackgroundExecution(clock: InstalledCloc
36
36
  }): Promise<void>;
37
37
  export declare function runAllUntil(clock: InstalledClock, isComplete: () => boolean): Promise<void>;
38
38
  export declare function runAllUntilTime(clock: InstalledClock, time: number): Promise<void>;
39
+ export declare function runAllUntilSettled<T>(clock: InstalledClock, promise: Promise<T>): Promise<T>;
39
40
  export declare class RedisMock {
40
41
  store: LocalCache<string>;
41
42
  keys: {
@@ -37,6 +37,7 @@ exports.allowedUndefinedStubProps = exports.mockWebSocketProvider = exports.Test
37
37
  exports.runPeriodicAsyncBackgroundExecution = runPeriodicAsyncBackgroundExecution;
38
38
  exports.runAllUntil = runAllUntil;
39
39
  exports.runAllUntilTime = runAllUntilTime;
40
+ exports.runAllUntilSettled = runAllUntilSettled;
40
41
  exports.assertEqualResponses = assertEqualResponses;
41
42
  exports.waitUntilResolved = waitUntilResolved;
42
43
  exports.setEnvVariables = setEnvVariables;
@@ -102,6 +103,18 @@ async function runAllUntilTime(clock, time) {
102
103
  await clock.nextAsync();
103
104
  }
104
105
  }
106
+ async function runAllUntilSettled(clock, promise) {
107
+ let settled = false;
108
+ try {
109
+ // Return the derived promise to avoid unhandled promise rejections.
110
+ return promise.finally(() => {
111
+ settled = true;
112
+ });
113
+ }
114
+ finally {
115
+ await runAllUntil(clock, () => settled);
116
+ }
117
+ }
105
118
  class RedisMock {
106
119
  store = new cache_1.LocalCache(10000);
107
120
  keys = {};
@@ -1 +1 @@
1
- {"version":3,"file":"testing-utils.js","sourceRoot":"","sources":["../../../src/util/testing-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA,kFAoBC;AAED,kCAIC;AAED,0CAOC;AAqFD,oDAqBC;AAqPD,8CAeC;AAED,0CAIC;AA+ED,4BAiBC;AA3jBD,6CAAuC;AACvC,oDAAqC;AAErC,oCAA4C;AAG5C,oCAAgC;AAQhC,mCAAwF;AACxF,2CAAuF;AAA9E,4GAAA,SAAS,OAAiB;AAAE,kHAAA,MAAM,OAAuB;AAWlE,qBAAqB,CAAC,sBAAsB;AAC5C,MAAa,YAAY;IACvB,IAAI,CAAS;IACb,aAAa,CAAmB;IAEhC,KAAK,CAAC,UAAU,CACd,YAAsC,EACtC,eAA8B,EAC9B,YAAoB,EACpB,aAAqB;QAErB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAA;QAC/C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;QACzB,OAAM;IACR,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,CAAsD;QAEtD,OAAM;IACR,CAAC;CACF;AApBD,oCAoBC;AAED,MAAa,SAAU,SAAQ,kBAAU;IACvC,YAAY,QAAgB;QAC1B,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjB,CAAC;IACO,sBAAsB,CAA2B;IAEzD,cAAc;QACZ,sDAAsD;QACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC;IAEQ,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAwB,EAAE,GAAW;QACnE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAC1B,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;CACF;AAjBD,8BAiBC;AAEM,KAAK,UAAU,mCAAmC,CACvD,KAAqB,EACrB,EACE,QAAQ,EACR,KAAK,EACL,cAAc,GAKf;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,6BAA6B;QAC7B,MAAM,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAE/B,yEAAyE;QACzE,iDAAiD;QACjD,MAAM,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,KAAqB,EAAE,UAAyB;IAChF,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,SAAS,EAAE,CAAA;IACzB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,KAAqB,EAAE,IAAY;IACvE,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAA;IACnC,sGAAsG;IACtG,IAAA,aAAK,EAAC,IAAI,CAAC,CAAA;IACX,OAAO,KAAK,CAAC,GAAG,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM,KAAK,CAAC,SAAS,EAAE,CAAA;IACzB,CAAC;AACH,CAAC;AAED,MAAa,SAAS;IACpB,KAAK,GAAG,IAAI,kBAAU,CAAS,KAAK,CAAC,CAAA;IACrC,IAAI,GAA8B,EAAE,CAAA;IAEpC,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAQ,EAAE,GAAW;QACnD,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAuB,CAAA;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,aAAa,CACX,KAAmC,EACnC,QAA+C;QAE/C,OAAM;IACR,CAAC;IAED,0BAA0B,CAAC,GAAW,EAAE,KAAa,EAAE,GAAW;QAChE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,CAAC,GAAG,IAAgD;QACzD,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEzC,kFAAkF;QAClF,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,WAAW,EAAE,CAAC;YAC1C,OAAO,CAAC,CAAA;QACV,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,CAAA;YACnC,OAAO,CAAC,CAAA;QACV,CAAC;aAAM,CAAC;YACN,wDAAwD;YACxD,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAM;IACR,CAAC;IAED,0EAA0E;IAC1E,6DAA6D;IAC7D,IAAI;QACF,OAAM;IACR,CAAC;CACF;AA7DD,8BA6DC;AAED,MAAM,gBAAgB;IAGA;IAFpB,QAAQ,GAAuB,EAAE,CAAA;IAEjC,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAQ,EAAE,GAAW;QACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0BAA0B,CAAC,GAAW,EAAE,KAAa,EAAE,GAAW;QAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QAC9E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;CACF;AAED,SAAgB,oBAAoB,CAClC,CAAmB,EACnB,MAAuB,EACvB,QAEC;IAED,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,CAAC,CAAA;IACrE,CAAC,CAAC,EAAE,CACF,OAAO,CACL,MAAM,EAAE,UAAU,EAAE,0BAA0B;QAC9C,MAAM,EAAE,UAAU,EAAE,mCAAmC,CACxD,EACD,QAAQ,CACT,CAAA;IAED,OAAO,MAAM,EAAE,IAAI,CAAA;IAEnB,OAAQ,MAA6C,CAAC,YAAY,CAAC,CAAA;IAEnE,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,WAAW;IACf,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEvB,aAAa,CAAC,CAAS;QAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,YAAY,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IACE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC3B,CAAC,IAAI,EACL,CAAC;gBACD,SAAQ;YACV,CAAC;YAED,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACpD,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAa,CAAA;YAChF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;iBAC/C,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;iBAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;iBACnB,IAAI,CAAC,GAAG,CAAC,CAAA;YACZ,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,YAAY,EAAE,CAAA;YAE1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAEO,GAAG,CACT,CAAmB,EACnB,EAAE,IAAI,EAAE,MAAM,EAAqD;QAEnE,MAAM,YAAY,GAAG,MAAM;YACzB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;iBACnB,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;iBAC1E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBAClC,IAAI,CAAC,GAAG,CAAC;YACd,CAAC,CAAC,EAAE,CAAA;QAEN,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,YAAY,EAAE,CAAC,CAAA;QACtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;iBACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACzB,MAAM,uBAAuB,GAAG,eAAe,CAAC,MAAM;gBACpD,CAAC,CAAC,mCAAmC,eAAe,EAAE;gBACtD,CAAC,CAAC,mFAAmF,CAAA;YAEvF,CAAC,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,YAAY,KAAK,uBAAuB,EAAE,CAAC,CAAA;QACpF,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,CACJ,CAAmB,EACnB,MAIC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAClC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;IACpC,CAAC;IAED,oBAAoB,CAClB,CAAmB,EACnB,MAGC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,EAAE,IAAI,CAAC,CAAA;YACrC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,iBAAiB,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;CACF;AAED,MAAa,WAAW;IAKb;IACA;IACA;IACA;IAPT,SAAS,CAAY;IAErB,sCAAsC;IACtC,YACS,GAAoB,EACpB,OAAmB,EACnB,UAA4B,EAC5B,KAAsB,EAC7B,KAAa;QAJN,QAAG,GAAH,GAAG,CAAiB;QACpB,YAAO,GAAP,OAAO,CAAY;QACnB,eAAU,GAAV,UAAU,CAAkB;QAC5B,UAAK,GAAL,KAAK,CAAiB;QAG7B,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAC/B,OAAmB,EACnB,OAGa,EACb,YAA2C;QAE3C,2DAA2D;QAC3D,sEAAsE;QACtE,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;QAExE,OAAO,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;YACzC,KAAK,EAAE,SAAS;YAChB,GAAG,YAAY;SAChB,CAIA,CAAA;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,OAAmB,EACnB,OAGa,EACb,YAA2C;QAE3C,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,aAAK,EAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAC9D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACtD,CAAC;QACD,OAAO,CAAC,WAAW,GAAG,IAAI,WAAW,CACnC,GAAG,EACH,OAAO,EACP,UAAU,EACV,OAAO,CAAC,KAAK,EACb,YAAY,EAAE,KAAK,CACpB,CAAA;QACD,OAAO,OAAO,CAAC,WAAW,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAa,EAAE,OAAgC;QAC3D,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YACd,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,OAAO;aACX;YACD,OAAO,EAAE;gBACP,IAAI;aACL;SACF,CAAC,CAAA;QAEJ,yEAAyE;QACzE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,WAAW,EAAE,CAAA;QACtB,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,qCAAqC,CACzC,CAAmB,EACnB,MAMC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAA;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAA;QACH,CAAC;QAED,wCAAwC;QACxC,6EAA6E;QAC7E,qBAAqB;QACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACpD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAE3B,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAEjD,uDAAuD;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEvD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,oBAAoB,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACnE,CAAC;aAAM,CAAC;YACN,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,YAAqB;QACtC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAA;QACH,CAAC;QAED,8FAA8F;QAC9F,kGAAkG;QAClG,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAU,CAAC,KAAK,CAAC,IAAI,CAAA;YAC5C,OAAO,SAAS,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAA;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QAChD,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;CACF;AAxJD,kCAwJC;AAED,yGAAyG;AAClG,KAAK,UAAU,iBAAiB,CACrC,KAAqB,EACrB,EAAoB;IAEpB,IAAI,MAAM,CAAA;IACV,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;IACrB,CAAC,CAAA;IACD,OAAO,EAAE,CAAA;IACT,wDAAwD;IACxD,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,CAAC,SAAS,EAAE,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAgB,eAAe,CAAC,YAA+B;IAC7D,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACI,MAAM,qBAAqB,GAAG,CAAC,QAAuC,EAAQ,EAAE;IACrF,+DAA+D;IAC/D,MAAM,aAAc,SAAQ,uBAAS;QACnC,oGAAoG;QAC5F,WAAW,GAAkD,IAAI,GAAG,EAAE,CAAA;QAE9E,YAAY,GAAW,EAAE,QAAgE;YACvF,KAAK,CAAC,GAAG,EAAE,QAAQ,YAAY,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC/D,CAAC;QAED,wGAAwG;QACxG,kBAAkB;YAChB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvC,gIAAgI;gBAChI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QAC1B,CAAC;QAED,uEAAuE;QACvE,EAAE,CAAC,KAAa,EAAE,QAAsC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;YACpD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,KAAa,EAAE,GAAG,IAAe;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YACnD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;YACZ,CAAC;YACD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;QAC7B,CAAC;KACF;IAED,yFAAyF;IACzF,QAAQ,CAAC,GAAG,CAAC,aAAoB,CAAC,CAAA,CAAC,yDAAyD;AAC9F,CAAC,CAAA;AAvCY,QAAA,qBAAqB,yBAuCjC;AAED,8EAA8E;AAC9E,2CAA2C;AAC3C,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,oCAAoC;AACpC,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,oBAAoB;AACpB,EAAE;AACF,iBAAiB;AACjB,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,4BAA4B;AAC5B,8BAA8B;AAC9B,UAAU;AACV,MAAM;AACN,EAAE;AACF,gBAAgB;AAChB,EAAE;AACF,qDAAqD;AACrD,iBAAiB;AACjB,EAAE;AACF,yEAAyE;AACzE,+CAA+C;AAC/C,SAAgB,QAAQ,CAAI,IAAY,EAAE,GAAM;IAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;YAC1C,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,MAAM,OAAO,GAAG,aAAa,QAAQ,kBAAkB,CAAA;gBACvD,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACtB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;YAC1B,CAAC;YACD,8DAA8D;YAC9D,OAAO,QAAQ,CAAC,QAAQ,EAAG,MAAc,CAAC,IAAI,CAAC,CAAC,CAAA;QAClD,CAAC;KACF,CAAM,CAAA;AACT,CAAC;AAED,6DAA6D;AAChD,QAAA,yBAAyB,GAAG;IACvC,UAAU;IACV,UAAU;IACV,SAAS;IACT,cAAc;IACd,4BAA4B;IAC5B,0BAA0B;IAC1B,QAAQ;IACR,iBAAiB;IACjB,MAAM;CACP,CAAA;AAED,MAAM,0BAA0B,GAAG,CAAC,IAAqB,EAAE,EAAE;IAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,iCAAyB,CAAC,QAAQ,CAAC,IAAc,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED,oBAAoB,CAAC,sBAAsB"}
1
+ {"version":3,"file":"testing-utils.js","sourceRoot":"","sources":["../../../src/util/testing-utils.ts"],"names":[],"mappings":"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"}