@dbx-tools/shared-mastra 0.6.72 → 0.6.73
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/lib/src/override.d.ts +1 -1
- package/lib/src/override.js +2 -2
- package/lib/src/routes.d.ts +1 -1
- package/lib/src/routes.js +2 -2
- package/lib/src/thread.d.ts +1 -1
- package/lib/src/thread.js +2 -2
- package/lib/src/wire.d.ts +5 -5
- package/lib/src/wire.js +6 -6
- package/package.json +4 -4
- package/src/override.ts +1 -1
- package/src/routes.ts +1 -1
- package/src/thread.ts +1 -1
- package/src/wire.ts +5 -5
package/lib/src/override.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-request model-override wire convention shared by the Mastra
|
|
3
3
|
* plugin server (`@dbx-tools/appkit-mastra`'s `extractModelOverride`)
|
|
4
|
-
* and the browser chat client (`@dbx-tools/
|
|
4
|
+
* and the browser chat client (`@dbx-tools/ui-mastra`). Kept
|
|
5
5
|
* here so the header / query / body field names can never drift
|
|
6
6
|
* between the side that sets them and the side that reads them.
|
|
7
7
|
*
|
package/lib/src/override.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-request model-override wire convention shared by the Mastra
|
|
3
3
|
* plugin server (`@dbx-tools/appkit-mastra`'s `extractModelOverride`)
|
|
4
|
-
* and the browser chat client (`@dbx-tools/
|
|
4
|
+
* and the browser chat client (`@dbx-tools/ui-mastra`). Kept
|
|
5
5
|
* here so the header / query / body field names can never drift
|
|
6
6
|
* between the side that sets them and the side that reads them.
|
|
7
7
|
*
|
|
@@ -13,4 +13,4 @@ export const MODEL_OVERRIDE_HEADER = "x-mastra-model";
|
|
|
13
13
|
export const MODEL_OVERRIDE_QUERY = "model";
|
|
14
14
|
/** Body fields (in priority order) inspected for a per-request model override. */
|
|
15
15
|
export const MODEL_OVERRIDE_BODY_FIELDS = ["model", "modelId"];
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3ZlcnJpZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFFdEQseUVBQXlFO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUU1QyxrRkFBa0Y7QUFDbEYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlci1yZXF1ZXN0IG1vZGVsLW92ZXJyaWRlIHdpcmUgY29udmVudGlvbiBzaGFyZWQgYnkgdGhlIE1hc3RyYVxuICogcGx1Z2luIHNlcnZlciAoYEBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYWAncyBgZXh0cmFjdE1vZGVsT3ZlcnJpZGVgKVxuICogYW5kIHRoZSBicm93c2VyIGNoYXQgY2xpZW50IChgQGRieC10b29scy91aS1tYXN0cmFgKS4gS2VwdFxuICogaGVyZSBzbyB0aGUgaGVhZGVyIC8gcXVlcnkgLyBib2R5IGZpZWxkIG5hbWVzIGNhbiBuZXZlciBkcmlmdFxuICogYmV0d2VlbiB0aGUgc2lkZSB0aGF0IHNldHMgdGhlbSBhbmQgdGhlIHNpZGUgdGhhdCByZWFkcyB0aGVtLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vKiogSFRUUCBoZWFkZXIgaW5zcGVjdGVkIGZvciBhIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlLiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX09WRVJSSURFX0hFQURFUiA9IFwieC1tYXN0cmEtbW9kZWxcIjtcblxuLyoqIFF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXIgaW5zcGVjdGVkIGZvciBhIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlLiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX09WRVJSSURFX1FVRVJZID0gXCJtb2RlbFwiO1xuXG4vKiogQm9keSBmaWVsZHMgKGluIHByaW9yaXR5IG9yZGVyKSBpbnNwZWN0ZWQgZm9yIGEgcGVyLXJlcXVlc3QgbW9kZWwgb3ZlcnJpZGUuICovXG5leHBvcnQgY29uc3QgTU9ERUxfT1ZFUlJJREVfQk9EWV9GSUVMRFMgPSBbXCJtb2RlbFwiLCBcIm1vZGVsSWRcIl0gYXMgY29uc3Q7XG4iXX0=
|
package/lib/src/routes.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Route segments the Mastra plugin mounts under its `basePath`
|
|
3
3
|
* (`/api/<plugin-name>`). Shared between the server's route
|
|
4
4
|
* registration and the browser client (`MastraPluginClient` in
|
|
5
|
-
* `@dbx-tools/
|
|
5
|
+
* `@dbx-tools/ui-mastra`) so a relayout - or a rename of a
|
|
6
6
|
* sub-path - is a one-line change here and the two can never drift.
|
|
7
7
|
*
|
|
8
8
|
* The agent-scoped segments (`history`, `threads`, `suggestions`,
|
package/lib/src/routes.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Route segments the Mastra plugin mounts under its `basePath`
|
|
3
3
|
* (`/api/<plugin-name>`). Shared between the server's route
|
|
4
4
|
* registration and the browser client (`MastraPluginClient` in
|
|
5
|
-
* `@dbx-tools/
|
|
5
|
+
* `@dbx-tools/ui-mastra`) so a relayout - or a rename of a
|
|
6
6
|
* sub-path - is a one-line change here and the two can never drift.
|
|
7
7
|
*
|
|
8
8
|
* The agent-scoped segments (`history`, `threads`, `suggestions`,
|
|
@@ -34,4 +34,4 @@ export const MASTRA_ROUTES = {
|
|
|
34
34
|
defaultModel: "/default-model",
|
|
35
35
|
embed: "/embed",
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsUUFBUSxFQUFFLGlCQUFpQjtJQUMzQixXQUFXLEVBQUUsY0FBYztJQUMzQixNQUFNLEVBQUUsU0FBUztJQUNqQiwwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsc0VBQXNFO0lBQ3RFLDBFQUEwRTtJQUMxRSxpQ0FBaUM7SUFDakMsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixLQUFLLEVBQUUsUUFBUTtDQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJvdXRlIHNlZ21lbnRzIHRoZSBNYXN0cmEgcGx1Z2luIG1vdW50cyB1bmRlciBpdHMgYGJhc2VQYXRoYFxuICogKGAvYXBpLzxwbHVnaW4tbmFtZT5gKS4gU2hhcmVkIGJldHdlZW4gdGhlIHNlcnZlcidzIHJvdXRlXG4gKiByZWdpc3RyYXRpb24gYW5kIHRoZSBicm93c2VyIGNsaWVudCAoYE1hc3RyYVBsdWdpbkNsaWVudGAgaW5cbiAqIGBAZGJ4LXRvb2xzL3VpLW1hc3RyYWApIHNvIGEgcmVsYXlvdXQgLSBvciBhIHJlbmFtZSBvZiBhXG4gKiBzdWItcGF0aCAtIGlzIGEgb25lLWxpbmUgY2hhbmdlIGhlcmUgYW5kIHRoZSB0d28gY2FuIG5ldmVyIGRyaWZ0LlxuICpcbiAqIFRoZSBhZ2VudC1zY29wZWQgc2VnbWVudHMgKGBoaXN0b3J5YCwgYHRocmVhZHNgLCBgc3VnZ2VzdGlvbnNgLFxuICogYGRlZmF1bHRNb2RlbGApIHRha2UgYW4gb3B0aW9uYWwgYC86YWdlbnRJZGAgc3VmZml4OyB0aGUgZGVmYXVsdCBhZ2VudFxuICogdXNlcyB0aGUgYmFyZSBzZWdtZW50LiBDb252ZXJzYXRpb24gc3RyZWFtaW5nIGl0c2VsZiByaWRlcyB0aGUgc3RhbmRhcmQgTWFzdHJhXG4gKiBhZ2VudCByb3V0ZXMgKGBAbWFzdHJhL2NsaWVudC1qc2AncyBgZ2V0QWdlbnQoaWQpLnN0cmVhbSgpYCksIHNvXG4gKiB0aGVyZSdzIG5vIGNoYXQgc2VnbWVudCBoZXJlLlxuICpcbiAqIGBmZWVkYmFja2AgaXMgdGhlIHBsdWdpbi1vd25lZCBQT1NUIGVuZHBvaW50IHRoZSBjaGF0IFVJIGNhbGxzIHRvXG4gKiBsb2cgYSB0aHVtYnMgLyBjb21tZW50IGFzc2Vzc21lbnQgYWdhaW5zdCBhIHR1cm4ncyBNTGZsb3cgdHJhY2UgKHNlZVxuICogYGZlZWRiYWNrLnRzYCk7IGl0IGlzIG5vdCBhZ2VudC1zY29wZWQgKGEgdHJhY2UgaWQgaWRlbnRpZmllcyB0aGVcbiAqIHR1cm4gb24gaXRzIG93bikuXG4gKlxuICogQG1vZHVsZVxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1JPVVRFUyA9IHtcbiAgaGlzdG9yeTogXCIvcm91dGUvaGlzdG9yeVwiLFxuICB0aHJlYWRzOiBcIi9yb3V0ZS90aHJlYWRzXCIsXG4gIGZlZWRiYWNrOiBcIi9yb3V0ZS9mZWVkYmFja1wiLFxuICBzdWdnZXN0aW9uczogXCIvc3VnZ2VzdGlvbnNcIixcbiAgbW9kZWxzOiBcIi9tb2RlbHNcIixcbiAgLy8gVGhlIHN0YXRpYyBzZXJ2aW5nLWVuZHBvaW50IGFuIGFnZW50IGZhbGxzIGJhY2sgdG8gd2hlbiB0aGUgY2xpZW50IHBpbnNcbiAgLy8gbm8gbW9kZWwuIEFnZW50LXNjb3BlZCBsaWtlIGBoaXN0b3J5YC9gdGhyZWFkc2AvYHN1Z2dlc3Rpb25zYCB2aWEgYW5cbiAgLy8gb3B0aW9uYWwgYC86YWdlbnRJZGAgc3VmZml4OyB0aGUgZGVmYXVsdCBhZ2VudCB1c2VzIHRoZSBiYXJlIHNlZ21lbnQuXG4gIC8vIFJldHVybnMgYHsgYWdlbnRJZCwgbW9kZWwsIGRpc3BsYXlOYW1lIH1gIHdoZXJlIGBtb2RlbGAgYW5kIGBkaXNwbGF5TmFtZWBcbiAgLy8gYXJlIG51bGwgd2hlbiB0aGUgYWdlbnQgcmVzb2x2ZXMgaXRzIG1vZGVsIGR5bmFtaWNhbGx5IGF0IGNhbGwgdGltZVxuICAvLyAobm90aGluZyBzdGF0aWMgdG8gYWR2ZXJ0aXNlKS4gTGV0cyB0aGUgcGlja2VyIGxhYmVsIGl0cyBkZWZhdWx0IG9wdGlvblxuICAvLyB3aXRoIHRoZSBodW1hbml6ZWQgbW9kZWwgbmFtZS5cbiAgZGVmYXVsdE1vZGVsOiBcIi9kZWZhdWx0LW1vZGVsXCIsXG4gIGVtYmVkOiBcIi9lbWJlZFwiLFxufSBhcyBjb25zdDtcbiJdfQ==
|
package/lib/src/thread.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-request thread-selection wire convention shared by the Mastra
|
|
3
3
|
* plugin server (`@dbx-tools/appkit-mastra`'s thread-id resolver) and
|
|
4
|
-
* the browser chat client (`@dbx-tools/
|
|
4
|
+
* the browser chat client (`@dbx-tools/ui-mastra`).
|
|
5
5
|
*
|
|
6
6
|
* A chat client owns multiple conversations ("threads") for the same
|
|
7
7
|
* resource (the authenticated user). It names the thread a given
|
package/lib/src/thread.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-request thread-selection wire convention shared by the Mastra
|
|
3
3
|
* plugin server (`@dbx-tools/appkit-mastra`'s thread-id resolver) and
|
|
4
|
-
* the browser chat client (`@dbx-tools/
|
|
4
|
+
* the browser chat client (`@dbx-tools/ui-mastra`).
|
|
5
5
|
*
|
|
6
6
|
* A chat client owns multiple conversations ("threads") for the same
|
|
7
7
|
* resource (the authenticated user). It names the thread a given
|
|
@@ -17,4 +17,4 @@
|
|
|
17
17
|
export const THREAD_ID_HEADER = "x-mastra-thread-id";
|
|
18
18
|
/** Query string parameter inspected for the thread id a request targets. */
|
|
19
19
|
export const THREAD_ID_QUERY = "threadId";
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztBQUVyRCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyLXJlcXVlc3QgdGhyZWFkLXNlbGVjdGlvbiB3aXJlIGNvbnZlbnRpb24gc2hhcmVkIGJ5IHRoZSBNYXN0cmFcbiAqIHBsdWdpbiBzZXJ2ZXIgKGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgJ3MgdGhyZWFkLWlkIHJlc29sdmVyKSBhbmRcbiAqIHRoZSBicm93c2VyIGNoYXQgY2xpZW50IChgQGRieC10b29scy91aS1tYXN0cmFgKS5cbiAqXG4gKiBBIGNoYXQgY2xpZW50IG93bnMgbXVsdGlwbGUgY29udmVyc2F0aW9ucyAoXCJ0aHJlYWRzXCIpIGZvciB0aGUgc2FtZVxuICogcmVzb3VyY2UgKHRoZSBhdXRoZW50aWNhdGVkIHVzZXIpLiBJdCBuYW1lcyB0aGUgdGhyZWFkIGEgZ2l2ZW5cbiAqIHJlcXVlc3QgdGFyZ2V0cyBieSBzdGFtcGluZyBpdHMgaWQgaGVyZTsgdGhlIHNlcnZlciByZWFkcyBpdCBiYWNrXG4gKiBhbmQgcGlucyBgUmVxdWVzdENvbnRleHRgJ3MgdGhyZWFkIGlkIHRvIHRoYXQgdmFsdWUgKGZhbGxpbmcgYmFjayB0b1xuICogdGhlIHBlci1zZXNzaW9uIGNvb2tpZSB3aGVuIGFic2VudCkuIEtlZXBpbmcgdGhlIGhlYWRlciAvIHF1ZXJ5XG4gKiBuYW1lcyBpbiBvbmUgcGxhY2UgbWVhbnMgdGhlIHNpZGUgdGhhdCBzZXRzIHRoZW0gYW5kIHRoZSBzaWRlIHRoYXRcbiAqIHJlYWRzIHRoZW0gY2FuIG5ldmVyIGRyaWZ0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vKiogSFRUUCBoZWFkZXIgaW5zcGVjdGVkIGZvciB0aGUgdGhyZWFkIGlkIGEgcmVxdWVzdCB0YXJnZXRzLiAqL1xuZXhwb3J0IGNvbnN0IFRIUkVBRF9JRF9IRUFERVIgPSBcIngtbWFzdHJhLXRocmVhZC1pZFwiO1xuXG4vKiogUXVlcnkgc3RyaW5nIHBhcmFtZXRlciBpbnNwZWN0ZWQgZm9yIHRoZSB0aHJlYWQgaWQgYSByZXF1ZXN0IHRhcmdldHMuICovXG5leHBvcnQgY29uc3QgVEhSRUFEX0lEX1FVRVJZID0gXCJ0aHJlYWRJZFwiO1xuIl19
|
package/lib/src/wire.d.ts
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* ({@link MASTRA_ROUTES}) and the embed-marker grammar in `marker.ts`,
|
|
27
27
|
* so this file stays purely declarative (schemas + inferred types).
|
|
28
28
|
* The browser client that drives these routes (`MastraPluginClient`)
|
|
29
|
-
* ships from `@dbx-tools/
|
|
29
|
+
* ships from `@dbx-tools/ui-mastra`.
|
|
30
30
|
*
|
|
31
31
|
* @module
|
|
32
32
|
*/
|
|
@@ -47,7 +47,7 @@ import { z } from "zod";
|
|
|
47
47
|
* Fields:
|
|
48
48
|
* - `basePath`: plugin mount path. Always `/api/<pluginName>`. Feed
|
|
49
49
|
* it to `new MastraPluginClient(config)` (from
|
|
50
|
-
* `@dbx-tools/
|
|
50
|
+
* `@dbx-tools/ui-mastra`) to get a typed client over every
|
|
51
51
|
* route plus the standard agent stream.
|
|
52
52
|
* - `defaultAgent`: agent id the client converses with when it
|
|
53
53
|
* doesn't name one.
|
|
@@ -117,7 +117,7 @@ export type ServingEndpointsResponse = z.infer<typeof ServingEndpointsResponseSc
|
|
|
117
117
|
/**
|
|
118
118
|
* Structural shape for an AI SDK V5 `UIMessage`. Defined locally
|
|
119
119
|
* so the shared types package stays dependency-free (no `ai`
|
|
120
|
-
* import). The runtime values returned by the `/history` endpoint
|
|
120
|
+
* import). The runtime values returned by the `/route/history` endpoint
|
|
121
121
|
* are produced by `toAISdkV5Messages` and are 1:1 compatible with
|
|
122
122
|
* `UIMessage` from the `ai` package; clients can safely cast when
|
|
123
123
|
* needed.
|
|
@@ -134,7 +134,7 @@ export declare const MastraHistoryUIMessageSchema: z.ZodObject<{
|
|
|
134
134
|
}, z.core.$strip>;
|
|
135
135
|
export type MastraHistoryUIMessage = z.infer<typeof MastraHistoryUIMessageSchema>;
|
|
136
136
|
/**
|
|
137
|
-
* JSON payload returned by `GET ${basePath}/history`.
|
|
137
|
+
* JSON payload returned by `GET ${basePath}/route/history`.
|
|
138
138
|
*
|
|
139
139
|
* Fields:
|
|
140
140
|
* - `uiMessages`: page of UI-formatted messages, oldest -> newest.
|
|
@@ -165,7 +165,7 @@ export declare const MastraHistoryResponseSchema: z.ZodObject<{
|
|
|
165
165
|
}, z.core.$strip>;
|
|
166
166
|
export type MastraHistoryResponse = z.infer<typeof MastraHistoryResponseSchema>;
|
|
167
167
|
/**
|
|
168
|
-
* JSON payload returned by `DELETE ${basePath}/history`. Deletes
|
|
168
|
+
* JSON payload returned by `DELETE ${basePath}/route/history`. Deletes
|
|
169
169
|
* every persisted message + workflow snapshot tied to the caller's
|
|
170
170
|
* thread, so the next chat turn starts from a clean slate. The
|
|
171
171
|
* session cookie that anchors the thread id is preserved so the
|
package/lib/src/wire.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* ({@link MASTRA_ROUTES}) and the embed-marker grammar in `marker.ts`,
|
|
27
27
|
* so this file stays purely declarative (schemas + inferred types).
|
|
28
28
|
* The browser client that drives these routes (`MastraPluginClient`)
|
|
29
|
-
* ships from `@dbx-tools/
|
|
29
|
+
* ships from `@dbx-tools/ui-mastra`.
|
|
30
30
|
*
|
|
31
31
|
* @module
|
|
32
32
|
*/
|
|
@@ -48,7 +48,7 @@ import { z } from "zod";
|
|
|
48
48
|
* Fields:
|
|
49
49
|
* - `basePath`: plugin mount path. Always `/api/<pluginName>`. Feed
|
|
50
50
|
* it to `new MastraPluginClient(config)` (from
|
|
51
|
-
* `@dbx-tools/
|
|
51
|
+
* `@dbx-tools/ui-mastra`) to get a typed client over every
|
|
52
52
|
* route plus the standard agent stream.
|
|
53
53
|
* - `defaultAgent`: agent id the client converses with when it
|
|
54
54
|
* doesn't name one.
|
|
@@ -103,7 +103,7 @@ export const ServingEndpointsResponseSchema = z.object({
|
|
|
103
103
|
/**
|
|
104
104
|
* Structural shape for an AI SDK V5 `UIMessage`. Defined locally
|
|
105
105
|
* so the shared types package stays dependency-free (no `ai`
|
|
106
|
-
* import). The runtime values returned by the `/history` endpoint
|
|
106
|
+
* import). The runtime values returned by the `/route/history` endpoint
|
|
107
107
|
* are produced by `toAISdkV5Messages` and are 1:1 compatible with
|
|
108
108
|
* `UIMessage` from the `ai` package; clients can safely cast when
|
|
109
109
|
* needed.
|
|
@@ -115,7 +115,7 @@ export const MastraHistoryUIMessageSchema = z.object({
|
|
|
115
115
|
metadata: z.unknown().optional(),
|
|
116
116
|
});
|
|
117
117
|
/**
|
|
118
|
-
* JSON payload returned by `GET ${basePath}/history`.
|
|
118
|
+
* JSON payload returned by `GET ${basePath}/route/history`.
|
|
119
119
|
*
|
|
120
120
|
* Fields:
|
|
121
121
|
* - `uiMessages`: page of UI-formatted messages, oldest -> newest.
|
|
@@ -136,7 +136,7 @@ export const MastraHistoryResponseSchema = z.object({
|
|
|
136
136
|
hasMore: z.boolean(),
|
|
137
137
|
});
|
|
138
138
|
/**
|
|
139
|
-
* JSON payload returned by `DELETE ${basePath}/history`. Deletes
|
|
139
|
+
* JSON payload returned by `DELETE ${basePath}/route/history`. Deletes
|
|
140
140
|
* every persisted message + workflow snapshot tied to the caller's
|
|
141
141
|
* thread, so the next chat turn starts from a clean slate. The
|
|
142
142
|
* session cookie that anchors the thread id is preserved so the
|
|
@@ -597,4 +597,4 @@ export const GenieAgentResultSchema = z.object({
|
|
|
597
597
|
summary: z.array(GenieSummaryItemSchema),
|
|
598
598
|
error: z.string().optional(),
|
|
599
599
|
});
|
|
600
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFHSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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Q0FDSCxDQUFDLENBQUM7QUFNSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ25CLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgY29udHJhY3QgZm9yIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgOiB0aGVcbiAqIGRlcGVuZGVuY3ktZnJlZSB6b2Qgc2NoZW1hcyArIGluZmVycmVkIHR5cGVzIGV2ZXJ5IGNvbnN1bWVyICh0aGVcbiAqIFJlYWN0IGNsaWVudCwgYnJvd3NlciBidW5kbGVzLCB0aGUgc2VydmVyIHBsdWdpbikgc2hhcmVzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBgcGdgLCBgZmFzdGVtYmVkYCwgYW5kIHRoZSBNYXN0cmEgcnVudGltZSBzbyB0aGVcbiAqIGNsaWVudCBjYW4gaW1wb3J0IHRoZXNlIHNjaGVtYXMgd2l0aG91dCBkcmFnZ2luZyBpbiBzZXJ2ZXItb25seVxuICogZGVwZW5kZW5jaWVzLiBUaHJlZSBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gVGhlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IGBNYXN0cmFQbHVnaW4uY2xpZW50Q29uZmlnKClgXG4gKiAgICAgIHBsdXMgdGhlIFJFU1QgcGF5bG9hZHMgaXRzIHJvdXRlcyByZXR1cm4gKG1vZGVscywgaGlzdG9yeSxcbiAqICAgICAgc3VnZ2VzdGlvbnMsIGNoYXJ0IGVtYmVkcywgc3RhdGVtZW50IGRhdGEpLiBUaGUgc2VydmVyXG4gKiAgICAgIGRlcml2ZXMgZXZlcnkgcGF0aCBmcm9tIHRoZSBwbHVnaW4gbW91bnQgYW5kIHB1Ymxpc2hlcyB0aGVcbiAqICAgICAgcmVzb2x2ZWQgcGF0aHMgc28gdGhlIGNsaWVudCBjb21wb3NlcyBVUkxzIHdpdGhvdXRcbiAqICAgICAgaGFyZC1jb2RpbmcgYC9hcGkvbWFzdHJhYCAtIHJlbmFtZSB0aGUgcGx1Z2luIGFuZCB0aGUgY2xpZW50XG4gKiAgICAgIGtlZXBzIHdvcmtpbmcuXG4gKiAgIDIuIFRoZSBgY3R4LndyaXRlcmAgZXZlbnQgdm9jYWJ1bGFyeTogdGhlIHdpcmUtZGVyaXZlZFxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9cyBmcm9tIGBAZGJ4LXRvb2xzL2dlbmllLXNoYXJlZGAgcGx1c1xuICogICAgICB0aGUgTWFzdHJhLW9ubHkgYWdlbnQgbGlmZWN5Y2xlIGV2ZW50cywgdW5pZmllZCBhc1xuICogICAgICB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0gc28gc3Vic2NyaWJlcnMgbmFycm93IGJvdGggaGFsdmVzXG4gKiAgICAgIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICogICAzLiBUaGUgR2VuaWUgYWdlbnQncyB3b3JrZmxvdyBvdXRwdXQgc2hhcGVzXG4gKiAgICAgICh7QGxpbmsgR2VuaWVBZ2VudFJlc3VsdH0gYW5kIGl0cyBzdW1tYXJ5IC8gZGF0YXNldCBpdGVtcykuXG4gKlxuICogVGhlIHJvdXRlIHNlZ21lbnRzIGxpdmUgaW4gdGhlIHNpYmxpbmcgYHJvdXRlcy50c2BcbiAqICh7QGxpbmsgTUFTVFJBX1JPVVRFU30pIGFuZCB0aGUgZW1iZWQtbWFya2VyIGdyYW1tYXIgaW4gYG1hcmtlci50c2AsXG4gKiBzbyB0aGlzIGZpbGUgc3RheXMgcHVyZWx5IGRlY2xhcmF0aXZlIChzY2hlbWFzICsgaW5mZXJyZWQgdHlwZXMpLlxuICogVGhlIGJyb3dzZXIgY2xpZW50IHRoYXQgZHJpdmVzIHRoZXNlIHJvdXRlcyAoYE1hc3RyYVBsdWdpbkNsaWVudGApXG4gKiBzaGlwcyBmcm9tIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmEtdWlgLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZW5pZU1vZGVsLCB0eXBlIEdlbmllQ2hhdEV2ZW50LCB0eXBlIE1lc3NhZ2VTdGF0dXMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcbmltcG9ydCB7IG1vZGVsIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNsaWVudCBjb25maWcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEpTT04tc2FmZSBkZXNjcmlwdG9yIHB1Ymxpc2hlZCBieSB0aGUgTWFzdHJhIHBsdWdpbidzXG4gKiBgY2xpZW50Q29uZmlnKClgLlxuICpcbiAqIE9ubHkgdGhlIGlycmVkdWNpYmxlIGRhdGEgbGl2ZXMgaGVyZTogYGJhc2VQYXRoYCAodGhlIG9uZSBwYXRoIHRoZVxuICogY2xpZW50IGNhbid0IG90aGVyd2lzZSBrbm93LCBzaW5jZSBpdCBlbmNvZGVzIHRoZSBwbHVnaW4ncyBtb3VudFxuICogbmFtZSkgcGx1cyB0aGUgcnVudGltZSBhZ2VudCByb3N0ZXIuIEV2ZXJ5IGNvbmNyZXRlIGVuZHBvaW50IFVSTCBpc1xuICogZGVyaXZlZCBmcm9tIGBiYXNlUGF0aGAgYnkgdGhlIGJyb3dzZXIgY2xpZW50XG4gKiAoYE1hc3RyYVBsdWdpbkNsaWVudGApIHVzaW5nIHRoZSBzaGFyZWQge0BsaW5rIE1BU1RSQV9ST1VURVN9XG4gKiBzZWdtZW50cywgc28gdGhlcmUncyBub3RoaW5nIHRvIHB1Ymxpc2ggcGVyLXJvdXRlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgYmFzZVBhdGhgOiBwbHVnaW4gbW91bnQgcGF0aC4gQWx3YXlzIGAvYXBpLzxwbHVnaW5OYW1lPmAuIEZlZWRcbiAqICAgICBpdCB0byBgbmV3IE1hc3RyYVBsdWdpbkNsaWVudChjb25maWcpYCAoZnJvbVxuICogICAgIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmEtdWlgKSB0byBnZXQgYSB0eXBlZCBjbGllbnQgb3ZlciBldmVyeVxuICogICAgIHJvdXRlIHBsdXMgdGhlIHN0YW5kYXJkIGFnZW50IHN0cmVhbS5cbiAqICAgLSBgZGVmYXVsdEFnZW50YDogYWdlbnQgaWQgdGhlIGNsaWVudCBjb252ZXJzZXMgd2l0aCB3aGVuIGl0XG4gKiAgICAgZG9lc24ndCBuYW1lIG9uZS5cbiAqICAgLSBgYWdlbnRzYDogZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBpZCBpbiByZWdpc3RyYXRpb24gb3JkZXIuXG4gKiAgIC0gYGZlZWRiYWNrRW5hYmxlZGA6IHdoZXRoZXIgdGhlIHNlcnZlciBjYW4gbG9nIHVzZXIgZmVlZGJhY2sgdG9cbiAqICAgICBNTGZsb3cgKE1MZmxvdyB0cmFjaW5nIGlzIGNvbmZpZ3VyZWQpLiBEcml2ZXMgd2hldGhlciB0aGUgY2hhdCBVSVxuICogICAgIHN1cmZhY2VzIHRodW1icyAvIGNvbW1lbnQgY29udHJvbHMuIERlZmF1bHRzIHRvIGBmYWxzZWAgc28gYVxuICogICAgIGNvbmZpZyBwdWJsaXNoZWQgYnkgYW4gb2xkZXIgc2VydmVyICh3aXRob3V0IHRoZSBmaWVsZCkgcGFyc2VzXG4gKiAgICAgY2xlYW5seSB0byBcIm9mZlwiLlxuICogICAtIGBjaGF0QWx3YXlzQXZhaWxhYmxlYDogd2hldGhlciB0aGUgYWdlbnRzJyBEYXRhYnJpY2tzIGNhbGxzIHJ1biBhcyB0aGVcbiAqICAgICBhcHAgc2VydmljZSBwcmluY2lwYWwgcmF0aGVyIHRoYW4gb24tYmVoYWxmLW9mIHRoZSBzaWduZWQtaW4gdXNlci4gV2hlblxuICogICAgIGB0cnVlYCB0aGUgY2hhdCB3b3JrcyBmb3IgYW55IGNhbGxlciB3aG8gY2FuIG9wZW4gdGhlIGFwcCwgc28gYSBVSSB0aGF0XG4gKiAgICAgaGlkZXMgY2hhdCB3aGVuIHRoZSBPQk8gdG9rZW4gaXMgYWJzZW50IHNob3VsZCBzaG93IGl0IGFueXdheS4gRGVmYXVsdHNcbiAqICAgICB0byBgZmFsc2VgICh0aGUgT0JPIC8gYFwidXNlclwiYCBpZGVudGl0eSBtb2RlKSwgc28gYW4gb2xkZXIgc2VydmVyIHdpdGhvdXRcbiAqICAgICB0aGUgZmllbGQga2VlcHMgdGhlIE9CTy1nYXRlZCBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgYmFzZVBhdGg6IHouc3RyaW5nKCksXG4gIGRlZmF1bHRBZ2VudDogei5zdHJpbmcoKSxcbiAgYWdlbnRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBmZWVkYmFja0VuYWJsZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBjaGF0QWx3YXlzQXZhaWxhYmxlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhQ2xpZW50Q29uZmlnID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhQ2xpZW50Q29uZmlnU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9kZWZhdWx0LW1vZGVsWz9hZ2VudElkPV1gLiBUaGVcbiAqIHN0YXRpYyBkZWZhdWx0IG1vZGVsIHRoZSBhZ2VudCByZXNvbHZlcyB0byB3aGVuIHRoZSBjbGllbnQgcGlucyBubyBtb2RlbCxcbiAqIGFzIGJvdGggdGhlIHJhdyBzZXJ2aW5nLWVuZHBvaW50IGBtb2RlbGAgaWQgYW5kIGEgYGRpc3BsYXlOYW1lYCAodGhlXG4gKiBodW1hbml6ZWQgbGFiZWwgdGhlIHBpY2tlciBzaG93cykuIEJvdGggYXJlIGBudWxsYCB3aGVuIHRoZSBhZ2VudCBkZWNpZGVzXG4gKiBpdHMgbW9kZWwgZHluYW1pY2FsbHkgYXQgY2FsbCB0aW1lIChub3RoaW5nIHN0YXRpYyB0byBhZHZlcnRpc2UpLiBMZXRzIHRoZVxuICogcGlja2VyIGxhYmVsIGl0cyBkZWZhdWx0IG9wdGlvbiBXSVRIT1VUIHdhaXRpbmcgb24gdGhlIGAvbW9kZWxzYCBjYXRhbG9ndWUsXG4gKiBzbyBpdCBuZXZlciBmbGFzaGVzIGEgcmF3IGlkIG9uIGxvYWQuIEtlcHQgb2ZmIHRoZSBzdGF0aWMgYm9vdHN0cmFwXG4gKiBgY2xpZW50Q29uZmlnYCBvbiBwdXJwb3NlOiBpdCBpcyBwZXItYWdlbnQgYW5kIGNhbiBiZSBkeW5hbWljLCBzbyBpdCBpc1xuICogZmV0Y2hlZCBsaWtlIGAvbW9kZWxzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRNb2RlbFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBhZ2VudElkOiB6LnN0cmluZygpLFxuICBtb2RlbDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBkaXNwbGF5TmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBEZWZhdWx0TW9kZWxSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIERlZmF1bHRNb2RlbFJlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtb2RlbCBjYXRhbG9ndWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L21vZGVsc2AuIFdyYXBzIHRoZSBzaGFyZWRcbiAqIHtAbGluayBtb2RlbC5TZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hfSAocmUtZXhwb3J0ZWQgZnJvbVxuICogYEBkYngtdG9vbHMvc2hhcmVkLW1vZGVsYCkgc28gdGhlIGNhdGFsb2d1ZVxuICogZGVzY3JpcHRvciBoYXMgYSBzaW5nbGUgZGVmaW5pdGlvbiB0aGUgY2xpZW50LCBzZXJ2ZXIsIGFuZCB0aGVcbiAqIHN0YW5kYWxvbmUgYEBkYngtdG9vbHMvbW9kZWxgIHRvb2xraXQgYWxsIGFncmVlIG9uLlxuICovXG5leHBvcnQgY29uc3QgU2VydmluZ0VuZHBvaW50c1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBlbmRwb2ludHM6IHouYXJyYXkobW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYSksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXQgaGlzdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFN0cnVjdHVyYWwgc2hhcGUgZm9yIGFuIEFJIFNESyBWNSBgVUlNZXNzYWdlYC4gRGVmaW5lZCBsb2NhbGx5XG4gKiBzbyB0aGUgc2hhcmVkIHR5cGVzIHBhY2thZ2Ugc3RheXMgZGVwZW5kZW5jeS1mcmVlIChubyBgYWlgXG4gKiBpbXBvcnQpLiBUaGUgcnVudGltZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGAvaGlzdG9yeWAgZW5kcG9pbnRcbiAqIGFyZSBwcm9kdWNlZCBieSBgdG9BSVNka1Y1TWVzc2FnZXNgIGFuZCBhcmUgMToxIGNvbXBhdGlibGUgd2l0aFxuICogYFVJTWVzc2FnZWAgZnJvbSB0aGUgYGFpYCBwYWNrYWdlOyBjbGllbnRzIGNhbiBzYWZlbHkgY2FzdCB3aGVuXG4gKiBuZWVkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcm9sZTogei5lbnVtKFtcInN5c3RlbVwiLCBcInVzZXJcIiwgXCJhc3Npc3RhbnRcIl0pLFxuICBwYXJ0czogei5hcnJheSh6LnVua25vd24oKSkucmVhZG9ubHkoKSxcbiAgbWV0YWRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9oaXN0b3J5YC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYHVpTWVzc2FnZXNgOiBwYWdlIG9mIFVJLWZvcm1hdHRlZCBtZXNzYWdlcywgb2xkZXN0IC0+IG5ld2VzdC5cbiAqICAgICBBbHdheXMgY2hyb25vbG9naWNhbCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHBhZ2luYXRpb25cbiAqICAgICBvcmRlciBzbyB0aGUgY2xpZW50IGNhbiBwcmVwZW5kIHRoZSBhcnJheSB0byB0aGUgbGl2ZVxuICogICAgIHRyYW5zY3JpcHQgd2l0aG91dCBzb3J0aW5nLlxuICogICAtIGBwYWdlYDogemVyby1pbmRleGVkIHBhZ2UgdGhhdCBwcm9kdWNlZCB0aGlzIHJlc3BvbnNlLlxuICogICAtIGBwZXJQYWdlYDogbnVtYmVyIG9mIGl0ZW1zIHJlcXVlc3RlZCBwZXIgcGFnZS5cbiAqICAgLSBgdG90YWxgOiB0b3RhbCBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIHRocmVhZC5cbiAqICAgLSBgaGFzTW9yZWA6IHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgb2xkZXIgcGFnZSBpcyBzdGlsbFxuICogICAgIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUhpc3RvcnlSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdWlNZXNzYWdlczogei5hcnJheShNYXN0cmFIaXN0b3J5VUlNZXNzYWdlU2NoZW1hKSxcbiAgcGFnZTogei5udW1iZXIoKSxcbiAgcGVyUGFnZTogei5udW1iZXIoKSxcbiAgdG90YWw6IHoubnVtYmVyKCksXG4gIGhhc01vcmU6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFIaXN0b3J5UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFIaXN0b3J5UmVzcG9uc2VTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgREVMRVRFICR7YmFzZVBhdGh9L2hpc3RvcnlgLiBEZWxldGVzXG4gKiBldmVyeSBwZXJzaXN0ZWQgbWVzc2FnZSArIHdvcmtmbG93IHNuYXBzaG90IHRpZWQgdG8gdGhlIGNhbGxlcidzXG4gKiB0aHJlYWQsIHNvIHRoZSBuZXh0IGNoYXQgdHVybiBzdGFydHMgZnJvbSBhIGNsZWFuIHNsYXRlLiBUaGVcbiAqIHNlc3Npb24gY29va2llIHRoYXQgYW5jaG9ycyB0aGUgdGhyZWFkIGlkIGlzIHByZXNlcnZlZCBzbyB0aGVcbiAqIGNhbGxlciBkb2Vzbid0IGxvc2UgaXRzIGlkZW50aXR5IC0gb25seSB0aGUgY29udGVudHMgZ28gYXdheS5cbiAqXG4gKiBgb2tgIGlzIGFsd2F5cyBgdHJ1ZWAgb24gc3VjY2VzczsgdGhlIHJlc3BvbnNlIG9iamVjdCBpcyBrZXB0XG4gKiBhcyBhIHN0cnVjdCAodnMgYSBiYXJlIDIwNCkgc28gZnV0dXJlIGZpZWxkcyAoZS5nLiBgZGVsZXRlZEF0YCxcbiAqIGBtZXNzYWdlc2ApIGNhbiBiZSBhZGRlZCB3aXRob3V0IGJ1bXBpbmcgdGhlIGNvbnRyYWN0LlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgaGlzdG9yeSB3YXMgY2xlYXJlZC5cbiAqICAgLSBgdGhyZWFkSWRgOiB0aHJlYWQgaWQgdGhhdCB3YXMgd2lwZWQuXG4gKiAgIC0gYGNsZWFyZWRgOiBudW1iZXIgb2YgbWVzc2FnZXMgdGhlIHRocmVhZCBoZWxkIGJlZm9yZVxuICogICAgIGRlbGV0aW9uLiBVc2VmdWwgZm9yIGNsaWVudC1zaWRlIFwiY2xlYXJlZCAxMiBtZXNzYWdlc1wiXG4gKiAgICAgdG9hc3RzOyBgMGAgaXMgcmVwb3J0ZWQgd2hlbiB0aGUgdGhyZWFkIHdhcyBhbHJlYWR5IGVtcHR5XG4gKiAgICAgKGNhbGwgaXMgaWRlbXBvdGVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGVhckhpc3RvcnlSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksXG4gIGNsZWFyZWQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aHJlYWRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQSBzaW5nbGUgY29udmVyc2F0aW9uIHRocmVhZCB0aGUgcmVzb3VyY2UgKGF1dGhlbnRpY2F0ZWQgdXNlcikgb3ducyxcbiAqIGFzIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vdGhyZWFkc2AuIE1pcnJvcnMgTWFzdHJhJ3NcbiAqIGBTdG9yYWdlVGhyZWFkVHlwZWAgYnV0IHdpdGggSlNPTi1zYWZlIElTTy04NjAxIHRpbWVzdGFtcHMgKHRoZSB3aXJlXG4gKiBjYW4ndCBjYXJyeSBgRGF0ZWApLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgaWRgOiB0aHJlYWQgaWQuIFBhc3MgaXQgYmFjayBhcyB0aGUgdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXJcbiAqICAgICAoYFRIUkVBRF9JRF9IRUFERVJgKSBvbiBhIHN0cmVhbSAvIGhpc3RvcnkgLyBkZWxldGUgY2FsbCB0byBhY3RcbiAqICAgICBvbiB0aGlzIGNvbnZlcnNhdGlvbi5cbiAqICAgLSBgdGl0bGVgOiBodW1hbi1yZWFkYWJsZSB0aXRsZS4gUHJlc2VudCBvbmNlIHRoZSBhZ2VudCdzIG1lbW9yeVxuICogICAgIGhhcyBhdXRvLWdlbmVyYXRlZCBvbmUgKGFmdGVyIHRoZSBmaXJzdCB0dXJuKTsgYWJzZW50IG9uIGFcbiAqICAgICBicmFuZC1uZXcgdGhyZWFkLCBzbyB0aGUgVUkgZmFsbHMgYmFjayB0byBhIHBsYWNlaG9sZGVyLlxuICogICAtIGByZXNvdXJjZUlkYDogb3duaW5nIHJlc291cmNlICh0aGUgdXNlciBpZCkuIEFsd2F5cyB0aGUgY2FsbGVyJ3NcbiAqICAgICBvd24gcmVzb3VyY2UgLSB0aGUgbGlzdCByb3V0ZSBmaWx0ZXJzIGJ5IGl0IHNlcnZlci1zaWRlLlxuICogICAtIGBjcmVhdGVkQXRgIC8gYHVwZGF0ZWRBdGA6IElTTy04NjAxIHRpbWVzdGFtcHMuIGB1cGRhdGVkQXRgIGlzXG4gKiAgICAgdGhlIG5hdHVyYWwgc29ydCBrZXkgZm9yIFwibW9zdCByZWNlbnQgY29udmVyc2F0aW9ucyBmaXJzdFwiLlxuICogICAtIGBtZXRhZGF0YWA6IG9wYXF1ZSB0aHJlYWQgbWV0YWRhdGEsIHBhc3NlZCB0aHJvdWdoIHVudG91Y2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVRocmVhZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlc291cmNlSWQ6IHouc3RyaW5nKCksXG4gIGNyZWF0ZWRBdDogei5zdHJpbmcoKSxcbiAgdXBkYXRlZEF0OiB6LnN0cmluZygpLFxuICBtZXRhZGF0YTogei51bmtub3duKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVGhyZWFkID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVGhyZWFkU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS90aHJlYWRzYC4gT25lIHBhZ2Ugb2YgdGhlXG4gKiBjYWxsZXIncyBjb252ZXJzYXRpb24gdGhyZWFkcywgbmV3ZXN0IChgdXBkYXRlZEF0YCBERVNDKSBmaXJzdC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYHRocmVhZHNgOiBwYWdlIG9mIHRocmVhZHMgZm9yIHRoZSBjYWxsZXIncyByZXNvdXJjZS5cbiAqICAgLSBgcGFnZWA6IHplcm8taW5kZXhlZCBwYWdlIHRoYXQgcHJvZHVjZWQgdGhpcyByZXNwb25zZS5cbiAqICAgLSBgcGVyUGFnZWA6IG51bWJlciBvZiBpdGVtcyByZXF1ZXN0ZWQgcGVyIHBhZ2UuXG4gKiAgIC0gYHRvdGFsYDogdG90YWwgbnVtYmVyIG9mIHRocmVhZHMgdGhlIHJlc291cmNlIG93bnMuXG4gKiAgIC0gYGhhc01vcmVgOiB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIG1vcmUgcGFnZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFUaHJlYWRzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRocmVhZHM6IHouYXJyYXkoTWFzdHJhVGhyZWFkU2NoZW1hKSxcbiAgcGFnZTogei5udW1iZXIoKSxcbiAgcGVyUGFnZTogei5udW1iZXIoKSxcbiAgdG90YWw6IHoubnVtYmVyKCksXG4gIGhhc01vcmU6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFUaHJlYWRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFUaHJlYWRzUmVzcG9uc2VTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgREVMRVRFICR7YmFzZVBhdGh9L3RocmVhZHNgICh0aHJlYWQgaWRcbiAqIHN1cHBsaWVkIHZpYSB0aGUgdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXIgLyBgdGhyZWFkSWRgIHF1ZXJ5KS4gV2lwZXNcbiAqIHRoZSBuYW1lZCB0aHJlYWQgYW5kIGV2ZXJ5IG1lc3NhZ2Ugb24gaXQuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBva2A6IGxpdGVyYWwgYHRydWVgIG9uIHN1Y2Nlc3MuXG4gKiAgIC0gYGFnZW50SWRgOiBhZ2VudCB3aG9zZSB0aHJlYWQgd2FzIGRlbGV0ZWQuXG4gKiAgIC0gYHRocmVhZElkYDogdGhyZWFkIGlkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKiAgIC0gYGRlbGV0ZWRgOiBgdHJ1ZWAgd2hlbiBhIHRocmVhZCByb3cgZXhpc3RlZCBhbmQgd2FzIHJlbW92ZWQsXG4gKiAgICAgYGZhbHNlYCB3aGVuIGl0IHdhcyBhbHJlYWR5IGdvbmUgKGNhbGwgaXMgaWRlbXBvdGVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFEZWxldGVUaHJlYWRSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksXG4gIGRlbGV0ZWQ6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFEZWxldGVUaHJlYWRSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYURlbGV0ZVRocmVhZFJlc3BvbnNlU2NoZW1hPjtcblxuLyoqIExvbmdlc3QgdGhyZWFkIHRpdGxlIHRoZSByZW5hbWUgcm91dGUgYWNjZXB0cyAodHJpbW1lZCBzZXJ2ZXItc2lkZSkuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1RIUkVBRF9USVRMRV9NQVggPSAyMDA7XG5cbi8qKlxuICogSlNPTiBib2R5IGZvciBgUEFUQ0ggJHtiYXNlUGF0aH0vdGhyZWFkc2AgKHRocmVhZCBpZCBzdXBwbGllZCB2aWEgdGhlXG4gKiB0aHJlYWQtc2VsZWN0aW9uIGhlYWRlciAvIGB0aHJlYWRJZGAgcXVlcnkpLiBSZW5hbWVzIGEgc2luZ2xlXG4gKiBjb252ZXJzYXRpb24uXG4gKlxuICogRmllbGRzOlxuICogICAtIGB0aXRsZWA6IHRoZSBuZXcgaHVtYW4tcmVhZGFibGUgdGl0bGUuIFRyaW1tZWQgYW5kIGNhcHBlZCBhdFxuICogICAgIHtAbGluayBNQVNUUkFfVEhSRUFEX1RJVExFX01BWH0gY2hhcmFjdGVycyBzZXJ2ZXItc2lkZTsgbXVzdCBiZVxuICogICAgIG5vbi1lbXB0eSBhZnRlciB0cmltbWluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRpdGxlOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkubWF4KE1BU1RSQV9USFJFQURfVElUTEVfTUFYKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVXBkYXRlVGhyZWFkUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3RTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgUEFUQ0ggJHtiYXNlUGF0aH0vdGhyZWFkc2AuIEVjaG9lcyB0aGVcbiAqIHJlbmFtZWQgdGhyZWFkIGluIGl0cyBwb3N0LXVwZGF0ZSB3aXJlIHNoYXBlIHNvIHRoZSBjbGllbnQgY2FuIHJlZmxlY3RcbiAqIHRoZSBuZXcgdGl0bGUgd2l0aG91dCBhIHJlLWZldGNoLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgdGhyZWFkIHdhcyByZW5hbWVkLlxuICogICAtIGB0aHJlYWRgOiB0aGUgdXBkYXRlZCB0aHJlYWQgKGNhcnJpZXMgdGhlIG5ldyBgdGl0bGVgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBvazogei5saXRlcmFsKHRydWUpLFxuICBhZ2VudElkOiB6LnN0cmluZygpLFxuICB0aHJlYWQ6IE1hc3RyYVRocmVhZFNjaGVtYSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVXBkYXRlVGhyZWFkUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFVcGRhdGVUaHJlYWRSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdWdnZXN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9zdWdnZXN0aW9uc2AuXG4gKlxuICogQ2FycmllcyB0aGUgY3VyYXRlZCBzdGFydGVyIHF1ZXN0aW9ucyBmb3IgYW4gYWdlbnQncyBHZW5pZSBzcGFjZSAtXG4gKiB0aGUgYHNhbXBsZV9xdWVzdGlvbnNgIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIHRoZSBzcGFjZSwgc3VyZmFjZWRcbiAqIGFzIG9uZS10YXAgcHJvbXB0cyBvbiB0aGUgY2hhdCdzIGVtcHR5IHN0YXRlLiBgcXVlc3Rpb25zYCBpcyBlbXB0eVxuICogd2hlbiB0aGUgYWdlbnQgaGFzIG5vIEdlbmllIHNwYWNlIChvciB0aGUgc3BhY2UgZGVmaW5lcyBub25lKSwgc29cbiAqIHRoZSBjbGllbnQgcmVuZGVycyBub3RoaW5nIGluIHRoYXQgY2FzZSByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG9cbiAqIGJ1aWx0LWluIGV4YW1wbGUgcHJvbXB0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXN0aW9uczogei5hcnJheSh6LnN0cmluZygpKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2hhcnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEFsbG93ZWQgY2hhcnQgdHlwZXMgdGhlIHBsYW5uZXIgY2FuIHBpY2suIERlZmluZWQgYXMgYVxuICogZGlzY3JpbWluYXRlZCBsaXRlcmFsIHVuaW9uIHNvIGVhY2ggdmFyaWFudCBjYXJyaWVzIGl0cyBvd25cbiAqIGAuZGVzY3JpYmUoKWAgY2xhdXNlIC0gdGhlIHNlcnZlci1zaWRlIHBsYW5uZXIncyBwcm9tcHRcbiAqIGZvcm1hdHRlciB3YWxrcyBgLm9wdGlvbnNgIHRvIGlubGluZSB0aGUgZGVzY3JpcHRpb25zIGludG8gdGhlXG4gKiBtb2RlbCBpbnN0cnVjdGlvbnMsIGtlZXBpbmcgdGhlIHByb21wdCBpbiBsb2NrLXN0ZXAgd2l0aCB0aGVcbiAqIHNjaGVtYSBieSBjb25zdHJ1Y3Rpb24uIFRoZSBydW50aW1lIHR5cGUgaXMgdGhlIHBsYWluIHN0cmluZ1xuICogdW5pb24gKGBcImJhclwiIHwgXCJsaW5lXCIgfCAuLi5gKSwgc28gY29uc3VtZXJzIHRoYXQganVzdCBuZWVkIGFcbiAqIGRpc2NyaW1pbmF0b3IgdmFsdWUgYmVoYXZlIHRoZSBzYW1lIGFzIGlmIGl0IHdlcmUgYVxuICogYHouZW51bShbLi4uXSlgLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRUeXBlU2NoZW1hID0gelxuICAudW5pb24oW1xuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiYmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiY29tcGFyaW5nIGEgbnVtZXJpYyB2YWx1ZSBhY3Jvc3MgYSBzbWFsbC9tZWRpdW0gc2V0IG9mIGRpc2NyZXRlIGNhdGVnb3JpZXMgKHRvcC1OLCByYW5raW5nLCBncm91cC1ieSlcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJob3Jpem9udGFsQmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwic2FtZSBhcyBiYXIgYnV0IGNhdGVnb3JpZXMgb24gdGhlIHktYXhpcyAtIHByZWZlciB3aGVuIGNhdGVnb3J5IGxhYmVscyBhcmUgbG9uZyBvciB0aGVyZSBhcmUgbWFueSBjYXRlZ29yaWVzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwibGluZVwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQtYXhpcyB0cmVuZCAodGltZSBzZXJpZXMsIHNlcXVlbmNlLCByYW5rKSB3aGVyZSB0aGUgeC1heGlzIGhhcyBuYXR1cmFsIG9yZGVyXCIsXG4gICAgICApLFxuICAgIHoubGl0ZXJhbChcImFyZWFcIikuZGVzY3JpYmUoXCJzdGFja2VkLXRyZW5kIGVtcGhhc2lzIC0gY3VtdWxhdGl2ZSBvciBjb21wb3NpdGlvbiBvdmVyIHRpbWVcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjb21ib1wiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm1peGVkIGJhciArIGxpbmUgKG9yIGFyZWEpIHNlcmllcyBvbiBzaGFyZWQgY2F0ZWdvcmllcyAtIGUuZy4gdm9sdW1lIGJhcnMgd2l0aCBhIHJhdGUvdHJlbmQgbGluZTsgc2V0IGVhY2ggc2VyaWVzJyBgdHlwZWBcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ3YXRlcmZhbGxcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJicmlkZ2UgLyBydW5uaW5nLXRvdGFsIG9mIHNpZ25lZCBzdGVwIHZhbHVlcyAoc3RhcnQgLT4gZGVsdGFzIC0+IGVuZCkgYWNyb3NzIG9yZGVyZWQgY2F0ZWdvcmllc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInNjYXR0ZXJcIilcbiAgICAgIC5kZXNjcmliZShcInR3by1udW1lcmljLWF4aXMgY29ycmVsYXRpb25zIGJldHdlZW4gZmllbGRzIChlLmcuIHByaWNlIHZzLiBxdWFudGl0eSlcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJoZWF0bWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibWF0cml4IGludGVuc2l0eSBhY3Jvc3MgdHdvIGNhdGVnb3J5IGF4ZXMgLSB4IGxhYmVscyBpbiBgY2F0ZWdvcmllc2AsIG9uZSBzZXJpZXMgcGVyIG1hdHJpeCByb3cgaG9sZGluZyB0aGF0IHJvdydzIHZhbHVlc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInJhZGFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibXVsdGktZGltZW5zaW9uIGNvbXBhcmlzb24gYWNyb3NzIGEgZml4ZWQgc2V0IG9mIGF4ZXMgKG9uZSBpbmRpY2F0b3IgcGVyIGNhdGVnb3J5LCBvbmUgb3IgbW9yZSBzZXJpZXMgb2YgdmFsdWVzKVwiLFxuICAgICAgKSxcbiAgICB6LmxpdGVyYWwoXCJwaWVcIikuZGVzY3JpYmUoXCJwYXJ0cy1vZi1hLXdob2xlIHdoZW4gMi03IGNhdGVnb3JpZXMgc3VtIHRvIGEgbWVhbmluZ2Z1bCB0b3RhbFwiKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImZ1bm5lbFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQgc3RhZ2VzIHRoYXQgc2hyaW5rIChjb252ZXJzaW9uLCBwaXBlbGluZSwgYXR0cml0aW9uKSAtIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ0cmVlbWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwicGFydHMtb2YtYS13aG9sZSBhcyBuZXN0ZWQgcmVjdGFuZ2xlcyB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gfjcgY2F0ZWdvcmllcyBvciBhIGZsYXQgaGllcmFyY2h5IG9mIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjdXN0b21cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJlc2NhcGUgaGF0Y2ggZm9yIGEgY2hhcnQgbm9uZSBvZiB0aGUgYWJvdmUgY2FuIGV4cHJlc3MgKHNhbmtleSwgYm94cGxvdCwgY2FuZGxlc3RpY2ssIHN1bmJ1cnN0LCBnYXVnZSwgbmV0d29yayBncmFwaCwgY2FsZW5kYXIsIHBhcmFsbGVsLCAuLi4pIC0gaGFuZC13cml0ZSB0aGUgY29tcGxldGUgRWNoYXJ0cyBvcHRpb24gaW5zdGVhZCBvZiBhIHBsYW5cIixcbiAgICAgICksXG4gIF0pXG4gIC5kZXNjcmliZShcIlRoZSBjaGFydCBzaGFwZSB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgZGF0YSBhbmQgaW50ZW50LlwiKTtcbmV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9IHouaW5mZXI8dHlwZW9mIENoYXJ0VHlwZVNjaGVtYT47XG5cbi8qKlxuICogUmVzb2x2ZWQgY2hhcnQgcGxhbiBhIHNldHRsZWQgY2hhcnQgZW50cnkgY2FycmllcyBvbiBpdHNcbiAqIGByZXN1bHRgIGZpZWxkLiBgb3B0aW9uYCBpcyB0aGUgZnVsbCBFY2hhcnRzIHNwZWM7IHBhc3NcbiAqIHN0cmFpZ2h0IGludG8gYDxSZWFjdEVDaGFydHMgb3B0aW9uPXsuLi59PmAuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRUeXBlOiBDaGFydFR5cGVTY2hlbWEsXG4gIG9wdGlvbjogelxuICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJGdWxseS1yZXNvbHZlZCBFY2hhcnRzIGBFQ2hhcnRzT3B0aW9uYCBKU09OIGZvciB0aGlzIGNoYXJ0IC0gZHJvcCBkaXJlY3RseSBpbnRvIGFuIEVjaGFydHMgaW5zdGFuY2UgKG9yIGA8UmVhY3RFQ2hhcnRzIG9wdGlvbj17Li4ufSAvPmApIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLiBJbmNsdWRlcyB0aXRsZSAvIHRvb2x0aXAgLyBsZWdlbmQgLyBncmlkIC8gYXhpcyAvIHNlcmllcyBkZWZhdWx0cyBhbHJlYWR5IG1lcmdlZCBpbi5cIixcbiAgICApLFxufSk7XG5leHBvcnQgdHlwZSBDaGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIENoYXJ0UmVzdWx0U2NoZW1hPjtcblxuLyoqXG4gKiBXaXJlLWZvcm1hdCBBTkQgc2VydmVyLXNpZGUgY2FjaGUgc2hhcGUgZm9yIGEgY2hhcnQgZW50cnkuXG4gKiBUaHJlZSBsaWZlY3ljbGUgc3RhdGVzIGluZmVycmVkIGZyb20gdGhlIHR3byBvcHRpb25hbCBmaWVsZHNcbiAqIChubyBkaXNjcmltaW5hdG9yIG5lZWRlZCk6XG4gKlxuICogICAtIGByZXN1bHRgIHNldCAgICAgICAgICAgICAgICAgICAgLT4gY2hhcnQgaXMgcmVhZHkgdG8gcmVuZGVyXG4gKiAgIC0gYGVycm9yYCBzZXQgICAgICAgICAgICAgICAgICAgICAtPiBwbGFubmVyIC8gZGF0YSBmZXRjaCBmYWlsZWRcbiAqICAgLSBib3RoIGByZXN1bHRgIGFuZCBgZXJyb3JgIHVuc2V0IC0+IHN0aWxsIHByb2Nlc3NpbmdcbiAqXG4gKiBgb3B0aW9uYCBpcyB0eXBlZCBhcyBhIGdlbmVyaWMgcmVjb3JkIHNvIHRoaXMgcGFja2FnZSBzdGF5c1xuICogZGVwZW5kZW5jeS1mcmVlIG9mIGBlY2hhcnRzYC4gVGhlIHNlcnZlciAoYGNoYXJ0LnRzYCkgaW1wb3J0c1xuICogdGhpcyBzY2hlbWEgZGlyZWN0bHk7IHRoZSBkZW1vIGNsaWVudCBwb2xscyB0aGVcbiAqIGAvZW1iZWQvY2hhcnQvOmlkYCByb3V0ZSBhbmQgcGFyc2VzIHJlc3BvbnNlcyBhZ2FpbnN0IGl0LlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIk9wYXF1ZSBpZCBtaW50ZWQgYnkgdGhlIGNoYXJ0IHN1YnN5c3RlbS4gRW1iZWQgdmVyYmF0aW0gYXMgYFtjaGFydDo8Y2hhcnRJZD5dYCBpbiBhZ2VudCBwcm9zZTsgdGhlIGhvc3QgVUkgcmVzb2x2ZXMgaXQgYWdhaW5zdCB0aGlzIGNhY2hlIGVudHJ5LlwiLFxuICAgICksXG4gIGVycm9yOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgY2hhcnQgZmFpbGVkIChkYXRhIGZldGNoIGVycm9yLCBwbGFubmVyIGVycm9yLCBlbXB0eSBkYXRhc2V0KS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHJlc3VsdGA7IGFic2VudCBvbiBzdWNjZXNzIGFuZCB3aGlsZSBwcm9jZXNzaW5nLlwiLFxuICAgICksXG4gIHJlc3VsdDogQ2hhcnRSZXN1bHRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcbiAgICBcIlJlc29sdmVkIGNoYXJ0IHBsYW4uIEFic2VudCB3aGlsZSBwcm9jZXNzaW5nIGFuZCB3aGVuIHRoZSBydW4gZXJyb3JlZC5cIixcbiAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ2hhcnQgPSB6LmluZmVyPHR5cGVvZiBDaGFydFNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGVtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogV2lyZS1mb3JtYXQgcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L2VtYmVkL2RhdGEvOmlkYC5cbiAqXG4gKiBNaXJyb3JzIHRoZSBhZ2VudC1zaWRlIGBnZXRfc3RhdGVtZW50YCB0b29sJ3Mgb3V0cHV0IHNvIHRoZVxuICogaG9zdCBVSSBhbmQgdGhlIExMTSBzZWUgdGhlIGV4YWN0IHNhbWUgc2hhcGUgZm9yIHRoZSBzYW1lXG4gKiBzdGF0ZW1lbnQ7IHRoZSByb3V0ZSBpcyB3aGF0IHJlc29sdmVzIGBbZGF0YTo8c3RhdGVtZW50X2lkPl1gXG4gKiBtYXJrZXJzIHRoZSBhZ2VudCBlbWJlZHMgaW4gcHJvc2UuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBjb2x1bW5zYDogY29sdW1uIG5hbWVzIGluIGRlY2xhcmF0aW9uIG9yZGVyLlxuICogICAtIGByb3dzYDogcm93IHJlY29yZHMga2V5ZWQgYnkgY29sdW1uIG5hbWUuIENlbGwgdmFsdWVzIGFyZVxuICogICAgIGVpdGhlciBjb2VyY2VkIG51bWJlcnMgb3IgdGhlIG9yaWdpbmFsIHN0cmluZ3MgKEdlbmllIC9cbiAqICAgICBTdGF0ZW1lbnQgRXhlY3V0aW9uIHJldHVybnMgZXZlcnkgY2VsbCBhcyBgc3RyaW5nIHwgbnVsbGA7XG4gKiAgICAgbnVtZXJpYy1sb29raW5nIGNlbGxzIGFyZSBjb2VyY2VkIHNlcnZlci1zaWRlIHNvIHRoZSBVSVxuICogICAgIGNhbiBmb3JtYXQgd2l0aCBgdGFidWxhci1udW1zYCB3aXRob3V0IHJlLXBhcnNpbmcpLlxuICogICAtIGByb3dDb3VudGA6IHRvdGFsIHJvdyBjb3VudCB1cHN0cmVhbSAoaW5kZXBlbmRlbnQgb2YgdGhlXG4gKiAgICAgYGxpbWl0YCBjYXApLiBDb21wYXJlIGFnYWluc3QgYHJvd3MubGVuZ3RoYCB0byBkZXRlY3RcbiAqICAgICB0cnVuY2F0aW9uIC0gYHRydW5jYXRlZGAgaXMgdGhlIHByZWNvbXB1dGVkIGZsYWcuXG4gKiAgIC0gYHRydW5jYXRlZGA6IGB0cnVlYCB3aGVuIHRoZSBzZXJ2ZXIgY2xpcHBlZCByb3dzIHRvIGhvbm9yXG4gKiAgICAgdGhlIHJvdXRlJ3Mgcm93IGNhcDsgdGhlIFVJIHNob3VsZCBzdXJmYWNlIGEgXCJzaG93aW5nIE4gb2ZcbiAqICAgICBNIHJvd3NcIiBhZmZvcmRhbmNlIGluIHRoYXQgY2FzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlbWVudERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHJvd3M6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCksXG4gIHRydW5jYXRlZDogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFN0YXRlbWVudERhdGEgPSB6LmluZmVyPHR5cGVvZiBTdGF0ZW1lbnREYXRhU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gd3JpdGVyIHN1cmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRoZSBgVG9vbFN0cmVhbWAtc2hhcGVkIHdyaXRlciB0aGUgTWFzdHJhIEdlbmllIGFnZW50IGFuZCBjaGFydFxuICogaGVscGVycyBwdWJsaXNoIGV2ZW50cyB0aHJvdWdoLiBEZWZpbmVkIGhlcmUgKHZzIGltcG9ydGVkIGZyb21cbiAqIGBAbWFzdHJhL2NvcmVgKSBzbyBoZWxwZXJzIGluIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgIGNhblxuICogYWNjZXB0IGFueSBvYmplY3Qgd2l0aCBhIGAud3JpdGVgIG1ldGhvZCB3aXRob3V0IGRyYWdnaW5nXG4gKiBNYXN0cmEncyBmdWxsIGBUb29sU3RyZWFtYCAoYW5kIGl0cyBhZ2VudCAvIHRvb2wgdHlwaW5ncykgaW50b1xuICogY2FsbCBzaXRlcy4gVGhlIGFjdHVhbCBNYXN0cmEgYGN0eC53cml0ZXJgIGlzIGFzc2lnbmFibGUgdG9cbiAqIHRoaXMgc2hhcGUgc28gY2FsbGVycyBwYXNzIGl0IHN0cmFpZ2h0IHRocm91Z2guXG4gKlxuICogS2VwdCBhcyBhIHBsYWluIFR5cGVTY3JpcHQgaW50ZXJmYWNlICh2cyBhIHpvZCBzY2hlbWEpIGJlY2F1c2VcbiAqIHRoZSBjb250cmFjdCBpcyBhIG1ldGhvZCAtIHpvZCBjYW4gb25seSB2YWxpZGF0ZSB0aGUgc2hhcGUgdmlhXG4gKiBgei5jdXN0b21gLCB3aGljaCBhZGRzIG5vaXNlIHdpdGhvdXQgYnV5aW5nIGFueSBydW50aW1lIGNoZWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYVdyaXRlciB7XG4gIHdyaXRlOiAoY2h1bms6IHVua25vd24pID0+IHVua25vd247XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0gbWFzdHJhLW9ubHkgZ2VuaWUtYWdlbnQgZXZlbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IHRoZSBHZW5pZSB0b29sIGludm9jYXRpb24gc3RhcnRlZC5cbiAqIEVtaXR0ZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgY2FsbGluZyBhZ2VudCBpbnZva2VzIHRoZSBHZW5pZVxuICogdG9vbCwgYmVmb3JlIGFueSBpbm5lciBhZ2VudCAvIHdpcmUgYWN0aXZpdHksIHNvIHRoZSBVSSBjYW5cbiAqIHBvcCBhIFwiVGhpbmtpbmcuLi5cIiBwaWxsIHRoZSBpbnN0YW50IHRoZSBtb2RlbCBkZWNpZGVzIHRvXG4gKiBkZWxlZ2F0ZS4gYGNvbnZlcnNhdGlvbklkYCAvIGBtZXNzYWdlSWRgIGFyZSBhYnNlbnQgb24gdGhpc1xuICogZmlyc3QgZW1pdCAobm8gR2VuaWUgcm91bmQtdHJpcCB5ZXQpLiBGaWVsZCBuYW1lcyBhcmVcbiAqIGNhbWVsQ2FzZSAodnMgdGhlIHNuYWtlX2Nhc2Ugd2lyZSBldmVudHMpIHRvIG1pcnJvciB0aGVcbiAqIEdlbmllIGFnZW50J3Mgb3duIGludGVybmFsIGRhdGEgcGx1bWJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGFydGVkRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInN0YXJ0ZWRcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIC8qKlxuICAgKiBHZW5pZSBjb252ZXJzYXRpb24gaWQsIHBvcHVsYXRlZCBvbmx5IHdoZW4gdGhpcyBgc3RhcnRlZGBcbiAgICogZXZlbnQgY29ycmVzcG9uZHMgdG8gYSBmb2xsb3ctdXAgdHVybiBvbiBhbiBleGlzdGluZ1xuICAgKiBjb252ZXJzYXRpb24uIEFic2VudCBvbiB0aGUgZmlyc3QgdHVybi5cbiAgICovXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBHZW5pZSBtZXNzYWdlIGlkLCBwb3B1bGF0ZWQgb25seSBhZnRlciB0aGUgZmlyc3Qgd2lyZVxuICAgKiBgbWVzc2FnZWAgZXZlbnQgbGFuZHMuIEFic2VudCBvbiB0aGUgaW1tZWRpYXRlLW9uLWludm9rZVxuICAgKiBlbWl0LlxuICAgKi9cbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBRdWVzdGlvbiB0aGUgR2VuaWUgYWdlbnQgc2VudCB0byBHZW5pZS4gKi9cbiAgY29udGVudDogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3RhcnRlZEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgU3RhcnRlZEV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IG9uZSBgYXNrX2dlbmllYCBpbnZvY2F0aW9uXG4gKiBmaW5pc2hlZC4gQ2FycmllcyB0aGUgaHlkcmF0ZWQgYHN0YXRlbWVudElkc2AgKHJvd3MgYXJlIGZldGNoZWRcbiAqIHZpYSBgZ2V0U3RhdGVtZW50YCBzZXBhcmF0ZWx5KSBhbmQgR2VuaWUncyBmaW5hbCBwcm9zZSBhbnN3ZXJcbiAqIHNvIHRoZSBVSSBjYW4gbW92ZSBmcm9tIFwidGhpbmtpbmdcIiB0byBcImFuc3dlcmVkXCIgd2l0aG91dFxuICogd2FpdGluZyBmb3IgdGhlIEdlbmllIGFnZW50J3Mgd2hvbGUgcmVhc29uaW5nIGxvb3AgdG8gZW5kLlxuICovXG5leHBvcnQgY29uc3QgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImFza19nZW5pZV9kb25lXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIEdlbmllJ3MgbmF0dXJhbC1sYW5ndWFnZSBhbnN3ZXIgZm9yIHRoZSB0dXJuLCBpZiBhbnkuICovXG4gIGFuc3dlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogU3RhdGVtZW50IGlkcyBmb3IgYW55IG5vbi1lbXB0eSByZXN1bHQgc2V0cyB0aGlzIHR1cm4gcHJvZHVjZWQuICovXG4gIHN0YXRlbWVudElkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgLyoqXG4gICAqIFRlcm1pbmFsIHdpcmUgc3RhdHVzIChgQ09NUExFVEVEYCAvIGBGQUlMRURgIC8gYENBTkNFTExFRGApLlxuICAgKiBNaXJyb3JzIHRoZSBzb3VyY2UgYHJlc3VsdGAgZXZlbnQncyBzdGF0dXMgc28gc3Vic2NyaWJlcnNcbiAgICogY2FuIHJlYWN0IHRvIGFzay1sZXZlbCBjb21wbGV0aW9uIHdpdGhvdXQgcmUtd2Fsa2luZyBoaXN0b3J5LlxuICAgKiBUcmVhdGVkIGFzIGB6LmN1c3RvbTxNZXNzYWdlU3RhdHVzPmAgYmVjYXVzZSB0aGUgU0RLIGlzIHRoZVxuICAgKiBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBlbnVtIHZhbHVlcy5cbiAgICovXG4gIHN0YXR1czogei5jdXN0b208TWVzc2FnZVN0YXR1cz4oKHYpID0+IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSxcbn0pO1xuZXhwb3J0IHR5cGUgQXNrR2VuaWVEb25lRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBBc2tHZW5pZURvbmVFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgZXJyb3IgZXZlbnQ6IHRlcm1pbmFsIEdlbmllIGFnZW50IC8gdHJhbnNwb3J0XG4gKiBlcnJvci4gR2VuaWUncyBvd24gYEZBSUxFRGAgLyBgQ0FOQ0VMTEVEYCBjb21lIHRocm91Z2ggdGhlXG4gKiB3aXJlJ3MgYHJlc3VsdGAgZXZlbnQgLSB0aGlzIHZhcmlhbnQgaXMgZm9yIGZhaWx1cmVzIHRoZSB3aXJlXG4gKiBjYW4ndCByZXByZXNlbnQgKG5ldHdvcmssIEdlbmllIGFnZW50IGNyYXNoLCBwbGFubmVyIGVycm9yLFxuICogZXRjLikgcGx1cyBhIFVJLWZyaWVuZGx5IG1pcnJvciBvZiBgcmVzdWx0YCB3aGVuIHRoZSBzdGF0dXMgaXNcbiAqIG5vbi1gQ09NUExFVEVEYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFHZW5pZUVycm9yRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogdGhlIGlubmVyIEdlbmllIGFnZW50J3NcbiAqIHN0cnVjdHVyZWQtb3V0cHV0IGNvZXJjaW9uIGhhcyBsYW5kZWQuIEZpcmVzIG9uY2UgcGVyIEdlbmllXG4gKiB0b29sIGludm9jYXRpb24sIEFGVEVSIGBhZ2VudC5nZW5lcmF0ZSguLi4pYCBjb21wbGV0ZXMgKGkuZS5cbiAqIHRoZSBpbm5lciBsb29wICsgTWFzdHJhJ3Mgc3RydWN0dXJpbmcgcGFzcyBoYXZlIGJvdGhcbiAqIGZpbmlzaGVkKSBhbmQgQkVGT1JFIHRoZSB3cmFwcGVyIGh5ZHJhdGVzIGVhY2ggYGRhdGFgIGl0ZW1cbiAqIHdpdGggYSBjaGFydC4gU2lnbmFscyB0byB0aGUgaG9zdCBVSSB0aGF0IHRoZSBhZ2VudCBoYXNcbiAqIHN0b3BwZWQgcmVhc29uaW5nIGFuZCBpcyBtb3ZpbmcgaW50byBjaGFydCBnZW5lcmF0aW9uLlxuICpcbiAqIFRoZSBzdHJ1Y3R1cmluZyBwYXNzIGl0c2VsZiBpcyBvcGFxdWUgKGl0IHJ1bnMgaW5zaWRlXG4gKiBNYXN0cmEncyBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgdG9nZXRoZXIgd2l0aCB0aGUgdG9vbCBsb29wKVxuICogc28gdGhpcyBpcyB0aGUgZWFybGllc3QgaG9vayB3ZSBjYW4gb2ZmZXI7IHdlIGNhbid0IGZpcmUgYVxuICogXCJzdW1tYXJ5IHN0YXJ0ZWRcIiBldmVudCB0aGUgd2F5IHdlIGZpcmUgYHN0YXJ0ZWRgLlxuICovXG5leHBvcnQgY29uc3QgU3VtbWFyeUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdW1tYXJ5XCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKiogVG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhZ2VudCdzIHN0cnVjdHVyZWQgc3VtbWFyeS4gKi9cbiAgaXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqIENvdW50IG9mIGB0ZXh0YCAvIHByb3NlIGl0ZW1zIGluIHRoZSBzdW1tYXJ5LiAqL1xuICB0ZXh0SXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqXG4gICAqIENvdW50IG9mIGBkYXRhYCBpdGVtcyB0aGUgd3JhcHBlciB3aWxsIGh5ZHJhdGUgaW50byBjaGFydHMuXG4gICAqIFRoZSBob3N0IFVJIGNhbiB1c2UgdGhpcyB0byBzZWVkIE4gY2hhcnQgc2tlbGV0b25zIGJlZm9yZVxuICAgKiB0aGUgcGVyLWNoYXJ0IGV2ZW50cyBhcnJpdmUuXG4gICAqL1xuICBkYXRhSXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3VtbWFyeUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgU3VtbWFyeUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBldmVudCB1bmlvbi4gRWFjaCB2YXJpYW50IHVzZXMgdGhlIHNhbWUgZmxhdFxuICogYHt0eXBlLCAuLi5maWVsZHN9YCBzaGFwZSBhcyB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHNvXG4gKiBzdWJzY3JpYmVycyB1bmlvbiBib3RoIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudEV2ZW50U2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgU3RhcnRlZEV2ZW50U2NoZW1hLFxuICBBc2tHZW5pZURvbmVFdmVudFNjaGVtYSxcbiAgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hLFxuICBTdW1tYXJ5RXZlbnRTY2hlbWEsXG5dKTtcbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRFdmVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogVGhlIHVuaWZpZWQgd3JpdGVyLWV2ZW50IHZvY2FidWxhcnkgc3Vic2NyaWJlcnMgc2VlIG9uXG4gKiBgY3R4LndyaXRlcmA6IHRoZSB3aXJlLWRlcml2ZWQge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSB1bmlvblxuICogKipwbHVzKiogTWFzdHJhLW9ubHkgZXZlbnRzIGZyb20ge0BsaW5rIEdlbmllQWdlbnRFdmVudH0uIEVhY2hcbiAqIHZhcmlhbnQgaXMgYSBmbGF0IGB7dHlwZSwgLi4uZmllbGRzfWAgb2JqZWN0OyBjb25zdW1lcnMgbmFycm93XG4gKiBvbiBgdHlwZWAgYW5kIHJlYWQgZmllbGRzIGlubGluZSAtIHRoZXJlIGlzIG5vIHBheWxvYWQgd3JhcHBlclxuICogYW5kIG5vIHdyaXRlci1ib3VuZGFyeSB0cmFuc2xhdG9yLlxuICpcbiAqIENvbXBvc2VkIHZpYSBgei51bmlvbmAgKG5vdCBgei5kaXNjcmltaW5hdGVkVW5pb25gKSBiZWNhdXNlXG4gKiBib3RoIGhhbHZlcyBhcmUgdGhlbXNlbHZlcyBkaXNjcmltaW5hdGVkIHVuaW9ucyBvbiB0aGUgc2FtZVxuICogYHR5cGVgIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllV3JpdGVyRXZlbnRTY2hlbWEgPSB6LnVuaW9uKFtcbiAgZ2VuaWVNb2RlbC5HZW5pZUNoYXRFdmVudFNjaGVtYSxcbiAgR2VuaWVBZ2VudEV2ZW50U2NoZW1hLFxuXSk7XG5leHBvcnQgdHlwZSBHZW5pZVdyaXRlckV2ZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVXcml0ZXJFdmVudFNjaGVtYT47XG5cbi8qKiBEaXNjcmltaW5hdG9yIHR5cGUgZm9yIHtAbGluayBHZW5pZVdyaXRlckV2ZW50fS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllV3JpdGVyRXZlbnRUeXBlID0gR2VuaWVXcml0ZXJFdmVudFtcInR5cGVcIl07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VtbWFyeSArIGRhdGFzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGFidWxhciBwYXlsb2FkIGVtYmVkZGVkIGluIGV2ZXJ5IHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfVxuICogYHZpc3VhbGl6ZWAgZGF0YXNldC4gQWx3YXlzIHByZXNlbnQ6IGh5ZHJhdGVkIGJ5IHRoZSB3b3JrZmxvdydzXG4gKiBhZ2VudCBzdGVwIGJlZm9yZSB0aGUgZmluYWxpemUgc3RlcCBydW5zLCBzbyBjb25zdW1lcnMgY2FuIHJlbmRlclxuICogYSB0YWJsZSBmYWxsYmFjayByZWdhcmRsZXNzIG9mIGNoYXJ0LXBsYW5uZXIgb3V0Y29tZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGNvbHVtbnNgOiBjb2x1bW4gbmFtZXMgaW4gZGlzcGxheSBvcmRlci5cbiAqICAgLSBgcm93c2A6IHRhYnVsYXIgcm93cyBrZXllZCBieSBjb2x1bW4gbmFtZS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgR2VuaWUgcmVwb3J0ZWQgKG1heSBleGNlZWRcbiAqICAgICBgcm93cy5sZW5ndGhgIHdoZW4gdGhlIHN0YXRlbWVudCB3YXMgdHJ1bmNhdGVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHJvd3M6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldERhdGEgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXREYXRhU2NoZW1hPjtcblxuLyoqXG4gKiBTbGltIGNoYXJ0IHJlZmVyZW5jZSBhdHRhY2hlZCB0byBhIHZpc3VhbGl6ZSBkYXRhc2V0LiBPbmx5XG4gKiBwcmVzZW50IHdoZW4gcGxhbm5pbmcgc3VjY2VlZGVkLlxuICpcbiAqIGBvcHRpb25gIGlzIGludGVudGlvbmFsbHkgTk9UIGluY2x1ZGVkLiBUaGUgcmVzb2x2ZWQgRWNoYXJ0c1xuICogc3BlYyBsaXZlcyBvZmYtYmFuZCBpbiB0aGUgY2hhcnQgY2FjaGU6IHRoZSBob3N0IFVJIGZldGNoZXMgaXRcbiAqIGJ5IGBjaGFydElkYCBmcm9tIHRoZSBwbHVnaW4ncyBlbWJlZCByb3V0ZSAoZGVyaXZlZCBmcm9tXG4gKiBgYmFzZVBhdGhgICsge0BsaW5rIE1BU1RSQV9ST1VURVN9LmVtYmVkLCBpLmUuIGAvZW1iZWQvY2hhcnQvOmlkYDtcbiAqIHNlZSB7QGxpbmsgQ2hhcnR9KS4gRW1iZWRkaW5nIHRoZSBmdWxsIHNwZWMgaW5saW5lIHdvdWxkXG4gKiBpbmZsYXRlIGV2ZXJ5IGRhdGFzZXQgYnkgc2V2ZXJhbCBLQiBwZXIgY2hhcnQgYW5kIHJvdW5kLXRyaXBcbiAqIHRocm91Z2ggdGhlIExMTSBjb250ZXh0IGZvciB6ZXJvIGJlbmVmaXQgKHRoZSBtb2RlbCBvbmx5IG5lZWRzXG4gKiB0aGUgYGNoYXJ0SWRgIHRvIHBsYWNlIGEgYFtjaGFydDo8Y2hhcnRJZD5dYCBtYXJrZXIgaW4gaXRzXG4gKiByZXBseSkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXRDaGFydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRJZDogei5zdHJpbmcoKSxcbiAgY2hhcnRUeXBlOiBDaGFydFR5cGVTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWE+O1xuXG4vKipcbiAqIERhdGFzZXQgYnVuZGxlIGF0dGFjaGVkIHRvIGEge0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19IGB2aXN1YWxpemVgXG4gKiBpdGVtLiBgZGF0YWAgaXMgYWx3YXlzIHBvcHVsYXRlZDsgYGNoYXJ0YCBpcyBiZXN0LWVmZm9ydCBhbmRcbiAqIGFic2VudCB3aGVuIHRoZSB3b3JrZmxvdydzIGNoYXJ0LXBsYW5uZXIgZmFpbGVkICh0aW1lb3V0LFxuICogbWFsZm9ybWVkIHBsYW4sIGFib3J0KSBzbyB0aGUgaG9zdCBVSSBjYW4gc3RpbGwgcmVuZGVyIHRoZVxuICogdW5kZXJseWluZyB0YWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGF0YTogR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSxcbiAgY2hhcnQ6IEdlbmllRGF0YXNldENoYXJ0U2NoZW1hLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldCA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldFNjaGVtYT47XG5cbi8qKlxuICogT25lIGl0ZW0gaW5zaWRlIHRoZSBHZW5pZSB3b3JrZmxvdydzIGZpbmFsIHN1bW1hcnkuIFRoZVxuICogd29ya2Zsb3cgcHJvZHVjZXMgYSBtaXhlZCBzZXF1ZW5jZSBvZjpcbiAqXG4gKiAgIC0gYHN0cmluZ2A6IGEgbWFya2Rvd24gcGFyYWdyYXBoIChpbnRlcnByZXRhdGlvbiwgY2FsbG91dHMsXG4gKiAgICAgdHJhbnNpdGlvbnMgYmV0d2VlbiBkYXRhIGJsb2NrcykuXG4gKiAgIC0gYHZpc3VhbGl6ZWA6IGEgcmVxdWVzdCBmcm9tIHRoZSBhZ2VudCBzdGVwIHRvIHZpc3VhbGl6ZSBhXG4gKiAgICAgc3BlY2lmaWMgR2VuaWUgc3RhdGVtZW50IGF0IHRoaXMgcG9zaXRpb24gaW4gdGhlIHByb3NlLlxuICogICAgIFRoZSBmaW5hbGl6ZSBzdGVwIGh5ZHJhdGVzIGBkYXRhc2V0LmRhdGFgIChyb3dzIGZyb20gdGhlXG4gKiAgICAgbWF0Y2hpbmcgYHN0YXRlbWVudElkYCkgYW5kIGF0dGFjaGVzIGBkYXRhc2V0LmNoYXJ0YCBhZnRlclxuICogICAgIHJ1bm5pbmcgdGhlIGNoYXJ0LXBsYW5uZXIuIFRoZSBhZ2VudCBORVZFUiBwaWNrcyB0aGUgY2hhcnRcbiAqICAgICB0eXBlIC0gaXQgb25seSBtYXJrcyB3aGVyZSBhIHZpc3VhbGl6YXRpb24gYmVsb25ncy5cbiAqXG4gKiBUaGUgaG9zdCBVSSB3YWxrcyB0aGUgYXJyYXkgaW4gZGlzcGxheSBvcmRlciB0byBjb21wb3NlIHRoZVxuICogZmluYWwgYXNzaXN0YW50IG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1wiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInZpc3VhbGl6ZVwiKSxcbiAgICBzdGF0ZW1lbnRJZDogei5zdHJpbmcoKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGF0YXNldDogR2VuaWVEYXRhc2V0U2NoZW1hLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbSA9IHouaW5mZXI8dHlwZW9mIEdlbmllU3VtbWFyeUl0ZW1TY2hlbWE+O1xuXG4vKiogRGlzY3JpbWluYXRvciB0eXBlIGZvciB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX0uICovXG5leHBvcnQgdHlwZSBHZW5pZVN1bW1hcnlJdGVtVHlwZSA9IEdlbmllU3VtbWFyeUl0ZW1bXCJ0eXBlXCJdO1xuXG4vKipcbiAqIFRoZSBHZW5pZSBhZ2VudCdzIGZpbmFsIG91dHB1dCBzaGFwZSAtIHdoYXQgdGhlIGNhbGxpbmcgYWdlbnQnc1xuICogR2VuaWUgdG9vbCByZXR1cm5zIHRvIHRoZSBjYWxsaW5nIExMTS4gVGhlIGBzdW1tYXJ5YCBhcnJheSBpc1xuICogdGhlIHVzZXItZmFjaW5nIHJlbmRlcmFibGU7IGBjb252ZXJzYXRpb25JZGAgbGV0cyB0aGUgY2FsbGluZ1xuICogYWdlbnQgKG9yIHRoZSBVSSkgZm9sbG93IHVwIGluIHRoZSBzYW1lIEdlbmllIHRocmVhZCBvbiB0aGVcbiAqIG5leHQgdHVybi5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN1bW1hcnk6IHouYXJyYXkoR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50UmVzdWx0U2NoZW1hPjtcbiJdfQ==
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFHSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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Q0FDSCxDQUFDLENBQUM7QUFNSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ25CLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgY29udHJhY3QgZm9yIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgOiB0aGVcbiAqIGRlcGVuZGVuY3ktZnJlZSB6b2Qgc2NoZW1hcyArIGluZmVycmVkIHR5cGVzIGV2ZXJ5IGNvbnN1bWVyICh0aGVcbiAqIFJlYWN0IGNsaWVudCwgYnJvd3NlciBidW5kbGVzLCB0aGUgc2VydmVyIHBsdWdpbikgc2hhcmVzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBgcGdgLCBgZmFzdGVtYmVkYCwgYW5kIHRoZSBNYXN0cmEgcnVudGltZSBzbyB0aGVcbiAqIGNsaWVudCBjYW4gaW1wb3J0IHRoZXNlIHNjaGVtYXMgd2l0aG91dCBkcmFnZ2luZyBpbiBzZXJ2ZXItb25seVxuICogZGVwZW5kZW5jaWVzLiBUaHJlZSBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gVGhlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IGBNYXN0cmFQbHVnaW4uY2xpZW50Q29uZmlnKClgXG4gKiAgICAgIHBsdXMgdGhlIFJFU1QgcGF5bG9hZHMgaXRzIHJvdXRlcyByZXR1cm4gKG1vZGVscywgaGlzdG9yeSxcbiAqICAgICAgc3VnZ2VzdGlvbnMsIGNoYXJ0IGVtYmVkcywgc3RhdGVtZW50IGRhdGEpLiBUaGUgc2VydmVyXG4gKiAgICAgIGRlcml2ZXMgZXZlcnkgcGF0aCBmcm9tIHRoZSBwbHVnaW4gbW91bnQgYW5kIHB1Ymxpc2hlcyB0aGVcbiAqICAgICAgcmVzb2x2ZWQgcGF0aHMgc28gdGhlIGNsaWVudCBjb21wb3NlcyBVUkxzIHdpdGhvdXRcbiAqICAgICAgaGFyZC1jb2RpbmcgYC9hcGkvbWFzdHJhYCAtIHJlbmFtZSB0aGUgcGx1Z2luIGFuZCB0aGUgY2xpZW50XG4gKiAgICAgIGtlZXBzIHdvcmtpbmcuXG4gKiAgIDIuIFRoZSBgY3R4LndyaXRlcmAgZXZlbnQgdm9jYWJ1bGFyeTogdGhlIHdpcmUtZGVyaXZlZFxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9cyBmcm9tIGBAZGJ4LXRvb2xzL2dlbmllLXNoYXJlZGAgcGx1c1xuICogICAgICB0aGUgTWFzdHJhLW9ubHkgYWdlbnQgbGlmZWN5Y2xlIGV2ZW50cywgdW5pZmllZCBhc1xuICogICAgICB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0gc28gc3Vic2NyaWJlcnMgbmFycm93IGJvdGggaGFsdmVzXG4gKiAgICAgIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICogICAzLiBUaGUgR2VuaWUgYWdlbnQncyB3b3JrZmxvdyBvdXRwdXQgc2hhcGVzXG4gKiAgICAgICh7QGxpbmsgR2VuaWVBZ2VudFJlc3VsdH0gYW5kIGl0cyBzdW1tYXJ5IC8gZGF0YXNldCBpdGVtcykuXG4gKlxuICogVGhlIHJvdXRlIHNlZ21lbnRzIGxpdmUgaW4gdGhlIHNpYmxpbmcgYHJvdXRlcy50c2BcbiAqICh7QGxpbmsgTUFTVFJBX1JPVVRFU30pIGFuZCB0aGUgZW1iZWQtbWFya2VyIGdyYW1tYXIgaW4gYG1hcmtlci50c2AsXG4gKiBzbyB0aGlzIGZpbGUgc3RheXMgcHVyZWx5IGRlY2xhcmF0aXZlIChzY2hlbWFzICsgaW5mZXJyZWQgdHlwZXMpLlxuICogVGhlIGJyb3dzZXIgY2xpZW50IHRoYXQgZHJpdmVzIHRoZXNlIHJvdXRlcyAoYE1hc3RyYVBsdWdpbkNsaWVudGApXG4gKiBzaGlwcyBmcm9tIGBAZGJ4LXRvb2xzL3VpLW1hc3RyYWAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdlbmllTW9kZWwsIHR5cGUgR2VuaWVDaGF0RXZlbnQsIHR5cGUgTWVzc2FnZVN0YXR1cyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xpZW50IGNvbmZpZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTi1zYWZlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IHRoZSBNYXN0cmEgcGx1Z2luJ3NcbiAqIGBjbGllbnRDb25maWcoKWAuXG4gKlxuICogT25seSB0aGUgaXJyZWR1Y2libGUgZGF0YSBsaXZlcyBoZXJlOiBgYmFzZVBhdGhgICh0aGUgb25lIHBhdGggdGhlXG4gKiBjbGllbnQgY2FuJ3Qgb3RoZXJ3aXNlIGtub3csIHNpbmNlIGl0IGVuY29kZXMgdGhlIHBsdWdpbidzIG1vdW50XG4gKiBuYW1lKSBwbHVzIHRoZSBydW50aW1lIGFnZW50IHJvc3Rlci4gRXZlcnkgY29uY3JldGUgZW5kcG9pbnQgVVJMIGlzXG4gKiBkZXJpdmVkIGZyb20gYGJhc2VQYXRoYCBieSB0aGUgYnJvd3NlciBjbGllbnRcbiAqIChgTWFzdHJhUGx1Z2luQ2xpZW50YCkgdXNpbmcgdGhlIHNoYXJlZCB7QGxpbmsgTUFTVFJBX1JPVVRFU31cbiAqIHNlZ21lbnRzLCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gcHVibGlzaCBwZXItcm91dGUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBiYXNlUGF0aGA6IHBsdWdpbiBtb3VudCBwYXRoLiBBbHdheXMgYC9hcGkvPHBsdWdpbk5hbWU+YC4gRmVlZFxuICogICAgIGl0IHRvIGBuZXcgTWFzdHJhUGx1Z2luQ2xpZW50KGNvbmZpZylgIChmcm9tXG4gKiAgICAgYEBkYngtdG9vbHMvdWktbWFzdHJhYCkgdG8gZ2V0IGEgdHlwZWQgY2xpZW50IG92ZXIgZXZlcnlcbiAqICAgICByb3V0ZSBwbHVzIHRoZSBzdGFuZGFyZCBhZ2VudCBzdHJlYW0uXG4gKiAgIC0gYGRlZmF1bHRBZ2VudGA6IGFnZW50IGlkIHRoZSBjbGllbnQgY29udmVyc2VzIHdpdGggd2hlbiBpdFxuICogICAgIGRvZXNuJ3QgbmFtZSBvbmUuXG4gKiAgIC0gYGFnZW50c2A6IGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgaWQgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICogICAtIGBmZWVkYmFja0VuYWJsZWRgOiB3aGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIGxvZyB1c2VyIGZlZWRiYWNrIHRvXG4gKiAgICAgTUxmbG93IChNTGZsb3cgdHJhY2luZyBpcyBjb25maWd1cmVkKS4gRHJpdmVzIHdoZXRoZXIgdGhlIGNoYXQgVUlcbiAqICAgICBzdXJmYWNlcyB0aHVtYnMgLyBjb21tZW50IGNvbnRyb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgIHNvIGFcbiAqICAgICBjb25maWcgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHNlcnZlciAod2l0aG91dCB0aGUgZmllbGQpIHBhcnNlc1xuICogICAgIGNsZWFubHkgdG8gXCJvZmZcIi5cbiAqICAgLSBgY2hhdEFsd2F5c0F2YWlsYWJsZWA6IHdoZXRoZXIgdGhlIGFnZW50cycgRGF0YWJyaWNrcyBjYWxscyBydW4gYXMgdGhlXG4gKiAgICAgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIHJhdGhlciB0aGFuIG9uLWJlaGFsZi1vZiB0aGUgc2lnbmVkLWluIHVzZXIuIFdoZW5cbiAqICAgICBgdHJ1ZWAgdGhlIGNoYXQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIHNvIGEgVUkgdGhhdFxuICogICAgIGhpZGVzIGNoYXQgd2hlbiB0aGUgT0JPIHRva2VuIGlzIGFic2VudCBzaG91bGQgc2hvdyBpdCBhbnl3YXkuIERlZmF1bHRzXG4gKiAgICAgdG8gYGZhbHNlYCAodGhlIE9CTyAvIGBcInVzZXJcImAgaWRlbnRpdHkgbW9kZSksIHNvIGFuIG9sZGVyIHNlcnZlciB3aXRob3V0XG4gKiAgICAgdGhlIGZpZWxkIGtlZXBzIHRoZSBPQk8tZ2F0ZWQgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGJhc2VQYXRoOiB6LnN0cmluZygpLFxuICBkZWZhdWx0QWdlbnQ6IHouc3RyaW5nKCksXG4gIGFnZW50czogei5hcnJheSh6LnN0cmluZygpKSxcbiAgZmVlZGJhY2tFbmFibGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2hhdEFsd2F5c0F2YWlsYWJsZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUNsaWVudENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZGVmYXVsdC1tb2RlbFs/YWdlbnRJZD1dYC4gVGhlXG4gKiBzdGF0aWMgZGVmYXVsdCBtb2RlbCB0aGUgYWdlbnQgcmVzb2x2ZXMgdG8gd2hlbiB0aGUgY2xpZW50IHBpbnMgbm8gbW9kZWwsXG4gKiBhcyBib3RoIHRoZSByYXcgc2VydmluZy1lbmRwb2ludCBgbW9kZWxgIGlkIGFuZCBhIGBkaXNwbGF5TmFtZWAgKHRoZVxuICogaHVtYW5pemVkIGxhYmVsIHRoZSBwaWNrZXIgc2hvd3MpLiBCb3RoIGFyZSBgbnVsbGAgd2hlbiB0aGUgYWdlbnQgZGVjaWRlc1xuICogaXRzIG1vZGVsIGR5bmFtaWNhbGx5IGF0IGNhbGwgdGltZSAobm90aGluZyBzdGF0aWMgdG8gYWR2ZXJ0aXNlKS4gTGV0cyB0aGVcbiAqIHBpY2tlciBsYWJlbCBpdHMgZGVmYXVsdCBvcHRpb24gV0lUSE9VVCB3YWl0aW5nIG9uIHRoZSBgL21vZGVsc2AgY2F0YWxvZ3VlLFxuICogc28gaXQgbmV2ZXIgZmxhc2hlcyBhIHJhdyBpZCBvbiBsb2FkLiBLZXB0IG9mZiB0aGUgc3RhdGljIGJvb3RzdHJhcFxuICogYGNsaWVudENvbmZpZ2Agb24gcHVycG9zZTogaXQgaXMgcGVyLWFnZW50IGFuZCBjYW4gYmUgZHluYW1pYywgc28gaXQgaXNcbiAqIGZldGNoZWQgbGlrZSBgL21vZGVsc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgZGlzcGxheU5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgRGVmYXVsdE1vZGVsUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbW9kZWwgY2F0YWxvZ3VlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9tb2RlbHNgLiBXcmFwcyB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgbW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYX0gKHJlLWV4cG9ydGVkIGZyb21cbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGApIHNvIHRoZSBjYXRhbG9ndWVcbiAqIGRlc2NyaXB0b3IgaGFzIGEgc2luZ2xlIGRlZmluaXRpb24gdGhlIGNsaWVudCwgc2VydmVyLCBhbmQgdGhlXG4gKiBzdGFuZGFsb25lIGBAZGJ4LXRvb2xzL21vZGVsYCB0b29sa2l0IGFsbCBhZ3JlZSBvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5kcG9pbnRzOiB6LmFycmF5KG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjaGF0IGhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIHNoYXBlIGZvciBhbiBBSSBTREsgVjUgYFVJTWVzc2FnZWAuIERlZmluZWQgbG9jYWxseVxuICogc28gdGhlIHNoYXJlZCB0eXBlcyBwYWNrYWdlIHN0YXlzIGRlcGVuZGVuY3ktZnJlZSAobm8gYGFpYFxuICogaW1wb3J0KS4gVGhlIHJ1bnRpbWUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBgL3JvdXRlL2hpc3RvcnlgIGVuZHBvaW50XG4gKiBhcmUgcHJvZHVjZWQgYnkgYHRvQUlTZGtWNU1lc3NhZ2VzYCBhbmQgYXJlIDE6MSBjb21wYXRpYmxlIHdpdGhcbiAqIGBVSU1lc3NhZ2VgIGZyb20gdGhlIGBhaWAgcGFja2FnZTsgY2xpZW50cyBjYW4gc2FmZWx5IGNhc3Qgd2hlblxuICogbmVlZGVkLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJvbGU6IHouZW51bShbXCJzeXN0ZW1cIiwgXCJ1c2VyXCIsIFwiYXNzaXN0YW50XCJdKSxcbiAgcGFydHM6IHouYXJyYXkoei51bmtub3duKCkpLnJlYWRvbmx5KCksXG4gIG1ldGFkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vcm91dGUvaGlzdG9yeWAuXG4gKlxuICogRmllbGRzOlxuICogICAtIGB1aU1lc3NhZ2VzYDogcGFnZSBvZiBVSS1mb3JtYXR0ZWQgbWVzc2FnZXMsIG9sZGVzdCAtPiBuZXdlc3QuXG4gKiAgICAgQWx3YXlzIGNocm9ub2xvZ2ljYWwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBwYWdpbmF0aW9uXG4gKiAgICAgb3JkZXIgc28gdGhlIGNsaWVudCBjYW4gcHJlcGVuZCB0aGUgYXJyYXkgdG8gdGhlIGxpdmVcbiAqICAgICB0cmFuc2NyaXB0IHdpdGhvdXQgc29ydGluZy5cbiAqICAgLSBgcGFnZWA6IHplcm8taW5kZXhlZCBwYWdlIHRoYXQgcHJvZHVjZWQgdGhpcyByZXNwb25zZS5cbiAqICAgLSBgcGVyUGFnZWA6IG51bWJlciBvZiBpdGVtcyByZXF1ZXN0ZWQgcGVyIHBhZ2UuXG4gKiAgIC0gYHRvdGFsYDogdG90YWwgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSB0aHJlYWQuXG4gKiAgIC0gYGhhc01vcmVgOiB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIG9sZGVyIHBhZ2UgaXMgc3RpbGxcbiAqICAgICBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFIaXN0b3J5UmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVpTWVzc2FnZXM6IHouYXJyYXkoTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYSksXG4gIHBhZ2U6IHoubnVtYmVyKCksXG4gIHBlclBhZ2U6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLFxuICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhSGlzdG9yeVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhSGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS9yb3V0ZS9oaXN0b3J5YC4gRGVsZXRlc1xuICogZXZlcnkgcGVyc2lzdGVkIG1lc3NhZ2UgKyB3b3JrZmxvdyBzbmFwc2hvdCB0aWVkIHRvIHRoZSBjYWxsZXInc1xuICogdGhyZWFkLCBzbyB0aGUgbmV4dCBjaGF0IHR1cm4gc3RhcnRzIGZyb20gYSBjbGVhbiBzbGF0ZS4gVGhlXG4gKiBzZXNzaW9uIGNvb2tpZSB0aGF0IGFuY2hvcnMgdGhlIHRocmVhZCBpZCBpcyBwcmVzZXJ2ZWQgc28gdGhlXG4gKiBjYWxsZXIgZG9lc24ndCBsb3NlIGl0cyBpZGVudGl0eSAtIG9ubHkgdGhlIGNvbnRlbnRzIGdvIGF3YXkuXG4gKlxuICogYG9rYCBpcyBhbHdheXMgYHRydWVgIG9uIHN1Y2Nlc3M7IHRoZSByZXNwb25zZSBvYmplY3QgaXMga2VwdFxuICogYXMgYSBzdHJ1Y3QgKHZzIGEgYmFyZSAyMDQpIHNvIGZ1dHVyZSBmaWVsZHMgKGUuZy4gYGRlbGV0ZWRBdGAsXG4gKiBgbWVzc2FnZXNgKSBjYW4gYmUgYWRkZWQgd2l0aG91dCBidW1waW5nIHRoZSBjb250cmFjdC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIGhpc3Rvcnkgd2FzIGNsZWFyZWQuXG4gKiAgIC0gYHRocmVhZElkYDogdGhyZWFkIGlkIHRoYXQgd2FzIHdpcGVkLlxuICogICAtIGBjbGVhcmVkYDogbnVtYmVyIG9mIG1lc3NhZ2VzIHRoZSB0aHJlYWQgaGVsZCBiZWZvcmVcbiAqICAgICBkZWxldGlvbi4gVXNlZnVsIGZvciBjbGllbnQtc2lkZSBcImNsZWFyZWQgMTIgbWVzc2FnZXNcIlxuICogICAgIHRvYXN0czsgYDBgIGlzIHJlcG9ydGVkIHdoZW4gdGhlIHRocmVhZCB3YXMgYWxyZWFkeSBlbXB0eVxuICogICAgIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBjbGVhcmVkOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFDbGVhckhpc3RvcnlSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhyZWFkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEEgc2luZ2xlIGNvbnZlcnNhdGlvbiB0aHJlYWQgdGhlIHJlc291cmNlIChhdXRoZW50aWNhdGVkIHVzZXIpIG93bnMsXG4gKiBhcyByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L3RocmVhZHNgLiBNaXJyb3JzIE1hc3RyYSdzXG4gKiBgU3RvcmFnZVRocmVhZFR5cGVgIGJ1dCB3aXRoIEpTT04tc2FmZSBJU08tODYwMSB0aW1lc3RhbXBzICh0aGUgd2lyZVxuICogY2FuJ3QgY2FycnkgYERhdGVgKS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGlkYDogdGhyZWFkIGlkLiBQYXNzIGl0IGJhY2sgYXMgdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyXG4gKiAgICAgKGBUSFJFQURfSURfSEVBREVSYCkgb24gYSBzdHJlYW0gLyBoaXN0b3J5IC8gZGVsZXRlIGNhbGwgdG8gYWN0XG4gKiAgICAgb24gdGhpcyBjb252ZXJzYXRpb24uXG4gKiAgIC0gYHRpdGxlYDogaHVtYW4tcmVhZGFibGUgdGl0bGUuIFByZXNlbnQgb25jZSB0aGUgYWdlbnQncyBtZW1vcnlcbiAqICAgICBoYXMgYXV0by1nZW5lcmF0ZWQgb25lIChhZnRlciB0aGUgZmlyc3QgdHVybik7IGFic2VudCBvbiBhXG4gKiAgICAgYnJhbmQtbmV3IHRocmVhZCwgc28gdGhlIFVJIGZhbGxzIGJhY2sgdG8gYSBwbGFjZWhvbGRlci5cbiAqICAgLSBgcmVzb3VyY2VJZGA6IG93bmluZyByZXNvdXJjZSAodGhlIHVzZXIgaWQpLiBBbHdheXMgdGhlIGNhbGxlcidzXG4gKiAgICAgb3duIHJlc291cmNlIC0gdGhlIGxpc3Qgcm91dGUgZmlsdGVycyBieSBpdCBzZXJ2ZXItc2lkZS5cbiAqICAgLSBgY3JlYXRlZEF0YCAvIGB1cGRhdGVkQXRgOiBJU08tODYwMSB0aW1lc3RhbXBzLiBgdXBkYXRlZEF0YCBpc1xuICogICAgIHRoZSBuYXR1cmFsIHNvcnQga2V5IGZvciBcIm1vc3QgcmVjZW50IGNvbnZlcnNhdGlvbnMgZmlyc3RcIi5cbiAqICAgLSBgbWV0YWRhdGFgOiBvcGFxdWUgdGhyZWFkIG1ldGFkYXRhLCBwYXNzZWQgdGhyb3VnaCB1bnRvdWNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFUaHJlYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXNvdXJjZUlkOiB6LnN0cmluZygpLFxuICBjcmVhdGVkQXQ6IHouc3RyaW5nKCksXG4gIHVwZGF0ZWRBdDogei5zdHJpbmcoKSxcbiAgbWV0YWRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVRocmVhZCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVRocmVhZFNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vdGhyZWFkc2AuIE9uZSBwYWdlIG9mIHRoZVxuICogY2FsbGVyJ3MgY29udmVyc2F0aW9uIHRocmVhZHMsIG5ld2VzdCAoYHVwZGF0ZWRBdGAgREVTQykgZmlyc3QuXG4gKlxuICogRmllbGRzOlxuICogICAtIGB0aHJlYWRzYDogcGFnZSBvZiB0aHJlYWRzIGZvciB0aGUgY2FsbGVyJ3MgcmVzb3VyY2UuXG4gKiAgIC0gYHBhZ2VgOiB6ZXJvLWluZGV4ZWQgcGFnZSB0aGF0IHByb2R1Y2VkIHRoaXMgcmVzcG9uc2UuXG4gKiAgIC0gYHBlclBhZ2VgOiBudW1iZXIgb2YgaXRlbXMgcmVxdWVzdGVkIHBlciBwYWdlLlxuICogICAtIGB0b3RhbGA6IHRvdGFsIG51bWJlciBvZiB0aHJlYWRzIHRoZSByZXNvdXJjZSBvd25zLlxuICogICAtIGBoYXNNb3JlYDogdHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSBtb3JlIHBhZ2UgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICB0aHJlYWRzOiB6LmFycmF5KE1hc3RyYVRocmVhZFNjaGVtYSksXG4gIHBhZ2U6IHoubnVtYmVyKCksXG4gIHBlclBhZ2U6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLFxuICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS90aHJlYWRzYCAodGhyZWFkIGlkXG4gKiBzdXBwbGllZCB2aWEgdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC8gYHRocmVhZElkYCBxdWVyeSkuIFdpcGVzXG4gKiB0aGUgbmFtZWQgdGhyZWFkIGFuZCBldmVyeSBtZXNzYWdlIG9uIGl0LlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgdGhyZWFkIHdhcyBkZWxldGVkLlxuICogICAtIGB0aHJlYWRJZGA6IHRocmVhZCBpZCB0aGF0IHdhcyByZW1vdmVkLlxuICogICAtIGBkZWxldGVkYDogYHRydWVgIHdoZW4gYSB0aHJlYWQgcm93IGV4aXN0ZWQgYW5kIHdhcyByZW1vdmVkLFxuICogICAgIGBmYWxzZWAgd2hlbiBpdCB3YXMgYWxyZWFkeSBnb25lIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBkZWxldGVkOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFEZWxldGVUaHJlYWRSZXNwb25zZVNjaGVtYT47XG5cbi8qKiBMb25nZXN0IHRocmVhZCB0aXRsZSB0aGUgcmVuYW1lIHJvdXRlIGFjY2VwdHMgKHRyaW1tZWQgc2VydmVyLXNpZGUpLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9USFJFQURfVElUTEVfTUFYID0gMjAwO1xuXG4vKipcbiAqIEpTT04gYm9keSBmb3IgYFBBVENIICR7YmFzZVBhdGh9L3RocmVhZHNgICh0aHJlYWQgaWQgc3VwcGxpZWQgdmlhIHRoZVxuICogdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXIgLyBgdGhyZWFkSWRgIHF1ZXJ5KS4gUmVuYW1lcyBhIHNpbmdsZVxuICogY29udmVyc2F0aW9uLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgdGl0bGVgOiB0aGUgbmV3IGh1bWFuLXJlYWRhYmxlIHRpdGxlLiBUcmltbWVkIGFuZCBjYXBwZWQgYXRcbiAqICAgICB7QGxpbmsgTUFTVFJBX1RIUkVBRF9USVRMRV9NQVh9IGNoYXJhY3RlcnMgc2VydmVyLXNpZGU7IG11c3QgYmVcbiAqICAgICBub24tZW1wdHkgYWZ0ZXIgdHJpbW1pbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFVcGRhdGVUaHJlYWRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICB0aXRsZTogei5zdHJpbmcoKS50cmltKCkubWluKDEpLm1heChNQVNUUkFfVEhSRUFEX1RJVExFX01BWCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFVcGRhdGVUaHJlYWRSZXF1ZXN0U2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYFBBVENIICR7YmFzZVBhdGh9L3RocmVhZHNgLiBFY2hvZXMgdGhlXG4gKiByZW5hbWVkIHRocmVhZCBpbiBpdHMgcG9zdC11cGRhdGUgd2lyZSBzaGFwZSBzbyB0aGUgY2xpZW50IGNhbiByZWZsZWN0XG4gKiB0aGUgbmV3IHRpdGxlIHdpdGhvdXQgYSByZS1mZXRjaC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIHRocmVhZCB3YXMgcmVuYW1lZC5cbiAqICAgLSBgdGhyZWFkYDogdGhlIHVwZGF0ZWQgdGhyZWFkIChjYXJyaWVzIHRoZSBuZXcgYHRpdGxlYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFVcGRhdGVUaHJlYWRSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgdGhyZWFkOiBNYXN0cmFUaHJlYWRTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVXBkYXRlVGhyZWFkUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VnZ2VzdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vc3VnZ2VzdGlvbnNgLlxuICpcbiAqIENhcnJpZXMgdGhlIGN1cmF0ZWQgc3RhcnRlciBxdWVzdGlvbnMgZm9yIGFuIGFnZW50J3MgR2VuaWUgc3BhY2UgLVxuICogdGhlIGBzYW1wbGVfcXVlc3Rpb25zYCBhbiBhdXRob3IgY29uZmlndXJlZCBvbiB0aGUgc3BhY2UsIHN1cmZhY2VkXG4gKiBhcyBvbmUtdGFwIHByb21wdHMgb24gdGhlIGNoYXQncyBlbXB0eSBzdGF0ZS4gYHF1ZXN0aW9uc2AgaXMgZW1wdHlcbiAqIHdoZW4gdGhlIGFnZW50IGhhcyBubyBHZW5pZSBzcGFjZSAob3IgdGhlIHNwYWNlIGRlZmluZXMgbm9uZSksIHNvXG4gKiB0aGUgY2xpZW50IHJlbmRlcnMgbm90aGluZyBpbiB0aGF0IGNhc2UgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvXG4gKiBidWlsdC1pbiBleGFtcGxlIHByb21wdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBxdWVzdGlvbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXJ0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBBbGxvd2VkIGNoYXJ0IHR5cGVzIHRoZSBwbGFubmVyIGNhbiBwaWNrLiBEZWZpbmVkIGFzIGFcbiAqIGRpc2NyaW1pbmF0ZWQgbGl0ZXJhbCB1bmlvbiBzbyBlYWNoIHZhcmlhbnQgY2FycmllcyBpdHMgb3duXG4gKiBgLmRlc2NyaWJlKClgIGNsYXVzZSAtIHRoZSBzZXJ2ZXItc2lkZSBwbGFubmVyJ3MgcHJvbXB0XG4gKiBmb3JtYXR0ZXIgd2Fsa3MgYC5vcHRpb25zYCB0byBpbmxpbmUgdGhlIGRlc2NyaXB0aW9ucyBpbnRvIHRoZVxuICogbW9kZWwgaW5zdHJ1Y3Rpb25zLCBrZWVwaW5nIHRoZSBwcm9tcHQgaW4gbG9jay1zdGVwIHdpdGggdGhlXG4gKiBzY2hlbWEgYnkgY29uc3RydWN0aW9uLiBUaGUgcnVudGltZSB0eXBlIGlzIHRoZSBwbGFpbiBzdHJpbmdcbiAqIHVuaW9uIChgXCJiYXJcIiB8IFwibGluZVwiIHwgLi4uYCksIHNvIGNvbnN1bWVycyB0aGF0IGp1c3QgbmVlZCBhXG4gKiBkaXNjcmltaW5hdG9yIHZhbHVlIGJlaGF2ZSB0aGUgc2FtZSBhcyBpZiBpdCB3ZXJlIGFcbiAqIGB6LmVudW0oWy4uLl0pYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0VHlwZVNjaGVtYSA9IHpcbiAgLnVuaW9uKFtcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImJhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcImNvbXBhcmluZyBhIG51bWVyaWMgdmFsdWUgYWNyb3NzIGEgc21hbGwvbWVkaXVtIHNldCBvZiBkaXNjcmV0ZSBjYXRlZ29yaWVzICh0b3AtTiwgcmFua2luZywgZ3JvdXAtYnkpXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiaG9yaXpvbnRhbEJhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcInNhbWUgYXMgYmFyIGJ1dCBjYXRlZ29yaWVzIG9uIHRoZSB5LWF4aXMgLSBwcmVmZXIgd2hlbiBjYXRlZ29yeSBsYWJlbHMgYXJlIGxvbmcgb3IgdGhlcmUgYXJlIG1hbnkgY2F0ZWdvcmllc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImxpbmVcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJvcmRlcmVkLWF4aXMgdHJlbmQgKHRpbWUgc2VyaWVzLCBzZXF1ZW5jZSwgcmFuaykgd2hlcmUgdGhlIHgtYXhpcyBoYXMgbmF0dXJhbCBvcmRlclwiLFxuICAgICAgKSxcbiAgICB6LmxpdGVyYWwoXCJhcmVhXCIpLmRlc2NyaWJlKFwic3RhY2tlZC10cmVuZCBlbXBoYXNpcyAtIGN1bXVsYXRpdmUgb3IgY29tcG9zaXRpb24gb3ZlciB0aW1lXCIpLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiY29tYm9cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJtaXhlZCBiYXIgKyBsaW5lIChvciBhcmVhKSBzZXJpZXMgb24gc2hhcmVkIGNhdGVnb3JpZXMgLSBlLmcuIHZvbHVtZSBiYXJzIHdpdGggYSByYXRlL3RyZW5kIGxpbmU7IHNldCBlYWNoIHNlcmllcycgYHR5cGVgXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwid2F0ZXJmYWxsXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiYnJpZGdlIC8gcnVubmluZy10b3RhbCBvZiBzaWduZWQgc3RlcCB2YWx1ZXMgKHN0YXJ0IC0+IGRlbHRhcyAtPiBlbmQpIGFjcm9zcyBvcmRlcmVkIGNhdGVnb3JpZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJzY2F0dGVyXCIpXG4gICAgICAuZGVzY3JpYmUoXCJ0d28tbnVtZXJpYy1heGlzIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGZpZWxkcyAoZS5nLiBwcmljZSB2cy4gcXVhbnRpdHkpXCIpLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiaGVhdG1hcFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm1hdHJpeCBpbnRlbnNpdHkgYWNyb3NzIHR3byBjYXRlZ29yeSBheGVzIC0geCBsYWJlbHMgaW4gYGNhdGVnb3JpZXNgLCBvbmUgc2VyaWVzIHBlciBtYXRyaXggcm93IGhvbGRpbmcgdGhhdCByb3cncyB2YWx1ZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJyYWRhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm11bHRpLWRpbWVuc2lvbiBjb21wYXJpc29uIGFjcm9zcyBhIGZpeGVkIHNldCBvZiBheGVzIChvbmUgaW5kaWNhdG9yIHBlciBjYXRlZ29yeSwgb25lIG9yIG1vcmUgc2VyaWVzIG9mIHZhbHVlcylcIixcbiAgICAgICksXG4gICAgei5saXRlcmFsKFwicGllXCIpLmRlc2NyaWJlKFwicGFydHMtb2YtYS13aG9sZSB3aGVuIDItNyBjYXRlZ29yaWVzIHN1bSB0byBhIG1lYW5pbmdmdWwgdG90YWxcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJmdW5uZWxcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJvcmRlcmVkIHN0YWdlcyB0aGF0IHNocmluayAoY29udmVyc2lvbiwgcGlwZWxpbmUsIGF0dHJpdGlvbikgLSBge25hbWUsIHZhbHVlfWAgc2xpY2VzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwidHJlZW1hcFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcInBhcnRzLW9mLWEtd2hvbGUgYXMgbmVzdGVkIHJlY3RhbmdsZXMgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIH43IGNhdGVnb3JpZXMgb3IgYSBmbGF0IGhpZXJhcmNoeSBvZiBge25hbWUsIHZhbHVlfWAgc2xpY2VzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiY3VzdG9tXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiZXNjYXBlIGhhdGNoIGZvciBhIGNoYXJ0IG5vbmUgb2YgdGhlIGFib3ZlIGNhbiBleHByZXNzIChzYW5rZXksIGJveHBsb3QsIGNhbmRsZXN0aWNrLCBzdW5idXJzdCwgZ2F1Z2UsIG5ldHdvcmsgZ3JhcGgsIGNhbGVuZGFyLCBwYXJhbGxlbCwgLi4uKSAtIGhhbmQtd3JpdGUgdGhlIGNvbXBsZXRlIEVjaGFydHMgb3B0aW9uIGluc3RlYWQgb2YgYSBwbGFuXCIsXG4gICAgICApLFxuICBdKVxuICAuZGVzY3JpYmUoXCJUaGUgY2hhcnQgc2hhcGUgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGRhdGEgYW5kIGludGVudC5cIik7XG5leHBvcnQgdHlwZSBDaGFydFR5cGUgPSB6LmluZmVyPHR5cGVvZiBDaGFydFR5cGVTY2hlbWE+O1xuXG4vKipcbiAqIFJlc29sdmVkIGNoYXJ0IHBsYW4gYSBzZXR0bGVkIGNoYXJ0IGVudHJ5IGNhcnJpZXMgb24gaXRzXG4gKiBgcmVzdWx0YCBmaWVsZC4gYG9wdGlvbmAgaXMgdGhlIGZ1bGwgRWNoYXJ0cyBzcGVjOyBwYXNzXG4gKiBzdHJhaWdodCBpbnRvIGA8UmVhY3RFQ2hhcnRzIG9wdGlvbj17Li4ufT5gLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxuICBvcHRpb246IHpcbiAgICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRnVsbHktcmVzb2x2ZWQgRWNoYXJ0cyBgRUNoYXJ0c09wdGlvbmAgSlNPTiBmb3IgdGhpcyBjaGFydCAtIGRyb3AgZGlyZWN0bHkgaW50byBhbiBFY2hhcnRzIGluc3RhbmNlIChvciBgPFJlYWN0RUNoYXJ0cyBvcHRpb249ey4uLn0gLz5gKSB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4gSW5jbHVkZXMgdGl0bGUgLyB0b29sdGlwIC8gbGVnZW5kIC8gZ3JpZCAvIGF4aXMgLyBzZXJpZXMgZGVmYXVsdHMgYWxyZWFkeSBtZXJnZWQgaW4uXCIsXG4gICAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ2hhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBDaGFydFJlc3VsdFNjaGVtYT47XG5cbi8qKlxuICogV2lyZS1mb3JtYXQgQU5EIHNlcnZlci1zaWRlIGNhY2hlIHNoYXBlIGZvciBhIGNoYXJ0IGVudHJ5LlxuICogVGhyZWUgbGlmZWN5Y2xlIHN0YXRlcyBpbmZlcnJlZCBmcm9tIHRoZSB0d28gb3B0aW9uYWwgZmllbGRzXG4gKiAobm8gZGlzY3JpbWluYXRvciBuZWVkZWQpOlxuICpcbiAqICAgLSBgcmVzdWx0YCBzZXQgICAgICAgICAgICAgICAgICAgIC0+IGNoYXJ0IGlzIHJlYWR5IHRvIHJlbmRlclxuICogICAtIGBlcnJvcmAgc2V0ICAgICAgICAgICAgICAgICAgICAgLT4gcGxhbm5lciAvIGRhdGEgZmV0Y2ggZmFpbGVkXG4gKiAgIC0gYm90aCBgcmVzdWx0YCBhbmQgYGVycm9yYCB1bnNldCAtPiBzdGlsbCBwcm9jZXNzaW5nXG4gKlxuICogYG9wdGlvbmAgaXMgdHlwZWQgYXMgYSBnZW5lcmljIHJlY29yZCBzbyB0aGlzIHBhY2thZ2Ugc3RheXNcbiAqIGRlcGVuZGVuY3ktZnJlZSBvZiBgZWNoYXJ0c2AuIFRoZSBzZXJ2ZXIgKGBjaGFydC50c2ApIGltcG9ydHNcbiAqIHRoaXMgc2NoZW1hIGRpcmVjdGx5OyB0aGUgZGVtbyBjbGllbnQgcG9sbHMgdGhlXG4gKiBgL2VtYmVkL2NoYXJ0LzppZGAgcm91dGUgYW5kIHBhcnNlcyByZXNwb25zZXMgYWdhaW5zdCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydElkOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJPcGFxdWUgaWQgbWludGVkIGJ5IHRoZSBjaGFydCBzdWJzeXN0ZW0uIEVtYmVkIHZlcmJhdGltIGFzIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgaW4gYWdlbnQgcHJvc2U7IHRoZSBob3N0IFVJIHJlc29sdmVzIGl0IGFnYWluc3QgdGhpcyBjYWNoZSBlbnRyeS5cIixcbiAgICApLFxuICBlcnJvcjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFcnJvciBtZXNzYWdlIHdoZW4gdGhlIGNoYXJ0IGZhaWxlZCAoZGF0YSBmZXRjaCBlcnJvciwgcGxhbm5lciBlcnJvciwgZW1wdHkgZGF0YXNldCkuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGByZXN1bHRgOyBhYnNlbnQgb24gc3VjY2VzcyBhbmQgd2hpbGUgcHJvY2Vzc2luZy5cIixcbiAgICApLFxuICByZXN1bHQ6IENoYXJ0UmVzdWx0U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJSZXNvbHZlZCBjaGFydCBwbGFuLiBBYnNlbnQgd2hpbGUgcHJvY2Vzc2luZyBhbmQgd2hlbiB0aGUgcnVuIGVycm9yZWQuXCIsXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9lbWJlZC9kYXRhLzppZGAuXG4gKlxuICogTWlycm9ycyB0aGUgYWdlbnQtc2lkZSBgZ2V0X3N0YXRlbWVudGAgdG9vbCdzIG91dHB1dCBzbyB0aGVcbiAqIGhvc3QgVUkgYW5kIHRoZSBMTE0gc2VlIHRoZSBleGFjdCBzYW1lIHNoYXBlIGZvciB0aGUgc2FtZVxuICogc3RhdGVtZW50OyB0aGUgcm91dGUgaXMgd2hhdCByZXNvbHZlcyBgW2RhdGE6PHN0YXRlbWVudF9pZD5dYFxuICogbWFya2VycyB0aGUgYWdlbnQgZW1iZWRzIGluIHByb3NlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgY29sdW1uc2A6IGNvbHVtbiBuYW1lcyBpbiBkZWNsYXJhdGlvbiBvcmRlci5cbiAqICAgLSBgcm93c2A6IHJvdyByZWNvcmRzIGtleWVkIGJ5IGNvbHVtbiBuYW1lLiBDZWxsIHZhbHVlcyBhcmVcbiAqICAgICBlaXRoZXIgY29lcmNlZCBudW1iZXJzIG9yIHRoZSBvcmlnaW5hbCBzdHJpbmdzIChHZW5pZSAvXG4gKiAgICAgU3RhdGVtZW50IEV4ZWN1dGlvbiByZXR1cm5zIGV2ZXJ5IGNlbGwgYXMgYHN0cmluZyB8IG51bGxgO1xuICogICAgIG51bWVyaWMtbG9va2luZyBjZWxscyBhcmUgY29lcmNlZCBzZXJ2ZXItc2lkZSBzbyB0aGUgVUlcbiAqICAgICBjYW4gZm9ybWF0IHdpdGggYHRhYnVsYXItbnVtc2Agd2l0aG91dCByZS1wYXJzaW5nKS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgdXBzdHJlYW0gKGluZGVwZW5kZW50IG9mIHRoZVxuICogICAgIGBsaW1pdGAgY2FwKS4gQ29tcGFyZSBhZ2FpbnN0IGByb3dzLmxlbmd0aGAgdG8gZGV0ZWN0XG4gKiAgICAgdHJ1bmNhdGlvbiAtIGB0cnVuY2F0ZWRgIGlzIHRoZSBwcmVjb21wdXRlZCBmbGFnLlxuICogICAtIGB0cnVuY2F0ZWRgOiBgdHJ1ZWAgd2hlbiB0aGUgc2VydmVyIGNsaXBwZWQgcm93cyB0byBob25vclxuICogICAgIHRoZSByb3V0ZSdzIHJvdyBjYXA7IHRoZSBVSSBzaG91bGQgc3VyZmFjZSBhIFwic2hvd2luZyBOIG9mXG4gKiAgICAgTSByb3dzXCIgYWZmb3JkYW5jZSBpbiB0aGF0IGNhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0ZW1lbnREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxuICB0cnVuY2F0ZWQ6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBTdGF0ZW1lbnREYXRhID0gei5pbmZlcjx0eXBlb2YgU3RhdGVtZW50RGF0YVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHdyaXRlciBzdXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUaGUgYFRvb2xTdHJlYW1gLXNoYXBlZCB3cml0ZXIgdGhlIE1hc3RyYSBHZW5pZSBhZ2VudCBhbmQgY2hhcnRcbiAqIGhlbHBlcnMgcHVibGlzaCBldmVudHMgdGhyb3VnaC4gRGVmaW5lZCBoZXJlICh2cyBpbXBvcnRlZCBmcm9tXG4gKiBgQG1hc3RyYS9jb3JlYCkgc28gaGVscGVycyBpbiBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCBjYW5cbiAqIGFjY2VwdCBhbnkgb2JqZWN0IHdpdGggYSBgLndyaXRlYCBtZXRob2Qgd2l0aG91dCBkcmFnZ2luZ1xuICogTWFzdHJhJ3MgZnVsbCBgVG9vbFN0cmVhbWAgKGFuZCBpdHMgYWdlbnQgLyB0b29sIHR5cGluZ3MpIGludG9cbiAqIGNhbGwgc2l0ZXMuIFRoZSBhY3R1YWwgTWFzdHJhIGBjdHgud3JpdGVyYCBpcyBhc3NpZ25hYmxlIHRvXG4gKiB0aGlzIHNoYXBlIHNvIGNhbGxlcnMgcGFzcyBpdCBzdHJhaWdodCB0aHJvdWdoLlxuICpcbiAqIEtlcHQgYXMgYSBwbGFpbiBUeXBlU2NyaXB0IGludGVyZmFjZSAodnMgYSB6b2Qgc2NoZW1hKSBiZWNhdXNlXG4gKiB0aGUgY29udHJhY3QgaXMgYSBtZXRob2QgLSB6b2QgY2FuIG9ubHkgdmFsaWRhdGUgdGhlIHNoYXBlIHZpYVxuICogYHouY3VzdG9tYCwgd2hpY2ggYWRkcyBub2lzZSB3aXRob3V0IGJ1eWluZyBhbnkgcnVudGltZSBjaGVjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFXcml0ZXIge1xuICB3cml0ZTogKGNodW5rOiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tIG1hc3RyYS1vbmx5IGdlbmllLWFnZW50IGV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiB0aGUgR2VuaWUgdG9vbCBpbnZvY2F0aW9uIHN0YXJ0ZWQuXG4gKiBFbWl0dGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNhbGxpbmcgYWdlbnQgaW52b2tlcyB0aGUgR2VuaWVcbiAqIHRvb2wsIGJlZm9yZSBhbnkgaW5uZXIgYWdlbnQgLyB3aXJlIGFjdGl2aXR5LCBzbyB0aGUgVUkgY2FuXG4gKiBwb3AgYSBcIlRoaW5raW5nLi4uXCIgcGlsbCB0aGUgaW5zdGFudCB0aGUgbW9kZWwgZGVjaWRlcyB0b1xuICogZGVsZWdhdGUuIGBjb252ZXJzYXRpb25JZGAgLyBgbWVzc2FnZUlkYCBhcmUgYWJzZW50IG9uIHRoaXNcbiAqIGZpcnN0IGVtaXQgKG5vIEdlbmllIHJvdW5kLXRyaXAgeWV0KS4gRmllbGQgbmFtZXMgYXJlXG4gKiBjYW1lbENhc2UgKHZzIHRoZSBzbmFrZV9jYXNlIHdpcmUgZXZlbnRzKSB0byBtaXJyb3IgdGhlXG4gKiBHZW5pZSBhZ2VudCdzIG93biBpbnRlcm5hbCBkYXRhIHBsdW1iaW5nLlxuICovXG5leHBvcnQgY29uc3QgU3RhcnRlZEV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGFydGVkXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKipcbiAgICogR2VuaWUgY29udmVyc2F0aW9uIGlkLCBwb3B1bGF0ZWQgb25seSB3aGVuIHRoaXMgYHN0YXJ0ZWRgXG4gICAqIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGEgZm9sbG93LXVwIHR1cm4gb24gYW4gZXhpc3RpbmdcbiAgICogY29udmVyc2F0aW9uLiBBYnNlbnQgb24gdGhlIGZpcnN0IHR1cm4uXG4gICAqL1xuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogR2VuaWUgbWVzc2FnZSBpZCwgcG9wdWxhdGVkIG9ubHkgYWZ0ZXIgdGhlIGZpcnN0IHdpcmVcbiAgICogYG1lc3NhZ2VgIGV2ZW50IGxhbmRzLiBBYnNlbnQgb24gdGhlIGltbWVkaWF0ZS1vbi1pbnZva2VcbiAgICogZW1pdC5cbiAgICovXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogUXVlc3Rpb24gdGhlIEdlbmllIGFnZW50IHNlbnQgdG8gR2VuaWUuICovXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIFN0YXJ0ZWRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXJ0ZWRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvblxuICogZmluaXNoZWQuIENhcnJpZXMgdGhlIGh5ZHJhdGVkIGBzdGF0ZW1lbnRJZHNgIChyb3dzIGFyZSBmZXRjaGVkXG4gKiB2aWEgYGdldFN0YXRlbWVudGAgc2VwYXJhdGVseSkgYW5kIEdlbmllJ3MgZmluYWwgcHJvc2UgYW5zd2VyXG4gKiBzbyB0aGUgVUkgY2FuIG1vdmUgZnJvbSBcInRoaW5raW5nXCIgdG8gXCJhbnN3ZXJlZFwiIHdpdGhvdXRcbiAqIHdhaXRpbmcgZm9yIHRoZSBHZW5pZSBhZ2VudCdzIHdob2xlIHJlYXNvbmluZyBsb29wIHRvIGVuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFza0dlbmllRG9uZUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhc2tfZ2VuaWVfZG9uZVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBHZW5pZSdzIG5hdHVyYWwtbGFuZ3VhZ2UgYW5zd2VyIGZvciB0aGUgdHVybiwgaWYgYW55LiAqL1xuICBhbnN3ZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFN0YXRlbWVudCBpZHMgZm9yIGFueSBub24tZW1wdHkgcmVzdWx0IHNldHMgdGhpcyB0dXJuIHByb2R1Y2VkLiAqL1xuICBzdGF0ZW1lbnRJZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIC8qKlxuICAgKiBUZXJtaW5hbCB3aXJlIHN0YXR1cyAoYENPTVBMRVRFRGAgLyBgRkFJTEVEYCAvIGBDQU5DRUxMRURgKS5cbiAgICogTWlycm9ycyB0aGUgc291cmNlIGByZXN1bHRgIGV2ZW50J3Mgc3RhdHVzIHNvIHN1YnNjcmliZXJzXG4gICAqIGNhbiByZWFjdCB0byBhc2stbGV2ZWwgY29tcGxldGlvbiB3aXRob3V0IHJlLXdhbGtpbmcgaGlzdG9yeS5cbiAgICogVHJlYXRlZCBhcyBgei5jdXN0b208TWVzc2FnZVN0YXR1cz5gIGJlY2F1c2UgdGhlIFNESyBpcyB0aGVcbiAgICogc291cmNlIG9mIHRydXRoIGZvciB0aGUgZW51bSB2YWx1ZXMuXG4gICAqL1xuICBzdGF0dXM6IHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiksXG59KTtcbmV4cG9ydCB0eXBlIEFza0dlbmllRG9uZUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGVycm9yIGV2ZW50OiB0ZXJtaW5hbCBHZW5pZSBhZ2VudCAvIHRyYW5zcG9ydFxuICogZXJyb3IuIEdlbmllJ3Mgb3duIGBGQUlMRURgIC8gYENBTkNFTExFRGAgY29tZSB0aHJvdWdoIHRoZVxuICogd2lyZSdzIGByZXN1bHRgIGV2ZW50IC0gdGhpcyB2YXJpYW50IGlzIGZvciBmYWlsdXJlcyB0aGUgd2lyZVxuICogY2FuJ3QgcmVwcmVzZW50IChuZXR3b3JrLCBHZW5pZSBhZ2VudCBjcmFzaCwgcGxhbm5lciBlcnJvcixcbiAqIGV0Yy4pIHBsdXMgYSBVSS1mcmllbmRseSBtaXJyb3Igb2YgYHJlc3VsdGAgd2hlbiB0aGUgc3RhdHVzIGlzXG4gKiBub24tYENPTVBMRVRFRGAuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImVycm9yXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvcjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhR2VuaWVFcnJvckV2ZW50ID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IHRoZSBpbm5lciBHZW5pZSBhZ2VudCdzXG4gKiBzdHJ1Y3R1cmVkLW91dHB1dCBjb2VyY2lvbiBoYXMgbGFuZGVkLiBGaXJlcyBvbmNlIHBlciBHZW5pZVxuICogdG9vbCBpbnZvY2F0aW9uLCBBRlRFUiBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgY29tcGxldGVzIChpLmUuXG4gKiB0aGUgaW5uZXIgbG9vcCArIE1hc3RyYSdzIHN0cnVjdHVyaW5nIHBhc3MgaGF2ZSBib3RoXG4gKiBmaW5pc2hlZCkgYW5kIEJFRk9SRSB0aGUgd3JhcHBlciBoeWRyYXRlcyBlYWNoIGBkYXRhYCBpdGVtXG4gKiB3aXRoIGEgY2hhcnQuIFNpZ25hbHMgdG8gdGhlIGhvc3QgVUkgdGhhdCB0aGUgYWdlbnQgaGFzXG4gKiBzdG9wcGVkIHJlYXNvbmluZyBhbmQgaXMgbW92aW5nIGludG8gY2hhcnQgZ2VuZXJhdGlvbi5cbiAqXG4gKiBUaGUgc3RydWN0dXJpbmcgcGFzcyBpdHNlbGYgaXMgb3BhcXVlIChpdCBydW5zIGluc2lkZVxuICogTWFzdHJhJ3MgYGFnZW50LmdlbmVyYXRlKC4uLilgIHRvZ2V0aGVyIHdpdGggdGhlIHRvb2wgbG9vcClcbiAqIHNvIHRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgd2UgY2FuIG9mZmVyOyB3ZSBjYW4ndCBmaXJlIGFcbiAqIFwic3VtbWFyeSBzdGFydGVkXCIgZXZlbnQgdGhlIHdheSB3ZSBmaXJlIGBzdGFydGVkYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1bW1hcnlFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic3VtbWFyeVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYWdlbnQncyBzdHJ1Y3R1cmVkIHN1bW1hcnkuICovXG4gIGl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKiBDb3VudCBvZiBgdGV4dGAgLyBwcm9zZSBpdGVtcyBpbiB0aGUgc3VtbWFyeS4gKi9cbiAgdGV4dEl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKlxuICAgKiBDb3VudCBvZiBgZGF0YWAgaXRlbXMgdGhlIHdyYXBwZXIgd2lsbCBoeWRyYXRlIGludG8gY2hhcnRzLlxuICAgKiBUaGUgaG9zdCBVSSBjYW4gdXNlIHRoaXMgdG8gc2VlZCBOIGNoYXJ0IHNrZWxldG9ucyBiZWZvcmVcbiAgICogdGhlIHBlci1jaGFydCBldmVudHMgYXJyaXZlLlxuICAgKi9cbiAgZGF0YUl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1bW1hcnlFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN1bW1hcnlFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgZXZlbnQgdW5pb24uIEVhY2ggdmFyaWFudCB1c2VzIHRoZSBzYW1lIGZsYXRcbiAqIGB7dHlwZSwgLi4uZmllbGRzfWAgc2hhcGUgYXMge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSBzb1xuICogc3Vic2NyaWJlcnMgdW5pb24gYm90aCB3aXRoIGEgc2luZ2xlIGBzd2l0Y2ggKGV2ZW50LnR5cGUpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRFdmVudFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFN0YXJ0ZWRFdmVudFNjaGVtYSxcbiAgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWEsXG4gIE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYSxcbiAgU3VtbWFyeUV2ZW50U2NoZW1hLFxuXSk7XG5leHBvcnQgdHlwZSBHZW5pZUFnZW50RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIFRoZSB1bmlmaWVkIHdyaXRlci1ldmVudCB2b2NhYnVsYXJ5IHN1YnNjcmliZXJzIHNlZSBvblxuICogYGN0eC53cml0ZXJgOiB0aGUgd2lyZS1kZXJpdmVkIHtAbGluayBHZW5pZUNoYXRFdmVudH0gdW5pb25cbiAqICoqcGx1cyoqIE1hc3RyYS1vbmx5IGV2ZW50cyBmcm9tIHtAbGluayBHZW5pZUFnZW50RXZlbnR9LiBFYWNoXG4gKiB2YXJpYW50IGlzIGEgZmxhdCBge3R5cGUsIC4uLmZpZWxkc31gIG9iamVjdDsgY29uc3VtZXJzIG5hcnJvd1xuICogb24gYHR5cGVgIGFuZCByZWFkIGZpZWxkcyBpbmxpbmUgLSB0aGVyZSBpcyBubyBwYXlsb2FkIHdyYXBwZXJcbiAqIGFuZCBubyB3cml0ZXItYm91bmRhcnkgdHJhbnNsYXRvci5cbiAqXG4gKiBDb21wb3NlZCB2aWEgYHoudW5pb25gIChub3QgYHouZGlzY3JpbWluYXRlZFVuaW9uYCkgYmVjYXVzZVxuICogYm90aCBoYWx2ZXMgYXJlIHRoZW1zZWx2ZXMgZGlzY3JpbWluYXRlZCB1bmlvbnMgb24gdGhlIHNhbWVcbiAqIGB0eXBlYCBrZXkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVdyaXRlckV2ZW50U2NoZW1hID0gei51bmlvbihbXG4gIGdlbmllTW9kZWwuR2VuaWVDaGF0RXZlbnRTY2hlbWEsXG4gIEdlbmllQWdlbnRFdmVudFNjaGVtYSxcbl0pO1xuZXhwb3J0IHR5cGUgR2VuaWVXcml0ZXJFdmVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllV3JpdGVyRXZlbnRTY2hlbWE+O1xuXG4vKiogRGlzY3JpbWluYXRvciB0eXBlIGZvciB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0uICovXG5leHBvcnQgdHlwZSBHZW5pZVdyaXRlckV2ZW50VHlwZSA9IEdlbmllV3JpdGVyRXZlbnRbXCJ0eXBlXCJdO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1bW1hcnkgKyBkYXRhc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRhYnVsYXIgcGF5bG9hZCBlbWJlZGRlZCBpbiBldmVyeSB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX1cbiAqIGB2aXN1YWxpemVgIGRhdGFzZXQuIEFsd2F5cyBwcmVzZW50OiBoeWRyYXRlZCBieSB0aGUgd29ya2Zsb3cnc1xuICogYWdlbnQgc3RlcCBiZWZvcmUgdGhlIGZpbmFsaXplIHN0ZXAgcnVucywgc28gY29uc3VtZXJzIGNhbiByZW5kZXJcbiAqIGEgdGFibGUgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiBjaGFydC1wbGFubmVyIG91dGNvbWUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBjb2x1bW5zYDogY29sdW1uIG5hbWVzIGluIGRpc3BsYXkgb3JkZXIuXG4gKiAgIC0gYHJvd3NgOiB0YWJ1bGFyIHJvd3Mga2V5ZWQgYnkgY29sdW1uIG5hbWUuXG4gKiAgIC0gYHJvd0NvdW50YDogdG90YWwgcm93IGNvdW50IEdlbmllIHJlcG9ydGVkIChtYXkgZXhjZWVkXG4gKiAgICAgYHJvd3MubGVuZ3RoYCB3aGVuIHRoZSBzdGF0ZW1lbnQgd2FzIHRydW5jYXRlZCkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXREYXRhID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYT47XG5cbi8qKlxuICogU2xpbSBjaGFydCByZWZlcmVuY2UgYXR0YWNoZWQgdG8gYSB2aXN1YWxpemUgZGF0YXNldC4gT25seVxuICogcHJlc2VudCB3aGVuIHBsYW5uaW5nIHN1Y2NlZWRlZC5cbiAqXG4gKiBgb3B0aW9uYCBpcyBpbnRlbnRpb25hbGx5IE5PVCBpbmNsdWRlZC4gVGhlIHJlc29sdmVkIEVjaGFydHNcbiAqIHNwZWMgbGl2ZXMgb2ZmLWJhbmQgaW4gdGhlIGNoYXJ0IGNhY2hlOiB0aGUgaG9zdCBVSSBmZXRjaGVzIGl0XG4gKiBieSBgY2hhcnRJZGAgZnJvbSB0aGUgcGx1Z2luJ3MgZW1iZWQgcm91dGUgKGRlcml2ZWQgZnJvbVxuICogYGJhc2VQYXRoYCArIHtAbGluayBNQVNUUkFfUk9VVEVTfS5lbWJlZCwgaS5lLiBgL2VtYmVkL2NoYXJ0LzppZGA7XG4gKiBzZWUge0BsaW5rIENoYXJ0fSkuIEVtYmVkZGluZyB0aGUgZnVsbCBzcGVjIGlubGluZSB3b3VsZFxuICogaW5mbGF0ZSBldmVyeSBkYXRhc2V0IGJ5IHNldmVyYWwgS0IgcGVyIGNoYXJ0IGFuZCByb3VuZC10cmlwXG4gKiB0aHJvdWdoIHRoZSBMTE0gY29udGV4dCBmb3IgemVybyBiZW5lZml0ICh0aGUgbW9kZWwgb25seSBuZWVkc1xuICogdGhlIGBjaGFydElkYCB0byBwbGFjZSBhIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgbWFya2VyIGluIGl0c1xuICogcmVwbHkpLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHouc3RyaW5nKCksXG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXRDaGFydCA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldENoYXJ0U2NoZW1hPjtcblxuLyoqXG4gKiBEYXRhc2V0IGJ1bmRsZSBhdHRhY2hlZCB0byBhIHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfSBgdmlzdWFsaXplYFxuICogaXRlbS4gYGRhdGFgIGlzIGFsd2F5cyBwb3B1bGF0ZWQ7IGBjaGFydGAgaXMgYmVzdC1lZmZvcnQgYW5kXG4gKiBhYnNlbnQgd2hlbiB0aGUgd29ya2Zsb3cncyBjaGFydC1wbGFubmVyIGZhaWxlZCAodGltZW91dCxcbiAqIG1hbGZvcm1lZCBwbGFuLCBhYm9ydCkgc28gdGhlIGhvc3QgVUkgY2FuIHN0aWxsIHJlbmRlciB0aGVcbiAqIHVuZGVybHlpbmcgdGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGRhdGE6IEdlbmllRGF0YXNldERhdGFTY2hlbWEsXG4gIGNoYXJ0OiBHZW5pZURhdGFzZXRDaGFydFNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXRTY2hlbWE+O1xuXG4vKipcbiAqIE9uZSBpdGVtIGluc2lkZSB0aGUgR2VuaWUgd29ya2Zsb3cncyBmaW5hbCBzdW1tYXJ5LiBUaGVcbiAqIHdvcmtmbG93IHByb2R1Y2VzIGEgbWl4ZWQgc2VxdWVuY2Ugb2Y6XG4gKlxuICogICAtIGBzdHJpbmdgOiBhIG1hcmtkb3duIHBhcmFncmFwaCAoaW50ZXJwcmV0YXRpb24sIGNhbGxvdXRzLFxuICogICAgIHRyYW5zaXRpb25zIGJldHdlZW4gZGF0YSBibG9ja3MpLlxuICogICAtIGB2aXN1YWxpemVgOiBhIHJlcXVlc3QgZnJvbSB0aGUgYWdlbnQgc3RlcCB0byB2aXN1YWxpemUgYVxuICogICAgIHNwZWNpZmljIEdlbmllIHN0YXRlbWVudCBhdCB0aGlzIHBvc2l0aW9uIGluIHRoZSBwcm9zZS5cbiAqICAgICBUaGUgZmluYWxpemUgc3RlcCBoeWRyYXRlcyBgZGF0YXNldC5kYXRhYCAocm93cyBmcm9tIHRoZVxuICogICAgIG1hdGNoaW5nIGBzdGF0ZW1lbnRJZGApIGFuZCBhdHRhY2hlcyBgZGF0YXNldC5jaGFydGAgYWZ0ZXJcbiAqICAgICBydW5uaW5nIHRoZSBjaGFydC1wbGFubmVyLiBUaGUgYWdlbnQgTkVWRVIgcGlja3MgdGhlIGNoYXJ0XG4gKiAgICAgdHlwZSAtIGl0IG9ubHkgbWFya3Mgd2hlcmUgYSB2aXN1YWxpemF0aW9uIGJlbG9uZ3MuXG4gKlxuICogVGhlIGhvc3QgVUkgd2Fsa3MgdGhlIGFycmF5IGluIGRpc3BsYXkgb3JkZXIgdG8gY29tcG9zZSB0aGVcbiAqIGZpbmFsIGFzc2lzdGFudCBtZXNzYWdlLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2aXN1YWxpemVcIiksXG4gICAgc3RhdGVtZW50SWQ6IHouc3RyaW5nKCksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRhdGFzZXQ6IEdlbmllRGF0YXNldFNjaGVtYSxcbiAgfSksXG5dKTtcbmV4cG9ydCB0eXBlIEdlbmllU3VtbWFyeUl0ZW0gPSB6LmluZmVyPHR5cGVvZiBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbVR5cGUgPSBHZW5pZVN1bW1hcnlJdGVtW1widHlwZVwiXTtcblxuLyoqXG4gKiBUaGUgR2VuaWUgYWdlbnQncyBmaW5hbCBvdXRwdXQgc2hhcGUgLSB3aGF0IHRoZSBjYWxsaW5nIGFnZW50J3NcbiAqIEdlbmllIHRvb2wgcmV0dXJucyB0byB0aGUgY2FsbGluZyBMTE0uIFRoZSBgc3VtbWFyeWAgYXJyYXkgaXNcbiAqIHRoZSB1c2VyLWZhY2luZyByZW5kZXJhYmxlOyBgY29udmVyc2F0aW9uSWRgIGxldHMgdGhlIGNhbGxpbmdcbiAqIGFnZW50IChvciB0aGUgVUkpIGZvbGxvdyB1cCBpbiB0aGUgc2FtZSBHZW5pZSB0aHJlYWQgb24gdGhlXG4gKiBuZXh0IHR1cm4uXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdW1tYXJ5OiB6LmFycmF5KEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZUFnZW50UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYT47XG4iXX0=
|
package/package.json
CHANGED
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
"typescript": "^5.9.3"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@dbx-tools/shared-core": "0.6.
|
|
27
|
-
"@dbx-tools/shared-genie": "0.6.
|
|
28
|
-
"@dbx-tools/shared-model": "0.6.
|
|
26
|
+
"@dbx-tools/shared-core": "0.6.73",
|
|
27
|
+
"@dbx-tools/shared-genie": "0.6.73",
|
|
28
|
+
"@dbx-tools/shared-model": "0.6.73",
|
|
29
29
|
"zod": "4.3.6"
|
|
30
30
|
},
|
|
31
31
|
"main": "./lib/index.js",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"./package.json": "./package.json"
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
|
-
"version": "0.6.
|
|
45
|
+
"version": "0.6.73",
|
|
46
46
|
"types": "./lib/index.d.ts",
|
|
47
47
|
"type": "module",
|
|
48
48
|
"exports": {
|
package/src/override.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-request model-override wire convention shared by the Mastra
|
|
3
3
|
* plugin server (`@dbx-tools/appkit-mastra`'s `extractModelOverride`)
|
|
4
|
-
* and the browser chat client (`@dbx-tools/
|
|
4
|
+
* and the browser chat client (`@dbx-tools/ui-mastra`). Kept
|
|
5
5
|
* here so the header / query / body field names can never drift
|
|
6
6
|
* between the side that sets them and the side that reads them.
|
|
7
7
|
*
|
package/src/routes.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Route segments the Mastra plugin mounts under its `basePath`
|
|
3
3
|
* (`/api/<plugin-name>`). Shared between the server's route
|
|
4
4
|
* registration and the browser client (`MastraPluginClient` in
|
|
5
|
-
* `@dbx-tools/
|
|
5
|
+
* `@dbx-tools/ui-mastra`) so a relayout - or a rename of a
|
|
6
6
|
* sub-path - is a one-line change here and the two can never drift.
|
|
7
7
|
*
|
|
8
8
|
* The agent-scoped segments (`history`, `threads`, `suggestions`,
|
package/src/thread.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-request thread-selection wire convention shared by the Mastra
|
|
3
3
|
* plugin server (`@dbx-tools/appkit-mastra`'s thread-id resolver) and
|
|
4
|
-
* the browser chat client (`@dbx-tools/
|
|
4
|
+
* the browser chat client (`@dbx-tools/ui-mastra`).
|
|
5
5
|
*
|
|
6
6
|
* A chat client owns multiple conversations ("threads") for the same
|
|
7
7
|
* resource (the authenticated user). It names the thread a given
|
package/src/wire.ts
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* ({@link MASTRA_ROUTES}) and the embed-marker grammar in `marker.ts`,
|
|
27
27
|
* so this file stays purely declarative (schemas + inferred types).
|
|
28
28
|
* The browser client that drives these routes (`MastraPluginClient`)
|
|
29
|
-
* ships from `@dbx-tools/
|
|
29
|
+
* ships from `@dbx-tools/ui-mastra`.
|
|
30
30
|
*
|
|
31
31
|
* @module
|
|
32
32
|
*/
|
|
@@ -51,7 +51,7 @@ import { z } from "zod";
|
|
|
51
51
|
* Fields:
|
|
52
52
|
* - `basePath`: plugin mount path. Always `/api/<pluginName>`. Feed
|
|
53
53
|
* it to `new MastraPluginClient(config)` (from
|
|
54
|
-
* `@dbx-tools/
|
|
54
|
+
* `@dbx-tools/ui-mastra`) to get a typed client over every
|
|
55
55
|
* route plus the standard agent stream.
|
|
56
56
|
* - `defaultAgent`: agent id the client converses with when it
|
|
57
57
|
* doesn't name one.
|
|
@@ -114,7 +114,7 @@ export type ServingEndpointsResponse = z.infer<typeof ServingEndpointsResponseSc
|
|
|
114
114
|
/**
|
|
115
115
|
* Structural shape for an AI SDK V5 `UIMessage`. Defined locally
|
|
116
116
|
* so the shared types package stays dependency-free (no `ai`
|
|
117
|
-
* import). The runtime values returned by the `/history` endpoint
|
|
117
|
+
* import). The runtime values returned by the `/route/history` endpoint
|
|
118
118
|
* are produced by `toAISdkV5Messages` and are 1:1 compatible with
|
|
119
119
|
* `UIMessage` from the `ai` package; clients can safely cast when
|
|
120
120
|
* needed.
|
|
@@ -128,7 +128,7 @@ export const MastraHistoryUIMessageSchema = z.object({
|
|
|
128
128
|
export type MastraHistoryUIMessage = z.infer<typeof MastraHistoryUIMessageSchema>;
|
|
129
129
|
|
|
130
130
|
/**
|
|
131
|
-
* JSON payload returned by `GET ${basePath}/history`.
|
|
131
|
+
* JSON payload returned by `GET ${basePath}/route/history`.
|
|
132
132
|
*
|
|
133
133
|
* Fields:
|
|
134
134
|
* - `uiMessages`: page of UI-formatted messages, oldest -> newest.
|
|
@@ -151,7 +151,7 @@ export const MastraHistoryResponseSchema = z.object({
|
|
|
151
151
|
export type MastraHistoryResponse = z.infer<typeof MastraHistoryResponseSchema>;
|
|
152
152
|
|
|
153
153
|
/**
|
|
154
|
-
* JSON payload returned by `DELETE ${basePath}/history`. Deletes
|
|
154
|
+
* JSON payload returned by `DELETE ${basePath}/route/history`. Deletes
|
|
155
155
|
* every persisted message + workflow snapshot tied to the caller's
|
|
156
156
|
* thread, so the next chat turn starts from a clean slate. The
|
|
157
157
|
* session cookie that anchors the thread id is preserved so the
|