@dbx-tools/appkit-memory 0.9.153 → 0.9.157

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.
@@ -6,11 +6,11 @@
6
6
  import { createHash, randomBytes } from "node:crypto";
7
7
  import { createServer } from "node:net";
8
8
  import { ConfigurationError } from "@databricks/appkit";
9
- import { openApiTools } from "@dbx-tools/appkit/openapi-tool";
10
- import { profile as authProfile } from "@dbx-tools/auth";
11
- import { configUtils } from "@dbx-tools/core";
9
+ import { openApiTools } from "@dbx-tools/appkit";
10
+ import { resolveProfile } from "@dbx-tools/auth";
11
+ import { configUtils, ENV_ONLY } from "@dbx-tools/core";
12
+ import { resolveGraphitiOptions, graphitiOptionsFromEnvironment, graphitiOptionOverrides, } from "@dbx-tools/shared-graphiti";
12
13
  import { z } from "zod";
13
- import { graphitiOptionOverrides, graphitiOptionsFromEnvironment, resolveGraphitiOptions, } from "./options.js";
14
14
  import { createGraphitiChildProcess, graphitiHealthCheck, graphitiHttpUrl, graphitiRequestHeaders, } from "./runtime.js";
15
15
  const GraphitiFactSchema = z
16
16
  .object({
@@ -120,7 +120,7 @@ export async function startGraphitiBackend(options, signal) {
120
120
  if (configured.listen.scheme !== "tcp") {
121
121
  throw new Error("AppKit memory requires a TCP Graphiti listener");
122
122
  }
123
- const [graphitiPort] = await distinctPorts(configUtils.port(undefined, "DATABRICKS_APP_PORT", 8000, configUtils.ENV_ONLY), configured.listen.port);
123
+ const [graphitiPort] = await distinctPorts(configUtils.port(undefined, "DATABRICKS_APP_PORT", 8000, ENV_ONLY), configured.listen.port);
124
124
  const resolved = resolveGraphitiOptions({
125
125
  ...configured,
126
126
  bearer: randomBytes(32).toString("base64url"),
@@ -159,7 +159,7 @@ export async function startGraphitiBackend(options, signal) {
159
159
  }
160
160
  function resolveGraphitiConfig(options) {
161
161
  const environment = graphitiOptionsFromEnvironment(process.env);
162
- if (environment.profile && !authProfile.resolveProfile({ profile: environment.profile })) {
162
+ if (environment.profile && !resolveProfile({ profile: environment.profile })) {
163
163
  environment.profile = undefined;
164
164
  }
165
165
  const overrides = graphitiOptionOverrides(options);
@@ -211,4 +211,4 @@ async function distinctPorts(appPort, graphitiPort) {
211
211
  }
212
212
  return ports.slice(1);
213
213
  }
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2JhY2tlbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ3JhcGhpdGkvX2JhY2tlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBVXhCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsOEJBQThCLEVBQzlCLHNCQUFzQixHQUd2QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2Ysc0JBQXNCLEdBQ3ZCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQztLQUN6QixNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztJQUMzRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztDQUNuRCxDQUFDO0tBQ0QsS0FBSyxFQUFFO0tBQ1AsUUFBUSxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFFNUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDO0tBQy9CLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFB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LENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxhQUFhLENBQUMsT0FBZSxFQUFFLFlBQW9CO0lBQ2hFLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEIsS0FBSyxNQUFNLGNBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxjQUFjLElBQUksQ0FBQyxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUFFLElBQUksR0FBRyxNQUFNLGFBQWEsRUFBRSxDQUFDO1FBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQWEsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYXp5IEdyYXBoaXRpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBiYWNrZW5kLW5ldXRyYWwgbWVtb3J5IGNvbnRyYWN0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIYXNoLCByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSBcIm5vZGU6bmV0XCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBvcGVuQXBpVG9vbHMsIHR5cGUgT3BlbkFwaVRvb2wgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQvb3BlbmFwaS10b29sXCI7XG5pbXBvcnQgeyBwcm9maWxlIGFzIGF1dGhQcm9maWxlIH0gZnJvbSBcIkBkYngtdG9vbHMvYXV0aFwiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2Vzc1Jlc3VsdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmUvZXhlY1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHtcbiAgdHlwZSBHcmFwaGl0aU1lbW9yeUJhY2tlbmQsXG4gIHR5cGUgTWVtb3J5VHVybixcbiAgdHlwZSBSZWNhbGxNZW1vcnlJbnB1dCxcbiAgdHlwZSBSZWNhbGxNZW1vcnlSZXN1bHQsXG4gIHR5cGUgUmVtZW1iZXJNZW1vcnlJbnB1dCxcbiAgdHlwZSBSZW1lbWJlck1lbW9yeVJlc3VsdCxcbn0gZnJvbSBcIi4uL19jb250cmFjdHMudHNcIjtcbmltcG9ydCB7XG4gIGdyYXBoaXRpT3B0aW9uT3ZlcnJpZGVzLFxuICBncmFwaGl0aU9wdGlvbnNGcm9tRW52aXJvbm1lbnQsXG4gIHJlc29sdmVHcmFwaGl0aU9wdGlvbnMsXG4gIHR5cGUgR3JhcGhpdGlPcHRpb25zLFxuICB0eXBlIFJlc29sdmVkR3JhcGhpdGlPcHRpb25zLFxufSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVHcmFwaGl0aUNoaWxkUHJvY2VzcyxcbiAgZ3JhcGhpdGlIZWFsdGhDaGVjayxcbiAgZ3JhcGhpdGlIdHRwVXJsLFxuICBncmFwaGl0aVJlcXVlc3RIZWFkZXJzLFxufSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5cbmNvbnN0IEdyYXBoaXRpRmFjdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiR3JhcGhpdGkgZmFjdCBuYW1lLlwiKSxcbiAgICBmYWN0OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUmV0cmlldmVkIGdyYXBoIGZhY3QuXCIpLFxuICB9KVxuICAubG9vc2UoKVxuICAuZGVzY3JpYmUoXCJHcmFwaGl0aSBmYWN0IHNlYXJjaCByZXN1bHQuXCIpO1xuXG5jb25zdCBHcmFwaGl0aUZhY3RTZWFyY2hTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGZhY3RzOiB6LmFycmF5KEdyYXBoaXRpRmFjdFNjaGVtYSkub3B0aW9uYWwoKS5kZXNjcmliZShcIk1hdGNoaW5nIGdyYXBoIGZhY3RzLlwiKSxcbiAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiR3JhcGhpdGkgb3BlcmF0aW9uIGVycm9yLlwiKSxcbiAgfSlcbiAgLmxvb3NlKClcbiAgLmRlc2NyaWJlKFwiR3JhcGhpdGkgZmFjdCBzZWFyY2ggcmVzcG9uc2UuXCIpO1xuXG5jb25zdCBHcmFwaGl0aVdyaXRlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBtZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJHcmFwaGl0aSB3cml0ZSBjb25maXJtYXRpb24uXCIpLFxuICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJHcmFwaGl0aSBvcGVyYXRpb24gZXJyb3IuXCIpLFxuICB9KVxuICAubG9vc2UoKVxuICAuZGVzY3JpYmUoXCJHcmFwaGl0aSB3cml0ZSByZXNwb25zZS5cIik7XG5cbmNsYXNzIEdyYXBoaXRpQmFja2VuZCBpbXBsZW1lbnRzIEdyYXBoaXRpTWVtb3J5QmFja2VuZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGlsZDogQ2hpbGRQcm9jZXNzUmVzdWx0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVUb29sOiBPcGVuQXBpVG9vbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlY2FsbFRvb2w6IE9wZW5BcGlUb29sLFxuICApIHt9XG5cbiAgZ2V0IHJ1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmNoaWxkLmV4aXRDb2RlID09PSBudWxsIHx8IHRoaXMuY2hpbGQuZXhpdENvZGUgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICh0aGlzLmNoaWxkLnNpZ25hbENvZGUgPT09IG51bGwgfHwgdGhpcy5jaGlsZC5zaWduYWxDb2RlID09PSB1bmRlZmluZWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlbWVtYmVyKFxuICAgIGFjdG9ySWQ6IHN0cmluZyxcbiAgICBpbnB1dDogUmVtZW1iZXJNZW1vcnlJbnB1dCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxSZW1lbWJlck1lbW9yeVJlc3VsdD4ge1xuICAgIGF3YWl0IHRoaXMud3JpdGUoXG4gICAgICBhY3RvcklkLFxuICAgICAge1xuICAgICAgICBuYW1lOiBpbnB1dC5wYXRoLFxuICAgICAgICBlcGlzb2RlX2JvZHk6IGlucHV0LmNvbnRlbnQsXG4gICAgICAgIHNvdXJjZTogXCJ0ZXh0XCIsXG4gICAgICAgIHNvdXJjZV9kZXNjcmlwdGlvbjogaW5wdXQuZGVzY3JpcHRpb24gPyBgJHtpbnB1dC5wYXRofTogJHtpbnB1dC5kZXNjcmlwdGlvbn1gIDogaW5wdXQucGF0aCxcbiAgICAgIH0sXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja2VuZDogXCJncmFwaGl0aVwiLFxuICAgICAgbWVtb3J5OiB7XG4gICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgIGNvbnRlbnQ6IGlucHV0LmNvbnRlbnQsXG4gICAgICAgIC4uLihpbnB1dC5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZWNhbGwoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIGlucHV0OiBSZWNhbGxNZW1vcnlJbnB1dCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxSZWNhbGxNZW1vcnlSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IEdyYXBoaXRpRmFjdFNlYXJjaFNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcbiAgICAgICAgdGhpcy5yZWNhbGxUb29sLFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnk6IGlucHV0LnF1ZXJ5LFxuICAgICAgICAgIG1heF9mYWN0czogaW5wdXQubGltaXQsXG4gICAgICAgICAgZ3JvdXBfaWRzOiBbdXNlclNjb3BlKGFjdG9ySWQpXSxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChyZXNwb25zZS5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja2VuZDogXCJncmFwaGl0aVwiLFxuICAgICAgbWVtb3JpZXM6IChyZXNwb25zZS5mYWN0cyA/PyBbXSkubWFwKChmYWN0KSA9PiAoe1xuICAgICAgICBjb250ZW50OiBmYWN0LmZhY3QsXG4gICAgICAgIC4uLihmYWN0Lm5hbWUgPyB7IGRlc2NyaXB0aW9uOiBmYWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2F2ZVR1cm4odHVybjogTWVtb3J5VHVybiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndyaXRlKFxuICAgICAgdHVybi5hY3RvcklkLFxuICAgICAge1xuICAgICAgICBuYW1lOiBgTWFzdHJhIHR1cm4gJHt0dXJuLmFnZW50SWR9LyR7dHVybi50aHJlYWRJZH1gLFxuICAgICAgICBlcGlzb2RlX2JvZHk6IGBVc2VyOiAke3R1cm4udXNlcn1cXG5cXG5Bc3Npc3RhbnQ6ICR7dHVybi5hc3Npc3RhbnR9YCxcbiAgICAgICAgc291cmNlOiBcIm1lc3NhZ2VcIixcbiAgICAgICAgc291cmNlX2Rlc2NyaXB0aW9uOiBgQ29tcGxldGVkICR7dHVybi5hZ2VudElkfSBjb252ZXJzYXRpb24gdHVybmAsXG4gICAgICB9LFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH1cblxuICBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZC5zaHV0ZG93bigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZShcbiAgICBhY3RvcklkOiBzdHJpbmcsXG4gICAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gR3JhcGhpdGlXcml0ZVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdCh0aGlzLndyaXRlVG9vbCwgeyAuLi5hcmdzLCBncm91cF9pZDogdXNlclNjb3BlKGFjdG9ySWQpIH0sIHNpZ25hbCksXG4gICAgKTtcbiAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlcXVlc3QoXG4gICAgdG9vbDogT3BlbkFwaVRvb2wsXG4gICAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5ydW5uaW5nKSB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSBzaWRlY2FyIGlzIG5vdCBydW5uaW5nXCIpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godG9vbC51cmwsIHtcbiAgICAgIG1ldGhvZDogdG9vbC5tZXRob2QsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIC4uLmdyYXBoaXRpUmVxdWVzdEhlYWRlcnModGhpcy5vcHRpb25zKSxcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYXJncyksXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgR3JhcGhpdGkgb3BlcmF0aW9uICR7dG9vbC5pZH0gZmFpbGVkIHdpdGggSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7YXdhaXQgcmVzcG9uc2UudGV4dCgpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG59XG5cbi8qKiBTdGFydCBhIGZ1bGx5IHJlYWR5IEdyYXBoaXRpIGJhY2tlbmQgZm9yIHRoZSBmaXJzdCBmYWxsYmFjayBvcGVyYXRpb24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRHcmFwaGl0aUJhY2tlbmQoXG4gIG9wdGlvbnM6IEdyYXBoaXRpT3B0aW9ucyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPEdyYXBoaXRpTWVtb3J5QmFja2VuZD4ge1xuICBjb25zdCBjb25maWd1cmVkID0gcmVzb2x2ZUdyYXBoaXRpQ29uZmlnKG9wdGlvbnMpO1xuICBpZiAoY29uZmlndXJlZC5saXN0ZW4uc2NoZW1lICE9PSBcInRjcFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXBwS2l0IG1lbW9yeSByZXF1aXJlcyBhIFRDUCBHcmFwaGl0aSBsaXN0ZW5lclwiKTtcbiAgfVxuICBjb25zdCBbZ3JhcGhpdGlQb3J0XSA9IGF3YWl0IGRpc3RpbmN0UG9ydHMoXG4gICAgY29uZmlnVXRpbHMucG9ydCh1bmRlZmluZWQsIFwiREFUQUJSSUNLU19BUFBfUE9SVFwiLCA4MDAwLCBjb25maWdVdGlscy5FTlZfT05MWSksXG4gICAgY29uZmlndXJlZC5saXN0ZW4ucG9ydCxcbiAgKTtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlR3JhcGhpdGlPcHRpb25zKHtcbiAgICAuLi5jb25maWd1cmVkLFxuICAgIGJlYXJlcjogcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpLFxuICAgIGxpc3RlbjogeyAuLi5jb25maWd1cmVkLmxpc3RlbiwgcG9ydDogZ3JhcGhpdGlQb3J0IH0sXG4gIH0pO1xuICBsZXQgdG9vbHM6IE9wZW5BcGlUb29sW10gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgY2hpbGQgfSA9IGF3YWl0IGNyZWF0ZUdyYXBoaXRpQ2hpbGRQcm9jZXNzKHtcbiAgICAuLi5yZXNvbHZlZCxcbiAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICBoZWFsdGhDaGVjazogYXN5bmMgKHsgc2lnbmFsIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGdyYXBoaXRpSGVhbHRoQ2hlY2socmVzb2x2ZWQsIHNpZ25hbCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IG9wZW5BcGlUb29scyhncmFwaGl0aUh0dHBVcmwocmVzb2x2ZWQsIFwiL29wZW5hcGkuanNvblwiKSwge1xuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICBoZWFkZXJzOiBncmFwaGl0aVJlcXVlc3RIZWFkZXJzKHJlc29sdmVkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRvb2xzID0gW1xuICAgICAgICAgIHJlcXVpcmVkT3BlcmF0aW9uKGxvYWRlZCwgXCJhZGRfbWVtb3J5X3N5bmNcIiksXG4gICAgICAgICAgcmVxdWlyZWRPcGVyYXRpb24obG9hZGVkLCBcInNlYXJjaF9tZW1vcnlfZmFjdHNcIiksXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBpZiAoIXRvb2xzKSB7XG4gICAgYXdhaXQgY2hpbGQuc2h1dGRvd24oKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSBPcGVuQVBJIHRvb2xzIHdlcmUgbm90IGNhcHR1cmVkIGR1cmluZyByZWFkaW5lc3NcIik7XG4gIH1cbiAgcmV0dXJuIG5ldyBHcmFwaGl0aUJhY2tlbmQocmVzb2x2ZWQsIGNoaWxkLCB0b29sc1swXSEsIHRvb2xzWzFdISk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVHcmFwaGl0aUNvbmZpZyhvcHRpb25zOiBHcmFwaGl0aU9wdGlvbnMpOiBSZXNvbHZlZEdyYXBoaXRpT3B0aW9ucyB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gZ3JhcGhpdGlPcHRpb25zRnJvbUVudmlyb25tZW50KHByb2Nlc3MuZW52KTtcbiAgaWYgKGVudmlyb25tZW50LnByb2ZpbGUgJiYgIWF1dGhQcm9maWxlLnJlc29sdmVQcm9maWxlKHsgcHJvZmlsZTogZW52aXJvbm1lbnQucHJvZmlsZSB9KSkge1xuICAgIGVudmlyb25tZW50LnByb2ZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgb3ZlcnJpZGVzID0gZ3JhcGhpdGlPcHRpb25PdmVycmlkZXMob3B0aW9ucyk7XG4gIHJldHVybiByZXNvbHZlR3JhcGhpdGlPcHRpb25zKHtcbiAgICAuLi5lbnZpcm9ubWVudCxcbiAgICAuLi5vdmVycmlkZXMsXG4gICAgbGlzdGVuOiBvdmVycmlkZXMubGlzdGVuID8/XG4gICAgICBlbnZpcm9ubWVudC5saXN0ZW4gPz8ge1xuICAgICAgICBzY2hlbWU6IFwidGNwXCIsXG4gICAgICAgIGhvc3Q6IFwiMTI3LjAuMC4xXCIsXG4gICAgICAgIHBvcnQ6IDAsXG4gICAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZWRPcGVyYXRpb24odG9vbHM6IHJlYWRvbmx5IE9wZW5BcGlUb29sW10sIG5hbWU6IHN0cmluZyk6IE9wZW5BcGlUb29sIHtcbiAgY29uc3QgdG9vbCA9IHRvb2xzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IG5hbWUpO1xuICBpZiAoIXRvb2wpIHRocm93IG5ldyBFcnJvcihgR3JhcGhpdGkgT3BlbkFQSSBpcyBtaXNzaW5nIG9wZXJhdGlvbjogJHtuYW1lfWApO1xuICByZXR1cm4gdG9vbDtcbn1cblxuZnVuY3Rpb24gdXNlclNjb3BlKHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB1c2VyXyR7Y3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUodXNlcklkKS5kaWdlc3QoXCJiYXNlNjR1cmxcIil9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXZhaWxhYmxlUG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKDAsIFwiMTI3LjAuMC4xXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXIuYWRkcmVzcygpO1xuICAgICAgaWYgKCFhZGRyZXNzIHx8IHR5cGVvZiBhZGRyZXNzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ291bGQgbm90IGFsbG9jYXRlIGEgR3JhcGhpdGkgbG9vcGJhY2sgcG9ydFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlcnZlci5jbG9zZSgoZXJyb3IpID0+IChlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKGFkZHJlc3MucG9ydCkpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc3RpbmN0UG9ydHMoYXBwUG9ydDogbnVtYmVyLCBncmFwaGl0aVBvcnQ6IG51bWJlcik6IFByb21pc2U8W251bWJlcl0+IHtcbiAgY29uc3QgcG9ydHMgPSBbYXBwUG9ydF07XG4gIGZvciAoY29uc3QgY29uZmlndXJlZFBvcnQgb2YgW2dyYXBoaXRpUG9ydF0pIHtcbiAgICBpZiAoY29uZmlndXJlZFBvcnQgJiYgcG9ydHMuaW5jbHVkZXMoY29uZmlndXJlZFBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFwiR3JhcGhpdGkgc2lkZWNhciBwb3J0cyBtdXN0IGRpZmZlciBmcm9tIERBVEFCUklDS1NfQVBQX1BPUlRcIik7XG4gICAgfVxuICAgIGxldCBwb3J0ID0gY29uZmlndXJlZFBvcnQgfHwgKGF3YWl0IGF2YWlsYWJsZVBvcnQoKSk7XG4gICAgd2hpbGUgKHBvcnRzLmluY2x1ZGVzKHBvcnQpKSBwb3J0ID0gYXdhaXQgYXZhaWxhYmxlUG9ydCgpO1xuICAgIHBvcnRzLnB1c2gocG9ydCk7XG4gIH1cbiAgcmV0dXJuIHBvcnRzLnNsaWNlKDEpIGFzIFtudW1iZXJdO1xufVxuIl19
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2JhY2tlbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ3JhcGhpdGkvX2JhY2tlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBR0wsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5Qix1QkFBdUIsR0FDeEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBVXhCLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixzQkFBc0IsR0FDdkIsTUFBTSxjQUFjLENBQUM7QUFFdEIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDO0tBQ3pCLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO0lBQzNELElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDO0NBQ25ELENBQUM7S0FDRCxLQUFLLEVBQUU7S0FDUCxRQUFRLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUU1QyxNQUFNLHdCQUF3QixHQUFHLENBQUM7S0FDL0IsTUFBTSxDQUFDO0lBQ04sS0FBSyxF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QUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxhQUFhLENBQUMsT0FBZSxFQUFFLFlBQW9CO0lBQ2hFLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEIsS0FBSyxNQUFNLGNBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxjQUFjLElBQUksQ0FBQyxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUFFLElBQUksR0FBRyxNQUFNLGFBQWEsRUFBRSxDQUFDO1FBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQWEsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYXp5IEdyYXBoaXRpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBiYWNrZW5kLW5ldXRyYWwgbWVtb3J5IGNvbnRyYWN0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIYXNoLCByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSBcIm5vZGU6bmV0XCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBvcGVuQXBpVG9vbHMsIHR5cGUgT3BlbkFwaVRvb2wgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IHJlc29sdmVQcm9maWxlIH0gZnJvbSBcIkBkYngtdG9vbHMvYXV0aFwiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMsIEVOVl9PTkxZIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3NSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlc29sdmVkR3JhcGhpdGlPcHRpb25zLFxuICB0eXBlIEdyYXBoaXRpT3B0aW9ucyxcbiAgcmVzb2x2ZUdyYXBoaXRpT3B0aW9ucyxcbiAgZ3JhcGhpdGlPcHRpb25zRnJvbUVudmlyb25tZW50LFxuICBncmFwaGl0aU9wdGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdyYXBoaXRpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQge1xuICB0eXBlIEdyYXBoaXRpTWVtb3J5QmFja2VuZCxcbiAgdHlwZSBNZW1vcnlUdXJuLFxuICB0eXBlIFJlY2FsbE1lbW9yeUlucHV0LFxuICB0eXBlIFJlY2FsbE1lbW9yeVJlc3VsdCxcbiAgdHlwZSBSZW1lbWJlck1lbW9yeUlucHV0LFxuICB0eXBlIFJlbWVtYmVyTWVtb3J5UmVzdWx0LFxufSBmcm9tIFwiLi4vX2NvbnRyYWN0cy50c1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlR3JhcGhpdGlDaGlsZFByb2Nlc3MsXG4gIGdyYXBoaXRpSGVhbHRoQ2hlY2ssXG4gIGdyYXBoaXRpSHR0cFVybCxcbiAgZ3JhcGhpdGlSZXF1ZXN0SGVhZGVycyxcbn0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuXG5jb25zdCBHcmFwaGl0aUZhY3RTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkdyYXBoaXRpIGZhY3QgbmFtZS5cIiksXG4gICAgZmFjdDogei5zdHJpbmcoKS5kZXNjcmliZShcIlJldHJpZXZlZCBncmFwaCBmYWN0LlwiKSxcbiAgfSlcbiAgLmxvb3NlKClcbiAgLmRlc2NyaWJlKFwiR3JhcGhpdGkgZmFjdCBzZWFyY2ggcmVzdWx0LlwiKTtcblxuY29uc3QgR3JhcGhpdGlGYWN0U2VhcmNoU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBmYWN0czogei5hcnJheShHcmFwaGl0aUZhY3RTY2hlbWEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJNYXRjaGluZyBncmFwaCBmYWN0cy5cIiksXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkdyYXBoaXRpIG9wZXJhdGlvbiBlcnJvci5cIiksXG4gIH0pXG4gIC5sb29zZSgpXG4gIC5kZXNjcmliZShcIkdyYXBoaXRpIGZhY3Qgc2VhcmNoIHJlc3BvbnNlLlwiKTtcblxuY29uc3QgR3JhcGhpdGlXcml0ZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbWVzc2FnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiR3JhcGhpdGkgd3JpdGUgY29uZmlybWF0aW9uLlwiKSxcbiAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiR3JhcGhpdGkgb3BlcmF0aW9uIGVycm9yLlwiKSxcbiAgfSlcbiAgLmxvb3NlKClcbiAgLmRlc2NyaWJlKFwiR3JhcGhpdGkgd3JpdGUgcmVzcG9uc2UuXCIpO1xuXG5jbGFzcyBHcmFwaGl0aUJhY2tlbmQgaW1wbGVtZW50cyBHcmFwaGl0aU1lbW9yeUJhY2tlbmQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFJlc29sdmVkR3JhcGhpdGlPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hpbGQ6IENoaWxkUHJvY2Vzc1Jlc3VsdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdyaXRlVG9vbDogT3BlbkFwaVRvb2wsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWNhbGxUb29sOiBPcGVuQXBpVG9vbCxcbiAgKSB7fVxuXG4gIGdldCBydW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5jaGlsZC5leGl0Q29kZSA9PT0gbnVsbCB8fCB0aGlzLmNoaWxkLmV4aXRDb2RlID09PSB1bmRlZmluZWQpICYmXG4gICAgICAodGhpcy5jaGlsZC5zaWduYWxDb2RlID09PSBudWxsIHx8IHRoaXMuY2hpbGQuc2lnbmFsQ29kZSA9PT0gdW5kZWZpbmVkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW1lbWJlcihcbiAgICBhY3RvcklkOiBzdHJpbmcsXG4gICAgaW5wdXQ6IFJlbWVtYmVyTWVtb3J5SW5wdXQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8UmVtZW1iZXJNZW1vcnlSZXN1bHQ+IHtcbiAgICBhd2FpdCB0aGlzLndyaXRlKFxuICAgICAgYWN0b3JJZCxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogaW5wdXQucGF0aCxcbiAgICAgICAgZXBpc29kZV9ib2R5OiBpbnB1dC5jb250ZW50LFxuICAgICAgICBzb3VyY2U6IFwidGV4dFwiLFxuICAgICAgICBzb3VyY2VfZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uID8gYCR7aW5wdXQucGF0aH06ICR7aW5wdXQuZGVzY3JpcHRpb259YCA6IGlucHV0LnBhdGgsXG4gICAgICB9LFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tlbmQ6IFwiZ3JhcGhpdGlcIixcbiAgICAgIG1lbW9yeToge1xuICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICBjb250ZW50OiBpbnB1dC5jb250ZW50LFxuICAgICAgICAuLi4oaW5wdXQuZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uOiBpbnB1dC5kZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjYWxsKFxuICAgIGFjdG9ySWQ6IHN0cmluZyxcbiAgICBpbnB1dDogUmVjYWxsTWVtb3J5SW5wdXQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8UmVjYWxsTWVtb3J5UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBHcmFwaGl0aUZhY3RTZWFyY2hTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXG4gICAgICAgIHRoaXMucmVjYWxsVG9vbCxcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5OiBpbnB1dC5xdWVyeSxcbiAgICAgICAgICBtYXhfZmFjdHM6IGlucHV0LmxpbWl0LFxuICAgICAgICAgIGdyb3VwX2lkczogW3VzZXJTY29wZShhY3RvcklkKV0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tlbmQ6IFwiZ3JhcGhpdGlcIixcbiAgICAgIG1lbW9yaWVzOiAocmVzcG9uc2UuZmFjdHMgPz8gW10pLm1hcCgoZmFjdCkgPT4gKHtcbiAgICAgICAgY29udGVudDogZmFjdC5mYWN0LFxuICAgICAgICAuLi4oZmFjdC5uYW1lID8geyBkZXNjcmlwdGlvbjogZmFjdC5uYW1lIH0gOiB7fSksXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVUdXJuKHR1cm46IE1lbW9yeVR1cm4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy53cml0ZShcbiAgICAgIHR1cm4uYWN0b3JJZCxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogYE1hc3RyYSB0dXJuICR7dHVybi5hZ2VudElkfS8ke3R1cm4udGhyZWFkSWR9YCxcbiAgICAgICAgZXBpc29kZV9ib2R5OiBgVXNlcjogJHt0dXJuLnVzZXJ9XFxuXFxuQXNzaXN0YW50OiAke3R1cm4uYXNzaXN0YW50fWAsXG4gICAgICAgIHNvdXJjZTogXCJtZXNzYWdlXCIsXG4gICAgICAgIHNvdXJjZV9kZXNjcmlwdGlvbjogYENvbXBsZXRlZCAke3R1cm4uYWdlbnRJZH0gY29udmVyc2F0aW9uIHR1cm5gLFxuICAgICAgfSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICB9XG5cbiAgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGQuc2h1dGRvd24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGUoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IEdyYXBoaXRpV3JpdGVTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QodGhpcy53cml0ZVRvb2wsIHsgLi4uYXJncywgZ3JvdXBfaWQ6IHVzZXJTY29wZShhY3RvcklkKSB9LCBzaWduYWwpLFxuICAgICk7XG4gICAgaWYgKHJlc3BvbnNlLmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0KFxuICAgIHRvb2w6IE9wZW5BcGlUb29sLFxuICAgIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBpZiAoIXRoaXMucnVubmluZykgdGhyb3cgbmV3IEVycm9yKFwiR3JhcGhpdGkgc2lkZWNhciBpcyBub3QgcnVubmluZ1wiKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRvb2wudXJsLCB7XG4gICAgICBtZXRob2Q6IHRvb2wubWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi5ncmFwaGl0aVJlcXVlc3RIZWFkZXJzKHRoaXMub3B0aW9ucyksXG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLFxuICAgICAgc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEdyYXBoaXRpIG9wZXJhdGlvbiAke3Rvb2wuaWR9IGZhaWxlZCB3aXRoIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke2F3YWl0IHJlc3BvbnNlLnRleHQoKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfVxufVxuXG4vKiogU3RhcnQgYSBmdWxseSByZWFkeSBHcmFwaGl0aSBiYWNrZW5kIGZvciB0aGUgZmlyc3QgZmFsbGJhY2sgb3BlcmF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0R3JhcGhpdGlCYWNrZW5kKFxuICBvcHRpb25zOiBHcmFwaGl0aU9wdGlvbnMsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxHcmFwaGl0aU1lbW9yeUJhY2tlbmQ+IHtcbiAgY29uc3QgY29uZmlndXJlZCA9IHJlc29sdmVHcmFwaGl0aUNvbmZpZyhvcHRpb25zKTtcbiAgaWYgKGNvbmZpZ3VyZWQubGlzdGVuLnNjaGVtZSAhPT0gXCJ0Y3BcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkFwcEtpdCBtZW1vcnkgcmVxdWlyZXMgYSBUQ1AgR3JhcGhpdGkgbGlzdGVuZXJcIik7XG4gIH1cbiAgY29uc3QgW2dyYXBoaXRpUG9ydF0gPSBhd2FpdCBkaXN0aW5jdFBvcnRzKFxuICAgIGNvbmZpZ1V0aWxzLnBvcnQodW5kZWZpbmVkLCBcIkRBVEFCUklDS1NfQVBQX1BPUlRcIiwgODAwMCwgRU5WX09OTFkpLFxuICAgIGNvbmZpZ3VyZWQubGlzdGVuLnBvcnQsXG4gICk7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUdyYXBoaXRpT3B0aW9ucyh7XG4gICAgLi4uY29uZmlndXJlZCxcbiAgICBiZWFyZXI6IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZyhcImJhc2U2NHVybFwiKSxcbiAgICBsaXN0ZW46IHsgLi4uY29uZmlndXJlZC5saXN0ZW4sIHBvcnQ6IGdyYXBoaXRpUG9ydCB9LFxuICB9KTtcbiAgbGV0IHRvb2xzOiBPcGVuQXBpVG9vbFtdIHwgdW5kZWZpbmVkO1xuICBjb25zdCB7IGNoaWxkIH0gPSBhd2FpdCBjcmVhdGVHcmFwaGl0aUNoaWxkUHJvY2Vzcyh7XG4gICAgLi4ucmVzb2x2ZWQsXG4gICAgLi4uKHNpZ25hbCA/IHsgc2lnbmFsIH0gOiB7fSksXG4gICAgaGVhbHRoQ2hlY2s6IGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIShhd2FpdCBncmFwaGl0aUhlYWx0aENoZWNrKHJlc29sdmVkLCBzaWduYWwpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBvcGVuQXBpVG9vbHMoZ3JhcGhpdGlIdHRwVXJsKHJlc29sdmVkLCBcIi9vcGVuYXBpLmpzb25cIiksIHtcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgaGVhZGVyczogZ3JhcGhpdGlSZXF1ZXN0SGVhZGVycyhyZXNvbHZlZCksXG4gICAgICAgIH0pO1xuICAgICAgICB0b29scyA9IFtcbiAgICAgICAgICByZXF1aXJlZE9wZXJhdGlvbihsb2FkZWQsIFwiYWRkX21lbW9yeV9zeW5jXCIpLFxuICAgICAgICAgIHJlcXVpcmVkT3BlcmF0aW9uKGxvYWRlZCwgXCJzZWFyY2hfbWVtb3J5X2ZhY3RzXCIpLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgZXJyb3I7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgaWYgKCF0b29scykge1xuICAgIGF3YWl0IGNoaWxkLnNodXRkb3duKCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR3JhcGhpdGkgT3BlbkFQSSB0b29scyB3ZXJlIG5vdCBjYXB0dXJlZCBkdXJpbmcgcmVhZGluZXNzXCIpO1xuICB9XG4gIHJldHVybiBuZXcgR3JhcGhpdGlCYWNrZW5kKHJlc29sdmVkLCBjaGlsZCwgdG9vbHNbMF0hLCB0b29sc1sxXSEpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlR3JhcGhpdGlDb25maWcob3B0aW9uczogR3JhcGhpdGlPcHRpb25zKTogUmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdyYXBoaXRpT3B0aW9uc0Zyb21FbnZpcm9ubWVudChwcm9jZXNzLmVudik7XG4gIGlmIChlbnZpcm9ubWVudC5wcm9maWxlICYmICFyZXNvbHZlUHJvZmlsZSh7IHByb2ZpbGU6IGVudmlyb25tZW50LnByb2ZpbGUgfSkpIHtcbiAgICBlbnZpcm9ubWVudC5wcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG92ZXJyaWRlcyA9IGdyYXBoaXRpT3B0aW9uT3ZlcnJpZGVzKG9wdGlvbnMpO1xuICByZXR1cm4gcmVzb2x2ZUdyYXBoaXRpT3B0aW9ucyh7XG4gICAgLi4uZW52aXJvbm1lbnQsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICAgIGxpc3Rlbjogb3ZlcnJpZGVzLmxpc3RlbiA/P1xuICAgICAgZW52aXJvbm1lbnQubGlzdGVuID8/IHtcbiAgICAgICAgc2NoZW1lOiBcInRjcFwiLFxuICAgICAgICBob3N0OiBcIjEyNy4wLjAuMVwiLFxuICAgICAgICBwb3J0OiAwLFxuICAgICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVkT3BlcmF0aW9uKHRvb2xzOiByZWFkb25seSBPcGVuQXBpVG9vbFtdLCBuYW1lOiBzdHJpbmcpOiBPcGVuQXBpVG9vbCB7XG4gIGNvbnN0IHRvb2wgPSB0b29scy5maW5kKCh7IGlkIH0pID0+IGlkID09PSBuYW1lKTtcbiAgaWYgKCF0b29sKSB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoaXRpIE9wZW5BUEkgaXMgbWlzc2luZyBvcGVyYXRpb246ICR7bmFtZX1gKTtcbiAgcmV0dXJuIHRvb2w7XG59XG5cbmZ1bmN0aW9uIHVzZXJTY29wZSh1c2VySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgdXNlcl8ke2NyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHVzZXJJZCkuZGlnZXN0KFwiYmFzZTY0dXJsXCIpfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF2YWlsYWJsZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgc2VydmVyLmxpc3RlbigwLCBcIjEyNy4wLjAuMVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgIGlmICghYWRkcmVzcyB8fCB0eXBlb2YgYWRkcmVzcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNvdWxkIG5vdCBhbGxvY2F0ZSBhIEdyYXBoaXRpIGxvb3BiYWNrIHBvcnRcIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXJ2ZXIuY2xvc2UoKGVycm9yKSA9PiAoZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZShhZGRyZXNzLnBvcnQpKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkaXN0aW5jdFBvcnRzKGFwcFBvcnQ6IG51bWJlciwgZ3JhcGhpdGlQb3J0OiBudW1iZXIpOiBQcm9taXNlPFtudW1iZXJdPiB7XG4gIGNvbnN0IHBvcnRzID0gW2FwcFBvcnRdO1xuICBmb3IgKGNvbnN0IGNvbmZpZ3VyZWRQb3J0IG9mIFtncmFwaGl0aVBvcnRdKSB7XG4gICAgaWYgKGNvbmZpZ3VyZWRQb3J0ICYmIHBvcnRzLmluY2x1ZGVzKGNvbmZpZ3VyZWRQb3J0KSkge1xuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcIkdyYXBoaXRpIHNpZGVjYXIgcG9ydHMgbXVzdCBkaWZmZXIgZnJvbSBEQVRBQlJJQ0tTX0FQUF9QT1JUXCIpO1xuICAgIH1cbiAgICBsZXQgcG9ydCA9IGNvbmZpZ3VyZWRQb3J0IHx8IChhd2FpdCBhdmFpbGFibGVQb3J0KCkpO1xuICAgIHdoaWxlIChwb3J0cy5pbmNsdWRlcyhwb3J0KSkgcG9ydCA9IGF3YWl0IGF2YWlsYWJsZVBvcnQoKTtcbiAgICBwb3J0cy5wdXNoKHBvcnQpO1xuICB9XG4gIHJldHVybiBwb3J0cy5zbGljZSgxKSBhcyBbbnVtYmVyXTtcbn1cbiJdfQ==
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import type { ChildProcessResult } from "@dbx-tools/core/exec";
7
- import { type GraphitiOptions, type ResolvedGraphitiOptions } from "./options.ts";
6
+ import type { ChildProcessResult } from "@dbx-tools/core";
7
+ import { type GraphitiOptions, type ResolvedGraphitiOptions } from "@dbx-tools/shared-graphiti";
8
8
  /** Context passed to one Graphiti sidecar readiness probe. */
9
9
  export interface GraphitiHealthCheckContext {
10
10
  readonly process: ChildProcessResult;
@@ -4,19 +4,19 @@
4
4
  * @module
5
5
  */
6
6
  import { delimiter, dirname } from "node:path";
7
- import { exec } from "@dbx-tools/core";
8
- import { asyncUtils, environmentUtils, functionUtils, options as sharedOptions, } from "@dbx-tools/shared-core";
7
+ import { spawn } from "@dbx-tools/core";
8
+ import { poll, isDatabricksAppEnv, memoize, formatListenAddress } from "@dbx-tools/shared-core";
9
+ import { graphitiOptionsEnvironment, resolveGraphitiOptions, } from "@dbx-tools/shared-graphiti";
9
10
  import { coerce, rcompare } from "semver";
10
- import { graphitiOptionsEnvironment, resolveGraphitiOptions, } from "./options.js";
11
11
  const HEALTH_CHECK_INTERVAL_MS = 200;
12
12
  const PYTHON_CANDIDATES = ["python", "python3"];
13
13
  const GRAPHITI_IMPORT_PROBE = "import dbx_tools.graphiti";
14
- const graphitiPython = functionUtils.memoize(async () => {
14
+ const graphitiPython = memoize(async () => {
15
15
  const available = (await Promise.all(PYTHON_CANDIDATES.map((command) => _probePython(command)))).filter((candidate) => candidate !== undefined);
16
16
  available.sort((left, right) => rcompare(left.version, right.version));
17
17
  return available[0]?.command;
18
18
  });
19
- function graphitiOptions(options) {
19
+ function graphitiRuntimeOptions(options) {
20
20
  const { healthCheck: _healthCheck, signal: _signal, ...graphiti } = options;
21
21
  return graphiti;
22
22
  }
@@ -54,7 +54,7 @@ export async function graphitiHealthCheck(options, signal) {
54
54
  /** Poll `/healthcheck` until it succeeds or `timeoutMs` elapses. */
55
55
  export async function waitForGraphitiHealth(options, timeoutMs, signal) {
56
56
  const budget = Math.max(1, timeoutMs);
57
- for await (const healthy of asyncUtils.poll(({ signal: pollSignal }) => graphitiHealthCheck(options, pollSignal), {
57
+ for await (const healthy of poll(({ signal: pollSignal }) => graphitiHealthCheck(options, pollSignal), {
58
58
  intervalMs: HEALTH_CHECK_INTERVAL_MS,
59
59
  timeoutMs: budget,
60
60
  signal,
@@ -74,7 +74,7 @@ export async function resolveGraphitiPythonCommand(options = {}, ...args) {
74
74
  const python = process.env.PYTHON?.trim();
75
75
  if (python)
76
76
  return { command: python, args };
77
- if (environmentUtils.isDatabricksAppEnv()) {
77
+ if (isDatabricksAppEnv()) {
78
78
  const installed = await graphitiPython();
79
79
  if (installed)
80
80
  return { command: installed, args };
@@ -90,7 +90,7 @@ export async function resolveGraphitiPythonCommand(options = {}, ...args) {
90
90
  };
91
91
  }
92
92
  async function _probePython(command) {
93
- const versionResult = await exec.spawn(command, ["-V"], {
93
+ const versionResult = await spawn(command, ["-V"], {
94
94
  check: false,
95
95
  stdin: "ignore",
96
96
  stdout: "capture",
@@ -102,7 +102,7 @@ async function _probePython(command) {
102
102
  const version = coerce(`${versionResult.stdout}\n${versionResult.stderr}`);
103
103
  if (!version)
104
104
  return undefined;
105
- const importResult = await exec.spawn(command, ["-c", GRAPHITI_IMPORT_PROBE], {
105
+ const importResult = await spawn(command, ["-c", GRAPHITI_IMPORT_PROBE], {
106
106
  check: false,
107
107
  stdin: "ignore",
108
108
  stdout: "ignore",
@@ -112,16 +112,14 @@ async function _probePython(command) {
112
112
  }
113
113
  /** Build one HTTP URL for a resolved Graphiti listener. */
114
114
  export function graphitiHttpUrl(options, path) {
115
- return `${sharedOptions
116
- .formatListenAddress(options.listen)
117
- .replace(/^tcp:/, "http:")}${path.startsWith("/") ? path : `/${path}`}`;
115
+ return `${formatListenAddress(options.listen).replace(/^tcp:/, "http:")}${path.startsWith("/") ? path : `/${path}`}`;
118
116
  }
119
117
  /** Build one readiness-gated Graphiti sidecar from the shared typed options. */
120
118
  export async function createGraphitiChildProcess(options = {}) {
121
119
  const healthCheck = options.healthCheck;
122
- const resolved = resolveGraphitiOptions(graphitiOptions(options));
120
+ const resolved = resolveGraphitiOptions(graphitiRuntimeOptions(options));
123
121
  const python = await resolveGraphitiPythonCommand({ dev: !resolved.databaseUrl }, "-m", "dbx_tools.graphiti");
124
- const child = exec.spawn(python.command, python.args, {
122
+ const child = spawn(python.command, python.args, {
125
123
  env: _runtimeEnvironment(resolved),
126
124
  forwardTerminationSignals: false,
127
125
  });
@@ -149,7 +147,7 @@ export async function createGraphitiChildProcess(options = {}) {
149
147
  }
150
148
  }
151
149
  async function waitForGraphitiChild(child, healthCheck, timeoutMs, signal) {
152
- for await (const healthy of asyncUtils.poll(({ attempt, signal: pollSignal }) => healthCheck({ process: child, signal: pollSignal, attempt }), {
150
+ for await (const healthy of poll(({ attempt, signal: pollSignal }) => healthCheck({ process: child, signal: pollSignal, attempt }), {
153
151
  intervalMs: HEALTH_CHECK_INTERVAL_MS,
154
152
  timeoutMs,
155
153
  signal,
@@ -167,4 +165,4 @@ export async function runGraphiti(options = {}) {
167
165
  throw new Error(`Graphiti child exited with status ${outcome.exitCode}`);
168
166
  }
169
167
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaGl0aS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkMsT0FBTyxFQUNMLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLE9BQU8sSUFBSSxhQUFhLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWUsTUFBTSxRQUFRLENBQUM7QUFFdkQsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsR0FHdkIsTUFBTSxjQUFjLENBQUM7QUEyQnRCLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFVLENBQUM7QUFDekQsTUFBTSxxQkFBcUIsR0FBRywyQkFBMkIsQ0FBQztBQU8xRCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBaUMsRUFBRTtJQUNuRixNQUFNLFNBQVMsR0FBRyxDQUNoQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUM3RSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBZ0MsRUFBRSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMvRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFD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cEUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUM7SUFDNUIsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOb2RlIEdyYXBoaXRpIHJ1bnRpbWUgYW5kIHByb2Nlc3Mgc3VwZXJ2aXNpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGRlbGltaXRlciwgZGlybmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2Vzc1Jlc3VsdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmUvZXhlY1wiO1xuaW1wb3J0IHtcbiAgYXN5bmNVdGlscyxcbiAgZW52aXJvbm1lbnRVdGlscyxcbiAgZnVuY3Rpb25VdGlscyxcbiAgb3B0aW9ucyBhcyBzaGFyZWRPcHRpb25zLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgY29lcmNlLCByY29tcGFyZSwgdHlwZSBTZW1WZXIgfSBmcm9tIFwic2VtdmVyXCI7XG5cbmltcG9ydCB7XG4gIGdyYXBoaXRpT3B0aW9uc0Vudmlyb25tZW50LFxuICByZXNvbHZlR3JhcGhpdGlPcHRpb25zLFxuICB0eXBlIEdyYXBoaXRpT3B0aW9ucyxcbiAgdHlwZSBSZXNvbHZlZEdyYXBoaXRpT3B0aW9ucyxcbn0gZnJvbSBcIi4vb3B0aW9ucy50c1wiO1xuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gb25lIEdyYXBoaXRpIHNpZGVjYXIgcmVhZGluZXNzIHByb2JlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaGl0aUhlYWx0aENoZWNrQ29udGV4dCB7XG4gIHJlYWRvbmx5IHByb2Nlc3M6IENoaWxkUHJvY2Vzc1Jlc3VsdDtcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcmVhZG9ubHkgYXR0ZW1wdDogbnVtYmVyO1xufVxuXG4vKiogSFRUUCBwcm9iZSB1c2VkIHRvIGRlY2lkZSB0aGF0IHRoZSBHcmFwaGl0aSBzaWRlY2FyIGhhcyBzdGFydGVkIGxpc3RlbmluZy4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoaXRpSGVhbHRoQ2hlY2sgPSAoXG4gIGNvbnRleHQ6IEdyYXBoaXRpSGVhbHRoQ2hlY2tDb250ZXh0LFxuKSA9PiBib29sZWFuIHwgUHJvbWlzZUxpa2U8Ym9vbGVhbj47XG5cbi8qKiBBc3luYyBjcmVhdGlvbiByZXN1bHQgdGhhdCBwcmVzZXJ2ZXMgdGhlIGF3YWl0YWJsZSBjaGlsZCBoYW5kbGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoaXRpQ2hpbGRQcm9jZXNzIHtcbiAgY2hpbGQ6IENoaWxkUHJvY2Vzc1Jlc3VsdDtcbn1cblxuLyoqIFNoYXJlZCBHcmFwaGl0aSBvcHRpb25zIHBsdXMgdGhlIE5vZGUtb25seSBzaWRlY2FyIHJlYWRpbmVzcyBwcm9iZS4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoaXRpUnVudGltZU9wdGlvbnMgPSBHcmFwaGl0aU9wdGlvbnMgJiB7XG4gIC8qKiBSZWFkaW5lc3MgcHJvYmUgZm9yIHtAbGluayBjcmVhdGVHcmFwaGl0aUNoaWxkUHJvY2Vzc30uIERlZmF1bHRzIHRvIGAvaGVhbHRoY2hlY2tgLiAqL1xuICBoZWFsdGhDaGVjaz86IEdyYXBoaXRpSGVhbHRoQ2hlY2s7XG4gIC8qKiBDYW5jZWxzIHNpZGVjYXIgc3RhcnR1cCB3aXRob3V0IGNoYW5naW5nIHRoZSBzZXJpYWxpemVkIEdyYXBoaXRpIGNvbmZpZ3VyYXRpb24uICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufTtcblxuY29uc3QgSEVBTFRIX0NIRUNLX0lOVEVSVkFMX01TID0gMjAwO1xuY29uc3QgUFlUSE9OX0NBTkRJREFURVMgPSBbXCJweXRob25cIiwgXCJweXRob24zXCJdIGFzIGNvbnN0O1xuY29uc3QgR1JBUEhJVElfSU1QT1JUX1BST0JFID0gXCJpbXBvcnQgZGJ4X3Rvb2xzLmdyYXBoaXRpXCI7XG5cbmludGVyZmFjZSBQeXRob25DYW5kaWRhdGUge1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIHZlcnNpb246IFNlbVZlcjtcbn1cblxuY29uc3QgZ3JhcGhpdGlQeXRob24gPSBmdW5jdGlvblV0aWxzLm1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IGF2YWlsYWJsZSA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChQWVRIT05fQ0FORElEQVRFUy5tYXAoKGNvbW1hbmQpID0+IF9wcm9iZVB5dGhvbihjb21tYW5kKSkpXG4gICkuZmlsdGVyKChjYW5kaWRhdGUpOiBjYW5kaWRhdGUgaXMgUHl0aG9uQ2FuZGlkYXRlID0+IGNhbmRpZGF0ZSAhPT0gdW5kZWZpbmVkKTtcbiAgYXZhaWxhYmxlLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiByY29tcGFyZShsZWZ0LnZlcnNpb24sIHJpZ2h0LnZlcnNpb24pKTtcbiAgcmV0dXJuIGF2YWlsYWJsZVswXT8uY29tbWFuZDtcbn0pO1xuXG5mdW5jdGlvbiBncmFwaGl0aU9wdGlvbnMob3B0aW9uczogR3JhcGhpdGlSdW50aW1lT3B0aW9ucyk6IEdyYXBoaXRpT3B0aW9ucyB7XG4gIGNvbnN0IHsgaGVhbHRoQ2hlY2s6IF9oZWFsdGhDaGVjaywgc2lnbmFsOiBfc2lnbmFsLCAuLi5ncmFwaGl0aSB9ID0gb3B0aW9ucztcbiAgcmV0dXJuIGdyYXBoaXRpO1xufVxuXG4vKiogTWlsbGlzZWNvbmRzIGxlZnQgaW4gYSBzdGFydHVwIGJ1ZGdldCBhZnRlciBgc3RhcnRlZEF0YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1haW5pbmdUaW1lb3V0TXMoc3RhcnRlZEF0OiBudW1iZXIsIHRpbWVvdXRNczogbnVtYmVyLCBub3cgPSBEYXRlLm5vdygpKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIHRpbWVvdXRNcyAtIChub3cgLSBzdGFydGVkQXQpKTtcbn1cblxuZnVuY3Rpb24gX3J1bnRpbWVFbnZpcm9ubWVudChvcHRpb25zOiBSZXNvbHZlZEdyYXBoaXRpT3B0aW9ucyk6IE5vZGVKUy5Qcm9jZXNzRW52IHtcbiAgaWYgKG9wdGlvbnMubGlzdGVuLnNjaGVtZSAhPT0gXCJ0Y3BcIikgdGhyb3cgbmV3IEVycm9yKFwiR3JhcGhpdGkgcmVxdWlyZXMgYSBUQ1AgbGlzdGVuZXJcIik7XG4gIGNvbnN0IG5vZGVCaW4gPSBwcm9jZXNzLmVudi5EQlhfVE9PTFNfTk9ERV9CSU4/LnRyaW0oKTtcbiAgY29uc3QgcGF0aCA9IG5vZGVCaW5cbiAgICA/IFtkaXJuYW1lKG5vZGVCaW4pLCBwcm9jZXNzLmVudi5QQVRIXS5maWx0ZXIoQm9vbGVhbikuam9pbihkZWxpbWl0ZXIpXG4gICAgOiBwcm9jZXNzLmVudi5QQVRIO1xuICByZXR1cm4ge1xuICAgIC4uLnByb2Nlc3MuZW52LFxuICAgIC4uLihwYXRoID8geyBQQVRIOiBwYXRoIH0gOiB7fSksXG4gICAgLi4uZ3JhcGhpdGlPcHRpb25zRW52aXJvbm1lbnQob3B0aW9ucyksXG4gIH07XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciB0aGUgR3JhcGhpdGkgYC9oZWFsdGhjaGVja2AgZW5kcG9pbnQgcmVzcG9uZHMgc3VjY2Vzc2Z1bGx5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBoaXRpSGVhbHRoQ2hlY2soXG4gIG9wdGlvbnM6IFBpY2s8UmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsIFwibGlzdGVuXCIgfCBcImJlYXJlclwiPixcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCBmZXRjaChncmFwaGl0aUh0dHBVcmwob3B0aW9ucywgXCIvaGVhbHRoY2hlY2tcIiksIHtcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICBoZWFkZXJzOiBncmFwaGl0aVJlcXVlc3RIZWFkZXJzKG9wdGlvbnMpLFxuICAgICAgfSlcbiAgICApLm9rO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgZXJyb3I7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiBQb2xsIGAvaGVhbHRoY2hlY2tgIHVudGlsIGl0IHN1Y2NlZWRzIG9yIGB0aW1lb3V0TXNgIGVsYXBzZXMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckdyYXBoaXRpSGVhbHRoKFxuICBvcHRpb25zOiBQaWNrPFJlc29sdmVkR3JhcGhpdGlPcHRpb25zLCBcImxpc3RlblwiIHwgXCJiZWFyZXJcIj4sXG4gIHRpbWVvdXRNczogbnVtYmVyLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBidWRnZXQgPSBNYXRoLm1heCgxLCB0aW1lb3V0TXMpO1xuICBmb3IgYXdhaXQgKGNvbnN0IGhlYWx0aHkgb2YgYXN5bmNVdGlscy5wb2xsKFxuICAgICh7IHNpZ25hbDogcG9sbFNpZ25hbCB9KSA9PiBncmFwaGl0aUhlYWx0aENoZWNrKG9wdGlvbnMsIHBvbGxTaWduYWwpLFxuICAgIHtcbiAgICAgIGludGVydmFsTXM6IEhFQUxUSF9DSEVDS19JTlRFUlZBTF9NUyxcbiAgICAgIHRpbWVvdXRNczogYnVkZ2V0LFxuICAgICAgc2lnbmFsLFxuICAgICAgcHJlZGljYXRlOiAocmVhZHkpID0+ICFyZWFkeSxcbiAgICB9LFxuICApKSB7XG4gICAgaWYgKGhlYWx0aHkpIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSBzaWRlY2FyIGhlYWx0aGNoZWNrIGRpZCBub3Qgc3VjY2VlZFwiKTtcbn1cblxuLyoqIEJ1aWxkIGF1dGhvcml6YXRpb24gaGVhZGVycyBmb3Igb25lIG9wdGlvbmFsbHkgc2VjdXJlZCBHcmFwaGl0aSBydW50aW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBoaXRpUmVxdWVzdEhlYWRlcnMoXG4gIG9wdGlvbnM6IFBpY2s8UmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsIFwiYmVhcmVyXCI+LFxuKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gb3B0aW9ucy5iZWFyZXIgPyB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlcn1gIH0gOiB7fTtcbn1cblxuLyoqIEV4ZWN1dGFibGUgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIGxhdW5jaCBHcmFwaGl0aS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhpdGlQeXRob25Db21tYW5kIHtcbiAgY29tbWFuZDogc3RyaW5nO1xuICBhcmdzOiBzdHJpbmdbXTtcbn1cblxuLyoqIFJlc29sdmUgY29uZmlndXJlZCBvciBhcHAtaW5zdGFsbGVkIFB5dGhvbiwgb3RoZXJ3aXNlIGEgdXYtcHJvdmlzaW9uZWQgcnVudGltZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlR3JhcGhpdGlQeXRob25Db21tYW5kKFxuICBvcHRpb25zOiB7IGRldj86IGJvb2xlYW4gfSA9IHt9LFxuICAuLi5hcmdzOiBzdHJpbmdbXVxuKTogUHJvbWlzZTxHcmFwaGl0aVB5dGhvbkNvbW1hbmQ+IHtcbiAgY29uc3QgcHl0aG9uID0gcHJvY2Vzcy5lbnYuUFlUSE9OPy50cmltKCk7XG4gIGlmIChweXRob24pIHJldHVybiB7IGNvbW1hbmQ6IHB5dGhvbiwgYXJncyB9O1xuICBpZiAoZW52aXJvbm1lbnRVdGlscy5pc0RhdGFicmlja3NBcHBFbnYoKSkge1xuICAgIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IGdyYXBoaXRpUHl0aG9uKCk7XG4gICAgaWYgKGluc3RhbGxlZCkgcmV0dXJuIHsgY29tbWFuZDogaW5zdGFsbGVkLCBhcmdzIH07XG4gIH1cbiAgY29uc3QgZXh0cmEgPSBvcHRpb25zLmRldiA/IFwiW2Rldl1cIiA6IFwiXCI7XG4gIGNvbnN0IHBhY2thZ2VBcmdzID0gW1xuICAgIFwiLS13aXRoXCIsXG4gICAgYGRieC10b29scy1ncmFwaGl0aSR7ZXh0cmF9PT0keyhhd2FpdCBpbXBvcnQoXCIuLi8uLi9pbmRleC50c1wiKSkuUEFDS0FHRV9WRVJTSU9OfWAsXG4gIF07XG4gIHJldHVybiB7XG4gICAgY29tbWFuZDogXCJ1dlwiLFxuICAgIGFyZ3M6IFtcInJ1blwiLCBcIi0tbm8tcHJvamVjdFwiLCAuLi5wYWNrYWdlQXJncywgXCItLXB5dGhvblwiLCBcInB5dGhvbjNcIiwgXCJweXRob25cIiwgLi4uYXJnc10sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9wcm9iZVB5dGhvbihjb21tYW5kOiBzdHJpbmcpOiBQcm9taXNlPFB5dGhvbkNhbmRpZGF0ZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB2ZXJzaW9uUmVzdWx0ID0gYXdhaXQgZXhlYy5zcGF3bihjb21tYW5kLCBbXCItVlwiXSwge1xuICAgIGNoZWNrOiBmYWxzZSxcbiAgICBzdGRpbjogXCJpZ25vcmVcIixcbiAgICBzdGRvdXQ6IFwiY2FwdHVyZVwiLFxuICAgIHN0ZGVycjogXCJjYXB0dXJlXCIsXG4gICAgdHJpbTogdHJ1ZSxcbiAgfSk7XG4gIGlmICh2ZXJzaW9uUmVzdWx0LmV4aXRDb2RlICE9PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2ZXJzaW9uID0gY29lcmNlKGAke3ZlcnNpb25SZXN1bHQuc3Rkb3V0fVxcbiR7dmVyc2lvblJlc3VsdC5zdGRlcnJ9YCk7XG4gIGlmICghdmVyc2lvbikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBpbXBvcnRSZXN1bHQgPSBhd2FpdCBleGVjLnNwYXduKGNvbW1hbmQsIFtcIi1jXCIsIEdSQVBISVRJX0lNUE9SVF9QUk9CRV0sIHtcbiAgICBjaGVjazogZmFsc2UsXG4gICAgc3RkaW46IFwiaWdub3JlXCIsXG4gICAgc3Rkb3V0OiBcImlnbm9yZVwiLFxuICAgIHN0ZGVycjogXCJpZ25vcmVcIixcbiAgfSk7XG4gIHJldHVybiBpbXBvcnRSZXN1bHQuZXhpdENvZGUgPT09IDAgPyB7IGNvbW1hbmQsIHZlcnNpb24gfSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIEJ1aWxkIG9uZSBIVFRQIFVSTCBmb3IgYSByZXNvbHZlZCBHcmFwaGl0aSBsaXN0ZW5lci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaGl0aUh0dHBVcmwoXG4gIG9wdGlvbnM6IFBpY2s8UmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsIFwibGlzdGVuXCI+LFxuICBwYXRoOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7c2hhcmVkT3B0aW9uc1xuICAgIC5mb3JtYXRMaXN0ZW5BZGRyZXNzKG9wdGlvbnMubGlzdGVuKVxuICAgIC5yZXBsYWNlKC9edGNwOi8sIFwiaHR0cDpcIil9JHtwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcGF0aCA6IGAvJHtwYXRofWB9YDtcbn1cblxuLyoqIEJ1aWxkIG9uZSByZWFkaW5lc3MtZ2F0ZWQgR3JhcGhpdGkgc2lkZWNhciBmcm9tIHRoZSBzaGFyZWQgdHlwZWQgb3B0aW9ucy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVHcmFwaGl0aUNoaWxkUHJvY2VzcyhcbiAgb3B0aW9uczogR3JhcGhpdGlSdW50aW1lT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxHcmFwaGl0aUNoaWxkUHJvY2Vzcz4ge1xuICBjb25zdCBoZWFsdGhDaGVjayA9IG9wdGlvbnMuaGVhbHRoQ2hlY2s7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUdyYXBoaXRpT3B0aW9ucyhncmFwaGl0aU9wdGlvbnMob3B0aW9ucykpO1xuICBjb25zdCBweXRob24gPSBhd2FpdCByZXNvbHZlR3JhcGhpdGlQeXRob25Db21tYW5kKFxuICAgIHsgZGV2OiAhcmVzb2x2ZWQuZGF0YWJhc2VVcmwgfSxcbiAgICBcIi1tXCIsXG4gICAgXCJkYnhfdG9vbHMuZ3JhcGhpdGlcIixcbiAgKTtcbiAgY29uc3QgY2hpbGQgPSBleGVjLnNwYXduKHB5dGhvbi5jb21tYW5kLCBweXRob24uYXJncywge1xuICAgIGVudjogX3J1bnRpbWVFbnZpcm9ubWVudChyZXNvbHZlZCksXG4gICAgZm9yd2FyZFRlcm1pbmF0aW9uU2lnbmFsczogZmFsc2UsXG4gIH0pO1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBzdGFydHVwU2lnbmFsID0gb3B0aW9ucy5zaWduYWxcbiAgICA/IEFib3J0U2lnbmFsLmFueShbY29udHJvbGxlci5zaWduYWwsIG9wdGlvbnMuc2lnbmFsXSlcbiAgICA6IGNvbnRyb2xsZXIuc2lnbmFsO1xuICBjb25zdCBwcm9iZSA9IGhlYWx0aENoZWNrID8/ICgoeyBzaWduYWwgfSkgPT4gZ3JhcGhpdGlIZWFsdGhDaGVjayhyZXNvbHZlZCwgc2lnbmFsKSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIHdhaXRGb3JHcmFwaGl0aUNoaWxkKGNoaWxkLCBwcm9iZSwgcmVzb2x2ZWQuc3RhcnR1cFRpbWVvdXRNcywgc3RhcnR1cFNpZ25hbCksXG4gICAgICBjaGlsZC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHcmFwaGl0aSBjaGlsZCAke2NoaWxkLnBpZCA/PyBcIjx1bmtub3duPlwifSBleGl0ZWQgYmVmb3JlIGJlY29taW5nIHJlYWR5IGAgK1xuICAgICAgICAgICAgYChleGl0ICR7cmVzdWx0LmV4aXRDb2RlfSlgLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgY2hpbGQgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhd2FpdCBjaGlsZC5zaHV0ZG93bigpO1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yR3JhcGhpdGlDaGlsZChcbiAgY2hpbGQ6IENoaWxkUHJvY2Vzc1Jlc3VsdCxcbiAgaGVhbHRoQ2hlY2s6IEdyYXBoaXRpSGVhbHRoQ2hlY2ssXG4gIHRpbWVvdXRNczogbnVtYmVyLFxuICBzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciBhd2FpdCAoY29uc3QgaGVhbHRoeSBvZiBhc3luY1V0aWxzLnBvbGwoXG4gICAgKHsgYXR0ZW1wdCwgc2lnbmFsOiBwb2xsU2lnbmFsIH0pID0+XG4gICAgICBoZWFsdGhDaGVjayh7IHByb2Nlc3M6IGNoaWxkLCBzaWduYWw6IHBvbGxTaWduYWwsIGF0dGVtcHQgfSksXG4gICAge1xuICAgICAgaW50ZXJ2YWxNczogSEVBTFRIX0NIRUNLX0lOVEVSVkFMX01TLFxuICAgICAgdGltZW91dE1zLFxuICAgICAgc2lnbmFsLFxuICAgICAgcHJlZGljYXRlOiAocmVhZHkpID0+ICFyZWFkeSxcbiAgICB9LFxuICApKSB7XG4gICAgaWYgKGhlYWx0aHkpIHJldHVybjtcbiAgfVxufVxuXG4vKiogUnVuIHRoZSBzdXBlcnZpc2VkIHN0YWNrIHVudGlsIHRoZSBjaGlsZCBleGl0cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5HcmFwaGl0aShvcHRpb25zOiBHcmFwaGl0aVJ1bnRpbWVPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjaGlsZCB9ID0gYXdhaXQgY3JlYXRlR3JhcGhpdGlDaGlsZFByb2Nlc3Mob3B0aW9ucyk7XG4gIGNvbnN0IG91dGNvbWUgPSBhd2FpdCBjaGlsZDtcbiAgaWYgKG91dGNvbWUuZXhpdENvZGUgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoaXRpIGNoaWxkIGV4aXRlZCB3aXRoIHN0YXR1cyAke291dGNvbWUuZXhpdENvZGV9YCk7XG4gIH1cbn1cbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaGl0aS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEMsT0FBTyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRyxPQUFPLEVBR0wsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFlLE1BQU0sUUFBUSxDQUFDO0FBMkJ2RCxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBVSxDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsMkJBQTJCLENBQUM7QUFPMUQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBaUMsRUFBRTtJQUNyRSxNQUFNLFNBQVMsR0FBRyxDQUNoQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUM3RSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBZ0MsRUFBRSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMvRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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QUFLLENBQUM7SUFDNUIsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOb2RlIEdyYXBoaXRpIHJ1bnRpbWUgYW5kIHByb2Nlc3Mgc3VwZXJ2aXNpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGRlbGltaXRlciwgZGlybmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3NSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBwb2xsLCBpc0RhdGFicmlja3NBcHBFbnYsIG1lbW9pemUsIGZvcm1hdExpc3RlbkFkZHJlc3MgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBHcmFwaGl0aU9wdGlvbnMsXG4gIHR5cGUgUmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsXG4gIGdyYXBoaXRpT3B0aW9uc0Vudmlyb25tZW50LFxuICByZXNvbHZlR3JhcGhpdGlPcHRpb25zLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ3JhcGhpdGlcIjtcbmltcG9ydCB7IGNvZXJjZSwgcmNvbXBhcmUsIHR5cGUgU2VtVmVyIH0gZnJvbSBcInNlbXZlclwiO1xuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gb25lIEdyYXBoaXRpIHNpZGVjYXIgcmVhZGluZXNzIHByb2JlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaGl0aUhlYWx0aENoZWNrQ29udGV4dCB7XG4gIHJlYWRvbmx5IHByb2Nlc3M6IENoaWxkUHJvY2Vzc1Jlc3VsdDtcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcmVhZG9ubHkgYXR0ZW1wdDogbnVtYmVyO1xufVxuXG4vKiogSFRUUCBwcm9iZSB1c2VkIHRvIGRlY2lkZSB0aGF0IHRoZSBHcmFwaGl0aSBzaWRlY2FyIGhhcyBzdGFydGVkIGxpc3RlbmluZy4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoaXRpSGVhbHRoQ2hlY2sgPSAoXG4gIGNvbnRleHQ6IEdyYXBoaXRpSGVhbHRoQ2hlY2tDb250ZXh0LFxuKSA9PiBib29sZWFuIHwgUHJvbWlzZUxpa2U8Ym9vbGVhbj47XG5cbi8qKiBBc3luYyBjcmVhdGlvbiByZXN1bHQgdGhhdCBwcmVzZXJ2ZXMgdGhlIGF3YWl0YWJsZSBjaGlsZCBoYW5kbGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoaXRpQ2hpbGRQcm9jZXNzIHtcbiAgY2hpbGQ6IENoaWxkUHJvY2Vzc1Jlc3VsdDtcbn1cblxuLyoqIFNoYXJlZCBHcmFwaGl0aSBvcHRpb25zIHBsdXMgdGhlIE5vZGUtb25seSBzaWRlY2FyIHJlYWRpbmVzcyBwcm9iZS4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoaXRpUnVudGltZU9wdGlvbnMgPSBHcmFwaGl0aU9wdGlvbnMgJiB7XG4gIC8qKiBSZWFkaW5lc3MgcHJvYmUgZm9yIHtAbGluayBjcmVhdGVHcmFwaGl0aUNoaWxkUHJvY2Vzc30uIERlZmF1bHRzIHRvIGAvaGVhbHRoY2hlY2tgLiAqL1xuICBoZWFsdGhDaGVjaz86IEdyYXBoaXRpSGVhbHRoQ2hlY2s7XG4gIC8qKiBDYW5jZWxzIHNpZGVjYXIgc3RhcnR1cCB3aXRob3V0IGNoYW5naW5nIHRoZSBzZXJpYWxpemVkIEdyYXBoaXRpIGNvbmZpZ3VyYXRpb24uICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufTtcblxuY29uc3QgSEVBTFRIX0NIRUNLX0lOVEVSVkFMX01TID0gMjAwO1xuY29uc3QgUFlUSE9OX0NBTkRJREFURVMgPSBbXCJweXRob25cIiwgXCJweXRob24zXCJdIGFzIGNvbnN0O1xuY29uc3QgR1JBUEhJVElfSU1QT1JUX1BST0JFID0gXCJpbXBvcnQgZGJ4X3Rvb2xzLmdyYXBoaXRpXCI7XG5cbmludGVyZmFjZSBQeXRob25DYW5kaWRhdGUge1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIHZlcnNpb246IFNlbVZlcjtcbn1cblxuY29uc3QgZ3JhcGhpdGlQeXRob24gPSBtZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCBhdmFpbGFibGUgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoUFlUSE9OX0NBTkRJREFURVMubWFwKChjb21tYW5kKSA9PiBfcHJvYmVQeXRob24oY29tbWFuZCkpKVxuICApLmZpbHRlcigoY2FuZGlkYXRlKTogY2FuZGlkYXRlIGlzIFB5dGhvbkNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUgIT09IHVuZGVmaW5lZCk7XG4gIGF2YWlsYWJsZS5zb3J0KChsZWZ0LCByaWdodCkgPT4gcmNvbXBhcmUobGVmdC52ZXJzaW9uLCByaWdodC52ZXJzaW9uKSk7XG4gIHJldHVybiBhdmFpbGFibGVbMF0/LmNvbW1hbmQ7XG59KTtcblxuZnVuY3Rpb24gZ3JhcGhpdGlSdW50aW1lT3B0aW9ucyhvcHRpb25zOiBHcmFwaGl0aVJ1bnRpbWVPcHRpb25zKTogR3JhcGhpdGlPcHRpb25zIHtcbiAgY29uc3QgeyBoZWFsdGhDaGVjazogX2hlYWx0aENoZWNrLCBzaWduYWw6IF9zaWduYWwsIC4uLmdyYXBoaXRpIH0gPSBvcHRpb25zO1xuICByZXR1cm4gZ3JhcGhpdGk7XG59XG5cbi8qKiBNaWxsaXNlY29uZHMgbGVmdCBpbiBhIHN0YXJ0dXAgYnVkZ2V0IGFmdGVyIGBzdGFydGVkQXRgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFpbmluZ1RpbWVvdXRNcyhzdGFydGVkQXQ6IG51bWJlciwgdGltZW91dE1zOiBudW1iZXIsIG5vdyA9IERhdGUubm93KCkpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgdGltZW91dE1zIC0gKG5vdyAtIHN0YXJ0ZWRBdCkpO1xufVxuXG5mdW5jdGlvbiBfcnVudGltZUVudmlyb25tZW50KG9wdGlvbnM6IFJlc29sdmVkR3JhcGhpdGlPcHRpb25zKTogTm9kZUpTLlByb2Nlc3NFbnYge1xuICBpZiAob3B0aW9ucy5saXN0ZW4uc2NoZW1lICE9PSBcInRjcFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSByZXF1aXJlcyBhIFRDUCBsaXN0ZW5lclwiKTtcbiAgY29uc3Qgbm9kZUJpbiA9IHByb2Nlc3MuZW52LkRCWF9UT09MU19OT0RFX0JJTj8udHJpbSgpO1xuICBjb25zdCBwYXRoID0gbm9kZUJpblxuICAgID8gW2Rpcm5hbWUobm9kZUJpbiksIHByb2Nlc3MuZW52LlBBVEhdLmZpbHRlcihCb29sZWFuKS5qb2luKGRlbGltaXRlcilcbiAgICA6IHByb2Nlc3MuZW52LlBBVEg7XG4gIHJldHVybiB7XG4gICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgLi4uKHBhdGggPyB7IFBBVEg6IHBhdGggfSA6IHt9KSxcbiAgICAuLi5ncmFwaGl0aU9wdGlvbnNFbnZpcm9ubWVudChvcHRpb25zKSxcbiAgfTtcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIHRoZSBHcmFwaGl0aSBgL2hlYWx0aGNoZWNrYCBlbmRwb2ludCByZXNwb25kcyBzdWNjZXNzZnVsbHkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhpdGlIZWFsdGhDaGVjayhcbiAgb3B0aW9uczogUGljazxSZXNvbHZlZEdyYXBoaXRpT3B0aW9ucywgXCJsaXN0ZW5cIiB8IFwiYmVhcmVyXCI+LFxuICBzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IGZldGNoKGdyYXBoaXRpSHR0cFVybChvcHRpb25zLCBcIi9oZWFsdGhjaGVja1wiKSwge1xuICAgICAgICBzaWduYWwsXG4gICAgICAgIGhlYWRlcnM6IGdyYXBoaXRpUmVxdWVzdEhlYWRlcnMob3B0aW9ucyksXG4gICAgICB9KVxuICAgICkub2s7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB0aHJvdyBlcnJvcjtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFBvbGwgYC9oZWFsdGhjaGVja2AgdW50aWwgaXQgc3VjY2VlZHMgb3IgYHRpbWVvdXRNc2AgZWxhcHNlcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yR3JhcGhpdGlIZWFsdGgoXG4gIG9wdGlvbnM6IFBpY2s8UmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsIFwibGlzdGVuXCIgfCBcImJlYXJlclwiPixcbiAgdGltZW91dE1zOiBudW1iZXIsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGJ1ZGdldCA9IE1hdGgubWF4KDEsIHRpbWVvdXRNcyk7XG4gIGZvciBhd2FpdCAoY29uc3QgaGVhbHRoeSBvZiBwb2xsKFxuICAgICh7IHNpZ25hbDogcG9sbFNpZ25hbCB9KSA9PiBncmFwaGl0aUhlYWx0aENoZWNrKG9wdGlvbnMsIHBvbGxTaWduYWwpLFxuICAgIHtcbiAgICAgIGludGVydmFsTXM6IEhFQUxUSF9DSEVDS19JTlRFUlZBTF9NUyxcbiAgICAgIHRpbWVvdXRNczogYnVkZ2V0LFxuICAgICAgc2lnbmFsLFxuICAgICAgcHJlZGljYXRlOiAocmVhZHkpID0+ICFyZWFkeSxcbiAgICB9LFxuICApKSB7XG4gICAgaWYgKGhlYWx0aHkpIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSBzaWRlY2FyIGhlYWx0aGNoZWNrIGRpZCBub3Qgc3VjY2VlZFwiKTtcbn1cblxuLyoqIEJ1aWxkIGF1dGhvcml6YXRpb24gaGVhZGVycyBmb3Igb25lIG9wdGlvbmFsbHkgc2VjdXJlZCBHcmFwaGl0aSBydW50aW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBoaXRpUmVxdWVzdEhlYWRlcnMoXG4gIG9wdGlvbnM6IFBpY2s8UmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsIFwiYmVhcmVyXCI+LFxuKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gb3B0aW9ucy5iZWFyZXIgPyB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlcn1gIH0gOiB7fTtcbn1cblxuLyoqIEV4ZWN1dGFibGUgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIGxhdW5jaCBHcmFwaGl0aS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhpdGlQeXRob25Db21tYW5kIHtcbiAgY29tbWFuZDogc3RyaW5nO1xuICBhcmdzOiBzdHJpbmdbXTtcbn1cblxuLyoqIFJlc29sdmUgY29uZmlndXJlZCBvciBhcHAtaW5zdGFsbGVkIFB5dGhvbiwgb3RoZXJ3aXNlIGEgdXYtcHJvdmlzaW9uZWQgcnVudGltZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlR3JhcGhpdGlQeXRob25Db21tYW5kKFxuICBvcHRpb25zOiB7IGRldj86IGJvb2xlYW4gfSA9IHt9LFxuICAuLi5hcmdzOiBzdHJpbmdbXVxuKTogUHJvbWlzZTxHcmFwaGl0aVB5dGhvbkNvbW1hbmQ+IHtcbiAgY29uc3QgcHl0aG9uID0gcHJvY2Vzcy5lbnYuUFlUSE9OPy50cmltKCk7XG4gIGlmIChweXRob24pIHJldHVybiB7IGNvbW1hbmQ6IHB5dGhvbiwgYXJncyB9O1xuICBpZiAoaXNEYXRhYnJpY2tzQXBwRW52KCkpIHtcbiAgICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCBncmFwaGl0aVB5dGhvbigpO1xuICAgIGlmIChpbnN0YWxsZWQpIHJldHVybiB7IGNvbW1hbmQ6IGluc3RhbGxlZCwgYXJncyB9O1xuICB9XG4gIGNvbnN0IGV4dHJhID0gb3B0aW9ucy5kZXYgPyBcIltkZXZdXCIgOiBcIlwiO1xuICBjb25zdCBwYWNrYWdlQXJncyA9IFtcbiAgICBcIi0td2l0aFwiLFxuICAgIGBkYngtdG9vbHMtZ3JhcGhpdGkke2V4dHJhfT09JHsoYXdhaXQgaW1wb3J0KFwiLi4vLi4vaW5kZXgudHNcIikpLlBBQ0tBR0VfVkVSU0lPTn1gLFxuICBdO1xuICByZXR1cm4ge1xuICAgIGNvbW1hbmQ6IFwidXZcIixcbiAgICBhcmdzOiBbXCJydW5cIiwgXCItLW5vLXByb2plY3RcIiwgLi4ucGFja2FnZUFyZ3MsIFwiLS1weXRob25cIiwgXCJweXRob24zXCIsIFwicHl0aG9uXCIsIC4uLmFyZ3NdLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcHJvYmVQeXRob24oY29tbWFuZDogc3RyaW5nKTogUHJvbWlzZTxQeXRob25DYW5kaWRhdGUgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgdmVyc2lvblJlc3VsdCA9IGF3YWl0IHNwYXduKGNvbW1hbmQsIFtcIi1WXCJdLCB7XG4gICAgY2hlY2s6IGZhbHNlLFxuICAgIHN0ZGluOiBcImlnbm9yZVwiLFxuICAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gICAgc3RkZXJyOiBcImNhcHR1cmVcIixcbiAgICB0cmltOiB0cnVlLFxuICB9KTtcbiAgaWYgKHZlcnNpb25SZXN1bHQuZXhpdENvZGUgIT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHZlcnNpb24gPSBjb2VyY2UoYCR7dmVyc2lvblJlc3VsdC5zdGRvdXR9XFxuJHt2ZXJzaW9uUmVzdWx0LnN0ZGVycn1gKTtcbiAgaWYgKCF2ZXJzaW9uKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGltcG9ydFJlc3VsdCA9IGF3YWl0IHNwYXduKGNvbW1hbmQsIFtcIi1jXCIsIEdSQVBISVRJX0lNUE9SVF9QUk9CRV0sIHtcbiAgICBjaGVjazogZmFsc2UsXG4gICAgc3RkaW46IFwiaWdub3JlXCIsXG4gICAgc3Rkb3V0OiBcImlnbm9yZVwiLFxuICAgIHN0ZGVycjogXCJpZ25vcmVcIixcbiAgfSk7XG4gIHJldHVybiBpbXBvcnRSZXN1bHQuZXhpdENvZGUgPT09IDAgPyB7IGNvbW1hbmQsIHZlcnNpb24gfSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIEJ1aWxkIG9uZSBIVFRQIFVSTCBmb3IgYSByZXNvbHZlZCBHcmFwaGl0aSBsaXN0ZW5lci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaGl0aUh0dHBVcmwoXG4gIG9wdGlvbnM6IFBpY2s8UmVzb2x2ZWRHcmFwaGl0aU9wdGlvbnMsIFwibGlzdGVuXCI+LFxuICBwYXRoOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Zm9ybWF0TGlzdGVuQWRkcmVzcyhvcHRpb25zLmxpc3RlbikucmVwbGFjZShcbiAgICAvXnRjcDovLFxuICAgIFwiaHR0cDpcIixcbiAgKX0ke3BhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YH1gO1xufVxuXG4vKiogQnVpbGQgb25lIHJlYWRpbmVzcy1nYXRlZCBHcmFwaGl0aSBzaWRlY2FyIGZyb20gdGhlIHNoYXJlZCB0eXBlZCBvcHRpb25zLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUdyYXBoaXRpQ2hpbGRQcm9jZXNzKFxuICBvcHRpb25zOiBHcmFwaGl0aVJ1bnRpbWVPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPEdyYXBoaXRpQ2hpbGRQcm9jZXNzPiB7XG4gIGNvbnN0IGhlYWx0aENoZWNrID0gb3B0aW9ucy5oZWFsdGhDaGVjaztcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlR3JhcGhpdGlPcHRpb25zKGdyYXBoaXRpUnVudGltZU9wdGlvbnMob3B0aW9ucykpO1xuICBjb25zdCBweXRob24gPSBhd2FpdCByZXNvbHZlR3JhcGhpdGlQeXRob25Db21tYW5kKFxuICAgIHsgZGV2OiAhcmVzb2x2ZWQuZGF0YWJhc2VVcmwgfSxcbiAgICBcIi1tXCIsXG4gICAgXCJkYnhfdG9vbHMuZ3JhcGhpdGlcIixcbiAgKTtcbiAgY29uc3QgY2hpbGQgPSBzcGF3bihweXRob24uY29tbWFuZCwgcHl0aG9uLmFyZ3MsIHtcbiAgICBlbnY6IF9ydW50aW1lRW52aXJvbm1lbnQocmVzb2x2ZWQpLFxuICAgIGZvcndhcmRUZXJtaW5hdGlvblNpZ25hbHM6IGZhbHNlLFxuICB9KTtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3Qgc3RhcnR1cFNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsXG4gICAgPyBBYm9ydFNpZ25hbC5hbnkoW2NvbnRyb2xsZXIuc2lnbmFsLCBvcHRpb25zLnNpZ25hbF0pXG4gICAgOiBjb250cm9sbGVyLnNpZ25hbDtcbiAgY29uc3QgcHJvYmUgPSBoZWFsdGhDaGVjayA/PyAoKHsgc2lnbmFsIH0pID0+IGdyYXBoaXRpSGVhbHRoQ2hlY2socmVzb2x2ZWQsIHNpZ25hbCkpO1xuICB0cnkge1xuICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICB3YWl0Rm9yR3JhcGhpdGlDaGlsZChjaGlsZCwgcHJvYmUsIHJlc29sdmVkLnN0YXJ0dXBUaW1lb3V0TXMsIHN0YXJ0dXBTaWduYWwpLFxuICAgICAgY2hpbGQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgR3JhcGhpdGkgY2hpbGQgJHtjaGlsZC5waWQgPz8gXCI8dW5rbm93bj5cIn0gZXhpdGVkIGJlZm9yZSBiZWNvbWluZyByZWFkeSBgICtcbiAgICAgICAgICAgIGAoZXhpdCAke3Jlc3VsdC5leGl0Q29kZX0pYCxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIHJldHVybiB7IGNoaWxkIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXdhaXQgY2hpbGQuc2h1dGRvd24oKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckdyYXBoaXRpQ2hpbGQoXG4gIGNoaWxkOiBDaGlsZFByb2Nlc3NSZXN1bHQsXG4gIGhlYWx0aENoZWNrOiBHcmFwaGl0aUhlYWx0aENoZWNrLFxuICB0aW1lb3V0TXM6IG51bWJlcixcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgYXdhaXQgKGNvbnN0IGhlYWx0aHkgb2YgcG9sbChcbiAgICAoeyBhdHRlbXB0LCBzaWduYWw6IHBvbGxTaWduYWwgfSkgPT5cbiAgICAgIGhlYWx0aENoZWNrKHsgcHJvY2VzczogY2hpbGQsIHNpZ25hbDogcG9sbFNpZ25hbCwgYXR0ZW1wdCB9KSxcbiAgICB7XG4gICAgICBpbnRlcnZhbE1zOiBIRUFMVEhfQ0hFQ0tfSU5URVJWQUxfTVMsXG4gICAgICB0aW1lb3V0TXMsXG4gICAgICBzaWduYWwsXG4gICAgICBwcmVkaWNhdGU6IChyZWFkeSkgPT4gIXJlYWR5LFxuICAgIH0sXG4gICkpIHtcbiAgICBpZiAoaGVhbHRoeSkgcmV0dXJuO1xuICB9XG59XG5cbi8qKiBSdW4gdGhlIHN1cGVydmlzZWQgc3RhY2sgdW50aWwgdGhlIGNoaWxkIGV4aXRzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkdyYXBoaXRpKG9wdGlvbnM6IEdyYXBoaXRpUnVudGltZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNoaWxkIH0gPSBhd2FpdCBjcmVhdGVHcmFwaGl0aUNoaWxkUHJvY2VzcyhvcHRpb25zKTtcbiAgY29uc3Qgb3V0Y29tZSA9IGF3YWl0IGNoaWxkO1xuICBpZiAob3V0Y29tZS5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR3JhcGhpdGkgY2hpbGQgZXhpdGVkIHdpdGggc3RhdHVzICR7b3V0Y29tZS5leGl0Q29kZX1gKTtcbiAgfVxufVxuIl19
package/lib/src/plugin.js CHANGED
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import { getExecutionContext, toPlugin } from "@databricks/appkit";
7
7
  import { defineTool, executeFromRegistry, } from "@databricks/appkit/beta";
8
- import { appkit as dbxAppkit, toolkitEntries, ToolRegistryPlugin, } from "@dbx-tools/appkit";
9
- import { errorUtils, log } from "@dbx-tools/shared-core";
8
+ import { ToolRegistryPlugin, tryGetExecutionContext, entries, } from "@dbx-tools/appkit";
9
+ import { errorContext, logger } from "@dbx-tools/shared-core";
10
10
  import { RecallMemoryInputSchema, RememberMemoryInputSchema, } from "./_contracts.js";
11
11
  import { MEMORY_CONFIG_SCHEMA, resolveMemoryPluginConfig, } from "./config.js";
12
12
  import { DatabricksMemoryRuntime } from "./databricks/_runtime.js";
@@ -21,7 +21,7 @@ export class MemoryPlugin extends ToolRegistryPlugin {
21
21
  resources: { required: [], optional: [] },
22
22
  config: { schema: MEMORY_CONFIG_SCHEMA },
23
23
  };
24
- logger = log.logger(this);
24
+ logger = logger(this);
25
25
  resolved;
26
26
  databricks;
27
27
  graphiti;
@@ -59,7 +59,7 @@ export class MemoryPlugin extends ToolRegistryPlugin {
59
59
  });
60
60
  }
61
61
  async toolkit(options) {
62
- return toolkitEntries.entries("memory", this.getAgentTools(), {
62
+ return entries("memory", this.getAgentTools(), {
63
63
  ...options,
64
64
  prefix: options?.prefix ?? "",
65
65
  });
@@ -147,7 +147,7 @@ export class MemoryPlugin extends ToolRegistryPlugin {
147
147
  const configured = this.requireConfig().databricks;
148
148
  return (configured !== false &&
149
149
  configured.mode === "auto" &&
150
- errorUtils.errorContext(error).hasStatusCode(403, 404));
150
+ errorContext(error).hasStatusCode(403, 404));
151
151
  }
152
152
  async graphitiBackend() {
153
153
  if (this.closed)
@@ -180,7 +180,7 @@ export class MemoryPlugin extends ToolRegistryPlugin {
180
180
  actorId(resourceId) {
181
181
  if (resourceId)
182
182
  return resourceId;
183
- const context = dbxAppkit.tryGetExecutionContext();
183
+ const context = tryGetExecutionContext();
184
184
  if (!context)
185
185
  throw new Error("Memory tools require an AppKit execution context");
186
186
  return "userId" in context ? context.userId : context.serviceUserId;
@@ -193,4 +193,4 @@ export class MemoryPlugin extends ToolRegistryPlugin {
193
193
  }
194
194
  /** AppKit registration factory for {@link MemoryPlugin}. */
195
195
  export const memory = toPlugin(MemoryPlugin);
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBdUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixHQUlwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixjQUFjLEVBQ2Qsa0JBQWtCLEdBRW5CLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHlCQUF5QixHQU8xQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIseUJBQXlCLEdBRzFCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRW5FLGlGQUFpRjtBQUNqRixNQUFNLE9BQU8sWUFBYSxTQUFRLGtCQUFzQztJQUN0RSxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQW1CLENBQUM7SUFDbkMsTUFBTSxDQUFDLFFBQVEsR0FBNkI7UUFDMUMsSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUUsUUFBUTtRQUNyQixXQUFXLEVBQUUsZ0ZBQWdGO1FBQzdGLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUN6QyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUU7S0FDekMsQ0FBQztJQUVlLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLFFBQVEsQ0FBOEI7SUFDdEMsVUFBVSxDQUEyQjtJQUNyQyxRQUFRLENBQXlCO0lBQ2pDLGdCQUFnQixDQUFrQztJQUN6QyxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3RELE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFdkIsSUFBYyxZQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUSxLQUFLLENBQUMsS0FBSztRQUNsQixNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLHVCQUF1QixDQUMzQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFDNUIsUUFBUSxDQUFDLFVBQVUsQ0FDcEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLHFCQUFxQixHQUN6QixRQUFRLENBQUMsU0FBUyxLQUFLLEtBQUs7WUFDNUIsUUFBUSxDQUFDLFFBQVEsS0FBSyxLQUFLO1lBQzNCLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3hDLElBQUkscUJBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDckMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0QsTUFBTSxHQUFHLE1BQU0scUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3hCLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxLQUFLLEtBQUs7WUFDekMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDdEQsZUFBZSxFQUFFLE1BQU07U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBd0I7UUFDcEMsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDNUQsR0FBRyxPQUFPO1lBQ1YsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRTtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVEsZ0JBQWdCLENBQ3ZCLElBQVksRUFDWixJQUFhLEVBQ2IsTUFBb0IsRUFDcEIsT0FBbUM7UUFFbkMsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFUSxxQkFBcUI7UUFDNUIsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7UUFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixNQUFNLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsTUFBTSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxVQUFtQjtRQUNsQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQztnQkFDbkIsV0FBVyxFQUNULDBGQUEwRjtnQkFDNUYsTUFBTSxFQUFFLHlCQUF5QjtnQkFDakMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7Z0JBQzNELGVBQWUsRUFBRSxLQUFLO2dCQUN0QixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQzthQUNuRixDQUFDO1lBQ0YsYUFBYSxFQUFFLFVBQVUsQ0FBQztnQkFDeEIsV0FBVyxFQUNULDRGQUE0RjtnQkFDOUYsTUFBTSxFQUFFLHVCQUF1QjtnQkFDL0IsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7Z0JBQzFELGVBQWUsRUFBRSxLQUFLO2dCQUN0QixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQzthQUNqRixDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUSxDQUNwQixPQUFlLEVBQ2YsS0FBMEIsRUFDMUIsTUFBb0I7UUFFcEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQztvQkFBRSxNQUFNLEtBQUssQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTSxDQUNsQixPQUFlLEVBQ2YsS0FBd0IsRUFDeEIsTUFBb0I7UUFFcEIsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUM7b0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFnQixFQUFFLE1BQW9CO1FBQzNELElBQUksTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFBRSxPQUFPO1FBQy9ELE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLEtBQUssQ0FBQyxpQkFBaUIsQ0FDN0IsT0FBZSxFQUNmLE1BQW9CO1FBRXBCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUMvQixJQUFJLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUNuRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMseUVBQXlFLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEtBQWM7UUFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUNuRCxPQUFPLENBQ0wsVUFBVSxLQUFLLEtBQUs7WUFDcEIsVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNO1lBQzFCLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FDdkQsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZTtRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFDLHdCQUF3QixDQUFDO2FBQ3ZELElBQUksQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLENBQ2pDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQ2hFO2FBQ0EsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDO2FBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRU8sT0FBTyxDQUFDLFVBQW1CO1FBQ2pDLElBQUksVUFBVTtZQUFFLE9BQU8sVUFBVSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUN0RSxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O0FBR0gsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBtZW1vcnkgcGx1Z2luIHdpdGggRGF0YWJyaWNrcy1maXJzdCB0b29scyBhbmQgbGF6eSBHcmFwaGl0aSBmYWxsYmFjay5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCwgdG9QbHVnaW4sIHR5cGUgUGx1Z2luTWFuaWZlc3QgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBkZWZpbmVUb29sLFxuICBleGVjdXRlRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIFRvb2xraXRFbnRyeSxcbiAgdHlwZSBUb29sa2l0T3B0aW9ucyxcbiAgdHlwZSBUb29sUmVnaXN0cnksXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXQvYmV0YVwiO1xuaW1wb3J0IHtcbiAgYXBwa2l0IGFzIGRieEFwcGtpdCxcbiAgdG9vbGtpdEVudHJpZXMsXG4gIFRvb2xSZWdpc3RyeVBsdWdpbixcbiAgdHlwZSBBZ2VudFRvb2xFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB7XG4gIFJlY2FsbE1lbW9yeUlucHV0U2NoZW1hLFxuICBSZW1lbWJlck1lbW9yeUlucHV0U2NoZW1hLFxuICB0eXBlIEdyYXBoaXRpTWVtb3J5QmFja2VuZCxcbiAgdHlwZSBNZW1vcnlUdXJuLFxuICB0eXBlIFJlY2FsbE1lbW9yeUlucHV0LFxuICB0eXBlIFJlY2FsbE1lbW9yeVJlc3VsdCxcbiAgdHlwZSBSZW1lbWJlck1lbW9yeUlucHV0LFxuICB0eXBlIFJlbWVtYmVyTWVtb3J5UmVzdWx0LFxufSBmcm9tIFwiLi9fY29udHJhY3RzLnRzXCI7XG5pbXBvcnQge1xuICBNRU1PUllfQ09ORklHX1NDSEVNQSxcbiAgcmVzb2x2ZU1lbW9yeVBsdWdpbkNvbmZpZyxcbiAgdHlwZSBNZW1vcnlQbHVnaW5Db25maWcsXG4gIHR5cGUgUmVzb2x2ZWRNZW1vcnlQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgRGF0YWJyaWNrc01lbW9yeVJ1bnRpbWUgfSBmcm9tIFwiLi9kYXRhYnJpY2tzL19ydW50aW1lLnRzXCI7XG5cbi8qKiBBcHBLaXQgbWVtb3J5IHBsdWdpbiB3aXRoIERhdGFicmlja3MgbWFuYWdlZCBtZW1vcnkgYW5kIEdyYXBoaXRpIGZhbGxiYWNrLiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeVBsdWdpbiBleHRlbmRzIFRvb2xSZWdpc3RyeVBsdWdpbjxNZW1vcnlQbHVnaW5Db25maWc+IHtcbiAgc3RhdGljIHBoYXNlID0gXCJkZWZlcnJlZFwiIGFzIGNvbnN0O1xuICBzdGF0aWMgbWFuaWZlc3Q6IFBsdWdpbk1hbmlmZXN0PFwibWVtb3J5XCI+ID0ge1xuICAgIG5hbWU6IFwibWVtb3J5XCIsXG4gICAgZGlzcGxheU5hbWU6IFwiTWVtb3J5XCIsXG4gICAgZGVzY3JpcHRpb246IFwiUHVibGlzaGVzIERhdGFicmlja3MtZmlyc3QgZHVyYWJsZSBtZW1vcnkgdG9vbHMgd2l0aCBhIGxhenkgR3JhcGhpdGkgZmFsbGJhY2suXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHsgcmVxdWlyZWQ6IFtdLCBvcHRpb25hbDogW10gfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBNRU1PUllfQ09ORklHX1NDSEVNQSB9LFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gbG9nLmxvZ2dlcih0aGlzKTtcbiAgcHJpdmF0ZSByZXNvbHZlZD86IFJlc29sdmVkTWVtb3J5UGx1Z2luQ29uZmlnO1xuICBwcml2YXRlIGRhdGFicmlja3M/OiBEYXRhYnJpY2tzTWVtb3J5UnVudGltZTtcbiAgcHJpdmF0ZSBncmFwaGl0aT86IEdyYXBoaXRpTWVtb3J5QmFja2VuZDtcbiAgcHJpdmF0ZSBncmFwaGl0aVN0YXJ0aW5nPzogUHJvbWlzZTxHcmFwaGl0aU1lbW9yeUJhY2tlbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IGdyYXBoaXRpU3RhcnR1cEFib3J0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXQgdG9vbFJlZ2lzdHJ5KCk6IFRvb2xSZWdpc3RyeSB7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cnkoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZU1lbW9yeVBsdWdpbkNvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgaWYgKHJlc29sdmVkLnNhdmVUdXJucyA9PT0gdHJ1ZSAmJiByZXNvbHZlZC5ncmFwaGl0aSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFwcEtpdCBtZW1vcnkgc2F2ZVR1cm5zIHJlcXVpcmVzIHRoZSBHcmFwaGl0aSBmYWxsYmFja1wiKTtcbiAgICB9XG4gICAgdGhpcy5yZXNvbHZlZCA9IHJlc29sdmVkO1xuICAgIGlmIChyZXNvbHZlZC5kYXRhYnJpY2tzKSB7XG4gICAgICB0aGlzLmRhdGFicmlja3MgPSBuZXcgRGF0YWJyaWNrc01lbW9yeVJ1bnRpbWUoXG4gICAgICAgIGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQsXG4gICAgICAgIHJlc29sdmVkLmRhdGFicmlja3MsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBtYXN0cmEgPSBmYWxzZTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IHNob3VsZEF0dGFjaFR1cm5TYXZlciA9XG4gICAgICByZXNvbHZlZC5zYXZlVHVybnMgIT09IGZhbHNlICYmXG4gICAgICByZXNvbHZlZC5ncmFwaGl0aSAhPT0gZmFsc2UgJiZcbiAgICAgIGNvbnRleHQ/Lmhhc1BsdWdpbihcIm1hc3RyYVwiKSA9PT0gdHJ1ZTtcbiAgICBpZiAoc2hvdWxkQXR0YWNoVHVyblNhdmVyICYmIGNvbnRleHQpIHtcbiAgICAgIGNvbnN0IHsgYXR0YWNoTWFzdHJhVHVyblNhdmVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuL19tYXN0cmEudHNcIik7XG4gICAgICBtYXN0cmEgPSBhd2FpdCBhdHRhY2hNYXN0cmFUdXJuU2F2ZXIoY29udGV4dCwgKHR1cm4sIHNpZ25hbCkgPT4gdGhpcy5zYXZlVHVybih0dXJuLCBzaWduYWwpKTtcbiAgICB9XG4gICAgaWYgKHJlc29sdmVkLnNhdmVUdXJucyA9PT0gdHJ1ZSAmJiAhbWFzdHJhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IHNhdmVUdXJucyByZXF1aXJlcyBhIHJlZ2lzdGVyZWQgTWFzdHJhIHBsdWdpblwiKTtcbiAgICB9XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGRhdGFicmlja3M6IHJlc29sdmVkLmRhdGFicmlja3MgIT09IGZhbHNlLFxuICAgICAgZ3JhcGhpdGk6IHJlc29sdmVkLmdyYXBoaXRpICE9PSBmYWxzZSA/IFwibGF6eVwiIDogZmFsc2UsXG4gICAgICBtYXN0cmFUdXJuU2F2ZXI6IG1hc3RyYSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHRvb2xraXQob3B0aW9ucz86IFRvb2xraXRPcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBUb29sa2l0RW50cnk+PiB7XG4gICAgcmV0dXJuIHRvb2xraXRFbnRyaWVzLmVudHJpZXMoXCJtZW1vcnlcIiwgdGhpcy5nZXRBZ2VudFRvb2xzKCksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwcmVmaXg6IG9wdGlvbnM/LnByZWZpeCA/PyBcIlwiLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhlY3V0ZUFnZW50VG9vbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXJnczogdW5rbm93bixcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgICBjb250ZXh0PzogQWdlbnRUb29sRXhlY3V0aW9uQ29udGV4dCxcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy5yZWdpc3RyeShjb250ZXh0Py5yZXNvdXJjZUlkKSwgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgICB0aGlzLmdyYXBoaXRpU3RhcnR1cEFib3J0LmFib3J0KG5ldyBFcnJvcihcIkFwcEtpdCBtZW1vcnkgaXMgc2h1dHRpbmcgZG93blwiKSk7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGl0aVN0YXJ0dXBBYm9ydC5hYm9ydChuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IGlzIHNodXR0aW5nIGRvd25cIikpO1xuICAgIGNvbnN0IHN0YXJ0aW5nID0gdGhpcy5ncmFwaGl0aVN0YXJ0aW5nO1xuICAgIGNvbnN0IGJhY2tlbmQgPSB0aGlzLmdyYXBoaXRpO1xuICAgIHRoaXMuZ3JhcGhpdGlTdGFydGluZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmdyYXBoaXRpID0gdW5kZWZpbmVkO1xuICAgIGF3YWl0IHN0YXJ0aW5nPy5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGF3YWl0IGJhY2tlbmQ/LnNodXRkb3duKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdHJ5KHJlc291cmNlSWQ/OiBzdHJpbmcpOiBUb29sUmVnaXN0cnkge1xuICAgIHJldHVybiB7XG4gICAgICByZW1lbWJlcjogZGVmaW5lVG9vbCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiU2F2ZSBhIGR1cmFibGUgdXNlciBwcmVmZXJlbmNlLCBmYWN0LCBkZWNpc2lvbiwgb3IgaW5zdHJ1Y3Rpb24gZm9yIGZ1dHVyZSBjb252ZXJzYXRpb25zLlwiLFxuICAgICAgICBzY2hlbWE6IFJlbWVtYmVyTWVtb3J5SW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IChpbnB1dCwgc2lnbmFsKSA9PiB0aGlzLnJlbWVtYmVyKHRoaXMuYWN0b3JJZChyZXNvdXJjZUlkKSwgaW5wdXQsIHNpZ25hbCksXG4gICAgICB9KSxcbiAgICAgIHJlY2FsbF9tZW1vcnk6IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIlNlYXJjaCBkdXJhYmxlIGFjdG9yLXNjb3BlZCBtZW1vcnkgZm9yIGZhY3RzIGFuZCBwcmVmZXJlbmNlcyByZWxldmFudCB0byB0aGUgY3VycmVudCB0YXNrLlwiLFxuICAgICAgICBzY2hlbWE6IFJlY2FsbE1lbW9yeUlucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IChpbnB1dCwgc2lnbmFsKSA9PiB0aGlzLnJlY2FsbCh0aGlzLmFjdG9ySWQocmVzb3VyY2VJZCksIGlucHV0LCBzaWduYWwpLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtZW1iZXIoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIGlucHV0OiBSZW1lbWJlck1lbW9yeUlucHV0LFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFJlbWVtYmVyTWVtb3J5UmVzdWx0PiB7XG4gICAgY29uc3QgZGF0YWJyaWNrcyA9IGF3YWl0IHRoaXMuZGF0YWJyaWNrc0JhY2tlbmQoYWN0b3JJZCwgc2lnbmFsKTtcbiAgICBpZiAoZGF0YWJyaWNrcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFicmlja3MucmVtZW1iZXIoYWN0b3JJZCwgaW5wdXQsIHNpZ25hbCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkRmFsbGJhY2tGcm9tRGF0YWJyaWNrcyhlcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ3JhcGhpdGlCYWNrZW5kKCkpLnJlbWVtYmVyKGFjdG9ySWQsIGlucHV0LCBzaWduYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWNhbGwoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIGlucHV0OiBSZWNhbGxNZW1vcnlJbnB1dCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxSZWNhbGxNZW1vcnlSZXN1bHQ+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBSZWNhbGxNZW1vcnlJbnB1dFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgY29uc3QgZGF0YWJyaWNrcyA9IGF3YWl0IHRoaXMuZGF0YWJyaWNrc0JhY2tlbmQoYWN0b3JJZCwgc2lnbmFsKTtcbiAgICBpZiAoZGF0YWJyaWNrcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFicmlja3MucmVjYWxsKGFjdG9ySWQsIHBhcnNlZCwgc2lnbmFsKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRGYWxsYmFja0Zyb21EYXRhYnJpY2tzKGVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ncmFwaGl0aUJhY2tlbmQoKSkucmVjYWxsKGFjdG9ySWQsIHBhcnNlZCwgc2lnbmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZVR1cm4odHVybjogTWVtb3J5VHVybiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5kYXRhYnJpY2tzQmFja2VuZCh0dXJuLmFjdG9ySWQsIHNpZ25hbCkpIHJldHVybjtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5ncmFwaGl0aUJhY2tlbmQoKSkuc2F2ZVR1cm4odHVybiwgc2lnbmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGF0YWJyaWNrc0JhY2tlbmQoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPERhdGFicmlja3NNZW1vcnlSdW50aW1lIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYmFja2VuZCA9IHRoaXMuZGF0YWJyaWNrcztcbiAgICBpZiAoIWJhY2tlbmQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKGF3YWl0IGJhY2tlbmQuYXZhaWxhYmxlKGFjdG9ySWQsIHNpZ25hbCkpIHJldHVybiBiYWNrZW5kO1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSB0aGlzLnJlcXVpcmVDb25maWcoKS5kYXRhYnJpY2tzO1xuICAgIGlmIChjb25maWd1cmVkICYmIGNvbmZpZ3VyZWQubW9kZSA9PT0gXCJyZXF1aXJlZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1aXJlZCBEYXRhYnJpY2tzIG1hbmFnZWQgbWVtb3J5IGlzIHVuYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCBhY3RvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkRmFsbGJhY2tGcm9tRGF0YWJyaWNrcyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSB0aGlzLnJlcXVpcmVDb25maWcoKS5kYXRhYnJpY2tzO1xuICAgIHJldHVybiAoXG4gICAgICBjb25maWd1cmVkICE9PSBmYWxzZSAmJlxuICAgICAgY29uZmlndXJlZC5tb2RlID09PSBcImF1dG9cIiAmJlxuICAgICAgZXJyb3JVdGlscy5lcnJvckNvbnRleHQoZXJyb3IpLmhhc1N0YXR1c0NvZGUoNDAzLCA0MDQpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ3JhcGhpdGlCYWNrZW5kKCk6IFByb21pc2U8R3JhcGhpdGlNZW1vcnlCYWNrZW5kPiB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB0aHJvdyBuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IGlzIGNsb3NlZFwiKTtcbiAgICBpZiAodGhpcy5ncmFwaGl0aT8ucnVubmluZykgcmV0dXJuIHRoaXMuZ3JhcGhpdGk7XG4gICAgaWYgKHRoaXMuZ3JhcGhpdGkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ3JhcGhpdGkuc2h1dGRvd24oKTtcbiAgICAgIHRoaXMuZ3JhcGhpdGkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlcXVpcmVDb25maWcoKS5ncmFwaGl0aTtcbiAgICBpZiAoIW9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkdyYXBoaXRpIGZhbGxiYWNrIGlzIGRpc2FibGVkXCIpO1xuICAgIHRoaXMuZ3JhcGhpdGlTdGFydGluZyA/Pz0gaW1wb3J0KFwiLi9ncmFwaGl0aS9fYmFja2VuZC50c1wiKVxuICAgICAgLnRoZW4oKHsgc3RhcnRHcmFwaGl0aUJhY2tlbmQgfSkgPT5cbiAgICAgICAgc3RhcnRHcmFwaGl0aUJhY2tlbmQob3B0aW9ucywgdGhpcy5ncmFwaGl0aVN0YXJ0dXBBYm9ydC5zaWduYWwpLFxuICAgICAgKVxuICAgICAgLnRoZW4oKGJhY2tlbmQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2tlbmQuc2h1dGRvd24oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFwcEtpdCBtZW1vcnkgY2xvc2VkIGR1cmluZyBHcmFwaGl0aSBzdGFydHVwXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhcGhpdGkgPSBiYWNrZW5kO1xuICAgICAgICByZXR1cm4gYmFja2VuZDtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JhcGhpdGlTdGFydGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmdyYXBoaXRpU3RhcnRpbmc7XG4gIH1cblxuICBwcml2YXRlIGFjdG9ySWQocmVzb3VyY2VJZD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHJlc291cmNlSWQpIHJldHVybiByZXNvdXJjZUlkO1xuICAgIGNvbnN0IGNvbnRleHQgPSBkYnhBcHBraXQudHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKFwiTWVtb3J5IHRvb2xzIHJlcXVpcmUgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0XCIpO1xuICAgIHJldHVybiBcInVzZXJJZFwiIGluIGNvbnRleHQgPyBjb250ZXh0LnVzZXJJZCA6IGNvbnRleHQuc2VydmljZVVzZXJJZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZUNvbmZpZygpOiBSZXNvbHZlZE1lbW9yeVBsdWdpbkNvbmZpZyB7XG4gICAgaWYgKCF0aGlzLnJlc29sdmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IGlzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZDtcbiAgfVxufVxuXG4vKiogQXBwS2l0IHJlZ2lzdHJhdGlvbiBmYWN0b3J5IGZvciB7QGxpbmsgTWVtb3J5UGx1Z2lufS4gKi9cbmV4cG9ydCBjb25zdCBtZW1vcnkgPSB0b1BsdWdpbihNZW1vcnlQbHVnaW4pO1xuIl19
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBdUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixHQUlwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxrQkFBa0IsRUFFbEIsc0JBQXNCLEVBQ3RCLE9BQU8sR0FDUixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix5QkFBeUIsR0FPMUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHlCQUF5QixHQUcxQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLFlBQWEsU0FBUSxrQkFBc0M7SUFDdEUsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFtQixDQUFDO0lBQ25DLE1BQU0sQ0FBQyxRQUFRLEdBQTZCO1FBQzFDLElBQUksRUFBRSxRQUFRO1FBQ2QsV0FBVyxFQUFFLFFBQVE7UUFDckIsV0FBVyxFQUFFLGdGQUFnRjtRQUM3RixTQUFTLEVBQUUsTUFBTTtRQUNqQixTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7UUFDekMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFO0tBQ3pDLENBQUM7SUFFZSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLFFBQVEsQ0FBOEI7SUFDdEMsVUFBVSxDQUEyQjtJQUNy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QUM7Z0JBQ2xFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQzthQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVPLE9BQU8sQ0FBQyxVQUFtQjtRQUNqQyxJQUFJLFVBQVU7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUN0RSxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O0FBR0gsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBtZW1vcnkgcGx1Z2luIHdpdGggRGF0YWJyaWNrcy1maXJzdCB0b29scyBhbmQgbGF6eSBHcmFwaGl0aSBmYWxsYmFjay5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCwgdG9QbHVnaW4sIHR5cGUgUGx1Z2luTWFuaWZlc3QgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBkZWZpbmVUb29sLFxuICBleGVjdXRlRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIFRvb2xraXRFbnRyeSxcbiAgdHlwZSBUb29sa2l0T3B0aW9ucyxcbiAgdHlwZSBUb29sUmVnaXN0cnksXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXQvYmV0YVwiO1xuaW1wb3J0IHtcbiAgVG9vbFJlZ2lzdHJ5UGx1Z2luLFxuICB0eXBlIEFnZW50VG9vbEV4ZWN1dGlvbkNvbnRleHQsXG4gIHRyeUdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIGVudHJpZXMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZXJyb3JDb250ZXh0LCBsb2dnZXIgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5pbXBvcnQge1xuICBSZWNhbGxNZW1vcnlJbnB1dFNjaGVtYSxcbiAgUmVtZW1iZXJNZW1vcnlJbnB1dFNjaGVtYSxcbiAgdHlwZSBHcmFwaGl0aU1lbW9yeUJhY2tlbmQsXG4gIHR5cGUgTWVtb3J5VHVybixcbiAgdHlwZSBSZWNhbGxNZW1vcnlJbnB1dCxcbiAgdHlwZSBSZWNhbGxNZW1vcnlSZXN1bHQsXG4gIHR5cGUgUmVtZW1iZXJNZW1vcnlJbnB1dCxcbiAgdHlwZSBSZW1lbWJlck1lbW9yeVJlc3VsdCxcbn0gZnJvbSBcIi4vX2NvbnRyYWN0cy50c1wiO1xuaW1wb3J0IHtcbiAgTUVNT1JZX0NPTkZJR19TQ0hFTUEsXG4gIHJlc29sdmVNZW1vcnlQbHVnaW5Db25maWcsXG4gIHR5cGUgTWVtb3J5UGx1Z2luQ29uZmlnLFxuICB0eXBlIFJlc29sdmVkTWVtb3J5UGx1Z2luQ29uZmlnLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IERhdGFicmlja3NNZW1vcnlSdW50aW1lIH0gZnJvbSBcIi4vZGF0YWJyaWNrcy9fcnVudGltZS50c1wiO1xuXG4vKiogQXBwS2l0IG1lbW9yeSBwbHVnaW4gd2l0aCBEYXRhYnJpY2tzIG1hbmFnZWQgbWVtb3J5IGFuZCBHcmFwaGl0aSBmYWxsYmFjay4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlQbHVnaW4gZXh0ZW5kcyBUb29sUmVnaXN0cnlQbHVnaW48TWVtb3J5UGx1Z2luQ29uZmlnPiB7XG4gIHN0YXRpYyBwaGFzZSA9IFwiZGVmZXJyZWRcIiBhcyBjb25zdDtcbiAgc3RhdGljIG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdDxcIm1lbW9yeVwiPiA9IHtcbiAgICBuYW1lOiBcIm1lbW9yeVwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIk1lbW9yeVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlB1Ymxpc2hlcyBEYXRhYnJpY2tzLWZpcnN0IGR1cmFibGUgbWVtb3J5IHRvb2xzIHdpdGggYSBsYXp5IEdyYXBoaXRpIGZhbGxiYWNrLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7IHJlcXVpcmVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sXG4gICAgY29uZmlnOiB7IHNjaGVtYTogTUVNT1JZX0NPTkZJR19TQ0hFTUEgfSxcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGxvZ2dlcih0aGlzKTtcbiAgcHJpdmF0ZSByZXNvbHZlZD86IFJlc29sdmVkTWVtb3J5UGx1Z2luQ29uZmlnO1xuICBwcml2YXRlIGRhdGFicmlja3M/OiBEYXRhYnJpY2tzTWVtb3J5UnVudGltZTtcbiAgcHJpdmF0ZSBncmFwaGl0aT86IEdyYXBoaXRpTWVtb3J5QmFja2VuZDtcbiAgcHJpdmF0ZSBncmFwaGl0aVN0YXJ0aW5nPzogUHJvbWlzZTxHcmFwaGl0aU1lbW9yeUJhY2tlbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IGdyYXBoaXRpU3RhcnR1cEFib3J0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXQgdG9vbFJlZ2lzdHJ5KCk6IFRvb2xSZWdpc3RyeSB7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cnkoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZU1lbW9yeVBsdWdpbkNvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgaWYgKHJlc29sdmVkLnNhdmVUdXJucyA9PT0gdHJ1ZSAmJiByZXNvbHZlZC5ncmFwaGl0aSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFwcEtpdCBtZW1vcnkgc2F2ZVR1cm5zIHJlcXVpcmVzIHRoZSBHcmFwaGl0aSBmYWxsYmFja1wiKTtcbiAgICB9XG4gICAgdGhpcy5yZXNvbHZlZCA9IHJlc29sdmVkO1xuICAgIGlmIChyZXNvbHZlZC5kYXRhYnJpY2tzKSB7XG4gICAgICB0aGlzLmRhdGFicmlja3MgPSBuZXcgRGF0YWJyaWNrc01lbW9yeVJ1bnRpbWUoXG4gICAgICAgIGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQsXG4gICAgICAgIHJlc29sdmVkLmRhdGFicmlja3MsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBtYXN0cmEgPSBmYWxzZTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IHNob3VsZEF0dGFjaFR1cm5TYXZlciA9XG4gICAgICByZXNvbHZlZC5zYXZlVHVybnMgIT09IGZhbHNlICYmXG4gICAgICByZXNvbHZlZC5ncmFwaGl0aSAhPT0gZmFsc2UgJiZcbiAgICAgIGNvbnRleHQ/Lmhhc1BsdWdpbihcIm1hc3RyYVwiKSA9PT0gdHJ1ZTtcbiAgICBpZiAoc2hvdWxkQXR0YWNoVHVyblNhdmVyICYmIGNvbnRleHQpIHtcbiAgICAgIGNvbnN0IHsgYXR0YWNoTWFzdHJhVHVyblNhdmVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuL19tYXN0cmEudHNcIik7XG4gICAgICBtYXN0cmEgPSBhd2FpdCBhdHRhY2hNYXN0cmFUdXJuU2F2ZXIoY29udGV4dCwgKHR1cm4sIHNpZ25hbCkgPT4gdGhpcy5zYXZlVHVybih0dXJuLCBzaWduYWwpKTtcbiAgICB9XG4gICAgaWYgKHJlc29sdmVkLnNhdmVUdXJucyA9PT0gdHJ1ZSAmJiAhbWFzdHJhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IHNhdmVUdXJucyByZXF1aXJlcyBhIHJlZ2lzdGVyZWQgTWFzdHJhIHBsdWdpblwiKTtcbiAgICB9XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGRhdGFicmlja3M6IHJlc29sdmVkLmRhdGFicmlja3MgIT09IGZhbHNlLFxuICAgICAgZ3JhcGhpdGk6IHJlc29sdmVkLmdyYXBoaXRpICE9PSBmYWxzZSA/IFwibGF6eVwiIDogZmFsc2UsXG4gICAgICBtYXN0cmFUdXJuU2F2ZXI6IG1hc3RyYSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHRvb2xraXQob3B0aW9ucz86IFRvb2xraXRPcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBUb29sa2l0RW50cnk+PiB7XG4gICAgcmV0dXJuIGVudHJpZXMoXCJtZW1vcnlcIiwgdGhpcy5nZXRBZ2VudFRvb2xzKCksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwcmVmaXg6IG9wdGlvbnM/LnByZWZpeCA/PyBcIlwiLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhlY3V0ZUFnZW50VG9vbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXJnczogdW5rbm93bixcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgICBjb250ZXh0PzogQWdlbnRUb29sRXhlY3V0aW9uQ29udGV4dCxcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy5yZWdpc3RyeShjb250ZXh0Py5yZXNvdXJjZUlkKSwgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgICB0aGlzLmdyYXBoaXRpU3RhcnR1cEFib3J0LmFib3J0KG5ldyBFcnJvcihcIkFwcEtpdCBtZW1vcnkgaXMgc2h1dHRpbmcgZG93blwiKSk7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGl0aVN0YXJ0dXBBYm9ydC5hYm9ydChuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IGlzIHNodXR0aW5nIGRvd25cIikpO1xuICAgIGNvbnN0IHN0YXJ0aW5nID0gdGhpcy5ncmFwaGl0aVN0YXJ0aW5nO1xuICAgIGNvbnN0IGJhY2tlbmQgPSB0aGlzLmdyYXBoaXRpO1xuICAgIHRoaXMuZ3JhcGhpdGlTdGFydGluZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmdyYXBoaXRpID0gdW5kZWZpbmVkO1xuICAgIGF3YWl0IHN0YXJ0aW5nPy5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGF3YWl0IGJhY2tlbmQ/LnNodXRkb3duKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdHJ5KHJlc291cmNlSWQ/OiBzdHJpbmcpOiBUb29sUmVnaXN0cnkge1xuICAgIHJldHVybiB7XG4gICAgICByZW1lbWJlcjogZGVmaW5lVG9vbCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiU2F2ZSBhIGR1cmFibGUgdXNlciBwcmVmZXJlbmNlLCBmYWN0LCBkZWNpc2lvbiwgb3IgaW5zdHJ1Y3Rpb24gZm9yIGZ1dHVyZSBjb252ZXJzYXRpb25zLlwiLFxuICAgICAgICBzY2hlbWE6IFJlbWVtYmVyTWVtb3J5SW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IChpbnB1dCwgc2lnbmFsKSA9PiB0aGlzLnJlbWVtYmVyKHRoaXMuYWN0b3JJZChyZXNvdXJjZUlkKSwgaW5wdXQsIHNpZ25hbCksXG4gICAgICB9KSxcbiAgICAgIHJlY2FsbF9tZW1vcnk6IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIlNlYXJjaCBkdXJhYmxlIGFjdG9yLXNjb3BlZCBtZW1vcnkgZm9yIGZhY3RzIGFuZCBwcmVmZXJlbmNlcyByZWxldmFudCB0byB0aGUgY3VycmVudCB0YXNrLlwiLFxuICAgICAgICBzY2hlbWE6IFJlY2FsbE1lbW9yeUlucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IChpbnB1dCwgc2lnbmFsKSA9PiB0aGlzLnJlY2FsbCh0aGlzLmFjdG9ySWQocmVzb3VyY2VJZCksIGlucHV0LCBzaWduYWwpLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtZW1iZXIoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIGlucHV0OiBSZW1lbWJlck1lbW9yeUlucHV0LFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFJlbWVtYmVyTWVtb3J5UmVzdWx0PiB7XG4gICAgY29uc3QgZGF0YWJyaWNrcyA9IGF3YWl0IHRoaXMuZGF0YWJyaWNrc0JhY2tlbmQoYWN0b3JJZCwgc2lnbmFsKTtcbiAgICBpZiAoZGF0YWJyaWNrcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFicmlja3MucmVtZW1iZXIoYWN0b3JJZCwgaW5wdXQsIHNpZ25hbCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkRmFsbGJhY2tGcm9tRGF0YWJyaWNrcyhlcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ3JhcGhpdGlCYWNrZW5kKCkpLnJlbWVtYmVyKGFjdG9ySWQsIGlucHV0LCBzaWduYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWNhbGwoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIGlucHV0OiBSZWNhbGxNZW1vcnlJbnB1dCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxSZWNhbGxNZW1vcnlSZXN1bHQ+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBSZWNhbGxNZW1vcnlJbnB1dFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgY29uc3QgZGF0YWJyaWNrcyA9IGF3YWl0IHRoaXMuZGF0YWJyaWNrc0JhY2tlbmQoYWN0b3JJZCwgc2lnbmFsKTtcbiAgICBpZiAoZGF0YWJyaWNrcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFicmlja3MucmVjYWxsKGFjdG9ySWQsIHBhcnNlZCwgc2lnbmFsKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRGYWxsYmFja0Zyb21EYXRhYnJpY2tzKGVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ncmFwaGl0aUJhY2tlbmQoKSkucmVjYWxsKGFjdG9ySWQsIHBhcnNlZCwgc2lnbmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZVR1cm4odHVybjogTWVtb3J5VHVybiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5kYXRhYnJpY2tzQmFja2VuZCh0dXJuLmFjdG9ySWQsIHNpZ25hbCkpIHJldHVybjtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5ncmFwaGl0aUJhY2tlbmQoKSkuc2F2ZVR1cm4odHVybiwgc2lnbmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGF0YWJyaWNrc0JhY2tlbmQoXG4gICAgYWN0b3JJZDogc3RyaW5nLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPERhdGFicmlja3NNZW1vcnlSdW50aW1lIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYmFja2VuZCA9IHRoaXMuZGF0YWJyaWNrcztcbiAgICBpZiAoIWJhY2tlbmQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKGF3YWl0IGJhY2tlbmQuYXZhaWxhYmxlKGFjdG9ySWQsIHNpZ25hbCkpIHJldHVybiBiYWNrZW5kO1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSB0aGlzLnJlcXVpcmVDb25maWcoKS5kYXRhYnJpY2tzO1xuICAgIGlmIChjb25maWd1cmVkICYmIGNvbmZpZ3VyZWQubW9kZSA9PT0gXCJyZXF1aXJlZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1aXJlZCBEYXRhYnJpY2tzIG1hbmFnZWQgbWVtb3J5IGlzIHVuYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCBhY3RvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkRmFsbGJhY2tGcm9tRGF0YWJyaWNrcyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSB0aGlzLnJlcXVpcmVDb25maWcoKS5kYXRhYnJpY2tzO1xuICAgIHJldHVybiAoXG4gICAgICBjb25maWd1cmVkICE9PSBmYWxzZSAmJlxuICAgICAgY29uZmlndXJlZC5tb2RlID09PSBcImF1dG9cIiAmJlxuICAgICAgZXJyb3JDb250ZXh0KGVycm9yKS5oYXNTdGF0dXNDb2RlKDQwMywgNDA0KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdyYXBoaXRpQmFja2VuZCgpOiBQcm9taXNlPEdyYXBoaXRpTWVtb3J5QmFja2VuZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgdGhyb3cgbmV3IEVycm9yKFwiQXBwS2l0IG1lbW9yeSBpcyBjbG9zZWRcIik7XG4gICAgaWYgKHRoaXMuZ3JhcGhpdGk/LnJ1bm5pbmcpIHJldHVybiB0aGlzLmdyYXBoaXRpO1xuICAgIGlmICh0aGlzLmdyYXBoaXRpKSB7XG4gICAgICBhd2FpdCB0aGlzLmdyYXBoaXRpLnNodXRkb3duKCk7XG4gICAgICB0aGlzLmdyYXBoaXRpID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXF1aXJlQ29uZmlnKCkuZ3JhcGhpdGk7XG4gICAgaWYgKCFvcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSBmYWxsYmFjayBpcyBkaXNhYmxlZFwiKTtcbiAgICB0aGlzLmdyYXBoaXRpU3RhcnRpbmcgPz89IGltcG9ydChcIi4vZ3JhcGhpdGkvX2JhY2tlbmQudHNcIilcbiAgICAgIC50aGVuKCh7IHN0YXJ0R3JhcGhpdGlCYWNrZW5kIH0pID0+XG4gICAgICAgIHN0YXJ0R3JhcGhpdGlCYWNrZW5kKG9wdGlvbnMsIHRoaXMuZ3JhcGhpdGlTdGFydHVwQWJvcnQuc2lnbmFsKSxcbiAgICAgIClcbiAgICAgIC50aGVuKChiYWNrZW5kKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgIHJldHVybiBiYWNrZW5kLnNodXRkb3duKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IGNsb3NlZCBkdXJpbmcgR3JhcGhpdGkgc3RhcnR1cFwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyYXBoaXRpID0gYmFja2VuZDtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQ7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLmdyYXBoaXRpU3RhcnRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5ncmFwaGl0aVN0YXJ0aW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RvcklkKHJlc291cmNlSWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChyZXNvdXJjZUlkKSByZXR1cm4gcmVzb3VyY2VJZDtcbiAgICBjb25zdCBjb250ZXh0ID0gdHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKFwiTWVtb3J5IHRvb2xzIHJlcXVpcmUgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0XCIpO1xuICAgIHJldHVybiBcInVzZXJJZFwiIGluIGNvbnRleHQgPyBjb250ZXh0LnVzZXJJZCA6IGNvbnRleHQuc2VydmljZVVzZXJJZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZUNvbmZpZygpOiBSZXNvbHZlZE1lbW9yeVBsdWdpbkNvbmZpZyB7XG4gICAgaWYgKCF0aGlzLnJlc29sdmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJBcHBLaXQgbWVtb3J5IGlzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZDtcbiAgfVxufVxuXG4vKiogQXBwS2l0IHJlZ2lzdHJhdGlvbiBmYWN0b3J5IGZvciB7QGxpbmsgTWVtb3J5UGx1Z2lufS4gKi9cbmV4cG9ydCBjb25zdCBtZW1vcnkgPSB0b1BsdWdpbihNZW1vcnlQbHVnaW4pO1xuIl19
@@ -1 +1 @@
1
- {"root":["../src/_contracts.ts","../src/_mastra.ts","../src/config.ts","../src/plugin.ts","../src/databricks/_runtime.ts","../src/databricks/client.ts","../src/databricks/index.ts","../src/graphiti/_backend.ts","../src/graphiti/index.ts","../src/graphiti/options.ts","../src/graphiti/runtime.ts","../smoke/mastra-tool.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/_contracts.ts","../src/_mastra.ts","../src/config.ts","../src/plugin.ts","../src/databricks/_runtime.ts","../src/databricks/client.ts","../src/graphiti/_backend.ts","../src/graphiti/runtime.ts","../index.databricks.ts","../index.graphiti.ts","../smoke/mastra-tool.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -19,23 +19,23 @@
19
19
  "projen": "projen"
20
20
  },
21
21
  "devDependencies": {
22
- "@dbx-tools/appkit-mastra": "^0.9.153",
22
+ "@dbx-tools/appkit-mastra": "^0.9.157",
23
23
  "@types/json-schema": "^7",
24
24
  "@types/node": "^24.6.0",
25
25
  "typescript": "^5.9.3",
26
26
  "vitest": "3.2.4"
27
27
  },
28
28
  "peerDependencies": {
29
- "@dbx-tools/appkit-mastra": "^0.9.153"
29
+ "@dbx-tools/appkit-mastra": "^0.9.157"
30
30
  },
31
31
  "dependencies": {
32
32
  "@databricks/appkit": "0.81.0",
33
- "@dbx-tools/appkit": "^0.9.153",
34
- "@dbx-tools/auth": "^0.9.153",
35
- "@dbx-tools/cache": "^0.9.153",
36
- "@dbx-tools/core": "^0.9.153",
37
- "@dbx-tools/shared-core": "^0.9.153",
38
- "@dbx-tools/shared-graphiti": "^0.9.153",
33
+ "@dbx-tools/appkit": "^0.9.157",
34
+ "@dbx-tools/auth": "^0.9.157",
35
+ "@dbx-tools/cache": "^0.9.157",
36
+ "@dbx-tools/core": "^0.9.157",
37
+ "@dbx-tools/shared-core": "^0.9.157",
38
+ "@dbx-tools/shared-graphiti": "^0.9.157",
39
39
  "semver": "^7.7.3",
40
40
  "zod": "4.3.6"
41
41
  },
@@ -50,22 +50,18 @@
50
50
  "types": "./lib/index.d.ts",
51
51
  "default": "./lib/index.js"
52
52
  },
53
- "./config": {
54
- "types": "./lib/src/config.d.ts",
55
- "default": "./lib/src/config.js"
53
+ "./databricks": {
54
+ "types": "./lib/index.databricks.d.ts",
55
+ "default": "./lib/index.databricks.js"
56
56
  },
57
- "./plugin": {
58
- "types": "./lib/src/plugin.d.ts",
59
- "default": "./lib/src/plugin.js"
60
- },
61
- "./*": {
62
- "types": "./lib/src/*/index.d.ts",
63
- "default": "./lib/src/*/index.js"
57
+ "./graphiti": {
58
+ "types": "./lib/index.graphiti.d.ts",
59
+ "default": "./lib/index.graphiti.js"
64
60
  },
65
61
  "./package.json": "./package.json"
66
62
  }
67
63
  },
68
- "version": "0.9.153",
64
+ "version": "0.9.157",
69
65
  "types": "./lib/index.d.ts",
70
66
  "dbxToolsConfig": {
71
67
  "tags": [
@@ -78,22 +74,18 @@
78
74
  "types": "./lib/index.d.ts",
79
75
  "default": "./lib/index.js"
80
76
  },
81
- "./config": {
82
- "types": "./lib/src/config.d.ts",
83
- "default": "./lib/src/config.js"
84
- },
85
- "./plugin": {
86
- "types": "./lib/src/plugin.d.ts",
87
- "default": "./lib/src/plugin.js"
77
+ "./databricks": {
78
+ "types": "./lib/index.databricks.d.ts",
79
+ "default": "./lib/index.databricks.js"
88
80
  },
89
- "./*": {
90
- "types": "./lib/src/*/index.d.ts",
91
- "default": "./lib/src/*/index.js"
81
+ "./graphiti": {
82
+ "types": "./lib/index.graphiti.d.ts",
83
+ "default": "./lib/index.graphiti.js"
92
84
  },
93
85
  "./package.json": "./package.json"
94
86
  },
95
87
  "files": [
96
- "index.ts",
88
+ "index*.ts",
97
89
  "src",
98
90
  "lib"
99
91
  ],