footprintjs 2.0.0 → 3.0.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/AGENTS.md CHANGED
@@ -26,7 +26,7 @@ Entry points: `footprintjs` (public) and `footprintjs/advanced` (internals).
26
26
  ## Key API — TypedScope (Recommended)
27
27
 
28
28
  ```typescript
29
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor, decide } from 'footprintjs';
29
+ import { typedFlowChart, FlowChartExecutor, decide } from 'footprintjs';
30
30
 
31
31
  interface State {
32
32
  creditScore: number;
@@ -54,7 +54,7 @@ const chart = typedFlowChart<State>('Intake', async (scope) => {
54
54
  .end()
55
55
  .build();
56
56
 
57
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
57
+ const executor = new FlowChartExecutor(chart<State>());
58
58
  await executor.run();
59
59
  executor.getNarrative(); // causal trace with decision evidence
60
60
  ```
@@ -92,7 +92,7 @@ select(scope, [
92
92
  ### Executor
93
93
 
94
94
  ```typescript
95
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
95
+ const executor = new FlowChartExecutor(chart<State>());
96
96
  await executor.run({ input, env: { traceId: 'req-123' } });
97
97
  executor.getNarrative() // string[]
98
98
  executor.getNarrativeEntries() // CombinedNarrativeEntry[]
@@ -111,7 +111,7 @@ executor.setRedactionPolicy({ keys, patterns, fields })
111
111
 
112
112
  ## Rules
113
113
 
114
- - Use `typedFlowChart<T>()` + `createTypedScopeFactory<T>()` (not flowChart + ScopeFacade)
114
+ - Use `typedFlowChart<T>()` scopeFactory is auto-embedded, no `createTypedScopeFactory` needed
115
115
  - Use `decide()` / `select()` in decider/selector functions
116
116
  - Use typed property access (not getValue/setValue)
117
117
  - Use `$getArgs()` for input, `$getEnv()` for environment
@@ -18,7 +18,7 @@ npm install footprintjs
18
18
  ## Quick Start
19
19
 
20
20
  ```typescript
21
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor } from 'footprintjs';
21
+ import { typedFlowChart, FlowChartExecutor } from 'footprintjs';
22
22
 
23
23
  interface OrderState {
24
24
  orderId: string;
@@ -37,7 +37,7 @@ const chart = typedFlowChart<OrderState>('ReceiveOrder', (scope) => {
37
37
  .setEnableNarrative()
38
38
  .build();
39
39
 
40
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<OrderState>());
40
+ const executor = new FlowChartExecutor(chart<OrderState>());
41
41
  await executor.run({ input: { orderId: 'ORD-123' } });
42
42
 
43
43
  console.log(executor.getNarrative());
@@ -255,7 +255,7 @@ const mermaid = builder.toMermaid(); // Mermaid diagram string
255
255
  ## FlowChartExecutor API
256
256
 
257
257
  ```typescript
258
- import { FlowChartExecutor, createTypedScopeFactory } from 'footprintjs';
258
+ import { FlowChartExecutor } from 'footprintjs';
259
259
 
260
260
  interface AppState {
261
261
  applicantName: string;
@@ -264,7 +264,7 @@ interface AppState {
264
264
  decision?: string;
265
265
  }
266
266
 
267
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<AppState>());
267
+ const executor = new FlowChartExecutor(chart<AppState>());
268
268
 
269
269
  // Run with input and optional execution environment
270
270
  const result = await executor.run({
@@ -488,7 +488,7 @@ Two entry points:
488
488
  ### Pipeline with decide() + narrative
489
489
 
490
490
  ```typescript
491
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor, decide } from 'footprintjs';
491
+ import { typedFlowChart, FlowChartExecutor, decide } from 'footprintjs';
492
492
 
493
493
  interface LoanState {
494
494
  applicantName: string;
@@ -527,7 +527,7 @@ const chart = typedFlowChart<LoanState>('Receive', (scope) => {
527
527
  .setEnableNarrative()
528
528
  .build();
529
529
 
530
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<LoanState>());
530
+ const executor = new FlowChartExecutor(chart<LoanState>());
531
531
  await executor.run({ input: { applicantName: 'Bob', income: 42000 } });
532
532
  const trace = executor.getNarrative();
533
533
  // Feed trace to LLM for grounded explanations
@@ -26,7 +26,7 @@ Entry points: `footprintjs` (public) and `footprintjs/advanced` (internals).
26
26
  ## Key API — TypedScope (Recommended)
27
27
 
28
28
  ```typescript
29
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor, decide } from 'footprintjs';
29
+ import { typedFlowChart, FlowChartExecutor, decide } from 'footprintjs';
30
30
 
31
31
  interface State {
32
32
  creditScore: number;
@@ -54,7 +54,7 @@ const chart = typedFlowChart<State>('Intake', async (scope) => {
54
54
  .end()
55
55
  .build();
56
56
 
57
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
57
+ const executor = new FlowChartExecutor(chart<State>());
58
58
  await executor.run();
59
59
  executor.getNarrative(); // causal trace with decision evidence
60
60
  ```
@@ -92,7 +92,7 @@ select(scope, [
92
92
  ### Executor
93
93
 
94
94
  ```typescript
95
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
95
+ const executor = new FlowChartExecutor(chart<State>());
96
96
  await executor.run({ input, env: { traceId: 'req-123' } });
97
97
  executor.getNarrative() // string[]
98
98
  executor.getNarrativeEntries() // CombinedNarrativeEntry[]
@@ -111,7 +111,7 @@ executor.setRedactionPolicy({ keys, patterns, fields })
111
111
 
112
112
  ## Rules
113
113
 
114
- - Use `typedFlowChart<T>()` + `createTypedScopeFactory<T>()` (not flowChart + ScopeFacade)
114
+ - Use `typedFlowChart<T>()` scopeFactory is auto-embedded, no `createTypedScopeFactory` needed
115
115
  - Use `decide()` / `select()` in decider/selector functions
116
116
  - Use typed property access (not getValue/setValue)
117
117
  - Use `$getArgs()` for input, `$getEnv()` for environment
@@ -26,7 +26,7 @@ Entry points: `footprintjs` (public) and `footprintjs/advanced` (internals).
26
26
  ## Key API — TypedScope (Recommended)
27
27
 
28
28
  ```typescript
29
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor, decide } from 'footprintjs';
29
+ import { typedFlowChart, FlowChartExecutor, decide } from 'footprintjs';
30
30
 
31
31
  interface State {
32
32
  creditScore: number;
@@ -54,7 +54,7 @@ const chart = typedFlowChart<State>('Intake', async (scope) => {
54
54
  .end()
55
55
  .build();
56
56
 
57
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
57
+ const executor = new FlowChartExecutor(chart<State>());
58
58
  await executor.run();
59
59
  executor.getNarrative(); // causal trace with decision evidence
60
60
  ```
@@ -92,7 +92,7 @@ select(scope, [
92
92
  ### Executor
93
93
 
94
94
  ```typescript
95
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
95
+ const executor = new FlowChartExecutor(chart<State>());
96
96
  await executor.run({ input, env: { traceId: 'req-123' } });
97
97
  executor.getNarrative() // string[]
98
98
  executor.getNarrativeEntries() // CombinedNarrativeEntry[]
@@ -111,7 +111,7 @@ executor.setRedactionPolicy({ keys, patterns, fields })
111
111
 
112
112
  ## Rules
113
113
 
114
- - Use `typedFlowChart<T>()` + `createTypedScopeFactory<T>()` (not flowChart + ScopeFacade)
114
+ - Use `typedFlowChart<T>()` scopeFactory is auto-embedded, no `createTypedScopeFactory` needed
115
115
  - Use `decide()` / `select()` in decider/selector functions
116
116
  - Use typed property access (not getValue/setValue)
117
117
  - Use `$getArgs()` for input, `$getEnv()` for environment
@@ -26,7 +26,7 @@ Entry points: `footprintjs` (public) and `footprintjs/advanced` (internals).
26
26
  ## Key API — TypedScope (Recommended)
27
27
 
28
28
  ```typescript
29
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor, decide } from 'footprintjs';
29
+ import { typedFlowChart, FlowChartExecutor, decide } from 'footprintjs';
30
30
 
31
31
  interface State {
32
32
  creditScore: number;
@@ -54,7 +54,7 @@ const chart = typedFlowChart<State>('Intake', async (scope) => {
54
54
  .end()
55
55
  .build();
56
56
 
57
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
57
+ const executor = new FlowChartExecutor(chart<State>());
58
58
  await executor.run();
59
59
  executor.getNarrative(); // causal trace with decision evidence
60
60
  ```
@@ -92,7 +92,7 @@ select(scope, [
92
92
  ### Executor
93
93
 
94
94
  ```typescript
95
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
95
+ const executor = new FlowChartExecutor(chart<State>());
96
96
  await executor.run({ input, env: { traceId: 'req-123' } });
97
97
  executor.getNarrative() // string[]
98
98
  executor.getNarrativeEntries() // CombinedNarrativeEntry[]
@@ -111,7 +111,7 @@ executor.setRedactionPolicy({ keys, patterns, fields })
111
111
 
112
112
  ## Rules
113
113
 
114
- - Use `typedFlowChart<T>()` + `createTypedScopeFactory<T>()` (not flowChart + ScopeFacade)
114
+ - Use `typedFlowChart<T>()` scopeFactory is auto-embedded, no `createTypedScopeFactory` needed
115
115
  - Use `decide()` / `select()` in decider/selector functions
116
116
  - Use typed property access (not getValue/setValue)
117
117
  - Use `$getArgs()` for input, `$getEnv()` for environment
@@ -26,7 +26,7 @@ Entry points: `footprintjs` (public) and `footprintjs/advanced` (internals).
26
26
  ## Key API — TypedScope (Recommended)
27
27
 
28
28
  ```typescript
29
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor, decide } from 'footprintjs';
29
+ import { typedFlowChart, FlowChartExecutor, decide } from 'footprintjs';
30
30
 
31
31
  interface State {
32
32
  creditScore: number;
@@ -54,7 +54,7 @@ const chart = typedFlowChart<State>('Intake', async (scope) => {
54
54
  .end()
55
55
  .build();
56
56
 
57
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
57
+ const executor = new FlowChartExecutor(chart<State>());
58
58
  await executor.run();
59
59
  executor.getNarrative(); // causal trace with decision evidence
60
60
  ```
@@ -92,7 +92,7 @@ select(scope, [
92
92
  ### Executor
93
93
 
94
94
  ```typescript
95
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
95
+ const executor = new FlowChartExecutor(chart<State>());
96
96
  await executor.run({ input, env: { traceId: 'req-123' } });
97
97
  executor.getNarrative() // string[]
98
98
  executor.getNarrativeEntries() // CombinedNarrativeEntry[]
@@ -111,7 +111,7 @@ executor.setRedactionPolicy({ keys, patterns, fields })
111
111
 
112
112
  ## Rules
113
113
 
114
- - Use `typedFlowChart<T>()` + `createTypedScopeFactory<T>()` (not flowChart + ScopeFacade)
114
+ - Use `typedFlowChart<T>()` scopeFactory is auto-embedded, no `createTypedScopeFactory` needed
115
115
  - Use `decide()` / `select()` in decider/selector functions
116
116
  - Use typed property access (not getValue/setValue)
117
117
  - Use `$getArgs()` for input, `$getEnv()` for environment
@@ -26,7 +26,7 @@ Entry points: `footprintjs` (public) and `footprintjs/advanced` (internals).
26
26
  ## Key API — TypedScope (Recommended)
27
27
 
28
28
  ```typescript
29
- import { typedFlowChart, createTypedScopeFactory, FlowChartExecutor, decide } from 'footprintjs';
29
+ import { typedFlowChart, FlowChartExecutor, decide } from 'footprintjs';
30
30
 
31
31
  interface State {
32
32
  creditScore: number;
@@ -54,7 +54,7 @@ const chart = typedFlowChart<State>('Intake', async (scope) => {
54
54
  .end()
55
55
  .build();
56
56
 
57
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
57
+ const executor = new FlowChartExecutor(chart<State>());
58
58
  await executor.run();
59
59
  executor.getNarrative(); // causal trace with decision evidence
60
60
  ```
@@ -92,7 +92,7 @@ select(scope, [
92
92
  ### Executor
93
93
 
94
94
  ```typescript
95
- const executor = new FlowChartExecutor(chart, createTypedScopeFactory<State>());
95
+ const executor = new FlowChartExecutor(chart<State>());
96
96
  await executor.run({ input, env: { traceId: 'req-123' } });
97
97
  executor.getNarrative() // string[]
98
98
  executor.getNarrativeEntries() // CombinedNarrativeEntry[]
@@ -111,7 +111,7 @@ executor.setRedactionPolicy({ keys, patterns, fields })
111
111
 
112
112
  ## Rules
113
113
 
114
- - Use `typedFlowChart<T>()` + `createTypedScopeFactory<T>()` (not flowChart + ScopeFacade)
114
+ - Use `typedFlowChart<T>()` scopeFactory is auto-embedded, no `createTypedScopeFactory` needed
115
115
  - Use `decide()` / `select()` in decider/selector functions
116
116
  - Use typed property access (not getValue/setValue)
117
117
  - Use `$getArgs()` for input, `$getEnv()` for environment
package/dist/esm/index.js CHANGED
@@ -8,8 +8,6 @@
8
8
  * For recorder factories, import from 'footprintjs/recorders'.
9
9
  */
10
10
  export { flowChart, FlowChartBuilder } from './lib/builder/index.js';
11
- export { createTypedScopeFactory, typedFlowChart } from './lib/builder/typedFlowChart.js';
12
- export { createTypedScope } from './lib/reactive/index.js';
13
11
  export { decide, select } from './lib/decide/index.js';
14
12
  export { FlowChartExecutor } from './lib/runner/index.js';
15
13
  export { RunContext } from './lib/runner/index.js';
@@ -35,9 +33,6 @@ export { RLENarrativeFlowRecorder } from './lib/engine/index.js';
35
33
  export { SeparateNarrativeFlowRecorder } from './lib/engine/index.js';
36
34
  export { SilentNarrativeFlowRecorder } from './lib/engine/index.js';
37
35
  export { WindowedNarrativeFlowRecorder } from './lib/engine/index.js';
38
- export { defineContract } from './lib/contract/index.js';
39
- export { normalizeSchema, zodToJsonSchema } from './lib/contract/index.js';
40
- export { generateOpenAPI } from './lib/contract/index.js';
41
36
  export { detectSchema, isValidatable, isZod } from './lib/schema/index.js';
42
37
  export { InputValidationError, validateAgainstSchema, validateOrThrow } from './lib/schema/index.js';
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFPSCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBVzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBWW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdFLCtFQUErRTtBQUMvRSwwQ0FBMEM7QUFDMUMsK0VBQStFO0FBRS9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCx1QkFBdUI7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RSxrRkFBa0Y7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWFyRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUF1QjFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUkxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQW9CdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2Mi4wKVxuICpcbiAqIFRoZSBmbG93Y2hhcnQgcGF0dGVybiBmb3IgYmFja2VuZCBjb2RlLlxuICogQnVpbGQg4oaSIERlc2NyaWJlIOKGkiBSdW4uXG4gKlxuICogRm9yIGFkdmFuY2VkL2ludGVybmFsIEFQSXMsIGltcG9ydCBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCcuXG4gKiBGb3IgcmVjb3JkZXIgZmFjdG9yaWVzLCBpbXBvcnQgZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJy5cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCdWlsZGVyIOKAlCBGbG93Y2hhcnQgY29uc3RydWN0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0LCBTdGFnZUZ1bmN0aW9uIGFzIFN0YWdlSGFuZGxlciwgU3RyZWFtSGFuZGxlcnMgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcbmV4cG9ydCB7IGZsb3dDaGFydCwgRmxvd0NoYXJ0QnVpbGRlciB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vLyBUeXBlZFNjb3BlIOKAlCB0eXBlZCBwcm9wZXJ0eSBhY2Nlc3MgKG5vIGNhc3RzIG5lZWRlZClcbmV4cG9ydCB0eXBlIHsgVHlwZWRTdGFnZUZ1bmN0aW9uIH0gZnJvbSAnLi9saWIvYnVpbGRlci90eXBlZEZsb3dDaGFydC5qcyc7XG5leHBvcnQgeyBjcmVhdGVUeXBlZFNjb3BlRmFjdG9yeSwgdHlwZWRGbG93Q2hhcnQgfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcbmV4cG9ydCB0eXBlIHsgU2NvcGVNZXRob2RzLCBUeXBlZFNjb3BlIH0gZnJvbSAnLi9saWIvcmVhY3RpdmUvaW5kZXguanMnO1xuZXhwb3J0IHsgY3JlYXRlVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLy8gRGVjaXNpb24gcmVhc29uaW5nIGNhcHR1cmVcbmV4cG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIEZpbHRlck9wcyxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcbmV4cG9ydCB7IGRlY2lkZSwgc2VsZWN0IH0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUnVubmVyIOKAlCB2MiBBUEk6IGNoYXJ0LnJlY29yZGVyKCkucnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9wZW5BUElPcHRpb25zIGFzIENoYXJ0T3BlbkFQSU9wdGlvbnMsXG4gIE1DUFRvb2xEZXNjcmlwdGlvbixcbiAgUnVubmFibGVGbG93Q2hhcnQsXG59IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gQ29tcG9zYWJsZVJ1bm5lciDigJQgaW50ZXJmYWNlIGZvciBzdWJmbG93IGNvbXBvc2l0aW9uXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyBTbmFwc2hvdCBuYXZpZ2F0aW9uXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlIOKAlCBQZXItc3RhZ2UgZmFjYWRlcyBhbmQgcmVjb3JkZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB7IFNjb3BlRmFjYWRlIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vLyBEZXYtbW9kZSBkaWFnbm9zdGljc1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUgfSBmcm9tICcuL2xpYi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5cbi8vIFJlY29yZGVycyAoY2xhc3MgZXhwb3J0cyDigJQgcHJlZmVyIGZhY3RvcnkgZnVuY3Rpb25zIGZyb20gZm9vdHByaW50anMvcmVjb3JkZXJzKVxuZXhwb3J0IHsgTWV0cmljUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5leHBvcnQgeyBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vLyBSZWNvcmRlciBpbnRlcmZhY2UgYW5kIGV2ZW50IHR5cGVzIChmb3IgY3VzdG9tIHJlY29yZGVycylcbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0RXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIFJlYWRFdmVudCxcbiAgUmVjb3JkZXIsXG4gIFJlZGFjdGlvblBvbGljeSxcbiAgUmVkYWN0aW9uUmVwb3J0LFxuICBXcml0ZUV2ZW50LFxufSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8vIFpvZC1iYXNlZCBzY29wZSBkZWZpbml0aW9uc1xuZXhwb3J0IHsgZGVmaW5lU2NvcGVGcm9tWm9kIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFbmdpbmUg4oCUIE5hcnJhdGl2ZSB0eXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyBGbG93UmVjb3JkZXIg4oCUIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgY29udHJvbCBmbG93IGV2ZW50c1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5leHBvcnQgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyBTdHJ1Y3R1cmVkIGVycm9yc1xuZXhwb3J0IHR5cGUgeyBTdHJ1Y3R1cmVkRXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB7IGV4dHJhY3RFcnJvckluZm8sIGZvcm1hdEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vIEJ1aWx0LWluIEZsb3dSZWNvcmRlciBzdHJhdGVnaWVzIChwcmVmZXIgZmFjdG9yeSBmdW5jdGlvbnMgZnJvbSBmb290cHJpbnRqcy9yZWNvcmRlcnMpXG5leHBvcnQgdHlwZSB7IE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHsgTWFuaWZlc3RGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHsgQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHsgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFbmdpbmUgdHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYsIFJ1bk9wdGlvbnMgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCDigJQgSS9PIGJvdW5kYXJ5LCBzY2hlbWFzLCBPcGVuQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0NoYXJ0Q29udHJhY3QsXG4gIEZsb3dDaGFydENvbnRyYWN0T3B0aW9ucyxcbiAgSnNvblNjaGVtYSxcbiAgT3BlbkFQSU9wdGlvbnMsXG4gIE9wZW5BUElTcGVjLFxufSBmcm9tICcuL2xpYi9jb250cmFjdC9pbmRleC5qcyc7XG5leHBvcnQgeyBkZWZpbmVDb250cmFjdCB9IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcbmV4cG9ydCB7IG5vcm1hbGl6ZVNjaGVtYSwgem9kVG9Kc29uU2NoZW1hIH0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuZXhwb3J0IHsgZ2VuZXJhdGVPcGVuQVBJIH0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY2hlbWEg4oCUIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgeyBTY2hlbWFLaW5kLCBWYWxpZGF0aW9uSXNzdWUsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuZXhwb3J0IHsgZGV0ZWN0U2NoZW1hLCBpc1ZhbGlkYXRhYmxlLCBpc1pvZCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5leHBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciwgdmFsaWRhdGVBZ2FpbnN0U2NoZW1hLCB2YWxpZGF0ZU9yVGhyb3cgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuIl19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFPSCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFlckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU92RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFZbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsK0VBQStFO0FBQy9FLDBDQUEwQztBQUMxQywrRUFBK0U7QUFFL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELHVCQUF1QjtBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlFLGtGQUFrRjtBQUNsRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBYXJELDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXVCMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBMEJ0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvb3RQcmludCDigJQgUHVibGljIEFQSSAodjIuMClcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBEZXNjcmliZSDihpIgUnVuLlxuICpcbiAqIEZvciBhZHZhbmNlZC9pbnRlcm5hbCBBUElzLCBpbXBvcnQgZnJvbSAnZm9vdHByaW50anMvYWR2YW5jZWQnLlxuICogRm9yIHJlY29yZGVyIGZhY3RvcmllcywgaW1wb3J0IGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycycuXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQnVpbGRlciDigJQgRmxvd2NoYXJ0IGNvbnN0cnVjdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydCwgU3RhZ2VGdW5jdGlvbiBhcyBTdGFnZUhhbmRsZXIsIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5leHBvcnQgeyBmbG93Q2hhcnQsIEZsb3dDaGFydEJ1aWxkZXIgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLy8gVHlwZWRTY29wZSDigJQgdHlwZWQgcHJvcGVydHkgYWNjZXNzIChubyBjYXN0cyBuZWVkZWQpXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8vIERlY2lzaW9uIHJlYXNvbmluZyBjYXB0dXJlXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBGaWx0ZXJPcHMsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1bm5lciDigJQgdjIgQVBJOiBjaGFydC5yZWNvcmRlcigpLnJ1bigpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIHsgUnVuUmVzdWx0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcbmV4cG9ydCB7IEZsb3dDaGFydEV4ZWN1dG9yIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcbmV4cG9ydCB7IFJ1bkNvbnRleHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuZXhwb3J0IHR5cGUge1xuICBPcGVuQVBJT3B0aW9ucyBhcyBDaGFydE9wZW5BUElPcHRpb25zLFxuICBNQ1BUb29sRGVzY3JpcHRpb24sXG4gIFJ1bm5hYmxlRmxvd0NoYXJ0LFxufSBmcm9tICcuL2xpYi9ydW5uZXIvUnVubmFibGVDaGFydC5qcyc7XG5cbi8vIENvbXBvc2FibGVSdW5uZXIg4oCUIGludGVyZmFjZSBmb3Igc3ViZmxvdyBjb21wb3NpdGlvblxuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLy8gU25hcHNob3QgbmF2aWdhdGlvblxuZXhwb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QsIFN1YnRyZWVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZSDigJQgUGVyLXN0YWdlIGZhY2FkZXMgYW5kIHJlY29yZGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgeyBTY29wZUZhY2FkZSB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLy8gRGV2LW1vZGUgZGlhZ25vc3RpY3NcbmV4cG9ydCB7IGRpc2FibGVEZXZNb2RlLCBlbmFibGVEZXZNb2RlIH0gZnJvbSAnLi9saWIvc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuXG4vLyBSZWNvcmRlcnMgKGNsYXNzIGV4cG9ydHMg4oCUIHByZWZlciBmYWN0b3J5IGZ1bmN0aW9ucyBmcm9tIGZvb3RwcmludGpzL3JlY29yZGVycylcbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuZXhwb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLy8gUmVjb3JkZXIgaW50ZXJmYWNlIGFuZCBldmVudCB0eXBlcyAoZm9yIGN1c3RvbSByZWNvcmRlcnMpXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEV2ZW50LFxuICBFcnJvckV2ZW50LFxuICBSZWFkRXZlbnQsXG4gIFJlY29yZGVyLFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vLyBab2QtYmFzZWQgc2NvcGUgZGVmaW5pdGlvbnNcbmV4cG9ydCB7IGRlZmluZVNjb3BlRnJvbVpvZCB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRW5naW5lIOKAlCBOYXJyYXRpdmUgdHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gRmxvd1JlY29yZGVyIOKAlCBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIGNvbnRyb2wgZmxvdyBldmVudHNcbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxuICBUcmF2ZXJzYWxDb250ZXh0LFxufSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gU3RydWN0dXJlZCBlcnJvcnNcbmV4cG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5leHBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCBmb3JtYXRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyBCdWlsdC1pbiBGbG93UmVjb3JkZXIgc3RyYXRlZ2llcyAocHJlZmVyIGZhY3RvcnkgZnVuY3Rpb25zIGZyb20gZm9vdHByaW50anMvcmVjb3JkZXJzKVxuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHsgU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRW5naW5lIHR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52LCBSdW5PcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcbmV4cG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5IH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29udHJhY3QgdHlwZXMgKHVzZSAuY29udHJhY3QoKSBvbiBidWlsZGVyICsgY2hhcnQudG9PcGVuQVBJKCkgaW5zdGVhZClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUge1xuICBGbG93Q2hhcnRDb250cmFjdCxcbiAgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zLFxuICBKc29uU2NoZW1hLFxuICBPcGVuQVBJT3B0aW9ucyxcbiAgT3BlbkFQSVNwZWMsXG59IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2NoZW1hIOKAlCBWYWxpZGF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcbiJdfQ==