@dbx-tools/shared-mastra 0.5.1 → 0.6.1
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/wire.d.ts +7 -0
- package/lib/src/wire.js +8 -1
- package/package.json +4 -4
- package/src/wire.ts +7 -0
package/lib/src/wire.d.ts
CHANGED
|
@@ -57,12 +57,19 @@ import { z } from "zod";
|
|
|
57
57
|
* surfaces thumbs / comment controls. Defaults to `false` so a
|
|
58
58
|
* config published by an older server (without the field) parses
|
|
59
59
|
* cleanly to "off".
|
|
60
|
+
* - `chatAlwaysAvailable`: whether the agents' Databricks calls run as the
|
|
61
|
+
* app service principal rather than on-behalf-of the signed-in user. When
|
|
62
|
+
* `true` the chat works for any caller who can open the app, so a UI that
|
|
63
|
+
* hides chat when the OBO token is absent should show it anyway. Defaults
|
|
64
|
+
* to `false` (the OBO / `"user"` identity mode), so an older server without
|
|
65
|
+
* the field keeps the OBO-gated behavior.
|
|
60
66
|
*/
|
|
61
67
|
export declare const MastraClientConfigSchema: z.ZodObject<{
|
|
62
68
|
basePath: z.ZodString;
|
|
63
69
|
defaultAgent: z.ZodString;
|
|
64
70
|
agents: z.ZodArray<z.ZodString>;
|
|
65
71
|
feedbackEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
72
|
+
chatAlwaysAvailable: z.ZodDefault<z.ZodBoolean>;
|
|
66
73
|
}, z.core.$strip>;
|
|
67
74
|
export type MastraClientConfig = z.infer<typeof MastraClientConfigSchema>;
|
|
68
75
|
/**
|
package/lib/src/wire.js
CHANGED
|
@@ -58,12 +58,19 @@ import { z } from "zod";
|
|
|
58
58
|
* surfaces thumbs / comment controls. Defaults to `false` so a
|
|
59
59
|
* config published by an older server (without the field) parses
|
|
60
60
|
* cleanly to "off".
|
|
61
|
+
* - `chatAlwaysAvailable`: whether the agents' Databricks calls run as the
|
|
62
|
+
* app service principal rather than on-behalf-of the signed-in user. When
|
|
63
|
+
* `true` the chat works for any caller who can open the app, so a UI that
|
|
64
|
+
* hides chat when the OBO token is absent should show it anyway. Defaults
|
|
65
|
+
* to `false` (the OBO / `"user"` identity mode), so an older server without
|
|
66
|
+
* the field keeps the OBO-gated behavior.
|
|
61
67
|
*/
|
|
62
68
|
export const MastraClientConfigSchema = z.object({
|
|
63
69
|
basePath: z.string(),
|
|
64
70
|
defaultAgent: z.string(),
|
|
65
71
|
agents: z.array(z.string()),
|
|
66
72
|
feedbackEnabled: z.boolean().default(false),
|
|
73
|
+
chatAlwaysAvailable: z.boolean().default(false),
|
|
67
74
|
});
|
|
68
75
|
/**
|
|
69
76
|
* JSON payload returned by `GET ${basePath}/default-model[?agentId=]`. The
|
|
@@ -566,4 +573,4 @@ export const GenieAgentResultSchema = z.object({
|
|
|
566
573
|
summary: z.array(GenieSummaryItemSchema),
|
|
567
574
|
error: z.string().optional(),
|
|
568
575
|
});
|
|
569
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUM1QyxDQUFDLENBQUM7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFHSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxTQUFTLEVBQUUs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Q0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7S0FDakIsQ0FBQztJQUNGLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdkIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDbEMsT0FBTyxFQUFFLGtCQUFrQjtLQUM1QixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBTUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixjQUFjLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztJQUN4QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IGNvbnRyYWN0IGZvciBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYDogdGhlXG4gKiBkZXBlbmRlbmN5LWZyZWUgem9kIHNjaGVtYXMgKyBpbmZlcnJlZCB0eXBlcyBldmVyeSBjb25zdW1lciAodGhlXG4gKiBSZWFjdCBjbGllbnQsIGJyb3dzZXIgYnVuZGxlcywgdGhlIHNlcnZlciBwbHVnaW4pIHNoYXJlcy5cbiAqXG4gKiBLZXB0IGZyZWUgb2YgYHBnYCwgYGZhc3RlbWJlZGAsIGFuZCB0aGUgTWFzdHJhIHJ1bnRpbWUgc28gdGhlXG4gKiBjbGllbnQgY2FuIGltcG9ydCB0aGVzZSBzY2hlbWFzIHdpdGhvdXQgZHJhZ2dpbmcgaW4gc2VydmVyLW9ubHlcbiAqIGRlcGVuZGVuY2llcy4gVGhyZWUgbGF5ZXJzIGxpdmUgaGVyZTpcbiAqXG4gKiAgIDEuIFRoZSBkZXNjcmlwdG9yIHB1Ymxpc2hlZCBieSBgTWFzdHJhUGx1Z2luLmNsaWVudENvbmZpZygpYFxuICogICAgICBwbHVzIHRoZSBSRVNUIHBheWxvYWRzIGl0cyByb3V0ZXMgcmV0dXJuIChtb2RlbHMsIGhpc3RvcnksXG4gKiAgICAgIHN1Z2dlc3Rpb25zLCBjaGFydCBlbWJlZHMsIHN0YXRlbWVudCBkYXRhKS4gVGhlIHNlcnZlclxuICogICAgICBkZXJpdmVzIGV2ZXJ5IHBhdGggZnJvbSB0aGUgcGx1Z2luIG1vdW50IGFuZCBwdWJsaXNoZXMgdGhlXG4gKiAgICAgIHJlc29sdmVkIHBhdGhzIHNvIHRoZSBjbGllbnQgY29tcG9zZXMgVVJMcyB3aXRob3V0XG4gKiAgICAgIGhhcmQtY29kaW5nIGAvYXBpL21hc3RyYWAgLSByZW5hbWUgdGhlIHBsdWdpbiBhbmQgdGhlIGNsaWVudFxuICogICAgICBrZWVwcyB3b3JraW5nLlxuICogICAyLiBUaGUgYGN0eC53cml0ZXJgIGV2ZW50IHZvY2FidWxhcnk6IHRoZSB3aXJlLWRlcml2ZWRcbiAqICAgICAge0BsaW5rIEdlbmllQ2hhdEV2ZW50fXMgZnJvbSBgQGRieC10b29scy9nZW5pZS1zaGFyZWRgIHBsdXNcbiAqICAgICAgdGhlIE1hc3RyYS1vbmx5IGFnZW50IGxpZmVjeWNsZSBldmVudHMsIHVuaWZpZWQgYXNcbiAqICAgICAge0BsaW5rIEdlbmllV3JpdGVyRXZlbnR9IHNvIHN1YnNjcmliZXJzIG5hcnJvdyBib3RoIGhhbHZlc1xuICogICAgICB3aXRoIGEgc2luZ2xlIGBzd2l0Y2ggKGV2ZW50LnR5cGUpYC5cbiAqICAgMy4gVGhlIEdlbmllIGFnZW50J3Mgd29ya2Zsb3cgb3V0cHV0IHNoYXBlc1xuICogICAgICAoe0BsaW5rIEdlbmllQWdlbnRSZXN1bHR9IGFuZCBpdHMgc3VtbWFyeSAvIGRhdGFzZXQgaXRlbXMpLlxuICpcbiAqIFRoZSByb3V0ZSBzZWdtZW50cyBsaXZlIGluIHRoZSBzaWJsaW5nIGByb3V0ZXMudHNgXG4gKiAoe0BsaW5rIE1BU1RSQV9ST1VURVN9KSBhbmQgdGhlIGVtYmVkLW1hcmtlciBncmFtbWFyIGluIGBtYXJrZXIudHNgLFxuICogc28gdGhpcyBmaWxlIHN0YXlzIHB1cmVseSBkZWNsYXJhdGl2ZSAoc2NoZW1hcyArIGluZmVycmVkIHR5cGVzKS5cbiAqIFRoZSBicm93c2VyIGNsaWVudCB0aGF0IGRyaXZlcyB0aGVzZSByb3V0ZXMgKGBNYXN0cmFQbHVnaW5DbGllbnRgKVxuICogc2hpcHMgZnJvbSBgQGRieC10b29scy9hcHBraXQtbWFzdHJhLXVpYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2VuaWVNb2RlbCwgdHlwZSBHZW5pZUNoYXRFdmVudCwgdHlwZSBNZXNzYWdlU3RhdHVzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGllbnQgY29uZmlnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OLXNhZmUgZGVzY3JpcHRvciBwdWJsaXNoZWQgYnkgdGhlIE1hc3RyYSBwbHVnaW4nc1xuICogYGNsaWVudENvbmZpZygpYC5cbiAqXG4gKiBPbmx5IHRoZSBpcnJlZHVjaWJsZSBkYXRhIGxpdmVzIGhlcmU6IGBiYXNlUGF0aGAgKHRoZSBvbmUgcGF0aCB0aGVcbiAqIGNsaWVudCBjYW4ndCBvdGhlcndpc2Uga25vdywgc2luY2UgaXQgZW5jb2RlcyB0aGUgcGx1Z2luJ3MgbW91bnRcbiAqIG5hbWUpIHBsdXMgdGhlIHJ1bnRpbWUgYWdlbnQgcm9zdGVyLiBFdmVyeSBjb25jcmV0ZSBlbmRwb2ludCBVUkwgaXNcbiAqIGRlcml2ZWQgZnJvbSBgYmFzZVBhdGhgIGJ5IHRoZSBicm93c2VyIGNsaWVudFxuICogKGBNYXN0cmFQbHVnaW5DbGllbnRgKSB1c2luZyB0aGUgc2hhcmVkIHtAbGluayBNQVNUUkFfUk9VVEVTfVxuICogc2VnbWVudHMsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBwdWJsaXNoIHBlci1yb3V0ZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGJhc2VQYXRoYDogcGx1Z2luIG1vdW50IHBhdGguIEFsd2F5cyBgL2FwaS88cGx1Z2luTmFtZT5gLiBGZWVkXG4gKiAgICAgaXQgdG8gYG5ldyBNYXN0cmFQbHVnaW5DbGllbnQoY29uZmlnKWAgKGZyb21cbiAqICAgICBgQGRieC10b29scy9hcHBraXQtbWFzdHJhLXVpYCkgdG8gZ2V0IGEgdHlwZWQgY2xpZW50IG92ZXIgZXZlcnlcbiAqICAgICByb3V0ZSBwbHVzIHRoZSBzdGFuZGFyZCBhZ2VudCBzdHJlYW0uXG4gKiAgIC0gYGRlZmF1bHRBZ2VudGA6IGFnZW50IGlkIHRoZSBjbGllbnQgY29udmVyc2VzIHdpdGggd2hlbiBpdFxuICogICAgIGRvZXNuJ3QgbmFtZSBvbmUuXG4gKiAgIC0gYGFnZW50c2A6IGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgaWQgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICogICAtIGBmZWVkYmFja0VuYWJsZWRgOiB3aGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIGxvZyB1c2VyIGZlZWRiYWNrIHRvXG4gKiAgICAgTUxmbG93IChNTGZsb3cgdHJhY2luZyBpcyBjb25maWd1cmVkKS4gRHJpdmVzIHdoZXRoZXIgdGhlIGNoYXQgVUlcbiAqICAgICBzdXJmYWNlcyB0aHVtYnMgLyBjb21tZW50IGNvbnRyb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgIHNvIGFcbiAqICAgICBjb25maWcgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHNlcnZlciAod2l0aG91dCB0aGUgZmllbGQpIHBhcnNlc1xuICogICAgIGNsZWFubHkgdG8gXCJvZmZcIi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgYmFzZVBhdGg6IHouc3RyaW5nKCksXG4gIGRlZmF1bHRBZ2VudDogei5zdHJpbmcoKSxcbiAgYWdlbnRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBmZWVkYmFja0VuYWJsZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFDbGllbnRDb25maWcgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFDbGllbnRDb25maWdTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L2RlZmF1bHQtbW9kZWxbP2FnZW50SWQ9XWAuIFRoZVxuICogc3RhdGljIGRlZmF1bHQgbW9kZWwgdGhlIGFnZW50IHJlc29sdmVzIHRvIHdoZW4gdGhlIGNsaWVudCBwaW5zIG5vIG1vZGVsLFxuICogYXMgYm90aCB0aGUgcmF3IHNlcnZpbmctZW5kcG9pbnQgYG1vZGVsYCBpZCBhbmQgYSBgZGlzcGxheU5hbWVgICh0aGVcbiAqIGh1bWFuaXplZCBsYWJlbCB0aGUgcGlja2VyIHNob3dzKS4gQm90aCBhcmUgYG51bGxgIHdoZW4gdGhlIGFnZW50IGRlY2lkZXNcbiAqIGl0cyBtb2RlbCBkeW5hbWljYWxseSBhdCBjYWxsIHRpbWUgKG5vdGhpbmcgc3RhdGljIHRvIGFkdmVydGlzZSkuIExldHMgdGhlXG4gKiBwaWNrZXIgbGFiZWwgaXRzIGRlZmF1bHQgb3B0aW9uIFdJVEhPVVQgd2FpdGluZyBvbiB0aGUgYC9tb2RlbHNgIGNhdGFsb2d1ZSxcbiAqIHNvIGl0IG5ldmVyIGZsYXNoZXMgYSByYXcgaWQgb24gbG9hZC4gS2VwdCBvZmYgdGhlIHN0YXRpYyBib290c3RyYXBcbiAqIGBjbGllbnRDb25maWdgIG9uIHB1cnBvc2U6IGl0IGlzIHBlci1hZ2VudCBhbmQgY2FuIGJlIGR5bmFtaWMsIHNvIGl0IGlzXG4gKiBmZXRjaGVkIGxpa2UgYC9tb2RlbHNgLlxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdE1vZGVsUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGRpc3BsYXlOYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIERlZmF1bHRNb2RlbFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgRGVmYXVsdE1vZGVsUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1vZGVsIGNhdGFsb2d1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vbW9kZWxzYC4gV3JhcHMgdGhlIHNoYXJlZFxuICoge0BsaW5rIG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWF9IChyZS1leHBvcnRlZCBmcm9tXG4gKiBgQGRieC10b29scy9zaGFyZWQtbW9kZWxgKSBzbyB0aGUgY2F0YWxvZ3VlXG4gKiBkZXNjcmlwdG9yIGhhcyBhIHNpbmdsZSBkZWZpbml0aW9uIHRoZSBjbGllbnQsIHNlcnZlciwgYW5kIHRoZVxuICogc3RhbmRhbG9uZSBgQGRieC10b29scy9tb2RlbGAgdG9vbGtpdCBhbGwgYWdyZWUgb24uXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVuZHBvaW50czogei5hcnJheShtb2RlbC5TZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmluZ0VuZHBvaW50c1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgU2VydmluZ0VuZHBvaW50c1Jlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2hhdCBoaXN0b3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogU3RydWN0dXJhbCBzaGFwZSBmb3IgYW4gQUkgU0RLIFY1IGBVSU1lc3NhZ2VgLiBEZWZpbmVkIGxvY2FsbHlcbiAqIHNvIHRoZSBzaGFyZWQgdHlwZXMgcGFja2FnZSBzdGF5cyBkZXBlbmRlbmN5LWZyZWUgKG5vIGBhaWBcbiAqIGltcG9ydCkuIFRoZSBydW50aW1lIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgYC9oaXN0b3J5YCBlbmRwb2ludFxuICogYXJlIHByb2R1Y2VkIGJ5IGB0b0FJU2RrVjVNZXNzYWdlc2AgYW5kIGFyZSAxOjEgY29tcGF0aWJsZSB3aXRoXG4gKiBgVUlNZXNzYWdlYCBmcm9tIHRoZSBgYWlgIHBhY2thZ2U7IGNsaWVudHMgY2FuIHNhZmVseSBjYXN0IHdoZW5cbiAqIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByb2xlOiB6LmVudW0oW1wic3lzdGVtXCIsIFwidXNlclwiLCBcImFzc2lzdGFudFwiXSksXG4gIHBhcnRzOiB6LmFycmF5KHoudW5rbm93bigpKS5yZWFkb25seSgpLFxuICBtZXRhZGF0YTogei51bmtub3duKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2VTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L2hpc3RvcnlgLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgdWlNZXNzYWdlc2A6IHBhZ2Ugb2YgVUktZm9ybWF0dGVkIG1lc3NhZ2VzLCBvbGRlc3QgLT4gbmV3ZXN0LlxuICogICAgIEFsd2F5cyBjaHJvbm9sb2dpY2FsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgcGFnaW5hdGlvblxuICogICAgIG9yZGVyIHNvIHRoZSBjbGllbnQgY2FuIHByZXBlbmQgdGhlIGFycmF5IHRvIHRoZSBsaXZlXG4gKiAgICAgdHJhbnNjcmlwdCB3aXRob3V0IHNvcnRpbmcuXG4gKiAgIC0gYHBhZ2VgOiB6ZXJvLWluZGV4ZWQgcGFnZSB0aGF0IHByb2R1Y2VkIHRoaXMgcmVzcG9uc2UuXG4gKiAgIC0gYHBlclBhZ2VgOiBudW1iZXIgb2YgaXRlbXMgcmVxdWVzdGVkIHBlciBwYWdlLlxuICogICAtIGB0b3RhbGA6IHRvdGFsIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgdGhyZWFkLlxuICogICAtIGBoYXNNb3JlYDogdHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSBvbGRlciBwYWdlIGlzIHN0aWxsXG4gKiAgICAgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhSGlzdG9yeVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICB1aU1lc3NhZ2VzOiB6LmFycmF5KE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2VTY2hlbWEpLFxuICBwYWdlOiB6Lm51bWJlcigpLFxuICBwZXJQYWdlOiB6Lm51bWJlcigpLFxuICB0b3RhbDogei5udW1iZXIoKSxcbiAgaGFzTW9yZTogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUhpc3RvcnlSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUhpc3RvcnlSZXNwb25zZVNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBERUxFVEUgJHtiYXNlUGF0aH0vaGlzdG9yeWAuIERlbGV0ZXNcbiAqIGV2ZXJ5IHBlcnNpc3RlZCBtZXNzYWdlICsgd29ya2Zsb3cgc25hcHNob3QgdGllZCB0byB0aGUgY2FsbGVyJ3NcbiAqIHRocmVhZCwgc28gdGhlIG5leHQgY2hhdCB0dXJuIHN0YXJ0cyBmcm9tIGEgY2xlYW4gc2xhdGUuIFRoZVxuICogc2Vzc2lvbiBjb29raWUgdGhhdCBhbmNob3JzIHRoZSB0aHJlYWQgaWQgaXMgcHJlc2VydmVkIHNvIHRoZVxuICogY2FsbGVyIGRvZXNuJ3QgbG9zZSBpdHMgaWRlbnRpdHkgLSBvbmx5IHRoZSBjb250ZW50cyBnbyBhd2F5LlxuICpcbiAqIGBva2AgaXMgYWx3YXlzIGB0cnVlYCBvbiBzdWNjZXNzOyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIGtlcHRcbiAqIGFzIGEgc3RydWN0ICh2cyBhIGJhcmUgMjA0KSBzbyBmdXR1cmUgZmllbGRzIChlLmcuIGBkZWxldGVkQXRgLFxuICogYG1lc3NhZ2VzYCkgY2FuIGJlIGFkZGVkIHdpdGhvdXQgYnVtcGluZyB0aGUgY29udHJhY3QuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBva2A6IGxpdGVyYWwgYHRydWVgIG9uIHN1Y2Nlc3MuXG4gKiAgIC0gYGFnZW50SWRgOiBhZ2VudCB3aG9zZSBoaXN0b3J5IHdhcyBjbGVhcmVkLlxuICogICAtIGB0aHJlYWRJZGA6IHRocmVhZCBpZCB0aGF0IHdhcyB3aXBlZC5cbiAqICAgLSBgY2xlYXJlZGA6IG51bWJlciBvZiBtZXNzYWdlcyB0aGUgdGhyZWFkIGhlbGQgYmVmb3JlXG4gKiAgICAgZGVsZXRpb24uIFVzZWZ1bCBmb3IgY2xpZW50LXNpZGUgXCJjbGVhcmVkIDEyIG1lc3NhZ2VzXCJcbiAqICAgICB0b2FzdHM7IGAwYCBpcyByZXBvcnRlZCB3aGVuIHRoZSB0aHJlYWQgd2FzIGFscmVhZHkgZW1wdHlcbiAqICAgICAoY2FsbCBpcyBpZGVtcG90ZW50KS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBvazogei5saXRlcmFsKHRydWUpLFxuICBhZ2VudElkOiB6LnN0cmluZygpLFxuICB0aHJlYWRJZDogei5zdHJpbmcoKSxcbiAgY2xlYXJlZDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFDbGVhckhpc3RvcnlSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRocmVhZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBBIHNpbmdsZSBjb252ZXJzYXRpb24gdGhyZWFkIHRoZSByZXNvdXJjZSAoYXV0aGVudGljYXRlZCB1c2VyKSBvd25zLFxuICogYXMgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS90aHJlYWRzYC4gTWlycm9ycyBNYXN0cmEnc1xuICogYFN0b3JhZ2VUaHJlYWRUeXBlYCBidXQgd2l0aCBKU09OLXNhZmUgSVNPLTg2MDEgdGltZXN0YW1wcyAodGhlIHdpcmVcbiAqIGNhbid0IGNhcnJ5IGBEYXRlYCkuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBpZGA6IHRocmVhZCBpZC4gUGFzcyBpdCBiYWNrIGFzIHRoZSB0aHJlYWQtc2VsZWN0aW9uIGhlYWRlclxuICogICAgIChgVEhSRUFEX0lEX0hFQURFUmApIG9uIGEgc3RyZWFtIC8gaGlzdG9yeSAvIGRlbGV0ZSBjYWxsIHRvIGFjdFxuICogICAgIG9uIHRoaXMgY29udmVyc2F0aW9uLlxuICogICAtIGB0aXRsZWA6IGh1bWFuLXJlYWRhYmxlIHRpdGxlLiBQcmVzZW50IG9uY2UgdGhlIGFnZW50J3MgbWVtb3J5XG4gKiAgICAgaGFzIGF1dG8tZ2VuZXJhdGVkIG9uZSAoYWZ0ZXIgdGhlIGZpcnN0IHR1cm4pOyBhYnNlbnQgb24gYVxuICogICAgIGJyYW5kLW5ldyB0aHJlYWQsIHNvIHRoZSBVSSBmYWxscyBiYWNrIHRvIGEgcGxhY2Vob2xkZXIuXG4gKiAgIC0gYHJlc291cmNlSWRgOiBvd25pbmcgcmVzb3VyY2UgKHRoZSB1c2VyIGlkKS4gQWx3YXlzIHRoZSBjYWxsZXInc1xuICogICAgIG93biByZXNvdXJjZSAtIHRoZSBsaXN0IHJvdXRlIGZpbHRlcnMgYnkgaXQgc2VydmVyLXNpZGUuXG4gKiAgIC0gYGNyZWF0ZWRBdGAgLyBgdXBkYXRlZEF0YDogSVNPLTg2MDEgdGltZXN0YW1wcy4gYHVwZGF0ZWRBdGAgaXNcbiAqICAgICB0aGUgbmF0dXJhbCBzb3J0IGtleSBmb3IgXCJtb3N0IHJlY2VudCBjb252ZXJzYXRpb25zIGZpcnN0XCIuXG4gKiAgIC0gYG1ldGFkYXRhYDogb3BhcXVlIHRocmVhZCBtZXRhZGF0YSwgcGFzc2VkIHRocm91Z2ggdW50b3VjaGVkLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVGhyZWFkU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVzb3VyY2VJZDogei5zdHJpbmcoKSxcbiAgY3JlYXRlZEF0OiB6LnN0cmluZygpLFxuICB1cGRhdGVkQXQ6IHouc3RyaW5nKCksXG4gIG1ldGFkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFUaHJlYWQgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFUaHJlYWRTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L3RocmVhZHNgLiBPbmUgcGFnZSBvZiB0aGVcbiAqIGNhbGxlcidzIGNvbnZlcnNhdGlvbiB0aHJlYWRzLCBuZXdlc3QgKGB1cGRhdGVkQXRgIERFU0MpIGZpcnN0LlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgdGhyZWFkc2A6IHBhZ2Ugb2YgdGhyZWFkcyBmb3IgdGhlIGNhbGxlcidzIHJlc291cmNlLlxuICogICAtIGBwYWdlYDogemVyby1pbmRleGVkIHBhZ2UgdGhhdCBwcm9kdWNlZCB0aGlzIHJlc3BvbnNlLlxuICogICAtIGBwZXJQYWdlYDogbnVtYmVyIG9mIGl0ZW1zIHJlcXVlc3RlZCBwZXIgcGFnZS5cbiAqICAgLSBgdG90YWxgOiB0b3RhbCBudW1iZXIgb2YgdGhyZWFkcyB0aGUgcmVzb3VyY2Ugb3ducy5cbiAqICAgLSBgaGFzTW9yZWA6IHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgbW9yZSBwYWdlIGlzIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVRocmVhZHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdGhyZWFkczogei5hcnJheShNYXN0cmFUaHJlYWRTY2hlbWEpLFxuICBwYWdlOiB6Lm51bWJlcigpLFxuICBwZXJQYWdlOiB6Lm51bWJlcigpLFxuICB0b3RhbDogei5udW1iZXIoKSxcbiAgaGFzTW9yZTogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVRocmVhZHNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVRocmVhZHNSZXNwb25zZVNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBERUxFVEUgJHtiYXNlUGF0aH0vdGhyZWFkc2AgKHRocmVhZCBpZFxuICogc3VwcGxpZWQgdmlhIHRoZSB0aHJlYWQtc2VsZWN0aW9uIGhlYWRlciAvIGB0aHJlYWRJZGAgcXVlcnkpLiBXaXBlc1xuICogdGhlIG5hbWVkIHRocmVhZCBhbmQgZXZlcnkgbWVzc2FnZSBvbiBpdC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIHRocmVhZCB3YXMgZGVsZXRlZC5cbiAqICAgLSBgdGhyZWFkSWRgOiB0aHJlYWQgaWQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqICAgLSBgZGVsZXRlZGA6IGB0cnVlYCB3aGVuIGEgdGhyZWFkIHJvdyBleGlzdGVkIGFuZCB3YXMgcmVtb3ZlZCxcbiAqICAgICBgZmFsc2VgIHdoZW4gaXQgd2FzIGFscmVhZHkgZ29uZSAoY2FsbCBpcyBpZGVtcG90ZW50KS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYURlbGV0ZVRocmVhZFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBvazogei5saXRlcmFsKHRydWUpLFxuICBhZ2VudElkOiB6LnN0cmluZygpLFxuICB0aHJlYWRJZDogei5zdHJpbmcoKSxcbiAgZGVsZXRlZDogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYURlbGV0ZVRocmVhZFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiogTG9uZ2VzdCB0aHJlYWQgdGl0bGUgdGhlIHJlbmFtZSByb3V0ZSBhY2NlcHRzICh0cmltbWVkIHNlcnZlci1zaWRlKS4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfVEhSRUFEX1RJVExFX01BWCA9IDIwMDtcblxuLyoqXG4gKiBKU09OIGJvZHkgZm9yIGBQQVRDSCAke2Jhc2VQYXRofS90aHJlYWRzYCAodGhyZWFkIGlkIHN1cHBsaWVkIHZpYSB0aGVcbiAqIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC8gYHRocmVhZElkYCBxdWVyeSkuIFJlbmFtZXMgYSBzaW5nbGVcbiAqIGNvbnZlcnNhdGlvbi5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYHRpdGxlYDogdGhlIG5ldyBodW1hbi1yZWFkYWJsZSB0aXRsZS4gVHJpbW1lZCBhbmQgY2FwcGVkIGF0XG4gKiAgICAge0BsaW5rIE1BU1RSQV9USFJFQURfVElUTEVfTUFYfSBjaGFyYWN0ZXJzIHNlcnZlci1zaWRlOyBtdXN0IGJlXG4gKiAgICAgbm9uLWVtcHR5IGFmdGVyIHRyaW1taW5nLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVXBkYXRlVGhyZWFkUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdGl0bGU6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5tYXgoTUFTVFJBX1RIUkVBRF9USVRMRV9NQVgpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFVcGRhdGVUaHJlYWRSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVXBkYXRlVGhyZWFkUmVxdWVzdFNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBQQVRDSCAke2Jhc2VQYXRofS90aHJlYWRzYC4gRWNob2VzIHRoZVxuICogcmVuYW1lZCB0aHJlYWQgaW4gaXRzIHBvc3QtdXBkYXRlIHdpcmUgc2hhcGUgc28gdGhlIGNsaWVudCBjYW4gcmVmbGVjdFxuICogdGhlIG5ldyB0aXRsZSB3aXRob3V0IGEgcmUtZmV0Y2guXG4gKlxuICogRmllbGRzOlxuICogICAtIGBva2A6IGxpdGVyYWwgYHRydWVgIG9uIHN1Y2Nlc3MuXG4gKiAgIC0gYGFnZW50SWRgOiBhZ2VudCB3aG9zZSB0aHJlYWQgd2FzIHJlbmFtZWQuXG4gKiAgIC0gYHRocmVhZGA6IHRoZSB1cGRhdGVkIHRocmVhZCAoY2FycmllcyB0aGUgbmV3IGB0aXRsZWApLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVXBkYXRlVGhyZWFkUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZDogTWFzdHJhVGhyZWFkU2NoZW1hLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFVcGRhdGVUaHJlYWRSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1Z2dlc3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L3N1Z2dlc3Rpb25zYC5cbiAqXG4gKiBDYXJyaWVzIHRoZSBjdXJhdGVkIHN0YXJ0ZXIgcXVlc3Rpb25zIGZvciBhbiBhZ2VudCdzIEdlbmllIHNwYWNlIC1cbiAqIHRoZSBgc2FtcGxlX3F1ZXN0aW9uc2AgYW4gYXV0aG9yIGNvbmZpZ3VyZWQgb24gdGhlIHNwYWNlLCBzdXJmYWNlZFxuICogYXMgb25lLXRhcCBwcm9tcHRzIG9uIHRoZSBjaGF0J3MgZW1wdHkgc3RhdGUuIGBxdWVzdGlvbnNgIGlzIGVtcHR5XG4gKiB3aGVuIHRoZSBhZ2VudCBoYXMgbm8gR2VuaWUgc3BhY2UgKG9yIHRoZSBzcGFjZSBkZWZpbmVzIG5vbmUpLCBzb1xuICogdGhlIGNsaWVudCByZW5kZXJzIG5vdGhpbmcgaW4gdGhhdCBjYXNlIHJhdGhlciB0aGFuIGZhbGxpbmcgYmFjayB0b1xuICogYnVpbHQtaW4gZXhhbXBsZSBwcm9tcHRzLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVlc3Rpb25zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjaGFydHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQWxsb3dlZCBjaGFydCB0eXBlcyB0aGUgcGxhbm5lciBjYW4gcGljay4gRGVmaW5lZCBhcyBhXG4gKiBkaXNjcmltaW5hdGVkIGxpdGVyYWwgdW5pb24gc28gZWFjaCB2YXJpYW50IGNhcnJpZXMgaXRzIG93blxuICogYC5kZXNjcmliZSgpYCBjbGF1c2UgLSB0aGUgc2VydmVyLXNpZGUgcGxhbm5lcidzIHByb21wdFxuICogZm9ybWF0dGVyIHdhbGtzIGAub3B0aW9uc2AgdG8gaW5saW5lIHRoZSBkZXNjcmlwdGlvbnMgaW50byB0aGVcbiAqIG1vZGVsIGluc3RydWN0aW9ucywga2VlcGluZyB0aGUgcHJvbXB0IGluIGxvY2stc3RlcCB3aXRoIHRoZVxuICogc2NoZW1hIGJ5IGNvbnN0cnVjdGlvbi4gVGhlIHJ1bnRpbWUgdHlwZSBpcyB0aGUgcGxhaW4gc3RyaW5nXG4gKiB1bmlvbiAoYFwiYmFyXCIgfCBcImxpbmVcIiB8IC4uLmApLCBzbyBjb25zdW1lcnMgdGhhdCBqdXN0IG5lZWQgYVxuICogZGlzY3JpbWluYXRvciB2YWx1ZSBiZWhhdmUgdGhlIHNhbWUgYXMgaWYgaXQgd2VyZSBhXG4gKiBgei5lbnVtKFsuLi5dKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFR5cGVTY2hlbWEgPSB6XG4gIC51bmlvbihbXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJiYXJcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJjb21wYXJpbmcgYSBudW1lcmljIHZhbHVlIGFjcm9zcyBhIHNtYWxsL21lZGl1bSBzZXQgb2YgZGlzY3JldGUgY2F0ZWdvcmllcyAodG9wLU4sIHJhbmtpbmcsIGdyb3VwLWJ5KVwiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImxpbmVcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJvcmRlcmVkLWF4aXMgdHJlbmQgKHRpbWUgc2VyaWVzLCBzZXF1ZW5jZSwgcmFuaykgd2hlcmUgdGhlIHgtYXhpcyBoYXMgbmF0dXJhbCBvcmRlclwiLFxuICAgICAgKSxcbiAgICB6LmxpdGVyYWwoXCJhcmVhXCIpLmRlc2NyaWJlKFwic3RhY2tlZC10cmVuZCBlbXBoYXNpcyAtIGN1bXVsYXRpdmUgb3IgY29tcG9zaXRpb24gb3ZlciB0aW1lXCIpLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwic2NhdHRlclwiKVxuICAgICAgLmRlc2NyaWJlKFwidHdvLW51bWVyaWMtYXhpcyBjb3JyZWxhdGlvbnMgYmV0d2VlbiBmaWVsZHMgKGUuZy4gcHJpY2UgdnMuIHF1YW50aXR5KVwiKSxcbiAgICB6LmxpdGVyYWwoXCJwaWVcIikuZGVzY3JpYmUoXCJwYXJ0cy1vZi1hLXdob2xlIHdoZW4gMi03IGNhdGVnb3JpZXMgc3VtIHRvIGEgbWVhbmluZ2Z1bCB0b3RhbFwiKSxcbiAgXSlcbiAgLmRlc2NyaWJlKFwiVGhlIGNoYXJ0IHNoYXBlIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBkYXRhIGFuZCBpbnRlbnQuXCIpO1xuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRUeXBlU2NoZW1hPjtcblxuLyoqXG4gKiBSZXNvbHZlZCBjaGFydCBwbGFuIGEgc2V0dGxlZCBjaGFydCBlbnRyeSBjYXJyaWVzIG9uIGl0c1xuICogYHJlc3VsdGAgZmllbGQuIGBvcHRpb25gIGlzIHRoZSBmdWxsIEVjaGFydHMgc3BlYzsgcGFzc1xuICogc3RyYWlnaHQgaW50byBgPFJlYWN0RUNoYXJ0cyBvcHRpb249ey4uLn0+YC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydFR5cGU6IENoYXJ0VHlwZVNjaGVtYSxcbiAgb3B0aW9uOiB6XG4gICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkZ1bGx5LXJlc29sdmVkIEVjaGFydHMgYEVDaGFydHNPcHRpb25gIEpTT04gZm9yIHRoaXMgY2hhcnQgLSBkcm9wIGRpcmVjdGx5IGludG8gYW4gRWNoYXJ0cyBpbnN0YW5jZSAob3IgYDxSZWFjdEVDaGFydHMgb3B0aW9uPXsuLi59IC8+YCkgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuIEluY2x1ZGVzIHRpdGxlIC8gdG9vbHRpcCAvIGxlZ2VuZCAvIGdyaWQgLyBheGlzIC8gc2VyaWVzIGRlZmF1bHRzIGFscmVhZHkgbWVyZ2VkIGluLlwiLFxuICAgICksXG59KTtcbmV4cG9ydCB0eXBlIENoYXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRSZXN1bHRTY2hlbWE+O1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IEFORCBzZXJ2ZXItc2lkZSBjYWNoZSBzaGFwZSBmb3IgYSBjaGFydCBlbnRyeS5cbiAqIFRocmVlIGxpZmVjeWNsZSBzdGF0ZXMgaW5mZXJyZWQgZnJvbSB0aGUgdHdvIG9wdGlvbmFsIGZpZWxkc1xuICogKG5vIGRpc2NyaW1pbmF0b3IgbmVlZGVkKTpcbiAqXG4gKiAgIC0gYHJlc3VsdGAgc2V0ICAgICAgICAgICAgICAgICAgICAtPiBjaGFydCBpcyByZWFkeSB0byByZW5kZXJcbiAqICAgLSBgZXJyb3JgIHNldCAgICAgICAgICAgICAgICAgICAgIC0+IHBsYW5uZXIgLyBkYXRhIGZldGNoIGZhaWxlZFxuICogICAtIGJvdGggYHJlc3VsdGAgYW5kIGBlcnJvcmAgdW5zZXQgLT4gc3RpbGwgcHJvY2Vzc2luZ1xuICpcbiAqIGBvcHRpb25gIGlzIHR5cGVkIGFzIGEgZ2VuZXJpYyByZWNvcmQgc28gdGhpcyBwYWNrYWdlIHN0YXlzXG4gKiBkZXBlbmRlbmN5LWZyZWUgb2YgYGVjaGFydHNgLiBUaGUgc2VydmVyIChgY2hhcnQudHNgKSBpbXBvcnRzXG4gKiB0aGlzIHNjaGVtYSBkaXJlY3RseTsgdGhlIGRlbW8gY2xpZW50IHBvbGxzIHRoZVxuICogYC9lbWJlZC9jaGFydC86aWRgIHJvdXRlIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGFnYWluc3QgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRJZDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiT3BhcXVlIGlkIG1pbnRlZCBieSB0aGUgY2hhcnQgc3Vic3lzdGVtLiBFbWJlZCB2ZXJiYXRpbSBhcyBgW2NoYXJ0OjxjaGFydElkPl1gIGluIGFnZW50IHByb3NlOyB0aGUgaG9zdCBVSSByZXNvbHZlcyBpdCBhZ2FpbnN0IHRoaXMgY2FjaGUgZW50cnkuXCIsXG4gICAgKSxcbiAgZXJyb3I6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBjaGFydCBmYWlsZWQgKGRhdGEgZmV0Y2ggZXJyb3IsIHBsYW5uZXIgZXJyb3IsIGVtcHR5IGRhdGFzZXQpLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgcmVzdWx0YDsgYWJzZW50IG9uIHN1Y2Nlc3MgYW5kIHdoaWxlIHByb2Nlc3NpbmcuXCIsXG4gICAgKSxcbiAgcmVzdWx0OiBDaGFydFJlc3VsdFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgIFwiUmVzb2x2ZWQgY2hhcnQgcGxhbi4gQWJzZW50IHdoaWxlIHByb2Nlc3NpbmcgYW5kIHdoZW4gdGhlIHJ1biBlcnJvcmVkLlwiLFxuICApLFxufSk7XG5leHBvcnQgdHlwZSBDaGFydCA9IHouaW5mZXI8dHlwZW9mIENoYXJ0U2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGF0ZW1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBXaXJlLWZvcm1hdCBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZW1iZWQvZGF0YS86aWRgLlxuICpcbiAqIE1pcnJvcnMgdGhlIGFnZW50LXNpZGUgYGdldF9zdGF0ZW1lbnRgIHRvb2wncyBvdXRwdXQgc28gdGhlXG4gKiBob3N0IFVJIGFuZCB0aGUgTExNIHNlZSB0aGUgZXhhY3Qgc2FtZSBzaGFwZSBmb3IgdGhlIHNhbWVcbiAqIHN0YXRlbWVudDsgdGhlIHJvdXRlIGlzIHdoYXQgcmVzb2x2ZXMgYFtkYXRhOjxzdGF0ZW1lbnRfaWQ+XWBcbiAqIG1hcmtlcnMgdGhlIGFnZW50IGVtYmVkcyBpbiBwcm9zZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGNvbHVtbnNgOiBjb2x1bW4gbmFtZXMgaW4gZGVjbGFyYXRpb24gb3JkZXIuXG4gKiAgIC0gYHJvd3NgOiByb3cgcmVjb3JkcyBrZXllZCBieSBjb2x1bW4gbmFtZS4gQ2VsbCB2YWx1ZXMgYXJlXG4gKiAgICAgZWl0aGVyIGNvZXJjZWQgbnVtYmVycyBvciB0aGUgb3JpZ2luYWwgc3RyaW5ncyAoR2VuaWUgL1xuICogICAgIFN0YXRlbWVudCBFeGVjdXRpb24gcmV0dXJucyBldmVyeSBjZWxsIGFzIGBzdHJpbmcgfCBudWxsYDtcbiAqICAgICBudW1lcmljLWxvb2tpbmcgY2VsbHMgYXJlIGNvZXJjZWQgc2VydmVyLXNpZGUgc28gdGhlIFVJXG4gKiAgICAgY2FuIGZvcm1hdCB3aXRoIGB0YWJ1bGFyLW51bXNgIHdpdGhvdXQgcmUtcGFyc2luZykuXG4gKiAgIC0gYHJvd0NvdW50YDogdG90YWwgcm93IGNvdW50IHVwc3RyZWFtIChpbmRlcGVuZGVudCBvZiB0aGVcbiAqICAgICBgbGltaXRgIGNhcCkuIENvbXBhcmUgYWdhaW5zdCBgcm93cy5sZW5ndGhgIHRvIGRldGVjdFxuICogICAgIHRydW5jYXRpb24gLSBgdHJ1bmNhdGVkYCBpcyB0aGUgcHJlY29tcHV0ZWQgZmxhZy5cbiAqICAgLSBgdHJ1bmNhdGVkYDogYHRydWVgIHdoZW4gdGhlIHNlcnZlciBjbGlwcGVkIHJvd3MgdG8gaG9ub3JcbiAqICAgICB0aGUgcm91dGUncyByb3cgY2FwOyB0aGUgVUkgc2hvdWxkIHN1cmZhY2UgYSBcInNob3dpbmcgTiBvZlxuICogICAgIE0gcm93c1wiIGFmZm9yZGFuY2UgaW4gdGhhdCBjYXNlLlxuICovXG5leHBvcnQgY29uc3QgU3RhdGVtZW50RGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29sdW1uczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgcm93czogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpLFxuICByb3dDb3VudDogei5udW1iZXIoKSxcbiAgdHJ1bmNhdGVkOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3RhdGVtZW50RGF0YSA9IHouaW5mZXI8dHlwZW9mIFN0YXRlbWVudERhdGFTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB3cml0ZXIgc3VyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGhlIGBUb29sU3RyZWFtYC1zaGFwZWQgd3JpdGVyIHRoZSBNYXN0cmEgR2VuaWUgYWdlbnQgYW5kIGNoYXJ0XG4gKiBoZWxwZXJzIHB1Ymxpc2ggZXZlbnRzIHRocm91Z2guIERlZmluZWQgaGVyZSAodnMgaW1wb3J0ZWQgZnJvbVxuICogYEBtYXN0cmEvY29yZWApIHNvIGhlbHBlcnMgaW4gYEBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYWAgY2FuXG4gKiBhY2NlcHQgYW55IG9iamVjdCB3aXRoIGEgYC53cml0ZWAgbWV0aG9kIHdpdGhvdXQgZHJhZ2dpbmdcbiAqIE1hc3RyYSdzIGZ1bGwgYFRvb2xTdHJlYW1gIChhbmQgaXRzIGFnZW50IC8gdG9vbCB0eXBpbmdzKSBpbnRvXG4gKiBjYWxsIHNpdGVzLiBUaGUgYWN0dWFsIE1hc3RyYSBgY3R4LndyaXRlcmAgaXMgYXNzaWduYWJsZSB0b1xuICogdGhpcyBzaGFwZSBzbyBjYWxsZXJzIHBhc3MgaXQgc3RyYWlnaHQgdGhyb3VnaC5cbiAqXG4gKiBLZXB0IGFzIGEgcGxhaW4gVHlwZVNjcmlwdCBpbnRlcmZhY2UgKHZzIGEgem9kIHNjaGVtYSkgYmVjYXVzZVxuICogdGhlIGNvbnRyYWN0IGlzIGEgbWV0aG9kIC0gem9kIGNhbiBvbmx5IHZhbGlkYXRlIHRoZSBzaGFwZSB2aWFcbiAqIGB6LmN1c3RvbWAsIHdoaWNoIGFkZHMgbm9pc2Ugd2l0aG91dCBidXlpbmcgYW55IHJ1bnRpbWUgY2hlY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhV3JpdGVyIHtcbiAgd3JpdGU6IChjaHVuazogdW5rbm93bikgPT4gdW5rbm93bjtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLSBtYXN0cmEtb25seSBnZW5pZS1hZ2VudCBldmVudHMgLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogdGhlIEdlbmllIHRvb2wgaW52b2NhdGlvbiBzdGFydGVkLlxuICogRW1pdHRlZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBjYWxsaW5nIGFnZW50IGludm9rZXMgdGhlIEdlbmllXG4gKiB0b29sLCBiZWZvcmUgYW55IGlubmVyIGFnZW50IC8gd2lyZSBhY3Rpdml0eSwgc28gdGhlIFVJIGNhblxuICogcG9wIGEgXCJUaGlua2luZy4uLlwiIHBpbGwgdGhlIGluc3RhbnQgdGhlIG1vZGVsIGRlY2lkZXMgdG9cbiAqIGRlbGVnYXRlLiBgY29udmVyc2F0aW9uSWRgIC8gYG1lc3NhZ2VJZGAgYXJlIGFic2VudCBvbiB0aGlzXG4gKiBmaXJzdCBlbWl0IChubyBHZW5pZSByb3VuZC10cmlwIHlldCkuIEZpZWxkIG5hbWVzIGFyZVxuICogY2FtZWxDYXNlICh2cyB0aGUgc25ha2VfY2FzZSB3aXJlIGV2ZW50cykgdG8gbWlycm9yIHRoZVxuICogR2VuaWUgYWdlbnQncyBvd24gaW50ZXJuYWwgZGF0YSBwbHVtYmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXJ0ZWRFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic3RhcnRlZFwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgLyoqXG4gICAqIEdlbmllIGNvbnZlcnNhdGlvbiBpZCwgcG9wdWxhdGVkIG9ubHkgd2hlbiB0aGlzIGBzdGFydGVkYFxuICAgKiBldmVudCBjb3JyZXNwb25kcyB0byBhIGZvbGxvdy11cCB0dXJuIG9uIGFuIGV4aXN0aW5nXG4gICAqIGNvbnZlcnNhdGlvbi4gQWJzZW50IG9uIHRoZSBmaXJzdCB0dXJuLlxuICAgKi9cbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIEdlbmllIG1lc3NhZ2UgaWQsIHBvcHVsYXRlZCBvbmx5IGFmdGVyIHRoZSBmaXJzdCB3aXJlXG4gICAqIGBtZXNzYWdlYCBldmVudCBsYW5kcy4gQWJzZW50IG9uIHRoZSBpbW1lZGlhdGUtb24taW52b2tlXG4gICAqIGVtaXQuXG4gICAqL1xuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFF1ZXN0aW9uIHRoZSBHZW5pZSBhZ2VudCBzZW50IHRvIEdlbmllLiAqL1xuICBjb250ZW50OiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBTdGFydGVkRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBTdGFydGVkRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogb25lIGBhc2tfZ2VuaWVgIGludm9jYXRpb25cbiAqIGZpbmlzaGVkLiBDYXJyaWVzIHRoZSBoeWRyYXRlZCBgc3RhdGVtZW50SWRzYCAocm93cyBhcmUgZmV0Y2hlZFxuICogdmlhIGBnZXRTdGF0ZW1lbnRgIHNlcGFyYXRlbHkpIGFuZCBHZW5pZSdzIGZpbmFsIHByb3NlIGFuc3dlclxuICogc28gdGhlIFVJIGNhbiBtb3ZlIGZyb20gXCJ0aGlua2luZ1wiIHRvIFwiYW5zd2VyZWRcIiB3aXRob3V0XG4gKiB3YWl0aW5nIGZvciB0aGUgR2VuaWUgYWdlbnQncyB3aG9sZSByZWFzb25pbmcgbG9vcCB0byBlbmQuXG4gKi9cbmV4cG9ydCBjb25zdCBBc2tHZW5pZURvbmVFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwiYXNrX2dlbmllX2RvbmVcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogR2VuaWUncyBuYXR1cmFsLWxhbmd1YWdlIGFuc3dlciBmb3IgdGhlIHR1cm4sIGlmIGFueS4gKi9cbiAgYW5zd2VyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBTdGF0ZW1lbnQgaWRzIGZvciBhbnkgbm9uLWVtcHR5IHJlc3VsdCBzZXRzIHRoaXMgdHVybiBwcm9kdWNlZC4gKi9cbiAgc3RhdGVtZW50SWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAvKipcbiAgICogVGVybWluYWwgd2lyZSBzdGF0dXMgKGBDT01QTEVURURgIC8gYEZBSUxFRGAgLyBgQ0FOQ0VMTEVEYCkuXG4gICAqIE1pcnJvcnMgdGhlIHNvdXJjZSBgcmVzdWx0YCBldmVudCdzIHN0YXR1cyBzbyBzdWJzY3JpYmVyc1xuICAgKiBjYW4gcmVhY3QgdG8gYXNrLWxldmVsIGNvbXBsZXRpb24gd2l0aG91dCByZS13YWxraW5nIGhpc3RvcnkuXG4gICAqIFRyZWF0ZWQgYXMgYHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+YCBiZWNhdXNlIHRoZSBTREsgaXMgdGhlXG4gICAqIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGVudW0gdmFsdWVzLlxuICAgKi9cbiAgc3RhdHVzOiB6LmN1c3RvbTxNZXNzYWdlU3RhdHVzPigodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpLFxufSk7XG5leHBvcnQgdHlwZSBBc2tHZW5pZURvbmVFdmVudCA9IHouaW5mZXI8dHlwZW9mIEFza0dlbmllRG9uZUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBlcnJvciBldmVudDogdGVybWluYWwgR2VuaWUgYWdlbnQgLyB0cmFuc3BvcnRcbiAqIGVycm9yLiBHZW5pZSdzIG93biBgRkFJTEVEYCAvIGBDQU5DRUxMRURgIGNvbWUgdGhyb3VnaCB0aGVcbiAqIHdpcmUncyBgcmVzdWx0YCBldmVudCAtIHRoaXMgdmFyaWFudCBpcyBmb3IgZmFpbHVyZXMgdGhlIHdpcmVcbiAqIGNhbid0IHJlcHJlc2VudCAobmV0d29yaywgR2VuaWUgYWdlbnQgY3Jhc2gsIHBsYW5uZXIgZXJyb3IsXG4gKiBldGMuKSBwbHVzIGEgVUktZnJpZW5kbHkgbWlycm9yIG9mIGByZXN1bHRgIHdoZW4gdGhlIHN0YXR1cyBpc1xuICogbm9uLWBDT01QTEVURURgLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUdlbmllRXJyb3JFdmVudCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiB0aGUgaW5uZXIgR2VuaWUgYWdlbnQnc1xuICogc3RydWN0dXJlZC1vdXRwdXQgY29lcmNpb24gaGFzIGxhbmRlZC4gRmlyZXMgb25jZSBwZXIgR2VuaWVcbiAqIHRvb2wgaW52b2NhdGlvbiwgQUZURVIgYGFnZW50LmdlbmVyYXRlKC4uLilgIGNvbXBsZXRlcyAoaS5lLlxuICogdGhlIGlubmVyIGxvb3AgKyBNYXN0cmEncyBzdHJ1Y3R1cmluZyBwYXNzIGhhdmUgYm90aFxuICogZmluaXNoZWQpIGFuZCBCRUZPUkUgdGhlIHdyYXBwZXIgaHlkcmF0ZXMgZWFjaCBgZGF0YWAgaXRlbVxuICogd2l0aCBhIGNoYXJ0LiBTaWduYWxzIHRvIHRoZSBob3N0IFVJIHRoYXQgdGhlIGFnZW50IGhhc1xuICogc3RvcHBlZCByZWFzb25pbmcgYW5kIGlzIG1vdmluZyBpbnRvIGNoYXJ0IGdlbmVyYXRpb24uXG4gKlxuICogVGhlIHN0cnVjdHVyaW5nIHBhc3MgaXRzZWxmIGlzIG9wYXF1ZSAoaXQgcnVucyBpbnNpZGVcbiAqIE1hc3RyYSdzIGBhZ2VudC5nZW5lcmF0ZSguLi4pYCB0b2dldGhlciB3aXRoIHRoZSB0b29sIGxvb3ApXG4gKiBzbyB0aGlzIGlzIHRoZSBlYXJsaWVzdCBob29rIHdlIGNhbiBvZmZlcjsgd2UgY2FuJ3QgZmlyZSBhXG4gKiBcInN1bW1hcnkgc3RhcnRlZFwiIGV2ZW50IHRoZSB3YXkgd2UgZmlyZSBgc3RhcnRlZGAuXG4gKi9cbmV4cG9ydCBjb25zdCBTdW1tYXJ5RXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInN1bW1hcnlcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGFnZW50J3Mgc3RydWN0dXJlZCBzdW1tYXJ5LiAqL1xuICBpdGVtczogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICAvKiogQ291bnQgb2YgYHRleHRgIC8gcHJvc2UgaXRlbXMgaW4gdGhlIHN1bW1hcnkuICovXG4gIHRleHRJdGVtczogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICAvKipcbiAgICogQ291bnQgb2YgYGRhdGFgIGl0ZW1zIHRoZSB3cmFwcGVyIHdpbGwgaHlkcmF0ZSBpbnRvIGNoYXJ0cy5cbiAgICogVGhlIGhvc3QgVUkgY2FuIHVzZSB0aGlzIHRvIHNlZWQgTiBjaGFydCBza2VsZXRvbnMgYmVmb3JlXG4gICAqIHRoZSBwZXItY2hhcnQgZXZlbnRzIGFycml2ZS5cbiAgICovXG4gIGRhdGFJdGVtczogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxufSk7XG5leHBvcnQgdHlwZSBTdW1tYXJ5RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBTdW1tYXJ5RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGV2ZW50IHVuaW9uLiBFYWNoIHZhcmlhbnQgdXNlcyB0aGUgc2FtZSBmbGF0XG4gKiBge3R5cGUsIC4uLmZpZWxkc31gIHNoYXBlIGFzIHtAbGluayBHZW5pZUNoYXRFdmVudH0gc29cbiAqIHN1YnNjcmliZXJzIHVuaW9uIGJvdGggd2l0aCBhIHNpbmdsZSBgc3dpdGNoIChldmVudC50eXBlKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50RXZlbnRTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBTdGFydGVkRXZlbnRTY2hlbWEsXG4gIEFza0dlbmllRG9uZUV2ZW50U2NoZW1hLFxuICBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWEsXG4gIFN1bW1hcnlFdmVudFNjaGVtYSxcbl0pO1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudEV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBUaGUgdW5pZmllZCB3cml0ZXItZXZlbnQgdm9jYWJ1bGFyeSBzdWJzY3JpYmVycyBzZWUgb25cbiAqIGBjdHgud3JpdGVyYDogdGhlIHdpcmUtZGVyaXZlZCB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHVuaW9uXG4gKiAqKnBsdXMqKiBNYXN0cmEtb25seSBldmVudHMgZnJvbSB7QGxpbmsgR2VuaWVBZ2VudEV2ZW50fS4gRWFjaFxuICogdmFyaWFudCBpcyBhIGZsYXQgYHt0eXBlLCAuLi5maWVsZHN9YCBvYmplY3Q7IGNvbnN1bWVycyBuYXJyb3dcbiAqIG9uIGB0eXBlYCBhbmQgcmVhZCBmaWVsZHMgaW5saW5lIC0gdGhlcmUgaXMgbm8gcGF5bG9hZCB3cmFwcGVyXG4gKiBhbmQgbm8gd3JpdGVyLWJvdW5kYXJ5IHRyYW5zbGF0b3IuXG4gKlxuICogQ29tcG9zZWQgdmlhIGB6LnVuaW9uYCAobm90IGB6LmRpc2NyaW1pbmF0ZWRVbmlvbmApIGJlY2F1c2VcbiAqIGJvdGggaGFsdmVzIGFyZSB0aGVtc2VsdmVzIGRpc2NyaW1pbmF0ZWQgdW5pb25zIG9uIHRoZSBzYW1lXG4gKiBgdHlwZWAga2V5LlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVXcml0ZXJFdmVudFNjaGVtYSA9IHoudW5pb24oW1xuICBnZW5pZU1vZGVsLkdlbmllQ2hhdEV2ZW50U2NoZW1hLFxuICBHZW5pZUFnZW50RXZlbnRTY2hlbWEsXG5dKTtcbmV4cG9ydCB0eXBlIEdlbmllV3JpdGVyRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVdyaXRlckV2ZW50U2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllV3JpdGVyRXZlbnR9LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVXcml0ZXJFdmVudFR5cGUgPSBHZW5pZVdyaXRlckV2ZW50W1widHlwZVwiXTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdW1tYXJ5ICsgZGF0YXNldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUYWJ1bGFyIHBheWxvYWQgZW1iZWRkZWQgaW4gZXZlcnkge0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19XG4gKiBgdmlzdWFsaXplYCBkYXRhc2V0LiBBbHdheXMgcHJlc2VudDogaHlkcmF0ZWQgYnkgdGhlIHdvcmtmbG93J3NcbiAqIGFnZW50IHN0ZXAgYmVmb3JlIHRoZSBmaW5hbGl6ZSBzdGVwIHJ1bnMsIHNvIGNvbnN1bWVycyBjYW4gcmVuZGVyXG4gKiBhIHRhYmxlIGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2YgY2hhcnQtcGxhbm5lciBvdXRjb21lLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgY29sdW1uc2A6IGNvbHVtbiBuYW1lcyBpbiBkaXNwbGF5IG9yZGVyLlxuICogICAtIGByb3dzYDogdGFidWxhciByb3dzIGtleWVkIGJ5IGNvbHVtbiBuYW1lLlxuICogICAtIGByb3dDb3VudGA6IHRvdGFsIHJvdyBjb3VudCBHZW5pZSByZXBvcnRlZCAobWF5IGV4Y2VlZFxuICogICAgIGByb3dzLmxlbmd0aGAgd2hlbiB0aGUgc3RhdGVtZW50IHdhcyB0cnVuY2F0ZWQpLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29sdW1uczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgcm93czogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpLFxuICByb3dDb3VudDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuaWVEYXRhc2V0RGF0YSA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldERhdGFTY2hlbWE+O1xuXG4vKipcbiAqIFNsaW0gY2hhcnQgcmVmZXJlbmNlIGF0dGFjaGVkIHRvIGEgdmlzdWFsaXplIGRhdGFzZXQuIE9ubHlcbiAqIHByZXNlbnQgd2hlbiBwbGFubmluZyBzdWNjZWVkZWQuXG4gKlxuICogYG9wdGlvbmAgaXMgaW50ZW50aW9uYWxseSBOT1QgaW5jbHVkZWQuIFRoZSByZXNvbHZlZCBFY2hhcnRzXG4gKiBzcGVjIGxpdmVzIG9mZi1iYW5kIGluIHRoZSBjaGFydCBjYWNoZTogdGhlIGhvc3QgVUkgZmV0Y2hlcyBpdFxuICogYnkgYGNoYXJ0SWRgIGZyb20gdGhlIHBsdWdpbidzIGVtYmVkIHJvdXRlIChkZXJpdmVkIGZyb21cbiAqIGBiYXNlUGF0aGAgKyB7QGxpbmsgTUFTVFJBX1JPVVRFU30uZW1iZWQsIGkuZS4gYC9lbWJlZC9jaGFydC86aWRgO1xuICogc2VlIHtAbGluayBDaGFydH0pLiBFbWJlZGRpbmcgdGhlIGZ1bGwgc3BlYyBpbmxpbmUgd291bGRcbiAqIGluZmxhdGUgZXZlcnkgZGF0YXNldCBieSBzZXZlcmFsIEtCIHBlciBjaGFydCBhbmQgcm91bmQtdHJpcFxuICogdGhyb3VnaCB0aGUgTExNIGNvbnRleHQgZm9yIHplcm8gYmVuZWZpdCAodGhlIG1vZGVsIG9ubHkgbmVlZHNcbiAqIHRoZSBgY2hhcnRJZGAgdG8gcGxhY2UgYSBgW2NoYXJ0OjxjaGFydElkPl1gIG1hcmtlciBpbiBpdHNcbiAqIHJlcGx5KS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldENoYXJ0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydElkOiB6LnN0cmluZygpLFxuICBjaGFydFR5cGU6IENoYXJ0VHlwZVNjaGVtYSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuaWVEYXRhc2V0Q2hhcnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXRDaGFydFNjaGVtYT47XG5cbi8qKlxuICogRGF0YXNldCBidW5kbGUgYXR0YWNoZWQgdG8gYSB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX0gYHZpc3VhbGl6ZWBcbiAqIGl0ZW0uIGBkYXRhYCBpcyBhbHdheXMgcG9wdWxhdGVkOyBgY2hhcnRgIGlzIGJlc3QtZWZmb3J0IGFuZFxuICogYWJzZW50IHdoZW4gdGhlIHdvcmtmbG93J3MgY2hhcnQtcGxhbm5lciBmYWlsZWQgKHRpbWVvdXQsXG4gKiBtYWxmb3JtZWQgcGxhbiwgYWJvcnQpIHNvIHRoZSBob3N0IFVJIGNhbiBzdGlsbCByZW5kZXIgdGhlXG4gKiB1bmRlcmx5aW5nIHRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0U2NoZW1hID0gei5vYmplY3Qoe1xuICBkYXRhOiBHZW5pZURhdGFzZXREYXRhU2NoZW1hLFxuICBjaGFydDogR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuaWVEYXRhc2V0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0U2NoZW1hPjtcblxuLyoqXG4gKiBPbmUgaXRlbSBpbnNpZGUgdGhlIEdlbmllIHdvcmtmbG93J3MgZmluYWwgc3VtbWFyeS4gVGhlXG4gKiB3b3JrZmxvdyBwcm9kdWNlcyBhIG1peGVkIHNlcXVlbmNlIG9mOlxuICpcbiAqICAgLSBgc3RyaW5nYDogYSBtYXJrZG93biBwYXJhZ3JhcGggKGludGVycHJldGF0aW9uLCBjYWxsb3V0cyxcbiAqICAgICB0cmFuc2l0aW9ucyBiZXR3ZWVuIGRhdGEgYmxvY2tzKS5cbiAqICAgLSBgdmlzdWFsaXplYDogYSByZXF1ZXN0IGZyb20gdGhlIGFnZW50IHN0ZXAgdG8gdmlzdWFsaXplIGFcbiAqICAgICBzcGVjaWZpYyBHZW5pZSBzdGF0ZW1lbnQgYXQgdGhpcyBwb3NpdGlvbiBpbiB0aGUgcHJvc2UuXG4gKiAgICAgVGhlIGZpbmFsaXplIHN0ZXAgaHlkcmF0ZXMgYGRhdGFzZXQuZGF0YWAgKHJvd3MgZnJvbSB0aGVcbiAqICAgICBtYXRjaGluZyBgc3RhdGVtZW50SWRgKSBhbmQgYXR0YWNoZXMgYGRhdGFzZXQuY2hhcnRgIGFmdGVyXG4gKiAgICAgcnVubmluZyB0aGUgY2hhcnQtcGxhbm5lci4gVGhlIGFnZW50IE5FVkVSIHBpY2tzIHRoZSBjaGFydFxuICogICAgIHR5cGUgLSBpdCBvbmx5IG1hcmtzIHdoZXJlIGEgdmlzdWFsaXphdGlvbiBiZWxvbmdzLlxuICpcbiAqIFRoZSBob3N0IFVJIHdhbGtzIHRoZSBhcnJheSBpbiBkaXNwbGF5IG9yZGVyIHRvIGNvbXBvc2UgdGhlXG4gKiBmaW5hbCBhc3Npc3RhbnQgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nXCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidmlzdWFsaXplXCIpLFxuICAgIHN0YXRlbWVudElkOiB6LnN0cmluZygpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkYXRhc2V0OiBHZW5pZURhdGFzZXRTY2hlbWEsXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBHZW5pZVN1bW1hcnlJdGVtID0gei5pbmZlcjx0eXBlb2YgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYT47XG5cbi8qKiBEaXNjcmltaW5hdG9yIHR5cGUgZm9yIHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllU3VtbWFyeUl0ZW1UeXBlID0gR2VuaWVTdW1tYXJ5SXRlbVtcInR5cGVcIl07XG5cbi8qKlxuICogVGhlIEdlbmllIGFnZW50J3MgZmluYWwgb3V0cHV0IHNoYXBlIC0gd2hhdCB0aGUgY2FsbGluZyBhZ2VudCdzXG4gKiBHZW5pZSB0b29sIHJldHVybnMgdG8gdGhlIGNhbGxpbmcgTExNLiBUaGUgYHN1bW1hcnlgIGFycmF5IGlzXG4gKiB0aGUgdXNlci1mYWNpbmcgcmVuZGVyYWJsZTsgYGNvbnZlcnNhdGlvbklkYCBsZXRzIHRoZSBjYWxsaW5nXG4gKiBhZ2VudCAob3IgdGhlIFVJKSBmb2xsb3cgdXAgaW4gdGhlIHNhbWUgR2VuaWUgdGhyZWFkIG9uIHRoZVxuICogbmV4dCB0dXJuLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3VtbWFyeTogei5hcnJheShHZW5pZVN1bW1hcnlJdGVtU2NoZW1hKSxcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRSZXN1bHRTY2hlbWE+O1xuIl19
|
|
576
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFHSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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LENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0lBQ2pFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7S0FDakIsQ0FBQztJQUNGLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdkIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDbEMsT0FBTyxFQUFFLGtCQUFrQjtLQUM1QixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBTUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixjQUFjLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztJQUN4QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IGNvbnRyYWN0IGZvciBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYDogdGhlXG4gKiBkZXBlbmRlbmN5LWZyZWUgem9kIHNjaGVtYXMgKyBpbmZlcnJlZCB0eXBlcyBldmVyeSBjb25zdW1lciAodGhlXG4gKiBSZWFjdCBjbGllbnQsIGJyb3dzZXIgYnVuZGxlcywgdGhlIHNlcnZlciBwbHVnaW4pIHNoYXJlcy5cbiAqXG4gKiBLZXB0IGZyZWUgb2YgYHBnYCwgYGZhc3RlbWJlZGAsIGFuZCB0aGUgTWFzdHJhIHJ1bnRpbWUgc28gdGhlXG4gKiBjbGllbnQgY2FuIGltcG9ydCB0aGVzZSBzY2hlbWFzIHdpdGhvdXQgZHJhZ2dpbmcgaW4gc2VydmVyLW9ubHlcbiAqIGRlcGVuZGVuY2llcy4gVGhyZWUgbGF5ZXJzIGxpdmUgaGVyZTpcbiAqXG4gKiAgIDEuIFRoZSBkZXNjcmlwdG9yIHB1Ymxpc2hlZCBieSBgTWFzdHJhUGx1Z2luLmNsaWVudENvbmZpZygpYFxuICogICAgICBwbHVzIHRoZSBSRVNUIHBheWxvYWRzIGl0cyByb3V0ZXMgcmV0dXJuIChtb2RlbHMsIGhpc3RvcnksXG4gKiAgICAgIHN1Z2dlc3Rpb25zLCBjaGFydCBlbWJlZHMsIHN0YXRlbWVudCBkYXRhKS4gVGhlIHNlcnZlclxuICogICAgICBkZXJpdmVzIGV2ZXJ5IHBhdGggZnJvbSB0aGUgcGx1Z2luIG1vdW50IGFuZCBwdWJsaXNoZXMgdGhlXG4gKiAgICAgIHJlc29sdmVkIHBhdGhzIHNvIHRoZSBjbGllbnQgY29tcG9zZXMgVVJMcyB3aXRob3V0XG4gKiAgICAgIGhhcmQtY29kaW5nIGAvYXBpL21hc3RyYWAgLSByZW5hbWUgdGhlIHBsdWdpbiBhbmQgdGhlIGNsaWVudFxuICogICAgICBrZWVwcyB3b3JraW5nLlxuICogICAyLiBUaGUgYGN0eC53cml0ZXJgIGV2ZW50IHZvY2FidWxhcnk6IHRoZSB3aXJlLWRlcml2ZWRcbiAqICAgICAge0BsaW5rIEdlbmllQ2hhdEV2ZW50fXMgZnJvbSBgQGRieC10b29scy9nZW5pZS1zaGFyZWRgIHBsdXNcbiAqICAgICAgdGhlIE1hc3RyYS1vbmx5IGFnZW50IGxpZmVjeWNsZSBldmVudHMsIHVuaWZpZWQgYXNcbiAqICAgICAge0BsaW5rIEdlbmllV3JpdGVyRXZlbnR9IHNvIHN1YnNjcmliZXJzIG5hcnJvdyBib3RoIGhhbHZlc1xuICogICAgICB3aXRoIGEgc2luZ2xlIGBzd2l0Y2ggKGV2ZW50LnR5cGUpYC5cbiAqICAgMy4gVGhlIEdlbmllIGFnZW50J3Mgd29ya2Zsb3cgb3V0cHV0IHNoYXBlc1xuICogICAgICAoe0BsaW5rIEdlbmllQWdlbnRSZXN1bHR9IGFuZCBpdHMgc3VtbWFyeSAvIGRhdGFzZXQgaXRlbXMpLlxuICpcbiAqIFRoZSByb3V0ZSBzZWdtZW50cyBsaXZlIGluIHRoZSBzaWJsaW5nIGByb3V0ZXMudHNgXG4gKiAoe0BsaW5rIE1BU1RSQV9ST1VURVN9KSBhbmQgdGhlIGVtYmVkLW1hcmtlciBncmFtbWFyIGluIGBtYXJrZXIudHNgLFxuICogc28gdGhpcyBmaWxlIHN0YXlzIHB1cmVseSBkZWNsYXJhdGl2ZSAoc2NoZW1hcyArIGluZmVycmVkIHR5cGVzKS5cbiAqIFRoZSBicm93c2VyIGNsaWVudCB0aGF0IGRyaXZlcyB0aGVzZSByb3V0ZXMgKGBNYXN0cmFQbHVnaW5DbGllbnRgKVxuICogc2hpcHMgZnJvbSBgQGRieC10b29scy9hcHBraXQtbWFzdHJhLXVpYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2VuaWVNb2RlbCwgdHlwZSBHZW5pZUNoYXRFdmVudCwgdHlwZSBNZXNzYWdlU3RhdHVzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGllbnQgY29uZmlnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OLXNhZmUgZGVzY3JpcHRvciBwdWJsaXNoZWQgYnkgdGhlIE1hc3RyYSBwbHVnaW4nc1xuICogYGNsaWVudENvbmZpZygpYC5cbiAqXG4gKiBPbmx5IHRoZSBpcnJlZHVjaWJsZSBkYXRhIGxpdmVzIGhlcmU6IGBiYXNlUGF0aGAgKHRoZSBvbmUgcGF0aCB0aGVcbiAqIGNsaWVudCBjYW4ndCBvdGhlcndpc2Uga25vdywgc2luY2UgaXQgZW5jb2RlcyB0aGUgcGx1Z2luJ3MgbW91bnRcbiAqIG5hbWUpIHBsdXMgdGhlIHJ1bnRpbWUgYWdlbnQgcm9zdGVyLiBFdmVyeSBjb25jcmV0ZSBlbmRwb2ludCBVUkwgaXNcbiAqIGRlcml2ZWQgZnJvbSBgYmFzZVBhdGhgIGJ5IHRoZSBicm93c2VyIGNsaWVudFxuICogKGBNYXN0cmFQbHVnaW5DbGllbnRgKSB1c2luZyB0aGUgc2hhcmVkIHtAbGluayBNQVNUUkFfUk9VVEVTfVxuICogc2VnbWVudHMsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBwdWJsaXNoIHBlci1yb3V0ZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGJhc2VQYXRoYDogcGx1Z2luIG1vdW50IHBhdGguIEFsd2F5cyBgL2FwaS88cGx1Z2luTmFtZT5gLiBGZWVkXG4gKiAgICAgaXQgdG8gYG5ldyBNYXN0cmFQbHVnaW5DbGllbnQoY29uZmlnKWAgKGZyb21cbiAqICAgICBgQGRieC10b29scy9hcHBraXQtbWFzdHJhLXVpYCkgdG8gZ2V0IGEgdHlwZWQgY2xpZW50IG92ZXIgZXZlcnlcbiAqICAgICByb3V0ZSBwbHVzIHRoZSBzdGFuZGFyZCBhZ2VudCBzdHJlYW0uXG4gKiAgIC0gYGRlZmF1bHRBZ2VudGA6IGFnZW50IGlkIHRoZSBjbGllbnQgY29udmVyc2VzIHdpdGggd2hlbiBpdFxuICogICAgIGRvZXNuJ3QgbmFtZSBvbmUuXG4gKiAgIC0gYGFnZW50c2A6IGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgaWQgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICogICAtIGBmZWVkYmFja0VuYWJsZWRgOiB3aGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIGxvZyB1c2VyIGZlZWRiYWNrIHRvXG4gKiAgICAgTUxmbG93IChNTGZsb3cgdHJhY2luZyBpcyBjb25maWd1cmVkKS4gRHJpdmVzIHdoZXRoZXIgdGhlIGNoYXQgVUlcbiAqICAgICBzdXJmYWNlcyB0aHVtYnMgLyBjb21tZW50IGNvbnRyb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgIHNvIGFcbiAqICAgICBjb25maWcgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHNlcnZlciAod2l0aG91dCB0aGUgZmllbGQpIHBhcnNlc1xuICogICAgIGNsZWFubHkgdG8gXCJvZmZcIi5cbiAqICAgLSBgY2hhdEFsd2F5c0F2YWlsYWJsZWA6IHdoZXRoZXIgdGhlIGFnZW50cycgRGF0YWJyaWNrcyBjYWxscyBydW4gYXMgdGhlXG4gKiAgICAgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIHJhdGhlciB0aGFuIG9uLWJlaGFsZi1vZiB0aGUgc2lnbmVkLWluIHVzZXIuIFdoZW5cbiAqICAgICBgdHJ1ZWAgdGhlIGNoYXQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIHNvIGEgVUkgdGhhdFxuICogICAgIGhpZGVzIGNoYXQgd2hlbiB0aGUgT0JPIHRva2VuIGlzIGFic2VudCBzaG91bGQgc2hvdyBpdCBhbnl3YXkuIERlZmF1bHRzXG4gKiAgICAgdG8gYGZhbHNlYCAodGhlIE9CTyAvIGBcInVzZXJcImAgaWRlbnRpdHkgbW9kZSksIHNvIGFuIG9sZGVyIHNlcnZlciB3aXRob3V0XG4gKiAgICAgdGhlIGZpZWxkIGtlZXBzIHRoZSBPQk8tZ2F0ZWQgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGJhc2VQYXRoOiB6LnN0cmluZygpLFxuICBkZWZhdWx0QWdlbnQ6IHouc3RyaW5nKCksXG4gIGFnZW50czogei5hcnJheSh6LnN0cmluZygpKSxcbiAgZmVlZGJhY2tFbmFibGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2hhdEFsd2F5c0F2YWlsYWJsZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUNsaWVudENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZGVmYXVsdC1tb2RlbFs/YWdlbnRJZD1dYC4gVGhlXG4gKiBzdGF0aWMgZGVmYXVsdCBtb2RlbCB0aGUgYWdlbnQgcmVzb2x2ZXMgdG8gd2hlbiB0aGUgY2xpZW50IHBpbnMgbm8gbW9kZWwsXG4gKiBhcyBib3RoIHRoZSByYXcgc2VydmluZy1lbmRwb2ludCBgbW9kZWxgIGlkIGFuZCBhIGBkaXNwbGF5TmFtZWAgKHRoZVxuICogaHVtYW5pemVkIGxhYmVsIHRoZSBwaWNrZXIgc2hvd3MpLiBCb3RoIGFyZSBgbnVsbGAgd2hlbiB0aGUgYWdlbnQgZGVjaWRlc1xuICogaXRzIG1vZGVsIGR5bmFtaWNhbGx5IGF0IGNhbGwgdGltZSAobm90aGluZyBzdGF0aWMgdG8gYWR2ZXJ0aXNlKS4gTGV0cyB0aGVcbiAqIHBpY2tlciBsYWJlbCBpdHMgZGVmYXVsdCBvcHRpb24gV0lUSE9VVCB3YWl0aW5nIG9uIHRoZSBgL21vZGVsc2AgY2F0YWxvZ3VlLFxuICogc28gaXQgbmV2ZXIgZmxhc2hlcyBhIHJhdyBpZCBvbiBsb2FkLiBLZXB0IG9mZiB0aGUgc3RhdGljIGJvb3RzdHJhcFxuICogYGNsaWVudENvbmZpZ2Agb24gcHVycG9zZTogaXQgaXMgcGVyLWFnZW50IGFuZCBjYW4gYmUgZHluYW1pYywgc28gaXQgaXNcbiAqIGZldGNoZWQgbGlrZSBgL21vZGVsc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgZGlzcGxheU5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgRGVmYXVsdE1vZGVsUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbW9kZWwgY2F0YWxvZ3VlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9tb2RlbHNgLiBXcmFwcyB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgbW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYX0gKHJlLWV4cG9ydGVkIGZyb21cbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGApIHNvIHRoZSBjYXRhbG9ndWVcbiAqIGRlc2NyaXB0b3IgaGFzIGEgc2luZ2xlIGRlZmluaXRpb24gdGhlIGNsaWVudCwgc2VydmVyLCBhbmQgdGhlXG4gKiBzdGFuZGFsb25lIGBAZGJ4LXRvb2xzL21vZGVsYCB0b29sa2l0IGFsbCBhZ3JlZSBvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5kcG9pbnRzOiB6LmFycmF5KG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjaGF0IGhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIHNoYXBlIGZvciBhbiBBSSBTREsgVjUgYFVJTWVzc2FnZWAuIERlZmluZWQgbG9jYWxseVxuICogc28gdGhlIHNoYXJlZCB0eXBlcyBwYWNrYWdlIHN0YXlzIGRlcGVuZGVuY3ktZnJlZSAobm8gYGFpYFxuICogaW1wb3J0KS4gVGhlIHJ1bnRpbWUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBgL2hpc3RvcnlgIGVuZHBvaW50XG4gKiBhcmUgcHJvZHVjZWQgYnkgYHRvQUlTZGtWNU1lc3NhZ2VzYCBhbmQgYXJlIDE6MSBjb21wYXRpYmxlIHdpdGhcbiAqIGBVSU1lc3NhZ2VgIGZyb20gdGhlIGBhaWAgcGFja2FnZTsgY2xpZW50cyBjYW4gc2FmZWx5IGNhc3Qgd2hlblxuICogbmVlZGVkLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJvbGU6IHouZW51bShbXCJzeXN0ZW1cIiwgXCJ1c2VyXCIsIFwiYXNzaXN0YW50XCJdKSxcbiAgcGFydHM6IHouYXJyYXkoei51bmtub3duKCkpLnJlYWRvbmx5KCksXG4gIG1ldGFkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vaGlzdG9yeWAuXG4gKlxuICogRmllbGRzOlxuICogICAtIGB1aU1lc3NhZ2VzYDogcGFnZSBvZiBVSS1mb3JtYXR0ZWQgbWVzc2FnZXMsIG9sZGVzdCAtPiBuZXdlc3QuXG4gKiAgICAgQWx3YXlzIGNocm9ub2xvZ2ljYWwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBwYWdpbmF0aW9uXG4gKiAgICAgb3JkZXIgc28gdGhlIGNsaWVudCBjYW4gcHJlcGVuZCB0aGUgYXJyYXkgdG8gdGhlIGxpdmVcbiAqICAgICB0cmFuc2NyaXB0IHdpdGhvdXQgc29ydGluZy5cbiAqICAgLSBgcGFnZWA6IHplcm8taW5kZXhlZCBwYWdlIHRoYXQgcHJvZHVjZWQgdGhpcyByZXNwb25zZS5cbiAqICAgLSBgcGVyUGFnZWA6IG51bWJlciBvZiBpdGVtcyByZXF1ZXN0ZWQgcGVyIHBhZ2UuXG4gKiAgIC0gYHRvdGFsYDogdG90YWwgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSB0aHJlYWQuXG4gKiAgIC0gYGhhc01vcmVgOiB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIG9sZGVyIHBhZ2UgaXMgc3RpbGxcbiAqICAgICBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFIaXN0b3J5UmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVpTWVzc2FnZXM6IHouYXJyYXkoTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYSksXG4gIHBhZ2U6IHoubnVtYmVyKCksXG4gIHBlclBhZ2U6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLFxuICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhSGlzdG9yeVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhSGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS9oaXN0b3J5YC4gRGVsZXRlc1xuICogZXZlcnkgcGVyc2lzdGVkIG1lc3NhZ2UgKyB3b3JrZmxvdyBzbmFwc2hvdCB0aWVkIHRvIHRoZSBjYWxsZXInc1xuICogdGhyZWFkLCBzbyB0aGUgbmV4dCBjaGF0IHR1cm4gc3RhcnRzIGZyb20gYSBjbGVhbiBzbGF0ZS4gVGhlXG4gKiBzZXNzaW9uIGNvb2tpZSB0aGF0IGFuY2hvcnMgdGhlIHRocmVhZCBpZCBpcyBwcmVzZXJ2ZWQgc28gdGhlXG4gKiBjYWxsZXIgZG9lc24ndCBsb3NlIGl0cyBpZGVudGl0eSAtIG9ubHkgdGhlIGNvbnRlbnRzIGdvIGF3YXkuXG4gKlxuICogYG9rYCBpcyBhbHdheXMgYHRydWVgIG9uIHN1Y2Nlc3M7IHRoZSByZXNwb25zZSBvYmplY3QgaXMga2VwdFxuICogYXMgYSBzdHJ1Y3QgKHZzIGEgYmFyZSAyMDQpIHNvIGZ1dHVyZSBmaWVsZHMgKGUuZy4gYGRlbGV0ZWRBdGAsXG4gKiBgbWVzc2FnZXNgKSBjYW4gYmUgYWRkZWQgd2l0aG91dCBidW1waW5nIHRoZSBjb250cmFjdC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIGhpc3Rvcnkgd2FzIGNsZWFyZWQuXG4gKiAgIC0gYHRocmVhZElkYDogdGhyZWFkIGlkIHRoYXQgd2FzIHdpcGVkLlxuICogICAtIGBjbGVhcmVkYDogbnVtYmVyIG9mIG1lc3NhZ2VzIHRoZSB0aHJlYWQgaGVsZCBiZWZvcmVcbiAqICAgICBkZWxldGlvbi4gVXNlZnVsIGZvciBjbGllbnQtc2lkZSBcImNsZWFyZWQgMTIgbWVzc2FnZXNcIlxuICogICAgIHRvYXN0czsgYDBgIGlzIHJlcG9ydGVkIHdoZW4gdGhlIHRocmVhZCB3YXMgYWxyZWFkeSBlbXB0eVxuICogICAgIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBjbGVhcmVkOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFDbGVhckhpc3RvcnlSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhyZWFkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEEgc2luZ2xlIGNvbnZlcnNhdGlvbiB0aHJlYWQgdGhlIHJlc291cmNlIChhdXRoZW50aWNhdGVkIHVzZXIpIG93bnMsXG4gKiBhcyByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L3RocmVhZHNgLiBNaXJyb3JzIE1hc3RyYSdzXG4gKiBgU3RvcmFnZVRocmVhZFR5cGVgIGJ1dCB3aXRoIEpTT04tc2FmZSBJU08tODYwMSB0aW1lc3RhbXBzICh0aGUgd2lyZVxuICogY2FuJ3QgY2FycnkgYERhdGVgKS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGlkYDogdGhyZWFkIGlkLiBQYXNzIGl0IGJhY2sgYXMgdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyXG4gKiAgICAgKGBUSFJFQURfSURfSEVBREVSYCkgb24gYSBzdHJlYW0gLyBoaXN0b3J5IC8gZGVsZXRlIGNhbGwgdG8gYWN0XG4gKiAgICAgb24gdGhpcyBjb252ZXJzYXRpb24uXG4gKiAgIC0gYHRpdGxlYDogaHVtYW4tcmVhZGFibGUgdGl0bGUuIFByZXNlbnQgb25jZSB0aGUgYWdlbnQncyBtZW1vcnlcbiAqICAgICBoYXMgYXV0by1nZW5lcmF0ZWQgb25lIChhZnRlciB0aGUgZmlyc3QgdHVybik7IGFic2VudCBvbiBhXG4gKiAgICAgYnJhbmQtbmV3IHRocmVhZCwgc28gdGhlIFVJIGZhbGxzIGJhY2sgdG8gYSBwbGFjZWhvbGRlci5cbiAqICAgLSBgcmVzb3VyY2VJZGA6IG93bmluZyByZXNvdXJjZSAodGhlIHVzZXIgaWQpLiBBbHdheXMgdGhlIGNhbGxlcidzXG4gKiAgICAgb3duIHJlc291cmNlIC0gdGhlIGxpc3Qgcm91dGUgZmlsdGVycyBieSBpdCBzZXJ2ZXItc2lkZS5cbiAqICAgLSBgY3JlYXRlZEF0YCAvIGB1cGRhdGVkQXRgOiBJU08tODYwMSB0aW1lc3RhbXBzLiBgdXBkYXRlZEF0YCBpc1xuICogICAgIHRoZSBuYXR1cmFsIHNvcnQga2V5IGZvciBcIm1vc3QgcmVjZW50IGNvbnZlcnNhdGlvbnMgZmlyc3RcIi5cbiAqICAgLSBgbWV0YWRhdGFgOiBvcGFxdWUgdGhyZWFkIG1ldGFkYXRhLCBwYXNzZWQgdGhyb3VnaCB1bnRvdWNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFUaHJlYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXNvdXJjZUlkOiB6LnN0cmluZygpLFxuICBjcmVhdGVkQXQ6IHouc3RyaW5nKCksXG4gIHVwZGF0ZWRBdDogei5zdHJpbmcoKSxcbiAgbWV0YWRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVRocmVhZCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVRocmVhZFNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vdGhyZWFkc2AuIE9uZSBwYWdlIG9mIHRoZVxuICogY2FsbGVyJ3MgY29udmVyc2F0aW9uIHRocmVhZHMsIG5ld2VzdCAoYHVwZGF0ZWRBdGAgREVTQykgZmlyc3QuXG4gKlxuICogRmllbGRzOlxuICogICAtIGB0aHJlYWRzYDogcGFnZSBvZiB0aHJlYWRzIGZvciB0aGUgY2FsbGVyJ3MgcmVzb3VyY2UuXG4gKiAgIC0gYHBhZ2VgOiB6ZXJvLWluZGV4ZWQgcGFnZSB0aGF0IHByb2R1Y2VkIHRoaXMgcmVzcG9uc2UuXG4gKiAgIC0gYHBlclBhZ2VgOiBudW1iZXIgb2YgaXRlbXMgcmVxdWVzdGVkIHBlciBwYWdlLlxuICogICAtIGB0b3RhbGA6IHRvdGFsIG51bWJlciBvZiB0aHJlYWRzIHRoZSByZXNvdXJjZSBvd25zLlxuICogICAtIGBoYXNNb3JlYDogdHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSBtb3JlIHBhZ2UgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICB0aHJlYWRzOiB6LmFycmF5KE1hc3RyYVRocmVhZFNjaGVtYSksXG4gIHBhZ2U6IHoubnVtYmVyKCksXG4gIHBlclBhZ2U6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLFxuICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS90aHJlYWRzYCAodGhyZWFkIGlkXG4gKiBzdXBwbGllZCB2aWEgdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC8gYHRocmVhZElkYCBxdWVyeSkuIFdpcGVzXG4gKiB0aGUgbmFtZWQgdGhyZWFkIGFuZCBldmVyeSBtZXNzYWdlIG9uIGl0LlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgdGhyZWFkIHdhcyBkZWxldGVkLlxuICogICAtIGB0aHJlYWRJZGA6IHRocmVhZCBpZCB0aGF0IHdhcyByZW1vdmVkLlxuICogICAtIGBkZWxldGVkYDogYHRydWVgIHdoZW4gYSB0aHJlYWQgcm93IGV4aXN0ZWQgYW5kIHdhcyByZW1vdmVkLFxuICogICAgIGBmYWxzZWAgd2hlbiBpdCB3YXMgYWxyZWFkeSBnb25lIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBkZWxldGVkOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFEZWxldGVUaHJlYWRSZXNwb25zZVNjaGVtYT47XG5cbi8qKiBMb25nZXN0IHRocmVhZCB0aXRsZSB0aGUgcmVuYW1lIHJvdXRlIGFjY2VwdHMgKHRyaW1tZWQgc2VydmVyLXNpZGUpLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9USFJFQURfVElUTEVfTUFYID0gMjAwO1xuXG4vKipcbiAqIEpTT04gYm9keSBmb3IgYFBBVENIICR7YmFzZVBhdGh9L3RocmVhZHNgICh0aHJlYWQgaWQgc3VwcGxpZWQgdmlhIHRoZVxuICogdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXIgLyBgdGhyZWFkSWRgIHF1ZXJ5KS4gUmVuYW1lcyBhIHNpbmdsZVxuICogY29udmVyc2F0aW9uLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgdGl0bGVgOiB0aGUgbmV3IGh1bWFuLXJlYWRhYmxlIHRpdGxlLiBUcmltbWVkIGFuZCBjYXBwZWQgYXRcbiAqICAgICB7QGxpbmsgTUFTVFJBX1RIUkVBRF9USVRMRV9NQVh9IGNoYXJhY3RlcnMgc2VydmVyLXNpZGU7IG11c3QgYmVcbiAqICAgICBub24tZW1wdHkgYWZ0ZXIgdHJpbW1pbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFVcGRhdGVUaHJlYWRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICB0aXRsZTogei5zdHJpbmcoKS50cmltKCkubWluKDEpLm1heChNQVNUUkFfVEhSRUFEX1RJVExFX01BWCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFVcGRhdGVUaHJlYWRSZXF1ZXN0U2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYFBBVENIICR7YmFzZVBhdGh9L3RocmVhZHNgLiBFY2hvZXMgdGhlXG4gKiByZW5hbWVkIHRocmVhZCBpbiBpdHMgcG9zdC11cGRhdGUgd2lyZSBzaGFwZSBzbyB0aGUgY2xpZW50IGNhbiByZWZsZWN0XG4gKiB0aGUgbmV3IHRpdGxlIHdpdGhvdXQgYSByZS1mZXRjaC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIHRocmVhZCB3YXMgcmVuYW1lZC5cbiAqICAgLSBgdGhyZWFkYDogdGhlIHVwZGF0ZWQgdGhyZWFkIChjYXJyaWVzIHRoZSBuZXcgYHRpdGxlYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFVcGRhdGVUaHJlYWRSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgdGhyZWFkOiBNYXN0cmFUaHJlYWRTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVXBkYXRlVGhyZWFkUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VnZ2VzdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vc3VnZ2VzdGlvbnNgLlxuICpcbiAqIENhcnJpZXMgdGhlIGN1cmF0ZWQgc3RhcnRlciBxdWVzdGlvbnMgZm9yIGFuIGFnZW50J3MgR2VuaWUgc3BhY2UgLVxuICogdGhlIGBzYW1wbGVfcXVlc3Rpb25zYCBhbiBhdXRob3IgY29uZmlndXJlZCBvbiB0aGUgc3BhY2UsIHN1cmZhY2VkXG4gKiBhcyBvbmUtdGFwIHByb21wdHMgb24gdGhlIGNoYXQncyBlbXB0eSBzdGF0ZS4gYHF1ZXN0aW9uc2AgaXMgZW1wdHlcbiAqIHdoZW4gdGhlIGFnZW50IGhhcyBubyBHZW5pZSBzcGFjZSAob3IgdGhlIHNwYWNlIGRlZmluZXMgbm9uZSksIHNvXG4gKiB0aGUgY2xpZW50IHJlbmRlcnMgbm90aGluZyBpbiB0aGF0IGNhc2UgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvXG4gKiBidWlsdC1pbiBleGFtcGxlIHByb21wdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBxdWVzdGlvbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXJ0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBBbGxvd2VkIGNoYXJ0IHR5cGVzIHRoZSBwbGFubmVyIGNhbiBwaWNrLiBEZWZpbmVkIGFzIGFcbiAqIGRpc2NyaW1pbmF0ZWQgbGl0ZXJhbCB1bmlvbiBzbyBlYWNoIHZhcmlhbnQgY2FycmllcyBpdHMgb3duXG4gKiBgLmRlc2NyaWJlKClgIGNsYXVzZSAtIHRoZSBzZXJ2ZXItc2lkZSBwbGFubmVyJ3MgcHJvbXB0XG4gKiBmb3JtYXR0ZXIgd2Fsa3MgYC5vcHRpb25zYCB0byBpbmxpbmUgdGhlIGRlc2NyaXB0aW9ucyBpbnRvIHRoZVxuICogbW9kZWwgaW5zdHJ1Y3Rpb25zLCBrZWVwaW5nIHRoZSBwcm9tcHQgaW4gbG9jay1zdGVwIHdpdGggdGhlXG4gKiBzY2hlbWEgYnkgY29uc3RydWN0aW9uLiBUaGUgcnVudGltZSB0eXBlIGlzIHRoZSBwbGFpbiBzdHJpbmdcbiAqIHVuaW9uIChgXCJiYXJcIiB8IFwibGluZVwiIHwgLi4uYCksIHNvIGNvbnN1bWVycyB0aGF0IGp1c3QgbmVlZCBhXG4gKiBkaXNjcmltaW5hdG9yIHZhbHVlIGJlaGF2ZSB0aGUgc2FtZSBhcyBpZiBpdCB3ZXJlIGFcbiAqIGB6LmVudW0oWy4uLl0pYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0VHlwZVNjaGVtYSA9IHpcbiAgLnVuaW9uKFtcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImJhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcImNvbXBhcmluZyBhIG51bWVyaWMgdmFsdWUgYWNyb3NzIGEgc21hbGwvbWVkaXVtIHNldCBvZiBkaXNjcmV0ZSBjYXRlZ29yaWVzICh0b3AtTiwgcmFua2luZywgZ3JvdXAtYnkpXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwibGluZVwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQtYXhpcyB0cmVuZCAodGltZSBzZXJpZXMsIHNlcXVlbmNlLCByYW5rKSB3aGVyZSB0aGUgeC1heGlzIGhhcyBuYXR1cmFsIG9yZGVyXCIsXG4gICAgICApLFxuICAgIHoubGl0ZXJhbChcImFyZWFcIikuZGVzY3JpYmUoXCJzdGFja2VkLXRyZW5kIGVtcGhhc2lzIC0gY3VtdWxhdGl2ZSBvciBjb21wb3NpdGlvbiBvdmVyIHRpbWVcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJzY2F0dGVyXCIpXG4gICAgICAuZGVzY3JpYmUoXCJ0d28tbnVtZXJpYy1heGlzIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGZpZWxkcyAoZS5nLiBwcmljZSB2cy4gcXVhbnRpdHkpXCIpLFxuICAgIHoubGl0ZXJhbChcInBpZVwiKS5kZXNjcmliZShcInBhcnRzLW9mLWEtd2hvbGUgd2hlbiAyLTcgY2F0ZWdvcmllcyBzdW0gdG8gYSBtZWFuaW5nZnVsIHRvdGFsXCIpLFxuICBdKVxuICAuZGVzY3JpYmUoXCJUaGUgY2hhcnQgc2hhcGUgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGRhdGEgYW5kIGludGVudC5cIik7XG5leHBvcnQgdHlwZSBDaGFydFR5cGUgPSB6LmluZmVyPHR5cGVvZiBDaGFydFR5cGVTY2hlbWE+O1xuXG4vKipcbiAqIFJlc29sdmVkIGNoYXJ0IHBsYW4gYSBzZXR0bGVkIGNoYXJ0IGVudHJ5IGNhcnJpZXMgb24gaXRzXG4gKiBgcmVzdWx0YCBmaWVsZC4gYG9wdGlvbmAgaXMgdGhlIGZ1bGwgRWNoYXJ0cyBzcGVjOyBwYXNzXG4gKiBzdHJhaWdodCBpbnRvIGA8UmVhY3RFQ2hhcnRzIG9wdGlvbj17Li4ufT5gLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxuICBvcHRpb246IHpcbiAgICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRnVsbHktcmVzb2x2ZWQgRWNoYXJ0cyBgRUNoYXJ0c09wdGlvbmAgSlNPTiBmb3IgdGhpcyBjaGFydCAtIGRyb3AgZGlyZWN0bHkgaW50byBhbiBFY2hhcnRzIGluc3RhbmNlIChvciBgPFJlYWN0RUNoYXJ0cyBvcHRpb249ey4uLn0gLz5gKSB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4gSW5jbHVkZXMgdGl0bGUgLyB0b29sdGlwIC8gbGVnZW5kIC8gZ3JpZCAvIGF4aXMgLyBzZXJpZXMgZGVmYXVsdHMgYWxyZWFkeSBtZXJnZWQgaW4uXCIsXG4gICAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ2hhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBDaGFydFJlc3VsdFNjaGVtYT47XG5cbi8qKlxuICogV2lyZS1mb3JtYXQgQU5EIHNlcnZlci1zaWRlIGNhY2hlIHNoYXBlIGZvciBhIGNoYXJ0IGVudHJ5LlxuICogVGhyZWUgbGlmZWN5Y2xlIHN0YXRlcyBpbmZlcnJlZCBmcm9tIHRoZSB0d28gb3B0aW9uYWwgZmllbGRzXG4gKiAobm8gZGlzY3JpbWluYXRvciBuZWVkZWQpOlxuICpcbiAqICAgLSBgcmVzdWx0YCBzZXQgICAgICAgICAgICAgICAgICAgIC0+IGNoYXJ0IGlzIHJlYWR5IHRvIHJlbmRlclxuICogICAtIGBlcnJvcmAgc2V0ICAgICAgICAgICAgICAgICAgICAgLT4gcGxhbm5lciAvIGRhdGEgZmV0Y2ggZmFpbGVkXG4gKiAgIC0gYm90aCBgcmVzdWx0YCBhbmQgYGVycm9yYCB1bnNldCAtPiBzdGlsbCBwcm9jZXNzaW5nXG4gKlxuICogYG9wdGlvbmAgaXMgdHlwZWQgYXMgYSBnZW5lcmljIHJlY29yZCBzbyB0aGlzIHBhY2thZ2Ugc3RheXNcbiAqIGRlcGVuZGVuY3ktZnJlZSBvZiBgZWNoYXJ0c2AuIFRoZSBzZXJ2ZXIgKGBjaGFydC50c2ApIGltcG9ydHNcbiAqIHRoaXMgc2NoZW1hIGRpcmVjdGx5OyB0aGUgZGVtbyBjbGllbnQgcG9sbHMgdGhlXG4gKiBgL2VtYmVkL2NoYXJ0LzppZGAgcm91dGUgYW5kIHBhcnNlcyByZXNwb25zZXMgYWdhaW5zdCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydElkOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJPcGFxdWUgaWQgbWludGVkIGJ5IHRoZSBjaGFydCBzdWJzeXN0ZW0uIEVtYmVkIHZlcmJhdGltIGFzIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgaW4gYWdlbnQgcHJvc2U7IHRoZSBob3N0IFVJIHJlc29sdmVzIGl0IGFnYWluc3QgdGhpcyBjYWNoZSBlbnRyeS5cIixcbiAgICApLFxuICBlcnJvcjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFcnJvciBtZXNzYWdlIHdoZW4gdGhlIGNoYXJ0IGZhaWxlZCAoZGF0YSBmZXRjaCBlcnJvciwgcGxhbm5lciBlcnJvciwgZW1wdHkgZGF0YXNldCkuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGByZXN1bHRgOyBhYnNlbnQgb24gc3VjY2VzcyBhbmQgd2hpbGUgcHJvY2Vzc2luZy5cIixcbiAgICApLFxuICByZXN1bHQ6IENoYXJ0UmVzdWx0U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJSZXNvbHZlZCBjaGFydCBwbGFuLiBBYnNlbnQgd2hpbGUgcHJvY2Vzc2luZyBhbmQgd2hlbiB0aGUgcnVuIGVycm9yZWQuXCIsXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9lbWJlZC9kYXRhLzppZGAuXG4gKlxuICogTWlycm9ycyB0aGUgYWdlbnQtc2lkZSBgZ2V0X3N0YXRlbWVudGAgdG9vbCdzIG91dHB1dCBzbyB0aGVcbiAqIGhvc3QgVUkgYW5kIHRoZSBMTE0gc2VlIHRoZSBleGFjdCBzYW1lIHNoYXBlIGZvciB0aGUgc2FtZVxuICogc3RhdGVtZW50OyB0aGUgcm91dGUgaXMgd2hhdCByZXNvbHZlcyBgW2RhdGE6PHN0YXRlbWVudF9pZD5dYFxuICogbWFya2VycyB0aGUgYWdlbnQgZW1iZWRzIGluIHByb3NlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgY29sdW1uc2A6IGNvbHVtbiBuYW1lcyBpbiBkZWNsYXJhdGlvbiBvcmRlci5cbiAqICAgLSBgcm93c2A6IHJvdyByZWNvcmRzIGtleWVkIGJ5IGNvbHVtbiBuYW1lLiBDZWxsIHZhbHVlcyBhcmVcbiAqICAgICBlaXRoZXIgY29lcmNlZCBudW1iZXJzIG9yIHRoZSBvcmlnaW5hbCBzdHJpbmdzIChHZW5pZSAvXG4gKiAgICAgU3RhdGVtZW50IEV4ZWN1dGlvbiByZXR1cm5zIGV2ZXJ5IGNlbGwgYXMgYHN0cmluZyB8IG51bGxgO1xuICogICAgIG51bWVyaWMtbG9va2luZyBjZWxscyBhcmUgY29lcmNlZCBzZXJ2ZXItc2lkZSBzbyB0aGUgVUlcbiAqICAgICBjYW4gZm9ybWF0IHdpdGggYHRhYnVsYXItbnVtc2Agd2l0aG91dCByZS1wYXJzaW5nKS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgdXBzdHJlYW0gKGluZGVwZW5kZW50IG9mIHRoZVxuICogICAgIGBsaW1pdGAgY2FwKS4gQ29tcGFyZSBhZ2FpbnN0IGByb3dzLmxlbmd0aGAgdG8gZGV0ZWN0XG4gKiAgICAgdHJ1bmNhdGlvbiAtIGB0cnVuY2F0ZWRgIGlzIHRoZSBwcmVjb21wdXRlZCBmbGFnLlxuICogICAtIGB0cnVuY2F0ZWRgOiBgdHJ1ZWAgd2hlbiB0aGUgc2VydmVyIGNsaXBwZWQgcm93cyB0byBob25vclxuICogICAgIHRoZSByb3V0ZSdzIHJvdyBjYXA7IHRoZSBVSSBzaG91bGQgc3VyZmFjZSBhIFwic2hvd2luZyBOIG9mXG4gKiAgICAgTSByb3dzXCIgYWZmb3JkYW5jZSBpbiB0aGF0IGNhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0ZW1lbnREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxuICB0cnVuY2F0ZWQ6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBTdGF0ZW1lbnREYXRhID0gei5pbmZlcjx0eXBlb2YgU3RhdGVtZW50RGF0YVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHdyaXRlciBzdXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUaGUgYFRvb2xTdHJlYW1gLXNoYXBlZCB3cml0ZXIgdGhlIE1hc3RyYSBHZW5pZSBhZ2VudCBhbmQgY2hhcnRcbiAqIGhlbHBlcnMgcHVibGlzaCBldmVudHMgdGhyb3VnaC4gRGVmaW5lZCBoZXJlICh2cyBpbXBvcnRlZCBmcm9tXG4gKiBgQG1hc3RyYS9jb3JlYCkgc28gaGVscGVycyBpbiBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCBjYW5cbiAqIGFjY2VwdCBhbnkgb2JqZWN0IHdpdGggYSBgLndyaXRlYCBtZXRob2Qgd2l0aG91dCBkcmFnZ2luZ1xuICogTWFzdHJhJ3MgZnVsbCBgVG9vbFN0cmVhbWAgKGFuZCBpdHMgYWdlbnQgLyB0b29sIHR5cGluZ3MpIGludG9cbiAqIGNhbGwgc2l0ZXMuIFRoZSBhY3R1YWwgTWFzdHJhIGBjdHgud3JpdGVyYCBpcyBhc3NpZ25hYmxlIHRvXG4gKiB0aGlzIHNoYXBlIHNvIGNhbGxlcnMgcGFzcyBpdCBzdHJhaWdodCB0aHJvdWdoLlxuICpcbiAqIEtlcHQgYXMgYSBwbGFpbiBUeXBlU2NyaXB0IGludGVyZmFjZSAodnMgYSB6b2Qgc2NoZW1hKSBiZWNhdXNlXG4gKiB0aGUgY29udHJhY3QgaXMgYSBtZXRob2QgLSB6b2QgY2FuIG9ubHkgdmFsaWRhdGUgdGhlIHNoYXBlIHZpYVxuICogYHouY3VzdG9tYCwgd2hpY2ggYWRkcyBub2lzZSB3aXRob3V0IGJ1eWluZyBhbnkgcnVudGltZSBjaGVjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFXcml0ZXIge1xuICB3cml0ZTogKGNodW5rOiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tIG1hc3RyYS1vbmx5IGdlbmllLWFnZW50IGV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiB0aGUgR2VuaWUgdG9vbCBpbnZvY2F0aW9uIHN0YXJ0ZWQuXG4gKiBFbWl0dGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNhbGxpbmcgYWdlbnQgaW52b2tlcyB0aGUgR2VuaWVcbiAqIHRvb2wsIGJlZm9yZSBhbnkgaW5uZXIgYWdlbnQgLyB3aXJlIGFjdGl2aXR5LCBzbyB0aGUgVUkgY2FuXG4gKiBwb3AgYSBcIlRoaW5raW5nLi4uXCIgcGlsbCB0aGUgaW5zdGFudCB0aGUgbW9kZWwgZGVjaWRlcyB0b1xuICogZGVsZWdhdGUuIGBjb252ZXJzYXRpb25JZGAgLyBgbWVzc2FnZUlkYCBhcmUgYWJzZW50IG9uIHRoaXNcbiAqIGZpcnN0IGVtaXQgKG5vIEdlbmllIHJvdW5kLXRyaXAgeWV0KS4gRmllbGQgbmFtZXMgYXJlXG4gKiBjYW1lbENhc2UgKHZzIHRoZSBzbmFrZV9jYXNlIHdpcmUgZXZlbnRzKSB0byBtaXJyb3IgdGhlXG4gKiBHZW5pZSBhZ2VudCdzIG93biBpbnRlcm5hbCBkYXRhIHBsdW1iaW5nLlxuICovXG5leHBvcnQgY29uc3QgU3RhcnRlZEV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGFydGVkXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKipcbiAgICogR2VuaWUgY29udmVyc2F0aW9uIGlkLCBwb3B1bGF0ZWQgb25seSB3aGVuIHRoaXMgYHN0YXJ0ZWRgXG4gICAqIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGEgZm9sbG93LXVwIHR1cm4gb24gYW4gZXhpc3RpbmdcbiAgICogY29udmVyc2F0aW9uLiBBYnNlbnQgb24gdGhlIGZpcnN0IHR1cm4uXG4gICAqL1xuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogR2VuaWUgbWVzc2FnZSBpZCwgcG9wdWxhdGVkIG9ubHkgYWZ0ZXIgdGhlIGZpcnN0IHdpcmVcbiAgICogYG1lc3NhZ2VgIGV2ZW50IGxhbmRzLiBBYnNlbnQgb24gdGhlIGltbWVkaWF0ZS1vbi1pbnZva2VcbiAgICogZW1pdC5cbiAgICovXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogUXVlc3Rpb24gdGhlIEdlbmllIGFnZW50IHNlbnQgdG8gR2VuaWUuICovXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIFN0YXJ0ZWRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXJ0ZWRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvblxuICogZmluaXNoZWQuIENhcnJpZXMgdGhlIGh5ZHJhdGVkIGBzdGF0ZW1lbnRJZHNgIChyb3dzIGFyZSBmZXRjaGVkXG4gKiB2aWEgYGdldFN0YXRlbWVudGAgc2VwYXJhdGVseSkgYW5kIEdlbmllJ3MgZmluYWwgcHJvc2UgYW5zd2VyXG4gKiBzbyB0aGUgVUkgY2FuIG1vdmUgZnJvbSBcInRoaW5raW5nXCIgdG8gXCJhbnN3ZXJlZFwiIHdpdGhvdXRcbiAqIHdhaXRpbmcgZm9yIHRoZSBHZW5pZSBhZ2VudCdzIHdob2xlIHJlYXNvbmluZyBsb29wIHRvIGVuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFza0dlbmllRG9uZUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhc2tfZ2VuaWVfZG9uZVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBHZW5pZSdzIG5hdHVyYWwtbGFuZ3VhZ2UgYW5zd2VyIGZvciB0aGUgdHVybiwgaWYgYW55LiAqL1xuICBhbnN3ZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFN0YXRlbWVudCBpZHMgZm9yIGFueSBub24tZW1wdHkgcmVzdWx0IHNldHMgdGhpcyB0dXJuIHByb2R1Y2VkLiAqL1xuICBzdGF0ZW1lbnRJZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIC8qKlxuICAgKiBUZXJtaW5hbCB3aXJlIHN0YXR1cyAoYENPTVBMRVRFRGAgLyBgRkFJTEVEYCAvIGBDQU5DRUxMRURgKS5cbiAgICogTWlycm9ycyB0aGUgc291cmNlIGByZXN1bHRgIGV2ZW50J3Mgc3RhdHVzIHNvIHN1YnNjcmliZXJzXG4gICAqIGNhbiByZWFjdCB0byBhc2stbGV2ZWwgY29tcGxldGlvbiB3aXRob3V0IHJlLXdhbGtpbmcgaGlzdG9yeS5cbiAgICogVHJlYXRlZCBhcyBgei5jdXN0b208TWVzc2FnZVN0YXR1cz5gIGJlY2F1c2UgdGhlIFNESyBpcyB0aGVcbiAgICogc291cmNlIG9mIHRydXRoIGZvciB0aGUgZW51bSB2YWx1ZXMuXG4gICAqL1xuICBzdGF0dXM6IHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiksXG59KTtcbmV4cG9ydCB0eXBlIEFza0dlbmllRG9uZUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGVycm9yIGV2ZW50OiB0ZXJtaW5hbCBHZW5pZSBhZ2VudCAvIHRyYW5zcG9ydFxuICogZXJyb3IuIEdlbmllJ3Mgb3duIGBGQUlMRURgIC8gYENBTkNFTExFRGAgY29tZSB0aHJvdWdoIHRoZVxuICogd2lyZSdzIGByZXN1bHRgIGV2ZW50IC0gdGhpcyB2YXJpYW50IGlzIGZvciBmYWlsdXJlcyB0aGUgd2lyZVxuICogY2FuJ3QgcmVwcmVzZW50IChuZXR3b3JrLCBHZW5pZSBhZ2VudCBjcmFzaCwgcGxhbm5lciBlcnJvcixcbiAqIGV0Yy4pIHBsdXMgYSBVSS1mcmllbmRseSBtaXJyb3Igb2YgYHJlc3VsdGAgd2hlbiB0aGUgc3RhdHVzIGlzXG4gKiBub24tYENPTVBMRVRFRGAuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImVycm9yXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvcjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhR2VuaWVFcnJvckV2ZW50ID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IHRoZSBpbm5lciBHZW5pZSBhZ2VudCdzXG4gKiBzdHJ1Y3R1cmVkLW91dHB1dCBjb2VyY2lvbiBoYXMgbGFuZGVkLiBGaXJlcyBvbmNlIHBlciBHZW5pZVxuICogdG9vbCBpbnZvY2F0aW9uLCBBRlRFUiBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgY29tcGxldGVzIChpLmUuXG4gKiB0aGUgaW5uZXIgbG9vcCArIE1hc3RyYSdzIHN0cnVjdHVyaW5nIHBhc3MgaGF2ZSBib3RoXG4gKiBmaW5pc2hlZCkgYW5kIEJFRk9SRSB0aGUgd3JhcHBlciBoeWRyYXRlcyBlYWNoIGBkYXRhYCBpdGVtXG4gKiB3aXRoIGEgY2hhcnQuIFNpZ25hbHMgdG8gdGhlIGhvc3QgVUkgdGhhdCB0aGUgYWdlbnQgaGFzXG4gKiBzdG9wcGVkIHJlYXNvbmluZyBhbmQgaXMgbW92aW5nIGludG8gY2hhcnQgZ2VuZXJhdGlvbi5cbiAqXG4gKiBUaGUgc3RydWN0dXJpbmcgcGFzcyBpdHNlbGYgaXMgb3BhcXVlIChpdCBydW5zIGluc2lkZVxuICogTWFzdHJhJ3MgYGFnZW50LmdlbmVyYXRlKC4uLilgIHRvZ2V0aGVyIHdpdGggdGhlIHRvb2wgbG9vcClcbiAqIHNvIHRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgd2UgY2FuIG9mZmVyOyB3ZSBjYW4ndCBmaXJlIGFcbiAqIFwic3VtbWFyeSBzdGFydGVkXCIgZXZlbnQgdGhlIHdheSB3ZSBmaXJlIGBzdGFydGVkYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1bW1hcnlFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic3VtbWFyeVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYWdlbnQncyBzdHJ1Y3R1cmVkIHN1bW1hcnkuICovXG4gIGl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKiBDb3VudCBvZiBgdGV4dGAgLyBwcm9zZSBpdGVtcyBpbiB0aGUgc3VtbWFyeS4gKi9cbiAgdGV4dEl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKlxuICAgKiBDb3VudCBvZiBgZGF0YWAgaXRlbXMgdGhlIHdyYXBwZXIgd2lsbCBoeWRyYXRlIGludG8gY2hhcnRzLlxuICAgKiBUaGUgaG9zdCBVSSBjYW4gdXNlIHRoaXMgdG8gc2VlZCBOIGNoYXJ0IHNrZWxldG9ucyBiZWZvcmVcbiAgICogdGhlIHBlci1jaGFydCBldmVudHMgYXJyaXZlLlxuICAgKi9cbiAgZGF0YUl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1bW1hcnlFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN1bW1hcnlFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgZXZlbnQgdW5pb24uIEVhY2ggdmFyaWFudCB1c2VzIHRoZSBzYW1lIGZsYXRcbiAqIGB7dHlwZSwgLi4uZmllbGRzfWAgc2hhcGUgYXMge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSBzb1xuICogc3Vic2NyaWJlcnMgdW5pb24gYm90aCB3aXRoIGEgc2luZ2xlIGBzd2l0Y2ggKGV2ZW50LnR5cGUpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRFdmVudFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFN0YXJ0ZWRFdmVudFNjaGVtYSxcbiAgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWEsXG4gIE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYSxcbiAgU3VtbWFyeUV2ZW50U2NoZW1hLFxuXSk7XG5leHBvcnQgdHlwZSBHZW5pZUFnZW50RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIFRoZSB1bmlmaWVkIHdyaXRlci1ldmVudCB2b2NhYnVsYXJ5IHN1YnNjcmliZXJzIHNlZSBvblxuICogYGN0eC53cml0ZXJgOiB0aGUgd2lyZS1kZXJpdmVkIHtAbGluayBHZW5pZUNoYXRFdmVudH0gdW5pb25cbiAqICoqcGx1cyoqIE1hc3RyYS1vbmx5IGV2ZW50cyBmcm9tIHtAbGluayBHZW5pZUFnZW50RXZlbnR9LiBFYWNoXG4gKiB2YXJpYW50IGlzIGEgZmxhdCBge3R5cGUsIC4uLmZpZWxkc31gIG9iamVjdDsgY29uc3VtZXJzIG5hcnJvd1xuICogb24gYHR5cGVgIGFuZCByZWFkIGZpZWxkcyBpbmxpbmUgLSB0aGVyZSBpcyBubyBwYXlsb2FkIHdyYXBwZXJcbiAqIGFuZCBubyB3cml0ZXItYm91bmRhcnkgdHJhbnNsYXRvci5cbiAqXG4gKiBDb21wb3NlZCB2aWEgYHoudW5pb25gIChub3QgYHouZGlzY3JpbWluYXRlZFVuaW9uYCkgYmVjYXVzZVxuICogYm90aCBoYWx2ZXMgYXJlIHRoZW1zZWx2ZXMgZGlzY3JpbWluYXRlZCB1bmlvbnMgb24gdGhlIHNhbWVcbiAqIGB0eXBlYCBrZXkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVdyaXRlckV2ZW50U2NoZW1hID0gei51bmlvbihbXG4gIGdlbmllTW9kZWwuR2VuaWVDaGF0RXZlbnRTY2hlbWEsXG4gIEdlbmllQWdlbnRFdmVudFNjaGVtYSxcbl0pO1xuZXhwb3J0IHR5cGUgR2VuaWVXcml0ZXJFdmVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllV3JpdGVyRXZlbnRTY2hlbWE+O1xuXG4vKiogRGlzY3JpbWluYXRvciB0eXBlIGZvciB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0uICovXG5leHBvcnQgdHlwZSBHZW5pZVdyaXRlckV2ZW50VHlwZSA9IEdlbmllV3JpdGVyRXZlbnRbXCJ0eXBlXCJdO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1bW1hcnkgKyBkYXRhc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRhYnVsYXIgcGF5bG9hZCBlbWJlZGRlZCBpbiBldmVyeSB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX1cbiAqIGB2aXN1YWxpemVgIGRhdGFzZXQuIEFsd2F5cyBwcmVzZW50OiBoeWRyYXRlZCBieSB0aGUgd29ya2Zsb3cnc1xuICogYWdlbnQgc3RlcCBiZWZvcmUgdGhlIGZpbmFsaXplIHN0ZXAgcnVucywgc28gY29uc3VtZXJzIGNhbiByZW5kZXJcbiAqIGEgdGFibGUgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiBjaGFydC1wbGFubmVyIG91dGNvbWUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBjb2x1bW5zYDogY29sdW1uIG5hbWVzIGluIGRpc3BsYXkgb3JkZXIuXG4gKiAgIC0gYHJvd3NgOiB0YWJ1bGFyIHJvd3Mga2V5ZWQgYnkgY29sdW1uIG5hbWUuXG4gKiAgIC0gYHJvd0NvdW50YDogdG90YWwgcm93IGNvdW50IEdlbmllIHJlcG9ydGVkIChtYXkgZXhjZWVkXG4gKiAgICAgYHJvd3MubGVuZ3RoYCB3aGVuIHRoZSBzdGF0ZW1lbnQgd2FzIHRydW5jYXRlZCkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXREYXRhID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYT47XG5cbi8qKlxuICogU2xpbSBjaGFydCByZWZlcmVuY2UgYXR0YWNoZWQgdG8gYSB2aXN1YWxpemUgZGF0YXNldC4gT25seVxuICogcHJlc2VudCB3aGVuIHBsYW5uaW5nIHN1Y2NlZWRlZC5cbiAqXG4gKiBgb3B0aW9uYCBpcyBpbnRlbnRpb25hbGx5IE5PVCBpbmNsdWRlZC4gVGhlIHJlc29sdmVkIEVjaGFydHNcbiAqIHNwZWMgbGl2ZXMgb2ZmLWJhbmQgaW4gdGhlIGNoYXJ0IGNhY2hlOiB0aGUgaG9zdCBVSSBmZXRjaGVzIGl0XG4gKiBieSBgY2hhcnRJZGAgZnJvbSB0aGUgcGx1Z2luJ3MgZW1iZWQgcm91dGUgKGRlcml2ZWQgZnJvbVxuICogYGJhc2VQYXRoYCArIHtAbGluayBNQVNUUkFfUk9VVEVTfS5lbWJlZCwgaS5lLiBgL2VtYmVkL2NoYXJ0LzppZGA7XG4gKiBzZWUge0BsaW5rIENoYXJ0fSkuIEVtYmVkZGluZyB0aGUgZnVsbCBzcGVjIGlubGluZSB3b3VsZFxuICogaW5mbGF0ZSBldmVyeSBkYXRhc2V0IGJ5IHNldmVyYWwgS0IgcGVyIGNoYXJ0IGFuZCByb3VuZC10cmlwXG4gKiB0aHJvdWdoIHRoZSBMTE0gY29udGV4dCBmb3IgemVybyBiZW5lZml0ICh0aGUgbW9kZWwgb25seSBuZWVkc1xuICogdGhlIGBjaGFydElkYCB0byBwbGFjZSBhIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgbWFya2VyIGluIGl0c1xuICogcmVwbHkpLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHouc3RyaW5nKCksXG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXRDaGFydCA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldENoYXJ0U2NoZW1hPjtcblxuLyoqXG4gKiBEYXRhc2V0IGJ1bmRsZSBhdHRhY2hlZCB0byBhIHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfSBgdmlzdWFsaXplYFxuICogaXRlbS4gYGRhdGFgIGlzIGFsd2F5cyBwb3B1bGF0ZWQ7IGBjaGFydGAgaXMgYmVzdC1lZmZvcnQgYW5kXG4gKiBhYnNlbnQgd2hlbiB0aGUgd29ya2Zsb3cncyBjaGFydC1wbGFubmVyIGZhaWxlZCAodGltZW91dCxcbiAqIG1hbGZvcm1lZCBwbGFuLCBhYm9ydCkgc28gdGhlIGhvc3QgVUkgY2FuIHN0aWxsIHJlbmRlciB0aGVcbiAqIHVuZGVybHlpbmcgdGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGRhdGE6IEdlbmllRGF0YXNldERhdGFTY2hlbWEsXG4gIGNoYXJ0OiBHZW5pZURhdGFzZXRDaGFydFNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXRTY2hlbWE+O1xuXG4vKipcbiAqIE9uZSBpdGVtIGluc2lkZSB0aGUgR2VuaWUgd29ya2Zsb3cncyBmaW5hbCBzdW1tYXJ5LiBUaGVcbiAqIHdvcmtmbG93IHByb2R1Y2VzIGEgbWl4ZWQgc2VxdWVuY2Ugb2Y6XG4gKlxuICogICAtIGBzdHJpbmdgOiBhIG1hcmtkb3duIHBhcmFncmFwaCAoaW50ZXJwcmV0YXRpb24sIGNhbGxvdXRzLFxuICogICAgIHRyYW5zaXRpb25zIGJldHdlZW4gZGF0YSBibG9ja3MpLlxuICogICAtIGB2aXN1YWxpemVgOiBhIHJlcXVlc3QgZnJvbSB0aGUgYWdlbnQgc3RlcCB0byB2aXN1YWxpemUgYVxuICogICAgIHNwZWNpZmljIEdlbmllIHN0YXRlbWVudCBhdCB0aGlzIHBvc2l0aW9uIGluIHRoZSBwcm9zZS5cbiAqICAgICBUaGUgZmluYWxpemUgc3RlcCBoeWRyYXRlcyBgZGF0YXNldC5kYXRhYCAocm93cyBmcm9tIHRoZVxuICogICAgIG1hdGNoaW5nIGBzdGF0ZW1lbnRJZGApIGFuZCBhdHRhY2hlcyBgZGF0YXNldC5jaGFydGAgYWZ0ZXJcbiAqICAgICBydW5uaW5nIHRoZSBjaGFydC1wbGFubmVyLiBUaGUgYWdlbnQgTkVWRVIgcGlja3MgdGhlIGNoYXJ0XG4gKiAgICAgdHlwZSAtIGl0IG9ubHkgbWFya3Mgd2hlcmUgYSB2aXN1YWxpemF0aW9uIGJlbG9uZ3MuXG4gKlxuICogVGhlIGhvc3QgVUkgd2Fsa3MgdGhlIGFycmF5IGluIGRpc3BsYXkgb3JkZXIgdG8gY29tcG9zZSB0aGVcbiAqIGZpbmFsIGFzc2lzdGFudCBtZXNzYWdlLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2aXN1YWxpemVcIiksXG4gICAgc3RhdGVtZW50SWQ6IHouc3RyaW5nKCksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRhdGFzZXQ6IEdlbmllRGF0YXNldFNjaGVtYSxcbiAgfSksXG5dKTtcbmV4cG9ydCB0eXBlIEdlbmllU3VtbWFyeUl0ZW0gPSB6LmluZmVyPHR5cGVvZiBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbVR5cGUgPSBHZW5pZVN1bW1hcnlJdGVtW1widHlwZVwiXTtcblxuLyoqXG4gKiBUaGUgR2VuaWUgYWdlbnQncyBmaW5hbCBvdXRwdXQgc2hhcGUgLSB3aGF0IHRoZSBjYWxsaW5nIGFnZW50J3NcbiAqIEdlbmllIHRvb2wgcmV0dXJucyB0byB0aGUgY2FsbGluZyBMTE0uIFRoZSBgc3VtbWFyeWAgYXJyYXkgaXNcbiAqIHRoZSB1c2VyLWZhY2luZyByZW5kZXJhYmxlOyBgY29udmVyc2F0aW9uSWRgIGxldHMgdGhlIGNhbGxpbmdcbiAqIGFnZW50IChvciB0aGUgVUkpIGZvbGxvdyB1cCBpbiB0aGUgc2FtZSBHZW5pZSB0aHJlYWQgb24gdGhlXG4gKiBuZXh0IHR1cm4uXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdW1tYXJ5OiB6LmFycmF5KEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZUFnZW50UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYT47XG4iXX0=
|
package/package.json
CHANGED
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"zod": "4.3.6",
|
|
15
|
-
"@dbx-tools/shared-core": "0.
|
|
16
|
-
"@dbx-tools/shared-genie": "0.
|
|
17
|
-
"@dbx-tools/shared-model": "0.
|
|
15
|
+
"@dbx-tools/shared-core": "0.6.1",
|
|
16
|
+
"@dbx-tools/shared-genie": "0.6.1",
|
|
17
|
+
"@dbx-tools/shared-model": "0.6.1"
|
|
18
18
|
},
|
|
19
19
|
"main": "./lib/index.js",
|
|
20
20
|
"license": "UNLICENSED",
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
|
-
"version": "0.
|
|
24
|
+
"version": "0.6.1",
|
|
25
25
|
"types": "./lib/index.d.ts",
|
|
26
26
|
"type": "module",
|
|
27
27
|
"exports": {
|
package/src/wire.ts
CHANGED
|
@@ -61,12 +61,19 @@ import { z } from "zod";
|
|
|
61
61
|
* surfaces thumbs / comment controls. Defaults to `false` so a
|
|
62
62
|
* config published by an older server (without the field) parses
|
|
63
63
|
* cleanly to "off".
|
|
64
|
+
* - `chatAlwaysAvailable`: whether the agents' Databricks calls run as the
|
|
65
|
+
* app service principal rather than on-behalf-of the signed-in user. When
|
|
66
|
+
* `true` the chat works for any caller who can open the app, so a UI that
|
|
67
|
+
* hides chat when the OBO token is absent should show it anyway. Defaults
|
|
68
|
+
* to `false` (the OBO / `"user"` identity mode), so an older server without
|
|
69
|
+
* the field keeps the OBO-gated behavior.
|
|
64
70
|
*/
|
|
65
71
|
export const MastraClientConfigSchema = z.object({
|
|
66
72
|
basePath: z.string(),
|
|
67
73
|
defaultAgent: z.string(),
|
|
68
74
|
agents: z.array(z.string()),
|
|
69
75
|
feedbackEnabled: z.boolean().default(false),
|
|
76
|
+
chatAlwaysAvailable: z.boolean().default(false),
|
|
70
77
|
});
|
|
71
78
|
export type MastraClientConfig = z.infer<typeof MastraClientConfigSchema>;
|
|
72
79
|
|