@effect-app/vue 4.0.0-beta.33 → 4.0.0-beta.331

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 (148) hide show
  1. package/CHANGELOG.md +2463 -0
  2. package/dist/atomQuery.d.ts +120 -0
  3. package/dist/atomQuery.d.ts.map +1 -0
  4. package/dist/atomQuery.js +434 -0
  5. package/dist/commander.d.ts +634 -0
  6. package/dist/commander.d.ts.map +1 -0
  7. package/dist/commander.js +1068 -0
  8. package/dist/{experimental/confirm.d.ts → confirm.d.ts} +6 -4
  9. package/dist/confirm.d.ts.map +1 -0
  10. package/dist/confirm.js +26 -0
  11. package/dist/dependencyMetadata.d.ts +18 -0
  12. package/dist/dependencyMetadata.d.ts.map +1 -0
  13. package/dist/dependencyMetadata.js +67 -0
  14. package/dist/errorReporter.d.ts +6 -4
  15. package/dist/errorReporter.d.ts.map +1 -1
  16. package/dist/errorReporter.js +14 -19
  17. package/dist/form.d.ts +5 -5
  18. package/dist/form.d.ts.map +1 -1
  19. package/dist/form.js +42 -16
  20. package/dist/internal/tanstackQuery.d.ts +9 -0
  21. package/dist/internal/tanstackQuery.d.ts.map +1 -0
  22. package/dist/internal/tanstackQuery.js +204 -0
  23. package/dist/intl.d.ts +15 -0
  24. package/dist/intl.d.ts.map +1 -0
  25. package/dist/intl.js +9 -0
  26. package/dist/lib.d.ts +7 -9
  27. package/dist/lib.d.ts.map +1 -1
  28. package/dist/lib.js +35 -10
  29. package/dist/liveQueryInvalidation.d.ts +16 -0
  30. package/dist/liveQueryInvalidation.d.ts.map +1 -0
  31. package/dist/liveQueryInvalidation.js +115 -0
  32. package/dist/makeClient.d.ts +236 -336
  33. package/dist/makeClient.d.ts.map +1 -1
  34. package/dist/makeClient.js +417 -408
  35. package/dist/makeContext.d.ts.map +1 -1
  36. package/dist/makeIntl.d.ts.map +1 -1
  37. package/dist/{experimental/makeUseCommand.d.ts → makeUseCommand.d.ts} +4 -3
  38. package/dist/makeUseCommand.d.ts.map +1 -0
  39. package/dist/makeUseCommand.js +13 -0
  40. package/dist/mutate.d.ts +109 -40
  41. package/dist/mutate.d.ts.map +1 -1
  42. package/dist/mutate.js +235 -58
  43. package/dist/query.d.ts +158 -45
  44. package/dist/query.d.ts.map +1 -1
  45. package/dist/query.js +380 -122
  46. package/dist/queryLifetime.d.ts +25 -0
  47. package/dist/queryLifetime.d.ts.map +1 -0
  48. package/dist/queryLifetime.js +54 -0
  49. package/dist/routeParams.d.ts +4 -4
  50. package/dist/routeParams.d.ts.map +1 -1
  51. package/dist/routeParams.js +4 -3
  52. package/dist/runtime.d.ts +1 -14
  53. package/dist/runtime.d.ts.map +1 -1
  54. package/dist/runtime.js +2 -26
  55. package/dist/suspense.d.ts +19 -0
  56. package/dist/suspense.d.ts.map +1 -0
  57. package/dist/suspense.js +38 -0
  58. package/dist/toast.d.ts +2 -0
  59. package/dist/toast.d.ts.map +1 -0
  60. package/dist/toast.js +2 -0
  61. package/dist/withToast.d.ts +2 -0
  62. package/dist/withToast.d.ts.map +1 -0
  63. package/dist/withToast.js +2 -0
  64. package/docs/atom-query-api-redesign.md +207 -0
  65. package/docs/mutation-command-atoms.md +40 -0
  66. package/docs/query-key-invalidation.md +107 -0
  67. package/examples/streamMutation.ts +72 -0
  68. package/package.json +36 -95
  69. package/src/atomQuery.ts +600 -0
  70. package/src/commander.ts +3408 -0
  71. package/src/{experimental/confirm.ts → confirm.ts} +13 -15
  72. package/src/dependencyMetadata.ts +84 -0
  73. package/src/errorReporter.ts +65 -75
  74. package/src/form.ts +57 -21
  75. package/src/index.ts +7 -7
  76. package/src/internal/tanstackQuery.ts +308 -0
  77. package/src/intl.ts +12 -0
  78. package/src/lib.ts +49 -21
  79. package/src/liveQueryInvalidation.ts +138 -0
  80. package/src/makeClient.ts +971 -1159
  81. package/src/makeIntl.ts +2 -2
  82. package/src/{experimental/makeUseCommand.ts → makeUseCommand.ts} +9 -6
  83. package/src/mutate.ts +406 -153
  84. package/src/query.ts +763 -260
  85. package/src/queryLifetime.ts +74 -0
  86. package/src/routeParams.ts +7 -7
  87. package/src/runtime.ts +1 -31
  88. package/src/suspense.ts +43 -0
  89. package/src/toast.ts +1 -0
  90. package/src/withToast.ts +1 -0
  91. package/test/Mutation.test.ts +181 -24
  92. package/test/dependencyInvalidation.test.ts +444 -0
  93. package/test/dist/dependencyInvalidation.test.d.ts.map +1 -0
  94. package/test/dist/form.test.d.ts.map +1 -1
  95. package/test/dist/inactiveInvalidation.test.d.ts.map +1 -0
  96. package/test/dist/interrupt-refetch-repro.test.d.ts.map +1 -0
  97. package/test/dist/lib.test.d.ts.map +1 -0
  98. package/test/dist/liveQueryInvalidation.test.d.ts.map +1 -0
  99. package/test/dist/query-span.test.d.ts.map +1 -0
  100. package/test/dist/queryOptions.test.d.ts.map +1 -0
  101. package/test/dist/streamFinal.test.d.ts.map +1 -0
  102. package/test/dist/streamFn.test.d.ts.map +1 -0
  103. package/test/dist/stubs.d.ts +3751 -120
  104. package/test/dist/stubs.d.ts.map +1 -1
  105. package/test/dist/stubs.js +190 -30
  106. package/test/dist/suspense-regression.test.d.ts.map +1 -0
  107. package/test/dist/suspense.test.d.ts.map +1 -0
  108. package/test/form-validation-errors.test.ts +24 -19
  109. package/test/form.test.ts +25 -6
  110. package/test/inactiveInvalidation.test.ts +172 -0
  111. package/test/interrupt-refetch-repro.test.ts +625 -0
  112. package/test/lib.test.ts +240 -0
  113. package/test/liveQueryInvalidation.test.ts +108 -0
  114. package/test/makeClient.test.ts +437 -38
  115. package/test/query-span.test.ts +92 -0
  116. package/test/queryOptions.test.ts +88 -0
  117. package/test/streamFinal.test.ts +64 -0
  118. package/test/streamFn.test.ts +457 -0
  119. package/test/stubs.ts +227 -42
  120. package/test/suspense-regression.test.ts +168 -0
  121. package/test/suspense.test.ts +160 -0
  122. package/tsconfig.examples.json +20 -0
  123. package/tsconfig.json +9 -2
  124. package/tsconfig.src.json +34 -34
  125. package/tsconfig.test.json +2 -2
  126. package/vitest.config.ts +5 -5
  127. package/dist/experimental/commander.d.ts +0 -359
  128. package/dist/experimental/commander.d.ts.map +0 -1
  129. package/dist/experimental/commander.js +0 -557
  130. package/dist/experimental/confirm.d.ts.map +0 -1
  131. package/dist/experimental/confirm.js +0 -28
  132. package/dist/experimental/intl.d.ts +0 -16
  133. package/dist/experimental/intl.d.ts.map +0 -1
  134. package/dist/experimental/intl.js +0 -5
  135. package/dist/experimental/makeUseCommand.d.ts.map +0 -1
  136. package/dist/experimental/makeUseCommand.js +0 -13
  137. package/dist/experimental/toast.d.ts +0 -47
  138. package/dist/experimental/toast.d.ts.map +0 -1
  139. package/dist/experimental/toast.js +0 -41
  140. package/dist/experimental/withToast.d.ts +0 -25
  141. package/dist/experimental/withToast.d.ts.map +0 -1
  142. package/dist/experimental/withToast.js +0 -45
  143. package/eslint.config.mjs +0 -24
  144. package/src/experimental/commander.ts +0 -1835
  145. package/src/experimental/intl.ts +0 -9
  146. package/src/experimental/toast.ts +0 -66
  147. package/src/experimental/withToast.ts +0 -99
  148. package/tsconfig.json.bak +0 -12
@@ -1,336 +1,120 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { isCancelledError } from "@tanstack/vue-query";
3
2
  import { camelCase } from "change-case";
4
- import { Cause, Data, Effect, Exit, Layer, Match, Option, S, ServiceMap, Struct } from "effect-app";
5
- import { ErrorSilenced } from "effect-app/client/errors";
6
- import { constant, identity, pipe, tuple } from "effect-app/Function";
7
- import { OperationSuccess } from "effect-app/Operations";
8
- import { dropUndefinedT, extendM } from "effect-app/utils";
9
- import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
10
- import { computed, onBeforeUnmount, ref, watch } from "vue";
11
- import { reportMessage } from "./errorReporter.js";
12
- import { CommanderStatic } from "./experimental/commander.js";
13
- import { I18n } from "./experimental/intl.js";
14
- import { makeUseCommand } from "./experimental/makeUseCommand.js";
15
- import { Toast } from "./experimental/toast.js";
16
- import { buildFieldInfoFromFieldsRoot } from "./form.js";
17
- import { reportRuntimeError } from "./lib.js";
18
- import { asResult, makeMutation, mutationResultToVue, useMakeMutation } from "./mutate.js";
19
- import { makeQuery } from "./query.js";
20
- const mapHandler = (handler, map) => Effect.isEffect(handler) ? map(handler, undefined) : (i) => map(handler(i), i);
3
+ import * as Context from "effect-app/Context";
4
+ import * as Effect from "effect-app/Effect";
5
+ import * as Layer from "effect-app/Layer";
6
+ import * as S from "effect-app/Schema";
7
+ import * as Cause from "effect/Cause";
8
+ import * as Data from "effect/Data";
9
+ import * as Exit from "effect/Exit";
10
+ import * as Hash from "effect/Hash";
11
+ import * as Struct from "effect/Struct";
12
+ import * as Reactivity from "effect/unstable/reactivity/Reactivity";
13
+ import { effectScope, onBeforeUnmount, onScopeDispose, ref } from "vue";
14
+ import { invalidateAndAwait, invalidateSoft, makeAtomClientRuntime } from "./atomQuery.js";
15
+ import { CommanderStatic } from "./commander.js";
16
+ import { makeTanstackQuery, makeTanstackQueryCacheUpdater, makeTanstackQueryClient, makeTanstackQueryInvalidator } from "./internal/tanstackQuery.js";
17
+ import { makeUseCommand } from "./makeUseCommand.js";
18
+ import { atomQueryInvalidator, combineQueryInvalidators, makeMutation, makeStreamMutation2, useMakeMutation } from "./mutate.js";
19
+ import { atomQueryCacheUpdater, combineQueryCacheUpdaters, makeQuery, makeQueryAtom, makeQueryFamily, makeQueryNew, makeStreamQuery, makeStreamQueryAtom, makeStreamQueryFamily, makeStreamQueryNew, optionalAtomQueryCacheUpdater, setQueryCacheUpdater } from "./query.js";
20
+ import { makeRunPromise } from "./runtime.js";
21
+ import { latestDefined } from "./suspense.js";
22
+ const useScopedSuspenseSetup = (setup) => {
23
+ const scope = effectScope();
24
+ const controller = new AbortController();
25
+ const value = scope.run(setup);
26
+ if (value === undefined) {
27
+ throw new Error("Internal Error: suspense setup scope did not initialize");
28
+ }
29
+ const isMounted = ref(true);
30
+ let stopped = false;
31
+ const stop = () => {
32
+ if (stopped)
33
+ return;
34
+ stopped = true;
35
+ isMounted.value = false;
36
+ controller.abort();
37
+ scope.stop();
38
+ };
39
+ onBeforeUnmount(stop);
40
+ onScopeDispose(stop);
41
+ return [value, isMounted, controller.signal];
42
+ };
21
43
  /**
22
- * Use this after handling an error yourself, still continueing on the Error track, but the error will not be reported.
44
+ * A suspense query settled with an interrupt-only cause while its component was still MOUNTED.
45
+ *
46
+ * That combination classifies the interrupt's origin: a navigation/unmount cancel interrupts the
47
+ * suspense *fiber* (via the scope's AbortSignal) or is hidden by effect-core before it can settle —
48
+ * it never yields a still-mounted `Failure` exit. A `Failure(interrupt-only)` observed while mounted
49
+ * therefore came from the QUERY side — e.g. the server returned an RPC interrupt `Exit` (over a 200),
50
+ * or the fetch was superseded — and silencing it leaves the user staring at a blank page.
51
+ *
52
+ * Error boundaries can rely on this split: keep silencing raw interrupt-only causes (those are
53
+ * genuinely "user navigated away"), and render this error as "the request was interrupted — reload?".
23
54
  */
24
- export class SuppressErrors extends Data.TaggedError("SuppressErrors") {
25
- [ErrorSilenced] = true;
26
- }
27
- export const suppressToast = constant(Effect.succeed(undefined));
28
- /** handles errors as specified and reports defects */
29
- function handleRequest(f, id, action, options) {
30
- const handleEffect = (i) => (self) => self.pipe(Effect.tap(Effect.matchCauseEffect({
31
- onSuccess: (r) => options.onSuccess(r, i),
32
- onFailure: (cause) => Effect.gen(function* () {
33
- if (Cause.hasInterruptsOnly(cause)) {
34
- console.info(`Interrupted while trying to ${action}`);
35
- return;
36
- }
37
- const fail = Cause.findErrorOption(cause);
38
- if (Option.isSome(fail)) {
39
- if (fail.value._tag === "SuppressErrors") {
40
- console.info(`Suppressed error trying to ${action}`, fail.value);
41
- return;
42
- }
43
- const message = `Failure trying to ${action}`;
44
- yield* reportMessage(message, { action, error: fail.value });
45
- yield* options.onFail(fail.value, i);
46
- return;
47
- }
48
- const extra = {
49
- action,
50
- message: `Unexpected Error trying to ${action}`
51
- };
52
- yield* reportRuntimeError(cause, extra);
53
- yield* options.onDefect(cause, i);
54
- })
55
- })), Effect.withSpan(`mutation ${id}`, {}, { captureStackTrace: false }));
56
- return Object.assign(Effect.isEffect(f)
57
- ? pipe(f, handleEffect(void 0))
58
- : (i) => pipe(f(i), handleEffect(i)), { action });
55
+ export class SuspenseInterruptedError extends Data.TaggedError("SuspenseInterruptedError") {
56
+ get message() {
57
+ return "The request was interrupted while the page was still active";
58
+ }
59
59
  }
60
- const _useMutation = makeMutation();
60
+ /** Structural check (by `_tag`) so consumers compiled against older published types can detect it. */
61
+ export const isSuspenseInterruptedError = (e) => typeof e === "object" && e !== null && "_tag" in e && e._tag === "SuspenseInterruptedError";
62
+ // TODO: optimize - work from encoded shape directly
63
+ const projectHandler = (handler, successSchema, projectionSchema) => {
64
+ const encode = S.encodeUnknownEffect(successSchema);
65
+ const decode = S.decodeUnknownEffect(projectionSchema);
66
+ return (i) => handler(i).pipe(Effect.flatMap(encode), Effect.flatMap(decode));
67
+ };
68
+ const projectionSchemaHash = (schema) => String(Hash.hash(schema.ast));
69
+ const _useMutation = makeMutation(atomQueryInvalidator);
70
+ const wrapWithSpan = (self, mut) => {
71
+ const span = (eff) => Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })(eff);
72
+ return (input, options) => span(mut(input, options));
73
+ };
61
74
  /**
62
75
  * Pass an Effect or a function that returns an Effect, e.g from a client action
63
76
  * Executes query cache invalidation based on default rules or provided option.
64
77
  * adds a span with the mutation id
65
78
  */
66
- export const useMutation = (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
79
+ export const useMutation = ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
67
80
  /**
68
81
  * Pass an Effect or a function that returns an Effect, e.g from a client action
69
82
  * Executes query cache invalidation based on default rules or provided option.
70
83
  * adds a span with the mutation id
71
84
  */
72
- export const useMutationInt = () => {
73
- const _useMutation = useMakeMutation();
74
- return (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
85
+ export const useMutationInt = (queryInvalidator) => {
86
+ const _useMutation = useMakeMutation(queryInvalidator);
87
+ return ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
75
88
  };
76
- export class LegacyMutationImpl {
77
- getRuntime;
78
- toast;
79
- intl;
80
- constructor(getRuntime, toast, intl) {
81
- this.getRuntime = getRuntime;
82
- this.toast = toast;
83
- this.intl = intl;
84
- }
85
- /**
86
- * Effect results are converted to Exit, so errors are ignored by default.
87
- * you should use the result ref to render errors!
88
- * @deprecated use `Command.fn` and friends instead
89
- */
90
- useSafeMutation = (self, options) => {
91
- const unsafe = _useMutation(self, options);
92
- const mh = options?.mapHandler ?? identity;
93
- const [a, b] = asResult(mapHandler(mapHandler(unsafe, mh), Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause))));
94
- return [
95
- a,
96
- mapHandler(b, Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false }))
97
- ];
98
- };
99
- /** handles errors as toasts and reports defects
100
- * @deprecated use `Command.fn` and friends instead
101
- */
102
- useHandleRequestWithToast = () => {
103
- // eslint-disable-next-line @typescript-eslint/no-this-alias
104
- const self = this;
105
- return handleRequestWithToast;
106
- /**
107
- * Pass a function that returns a Promise.
108
- * Returns an execution function which reports errors as Toast.
109
- */
110
- function handleRequestWithToast(f, id, action, options = {}) {
111
- const actionMessage = self.intl.formatMessage({ id: `action.${action}`, defaultMessage: action });
112
- const defaultWarnMessage = self.intl.formatMessage({ id: "handle.with_warnings" }, { action: actionMessage });
113
- const defaultSuccessMessage = self.intl.formatMessage({ id: "handle.success" }, { action: actionMessage });
114
- const defaultErrorMessage = self.intl.formatMessage({ id: "handle.with_errors" }, { action: actionMessage });
115
- return handleRequest(f, id, action, {
116
- onSuccess: Effect.fnUntraced(function* (a, i) {
117
- const message = options.successMessage ? yield* options.successMessage(a, i) : defaultSuccessMessage
118
- + (S.is(OperationSuccess)(a) && a.message
119
- ? "\n" + a.message
120
- : "");
121
- if (message) {
122
- yield* self.toast.success(message);
123
- }
124
- }),
125
- onFail: Effect.fnUntraced(function* (e, i) {
126
- if (!options.failMessage && e._tag === "OperationFailure") {
127
- yield* self.toast.warning(defaultWarnMessage + e.message
128
- ? "\n" + e.message
129
- : "");
130
- return;
131
- }
132
- const message = options.failMessage
133
- ? yield* options.failMessage(e, i)
134
- : `${defaultErrorMessage}:\n` + renderError(e);
135
- if (message) {
136
- yield* self.toast.error(message);
137
- }
138
- }),
139
- onDefect: Effect.fnUntraced(function* (cause, i) {
140
- const message = options.defectMessage
141
- ? yield* options.defectMessage(cause, i)
142
- : self.intl.formatMessage({ id: "handle.unexpected_error" }, {
143
- action: actionMessage,
144
- error: Cause.pretty(cause)
145
- });
146
- if (message) {
147
- yield* self.toast.error(message);
148
- }
149
- })
150
- });
151
- }
152
- function renderError(e) {
153
- return Match.value(e).pipe(Match.tags({
154
- // HttpErrorRequest: e =>
155
- // this.intl.value.formatMessage(
156
- // { id: "handle.request_error" },
157
- // { error: `${e.error}` },
158
- // ),
159
- // HttpErrorResponse: e =>
160
- // e.response.status >= 500 ||
161
- // e.response.body._tag !== "Some" ||
162
- // !e.response.body.value
163
- // ? this.intl.value.formatMessage(
164
- // { id: "handle.error_response" },
165
- // {
166
- // error: `${
167
- // e.response.body._tag === "Some" && e.response.body.value
168
- // ? parseError(e.response.body.value)
169
- // : "Unknown"
170
- // } (${e.response.status})`,
171
- // },
172
- // )
173
- // : this.intl.value.formatMessage(
174
- // { id: "handle.unexpected_error" },
175
- // {
176
- // error:
177
- // JSON.stringify(e.response.body, undefined, 2) +
178
- // "( " +
179
- // e.response.status +
180
- // ")",
181
- // },
182
- // ),
183
- // ResponseError: e =>
184
- // this.intl.value.formatMessage(
185
- // { id: "handle.response_error" },
186
- // { error: `${e.error}` },
187
- // ),
188
- SchemaError: (e) => {
189
- console.warn(e.toString());
190
- return self.intl.formatMessage({ id: "validation.failed" });
191
- }
192
- }), Match.orElse((e) => `${e.message ?? e._tag ?? e}`));
193
- }
194
- };
195
- /**
196
- * Pass a function that returns an Effect, e.g from a client action, give it a name.
197
- * Returns a tuple with raw Result and execution function which reports success and errors as Toast.
198
- * @deprecated use `Command.fn` and friends instead
199
- */
200
- useAndHandleMutationResult = (self, action, options) => {
201
- const handleRequestWithToast = this.useHandleRequestWithToast();
202
- const handler = self.handler;
203
- const unsafe = _useMutation({
204
- ...self,
205
- handler: Effect.isEffect(handler)
206
- ? pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(handler))
207
- : (...args) => pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(handler(...args)))
208
- }, options ? dropUndefinedT(options) : undefined);
209
- const mh = options?.mapHandler ?? identity;
210
- // Effect.tapDefect(reportRuntimeError) handled in toast handler,
211
- const [a, b] = asResult(mapHandler(unsafe, mh));
212
- return tuple(a, handleRequestWithToast(b, self.id, action, options));
213
- };
214
- //
215
- /**
216
- * Pass a function that returns an Effect, e.g from a client action, give it a name.
217
- * Returns a tuple with state ref and execution function which reports success and errors as Toast.
218
- *
219
- * @deprecated use `Command.fn` and friends instead
220
- */
221
- useAndHandleMutation = (self, action, options) => {
222
- const [a, b] = this.useAndHandleMutationResult(self, action, options);
223
- return tuple(computed(() => mutationResultToVue(a.value)), b);
224
- };
225
- /** @deprecated use `Command.fn` and friends instead */
226
- makeUseAndHandleMutation = (defaultOptions) => ((self, action, options) => {
227
- return this.useAndHandleMutation(self, action, { ...defaultOptions, ...options });
228
- });
229
- /**
230
- * The same as @see useAndHandleMutation, but does not display any toasts by default.
231
- * Messages for success, error and defect toasts can be provided in the Options.
232
- * @deprecated use `Command.fn` and friends instead
233
- */
234
- useAndHandleMutationSilently = this.makeUseAndHandleMutation({
235
- successMessage: suppressToast,
236
- failMessage: suppressToast,
237
- defectMessage: suppressToast
238
- });
239
- /**
240
- * The same as @see useAndHandleMutation, but does not act on success, error or defect by default.
241
- * Actions for success, error and defect can be provided in the Options.
242
- * @deprecated use `Command.fn` and friends instead
243
- */
244
- useAndHandleMutationCustom = (self, action, options) => {
245
- const unsafe = _useMutation({
246
- ...self,
247
- handler: Effect.isEffect(self.handler)
248
- ? pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(self.handler))
249
- : (...args) => pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(self.handler(...args)))
250
- }, options ? dropUndefinedT(options) : undefined);
251
- const mh = options?.mapHandler ?? identity;
252
- const [a, b] = asResult(mapHandler(mapHandler(unsafe, mh), Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause))));
253
- return tuple(computed(() => mutationResultToVue(a.value)), handleRequest(b, self.id, action, {
254
- onSuccess: suppressToast,
255
- onDefect: suppressToast,
256
- onFail: suppressToast,
257
- ...options
258
- }));
259
- };
260
- /**
261
- * Effect results are converted to Exit, so errors are ignored by default.
262
- * you should use the result ref to render errors!
263
- * @deprecated use `Command.fn` and friends instead
264
- */
265
- useSafeMutationWithState = (self, options) => {
266
- const [a, b] = this.useSafeMutation(self, options);
267
- return tuple(computed(() => mutationResultToVue(a.value)), b);
268
- };
269
- /** @deprecated use OmegaForm */
270
- buildFormFromSchema = (s, state, onSubmit) => {
271
- const fields = buildFieldInfoFromFieldsRoot(s).fields;
272
- const schema = S.Struct(Struct.omit(s.fields, ["_tag"]));
273
- const parse = S.decodeUnknownSync(schema);
274
- const isDirty = ref(false);
275
- const isValid = ref(true);
276
- const isLoading = ref(false);
277
- const runPromise = Effect.runPromiseWith(this.getRuntime());
278
- const submit1 = (onSubmit) => async (e) => {
279
- isLoading.value = true;
280
- try {
281
- const r = await e;
282
- if (!r.valid)
283
- return;
284
- return await runPromise(onSubmit(new s(await runPromise(parse(state.value)))));
285
- }
286
- finally {
287
- isLoading.value = false;
288
- }
289
- };
290
- const submit = submit1(onSubmit);
291
- watch(state, (v) => {
292
- // TODO: do better
293
- isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value);
294
- }, { deep: true });
295
- const submitFromState = Effect.gen(function* () {
296
- return yield* onSubmit(yield* parse(state.value));
297
- });
298
- const submitFromStatePromise = () => runPromise(submitFromState);
299
- return {
300
- fields,
301
- /** optimized for Vuetify v-form submit callback */
302
- submit,
303
- /** optimized for Native form submit callback or general use */
304
- submitFromState,
305
- submitFromStatePromise,
306
- isDirty,
307
- isValid,
308
- isLoading
309
- };
310
- };
311
- }
312
- // @effect-diagnostics-next-line missingEffectServiceDependency:off
313
- export class LegacyMutation extends ServiceMap.Service()("LegacyMutation", {
314
- make: Effect.gen(function* () {
315
- const intl = yield* I18n;
316
- const toast = yield* Toast;
317
- return (getRuntime) => new LegacyMutationImpl(getRuntime, toast, intl);
318
- })
319
- }) {
320
- static DefaultWithoutDependencies = Layer.effect(this, this.make);
321
- static Default = this.DefaultWithoutDependencies;
322
- }
323
89
  export class QueryImpl {
324
90
  getRuntime;
325
- constructor(getRuntime) {
91
+ constructor(getRuntime, getAtomRt, legacyUseQuery) {
326
92
  this.getRuntime = getRuntime;
327
- this.useQuery = makeQuery(this.getRuntime);
93
+ this.useQuery = legacyUseQuery ?? makeQuery(this.getRuntime, getAtomRt);
94
+ this.useQueryNew = makeQueryNew(this.getRuntime, getAtomRt);
95
+ this.useQueryAtom = makeQueryAtom(this.getRuntime, getAtomRt);
96
+ this.useQueryFamily = makeQueryFamily(this.getRuntime, getAtomRt);
97
+ this.useStreamQuery = makeStreamQuery(this.getRuntime, getAtomRt);
98
+ this.useStreamQueryFamily = makeStreamQueryFamily(this.getRuntime, getAtomRt);
99
+ this.useStreamQueryAtom = makeStreamQueryAtom(this.getRuntime, getAtomRt);
100
+ this.useStreamQueryNew = makeStreamQueryNew(this.getRuntime, getAtomRt);
328
101
  }
329
102
  /**
330
103
  * Effect results are passed to the caller, including errors.
331
104
  * @deprecated use client helpers instead (.query())
332
105
  */
333
106
  useQuery;
107
+ useQueryNew;
108
+ useQueryAtom;
109
+ useQueryFamily;
110
+ /**
111
+ * Stream results are accumulated as an array of chunks and returned as reactive state.
112
+ * @deprecated use client helpers instead (.query())
113
+ */
114
+ useStreamQuery;
115
+ useStreamQueryFamily;
116
+ useStreamQueryAtom;
117
+ useStreamQueryNew;
334
118
  /**
335
119
  * The difference with useQuery is that this function will return a Promise you can await in the Setup,
336
120
  * which ensures that either there always is a latest value, or an error occurs on load.
@@ -338,94 +122,234 @@ export class QueryImpl {
338
122
  * @deprecated use client helpers instead (.suspense())
339
123
  */
340
124
  useSuspenseQuery = (self) => {
341
- const runPromise = Effect.runPromiseWith(this.getRuntime());
125
+ const runPromise = makeRunPromise(this.getRuntime());
342
126
  const q = this.useQuery(self);
343
127
  return (argOrOptions, options) => {
344
- const [resultRef, latestRef, fetch, uqrt] = q(argOrOptions, { ...options, suspense: true } // experimental_prefetchInRender: true }
345
- );
346
- const isMounted = ref(true);
347
- onBeforeUnmount(() => {
348
- isMounted.value = false;
128
+ const [[resultRef, latestDefinedRef, fetch, uqrt], isMounted, signal] = useScopedSuspenseSetup(() => {
129
+ const [resultRef, latestRef, fetch, uqrt] = q(argOrOptions, options);
130
+ const latestDefinedRef = latestDefined(() => latestRef.value, "suspense");
131
+ return [resultRef, latestDefinedRef, fetch, uqrt];
349
132
  });
350
133
  // @effect-diagnostics effect/missingEffectError:off
351
134
  const eff = Effect.gen(function* () {
352
- // we want to throw on error so that we can catch cancelled error and skip handling it
353
- // what's the difference with just calling `fetch` ?
354
- // we will receive a CancelledError which we will have to ignore in our ErrorBoundary, otherwise the user ends up on an error page even if the user e.g cancelled a navigation
355
- const r = yield* Effect.tryPromise(() => uqrt.suspense()).pipe(Effect.catchTag("UnknownError", (err) => isCancelledError(err.cause)
356
- ? Effect.interrupt
357
- : Effect.die(err.cause)));
135
+ const exit = yield* uqrt.awaitResult().pipe(Effect.exit);
358
136
  if (!isMounted.value) {
359
137
  return yield* Effect.interrupt;
360
138
  }
361
- const result = resultRef.value;
362
- if (AsyncResult.isInitial(result)) {
363
- console.error("Internal Error: Promise should be resolved already", {
364
- self,
365
- argOrOptions,
366
- options,
367
- r,
368
- resultRef
369
- });
370
- return yield* Effect.die("Internal Error: Promise should be resolved already");
139
+ if (Exit.isFailure(exit)) {
140
+ // Still mounted, so this interrupt came from the query side (e.g. a server RPC interrupt
141
+ // Exit), not from navigation/unmount — surface it as a renderable typed error instead of a
142
+ // raw interrupt the error boundary would silence into a blank page.
143
+ if (Cause.hasInterruptsOnly(exit.cause)) {
144
+ return yield* new SuspenseInterruptedError({ originalCause: exit.cause, source: "suspense" });
145
+ }
146
+ return yield* Exit.failCause(exit.cause);
147
+ }
148
+ return [resultRef, latestDefinedRef, fetch, uqrt];
149
+ });
150
+ return runPromise(eff, { signal });
151
+ };
152
+ };
153
+ useSuspenseQueryNew = (self) => {
154
+ const runPromise = makeRunPromise(this.getRuntime());
155
+ const q = this.useQueryNew(self);
156
+ return (argOrOptions, options) => {
157
+ const [{ view, data }, isMounted, signal] = useScopedSuspenseSetup(() => {
158
+ const view = q(argOrOptions, options);
159
+ const data = latestDefined(() => view.data.value, "suspenseNew");
160
+ return { view, data };
161
+ });
162
+ // @effect-diagnostics effect/missingEffectError:off
163
+ const eff = Effect.gen(function* () {
164
+ const exit = yield* view.awaitResult().pipe(Effect.exit);
165
+ if (!isMounted.value) {
166
+ return yield* Effect.interrupt;
371
167
  }
372
- if (AsyncResult.isFailure(result)) {
373
- return yield* Exit.failCause(result.cause);
168
+ if (Exit.isFailure(exit)) {
169
+ // Still mounted → query-side interrupt (see SuspenseInterruptedError) — render, don't silence.
170
+ if (Cause.hasInterruptsOnly(exit.cause)) {
171
+ return yield* new SuspenseInterruptedError({ originalCause: exit.cause, source: "suspenseNew" });
172
+ }
173
+ return yield* Exit.failCause(exit.cause);
374
174
  }
375
- return [resultRef, latestRef, fetch, uqrt];
175
+ const fetch = (_options) => view.refetch();
176
+ const handle = {
177
+ awaitResult: view.awaitResult,
178
+ refetch: view.refetch,
179
+ refresh: view.refresh,
180
+ registry: view.registry,
181
+ atom: view.atom
182
+ };
183
+ return Object.assign([
184
+ view.result,
185
+ data,
186
+ fetch,
187
+ handle
188
+ ], {
189
+ ...view,
190
+ data
191
+ });
376
192
  });
377
- return runPromise(eff);
193
+ return runPromise(eff, { signal });
378
194
  };
379
195
  };
380
196
  }
381
197
  // somehow mrt.runtimeEffect doesnt work sync, but this workaround works fine? not sure why though as the layers are generally only sync
382
- const managedRuntimeRt = (mrt) => mrt.runSync(Effect.services());
198
+ const managedRuntimeRt = (mrt) => mrt.runSync(Effect.context());
199
+ const makeResolvedAtomQueryInvalidator = (getContext) => {
200
+ let reactivity;
201
+ const getReactivity = () => {
202
+ if (reactivity !== undefined)
203
+ return reactivity;
204
+ const service = Context.getOrUndefined(getContext(), Reactivity.Reactivity);
205
+ if (service === undefined) {
206
+ throw new Error("Reactivity service is missing from the client runtime");
207
+ }
208
+ return reactivity = service;
209
+ };
210
+ return {
211
+ invalidateAndAwait: (keys) => invalidateAndAwait(keys).pipe(Effect.provideService(Reactivity.Reactivity, getReactivity())),
212
+ invalidateSoft: (keys) => invalidateSoft(keys).pipe(Effect.provideService(Reactivity.Reactivity, getReactivity()))
213
+ };
214
+ };
383
215
  export const makeClient = (
384
216
  // global, but only accessible after startup has completed
385
- getBaseMrt, clientFor_, rtHooks) => {
386
- const getRt = Effect.services();
217
+ getBaseMrt, clientFor_, rtHooks, options) => {
387
218
  const getBaseRt = () => managedRuntimeRt(getBaseMrt());
388
219
  const makeCommand = makeUseCommand(rtHooks);
389
- const makeMutation = Effect.gen(function* () {
390
- const mut = yield* LegacyMutation;
391
- return mut(() => getBaseMrt().runSync(getRt));
392
- });
393
220
  let cmd;
394
221
  const useCommand = () => cmd ??= getBaseMrt().runSync(makeCommand);
395
- let mut;
396
- const getMutation = () => mut ??= getBaseMrt().runSync(makeMutation);
222
+ // one AtomRuntime for the query engine, built lazily from the live app context;
223
+ // shares the ManagedRuntime memoMap so layers + Reactivity are the same instances.
224
+ let atomRt;
225
+ const getAtomRt = () => (atomRt ??= makeAtomClientRuntime(() => Layer.succeedContext(getBaseRt()), getBaseMrt().memoMap));
226
+ const legacyQueryEngine = options?.legacyQueryEngine ?? "tanstack";
227
+ let tanstackQueryClient;
228
+ const getTanstackQueryClient = () => tanstackQueryClient ??= makeTanstackQueryClient();
229
+ const atomInvalidator = makeResolvedAtomQueryInvalidator(getBaseRt);
230
+ const queryInvalidator = legacyQueryEngine === "tanstack"
231
+ ? combineQueryInvalidators(atomInvalidator, makeTanstackQueryInvalidator(getTanstackQueryClient()))
232
+ : atomInvalidator;
233
+ setQueryCacheUpdater(legacyQueryEngine === "tanstack"
234
+ ? combineQueryCacheUpdaters(makeTanstackQueryCacheUpdater(getTanstackQueryClient()), optionalAtomQueryCacheUpdater)
235
+ : atomQueryCacheUpdater);
397
236
  let m;
398
- const useMutation = () => m ??= useMutationInt();
399
- const keys = [
400
- "useSafeMutationWithState",
401
- "useAndHandleMutation",
402
- "useAndHandleMutationResult",
403
- "useAndHandleMutationSilently",
404
- "useAndHandleMutationCustom",
405
- "makeUseAndHandleMutation",
406
- "useHandleRequestWithToast",
407
- "buildFormFromSchema",
408
- "useSafeMutation"
409
- ];
410
- const mutations = keys.reduce((prev, cur) => {
411
- ;
412
- prev[cur] = ((...args) => {
413
- return getMutation()[cur](...args);
414
- });
415
- return prev;
416
- }, {});
417
- const query = new QueryImpl(getBaseRt);
237
+ const useMutation = () => m ??= useMutationInt(queryInvalidator);
238
+ let sm2;
239
+ const useStreamMutation2 = () => sm2 ??= makeStreamMutation2(queryInvalidator);
240
+ const legacyUseQuery = legacyQueryEngine === "tanstack"
241
+ ? makeTanstackQuery(getBaseRt, getTanstackQueryClient())
242
+ : undefined;
243
+ const query = new QueryImpl(getBaseRt, getAtomRt, legacyUseQuery);
418
244
  const useQuery = query.useQuery;
245
+ const useQueryNew = query.useQueryNew;
246
+ const useQueryAtom = query.useQueryAtom;
247
+ const useQueryFamily = query.useQueryFamily;
419
248
  const useSuspenseQuery = query.useSuspenseQuery;
249
+ const useSuspenseQueryNew = query.useSuspenseQueryNew;
250
+ const useStreamQuery = query.useStreamQuery;
251
+ const useStreamQueryFamily = query.useStreamQueryFamily;
252
+ const useStreamQueryAtom = query.useStreamQueryAtom;
253
+ const useStreamQueryNew = query.useStreamQueryNew;
254
+ const isQueryHandler = (handler) => handler.Request.type === "query" && !handler.Request.stream;
255
+ const isStreamQueryHandler = (handler) => handler.Request.type === "query" && handler.Request.stream;
256
+ const queryHelpersFor = (handler) => ({
257
+ family: useQueryFamily(handler),
258
+ atom: useQueryAtom(handler),
259
+ query: useQuery(handler),
260
+ queryNew: useQueryNew(handler),
261
+ suspense: useSuspenseQuery(handler),
262
+ suspenseNew: useSuspenseQueryNew(handler)
263
+ });
264
+ const streamQueryHelpersFor = (handler) => ({
265
+ family: useStreamQueryFamily(handler),
266
+ atom: useStreamQueryAtom(handler),
267
+ query: useStreamQuery(handler),
268
+ queryNew: useStreamQueryNew(handler)
269
+ });
270
+ const projectQueryFor = (handler) => (projectionSchema) => {
271
+ const successSchema = handler.Request.success;
272
+ const projectionHash = projectionSchemaHash(projectionSchema);
273
+ const projected = projectHandler(handler.handler, successSchema, projectionSchema);
274
+ const projectedHandler = {
275
+ handler: projected,
276
+ id: handler.id,
277
+ Request: handler.Request,
278
+ queryKeyProjectionHash: projectionHash
279
+ };
280
+ if (handler.options) {
281
+ return {
282
+ request: projected,
283
+ ...queryHelpersFor({ ...projectedHandler, options: handler.options })
284
+ };
285
+ }
286
+ return {
287
+ request: projected,
288
+ ...queryHelpersFor(projectedHandler)
289
+ };
290
+ };
291
+ const mergeInvalidation = (a, b) => {
292
+ if (!a && !b) {
293
+ return undefined;
294
+ }
295
+ return (defaultKey, name, input, output) => [
296
+ ...(a?.(defaultKey, name, input, output) ?? []),
297
+ ...(b?.(defaultKey, name, input, output) ?? [])
298
+ ];
299
+ };
300
+ const withDefaultInvalidation = (mut, defaultInvalidation) => {
301
+ if (!defaultInvalidation)
302
+ return mut;
303
+ const apply = (callerOpts) => ({
304
+ ...callerOpts,
305
+ queryInvalidation: callerOpts?.queryInvalidation
306
+ ? mergeInvalidation(defaultInvalidation, callerOpts.queryInvalidation)
307
+ : defaultInvalidation
308
+ });
309
+ return (input, callerOpts) => mut(input, apply(callerOpts));
310
+ };
311
+ const makeQueryResources = (resources) => {
312
+ if (!resources) {
313
+ return {};
314
+ }
315
+ return resources;
316
+ };
420
317
  const mapQuery = (client) => {
421
318
  const queries = Struct.keys(client).reduce((acc, key) => {
422
- ;
423
- acc[camelCase(key) + "Query"] = Object.assign(useQuery(client[key]), {
424
- id: client[key].id
425
- });
426
- acc[camelCase(key) + "SuspenseQuery"] = Object.assign(useSuspenseQuery(client[key]), {
427
- id: client[key].id
428
- });
319
+ const handler = client[key];
320
+ if (isQueryHandler(handler)) {
321
+ Object.assign(acc, {
322
+ [camelCase(key) + "QueryFamily"]: Object.assign(useQueryFamily(handler), {
323
+ id: client[key].id
324
+ })
325
+ });
326
+ acc[camelCase(key) + "Query"] = Object.assign(useQuery(handler), {
327
+ id: client[key].id
328
+ });
329
+ acc[camelCase(key) + "QueryNew"] = Object.assign(useQueryNew(handler), {
330
+ id: client[key].id
331
+ });
332
+ acc[camelCase(key) + "SuspenseQuery"] = Object.assign(useSuspenseQuery(handler), {
333
+ id: client[key].id
334
+ });
335
+ acc[camelCase(key) + "SuspenseQueryNew"] = Object.assign(useSuspenseQueryNew(handler), {
336
+ id: client[key].id
337
+ });
338
+ }
339
+ else if (isStreamQueryHandler(handler)) {
340
+ const streamHelpers = streamQueryHelpersFor(handler);
341
+ Object.assign(acc, {
342
+ [camelCase(key) + "QueryFamily"]: Object.assign(streamHelpers.family, {
343
+ id: client[key].id
344
+ }),
345
+ [camelCase(key) + "Query"]: Object.assign(streamHelpers.query, {
346
+ id: client[key].id
347
+ }),
348
+ [camelCase(key) + "QueryNew"]: Object.assign(streamHelpers.queryNew, {
349
+ id: client[key].id
350
+ })
351
+ });
352
+ }
429
353
  return acc;
430
354
  }, {});
431
355
  return queries;
@@ -433,66 +357,154 @@ getBaseMrt, clientFor_, rtHooks) => {
433
357
  const mapRequest = (client) => {
434
358
  const Command = useCommand();
435
359
  const mutations = Struct.keys(client).reduce((acc, key) => {
360
+ if (!(client[key].Request.type === "command" && !client[key].Request.stream)) {
361
+ return acc;
362
+ }
436
363
  const mut = client[key].handler;
437
- const fn = Command.fn(client[key].id);
438
- const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
439
- acc[camelCase(key) + "Request"] = Object.assign(mut, fn, // to get the i18n key etc.
440
- { wrap, fn });
364
+ const request = mut;
365
+ const fn = (options) => Command.fn(client[key].id, options);
366
+ const wrap = (options) => Command.wrap({ mutate: request, id: client[key].id }, options);
367
+ acc[camelCase(key) + "Request"] = Object.assign(mut, Command.fn(client[key].id), // to get the i18n key etc.
368
+ { wrap, fn, request });
441
369
  return acc;
442
370
  }, {});
443
371
  return mutations;
444
372
  };
445
- const mapMutation = (client) => {
373
+ const mapMutation = (client, queryInvalidation, invalidationResources) => {
446
374
  const Command = useCommand();
447
375
  const mutation = useMutation();
376
+ const invalidation = queryInvalidation?.(client);
377
+ const queryResources = makeQueryResources(invalidationResources);
448
378
  const mutations = Struct.keys(client).reduce((acc, key) => {
449
- const mut = mutation(client[key]);
450
- const fn = Command.fn(client[key].id);
451
- const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
452
- acc[camelCase(key) + "Mutation"] = Object.assign(mut, fn, // to get the i18n key etc.
453
- { wrap, fn });
379
+ if (!(client[key].Request.type === "command" && !client[key].Request.stream)) {
380
+ return acc;
381
+ }
382
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
383
+ const fromRequest = fromRequestConfig
384
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
385
+ : undefined;
386
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
387
+ const makeProjectedMutation = (handler) => {
388
+ const mut = withDefaultInvalidation(mutation(handler), mergedInvalidation);
389
+ return Object.assign(mut, {
390
+ wrap: (options) => Command.wrap({ mutate: mut, id: client[key].id }, options),
391
+ fn: (options) => Command.fn(client[key].id, options),
392
+ project: (projectionSchema) => {
393
+ const projected = {
394
+ ...handler,
395
+ handler: projectHandler(handler.handler, client[key].Request.success, projectionSchema)
396
+ };
397
+ return makeProjectedMutation(projected);
398
+ }
399
+ });
400
+ };
401
+ acc[camelCase(key) + "Mutation"] = makeProjectedMutation(client[key]);
454
402
  return acc;
455
403
  }, {});
456
404
  return mutations;
457
405
  };
458
406
  // make available .query, .suspense and .mutate for each operation
459
407
  // and a .helpers with all mutations and queries
460
- const mapClient = (queryInvalidation) => (client) => {
408
+ const mapClient = (queryInvalidation, invalidationResources) => (client) => {
461
409
  const Command = useCommand();
462
410
  const mutation = useMutation();
463
411
  const invalidation = queryInvalidation?.(client);
412
+ const queryResources = makeQueryResources(invalidationResources);
464
413
  const extended = Struct.keys(client).reduce((acc, key) => {
414
+ const handler = client[key];
415
+ const requestType = handler.Request.type;
416
+ const isStream = handler.Request.stream;
465
417
  const fn = Command.fn(client[key].id);
466
- const mutate = extendM(mutation(client[key], invalidation?.[key] ? { queryInvalidation: invalidation[key] } : undefined), (mutate) => Object.assign(mutate, fn, // to get the i18n key etc.
467
- {
468
- wrap: Command.wrap({ mutate: Effect.isEffect(mutate) ? () => mutate : mutate, id: client[key].id }),
469
- fn
470
- }));
471
- const h_ = client[key].handler;
472
- const h = Effect.isEffect(h_)
473
- ? () => h_
474
- : (...args) => h_(...args);
475
- acc[key] = Object.assign(h, client[key], fn, // to get the i18n key etc.
476
- {
477
- mutate,
478
- query: useQuery(client[key]),
479
- suspense: useSuspenseQuery(client[key]),
480
- wrap: Command.wrap({ mutate: h, id: client[key].id }),
481
- fn
482
- });
418
+ const h_ = handler.handler;
419
+ const request = h_;
420
+ acc[key] = Object.assign(isQueryHandler(handler)
421
+ ? {
422
+ ...handler,
423
+ request,
424
+ ...queryHelpersFor(handler),
425
+ project: projectQueryFor(handler)
426
+ }
427
+ : isStreamQueryHandler(handler)
428
+ ? {
429
+ ...client[key],
430
+ request,
431
+ ...streamQueryHelpersFor(handler)
432
+ }
433
+ : requestType === "command" && isStream
434
+ ? (() => {
435
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
436
+ const fromRequest = fromRequestConfig
437
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
438
+ : undefined;
439
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
440
+ const streamCmd = useCommand();
441
+ return {
442
+ ...client[key],
443
+ request,
444
+ query: useStreamQuery(client[key]),
445
+ fn: (options) => streamCmd.streamFn(client[key].id, options),
446
+ mutate: (() => {
447
+ const sm2Act = useStreamMutation2()(client[key], mergedInvalidation);
448
+ const sm2Handler = (input, _ctx) => sm2Act(input);
449
+ return Object.assign(sm2Act, {
450
+ id: client[key].id,
451
+ wrap: (options) => streamCmd.streamWrap(sm2Handler, client[key].id, options)
452
+ });
453
+ })()
454
+ };
455
+ })()
456
+ : {
457
+ mutate: ((handler) => {
458
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
459
+ const fromRequest = fromRequestConfig
460
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
461
+ : undefined;
462
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
463
+ const makeProjectedMutation = (h) => {
464
+ const mutate = withDefaultInvalidation(mutation(h), mergedInvalidation);
465
+ return Object.assign(mutate, {
466
+ wrap: (options) => Command.wrap({
467
+ mutate,
468
+ id: client[key].id
469
+ }, options),
470
+ fn: (options) => Command.fn(client[key].id, options),
471
+ project: (projectionSchema) => {
472
+ const projected = {
473
+ ...h,
474
+ handler: projectHandler(h.handler, client[key].Request.success, projectionSchema)
475
+ };
476
+ return makeProjectedMutation(projected);
477
+ }
478
+ });
479
+ };
480
+ return makeProjectedMutation(handler);
481
+ })(client[key]),
482
+ ...client[key],
483
+ ...fn, // to get the i18n key etc.
484
+ request,
485
+ fn: (options) => Command.fn(client[key].id, options),
486
+ wrap: (options) => Command.wrap({ mutate: h_, id: client[key].id }, options)
487
+ });
483
488
  return acc;
484
489
  }, {});
485
- return Object.assign(extended, { helpers: { ...mapRequest(client), ...mapMutation(client), ...mapQuery(client) } });
490
+ return Object.assign(extended, {
491
+ helpers: {
492
+ ...mapRequest(client),
493
+ ...mapMutation(client, queryInvalidation, invalidationResources),
494
+ ...mapQuery(client)
495
+ }
496
+ });
486
497
  };
487
498
  // TODO: Clean up this delay initialisation messs
488
499
  // TODO; invalidateQueries should perhaps be configured in the Request impl themselves?
489
- const clientFor__ = (m, queryInvalidation) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation))));
500
+ const clientFor__ = (m, queryInvalidation, invalidationResources) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation, invalidationResources))));
490
501
  // delay client creation until first access
491
502
  // the idea is that we don't need the useNuxtApp().$runtime (only available at later initialisation stage)
492
503
  // until we are at a place where it is available..
493
- const clientFor = (m, queryInvalidation) => {
504
+ const clientFor = (m, ...args) => {
505
+ const [queryInvalidation, invalidationResources] = args;
494
506
  let client = undefined;
495
- const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation));
507
+ const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation, invalidationResources));
496
508
  // initialize on first use..
497
509
  const proxy = Struct.keys(m).concat(["helpers"]).reduce((acc, key) => {
498
510
  Object.defineProperty(acc, key, {
@@ -508,15 +520,12 @@ getBaseMrt, clientFor_, rtHooks) => {
508
520
  }, {});
509
521
  return proxy;
510
522
  };
511
- const legacy = {
512
- ...mutations,
513
- ...query
514
- };
515
523
  const Command = {
516
524
  ...{
517
525
  // delay initialisation until first use...
518
526
  fn: (...args) => useCommand().fn(...args),
519
527
  wrap: (...args) => useCommand().wrap(...args),
528
+ streamFn: (...args) => useCommand().streamFn(...args),
520
529
  alt: (...args) => useCommand().alt(...args),
521
530
  alt2: (...args) => useCommand().alt2(...args)
522
531
  },
@@ -526,7 +535,7 @@ getBaseMrt, clientFor_, rtHooks) => {
526
535
  Command,
527
536
  useCommand,
528
537
  clientFor,
529
- legacy
538
+ tanstackQueryClient: getTanstackQueryClient()
530
539
  };
531
540
  };
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQXVELGdCQUFnQixFQUEwRSxNQUFNLHFCQUFxQixDQUFBO0FBQ25MLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQXVCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHeEgsT0FBTyxFQUFFLGFBQWEsRUFBd0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckUsT0FBTyxFQUF5QixnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFMUQsT0FBTyxLQUFLLFdBQVcsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixlQUFlLEVBQVksR0FBRyxFQUFFLEtBQUssRUFBb0IsTUFBTSxLQUFLLENBQUE7QUFDekcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzdDLE9BQU8sRUFBMEIsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDekYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQy9DLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQWtELG1CQUFtQixFQUFZLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwSixPQUFPLEVBQTJDLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUUvRSxNQUFNLFVBQVUsR0FBRyxDQUNqQixPQUFvRSxFQUNwRSxHQUFzRSxFQUN0RSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBd0o3Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBSztJQUMvRCxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQWEsQ0FBQTtDQUN6QztBQWdGRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtBQUVoRSxzREFBc0Q7QUFDdEQsU0FBUyxhQUFhLENBWXBCLENBQWtHLEVBQ2xHLEVBQVUsRUFDVixNQUFjLEVBQ2QsT0FJQztJQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQThDLEVBQUUsRUFBRSxDQUNsRixJQUFJLENBQUMsSUFBSSxDQUNQLE1BQU0sQ0FBQyxHQUFHLENBQ1IsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ3RCLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ2xCLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLE1BQU0sRUFBRSxDQUFDLENBQUE7Z0JBQ3JELE9BQU07WUFDUixDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ2hFLE9BQU07Z0JBQ1IsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsTUFBTSxFQUFFLENBQUE7Z0JBQzdDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO2dCQUM1RCxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBQ3BDLE9BQU07WUFDUixDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osTUFBTTtnQkFDTixPQUFPLEVBQUUsOEJBQThCLE1BQU0sRUFBRTthQUNoRCxDQUFBO1lBQ0QsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBRXZDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ25DLENBQUMsQ0FBQztLQUNMLENBQUMsQ0FDSCxFQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUNwRSxDQUFBO0lBQ0gsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsSUFBSSxDQUNKLENBQUMsRUFDRCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckI7UUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFJLEVBQUUsRUFBRSxDQUNULElBQUksQ0FDRixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ0osWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNoQixFQUNMLEVBQUUsTUFBTSxFQUFFLENBQ1gsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFlBQVksR0FBRyxZQUFZLEVBQUUsQ0FBQTtBQUVuQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUF3QixDQVE5QyxJQUFpRyxFQUNqRyxPQUE2QixFQUM3QixFQUFFLENBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FDWCxVQUFVLENBQ1IsWUFBWSxDQUFDLElBQVcsRUFBRSxPQUFPLENBQUMsRUFDbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUNsRSxFQUNSLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDaEIsQ0FBQTtBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsR0FBd0IsRUFBRTtJQUN0RCxNQUFNLFlBQVksR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUN0QyxPQUFPLENBUUwsSUFBaUcsRUFDakcsT0FBNkIsRUFDN0IsRUFBRSxDQUNGLE1BQU0sQ0FBQyxNQUFNLENBQ1gsVUFBVSxDQUNSLFlBQVksQ0FBQyxJQUFXLEVBQUUsT0FBTyxDQUFDLEVBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDbEUsRUFDUixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ2hCLENBQUE7QUFDTCxDQUFDLENBQUE7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBRVY7SUFDQTtJQUNBO0lBSG5CLFlBQ21CLFVBQTJDLEVBQzNDLEtBQVksRUFDWixJQUFVO1FBRlYsZUFBVSxHQUFWLFVBQVUsQ0FBaUM7UUFDM0MsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUNaLFNBQUksR0FBSixJQUFJLENBQU07SUFDMUIsQ0FBQztJQUVKOzs7O09BSUc7SUFDTSxlQUFlLEdBeUJwQixDQUNGLElBQWlHLEVBQ2pHLE9BQWlELEVBQ2pELEVBQUU7UUFDRixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBR2pELE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxVQUFVLElBQUksUUFBYyxDQUFBO1FBRWhELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUNyQixVQUFVLENBQ1IsVUFBVSxDQUFDLE1BQWEsRUFBRSxFQUFFLENBQUMsRUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNoRSxDQUNULENBQUE7UUFDRCxPQUFPO1lBQ0wsQ0FBQztZQUNELFVBQVUsQ0FDUixDQUFDLEVBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUN6RTtTQUNjLENBQUE7SUFDbkIsQ0FBQyxDQUFBO0lBRUQ7O09BRUc7SUFDTSx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7UUFDeEMsNERBQTREO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNqQixPQUFPLHNCQUFzQixDQUFBO1FBQzdCOzs7V0FHRztRQUNILFNBQVMsc0JBQXNCLENBZTdCLENBQXdHLEVBQ3hHLEVBQVUsRUFDVixNQUFjLEVBQ2QsVUFBOEYsRUFBRTtZQUVoRyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQ2pHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ2hELEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQzlCLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUMxQixDQUFBO1lBQ0QsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDbkQsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFDeEIsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQzFCLENBQUE7WUFDRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUNqRCxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUM1QixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FDMUIsQ0FBQTtZQUVELE9BQU8sYUFBYSxDQUF3RSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtnQkFDekcsU0FBUyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7MEJBQ2hHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPOzRCQUN2QyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPOzRCQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7b0JBQ1QsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDWixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDcEMsQ0FBQztnQkFDSCxDQUFDLENBQUM7Z0JBQ0YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUUsQ0FBQzt3QkFDMUQsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3ZCLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxPQUFPOzRCQUM1QixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPOzRCQUNsQixDQUFDLENBQUMsRUFBRSxDQUNQLENBQUE7d0JBQ0QsT0FBTTtvQkFDUixDQUFDO29CQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXO3dCQUNqQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDaEQsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDWixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDbEMsQ0FBQztnQkFDSCxDQUFDLENBQUM7Z0JBQ0YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzVDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhO3dCQUNuQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3ZCLEVBQUUsRUFBRSxFQUFFLHlCQUF5QixFQUFFLEVBQ2pDOzRCQUNFLE1BQU0sRUFBRSxhQUFhOzRCQUNyQixLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7eUJBQzNCLENBQ0YsQ0FBQTtvQkFDSCxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUNaLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNsQyxDQUFDO2dCQUNILENBQUMsQ0FBQzthQUNILENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxTQUFTLFdBQVcsQ0FBQyxDQUFpQjtZQUNwQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBUSxDQUFDLENBQUMsSUFBSSxDQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULHlCQUF5QjtnQkFDekIsbUNBQW1DO2dCQUNuQyxzQ0FBc0M7Z0JBQ3RDLCtCQUErQjtnQkFDL0IsT0FBTztnQkFDUCwwQkFBMEI7Z0JBQzFCLGdDQUFnQztnQkFDaEMsdUNBQXVDO2dCQUN2QywyQkFBMkI7Z0JBQzNCLHVDQUF1QztnQkFDdkMsMkNBQTJDO2dCQUMzQyxZQUFZO2dCQUNaLHVCQUF1QjtnQkFDdkIsdUVBQXVFO2dCQUN2RSxvREFBb0Q7Z0JBQ3BELDRCQUE0QjtnQkFDNUIsdUNBQXVDO2dCQUN2QyxhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsdUNBQXVDO2dCQUN2Qyw2Q0FBNkM7Z0JBQzdDLFlBQVk7Z0JBQ1osbUJBQW1CO2dCQUNuQiw4REFBOEQ7Z0JBQzlELHFCQUFxQjtnQkFDckIsa0NBQWtDO2dCQUNsQyxtQkFBbUI7Z0JBQ25CLGFBQWE7Z0JBQ2IsV0FBVztnQkFDWCxzQkFBc0I7Z0JBQ3RCLG1DQUFtQztnQkFDbkMsdUNBQXVDO2dCQUN2QywrQkFBK0I7Z0JBQy9CLE9BQU87Z0JBQ1AsV0FBVyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7b0JBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO2dCQUM3RCxDQUFDO2FBQ0YsQ0FBQyxFQUNGLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ3hELENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQ7Ozs7T0FJRztJQUNNLDBCQUEwQixHQW9EL0IsQ0FDRixJQUFpRyxFQUNqRyxNQUFXLEVBQ1gsT0FBK0UsRUFDMUUsRUFBRTtRQUNQLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUE7UUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUM1QixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDMUIsR0FBRyxJQUFJO1lBQ1AsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUMvQixDQUFDLENBQUUsSUFBSSxDQUNMLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQ2hCO2dCQUNULENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FDbkIsSUFBSSxDQUNGLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FDakM7U0FDTixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUdqRCxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLFFBQWMsQ0FBQTtRQUVoRCxpRUFBaUU7UUFDakUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQVEsQ0FBQyxDQUFBO1FBRXRELE9BQU8sS0FBSyxDQUNWLENBQUMsRUFDRCxzQkFBc0IsQ0FBQyxDQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQzNELENBQUE7SUFDSCxDQUFDLENBQUE7SUFDRCxFQUFFO0lBRUY7Ozs7O09BS0c7SUFDTSxvQkFBb0IsR0FzRHpCLENBQ0YsSUFBUyxFQUNULE1BQVcsRUFDWCxPQUErRSxFQUMxRSxFQUFFO1FBQ1AsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUVyRSxPQUFPLEtBQUssQ0FDVixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzVDLENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsdURBQXVEO0lBQzlDLHdCQUF3QixHQUFHLENBQ2xDLGNBQWtFLEVBQ2xFLEVBQUUsQ0FDRixDQUFDLENBQUMsSUFBUyxFQUFFLE1BQVcsRUFBRSxPQUFZLEVBQUUsRUFBRTtRQUN4QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUIsSUFBSSxFQUNKLE1BQU0sRUFDTixFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQ2xDLENBQUE7SUFDSCxDQUFDLENBMENBLENBQUE7SUFFSDs7OztPQUlHO0lBQ00sNEJBQTRCLEdBb0RqQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDaEMsY0FBYyxFQUFFLGFBQWE7UUFDN0IsV0FBVyxFQUFFLGFBQWE7UUFDMUIsYUFBYSxFQUFFLGFBQWE7S0FDN0IsQ0FBUSxDQUFBO0lBRVQ7Ozs7T0FJRztJQUNNLDBCQUEwQixHQW9EL0IsQ0FBQyxJQUFTLEVBQUUsTUFBYyxFQUFFLE9BQVksRUFBRSxFQUFFO1FBQzlDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztZQUMxQixHQUFHLElBQUk7WUFDUCxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNwQyxDQUFDLENBQUUsSUFBSSxDQUNMLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUNyQjtnQkFDVCxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQ25CLElBQUksQ0FDRixNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUN0QztTQUNOLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBR2pELE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxVQUFVLElBQUksUUFBYyxDQUFBO1FBRWhELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUNyQixVQUFVLENBQ1IsVUFBVSxDQUFDLE1BQWEsRUFBRSxFQUFFLENBQUMsRUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNoRSxDQUNULENBQUE7UUFFRCxPQUFPLEtBQUssQ0FDVixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzVDLGFBQWEsQ0FBQyxDQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7WUFDdkMsU0FBUyxFQUFFLGFBQWE7WUFDeEIsUUFBUSxFQUFFLGFBQWE7WUFDdkIsTUFBTSxFQUFFLGFBQWE7WUFDckIsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUNJLENBQUE7SUFDVixDQUFDLENBQUE7SUFFRDs7OztPQUlHO0lBQ00sd0JBQXdCLEdBeUI3QixDQUNGLElBQWlHLEVBQ2pHLE9BQWlELEVBQ2pELEVBQUU7UUFDRixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRXpELE9BQU8sS0FBSyxDQUNWLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDNUMsQ0FBQyxDQUNLLENBQUE7SUFDVixDQUFDLENBQUE7SUFFRCxnQ0FBZ0M7SUFDdkIsbUJBQW1CLEdBQUcsQ0FNN0IsQ0FFNEQsRUFDNUQsS0FBOEIsRUFDOUIsUUFBd0QsRUFDeEQsRUFBRTtRQUNGLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUNyRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBRXRELENBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDekMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDNUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUUzRCxNQUFNLE9BQU8sR0FDWCxDQUFDLFFBQTJELEVBQUUsRUFBRSxDQUNoRSxLQUFLLEVBQXlDLENBQUksRUFBRSxFQUFFO1lBQ3BELFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLElBQUksQ0FBQztnQkFDSCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQTtnQkFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUFFLE9BQU07Z0JBQ3BCLE9BQU8sTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUssQ0FBUyxDQUFDLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFRLENBQUMsQ0FBQTtZQUNoRyxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDekIsQ0FBQztRQUNILENBQUMsQ0FBQTtRQUNILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFlLENBQUMsQ0FBQTtRQUV2QyxLQUFLLENBQ0gsS0FBSyxFQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDSixrQkFBa0I7WUFDbEIsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25FLENBQUMsRUFDRCxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FDZixDQUFBO1FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUMsQ0FBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBUyxDQUFBO1FBQzVELENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBc0IsQ0FBQyxDQUFBO1FBRXZFLE9BQU87WUFDTCxNQUFNO1lBQ04sbURBQW1EO1lBQ25ELE1BQU07WUFDTiwrREFBK0Q7WUFDL0QsZUFBZTtZQUNmLHNCQUFzQjtZQUN0QixPQUFPO1lBQ1AsT0FBTztZQUNQLFNBQVM7U0FDVixDQUFBO0lBQ0gsQ0FBQyxDQUFBO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsTUFBTSxPQUFPLGNBQWUsU0FBUSxVQUFVLENBQUMsT0FBTyxFQUFrQixDQUFDLGdCQUFnQixFQUFFO0lBQ3pGLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBRTFCLE9BQU8sQ0FBSSxVQUEwQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDM0csQ0FBQyxDQUFDO0NBQ0gsQ0FBQztJQUNBLE1BQU0sQ0FBVSwwQkFBMEIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDMUUsTUFBTSxDQUFVLE9BQU8sR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUE7O0FBSzNELE1BQU0sT0FBTyxTQUFTO0lBQ0M7SUFBckIsWUFBcUIsVUFBMEM7UUFBMUMsZUFBVSxHQUFWLFVBQVUsQ0FBZ0M7UUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFDRDs7O09BR0c7SUFDTSxRQUFRLENBQWlDO0lBRWxEOzs7OztPQUtHO0lBQ00sZ0JBQWdCLEdBNkRyQixDQUNGLElBQW1HLEVBQ25HLEVBQUU7UUFDRixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQzNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBVyxDQUFRLENBQUE7UUFDM0MsT0FBTyxDQUFDLFlBQWtCLEVBQUUsT0FBYSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsd0NBQXdDO2FBQ2xJLENBQUE7WUFFRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0IsZUFBZSxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDekIsQ0FBQyxDQUFDLENBQUE7WUFFRixvREFBb0Q7WUFDcEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQzlCLHNGQUFzRjtnQkFDdEYsb0RBQW9EO2dCQUNwRCw4S0FBOEs7Z0JBQzlLLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ3RDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzdCLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFBO2dCQUNoQyxDQUFDO2dCQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUE7Z0JBQzlCLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxFQUFFO3dCQUNsRSxJQUFJO3dCQUNKLFlBQVk7d0JBQ1osT0FBTzt3QkFDUCxDQUFDO3dCQUNELFNBQVM7cUJBQ1YsQ0FBQyxDQUFBO29CQUNGLE9BQU8sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDdEIsb0RBQW9ELENBQ3JELENBQUE7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDNUMsQ0FBQztnQkFFRCxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFVLENBQUE7WUFDckQsQ0FBQyxDQUFDLENBQUE7WUFFRixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN4QixDQUFDLENBQUE7SUFDSCxDQUFDLENBQUE7Q0FDRjtBQUVELHdJQUF3STtBQUN4SSxNQUFNLGdCQUFnQixHQUFHLENBQU8sR0FBd0MsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFLLENBQUMsQ0FBQTtBQUk5RyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7QUFDeEIsMERBQTBEO0FBQzFELFVBQWlFLEVBQ2pFLFVBQTBELEVBQzFELE9BQXlDLEVBQ3pDLEVBQUU7SUFFRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFNLENBQUE7SUFDbkMsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQWMsT0FBTyxDQUFDLENBQUE7SUFDeEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFBO1FBRWpDLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQy9DLENBQUMsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxHQUF1QyxDQUFBO0lBQzNDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDbEUsSUFBSSxHQUF3QyxDQUFBO0lBQzVDLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFcEUsSUFBSSxDQUFvQyxDQUFBO0lBQ3hDLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQTtJQUVoRCxNQUFNLElBQUksR0FBRztRQUNYLDBCQUEwQjtRQUMxQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLDhCQUE4QjtRQUM5Qiw0QkFBNEI7UUFDNUIsMEJBQTBCO1FBQzFCLDJCQUEyQjtRQUMzQixxQkFBcUI7UUFDckIsaUJBQWlCO0tBQ21ELENBQUE7SUFHdEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDM0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDWixDQUFDO1FBQUMsSUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1lBQ3hDLE9BQVEsV0FBVyxFQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUM3QyxDQUFDLENBQVEsQ0FBQTtRQUNULE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxFQUNELEVBQXVELENBQ3hELENBQUE7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUN0QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFBO0lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFBO0lBRS9DLE1BQU0sUUFBUSxHQUFHLENBQ2YsTUFBcUIsRUFDckIsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUN4QyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLENBQUM7WUFBQyxHQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVEsQ0FBQyxFQUFFO2dCQUNwRixFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7YUFDbkIsQ0FBQyxDQUNEO1lBQUMsR0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVEsQ0FBQyxFQUFFO2dCQUNwRyxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7YUFDbkIsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQ0QsRUFZRyxDQUNKLENBQUE7UUFDRCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDLENBQUE7SUFFRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixNQUFxQixFQUNyQixFQUFFO1FBQ0YsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUE7UUFDNUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQzFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1gsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtZQUMvQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDaEc7WUFBQyxHQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3ZELEdBQUcsRUFDSCxFQUFFLEVBQUUsMkJBQTJCO1lBQy9CLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUNiLENBQUE7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsRUFDRCxFQUtDLENBQ0YsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUMsQ0FBQTtJQUVELE1BQU0sV0FBVyxHQUFHLENBQ2xCLE1BQXFCLEVBQ3JCLEVBQUU7UUFDRixNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQTtRQUM1QixNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQTtRQUM5QixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDWCxNQUFNLEdBQUcsR0FBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBUSxDQUFDLENBQUE7WUFDN0MsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ2hHO1lBQUMsR0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUN4RCxHQUFHLEVBQ0gsRUFBRSxFQUFFLDJCQUEyQjtZQUMvQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FDYixDQUFBO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQ0QsRUFLQyxDQUNGLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDLENBQUE7SUFFRCxrRUFBa0U7SUFDbEUsZ0RBQWdEO0lBQ2hELE1BQU0sU0FBUyxHQUFHLENBQ2hCLGlCQUFtRSxFQUNuRSxFQUFFLENBQ0osQ0FDRSxNQUFxQixFQUNyQixFQUFFO1FBQ0YsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUE7UUFDNUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxFQUFFLENBQUE7UUFDOUIsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNyQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQ3BCLFFBQVEsQ0FDTixNQUFNLENBQUMsR0FBRyxDQUFRLEVBQ2xCLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzNFLEVBQ0QsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNULE1BQU0sQ0FBQyxNQUFNLENBQ1gsTUFBTSxFQUNOLEVBQUUsRUFBRSwyQkFBMkI7WUFDL0I7Z0JBQ0UsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkcsRUFBRTthQUNILENBQ0YsQ0FDSixDQUFBO1lBRUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtZQUM5QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7Z0JBQ1YsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUNsQztZQUFDLEdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoQyxDQUFDLEVBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUNYLEVBQUUsRUFBRSwyQkFBMkI7WUFDL0I7Z0JBQ0UsTUFBTTtnQkFDTixLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVEsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVEsQ0FBQztnQkFDOUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JELEVBQUU7YUFDSCxDQUNGLENBQUE7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsRUFDRCxFQU1DLENBQ0YsQ0FBQTtRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNySCxDQUFDLENBQUE7SUFFRCxpREFBaUQ7SUFDakQsdUZBQXVGO0lBQ3ZGLE1BQU0sV0FBVyxHQUFHLENBQ2xCLENBQUksRUFDSixpQkFBbUUsRUFDbkUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFdkYsMkNBQTJDO0lBQzNDLDBHQUEwRztJQUMxRyxrREFBa0Q7SUFDbEQsTUFBTSxTQUFTLEdBQUcsQ0FDaEIsQ0FBSSxFQUNKLGlCQUFtRSxFQUNuRSxFQUFFO1FBRUYsSUFBSSxNQUFNLEdBQXVCLFNBQVMsQ0FBQTtRQUMxQyxNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUU1RSw0QkFBNEI7UUFDNUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNuRSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzlCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixHQUFHO29CQUNELE1BQU0sQ0FBQyxHQUFJLGVBQWUsRUFBVSxDQUFDLEdBQVUsQ0FBQyxDQUFBO29CQUNoRCxzQkFBc0I7b0JBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO29CQUM3QyxPQUFPLENBQUMsQ0FBQTtnQkFDVixDQUFDO2FBQ0YsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQUUsRUFBWSxDQUFDLENBQUE7UUFDaEIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDLENBQUE7SUFFRCxNQUFNLE1BQU0sR0FBZTtRQUN6QixHQUFHLFNBQVM7UUFDWixHQUFHLEtBQUs7S0FDVCxDQUFBO0lBRUQsTUFBTSxPQUFPLEdBQW1DO1FBQzlDLEdBQUc7WUFDRCwwQ0FBMEM7WUFDMUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNoRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3BELEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEQsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNwQjtRQUNsQyxHQUFHLGVBQWU7S0FDbkIsQ0FBQTtJQUVELE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVTtRQUNWLFNBQVM7UUFDVCxNQUFNO0tBQ1AsQ0FBQTtBQUNILENBQUMsQ0FBQSJ9
541
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBS3ZDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFDdEMsT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFDbkMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFFbkMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFHbkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFFdkMsT0FBTyxLQUFLLFVBQVUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNuRSxPQUFPLEVBQW9CLFdBQVcsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBb0IsTUFBTSxLQUFLLENBQUE7QUFDM0csT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNsSCxPQUFPLEVBQWtCLGVBQWUsRUFBaUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUVySixPQUFPLEVBQTBCLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBMEIsWUFBWSxFQUFFLG1CQUFt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