@dbx-tools/shared-mastra 0.6.218 → 0.6.220
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/README.md +12 -13
- package/index.ts +3 -6
- package/lib/index.d.ts +3 -6
- package/lib/index.js +3 -5
- package/lib/src/routes.d.ts +5 -7
- package/lib/src/routes.js +6 -8
- package/lib/src/wire.d.ts +239 -213
- package/lib/src/wire.js +11 -157
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/routes.ts +5 -7
- package/src/wire.ts +14 -202
- package/lib/src/stream.d.ts +0 -162
- package/lib/src/stream.js +0 -135
- package/src/stream.ts +0 -164
package/lib/src/wire.js
CHANGED
|
@@ -99,162 +99,6 @@ export const DefaultModelResponseSchema = z.object({
|
|
|
99
99
|
export const ServingEndpointsResponseSchema = z.object({
|
|
100
100
|
endpoints: z.array(model.ServingEndpointSummarySchema),
|
|
101
101
|
});
|
|
102
|
-
/* ----------------------------- chat history ----------------------------- */
|
|
103
|
-
/**
|
|
104
|
-
* Structural shape for an AI SDK V5 `UIMessage`. Defined locally
|
|
105
|
-
* so the shared types package stays dependency-free (no `ai`
|
|
106
|
-
* import). The runtime values returned by the `/route/history` endpoint
|
|
107
|
-
* are produced by `toAISdkV5Messages` and are 1:1 compatible with
|
|
108
|
-
* `UIMessage` from the `ai` package; clients can safely cast when
|
|
109
|
-
* needed.
|
|
110
|
-
*/
|
|
111
|
-
export const MastraHistoryUIMessageSchema = z.object({
|
|
112
|
-
id: z.string(),
|
|
113
|
-
role: z.enum(["system", "user", "assistant"]),
|
|
114
|
-
parts: z.array(z.unknown()).readonly(),
|
|
115
|
-
metadata: z.unknown().optional(),
|
|
116
|
-
});
|
|
117
|
-
/**
|
|
118
|
-
* JSON payload returned by `GET ${basePath}/route/history`.
|
|
119
|
-
*
|
|
120
|
-
* Fields:
|
|
121
|
-
* - `uiMessages`: page of UI-formatted messages, oldest -> newest.
|
|
122
|
-
* Always chronological regardless of the underlying pagination
|
|
123
|
-
* order so the client can prepend the array to the live
|
|
124
|
-
* transcript without sorting.
|
|
125
|
-
* - `page`: zero-indexed page that produced this response.
|
|
126
|
-
* - `perPage`: number of items requested per page.
|
|
127
|
-
* - `total`: total number of messages in the thread.
|
|
128
|
-
* - `hasMore`: true when at least one older page is still
|
|
129
|
-
* available.
|
|
130
|
-
*/
|
|
131
|
-
export const MastraHistoryResponseSchema = z.object({
|
|
132
|
-
uiMessages: z.array(MastraHistoryUIMessageSchema),
|
|
133
|
-
page: z.number(),
|
|
134
|
-
perPage: z.number(),
|
|
135
|
-
total: z.number(),
|
|
136
|
-
hasMore: z.boolean(),
|
|
137
|
-
});
|
|
138
|
-
/**
|
|
139
|
-
* JSON payload returned by `DELETE ${basePath}/route/history`. Deletes
|
|
140
|
-
* every persisted message + workflow snapshot tied to the caller's
|
|
141
|
-
* thread, so the next chat turn starts from a clean slate. The
|
|
142
|
-
* session cookie that anchors the thread id is preserved so the
|
|
143
|
-
* caller doesn't lose its identity - only the contents go away.
|
|
144
|
-
*
|
|
145
|
-
* `ok` is always `true` on success; the response object is kept
|
|
146
|
-
* as a struct (vs a bare 204) so future fields (e.g. `deletedAt`,
|
|
147
|
-
* `messages`) can be added without bumping the contract.
|
|
148
|
-
*
|
|
149
|
-
* Fields:
|
|
150
|
-
* - `ok`: literal `true` on success.
|
|
151
|
-
* - `agentId`: agent whose history was cleared.
|
|
152
|
-
* - `threadId`: thread id that was wiped.
|
|
153
|
-
* - `cleared`: number of messages the thread held before
|
|
154
|
-
* deletion. Useful for client-side "cleared 12 messages"
|
|
155
|
-
* toasts; `0` is reported when the thread was already empty
|
|
156
|
-
* (call is idempotent).
|
|
157
|
-
*/
|
|
158
|
-
export const MastraClearHistoryResponseSchema = z.object({
|
|
159
|
-
ok: z.literal(true),
|
|
160
|
-
agentId: z.string(),
|
|
161
|
-
threadId: z.string(),
|
|
162
|
-
cleared: z.number(),
|
|
163
|
-
});
|
|
164
|
-
/* -------------------------------- threads -------------------------------- */
|
|
165
|
-
/**
|
|
166
|
-
* A single conversation thread the resource (authenticated user) owns,
|
|
167
|
-
* as returned by `GET ${basePath}/threads`. Mirrors Mastra's
|
|
168
|
-
* `StorageThreadType` but with JSON-safe ISO-8601 timestamps (the wire
|
|
169
|
-
* can't carry `Date`).
|
|
170
|
-
*
|
|
171
|
-
* Fields:
|
|
172
|
-
* - `id`: thread id. Pass it back as the thread-selection header
|
|
173
|
-
* (`THREAD_ID_HEADER`) on a stream / history / delete call to act
|
|
174
|
-
* on this conversation.
|
|
175
|
-
* - `title`: human-readable title. Present once the agent's memory
|
|
176
|
-
* has auto-generated one (after the first turn); absent on a
|
|
177
|
-
* brand-new thread, so the UI falls back to a placeholder.
|
|
178
|
-
* - `resourceId`: owning resource (the user id). Always the caller's
|
|
179
|
-
* own resource - the list route filters by it server-side.
|
|
180
|
-
* - `createdAt` / `updatedAt`: ISO-8601 timestamps. `updatedAt` is
|
|
181
|
-
* the natural sort key for "most recent conversations first".
|
|
182
|
-
* - `metadata`: opaque thread metadata, passed through untouched.
|
|
183
|
-
*/
|
|
184
|
-
export const MastraThreadSchema = z.object({
|
|
185
|
-
id: z.string(),
|
|
186
|
-
title: z.string().optional(),
|
|
187
|
-
resourceId: z.string(),
|
|
188
|
-
createdAt: z.string(),
|
|
189
|
-
updatedAt: z.string(),
|
|
190
|
-
metadata: z.unknown().optional(),
|
|
191
|
-
});
|
|
192
|
-
/**
|
|
193
|
-
* JSON payload returned by `GET ${basePath}/threads`. One page of the
|
|
194
|
-
* caller's conversation threads, newest (`updatedAt` DESC) first.
|
|
195
|
-
*
|
|
196
|
-
* Fields:
|
|
197
|
-
* - `threads`: page of threads for the caller's resource.
|
|
198
|
-
* - `page`: zero-indexed page that produced this response.
|
|
199
|
-
* - `perPage`: number of items requested per page.
|
|
200
|
-
* - `total`: total number of threads the resource owns.
|
|
201
|
-
* - `hasMore`: true when at least one more page is available.
|
|
202
|
-
*/
|
|
203
|
-
export const MastraThreadsResponseSchema = z.object({
|
|
204
|
-
threads: z.array(MastraThreadSchema),
|
|
205
|
-
page: z.number(),
|
|
206
|
-
perPage: z.number(),
|
|
207
|
-
total: z.number(),
|
|
208
|
-
hasMore: z.boolean(),
|
|
209
|
-
});
|
|
210
|
-
/**
|
|
211
|
-
* JSON payload returned by `DELETE ${basePath}/threads` (thread id
|
|
212
|
-
* supplied via the thread-selection header / `threadId` query). Wipes
|
|
213
|
-
* the named thread and every message on it.
|
|
214
|
-
*
|
|
215
|
-
* Fields:
|
|
216
|
-
* - `ok`: literal `true` on success.
|
|
217
|
-
* - `agentId`: agent whose thread was deleted.
|
|
218
|
-
* - `threadId`: thread id that was removed.
|
|
219
|
-
* - `deleted`: `true` when a thread row existed and was removed,
|
|
220
|
-
* `false` when it was already gone (call is idempotent).
|
|
221
|
-
*/
|
|
222
|
-
export const MastraDeleteThreadResponseSchema = z.object({
|
|
223
|
-
ok: z.literal(true),
|
|
224
|
-
agentId: z.string(),
|
|
225
|
-
threadId: z.string(),
|
|
226
|
-
deleted: z.boolean(),
|
|
227
|
-
});
|
|
228
|
-
/** Longest thread title the rename route accepts (trimmed server-side). */
|
|
229
|
-
export const MASTRA_THREAD_TITLE_MAX = 200;
|
|
230
|
-
/**
|
|
231
|
-
* JSON body for `PATCH ${basePath}/threads` (thread id supplied via the
|
|
232
|
-
* thread-selection header / `threadId` query). Renames a single
|
|
233
|
-
* conversation.
|
|
234
|
-
*
|
|
235
|
-
* Fields:
|
|
236
|
-
* - `title`: the new human-readable title. Trimmed and capped at
|
|
237
|
-
* {@link MASTRA_THREAD_TITLE_MAX} characters server-side; must be
|
|
238
|
-
* non-empty after trimming.
|
|
239
|
-
*/
|
|
240
|
-
export const MastraUpdateThreadRequestSchema = z.object({
|
|
241
|
-
title: z.string().trim().min(1).max(MASTRA_THREAD_TITLE_MAX),
|
|
242
|
-
});
|
|
243
|
-
/**
|
|
244
|
-
* JSON payload returned by `PATCH ${basePath}/threads`. Echoes the
|
|
245
|
-
* renamed thread in its post-update wire shape so the client can reflect
|
|
246
|
-
* the new title without a re-fetch.
|
|
247
|
-
*
|
|
248
|
-
* Fields:
|
|
249
|
-
* - `ok`: literal `true` on success.
|
|
250
|
-
* - `agentId`: agent whose thread was renamed.
|
|
251
|
-
* - `thread`: the updated thread (carries the new `title`).
|
|
252
|
-
*/
|
|
253
|
-
export const MastraUpdateThreadResponseSchema = z.object({
|
|
254
|
-
ok: z.literal(true),
|
|
255
|
-
agentId: z.string(),
|
|
256
|
-
thread: MastraThreadSchema,
|
|
257
|
-
});
|
|
258
102
|
/* ------------------------------ suggestions ------------------------------ */
|
|
259
103
|
/**
|
|
260
104
|
* JSON payload returned by `GET ${basePath}/suggestions`.
|
|
@@ -508,6 +352,16 @@ export const GenieWriterEventSchema = z.union([
|
|
|
508
352
|
genieModel.GenieChatEventSchema,
|
|
509
353
|
GenieAgentEventSchema,
|
|
510
354
|
]);
|
|
355
|
+
/** Native AI SDK custom data-part type carrying one Genie progress event. */
|
|
356
|
+
export const GENIE_PROGRESS_PART_TYPE = "data-genie-progress";
|
|
357
|
+
/**
|
|
358
|
+
* Data attached to {@link GENIE_PROGRESS_PART_TYPE}. `toolCallId` associates
|
|
359
|
+
* progress with the native tool part that owns the request and result.
|
|
360
|
+
*/
|
|
361
|
+
export const GenieProgressPartDataSchema = z.object({
|
|
362
|
+
toolCallId: z.string(),
|
|
363
|
+
event: GenieWriterEventSchema,
|
|
364
|
+
});
|
|
511
365
|
/* ------------------------- summary + dataset ------------------------ */
|
|
512
366
|
/**
|
|
513
367
|
* Tabular payload embedded in every {@link GenieSummaryItem}
|
|
@@ -597,4 +451,4 @@ export const GenieAgentResultSchema = z.object({
|
|
|
597
451
|
summary: z.array(GenieSummaryItemSchema),
|
|
598
452
|
error: z.string().optional(),
|
|
599
453
|
});
|
|
600
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFJSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFJSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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Q0FDSCxDQUFDLENBQUM7QUFPSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ25CLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgY29udHJhY3QgZm9yIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgOiB0aGVcbiAqIGRlcGVuZGVuY3ktZnJlZSB6b2Qgc2NoZW1hcyArIGluZmVycmVkIHR5cGVzIGV2ZXJ5IGNvbnN1bWVyICh0aGVcbiAqIFJlYWN0IGNsaWVudCwgYnJvd3NlciBidW5kbGVzLCB0aGUgc2VydmVyIHBsdWdpbikgc2hhcmVzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBgcGdgLCBgZmFzdGVtYmVkYCwgYW5kIHRoZSBNYXN0cmEgcnVudGltZSBzbyB0aGVcbiAqIGNsaWVudCBjYW4gaW1wb3J0IHRoZXNlIHNjaGVtYXMgd2l0aG91dCBkcmFnZ2luZyBpbiBzZXJ2ZXItb25seVxuICogZGVwZW5kZW5jaWVzLiBUaHJlZSBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gVGhlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IGBNYXN0cmFQbHVnaW4uY2xpZW50Q29uZmlnKClgXG4gKiAgICAgIHBsdXMgdGhlIFJFU1QgcGF5bG9hZHMgaXRzIHJvdXRlcyByZXR1cm4gKG1vZGVscywgaGlzdG9yeSxcbiAqICAgICAgc3VnZ2VzdGlvbnMsIGNoYXJ0IGVtYmVkcywgc3RhdGVtZW50IGRhdGEpLiBUaGUgc2VydmVyXG4gKiAgICAgIGRlcml2ZXMgZXZlcnkgcGF0aCBmcm9tIHRoZSBwbHVnaW4gbW91bnQgYW5kIHB1Ymxpc2hlcyB0aGVcbiAqICAgICAgcmVzb2x2ZWQgcGF0aHMgc28gdGhlIGNsaWVudCBjb21wb3NlcyBVUkxzIHdpdGhvdXRcbiAqICAgICAgaGFyZC1jb2RpbmcgYC9hcGkvbWFzdHJhYCAtIHJlbmFtZSB0aGUgcGx1Z2luIGFuZCB0aGUgY2xpZW50XG4gKiAgICAgIGtlZXBzIHdvcmtpbmcuXG4gKiAgIDIuIFRoZSBgY3R4LndyaXRlcmAgZXZlbnQgdm9jYWJ1bGFyeTogdGhlIHdpcmUtZGVyaXZlZFxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9cyBmcm9tIGBAZGJ4LXRvb2xzL2dlbmllLXNoYXJlZGAgcGx1c1xuICogICAgICB0aGUgTWFzdHJhLW9ubHkgYWdlbnQgbGlmZWN5Y2xlIGV2ZW50cywgdW5pZmllZCBhc1xuICogICAgICB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0gc28gc3Vic2NyaWJlcnMgbmFycm93IGJvdGggaGFsdmVzXG4gKiAgICAgIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICogICAzLiBUaGUgR2VuaWUgYWdlbnQncyB3b3JrZmxvdyBvdXRwdXQgc2hhcGVzXG4gKiAgICAgICh7QGxpbmsgR2VuaWVBZ2VudFJlc3VsdH0gYW5kIGl0cyBzdW1tYXJ5IC8gZGF0YXNldCBpdGVtcykuXG4gKlxuICogVGhlIHJvdXRlIHNlZ21lbnRzIGxpdmUgaW4gdGhlIHNpYmxpbmcgYHJvdXRlcy50c2BcbiAqICh7QGxpbmsgTUFTVFJBX1JPVVRFU30pIGFuZCB0aGUgZW1iZWQtbWFya2VyIGdyYW1tYXIgaW4gYG1hcmtlci50c2AsXG4gKiBzbyB0aGlzIGZpbGUgc3RheXMgcHVyZWx5IGRlY2xhcmF0aXZlIChzY2hlbWFzICsgaW5mZXJyZWQgdHlwZXMpLlxuICogVGhlIGJyb3dzZXIgY2xpZW50IHRoYXQgZHJpdmVzIHRoZXNlIHJvdXRlcyAoYE1hc3RyYVBsdWdpbkNsaWVudGApXG4gKiBzaGlwcyBmcm9tIGBAZGJ4LXRvb2xzL3VpLW1hc3RyYWAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdlbmllTW9kZWwsIHR5cGUgR2VuaWVDaGF0RXZlbnQsIHR5cGUgTWVzc2FnZVN0YXR1cyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xpZW50IGNvbmZpZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTi1zYWZlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IHRoZSBNYXN0cmEgcGx1Z2luJ3NcbiAqIGBjbGllbnRDb25maWcoKWAuXG4gKlxuICogT25seSB0aGUgaXJyZWR1Y2libGUgZGF0YSBsaXZlcyBoZXJlOiBgYmFzZVBhdGhgICh0aGUgb25lIHBhdGggdGhlXG4gKiBjbGllbnQgY2FuJ3Qgb3RoZXJ3aXNlIGtub3csIHNpbmNlIGl0IGVuY29kZXMgdGhlIHBsdWdpbidzIG1vdW50XG4gKiBuYW1lKSBwbHVzIHRoZSBydW50aW1lIGFnZW50IHJvc3Rlci4gRXZlcnkgY29uY3JldGUgZW5kcG9pbnQgVVJMIGlzXG4gKiBkZXJpdmVkIGZyb20gYGJhc2VQYXRoYCBieSB0aGUgYnJvd3NlciBjbGllbnRcbiAqIChgTWFzdHJhUGx1Z2luQ2xpZW50YCkgdXNpbmcgdGhlIHNoYXJlZCB7QGxpbmsgTUFTVFJBX1JPVVRFU31cbiAqIHNlZ21lbnRzLCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gcHVibGlzaCBwZXItcm91dGUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBiYXNlUGF0aGA6IHBsdWdpbiBtb3VudCBwYXRoLiBBbHdheXMgYC9hcGkvPHBsdWdpbk5hbWU+YC4gRmVlZFxuICogICAgIGl0IHRvIGBuZXcgTWFzdHJhUGx1Z2luQ2xpZW50KGNvbmZpZylgIChmcm9tXG4gKiAgICAgYEBkYngtdG9vbHMvdWktbWFzdHJhYCkgdG8gZ2V0IGEgdHlwZWQgY2xpZW50IG92ZXIgZXZlcnlcbiAqICAgICByb3V0ZSBwbHVzIHRoZSBzdGFuZGFyZCBhZ2VudCBzdHJlYW0uXG4gKiAgIC0gYGRlZmF1bHRBZ2VudGA6IGFnZW50IGlkIHRoZSBjbGllbnQgY29udmVyc2VzIHdpdGggd2hlbiBpdFxuICogICAgIGRvZXNuJ3QgbmFtZSBvbmUuXG4gKiAgIC0gYGFnZW50c2A6IGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgaWQgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICogICAtIGBmZWVkYmFja0VuYWJsZWRgOiB3aGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIGxvZyB1c2VyIGZlZWRiYWNrIHRvXG4gKiAgICAgTUxmbG93IChNTGZsb3cgdHJhY2luZyBpcyBjb25maWd1cmVkKS4gRHJpdmVzIHdoZXRoZXIgdGhlIGNoYXQgVUlcbiAqICAgICBzdXJmYWNlcyB0aHVtYnMgLyBjb21tZW50IGNvbnRyb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgIHNvIGFcbiAqICAgICBjb25maWcgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHNlcnZlciAod2l0aG91dCB0aGUgZmllbGQpIHBhcnNlc1xuICogICAgIGNsZWFubHkgdG8gXCJvZmZcIi5cbiAqICAgLSBgY2hhdEFsd2F5c0F2YWlsYWJsZWA6IHdoZXRoZXIgdGhlIGFnZW50cycgRGF0YWJyaWNrcyBjYWxscyBydW4gYXMgdGhlXG4gKiAgICAgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIHJhdGhlciB0aGFuIG9uLWJlaGFsZi1vZiB0aGUgc2lnbmVkLWluIHVzZXIuIFdoZW5cbiAqICAgICBgdHJ1ZWAgdGhlIGNoYXQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIHNvIGEgVUkgdGhhdFxuICogICAgIGhpZGVzIGNoYXQgd2hlbiB0aGUgT0JPIHRva2VuIGlzIGFic2VudCBzaG91bGQgc2hvdyBpdCBhbnl3YXkuIERlZmF1bHRzXG4gKiAgICAgdG8gYGZhbHNlYCAodGhlIE9CTyAvIGBcInVzZXJcImAgaWRlbnRpdHkgbW9kZSksIHNvIGFuIG9sZGVyIHNlcnZlciB3aXRob3V0XG4gKiAgICAgdGhlIGZpZWxkIGtlZXBzIHRoZSBPQk8tZ2F0ZWQgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGJhc2VQYXRoOiB6LnN0cmluZygpLFxuICBkZWZhdWx0QWdlbnQ6IHouc3RyaW5nKCksXG4gIGFnZW50czogei5hcnJheSh6LnN0cmluZygpKSxcbiAgZmVlZGJhY2tFbmFibGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2hhdEFsd2F5c0F2YWlsYWJsZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG59KTtcbi8qKiBCcm93c2VyLXNhZmUgTWFzdHJhIHBsdWdpbiBkZXNjcmlwdG9yIHVzZWQgdG8gY29uc3RydWN0IHJvdXRlIGFuZCBzdHJlYW0gY2xpZW50cy4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYUNsaWVudENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZGVmYXVsdC1tb2RlbFs/YWdlbnRJZD1dYC4gVGhlXG4gKiBzdGF0aWMgZGVmYXVsdCBtb2RlbCB0aGUgYWdlbnQgcmVzb2x2ZXMgdG8gd2hlbiB0aGUgY2xpZW50IHBpbnMgbm8gbW9kZWwsXG4gKiBhcyBib3RoIHRoZSByYXcgc2VydmluZy1lbmRwb2ludCBgbW9kZWxgIGlkIGFuZCBhIGBkaXNwbGF5TmFtZWAgKHRoZVxuICogaHVtYW5pemVkIGxhYmVsIHRoZSBwaWNrZXIgc2hvd3MpLiBCb3RoIGFyZSBgbnVsbGAgd2hlbiB0aGUgYWdlbnQgZGVjaWRlc1xuICogaXRzIG1vZGVsIGR5bmFtaWNhbGx5IGF0IGNhbGwgdGltZSAobm90aGluZyBzdGF0aWMgdG8gYWR2ZXJ0aXNlKS4gTGV0cyB0aGVcbiAqIHBpY2tlciBsYWJlbCBpdHMgZGVmYXVsdCBvcHRpb24gV0lUSE9VVCB3YWl0aW5nIG9uIHRoZSBgL21vZGVsc2AgY2F0YWxvZ3VlLFxuICogc28gaXQgbmV2ZXIgZmxhc2hlcyBhIHJhdyBpZCBvbiBsb2FkLiBLZXB0IG9mZiB0aGUgc3RhdGljIGJvb3RzdHJhcFxuICogYGNsaWVudENvbmZpZ2Agb24gcHVycG9zZTogaXQgaXMgcGVyLWFnZW50IGFuZCBjYW4gYmUgZHluYW1pYywgc28gaXQgaXNcbiAqIGZldGNoZWQgbGlrZSBgL21vZGVsc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgZGlzcGxheU5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuLyoqIFJlc3BvbnNlIGlkZW50aWZ5aW5nIHRoZSBtb2RlbCBjdXJyZW50bHkgc2VsZWN0ZWQgYXMgdGhlIHBsdWdpbiBkZWZhdWx0LiAqL1xuZXhwb3J0IHR5cGUgRGVmYXVsdE1vZGVsUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbW9kZWwgY2F0YWxvZ3VlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9tb2RlbHNgLiBXcmFwcyB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgbW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYX0gKHJlLWV4cG9ydGVkIGZyb21cbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGApIHNvIHRoZSBjYXRhbG9ndWVcbiAqIGRlc2NyaXB0b3IgaGFzIGEgc2luZ2xlIGRlZmluaXRpb24gdGhlIGNsaWVudCwgc2VydmVyLCBhbmQgdGhlXG4gKiBzdGFuZGFsb25lIGBAZGJ4LXRvb2xzL21vZGVsYCB0b29sa2l0IGFsbCBhZ3JlZSBvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5kcG9pbnRzOiB6LmFycmF5KG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEpLFxufSk7XG4vKiogQXZhaWxhYmxlIERhdGFicmlja3Mgc2VydmluZyBlbmRwb2ludHMgcmV0dXJuZWQgYnkgdGhlIE1hc3RyYSBtb2RlbCByb3V0ZS4gKi9cbmV4cG9ydCB0eXBlIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXQgaGlzdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFN0cnVjdHVyYWwgc2hhcGUgZm9yIGFuIEFJIFNESyBWNSBgVUlNZXNzYWdlYC4gRGVmaW5lZCBsb2NhbGx5XG4gKiBzbyB0aGUgc2hhcmVkIHR5cGVzIHBhY2thZ2Ugc3RheXMgZGVwZW5kZW5jeS1mcmVlIChubyBgYWlgXG4gKiBpbXBvcnQpLiBUaGUgcnVudGltZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGAvcm91dGUvaGlzdG9yeWAgZW5kcG9pbnRcbiAqIGFyZSBwcm9kdWNlZCBieSBgdG9BSVNka1Y1TWVzc2FnZXNgIGFuZCBhcmUgMToxIGNvbXBhdGlibGUgd2l0aFxuICogYFVJTWVzc2FnZWAgZnJvbSB0aGUgYGFpYCBwYWNrYWdlOyBjbGllbnRzIGNhbiBzYWZlbHkgY2FzdCB3aGVuXG4gKiBuZWVkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcm9sZTogei5lbnVtKFtcInN5c3RlbVwiLCBcInVzZXJcIiwgXCJhc3Npc3RhbnRcIl0pLFxuICBwYXJ0czogei5hcnJheSh6LnVua25vd24oKSkucmVhZG9ubHkoKSxcbiAgbWV0YWRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG59KTtcbi8qKiBQZXJzaXN0ZWQgY2hhdCBtZXNzYWdlIG5vcm1hbGl6ZWQgaW50byB0aGUgYnJvd3NlciBVSSBtZXNzYWdlIGNvbnRyYWN0LiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2VTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L3JvdXRlL2hpc3RvcnlgLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgdWlNZXNzYWdlc2A6IHBhZ2Ugb2YgVUktZm9ybWF0dGVkIG1lc3NhZ2VzLCBvbGRlc3QgLT4gbmV3ZXN0LlxuICogICAgIEFsd2F5cyBjaHJvbm9sb2dpY2FsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcGFnaW5hdGlvblxuICogICAgIG9yZGVyIHNvIHRoZSBjbGllbnQgY2FuIHByZXBlbmQgdGhlIGFycmF5IHRvIHRoZSBsaXZlXG4gKiAgICAgdHJhbnNjcmlwdCB3aXRob3V0IHNvcnRpbmcuXG4gKiAgIC0gYHBhZ2VgOiB6ZXJvLWluZGV4ZWQgcGFnZSB0aGF0IHByb2R1Y2VkIHRoaXMgcmVzcG9uc2UuXG4gKiAgIC0gYHBlclBhZ2VgOiBudW1iZXIgb2YgaXRlbXMgcmVxdWVzdGVkIHBlciBwYWdlLlxuICogICAtIGB0b3RhbGA6IHRvdGFsIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgdGhyZWFkLlxuICogICAtIGBoYXNNb3JlYDogdHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSBvbGRlciBwYWdlIGlzIHN0aWxsXG4gKiAgICAgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhSGlzdG9yeVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICB1aU1lc3NhZ2VzOiB6LmFycmF5KE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2VTY2hlbWEpLFxuICBwYWdlOiB6Lm51bWJlcigpLFxuICBwZXJQYWdlOiB6Lm51bWJlcigpLFxuICB0b3RhbDogei5udW1iZXIoKSxcbiAgaGFzTW9yZTogei5ib29sZWFuKCksXG59KTtcbi8qKiBPbmUgY3Vyc29yIHBhZ2Ugb2Ygbm9ybWFsaXplZCBtZXNzYWdlcyBmb3IgYSBNYXN0cmEgdGhyZWFkLiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhSGlzdG9yeVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhSGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS9yb3V0ZS9oaXN0b3J5YC4gRGVsZXRlc1xuICogZXZlcnkgcGVyc2lzdGVkIG1lc3NhZ2UgKyB3b3JrZmxvdyBzbmFwc2hvdCB0aWVkIHRvIHRoZSBjYWxsZXInc1xuICogdGhyZWFkLCBzbyB0aGUgbmV4dCBjaGF0IHR1cm4gc3RhcnRzIGZyb20gYSBjbGVhbiBzbGF0ZS4gVGhlXG4gKiBzZXNzaW9uIGNvb2tpZSB0aGF0IGFuY2hvcnMgdGhlIHRocmVhZCBpZCBpcyBwcmVzZXJ2ZWQgc28gdGhlXG4gKiBjYWxsZXIgZG9lc24ndCBsb3NlIGl0cyBpZGVudGl0eSAtIG9ubHkgdGhlIGNvbnRlbnRzIGdvIGF3YXkuXG4gKlxuICogYG9rYCBpcyBhbHdheXMgYHRydWVgIG9uIHN1Y2Nlc3M7IHRoZSByZXNwb25zZSBvYmplY3QgaXMga2VwdFxuICogYXMgYSBzdHJ1Y3QgKHZzIGEgYmFyZSAyMDQpIHNvIGZ1dHVyZSBmaWVsZHMgKGUuZy4gYGRlbGV0ZWRBdGAsXG4gKiBgbWVzc2FnZXNgKSBjYW4gYmUgYWRkZWQgd2l0aG91dCBidW1waW5nIHRoZSBjb250cmFjdC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIGhpc3Rvcnkgd2FzIGNsZWFyZWQuXG4gKiAgIC0gYHRocmVhZElkYDogdGhyZWFkIGlkIHRoYXQgd2FzIHdpcGVkLlxuICogICAtIGBjbGVhcmVkYDogbnVtYmVyIG9mIG1lc3NhZ2VzIHRoZSB0aHJlYWQgaGVsZCBiZWZvcmVcbiAqICAgICBkZWxldGlvbi4gVXNlZnVsIGZvciBjbGllbnQtc2lkZSBcImNsZWFyZWQgMTIgbWVzc2FnZXNcIlxuICogICAgIHRvYXN0czsgYDBgIGlzIHJlcG9ydGVkIHdoZW4gdGhlIHRocmVhZCB3YXMgYWxyZWFkeSBlbXB0eVxuICogICAgIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBjbGVhcmVkOiB6Lm51bWJlcigpLFxufSk7XG4vKiogUmVzdWx0IG9mIGNsZWFyaW5nIHRoZSBtZXNzYWdlcyBvd25lZCBieSBvbmUgTWFzdHJhIHRocmVhZC4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aHJlYWRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQSBzaW5nbGUgY29udmVyc2F0aW9uIHRocmVhZCB0aGUgcmVzb3VyY2UgKGF1dGhlbnRpY2F0ZWQgdXNlcikgb3ducyxcbiAqIGFzIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vdGhyZWFkc2AuIE1pcnJvcnMgTWFzdHJhJ3NcbiAqIGBTdG9yYWdlVGhyZWFkVHlwZWAgYnV0IHdpdGggSlNPTi1zYWZlIElTTy04NjAxIHRpbWVzdGFtcHMgKHRoZSB3aXJlXG4gKiBjYW4ndCBjYXJyeSBgRGF0ZWApLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgaWRgOiB0aHJlYWQgaWQuIFBhc3MgaXQgYmFjayBhcyB0aGUgdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXJcbiAqICAgICAoYFRIUkVBRF9JRF9IRUFERVJgKSBvbiBhIHN0cmVhbSAvIGhpc3RvcnkgLyBkZWxldGUgY2FsbCB0byBhY3RcbiAqICAgICBvbiB0aGlzIGNvbnZlcnNhdGlvbi5cbiAqICAgLSBgdGl0bGVgOiBodW1hbi1yZWFkYWJsZSB0aXRsZS4gUHJlc2VudCBvbmNlIHRoZSBhZ2VudCdzIG1lbW9yeVxuICogICAgIGhhcyBhdXRvLWdlbmVyYXRlZCBvbmUgKGFmdGVyIHRoZSBmaXJzdCB0dXJuKTsgYWJzZW50IG9uIGFcbiAqICAgICBicmFuZC1uZXcgdGhyZWFkLCBzbyB0aGUgVUkgZmFsbHMgYmFjayB0byBhIHBsYWNlaG9sZGVyLlxuICogICAtIGByZXNvdXJjZUlkYDogb3duaW5nIHJlc291cmNlICh0aGUgdXNlciBpZCkuIEFsd2F5cyB0aGUgY2FsbGVyJ3NcbiAqICAgICBvd24gcmVzb3VyY2UgLSB0aGUgbGlzdCByb3V0ZSBmaWx0ZXJzIGJ5IGl0IHNlcnZlci1zaWRlLlxuICogICAtIGBjcmVhdGVkQXRgIC8gYHVwZGF0ZWRBdGA6IElTTy04NjAxIHRpbWVzdGFtcHMuIGB1cGRhdGVkQXRgIGlzXG4gKiAgICAgdGhlIG5hdHVyYWwgc29ydCBrZXkgZm9yIFwibW9zdCByZWNlbnQgY29udmVyc2F0aW9ucyBmaXJzdFwiLlxuICogICAtIGBtZXRhZGF0YWA6IG9wYXF1ZSB0aHJlYWQgbWV0YWRhdGEsIHBhc3NlZCB0aHJvdWdoIHVudG91Y2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVRocmVhZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlc291cmNlSWQ6IHouc3RyaW5nKCksXG4gIGNyZWF0ZWRBdDogei5zdHJpbmcoKSxcbiAgdXBkYXRlZEF0OiB6LnN0cmluZygpLFxuICBtZXRhZGF0YTogei51bmtub3duKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIFVzZXItdmlzaWJsZSB0aHJlYWQgbWV0YWRhdGEsIHNlcGFyYXRlIGZyb20gdGhlIHRocmVhZCdzIG1lc3NhZ2UgaGlzdG9yeS4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYVRocmVhZCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVRocmVhZFNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vdGhyZWFkc2AuIE9uZSBwYWdlIG9mIHRoZVxuICogY2FsbGVyJ3MgY29udmVyc2F0aW9uIHRocmVhZHMsIG5ld2VzdCAoYHVwZGF0ZWRBdGAgREVTQykgZmlyc3QuXG4gKlxuICogRmllbGRzOlxuICogICAtIGB0aHJlYWRzYDogcGFnZSBvZiB0aHJlYWRzIGZvciB0aGUgY2FsbGVyJ3MgcmVzb3VyY2UuXG4gKiAgIC0gYHBhZ2VgOiB6ZXJvLWluZGV4ZWQgcGFnZSB0aGF0IHByb2R1Y2VkIHRoaXMgcmVzcG9uc2UuXG4gKiAgIC0gYHBlclBhZ2VgOiBudW1iZXIgb2YgaXRlbXMgcmVxdWVzdGVkIHBlciBwYWdlLlxuICogICAtIGB0b3RhbGA6IHRvdGFsIG51bWJlciBvZiB0aHJlYWRzIHRoZSByZXNvdXJjZSBvd25zLlxuICogICAtIGBoYXNNb3JlYDogdHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSBtb3JlIHBhZ2UgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICB0aHJlYWRzOiB6LmFycmF5KE1hc3RyYVRocmVhZFNjaGVtYSksXG4gIHBhZ2U6IHoubnVtYmVyKCksXG4gIHBlclBhZ2U6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLFxuICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbn0pO1xuLyoqIE9uZSBjdXJzb3IgcGFnZSBvZiBNYXN0cmEgdGhyZWFkcyBvd25lZCBieSB0aGUgYWN0aXZlIHJlc291cmNlLiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS90aHJlYWRzYCAodGhyZWFkIGlkXG4gKiBzdXBwbGllZCB2aWEgdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC8gYHRocmVhZElkYCBxdWVyeSkuIFdpcGVzXG4gKiB0aGUgbmFtZWQgdGhyZWFkIGFuZCBldmVyeSBtZXNzYWdlIG9uIGl0LlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgdGhyZWFkIHdhcyBkZWxldGVkLlxuICogICAtIGB0aHJlYWRJZGA6IHRocmVhZCBpZCB0aGF0IHdhcyByZW1vdmVkLlxuICogICAtIGBkZWxldGVkYDogYHRydWVgIHdoZW4gYSB0aHJlYWQgcm93IGV4aXN0ZWQgYW5kIHdhcyByZW1vdmVkLFxuICogICAgIGBmYWxzZWAgd2hlbiBpdCB3YXMgYWxyZWFkeSBnb25lIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBkZWxldGVkOiB6LmJvb2xlYW4oKSxcbn0pO1xuLyoqIFJlc3VsdCBvZiBkZWxldGluZyBvbmUgdGhyZWFkIGFuZCBpdHMgYXNzb2NpYXRlZCBtZW1vcnkgcmVjb3Jkcy4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYURlbGV0ZVRocmVhZFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiogTG9uZ2VzdCB0aHJlYWQgdGl0bGUgdGhlIHJlbmFtZSByb3V0ZSBhY2NlcHRzICh0cmltbWVkIHNlcnZlci1zaWRlKS4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfVEhSRUFEX1RJVExFX01BWCA9IDIwMDtcblxuLyoqXG4gKiBKU09OIGJvZHkgZm9yIGBQQVRDSCAke2Jhc2VQYXRofS90aHJlYWRzYCAodGhyZWFkIGlkIHN1cHBsaWVkIHZpYSB0aGVcbiAqIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC8gYHRocmVhZElkYCBxdWVyeSkuIFJlbmFtZXMgYSBzaW5nbGVcbiAqIGNvbnZlcnNhdGlvbi5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYHRpdGxlYDogdGhlIG5ldyBodW1hbi1yZWFkYWJsZSB0aXRsZS4gVHJpbW1lZCBhbmQgY2FwcGVkIGF0XG4gKiAgICAge0BsaW5rIE1BU1RSQV9USFJFQURfVElUTEVfTUFYfSBjaGFyYWN0ZXJzIHNlcnZlci1zaWRlOyBtdXN0IGJlXG4gKiAgICAgbm9uLWVtcHR5IGFmdGVyIHRyaW1taW5nLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVXBkYXRlVGhyZWFkUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdGl0bGU6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5tYXgoTUFTVFJBX1RIUkVBRF9USVRMRV9NQVgpLFxufSk7XG4vKiogVmFsaWRhdGVkIG11dGFibGUgZmllbGRzIGFjY2VwdGVkIHdoZW4gcmVuYW1pbmcgYSBNYXN0cmEgdGhyZWFkLiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhVXBkYXRlVGhyZWFkUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3RTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgUEFUQ0ggJHtiYXNlUGF0aH0vdGhyZWFkc2AuIEVjaG9lcyB0aGVcbiAqIHJlbmFtZWQgdGhyZWFkIGluIGl0cyBwb3N0LXVwZGF0ZSB3aXJlIHNoYXBlIHNvIHRoZSBjbGllbnQgY2FuIHJlZmxlY3RcbiAqIHRoZSBuZXcgdGl0bGUgd2l0aG91dCBhIHJlLWZldGNoLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgdGhyZWFkIHdhcyByZW5hbWVkLlxuICogICAtIGB0aHJlYWRgOiB0aGUgdXBkYXRlZCB0aHJlYWQgKGNhcnJpZXMgdGhlIG5ldyBgdGl0bGVgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBvazogei5saXRlcmFsKHRydWUpLFxuICBhZ2VudElkOiB6LnN0cmluZygpLFxuICB0aHJlYWQ6IE1hc3RyYVRocmVhZFNjaGVtYSxcbn0pO1xuLyoqIFVwZGF0ZWQgdGhyZWFkIHJldHVybmVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZW5hbWUuICovXG5leHBvcnQgdHlwZSBNYXN0cmFVcGRhdGVUaHJlYWRSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1Z2dlc3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L3N1Z2dlc3Rpb25zYC5cbiAqXG4gKiBDYXJyaWVzIHRoZSBjdXJhdGVkIHN0YXJ0ZXIgcXVlc3Rpb25zIGZvciBhbiBhZ2VudCdzIEdlbmllIHNwYWNlIC1cbiAqIHRoZSBgc2FtcGxlX3F1ZXN0aW9uc2AgYW4gYXV0aG9yIGNvbmZpZ3VyZWQgb24gdGhlIHNwYWNlLCBzdXJmYWNlZFxuICogYXMgb25lLXRhcCBwcm9tcHRzIG9uIHRoZSBjaGF0J3MgZW1wdHkgc3RhdGUuIGBxdWVzdGlvbnNgIGlzIGVtcHR5XG4gKiB3aGVuIHRoZSBhZ2VudCBoYXMgbm8gR2VuaWUgc3BhY2UgKG9yIHRoZSBzcGFjZSBkZWZpbmVzIG5vbmUpLCBzb1xuICogdGhlIGNsaWVudCByZW5kZXJzIG5vdGhpbmcgaW4gdGhhdCBjYXNlIHJhdGhlciB0aGFuIGZhbGxpbmcgYmFjayB0b1xuICogYnVpbHQtaW4gZXhhbXBsZSBwcm9tcHRzLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVlc3Rpb25zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxufSk7XG4vKiogRm9sbG93LXVwIHByb21wdHMgc3VnZ2VzdGVkIGZvciB0aGUgY3VycmVudCBhZ2VudCBhbmQgdGhyZWFkIGNvbnRleHQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjaGFydHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQWxsb3dlZCBjaGFydCB0eXBlcyB0aGUgcGxhbm5lciBjYW4gcGljay4gRGVmaW5lZCBhcyBhXG4gKiBkaXNjcmltaW5hdGVkIGxpdGVyYWwgdW5pb24gc28gZWFjaCB2YXJpYW50IGNhcnJpZXMgaXRzIG93blxuICogYC5kZXNjcmliZSgpYCBjbGF1c2UgLSB0aGUgc2VydmVyLXNpZGUgcGxhbm5lcidzIHByb21wdFxuICogZm9ybWF0dGVyIHdhbGtzIGAub3B0aW9uc2AgdG8gaW5saW5lIHRoZSBkZXNjcmlwdGlvbnMgaW50byB0aGVcbiAqIG1vZGVsIGluc3RydWN0aW9ucywga2VlcGluZyB0aGUgcHJvbXB0IGluIGxvY2stc3RlcCB3aXRoIHRoZVxuICogc2NoZW1hIGJ5IGNvbnN0cnVjdGlvbi4gVGhlIHJ1bnRpbWUgdHlwZSBpcyB0aGUgcGxhaW4gc3RyaW5nXG4gKiB1bmlvbiAoYFwiYmFyXCIgfCBcImxpbmVcIiB8IC4uLmApLCBzbyBjb25zdW1lcnMgdGhhdCBqdXN0IG5lZWQgYVxuICogZGlzY3JpbWluYXRvciB2YWx1ZSBiZWhhdmUgdGhlIHNhbWUgYXMgaWYgaXQgd2VyZSBhXG4gKiBgei5lbnVtKFsuLi5dKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFR5cGVTY2hlbWEgPSB6XG4gIC51bmlvbihbXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJiYXJcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJjb21wYXJpbmcgYSBudW1lcmljIHZhbHVlIGFjcm9zcyBhIHNtYWxsL21lZGl1bSBzZXQgb2YgZGlzY3JldGUgY2F0ZWdvcmllcyAodG9wLU4sIHJhbmtpbmcsIGdyb3VwLWJ5KVwiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImhvcml6b250YWxCYXJcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJzYW1lIGFzIGJhciBidXQgY2F0ZWdvcmllcyBvbiB0aGUgeS1heGlzIC0gcHJlZmVyIHdoZW4gY2F0ZWdvcnkgbGFiZWxzIGFyZSBsb25nIG9yIHRoZXJlIGFyZSBtYW55IGNhdGVnb3JpZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJsaW5lXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwib3JkZXJlZC1heGlzIHRyZW5kICh0aW1lIHNlcmllcywgc2VxdWVuY2UsIHJhbmspIHdoZXJlIHRoZSB4LWF4aXMgaGFzIG5hdHVyYWwgb3JkZXJcIixcbiAgICAgICksXG4gICAgei5saXRlcmFsKFwiYXJlYVwiKS5kZXNjcmliZShcInN0YWNrZWQtdHJlbmQgZW1waGFzaXMgLSBjdW11bGF0aXZlIG9yIGNvbXBvc2l0aW9uIG92ZXIgdGltZVwiKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImNvbWJvXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibWl4ZWQgYmFyICsgbGluZSAob3IgYXJlYSkgc2VyaWVzIG9uIHNoYXJlZCBjYXRlZ29yaWVzIC0gZS5nLiB2b2x1bWUgYmFycyB3aXRoIGEgcmF0ZS90cmVuZCBsaW5lOyBzZXQgZWFjaCBzZXJpZXMnIGB0eXBlYFwiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcIndhdGVyZmFsbFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcImJyaWRnZSAvIHJ1bm5pbmctdG90YWwgb2Ygc2lnbmVkIHN0ZXAgdmFsdWVzIChzdGFydCAtPiBkZWx0YXMgLT4gZW5kKSBhY3Jvc3Mgb3JkZXJlZCBjYXRlZ29yaWVzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwic2NhdHRlclwiKVxuICAgICAgLmRlc2NyaWJlKFwidHdvLW51bWVyaWMtYXhpcyBjb3JyZWxhdGlvbnMgYmV0d2VlbiBmaWVsZHMgKGUuZy4gcHJpY2UgdnMuIHF1YW50aXR5KVwiKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImhlYXRtYXBcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJtYXRyaXggaW50ZW5zaXR5IGFjcm9zcyB0d28gY2F0ZWdvcnkgYXhlcyAtIHggbGFiZWxzIGluIGBjYXRlZ29yaWVzYCwgb25lIHNlcmllcyBwZXIgbWF0cml4IHJvdyBob2xkaW5nIHRoYXQgcm93J3MgdmFsdWVzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwicmFkYXJcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJtdWx0aS1kaW1lbnNpb24gY29tcGFyaXNvbiBhY3Jvc3MgYSBmaXhlZCBzZXQgb2YgYXhlcyAob25lIGluZGljYXRvciBwZXIgY2F0ZWdvcnksIG9uZSBvciBtb3JlIHNlcmllcyBvZiB2YWx1ZXMpXCIsXG4gICAgICApLFxuICAgIHoubGl0ZXJhbChcInBpZVwiKS5kZXNjcmliZShcInBhcnRzLW9mLWEtd2hvbGUgd2hlbiAyLTcgY2F0ZWdvcmllcyBzdW0gdG8gYSBtZWFuaW5nZnVsIHRvdGFsXCIpLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiZnVubmVsXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwib3JkZXJlZCBzdGFnZXMgdGhhdCBzaHJpbmsgKGNvbnZlcnNpb24sIHBpcGVsaW5lLCBhdHRyaXRpb24pIC0gYHtuYW1lLCB2YWx1ZX1gIHNsaWNlc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInRyZWVtYXBcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJwYXJ0cy1vZi1hLXdob2xlIGFzIG5lc3RlZCByZWN0YW5nbGVzIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiB+NyBjYXRlZ29yaWVzIG9yIGEgZmxhdCBoaWVyYXJjaHkgb2YgYHtuYW1lLCB2YWx1ZX1gIHNsaWNlc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImN1c3RvbVwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcImVzY2FwZSBoYXRjaCBmb3IgYSBjaGFydCBub25lIG9mIHRoZSBhYm92ZSBjYW4gZXhwcmVzcyAoc2Fua2V5LCBib3hwbG90LCBjYW5kbGVzdGljaywgc3VuYnVyc3QsIGdhdWdlLCBuZXR3b3JrIGdyYXBoLCBjYWxlbmRhciwgcGFyYWxsZWwsIC4uLikgLSBoYW5kLXdyaXRlIHRoZSBjb21wbGV0ZSBFY2hhcnRzIG9wdGlvbiBpbnN0ZWFkIG9mIGEgcGxhblwiLFxuICAgICAgKSxcbiAgXSlcbiAgLmRlc2NyaWJlKFwiVGhlIGNoYXJ0IHNoYXBlIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBkYXRhIGFuZCBpbnRlbnQuXCIpO1xuLyoqIFN1cHBvcnRlZCBjaGFydCBmYW1pbHkgc2VsZWN0ZWQgYnkgdGhlIHNlcnZlci1zaWRlIGNoYXJ0IHBsYW5uZXIuICovXG5leHBvcnQgdHlwZSBDaGFydFR5cGUgPSB6LmluZmVyPHR5cGVvZiBDaGFydFR5cGVTY2hlbWE+O1xuXG4vKipcbiAqIFJlc29sdmVkIGNoYXJ0IHBsYW4gYSBzZXR0bGVkIGNoYXJ0IGVudHJ5IGNhcnJpZXMgb24gaXRzXG4gKiBgcmVzdWx0YCBmaWVsZC4gYG9wdGlvbmAgaXMgdGhlIGZ1bGwgRWNoYXJ0cyBzcGVjOyBwYXNzXG4gKiBzdHJhaWdodCBpbnRvIGA8UmVhY3RFQ2hhcnRzIG9wdGlvbj17Li4ufT5gLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxuICBvcHRpb246IHpcbiAgICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRnVsbHktcmVzb2x2ZWQgRWNoYXJ0cyBgRUNoYXJ0c09wdGlvbmAgSlNPTiBmb3IgdGhpcyBjaGFydCAtIGRyb3AgZGlyZWN0bHkgaW50byBhbiBFY2hhcnRzIGluc3RhbmNlIChvciBgPFJlYWN0RUNoYXJ0cyBvcHRpb249ey4uLn0gLz5gKSB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4gSW5jbHVkZXMgdGl0bGUgLyB0b29sdGlwIC8gbGVnZW5kIC8gZ3JpZCAvIGF4aXMgLyBzZXJpZXMgZGVmYXVsdHMgYWxyZWFkeSBtZXJnZWQgaW4uXCIsXG4gICAgKSxcbn0pO1xuLyoqIFJlbmRlci1yZWFkeSBjaGFydCBwbGFuIHN0b3JlZCBiZWhpbmQgYSBjaGFydCBlbWJlZCBpZGVudGlmaWVyLiAqL1xuZXhwb3J0IHR5cGUgQ2hhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBDaGFydFJlc3VsdFNjaGVtYT47XG5cbi8qKlxuICogV2lyZS1mb3JtYXQgQU5EIHNlcnZlci1zaWRlIGNhY2hlIHNoYXBlIGZvciBhIGNoYXJ0IGVudHJ5LlxuICogVGhyZWUgbGlmZWN5Y2xlIHN0YXRlcyBpbmZlcnJlZCBmcm9tIHRoZSB0d28gb3B0aW9uYWwgZmllbGRzXG4gKiAobm8gZGlzY3JpbWluYXRvciBuZWVkZWQpOlxuICpcbiAqICAgLSBgcmVzdWx0YCBzZXQgICAgICAgICAgICAgICAgICAgIC0+IGNoYXJ0IGlzIHJlYWR5IHRvIHJlbmRlclxuICogICAtIGBlcnJvcmAgc2V0ICAgICAgICAgICAgICAgICAgICAgLT4gcGxhbm5lciAvIGRhdGEgZmV0Y2ggZmFpbGVkXG4gKiAgIC0gYm90aCBgcmVzdWx0YCBhbmQgYGVycm9yYCB1bnNldCAtPiBzdGlsbCBwcm9jZXNzaW5nXG4gKlxuICogYG9wdGlvbmAgaXMgdHlwZWQgYXMgYSBnZW5lcmljIHJlY29yZCBzbyB0aGlzIHBhY2thZ2Ugc3RheXNcbiAqIGRlcGVuZGVuY3ktZnJlZSBvZiBgZWNoYXJ0c2AuIFRoZSBzZXJ2ZXIgKGBjaGFydC50c2ApIGltcG9ydHNcbiAqIHRoaXMgc2NoZW1hIGRpcmVjdGx5OyB0aGUgZGVtbyBjbGllbnQgcG9sbHMgdGhlXG4gKiBgL2VtYmVkL2NoYXJ0LzppZGAgcm91dGUgYW5kIHBhcnNlcyByZXNwb25zZXMgYWdhaW5zdCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydElkOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJPcGFxdWUgaWQgbWludGVkIGJ5IHRoZSBjaGFydCBzdWJzeXN0ZW0uIEVtYmVkIHZlcmJhdGltIGFzIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgaW4gYWdlbnQgcHJvc2U7IHRoZSBob3N0IFVJIHJlc29sdmVzIGl0IGFnYWluc3QgdGhpcyBjYWNoZSBlbnRyeS5cIixcbiAgICApLFxuICBlcnJvcjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFcnJvciBtZXNzYWdlIHdoZW4gdGhlIGNoYXJ0IGZhaWxlZCAoZGF0YSBmZXRjaCBlcnJvciwgcGxhbm5lciBlcnJvciwgZW1wdHkgZGF0YXNldCkuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGByZXN1bHRgOyBhYnNlbnQgb24gc3VjY2VzcyBhbmQgd2hpbGUgcHJvY2Vzc2luZy5cIixcbiAgICApLFxuICByZXN1bHQ6IENoYXJ0UmVzdWx0U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJSZXNvbHZlZCBjaGFydCBwbGFuLiBBYnNlbnQgd2hpbGUgcHJvY2Vzc2luZyBhbmQgd2hlbiB0aGUgcnVuIGVycm9yZWQuXCIsXG4gICksXG59KTtcbi8qKiBQb2xsYWJsZSBjaGFydC1jYWNoZSBlbnRyeSByZXByZXNlbnRpbmcgcGVuZGluZywgc3VjY2Vzc2Z1bCwgb3IgZmFpbGVkIHBsYW5uaW5nLiAqL1xuZXhwb3J0IHR5cGUgQ2hhcnQgPSB6LmluZmVyPHR5cGVvZiBDaGFydFNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGVtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogV2lyZS1mb3JtYXQgcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L2VtYmVkL2RhdGEvOmlkYC5cbiAqXG4gKiBNaXJyb3JzIHRoZSBhZ2VudC1zaWRlIGBnZXRfc3RhdGVtZW50YCB0b29sJ3Mgb3V0cHV0IHNvIHRoZVxuICogaG9zdCBVSSBhbmQgdGhlIExMTSBzZWUgdGhlIGV4YWN0IHNhbWUgc2hhcGUgZm9yIHRoZSBzYW1lXG4gKiBzdGF0ZW1lbnQ7IHRoZSByb3V0ZSBpcyB3aGF0IHJlc29sdmVzIGBbZGF0YTo8c3RhdGVtZW50X2lkPl1gXG4gKiBtYXJrZXJzIHRoZSBhZ2VudCBlbWJlZHMgaW4gcHJvc2UuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBjb2x1bW5zYDogY29sdW1uIG5hbWVzIGluIGRlY2xhcmF0aW9uIG9yZGVyLlxuICogICAtIGByb3dzYDogcm93IHJlY29yZHMga2V5ZWQgYnkgY29sdW1uIG5hbWUuIENlbGwgdmFsdWVzIGFyZVxuICogICAgIGVpdGhlciBjb2VyY2VkIG51bWJlcnMgb3IgdGhlIG9yaWdpbmFsIHN0cmluZ3MgKEdlbmllIC9cbiAqICAgICBTdGF0ZW1lbnQgRXhlY3V0aW9uIHJldHVybnMgZXZlcnkgY2VsbCBhcyBgc3RyaW5nIHwgbnVsbGA7XG4gKiAgICAgbnVtZXJpYy1sb29raW5nIGNlbGxzIGFyZSBjb2VyY2VkIHNlcnZlci1zaWRlIHNvIHRoZSBVSVxuICogICAgIGNhbiBmb3JtYXQgd2l0aCBgdGFidWxhci1udW1zYCB3aXRob3V0IHJlLXBhcnNpbmcpLlxuICogICAtIGByb3dDb3VudGA6IHRvdGFsIHJvdyBjb3VudCB1cHN0cmVhbSAoaW5kZXBlbmRlbnQgb2YgdGhlXG4gKiAgICAgYGxpbWl0YCBjYXApLiBDb21wYXJlIGFnYWluc3QgYHJvd3MubGVuZ3RoYCB0byBkZXRlY3RcbiAqICAgICB0cnVuY2F0aW9uIC0gYHRydW5jYXRlZGAgaXMgdGhlIHByZWNvbXB1dGVkIGZsYWcuXG4gKiAgIC0gYHRydW5jYXRlZGA6IGB0cnVlYCB3aGVuIHRoZSBzZXJ2ZXIgY2xpcHBlZCByb3dzIHRvIGhvbm9yXG4gKiAgICAgdGhlIHJvdXRlJ3Mgcm93IGNhcDsgdGhlIFVJIHNob3VsZCBzdXJmYWNlIGEgXCJzaG93aW5nIE4gb2ZcbiAqICAgICBNIHJvd3NcIiBhZmZvcmRhbmNlIGluIHRoYXQgY2FzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlbWVudERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHJvd3M6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCksXG4gIHRydW5jYXRlZDogei5ib29sZWFuKCksXG59KTtcbi8qKiBUYWJ1bGFyIHN0YXRlbWVudCBwYXlsb2FkIHJlc29sdmVkIGZyb20gYSBgW2RhdGE6PHN0YXRlbWVudF9pZD5dYCBlbWJlZCBtYXJrZXIuICovXG5leHBvcnQgdHlwZSBTdGF0ZW1lbnREYXRhID0gei5pbmZlcjx0eXBlb2YgU3RhdGVtZW50RGF0YVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHdyaXRlciBzdXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUaGUgYFRvb2xTdHJlYW1gLXNoYXBlZCB3cml0ZXIgdGhlIE1hc3RyYSBHZW5pZSBhZ2VudCBhbmQgY2hhcnRcbiAqIGhlbHBlcnMgcHVibGlzaCBldmVudHMgdGhyb3VnaC4gRGVmaW5lZCBoZXJlICh2cyBpbXBvcnRlZCBmcm9tXG4gKiBgQG1hc3RyYS9jb3JlYCkgc28gaGVscGVycyBpbiBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCBjYW5cbiAqIGFjY2VwdCBhbnkgb2JqZWN0IHdpdGggYSBgLndyaXRlYCBtZXRob2Qgd2l0aG91dCBkcmFnZ2luZ1xuICogTWFzdHJhJ3MgZnVsbCBgVG9vbFN0cmVhbWAgKGFuZCBpdHMgYWdlbnQgLyB0b29sIHR5cGluZ3MpIGludG9cbiAqIGNhbGwgc2l0ZXMuIFRoZSBhY3R1YWwgTWFzdHJhIGBjdHgud3JpdGVyYCBpcyBhc3NpZ25hYmxlIHRvXG4gKiB0aGlzIHNoYXBlIHNvIGNhbGxlcnMgcGFzcyBpdCBzdHJhaWdodCB0aHJvdWdoLlxuICpcbiAqIEtlcHQgYXMgYSBwbGFpbiBUeXBlU2NyaXB0IGludGVyZmFjZSAodnMgYSB6b2Qgc2NoZW1hKSBiZWNhdXNlXG4gKiB0aGUgY29udHJhY3QgaXMgYSBtZXRob2QgLSB6b2QgY2FuIG9ubHkgdmFsaWRhdGUgdGhlIHNoYXBlIHZpYVxuICogYHouY3VzdG9tYCwgd2hpY2ggYWRkcyBub2lzZSB3aXRob3V0IGJ1eWluZyBhbnkgcnVudGltZSBjaGVjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFXcml0ZXIge1xuICB3cml0ZTogKGNodW5rOiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tIG1hc3RyYS1vbmx5IGdlbmllLWFnZW50IGV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiB0aGUgR2VuaWUgdG9vbCBpbnZvY2F0aW9uIHN0YXJ0ZWQuXG4gKiBFbWl0dGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNhbGxpbmcgYWdlbnQgaW52b2tlcyB0aGUgR2VuaWVcbiAqIHRvb2wsIGJlZm9yZSBhbnkgaW5uZXIgYWdlbnQgLyB3aXJlIGFjdGl2aXR5LCBzbyB0aGUgVUkgY2FuXG4gKiBwb3AgYSBcIlRoaW5raW5nLi4uXCIgcGlsbCB0aGUgaW5zdGFudCB0aGUgbW9kZWwgZGVjaWRlcyB0b1xuICogZGVsZWdhdGUuIGBjb252ZXJzYXRpb25JZGAgLyBgbWVzc2FnZUlkYCBhcmUgYWJzZW50IG9uIHRoaXNcbiAqIGZpcnN0IGVtaXQgKG5vIEdlbmllIHJvdW5kLXRyaXAgeWV0KS4gRmllbGQgbmFtZXMgYXJlXG4gKiBjYW1lbENhc2UgKHZzIHRoZSBzbmFrZV9jYXNlIHdpcmUgZXZlbnRzKSB0byBtaXJyb3IgdGhlXG4gKiBHZW5pZSBhZ2VudCdzIG93biBpbnRlcm5hbCBkYXRhIHBsdW1iaW5nLlxuICovXG5leHBvcnQgY29uc3QgU3RhcnRlZEV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGFydGVkXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKipcbiAgICogR2VuaWUgY29udmVyc2F0aW9uIGlkLCBwb3B1bGF0ZWQgb25seSB3aGVuIHRoaXMgYHN0YXJ0ZWRgXG4gICAqIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGEgZm9sbG93LXVwIHR1cm4gb24gYW4gZXhpc3RpbmdcbiAgICogY29udmVyc2F0aW9uLiBBYnNlbnQgb24gdGhlIGZpcnN0IHR1cm4uXG4gICAqL1xuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogR2VuaWUgbWVzc2FnZSBpZCwgcG9wdWxhdGVkIG9ubHkgYWZ0ZXIgdGhlIGZpcnN0IHdpcmVcbiAgICogYG1lc3NhZ2VgIGV2ZW50IGxhbmRzLiBBYnNlbnQgb24gdGhlIGltbWVkaWF0ZS1vbi1pbnZva2VcbiAgICogZW1pdC5cbiAgICovXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogUXVlc3Rpb24gdGhlIEdlbmllIGFnZW50IHNlbnQgdG8gR2VuaWUuICovXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCksXG59KTtcbi8qKiBJbW1lZGlhdGUgbGlmZWN5Y2xlIGV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBgYXNrX2dlbmllYCBpbnZvY2F0aW9uIGJlZ2lucy4gKi9cbmV4cG9ydCB0eXBlIFN0YXJ0ZWRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXJ0ZWRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvblxuICogZmluaXNoZWQuIENhcnJpZXMgdGhlIGh5ZHJhdGVkIGBzdGF0ZW1lbnRJZHNgIChyb3dzIGFyZSBmZXRjaGVkXG4gKiB2aWEgYGdldFN0YXRlbWVudGAgc2VwYXJhdGVseSkgYW5kIEdlbmllJ3MgZmluYWwgcHJvc2UgYW5zd2VyXG4gKiBzbyB0aGUgVUkgY2FuIG1vdmUgZnJvbSBcInRoaW5raW5nXCIgdG8gXCJhbnN3ZXJlZFwiIHdpdGhvdXRcbiAqIHdhaXRpbmcgZm9yIHRoZSBHZW5pZSBhZ2VudCdzIHdob2xlIHJlYXNvbmluZyBsb29wIHRvIGVuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFza0dlbmllRG9uZUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhc2tfZ2VuaWVfZG9uZVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBHZW5pZSdzIG5hdHVyYWwtbGFuZ3VhZ2UgYW5zd2VyIGZvciB0aGUgdHVybiwgaWYgYW55LiAqL1xuICBhbnN3ZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFN0YXRlbWVudCBpZHMgZm9yIGFueSBub24tZW1wdHkgcmVzdWx0IHNldHMgdGhpcyB0dXJuIHByb2R1Y2VkLiAqL1xuICBzdGF0ZW1lbnRJZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIC8qKlxuICAgKiBUZXJtaW5hbCB3aXJlIHN0YXR1cyAoYENPTVBMRVRFRGAgLyBgRkFJTEVEYCAvIGBDQU5DRUxMRURgKS5cbiAgICogTWlycm9ycyB0aGUgc291cmNlIGByZXN1bHRgIGV2ZW50J3Mgc3RhdHVzIHNvIHN1YnNjcmliZXJzXG4gICAqIGNhbiByZWFjdCB0byBhc2stbGV2ZWwgY29tcGxldGlvbiB3aXRob3V0IHJlLXdhbGtpbmcgaGlzdG9yeS5cbiAgICogVHJlYXRlZCBhcyBgei5jdXN0b208TWVzc2FnZVN0YXR1cz5gIGJlY2F1c2UgdGhlIFNESyBpcyB0aGVcbiAgICogc291cmNlIG9mIHRydXRoIGZvciB0aGUgZW51bSB2YWx1ZXMuXG4gICAqL1xuICBzdGF0dXM6IHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiksXG59KTtcbi8qKiBDb21wbGV0aW9uIGV2ZW50IGZvciBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvbiwgaW5jbHVkaW5nIGl0cyB0ZXJtaW5hbCBzdGF0dXMuICovXG5leHBvcnQgdHlwZSBBc2tHZW5pZURvbmVFdmVudCA9IHouaW5mZXI8dHlwZW9mIEFza0dlbmllRG9uZUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBlcnJvciBldmVudDogdGVybWluYWwgR2VuaWUgYWdlbnQgLyB0cmFuc3BvcnRcbiAqIGVycm9yLiBHZW5pZSdzIG93biBgRkFJTEVEYCAvIGBDQU5DRUxMRURgIGNvbWUgdGhyb3VnaCB0aGVcbiAqIHdpcmUncyBgcmVzdWx0YCBldmVudCAtIHRoaXMgdmFyaWFudCBpcyBmb3IgZmFpbHVyZXMgdGhlIHdpcmVcbiAqIGNhbid0IHJlcHJlc2VudCAobmV0d29yaywgR2VuaWUgYWdlbnQgY3Jhc2gsIHBsYW5uZXIgZXJyb3IsXG4gKiBldGMuKSBwbHVzIGEgVUktZnJpZW5kbHkgbWlycm9yIG9mIGByZXN1bHRgIHdoZW4gdGhlIHN0YXR1cyBpc1xuICogbm9uLWBDT01QTEVURURgLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCksXG59KTtcbi8qKiBNYXN0cmEtc2lkZSBmYWlsdXJlIGV2ZW50IGZvciBlcnJvcnMgb3V0c2lkZSBHZW5pZSdzIG5vcm1hbCB0ZXJtaW5hbCByZXN1bHQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFHZW5pZUVycm9yRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogdGhlIGlubmVyIEdlbmllIGFnZW50J3NcbiAqIHN0cnVjdHVyZWQtb3V0cHV0IGNvZXJjaW9uIGhhcyBsYW5kZWQuIEZpcmVzIG9uY2UgcGVyIEdlbmllXG4gKiB0b29sIGludm9jYXRpb24sIEFGVEVSIGBhZ2VudC5nZW5lcmF0ZSguLi4pYCBjb21wbGV0ZXMgKGkuZS5cbiAqIHRoZSBpbm5lciBsb29wICsgTWFzdHJhJ3Mgc3RydWN0dXJpbmcgcGFzcyBoYXZlIGJvdGhcbiAqIGZpbmlzaGVkKSBhbmQgQkVGT1JFIHRoZSB3cmFwcGVyIGh5ZHJhdGVzIGVhY2ggYGRhdGFgIGl0ZW1cbiAqIHdpdGggYSBjaGFydC4gU2lnbmFscyB0byB0aGUgaG9zdCBVSSB0aGF0IHRoZSBhZ2VudCBoYXNcbiAqIHN0b3BwZWQgcmVhc29uaW5nIGFuZCBpcyBtb3ZpbmcgaW50byBjaGFydCBnZW5lcmF0aW9uLlxuICpcbiAqIFRoZSBzdHJ1Y3R1cmluZyBwYXNzIGl0c2VsZiBpcyBvcGFxdWUgKGl0IHJ1bnMgaW5zaWRlXG4gKiBNYXN0cmEncyBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgdG9nZXRoZXIgd2l0aCB0aGUgdG9vbCBsb29wKVxuICogc28gdGhpcyBpcyB0aGUgZWFybGllc3QgaG9vayB3ZSBjYW4gb2ZmZXI7IHdlIGNhbid0IGZpcmUgYVxuICogXCJzdW1tYXJ5IHN0YXJ0ZWRcIiBldmVudCB0aGUgd2F5IHdlIGZpcmUgYHN0YXJ0ZWRgLlxuICovXG5leHBvcnQgY29uc3QgU3VtbWFyeUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdW1tYXJ5XCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKiogVG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhZ2VudCdzIHN0cnVjdHVyZWQgc3VtbWFyeS4gKi9cbiAgaXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqIENvdW50IG9mIGB0ZXh0YCAvIHByb3NlIGl0ZW1zIGluIHRoZSBzdW1tYXJ5LiAqL1xuICB0ZXh0SXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqXG4gICAqIENvdW50IG9mIGBkYXRhYCBpdGVtcyB0aGUgd3JhcHBlciB3aWxsIGh5ZHJhdGUgaW50byBjaGFydHMuXG4gICAqIFRoZSBob3N0IFVJIGNhbiB1c2UgdGhpcyB0byBzZWVkIE4gY2hhcnQgc2tlbGV0b25zIGJlZm9yZVxuICAgKiB0aGUgcGVyLWNoYXJ0IGV2ZW50cyBhcnJpdmUuXG4gICAqL1xuICBkYXRhSXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbn0pO1xuLyoqIExpZmVjeWNsZSBldmVudCBlbWl0dGVkIGJlZm9yZSBzdW1tYXJ5IGRhdGEgaXRlbXMgYXJlIGh5ZHJhdGVkIGludG8gY2hhcnRzLiAqL1xuZXhwb3J0IHR5cGUgU3VtbWFyeUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgU3VtbWFyeUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBldmVudCB1bmlvbi4gRWFjaCB2YXJpYW50IHVzZXMgdGhlIHNhbWUgZmxhdFxuICogYHt0eXBlLCAuLi5maWVsZHN9YCBzaGFwZSBhcyB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHNvXG4gKiBzdWJzY3JpYmVycyB1bmlvbiBib3RoIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudEV2ZW50U2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgU3RhcnRlZEV2ZW50U2NoZW1hLFxuICBBc2tHZW5pZURvbmVFdmVudFNjaGVtYSxcbiAgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hLFxuICBTdW1tYXJ5RXZlbnRTY2hlbWEsXG5dKTtcbi8qKiBNYXN0cmEtb3duZWQgbGlmZWN5Y2xlIGV2ZW50cyBsYXllcmVkIG9uIHRvcCBvZiBHZW5pZSdzIHdpcmUgZXZlbnQgc3RyZWFtLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudEV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBUaGUgdW5pZmllZCB3cml0ZXItZXZlbnQgdm9jYWJ1bGFyeSBzdWJzY3JpYmVycyBzZWUgb25cbiAqIGBjdHgud3JpdGVyYDogdGhlIHdpcmUtZGVyaXZlZCB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHVuaW9uXG4gKiAqKnBsdXMqKiBNYXN0cmEtb25seSBldmVudHMgZnJvbSB7QGxpbmsgR2VuaWVBZ2VudEV2ZW50fS4gRWFjaFxuICogdmFyaWFudCBpcyBhIGZsYXQgYHt0eXBlLCAuLi5maWVsZHN9YCBvYmplY3Q7IGNvbnN1bWVycyBuYXJyb3dcbiAqIG9uIGB0eXBlYCBhbmQgcmVhZCBmaWVsZHMgaW5saW5lIC0gdGhlcmUgaXMgbm8gcGF5bG9hZCB3cmFwcGVyXG4gKiBhbmQgbm8gd3JpdGVyLWJvdW5kYXJ5IHRyYW5zbGF0b3IuXG4gKlxuICogQ29tcG9zZWQgdmlhIGB6LnVuaW9uYCAobm90IGB6LmRpc2NyaW1pbmF0ZWRVbmlvbmApIGJlY2F1c2VcbiAqIGJvdGggaGFsdmVzIGFyZSB0aGVtc2VsdmVzIGRpc2NyaW1pbmF0ZWQgdW5pb25zIG9uIHRoZSBzYW1lXG4gKiBgdHlwZWAga2V5LlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVXcml0ZXJFdmVudFNjaGVtYSA9IHoudW5pb24oW1xuICBnZW5pZU1vZGVsLkdlbmllQ2hhdEV2ZW50U2NoZW1hLFxuICBHZW5pZUFnZW50RXZlbnRTY2hlbWEsXG5dKTtcbi8qKiBDb21wbGV0ZSBldmVudCB2b2NhYnVsYXJ5IHdyaXR0ZW4gYnkgdGhlIE1hc3RyYSBHZW5pZSBpbnRlZ3JhdGlvbi4gKi9cbmV4cG9ydCB0eXBlIEdlbmllV3JpdGVyRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVdyaXRlckV2ZW50U2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllV3JpdGVyRXZlbnR9LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVXcml0ZXJFdmVudFR5cGUgPSBHZW5pZVdyaXRlckV2ZW50W1widHlwZVwiXTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdW1tYXJ5ICsgZGF0YXNldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUYWJ1bGFyIHBheWxvYWQgZW1iZWRkZWQgaW4gZXZlcnkge0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19XG4gKiBgdmlzdWFsaXplYCBkYXRhc2V0LiBBbHdheXMgcHJlc2VudDogaHlkcmF0ZWQgYnkgdGhlIHdvcmtmbG93J3NcbiAqIGFnZW50IHN0ZXAgYmVmb3JlIHRoZSBmaW5hbGl6ZSBzdGVwIHJ1bnMsIHNvIGNvbnN1bWVycyBjYW4gcmVuZGVyXG4gKiBhIHRhYmxlIGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2YgY2hhcnQtcGxhbm5lciBvdXRjb21lLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgY29sdW1uc2A6IGNvbHVtbiBuYW1lcyBpbiBkaXNwbGF5IG9yZGVyLlxuICogICAtIGByb3dzYDogdGFidWxhciByb3dzIGtleWVkIGJ5IGNvbHVtbiBuYW1lLlxuICogICAtIGByb3dDb3VudGA6IHRvdGFsIHJvdyBjb3VudCBHZW5pZSByZXBvcnRlZCAobWF5IGV4Y2VlZFxuICogICAgIGByb3dzLmxlbmd0aGAgd2hlbiB0aGUgc3RhdGVtZW50IHdhcyB0cnVuY2F0ZWQpLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29sdW1uczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgcm93czogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpLFxuICByb3dDb3VudDogei5udW1iZXIoKSxcbn0pO1xuLyoqIEh5ZHJhdGVkIHRhYnVsYXIgZGF0YSB0aGF0IGFsd2F5cyBiYWNrcyBhIEdlbmllIHZpc3VhbGl6YXRpb24gaXRlbS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldERhdGEgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXREYXRhU2NoZW1hPjtcblxuLyoqXG4gKiBTbGltIGNoYXJ0IHJlZmVyZW5jZSBhdHRhY2hlZCB0byBhIHZpc3VhbGl6ZSBkYXRhc2V0LiBPbmx5XG4gKiBwcmVzZW50IHdoZW4gcGxhbm5pbmcgc3VjY2VlZGVkLlxuICpcbiAqIGBvcHRpb25gIGlzIGludGVudGlvbmFsbHkgTk9UIGluY2x1ZGVkLiBUaGUgcmVzb2x2ZWQgRWNoYXJ0c1xuICogc3BlYyBsaXZlcyBvZmYtYmFuZCBpbiB0aGUgY2hhcnQgY2FjaGU6IHRoZSBob3N0IFVJIGZldGNoZXMgaXRcbiAqIGJ5IGBjaGFydElkYCBmcm9tIHRoZSBwbHVnaW4ncyBlbWJlZCByb3V0ZSAoZGVyaXZlZCBmcm9tXG4gKiBgYmFzZVBhdGhgICsge0BsaW5rIE1BU1RSQV9ST1VURVN9LmVtYmVkLCBpLmUuIGAvZW1iZWQvY2hhcnQvOmlkYDtcbiAqIHNlZSB7QGxpbmsgQ2hhcnR9KS4gRW1iZWRkaW5nIHRoZSBmdWxsIHNwZWMgaW5saW5lIHdvdWxkXG4gKiBpbmZsYXRlIGV2ZXJ5IGRhdGFzZXQgYnkgc2V2ZXJhbCBLQiBwZXIgY2hhcnQgYW5kIHJvdW5kLXRyaXBcbiAqIHRocm91Z2ggdGhlIExMTSBjb250ZXh0IGZvciB6ZXJvIGJlbmVmaXQgKHRoZSBtb2RlbCBvbmx5IG5lZWRzXG4gKiB0aGUgYGNoYXJ0SWRgIHRvIHBsYWNlIGEgYFtjaGFydDo8Y2hhcnRJZD5dYCBtYXJrZXIgaW4gaXRzXG4gKiByZXBseSkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXRDaGFydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRJZDogei5zdHJpbmcoKSxcbiAgY2hhcnRUeXBlOiBDaGFydFR5cGVTY2hlbWEsXG59KTtcbi8qKiBMaWdodHdlaWdodCByZWZlcmVuY2UgdG8gYSBjaGFydCBwbGFuIHN0b3JlZCBpbiB0aGUgTWFzdHJhIGNoYXJ0IGNhY2hlLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVEYXRhc2V0Q2hhcnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXRDaGFydFNjaGVtYT47XG5cbi8qKlxuICogRGF0YXNldCBidW5kbGUgYXR0YWNoZWQgdG8gYSB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX0gYHZpc3VhbGl6ZWBcbiAqIGl0ZW0uIGBkYXRhYCBpcyBhbHdheXMgcG9wdWxhdGVkOyBgY2hhcnRgIGlzIGJlc3QtZWZmb3J0IGFuZFxuICogYWJzZW50IHdoZW4gdGhlIHdvcmtmbG93J3MgY2hhcnQtcGxhbm5lciBmYWlsZWQgKHRpbWVvdXQsXG4gKiBtYWxmb3JtZWQgcGxhbiwgYWJvcnQpIHNvIHRoZSBob3N0IFVJIGNhbiBzdGlsbCByZW5kZXIgdGhlXG4gKiB1bmRlcmx5aW5nIHRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0U2NoZW1hID0gei5vYmplY3Qoe1xuICBkYXRhOiBHZW5pZURhdGFzZXREYXRhU2NoZW1hLFxuICBjaGFydDogR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuLyoqIFZpc3VhbGl6YXRpb24gZGF0YXNldCB3aXRoIHJlcXVpcmVkIHRhYmxlIGRhdGEgYW5kIGFuIG9wdGlvbmFsIHBsYW5uZWQgY2hhcnQuICovXG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXRTY2hlbWE+O1xuXG4vKipcbiAqIE9uZSBpdGVtIGluc2lkZSB0aGUgR2VuaWUgd29ya2Zsb3cncyBmaW5hbCBzdW1tYXJ5LiBUaGVcbiAqIHdvcmtmbG93IHByb2R1Y2VzIGEgbWl4ZWQgc2VxdWVuY2Ugb2Y6XG4gKlxuICogICAtIGBzdHJpbmdgOiBhIG1hcmtkb3duIHBhcmFncmFwaCAoaW50ZXJwcmV0YXRpb24sIGNhbGxvdXRzLFxuICogICAgIHRyYW5zaXRpb25zIGJldHdlZW4gZGF0YSBibG9ja3MpLlxuICogICAtIGB2aXN1YWxpemVgOiBhIHJlcXVlc3QgZnJvbSB0aGUgYWdlbnQgc3RlcCB0byB2aXN1YWxpemUgYVxuICogICAgIHNwZWNpZmljIEdlbmllIHN0YXRlbWVudCBhdCB0aGlzIHBvc2l0aW9uIGluIHRoZSBwcm9zZS5cbiAqICAgICBUaGUgZmluYWxpemUgc3RlcCBoeWRyYXRlcyBgZGF0YXNldC5kYXRhYCAocm93cyBmcm9tIHRoZVxuICogICAgIG1hdGNoaW5nIGBzdGF0ZW1lbnRJZGApIGFuZCBhdHRhY2hlcyBgZGF0YXNldC5jaGFydGAgYWZ0ZXJcbiAqICAgICBydW5uaW5nIHRoZSBjaGFydC1wbGFubmVyLiBUaGUgYWdlbnQgTkVWRVIgcGlja3MgdGhlIGNoYXJ0XG4gKiAgICAgdHlwZSAtIGl0IG9ubHkgbWFya3Mgd2hlcmUgYSB2aXN1YWxpemF0aW9uIGJlbG9uZ3MuXG4gKlxuICogVGhlIGhvc3QgVUkgd2Fsa3MgdGhlIGFycmF5IGluIGRpc3BsYXkgb3JkZXIgdG8gY29tcG9zZSB0aGVcbiAqIGZpbmFsIGFzc2lzdGFudCBtZXNzYWdlLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2aXN1YWxpemVcIiksXG4gICAgc3RhdGVtZW50SWQ6IHouc3RyaW5nKCksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRhdGFzZXQ6IEdlbmllRGF0YXNldFNjaGVtYSxcbiAgfSksXG5dKTtcbi8qKiBPcmRlcmVkIHByb3NlIG9yIHZpc3VhbGl6YXRpb24gaXRlbSBpbiB0aGUgR2VuaWUgYWdlbnQncyBmaW5hbCBzdW1tYXJ5LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbSA9IHouaW5mZXI8dHlwZW9mIEdlbmllU3VtbWFyeUl0ZW1TY2hlbWE+O1xuXG4vKiogRGlzY3JpbWluYXRvciB0eXBlIGZvciB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX0uICovXG5leHBvcnQgdHlwZSBHZW5pZVN1bW1hcnlJdGVtVHlwZSA9IEdlbmllU3VtbWFyeUl0ZW1bXCJ0eXBlXCJdO1xuXG4vKipcbiAqIFRoZSBHZW5pZSBhZ2VudCdzIGZpbmFsIG91dHB1dCBzaGFwZSAtIHdoYXQgdGhlIGNhbGxpbmcgYWdlbnQnc1xuICogR2VuaWUgdG9vbCByZXR1cm5zIHRvIHRoZSBjYWxsaW5nIExMTS4gVGhlIGBzdW1tYXJ5YCBhcnJheSBpc1xuICogdGhlIHVzZXItZmFjaW5nIHJlbmRlcmFibGU7IGBjb252ZXJzYXRpb25JZGAgbGV0cyB0aGUgY2FsbGluZ1xuICogYWdlbnQgKG9yIHRoZSBVSSkgZm9sbG93IHVwIGluIHRoZSBzYW1lIEdlbmllIHRocmVhZCBvbiB0aGVcbiAqIG5leHQgdHVybi5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN1bW1hcnk6IHouYXJyYXkoR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbi8qKiBGaW5hbCByZW5kZXJhYmxlIG91dHB1dCByZXR1cm5lZCBieSB0aGUgR2VuaWUgYWdlbnQgdG9vbCB0byBpdHMgY2FsbGVyLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRSZXN1bHRTY2hlbWE+O1xuIl19
|
|
454
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFJSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFJSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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RSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgY29udHJhY3QgZm9yIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgOiB0aGVcbiAqIGRlcGVuZGVuY3ktZnJlZSB6b2Qgc2NoZW1hcyArIGluZmVycmVkIHR5cGVzIGV2ZXJ5IGNvbnN1bWVyICh0aGVcbiAqIFJlYWN0IGNsaWVudCwgYnJvd3NlciBidW5kbGVzLCB0aGUgc2VydmVyIHBsdWdpbikgc2hhcmVzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBgcGdgLCBgZmFzdGVtYmVkYCwgYW5kIHRoZSBNYXN0cmEgcnVudGltZSBzbyB0aGVcbiAqIGNsaWVudCBjYW4gaW1wb3J0IHRoZXNlIHNjaGVtYXMgd2l0aG91dCBkcmFnZ2luZyBpbiBzZXJ2ZXItb25seVxuICogZGVwZW5kZW5jaWVzLiBUaHJlZSBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gVGhlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IGBNYXN0cmFQbHVnaW4uY2xpZW50Q29uZmlnKClgXG4gKiAgICAgIHBsdXMgdGhlIFJFU1QgcGF5bG9hZHMgaXRzIHJvdXRlcyByZXR1cm4gKG1vZGVscywgaGlzdG9yeSxcbiAqICAgICAgc3VnZ2VzdGlvbnMsIGNoYXJ0IGVtYmVkcywgc3RhdGVtZW50IGRhdGEpLiBUaGUgc2VydmVyXG4gKiAgICAgIGRlcml2ZXMgZXZlcnkgcGF0aCBmcm9tIHRoZSBwbHVnaW4gbW91bnQgYW5kIHB1Ymxpc2hlcyB0aGVcbiAqICAgICAgcmVzb2x2ZWQgcGF0aHMgc28gdGhlIGNsaWVudCBjb21wb3NlcyBVUkxzIHdpdGhvdXRcbiAqICAgICAgaGFyZC1jb2RpbmcgYC9hcGkvbWFzdHJhYCAtIHJlbmFtZSB0aGUgcGx1Z2luIGFuZCB0aGUgY2xpZW50XG4gKiAgICAgIGtlZXBzIHdvcmtpbmcuXG4gKiAgIDIuIFRoZSBgY3R4LndyaXRlcmAgZXZlbnQgdm9jYWJ1bGFyeTogdGhlIHdpcmUtZGVyaXZlZFxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9cyBmcm9tIGBAZGJ4LXRvb2xzL2dlbmllLXNoYXJlZGAgcGx1c1xuICogICAgICB0aGUgTWFzdHJhLW9ubHkgYWdlbnQgbGlmZWN5Y2xlIGV2ZW50cywgdW5pZmllZCBhc1xuICogICAgICB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0gc28gc3Vic2NyaWJlcnMgbmFycm93IGJvdGggaGFsdmVzXG4gKiAgICAgIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICogICAzLiBUaGUgR2VuaWUgYWdlbnQncyB3b3JrZmxvdyBvdXRwdXQgc2hhcGVzXG4gKiAgICAgICh7QGxpbmsgR2VuaWVBZ2VudFJlc3VsdH0gYW5kIGl0cyBzdW1tYXJ5IC8gZGF0YXNldCBpdGVtcykuXG4gKlxuICogVGhlIHJvdXRlIHNlZ21lbnRzIGxpdmUgaW4gdGhlIHNpYmxpbmcgYHJvdXRlcy50c2BcbiAqICh7QGxpbmsgTUFTVFJBX1JPVVRFU30pIGFuZCB0aGUgZW1iZWQtbWFya2VyIGdyYW1tYXIgaW4gYG1hcmtlci50c2AsXG4gKiBzbyB0aGlzIGZpbGUgc3RheXMgcHVyZWx5IGRlY2xhcmF0aXZlIChzY2hlbWFzICsgaW5mZXJyZWQgdHlwZXMpLlxuICogVGhlIGJyb3dzZXIgY2xpZW50IHRoYXQgZHJpdmVzIHRoZXNlIHJvdXRlcyAoYE1hc3RyYVBsdWdpbkNsaWVudGApXG4gKiBzaGlwcyBmcm9tIGBAZGJ4LXRvb2xzL3VpLW1hc3RyYWAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdlbmllTW9kZWwsIHR5cGUgR2VuaWVDaGF0RXZlbnQsIHR5cGUgTWVzc2FnZVN0YXR1cyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xpZW50IGNvbmZpZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTi1zYWZlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IHRoZSBNYXN0cmEgcGx1Z2luJ3NcbiAqIGBjbGllbnRDb25maWcoKWAuXG4gKlxuICogT25seSB0aGUgaXJyZWR1Y2libGUgZGF0YSBsaXZlcyBoZXJlOiBgYmFzZVBhdGhgICh0aGUgb25lIHBhdGggdGhlXG4gKiBjbGllbnQgY2FuJ3Qgb3RoZXJ3aXNlIGtub3csIHNpbmNlIGl0IGVuY29kZXMgdGhlIHBsdWdpbidzIG1vdW50XG4gKiBuYW1lKSBwbHVzIHRoZSBydW50aW1lIGFnZW50IHJvc3Rlci4gRXZlcnkgY29uY3JldGUgZW5kcG9pbnQgVVJMIGlzXG4gKiBkZXJpdmVkIGZyb20gYGJhc2VQYXRoYCBieSB0aGUgYnJvd3NlciBjbGllbnRcbiAqIChgTWFzdHJhUGx1Z2luQ2xpZW50YCkgdXNpbmcgdGhlIHNoYXJlZCB7QGxpbmsgTUFTVFJBX1JPVVRFU31cbiAqIHNlZ21lbnRzLCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gcHVibGlzaCBwZXItcm91dGUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBiYXNlUGF0aGA6IHBsdWdpbiBtb3VudCBwYXRoLiBBbHdheXMgYC9hcGkvPHBsdWdpbk5hbWU+YC4gRmVlZFxuICogICAgIGl0IHRvIGBuZXcgTWFzdHJhUGx1Z2luQ2xpZW50KGNvbmZpZylgIChmcm9tXG4gKiAgICAgYEBkYngtdG9vbHMvdWktbWFzdHJhYCkgdG8gZ2V0IGEgdHlwZWQgY2xpZW50IG92ZXIgZXZlcnlcbiAqICAgICByb3V0ZSBwbHVzIHRoZSBzdGFuZGFyZCBhZ2VudCBzdHJlYW0uXG4gKiAgIC0gYGRlZmF1bHRBZ2VudGA6IGFnZW50IGlkIHRoZSBjbGllbnQgY29udmVyc2VzIHdpdGggd2hlbiBpdFxuICogICAgIGRvZXNuJ3QgbmFtZSBvbmUuXG4gKiAgIC0gYGFnZW50c2A6IGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgaWQgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICogICAtIGBmZWVkYmFja0VuYWJsZWRgOiB3aGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIGxvZyB1c2VyIGZlZWRiYWNrIHRvXG4gKiAgICAgTUxmbG93IChNTGZsb3cgdHJhY2luZyBpcyBjb25maWd1cmVkKS4gRHJpdmVzIHdoZXRoZXIgdGhlIGNoYXQgVUlcbiAqICAgICBzdXJmYWNlcyB0aHVtYnMgLyBjb21tZW50IGNvbnRyb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgIHNvIGFcbiAqICAgICBjb25maWcgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHNlcnZlciAod2l0aG91dCB0aGUgZmllbGQpIHBhcnNlc1xuICogICAgIGNsZWFubHkgdG8gXCJvZmZcIi5cbiAqICAgLSBgY2hhdEFsd2F5c0F2YWlsYWJsZWA6IHdoZXRoZXIgdGhlIGFnZW50cycgRGF0YWJyaWNrcyBjYWxscyBydW4gYXMgdGhlXG4gKiAgICAgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIHJhdGhlciB0aGFuIG9uLWJlaGFsZi1vZiB0aGUgc2lnbmVkLWluIHVzZXIuIFdoZW5cbiAqICAgICBgdHJ1ZWAgdGhlIGNoYXQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIHNvIGEgVUkgdGhhdFxuICogICAgIGhpZGVzIGNoYXQgd2hlbiB0aGUgT0JPIHRva2VuIGlzIGFic2VudCBzaG91bGQgc2hvdyBpdCBhbnl3YXkuIERlZmF1bHRzXG4gKiAgICAgdG8gYGZhbHNlYCAodGhlIE9CTyAvIGBcInVzZXJcImAgaWRlbnRpdHkgbW9kZSksIHNvIGFuIG9sZGVyIHNlcnZlciB3aXRob3V0XG4gKiAgICAgdGhlIGZpZWxkIGtlZXBzIHRoZSBPQk8tZ2F0ZWQgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGJhc2VQYXRoOiB6LnN0cmluZygpLFxuICBkZWZhdWx0QWdlbnQ6IHouc3RyaW5nKCksXG4gIGFnZW50czogei5hcnJheSh6LnN0cmluZygpKSxcbiAgZmVlZGJhY2tFbmFibGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2hhdEFsd2F5c0F2YWlsYWJsZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG59KTtcbi8qKiBCcm93c2VyLXNhZmUgTWFzdHJhIHBsdWdpbiBkZXNjcmlwdG9yIHVzZWQgdG8gY29uc3RydWN0IHJvdXRlIGFuZCBzdHJlYW0gY2xpZW50cy4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYUNsaWVudENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZGVmYXVsdC1tb2RlbFs/YWdlbnRJZD1dYC4gVGhlXG4gKiBzdGF0aWMgZGVmYXVsdCBtb2RlbCB0aGUgYWdlbnQgcmVzb2x2ZXMgdG8gd2hlbiB0aGUgY2xpZW50IHBpbnMgbm8gbW9kZWwsXG4gKiBhcyBib3RoIHRoZSByYXcgc2VydmluZy1lbmRwb2ludCBgbW9kZWxgIGlkIGFuZCBhIGBkaXNwbGF5TmFtZWAgKHRoZVxuICogaHVtYW5pemVkIGxhYmVsIHRoZSBwaWNrZXIgc2hvd3MpLiBCb3RoIGFyZSBgbnVsbGAgd2hlbiB0aGUgYWdlbnQgZGVjaWRlc1xuICogaXRzIG1vZGVsIGR5bmFtaWNhbGx5IGF0IGNhbGwgdGltZSAobm90aGluZyBzdGF0aWMgdG8gYWR2ZXJ0aXNlKS4gTGV0cyB0aGVcbiAqIHBpY2tlciBsYWJlbCBpdHMgZGVmYXVsdCBvcHRpb24gV0lUSE9VVCB3YWl0aW5nIG9uIHRoZSBgL21vZGVsc2AgY2F0YWxvZ3VlLFxuICogc28gaXQgbmV2ZXIgZmxhc2hlcyBhIHJhdyBpZCBvbiBsb2FkLiBLZXB0IG9mZiB0aGUgc3RhdGljIGJvb3RzdHJhcFxuICogYGNsaWVudENvbmZpZ2Agb24gcHVycG9zZTogaXQgaXMgcGVyLWFnZW50IGFuZCBjYW4gYmUgZHluYW1pYywgc28gaXQgaXNcbiAqIGZldGNoZWQgbGlrZSBgL21vZGVsc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgZGlzcGxheU5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuLyoqIFJlc3BvbnNlIGlkZW50aWZ5aW5nIHRoZSBtb2RlbCBjdXJyZW50bHkgc2VsZWN0ZWQgYXMgdGhlIHBsdWdpbiBkZWZhdWx0LiAqL1xuZXhwb3J0IHR5cGUgRGVmYXVsdE1vZGVsUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbW9kZWwgY2F0YWxvZ3VlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9tb2RlbHNgLiBXcmFwcyB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgbW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYX0gKHJlLWV4cG9ydGVkIGZyb21cbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGApIHNvIHRoZSBjYXRhbG9ndWVcbiAqIGRlc2NyaXB0b3IgaGFzIGEgc2luZ2xlIGRlZmluaXRpb24gdGhlIGNsaWVudCwgc2VydmVyLCBhbmQgdGhlXG4gKiBzdGFuZGFsb25lIGBAZGJ4LXRvb2xzL21vZGVsYCB0b29sa2l0IGFsbCBhZ3JlZSBvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5kcG9pbnRzOiB6LmFycmF5KG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEpLFxufSk7XG4vKiogQXZhaWxhYmxlIERhdGFicmlja3Mgc2VydmluZyBlbmRwb2ludHMgcmV0dXJuZWQgYnkgdGhlIE1hc3RyYSBtb2RlbCByb3V0ZS4gKi9cbmV4cG9ydCB0eXBlIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdWdnZXN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9zdWdnZXN0aW9uc2AuXG4gKlxuICogQ2FycmllcyB0aGUgY3VyYXRlZCBzdGFydGVyIHF1ZXN0aW9ucyBmb3IgYW4gYWdlbnQncyBHZW5pZSBzcGFjZSAtXG4gKiB0aGUgYHNhbXBsZV9xdWVzdGlvbnNgIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIHRoZSBzcGFjZSwgc3VyZmFjZWRcbiAqIGFzIG9uZS10YXAgcHJvbXB0cyBvbiB0aGUgY2hhdCdzIGVtcHR5IHN0YXRlLiBgcXVlc3Rpb25zYCBpcyBlbXB0eVxuICogd2hlbiB0aGUgYWdlbnQgaGFzIG5vIEdlbmllIHNwYWNlIChvciB0aGUgc3BhY2UgZGVmaW5lcyBub25lKSwgc29cbiAqIHRoZSBjbGllbnQgcmVuZGVycyBub3RoaW5nIGluIHRoYXQgY2FzZSByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG9cbiAqIGJ1aWx0LWluIGV4YW1wbGUgcHJvbXB0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXN0aW9uczogei5hcnJheSh6LnN0cmluZygpKSxcbn0pO1xuLyoqIEZvbGxvdy11cCBwcm9tcHRzIHN1Z2dlc3RlZCBmb3IgdGhlIGN1cnJlbnQgYWdlbnQgYW5kIHRocmVhZCBjb250ZXh0LiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2hhcnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEFsbG93ZWQgY2hhcnQgdHlwZXMgdGhlIHBsYW5uZXIgY2FuIHBpY2suIERlZmluZWQgYXMgYVxuICogZGlzY3JpbWluYXRlZCBsaXRlcmFsIHVuaW9uIHNvIGVhY2ggdmFyaWFudCBjYXJyaWVzIGl0cyBvd25cbiAqIGAuZGVzY3JpYmUoKWAgY2xhdXNlIC0gdGhlIHNlcnZlci1zaWRlIHBsYW5uZXIncyBwcm9tcHRcbiAqIGZvcm1hdHRlciB3YWxrcyBgLm9wdGlvbnNgIHRvIGlubGluZSB0aGUgZGVzY3JpcHRpb25zIGludG8gdGhlXG4gKiBtb2RlbCBpbnN0cnVjdGlvbnMsIGtlZXBpbmcgdGhlIHByb21wdCBpbiBsb2NrLXN0ZXAgd2l0aCB0aGVcbiAqIHNjaGVtYSBieSBjb25zdHJ1Y3Rpb24uIFRoZSBydW50aW1lIHR5cGUgaXMgdGhlIHBsYWluIHN0cmluZ1xuICogdW5pb24gKGBcImJhclwiIHwgXCJsaW5lXCIgfCAuLi5gKSwgc28gY29uc3VtZXJzIHRoYXQganVzdCBuZWVkIGFcbiAqIGRpc2NyaW1pbmF0b3IgdmFsdWUgYmVoYXZlIHRoZSBzYW1lIGFzIGlmIGl0IHdlcmUgYVxuICogYHouZW51bShbLi4uXSlgLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRUeXBlU2NoZW1hID0gelxuICAudW5pb24oW1xuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiYmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiY29tcGFyaW5nIGEgbnVtZXJpYyB2YWx1ZSBhY3Jvc3MgYSBzbWFsbC9tZWRpdW0gc2V0IG9mIGRpc2NyZXRlIGNhdGVnb3JpZXMgKHRvcC1OLCByYW5raW5nLCBncm91cC1ieSlcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJob3Jpem9udGFsQmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwic2FtZSBhcyBiYXIgYnV0IGNhdGVnb3JpZXMgb24gdGhlIHktYXhpcyAtIHByZWZlciB3aGVuIGNhdGVnb3J5IGxhYmVscyBhcmUgbG9uZyBvciB0aGVyZSBhcmUgbWFueSBjYXRlZ29yaWVzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwibGluZVwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQtYXhpcyB0cmVuZCAodGltZSBzZXJpZXMsIHNlcXVlbmNlLCByYW5rKSB3aGVyZSB0aGUgeC1heGlzIGhhcyBuYXR1cmFsIG9yZGVyXCIsXG4gICAgICApLFxuICAgIHoubGl0ZXJhbChcImFyZWFcIikuZGVzY3JpYmUoXCJzdGFja2VkLXRyZW5kIGVtcGhhc2lzIC0gY3VtdWxhdGl2ZSBvciBjb21wb3NpdGlvbiBvdmVyIHRpbWVcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjb21ib1wiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm1peGVkIGJhciArIGxpbmUgKG9yIGFyZWEpIHNlcmllcyBvbiBzaGFyZWQgY2F0ZWdvcmllcyAtIGUuZy4gdm9sdW1lIGJhcnMgd2l0aCBhIHJhdGUvdHJlbmQgbGluZTsgc2V0IGVhY2ggc2VyaWVzJyBgdHlwZWBcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ3YXRlcmZhbGxcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJicmlkZ2UgLyBydW5uaW5nLXRvdGFsIG9mIHNpZ25lZCBzdGVwIHZhbHVlcyAoc3RhcnQgLT4gZGVsdGFzIC0+IGVuZCkgYWNyb3NzIG9yZGVyZWQgY2F0ZWdvcmllc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInNjYXR0ZXJcIilcbiAgICAgIC5kZXNjcmliZShcInR3by1udW1lcmljLWF4aXMgY29ycmVsYXRpb25zIGJldHdlZW4gZmllbGRzIChlLmcuIHByaWNlIHZzLiBxdWFudGl0eSlcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJoZWF0bWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibWF0cml4IGludGVuc2l0eSBhY3Jvc3MgdHdvIGNhdGVnb3J5IGF4ZXMgLSB4IGxhYmVscyBpbiBgY2F0ZWdvcmllc2AsIG9uZSBzZXJpZXMgcGVyIG1hdHJpeCByb3cgaG9sZGluZyB0aGF0IHJvdydzIHZhbHVlc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInJhZGFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibXVsdGktZGltZW5zaW9uIGNvbXBhcmlzb24gYWNyb3NzIGEgZml4ZWQgc2V0IG9mIGF4ZXMgKG9uZSBpbmRpY2F0b3IgcGVyIGNhdGVnb3J5LCBvbmUgb3IgbW9yZSBzZXJpZXMgb2YgdmFsdWVzKVwiLFxuICAgICAgKSxcbiAgICB6LmxpdGVyYWwoXCJwaWVcIikuZGVzY3JpYmUoXCJwYXJ0cy1vZi1hLXdob2xlIHdoZW4gMi03IGNhdGVnb3JpZXMgc3VtIHRvIGEgbWVhbmluZ2Z1bCB0b3RhbFwiKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImZ1bm5lbFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQgc3RhZ2VzIHRoYXQgc2hyaW5rIChjb252ZXJzaW9uLCBwaXBlbGluZSwgYXR0cml0aW9uKSAtIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ0cmVlbWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwicGFydHMtb2YtYS13aG9sZSBhcyBuZXN0ZWQgcmVjdGFuZ2xlcyB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gfjcgY2F0ZWdvcmllcyBvciBhIGZsYXQgaGllcmFyY2h5IG9mIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjdXN0b21cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJlc2NhcGUgaGF0Y2ggZm9yIGEgY2hhcnQgbm9uZSBvZiB0aGUgYWJvdmUgY2FuIGV4cHJlc3MgKHNhbmtleSwgYm94cGxvdCwgY2FuZGxlc3RpY2ssIHN1bmJ1cnN0LCBnYXVnZSwgbmV0d29yayBncmFwaCwgY2FsZW5kYXIsIHBhcmFsbGVsLCAuLi4pIC0gaGFuZC13cml0ZSB0aGUgY29tcGxldGUgRWNoYXJ0cyBvcHRpb24gaW5zdGVhZCBvZiBhIHBsYW5cIixcbiAgICAgICksXG4gIF0pXG4gIC5kZXNjcmliZShcIlRoZSBjaGFydCBzaGFwZSB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgZGF0YSBhbmQgaW50ZW50LlwiKTtcbi8qKiBTdXBwb3J0ZWQgY2hhcnQgZmFtaWx5IHNlbGVjdGVkIGJ5IHRoZSBzZXJ2ZXItc2lkZSBjaGFydCBwbGFubmVyLiAqL1xuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRUeXBlU2NoZW1hPjtcblxuLyoqXG4gKiBSZXNvbHZlZCBjaGFydCBwbGFuIGEgc2V0dGxlZCBjaGFydCBlbnRyeSBjYXJyaWVzIG9uIGl0c1xuICogYHJlc3VsdGAgZmllbGQuIGBvcHRpb25gIGlzIHRoZSBmdWxsIEVjaGFydHMgc3BlYzsgcGFzc1xuICogc3RyYWlnaHQgaW50byBgPFJlYWN0RUNoYXJ0cyBvcHRpb249ey4uLn0+YC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydFR5cGU6IENoYXJ0VHlwZVNjaGVtYSxcbiAgb3B0aW9uOiB6XG4gICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkZ1bGx5LXJlc29sdmVkIEVjaGFydHMgYEVDaGFydHNPcHRpb25gIEpTT04gZm9yIHRoaXMgY2hhcnQgLSBkcm9wIGRpcmVjdGx5IGludG8gYW4gRWNoYXJ0cyBpbnN0YW5jZSAob3IgYDxSZWFjdEVDaGFydHMgb3B0aW9uPXsuLi59IC8+YCkgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuIEluY2x1ZGVzIHRpdGxlIC8gdG9vbHRpcCAvIGxlZ2VuZCAvIGdyaWQgLyBheGlzIC8gc2VyaWVzIGRlZmF1bHRzIGFscmVhZHkgbWVyZ2VkIGluLlwiLFxuICAgICksXG59KTtcbi8qKiBSZW5kZXItcmVhZHkgY2hhcnQgcGxhbiBzdG9yZWQgYmVoaW5kIGEgY2hhcnQgZW1iZWQgaWRlbnRpZmllci4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRSZXN1bHRTY2hlbWE+O1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IEFORCBzZXJ2ZXItc2lkZSBjYWNoZSBzaGFwZSBmb3IgYSBjaGFydCBlbnRyeS5cbiAqIFRocmVlIGxpZmVjeWNsZSBzdGF0ZXMgaW5mZXJyZWQgZnJvbSB0aGUgdHdvIG9wdGlvbmFsIGZpZWxkc1xuICogKG5vIGRpc2NyaW1pbmF0b3IgbmVlZGVkKTpcbiAqXG4gKiAgIC0gYHJlc3VsdGAgc2V0ICAgICAgICAgICAgICAgICAgICAtPiBjaGFydCBpcyByZWFkeSB0byByZW5kZXJcbiAqICAgLSBgZXJyb3JgIHNldCAgICAgICAgICAgICAgICAgICAgIC0+IHBsYW5uZXIgLyBkYXRhIGZldGNoIGZhaWxlZFxuICogICAtIGJvdGggYHJlc3VsdGAgYW5kIGBlcnJvcmAgdW5zZXQgLT4gc3RpbGwgcHJvY2Vzc2luZ1xuICpcbiAqIGBvcHRpb25gIGlzIHR5cGVkIGFzIGEgZ2VuZXJpYyByZWNvcmQgc28gdGhpcyBwYWNrYWdlIHN0YXlzXG4gKiBkZXBlbmRlbmN5LWZyZWUgb2YgYGVjaGFydHNgLiBUaGUgc2VydmVyIChgY2hhcnQudHNgKSBpbXBvcnRzXG4gKiB0aGlzIHNjaGVtYSBkaXJlY3RseTsgdGhlIGRlbW8gY2xpZW50IHBvbGxzIHRoZVxuICogYC9lbWJlZC9jaGFydC86aWRgIHJvdXRlIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGFnYWluc3QgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRJZDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiT3BhcXVlIGlkIG1pbnRlZCBieSB0aGUgY2hhcnQgc3Vic3lzdGVtLiBFbWJlZCB2ZXJiYXRpbSBhcyBgW2NoYXJ0OjxjaGFydElkPl1gIGluIGFnZW50IHByb3NlOyB0aGUgaG9zdCBVSSByZXNvbHZlcyBpdCBhZ2FpbnN0IHRoaXMgY2FjaGUgZW50cnkuXCIsXG4gICAgKSxcbiAgZXJyb3I6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBjaGFydCBmYWlsZWQgKGRhdGEgZmV0Y2ggZXJyb3IsIHBsYW5uZXIgZXJyb3IsIGVtcHR5IGRhdGFzZXQpLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgcmVzdWx0YDsgYWJzZW50IG9uIHN1Y2Nlc3MgYW5kIHdoaWxlIHByb2Nlc3NpbmcuXCIsXG4gICAgKSxcbiAgcmVzdWx0OiBDaGFydFJlc3VsdFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgIFwiUmVzb2x2ZWQgY2hhcnQgcGxhbi4gQWJzZW50IHdoaWxlIHByb2Nlc3NpbmcgYW5kIHdoZW4gdGhlIHJ1biBlcnJvcmVkLlwiLFxuICApLFxufSk7XG4vKiogUG9sbGFibGUgY2hhcnQtY2FjaGUgZW50cnkgcmVwcmVzZW50aW5nIHBlbmRpbmcsIHN1Y2Nlc3NmdWwsIG9yIGZhaWxlZCBwbGFubmluZy4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9lbWJlZC9kYXRhLzppZGAuXG4gKlxuICogTWlycm9ycyB0aGUgYWdlbnQtc2lkZSBgZ2V0X3N0YXRlbWVudGAgdG9vbCdzIG91dHB1dCBzbyB0aGVcbiAqIGhvc3QgVUkgYW5kIHRoZSBMTE0gc2VlIHRoZSBleGFjdCBzYW1lIHNoYXBlIGZvciB0aGUgc2FtZVxuICogc3RhdGVtZW50OyB0aGUgcm91dGUgaXMgd2hhdCByZXNvbHZlcyBgW2RhdGE6PHN0YXRlbWVudF9pZD5dYFxuICogbWFya2VycyB0aGUgYWdlbnQgZW1iZWRzIGluIHByb3NlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgY29sdW1uc2A6IGNvbHVtbiBuYW1lcyBpbiBkZWNsYXJhdGlvbiBvcmRlci5cbiAqICAgLSBgcm93c2A6IHJvdyByZWNvcmRzIGtleWVkIGJ5IGNvbHVtbiBuYW1lLiBDZWxsIHZhbHVlcyBhcmVcbiAqICAgICBlaXRoZXIgY29lcmNlZCBudW1iZXJzIG9yIHRoZSBvcmlnaW5hbCBzdHJpbmdzIChHZW5pZSAvXG4gKiAgICAgU3RhdGVtZW50IEV4ZWN1dGlvbiByZXR1cm5zIGV2ZXJ5IGNlbGwgYXMgYHN0cmluZyB8IG51bGxgO1xuICogICAgIG51bWVyaWMtbG9va2luZyBjZWxscyBhcmUgY29lcmNlZCBzZXJ2ZXItc2lkZSBzbyB0aGUgVUlcbiAqICAgICBjYW4gZm9ybWF0IHdpdGggYHRhYnVsYXItbnVtc2Agd2l0aG91dCByZS1wYXJzaW5nKS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgdXBzdHJlYW0gKGluZGVwZW5kZW50IG9mIHRoZVxuICogICAgIGBsaW1pdGAgY2FwKS4gQ29tcGFyZSBhZ2FpbnN0IGByb3dzLmxlbmd0aGAgdG8gZGV0ZWN0XG4gKiAgICAgdHJ1bmNhdGlvbiAtIGB0cnVuY2F0ZWRgIGlzIHRoZSBwcmVjb21wdXRlZCBmbGFnLlxuICogICAtIGB0cnVuY2F0ZWRgOiBgdHJ1ZWAgd2hlbiB0aGUgc2VydmVyIGNsaXBwZWQgcm93cyB0byBob25vclxuICogICAgIHRoZSByb3V0ZSdzIHJvdyBjYXA7IHRoZSBVSSBzaG91bGQgc3VyZmFjZSBhIFwic2hvd2luZyBOIG9mXG4gKiAgICAgTSByb3dzXCIgYWZmb3JkYW5jZSBpbiB0aGF0IGNhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0ZW1lbnREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxuICB0cnVuY2F0ZWQ6IHouYm9vbGVhbigpLFxufSk7XG4vKiogVGFidWxhciBzdGF0ZW1lbnQgcGF5bG9hZCByZXNvbHZlZCBmcm9tIGEgYFtkYXRhOjxzdGF0ZW1lbnRfaWQ+XWAgZW1iZWQgbWFya2VyLiAqL1xuZXhwb3J0IHR5cGUgU3RhdGVtZW50RGF0YSA9IHouaW5mZXI8dHlwZW9mIFN0YXRlbWVudERhdGFTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tIG1hc3RyYS1vbmx5IGdlbmllLWFnZW50IGV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiB0aGUgR2VuaWUgdG9vbCBpbnZvY2F0aW9uIHN0YXJ0ZWQuXG4gKiBFbWl0dGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNhbGxpbmcgYWdlbnQgaW52b2tlcyB0aGUgR2VuaWVcbiAqIHRvb2wsIGJlZm9yZSBhbnkgaW5uZXIgYWdlbnQgLyB3aXJlIGFjdGl2aXR5LCBzbyB0aGUgVUkgY2FuXG4gKiBwb3AgYSBcIlRoaW5raW5nLi4uXCIgcGlsbCB0aGUgaW5zdGFudCB0aGUgbW9kZWwgZGVjaWRlcyB0b1xuICogZGVsZWdhdGUuIGBjb252ZXJzYXRpb25JZGAgLyBgbWVzc2FnZUlkYCBhcmUgYWJzZW50IG9uIHRoaXNcbiAqIGZpcnN0IGVtaXQgKG5vIEdlbmllIHJvdW5kLXRyaXAgeWV0KS4gRmllbGQgbmFtZXMgYXJlXG4gKiBjYW1lbENhc2UgKHZzIHRoZSBzbmFrZV9jYXNlIHdpcmUgZXZlbnRzKSB0byBtaXJyb3IgdGhlXG4gKiBHZW5pZSBhZ2VudCdzIG93biBpbnRlcm5hbCBkYXRhIHBsdW1iaW5nLlxuICovXG5leHBvcnQgY29uc3QgU3RhcnRlZEV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGFydGVkXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKipcbiAgICogR2VuaWUgY29udmVyc2F0aW9uIGlkLCBwb3B1bGF0ZWQgb25seSB3aGVuIHRoaXMgYHN0YXJ0ZWRgXG4gICAqIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGEgZm9sbG93LXVwIHR1cm4gb24gYW4gZXhpc3RpbmdcbiAgICogY29udmVyc2F0aW9uLiBBYnNlbnQgb24gdGhlIGZpcnN0IHR1cm4uXG4gICAqL1xuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogR2VuaWUgbWVzc2FnZSBpZCwgcG9wdWxhdGVkIG9ubHkgYWZ0ZXIgdGhlIGZpcnN0IHdpcmVcbiAgICogYG1lc3NhZ2VgIGV2ZW50IGxhbmRzLiBBYnNlbnQgb24gdGhlIGltbWVkaWF0ZS1vbi1pbnZva2VcbiAgICogZW1pdC5cbiAgICovXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogUXVlc3Rpb24gdGhlIEdlbmllIGFnZW50IHNlbnQgdG8gR2VuaWUuICovXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCksXG59KTtcbi8qKiBJbW1lZGlhdGUgbGlmZWN5Y2xlIGV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBgYXNrX2dlbmllYCBpbnZvY2F0aW9uIGJlZ2lucy4gKi9cbmV4cG9ydCB0eXBlIFN0YXJ0ZWRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXJ0ZWRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvblxuICogZmluaXNoZWQuIENhcnJpZXMgdGhlIGh5ZHJhdGVkIGBzdGF0ZW1lbnRJZHNgIChyb3dzIGFyZSBmZXRjaGVkXG4gKiB2aWEgYGdldFN0YXRlbWVudGAgc2VwYXJhdGVseSkgYW5kIEdlbmllJ3MgZmluYWwgcHJvc2UgYW5zd2VyXG4gKiBzbyB0aGUgVUkgY2FuIG1vdmUgZnJvbSBcInRoaW5raW5nXCIgdG8gXCJhbnN3ZXJlZFwiIHdpdGhvdXRcbiAqIHdhaXRpbmcgZm9yIHRoZSBHZW5pZSBhZ2VudCdzIHdob2xlIHJlYXNvbmluZyBsb29wIHRvIGVuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFza0dlbmllRG9uZUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhc2tfZ2VuaWVfZG9uZVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBHZW5pZSdzIG5hdHVyYWwtbGFuZ3VhZ2UgYW5zd2VyIGZvciB0aGUgdHVybiwgaWYgYW55LiAqL1xuICBhbnN3ZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFN0YXRlbWVudCBpZHMgZm9yIGFueSBub24tZW1wdHkgcmVzdWx0IHNldHMgdGhpcyB0dXJuIHByb2R1Y2VkLiAqL1xuICBzdGF0ZW1lbnRJZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIC8qKlxuICAgKiBUZXJtaW5hbCB3aXJlIHN0YXR1cyAoYENPTVBMRVRFRGAgLyBgRkFJTEVEYCAvIGBDQU5DRUxMRURgKS5cbiAgICogTWlycm9ycyB0aGUgc291cmNlIGByZXN1bHRgIGV2ZW50J3Mgc3RhdHVzIHNvIHN1YnNjcmliZXJzXG4gICAqIGNhbiByZWFjdCB0byBhc2stbGV2ZWwgY29tcGxldGlvbiB3aXRob3V0IHJlLXdhbGtpbmcgaGlzdG9yeS5cbiAgICogVHJlYXRlZCBhcyBgei5jdXN0b208TWVzc2FnZVN0YXR1cz5gIGJlY2F1c2UgdGhlIFNESyBpcyB0aGVcbiAgICogc291cmNlIG9mIHRydXRoIGZvciB0aGUgZW51bSB2YWx1ZXMuXG4gICAqL1xuICBzdGF0dXM6IHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiksXG59KTtcbi8qKiBDb21wbGV0aW9uIGV2ZW50IGZvciBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvbiwgaW5jbHVkaW5nIGl0cyB0ZXJtaW5hbCBzdGF0dXMuICovXG5leHBvcnQgdHlwZSBBc2tHZW5pZURvbmVFdmVudCA9IHouaW5mZXI8dHlwZW9mIEFza0dlbmllRG9uZUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBlcnJvciBldmVudDogdGVybWluYWwgR2VuaWUgYWdlbnQgLyB0cmFuc3BvcnRcbiAqIGVycm9yLiBHZW5pZSdzIG93biBgRkFJTEVEYCAvIGBDQU5DRUxMRURgIGNvbWUgdGhyb3VnaCB0aGVcbiAqIHdpcmUncyBgcmVzdWx0YCBldmVudCAtIHRoaXMgdmFyaWFudCBpcyBmb3IgZmFpbHVyZXMgdGhlIHdpcmVcbiAqIGNhbid0IHJlcHJlc2VudCAobmV0d29yaywgR2VuaWUgYWdlbnQgY3Jhc2gsIHBsYW5uZXIgZXJyb3IsXG4gKiBldGMuKSBwbHVzIGEgVUktZnJpZW5kbHkgbWlycm9yIG9mIGByZXN1bHRgIHdoZW4gdGhlIHN0YXR1cyBpc1xuICogbm9uLWBDT01QTEVURURgLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCksXG59KTtcbi8qKiBNYXN0cmEtc2lkZSBmYWlsdXJlIGV2ZW50IGZvciBlcnJvcnMgb3V0c2lkZSBHZW5pZSdzIG5vcm1hbCB0ZXJtaW5hbCByZXN1bHQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFHZW5pZUVycm9yRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogdGhlIGlubmVyIEdlbmllIGFnZW50J3NcbiAqIHN0cnVjdHVyZWQtb3V0cHV0IGNvZXJjaW9uIGhhcyBsYW5kZWQuIEZpcmVzIG9uY2UgcGVyIEdlbmllXG4gKiB0b29sIGludm9jYXRpb24sIEFGVEVSIGBhZ2VudC5nZW5lcmF0ZSguLi4pYCBjb21wbGV0ZXMgKGkuZS5cbiAqIHRoZSBpbm5lciBsb29wICsgTWFzdHJhJ3Mgc3RydWN0dXJpbmcgcGFzcyBoYXZlIGJvdGhcbiAqIGZpbmlzaGVkKSBhbmQgQkVGT1JFIHRoZSB3cmFwcGVyIGh5ZHJhdGVzIGVhY2ggYGRhdGFgIGl0ZW1cbiAqIHdpdGggYSBjaGFydC4gU2lnbmFscyB0byB0aGUgaG9zdCBVSSB0aGF0IHRoZSBhZ2VudCBoYXNcbiAqIHN0b3BwZWQgcmVhc29uaW5nIGFuZCBpcyBtb3ZpbmcgaW50byBjaGFydCBnZW5lcmF0aW9uLlxuICpcbiAqIFRoZSBzdHJ1Y3R1cmluZyBwYXNzIGl0c2VsZiBpcyBvcGFxdWUgKGl0IHJ1bnMgaW5zaWRlXG4gKiBNYXN0cmEncyBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgdG9nZXRoZXIgd2l0aCB0aGUgdG9vbCBsb29wKVxuICogc28gdGhpcyBpcyB0aGUgZWFybGllc3QgaG9vayB3ZSBjYW4gb2ZmZXI7IHdlIGNhbid0IGZpcmUgYVxuICogXCJzdW1tYXJ5IHN0YXJ0ZWRcIiBldmVudCB0aGUgd2F5IHdlIGZpcmUgYHN0YXJ0ZWRgLlxuICovXG5leHBvcnQgY29uc3QgU3VtbWFyeUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdW1tYXJ5XCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKiogVG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhZ2VudCdzIHN0cnVjdHVyZWQgc3VtbWFyeS4gKi9cbiAgaXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqIENvdW50IG9mIGB0ZXh0YCAvIHByb3NlIGl0ZW1zIGluIHRoZSBzdW1tYXJ5LiAqL1xuICB0ZXh0SXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqXG4gICAqIENvdW50IG9mIGBkYXRhYCBpdGVtcyB0aGUgd3JhcHBlciB3aWxsIGh5ZHJhdGUgaW50byBjaGFydHMuXG4gICAqIFRoZSBob3N0IFVJIGNhbiB1c2UgdGhpcyB0byBzZWVkIE4gY2hhcnQgc2tlbGV0b25zIGJlZm9yZVxuICAgKiB0aGUgcGVyLWNoYXJ0IGV2ZW50cyBhcnJpdmUuXG4gICAqL1xuICBkYXRhSXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbn0pO1xuLyoqIExpZmVjeWNsZSBldmVudCBlbWl0dGVkIGJlZm9yZSBzdW1tYXJ5IGRhdGEgaXRlbXMgYXJlIGh5ZHJhdGVkIGludG8gY2hhcnRzLiAqL1xuZXhwb3J0IHR5cGUgU3VtbWFyeUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgU3VtbWFyeUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBldmVudCB1bmlvbi4gRWFjaCB2YXJpYW50IHVzZXMgdGhlIHNhbWUgZmxhdFxuICogYHt0eXBlLCAuLi5maWVsZHN9YCBzaGFwZSBhcyB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHNvXG4gKiBzdWJzY3JpYmVycyB1bmlvbiBib3RoIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudEV2ZW50U2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgU3RhcnRlZEV2ZW50U2NoZW1hLFxuICBBc2tHZW5pZURvbmVFdmVudFNjaGVtYSxcbiAgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hLFxuICBTdW1tYXJ5RXZlbnRTY2hlbWEsXG5dKTtcbi8qKiBNYXN0cmEtb3duZWQgbGlmZWN5Y2xlIGV2ZW50cyBsYXllcmVkIG9uIHRvcCBvZiBHZW5pZSdzIHdpcmUgZXZlbnQgc3RyZWFtLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudEV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBUaGUgdW5pZmllZCB3cml0ZXItZXZlbnQgdm9jYWJ1bGFyeSBzdWJzY3JpYmVycyBzZWUgb25cbiAqIGBjdHgud3JpdGVyYDogdGhlIHdpcmUtZGVyaXZlZCB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHVuaW9uXG4gKiAqKnBsdXMqKiBNYXN0cmEtb25seSBldmVudHMgZnJvbSB7QGxpbmsgR2VuaWVBZ2VudEV2ZW50fS4gRWFjaFxuICogdmFyaWFudCBpcyBhIGZsYXQgYHt0eXBlLCAuLi5maWVsZHN9YCBvYmplY3Q7IGNvbnN1bWVycyBuYXJyb3dcbiAqIG9uIGB0eXBlYCBhbmQgcmVhZCBmaWVsZHMgaW5saW5lIC0gdGhlcmUgaXMgbm8gcGF5bG9hZCB3cmFwcGVyXG4gKiBhbmQgbm8gd3JpdGVyLWJvdW5kYXJ5IHRyYW5zbGF0b3IuXG4gKlxuICogQ29tcG9zZWQgdmlhIGB6LnVuaW9uYCAobm90IGB6LmRpc2NyaW1pbmF0ZWRVbmlvbmApIGJlY2F1c2VcbiAqIGJvdGggaGFsdmVzIGFyZSB0aGVtc2VsdmVzIGRpc2NyaW1pbmF0ZWQgdW5pb25zIG9uIHRoZSBzYW1lXG4gKiBgdHlwZWAga2V5LlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVXcml0ZXJFdmVudFNjaGVtYSA9IHoudW5pb24oW1xuICBnZW5pZU1vZGVsLkdlbmllQ2hhdEV2ZW50U2NoZW1hLFxuICBHZW5pZUFnZW50RXZlbnRTY2hlbWEsXG5dKTtcbi8qKiBDb21wbGV0ZSBldmVudCB2b2NhYnVsYXJ5IHdyaXR0ZW4gYnkgdGhlIE1hc3RyYSBHZW5pZSBpbnRlZ3JhdGlvbi4gKi9cbmV4cG9ydCB0eXBlIEdlbmllV3JpdGVyRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVdyaXRlckV2ZW50U2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllV3JpdGVyRXZlbnR9LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVXcml0ZXJFdmVudFR5cGUgPSBHZW5pZVdyaXRlckV2ZW50W1widHlwZVwiXTtcblxuLyoqIE5hdGl2ZSBBSSBTREsgY3VzdG9tIGRhdGEtcGFydCB0eXBlIGNhcnJ5aW5nIG9uZSBHZW5pZSBwcm9ncmVzcyBldmVudC4gKi9cbmV4cG9ydCBjb25zdCBHRU5JRV9QUk9HUkVTU19QQVJUX1RZUEUgPSBcImRhdGEtZ2VuaWUtcHJvZ3Jlc3NcIiBhcyBjb25zdDtcblxuLyoqXG4gKiBEYXRhIGF0dGFjaGVkIHRvIHtAbGluayBHRU5JRV9QUk9HUkVTU19QQVJUX1RZUEV9LiBgdG9vbENhbGxJZGAgYXNzb2NpYXRlc1xuICogcHJvZ3Jlc3Mgd2l0aCB0aGUgbmF0aXZlIHRvb2wgcGFydCB0aGF0IG93bnMgdGhlIHJlcXVlc3QgYW5kIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgZXZlbnQ6IEdlbmllV3JpdGVyRXZlbnRTY2hlbWEsXG59KTtcbi8qKiBWYWxpZGF0ZWQgcGF5bG9hZCBjYXJyaWVkIGJ5IGEgbmF0aXZlIEdlbmllIHByb2dyZXNzIGRhdGEgcGFydC4gKi9cbmV4cG9ydCB0eXBlIEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YSA9IHouaW5mZXI8dHlwZW9mIEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VtbWFyeSArIGRhdGFzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGFidWxhciBwYXlsb2FkIGVtYmVkZGVkIGluIGV2ZXJ5IHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfVxuICogYHZpc3VhbGl6ZWAgZGF0YXNldC4gQWx3YXlzIHByZXNlbnQ6IGh5ZHJhdGVkIGJ5IHRoZSB3b3JrZmxvdydzXG4gKiBhZ2VudCBzdGVwIGJlZm9yZSB0aGUgZmluYWxpemUgc3RlcCBydW5zLCBzbyBjb25zdW1lcnMgY2FuIHJlbmRlclxuICogYSB0YWJsZSBmYWxsYmFjayByZWdhcmRsZXNzIG9mIGNoYXJ0LXBsYW5uZXIgb3V0Y29tZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGNvbHVtbnNgOiBjb2x1bW4gbmFtZXMgaW4gZGlzcGxheSBvcmRlci5cbiAqICAgLSBgcm93c2A6IHRhYnVsYXIgcm93cyBrZXllZCBieSBjb2x1bW4gbmFtZS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgR2VuaWUgcmVwb3J0ZWQgKG1heSBleGNlZWRcbiAqICAgICBgcm93cy5sZW5ndGhgIHdoZW4gdGhlIHN0YXRlbWVudCB3YXMgdHJ1bmNhdGVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHJvd3M6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCksXG59KTtcbi8qKiBIeWRyYXRlZCB0YWJ1bGFyIGRhdGEgdGhhdCBhbHdheXMgYmFja3MgYSBHZW5pZSB2aXN1YWxpemF0aW9uIGl0ZW0uICovXG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXREYXRhID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYT47XG5cbi8qKlxuICogU2xpbSBjaGFydCByZWZlcmVuY2UgYXR0YWNoZWQgdG8gYSB2aXN1YWxpemUgZGF0YXNldC4gT25seVxuICogcHJlc2VudCB3aGVuIHBsYW5uaW5nIHN1Y2NlZWRlZC5cbiAqXG4gKiBgb3B0aW9uYCBpcyBpbnRlbnRpb25hbGx5IE5PVCBpbmNsdWRlZC4gVGhlIHJlc29sdmVkIEVjaGFydHNcbiAqIHNwZWMgbGl2ZXMgb2ZmLWJhbmQgaW4gdGhlIGNoYXJ0IGNhY2hlOiB0aGUgaG9zdCBVSSBmZXRjaGVzIGl0XG4gKiBieSBgY2hhcnRJZGAgZnJvbSB0aGUgcGx1Z2luJ3MgZW1iZWQgcm91dGUgKGRlcml2ZWQgZnJvbVxuICogYGJhc2VQYXRoYCArIHtAbGluayBNQVNUUkFfUk9VVEVTfS5lbWJlZCwgaS5lLiBgL2VtYmVkL2NoYXJ0LzppZGA7XG4gKiBzZWUge0BsaW5rIENoYXJ0fSkuIEVtYmVkZGluZyB0aGUgZnVsbCBzcGVjIGlubGluZSB3b3VsZFxuICogaW5mbGF0ZSBldmVyeSBkYXRhc2V0IGJ5IHNldmVyYWwgS0IgcGVyIGNoYXJ0IGFuZCByb3VuZC10cmlwXG4gKiB0aHJvdWdoIHRoZSBMTE0gY29udGV4dCBmb3IgemVybyBiZW5lZml0ICh0aGUgbW9kZWwgb25seSBuZWVkc1xuICogdGhlIGBjaGFydElkYCB0byBwbGFjZSBhIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgbWFya2VyIGluIGl0c1xuICogcmVwbHkpLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHouc3RyaW5nKCksXG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxufSk7XG4vKiogTGlnaHR3ZWlnaHQgcmVmZXJlbmNlIHRvIGEgY2hhcnQgcGxhbiBzdG9yZWQgaW4gdGhlIE1hc3RyYSBjaGFydCBjYWNoZS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWE+O1xuXG4vKipcbiAqIERhdGFzZXQgYnVuZGxlIGF0dGFjaGVkIHRvIGEge0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19IGB2aXN1YWxpemVgXG4gKiBpdGVtLiBgZGF0YWAgaXMgYWx3YXlzIHBvcHVsYXRlZDsgYGNoYXJ0YCBpcyBiZXN0LWVmZm9ydCBhbmRcbiAqIGFic2VudCB3aGVuIHRoZSB3b3JrZmxvdydzIGNoYXJ0LXBsYW5uZXIgZmFpbGVkICh0aW1lb3V0LFxuICogbWFsZm9ybWVkIHBsYW4sIGFib3J0KSBzbyB0aGUgaG9zdCBVSSBjYW4gc3RpbGwgcmVuZGVyIHRoZVxuICogdW5kZXJseWluZyB0YWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGF0YTogR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSxcbiAgY2hhcnQ6IEdlbmllRGF0YXNldENoYXJ0U2NoZW1hLm9wdGlvbmFsKCksXG59KTtcbi8qKiBWaXN1YWxpemF0aW9uIGRhdGFzZXQgd2l0aCByZXF1aXJlZCB0YWJsZSBkYXRhIGFuZCBhbiBvcHRpb25hbCBwbGFubmVkIGNoYXJ0LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVEYXRhc2V0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0U2NoZW1hPjtcblxuLyoqXG4gKiBPbmUgaXRlbSBpbnNpZGUgdGhlIEdlbmllIHdvcmtmbG93J3MgZmluYWwgc3VtbWFyeS4gVGhlXG4gKiB3b3JrZmxvdyBwcm9kdWNlcyBhIG1peGVkIHNlcXVlbmNlIG9mOlxuICpcbiAqICAgLSBgc3RyaW5nYDogYSBtYXJrZG93biBwYXJhZ3JhcGggKGludGVycHJldGF0aW9uLCBjYWxsb3V0cyxcbiAqICAgICB0cmFuc2l0aW9ucyBiZXR3ZWVuIGRhdGEgYmxvY2tzKS5cbiAqICAgLSBgdmlzdWFsaXplYDogYSByZXF1ZXN0IGZyb20gdGhlIGFnZW50IHN0ZXAgdG8gdmlzdWFsaXplIGFcbiAqICAgICBzcGVjaWZpYyBHZW5pZSBzdGF0ZW1lbnQgYXQgdGhpcyBwb3NpdGlvbiBpbiB0aGUgcHJvc2UuXG4gKiAgICAgVGhlIGZpbmFsaXplIHN0ZXAgaHlkcmF0ZXMgYGRhdGFzZXQuZGF0YWAgKHJvd3MgZnJvbSB0aGVcbiAqICAgICBtYXRjaGluZyBgc3RhdGVtZW50SWRgKSBhbmQgYXR0YWNoZXMgYGRhdGFzZXQuY2hhcnRgIGFmdGVyXG4gKiAgICAgcnVubmluZyB0aGUgY2hhcnQtcGxhbm5lci4gVGhlIGFnZW50IE5FVkVSIHBpY2tzIHRoZSBjaGFydFxuICogICAgIHR5cGUgLSBpdCBvbmx5IG1hcmtzIHdoZXJlIGEgdmlzdWFsaXphdGlvbiBiZWxvbmdzLlxuICpcbiAqIFRoZSBob3N0IFVJIHdhbGtzIHRoZSBhcnJheSBpbiBkaXNwbGF5IG9yZGVyIHRvIGNvbXBvc2UgdGhlXG4gKiBmaW5hbCBhc3Npc3RhbnQgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nXCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidmlzdWFsaXplXCIpLFxuICAgIHN0YXRlbWVudElkOiB6LnN0cmluZygpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkYXRhc2V0OiBHZW5pZURhdGFzZXRTY2hlbWEsXG4gIH0pLFxuXSk7XG4vKiogT3JkZXJlZCBwcm9zZSBvciB2aXN1YWxpemF0aW9uIGl0ZW0gaW4gdGhlIEdlbmllIGFnZW50J3MgZmluYWwgc3VtbWFyeS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllU3VtbWFyeUl0ZW0gPSB6LmluZmVyPHR5cGVvZiBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbVR5cGUgPSBHZW5pZVN1bW1hcnlJdGVtW1widHlwZVwiXTtcblxuLyoqXG4gKiBUaGUgR2VuaWUgYWdlbnQncyBmaW5hbCBvdXRwdXQgc2hhcGUgLSB3aGF0IHRoZSBjYWxsaW5nIGFnZW50J3NcbiAqIEdlbmllIHRvb2wgcmV0dXJucyB0byB0aGUgY2FsbGluZyBMTE0uIFRoZSBgc3VtbWFyeWAgYXJyYXkgaXNcbiAqIHRoZSB1c2VyLWZhY2luZyByZW5kZXJhYmxlOyBgY29udmVyc2F0aW9uSWRgIGxldHMgdGhlIGNhbGxpbmdcbiAqIGFnZW50IChvciB0aGUgVUkpIGZvbGxvdyB1cCBpbiB0aGUgc2FtZSBHZW5pZSB0aHJlYWQgb24gdGhlXG4gKiBuZXh0IHR1cm4uXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdW1tYXJ5OiB6LmFycmF5KEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG4vKiogRmluYWwgcmVuZGVyYWJsZSBvdXRwdXQgcmV0dXJuZWQgYnkgdGhlIEdlbmllIGFnZW50IHRvb2wgdG8gaXRzIGNhbGxlci4gKi9cbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50UmVzdWx0U2NoZW1hPjtcbiJdfQ==
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/feedback.ts","../src/marker.ts","../src/override.ts","../src/routes.ts","../src/
|
|
1
|
+
{"root":["../src/feedback.ts","../src/marker.ts","../src/override.ts","../src/routes.ts","../src/thread.ts","../src/wire.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"typescript": "^5.9.3"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@dbx-tools/shared-genie": "0.6.
|
|
28
|
-
"@dbx-tools/shared-model": "0.6.
|
|
27
|
+
"@dbx-tools/shared-genie": "0.6.220",
|
|
28
|
+
"@dbx-tools/shared-model": "0.6.220",
|
|
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.220",
|
|
46
46
|
"types": "./lib/index.d.ts",
|
|
47
47
|
"type": "module",
|
|
48
48
|
"exports": {
|
package/src/routes.ts
CHANGED
|
@@ -5,11 +5,10 @@
|
|
|
5
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
|
-
*
|
|
9
|
-
* `defaultModel`
|
|
10
|
-
* uses the bare segment.
|
|
11
|
-
*
|
|
12
|
-
* there's no chat segment here.
|
|
8
|
+
* `chat` is the official Mastra AI SDK UI stream route and always carries an
|
|
9
|
+
* agent id. The `suggestions` and `defaultModel` segments take an optional
|
|
10
|
+
* `/:agentId` suffix; the default agent uses the bare segment. Memory history
|
|
11
|
+
* and thread management ride Mastra's native memory routes.
|
|
13
12
|
*
|
|
14
13
|
* `feedback` is the plugin-owned POST endpoint the chat UI calls to
|
|
15
14
|
* log a thumbs / comment assessment against a turn's MLflow trace (see
|
|
@@ -19,8 +18,7 @@
|
|
|
19
18
|
* @module
|
|
20
19
|
*/
|
|
21
20
|
export const MASTRA_ROUTES = {
|
|
22
|
-
|
|
23
|
-
threads: "/route/threads",
|
|
21
|
+
chat: "/chat",
|
|
24
22
|
feedback: "/route/feedback",
|
|
25
23
|
suggestions: "/suggestions",
|
|
26
24
|
models: "/models",
|