@dbx-tools/appkit-mastra 0.9.119 → 0.9.121

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.
@@ -51,7 +51,7 @@ const montyContext = functionUtils.memoize(async () => {
51
51
  catch (error) {
52
52
  errors.push(errorUtils.toError(error));
53
53
  logger.debug(`${target.name} unavailable`, {
54
- error: errorUtils.errorMessage(error),
54
+ error: errorUtils.toError(error),
55
55
  });
56
56
  }
57
57
  }
@@ -354,4 +354,4 @@ if (import.meta.main) {
354
354
  console.log(await sandbox.executeCommand("print('Hello, world!')"));
355
355
  await sandbox.stop();
356
356
  }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udHktc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb250eS1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUNMLGFBQWEsR0FLZCxNQUFNLHdCQUF3QixDQUFDO0FBR2hDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDO0FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsVUFBVSxDQUFDO0FBQzVDLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztDQUNsQyxDQUFDO0FBQ1gsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixJQUFJLEVBQUUsWUFBWTtJQUNsQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO0NBQ2xDLENBQUM7QUFDWCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBUzFDLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsY0FBc0Isb0JBQW9CLEVBQUU7SUFDNUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBMkIsRUFBRTtJQUMzRSxNQUFNLE1BQU0sR0FB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Q0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUErQjtJQUNsRCxPQUFPLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSSxZQUFZLENBQUMseUJBQXlCLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixPQUFlLEVBQ2YsSUFBYyxFQUNkLE9BQWUsRUFDZixNQUFjO0lBRWQsT0FBTztRQUNMLE9BQU87UUFDUCxJQUFJO1FBQ0osT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsQ0FBQztRQUNYLE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTTtRQUNOLGVBQWUsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTztLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQeWRhbnRpYyBNb250eSBmYWxsYmFjayBmb3IgTWFzdHJhIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqIFByZWZlcnMgTW9udHkncyBuYXRpdmUgTm9kZSBzdWJwcm9jZXNzIHdvcmtlcnMgYW5kIGZhbGxzIGJhY2sgdG8gaXRzIFdBU01cbiAqIHdvcmtlcnMgd2hlbiB0aGUgbmF0aXZlIHBhY2thZ2UgaXMgdW5hdmFpbGFibGUuIEl0IGV4ZWN1dGVzIFB5dGhvbiBzb3VyY2VcbiAqIHdpdGggbm8gaG9zdCBmaWxlc3lzdGVtLCBuZXR3b3JrLCBlbnZpcm9ubWVudCwgc2hlbGwsIG9yIHRoaXJkLXBhcnR5IHBhY2thZ2VcbiAqIGFjY2Vzcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYXZhaWxhYmxlUGFyYWxsZWxpc20gfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBmdW5jdGlvblV0aWxzLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTWFzdHJhU2FuZGJveCxcbiAgdHlwZSBDb21tYW5kUmVzdWx0LFxuICB0eXBlIEV4ZWN1dGVDb21tYW5kT3B0aW9ucyxcbiAgdHlwZSBQcm92aWRlclN0YXR1cyxcbiAgdHlwZSBTYW5kYm94SW5mbyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tvdXRPcHRpb25zLCBNb250eSwgTW9udHlDcmFzaGVkRXJyb3IsIE1vbnR5U2Vzc2lvbiB9IGZyb20gXCJAcHlkYW50aWMvbW9udHlcIjtcblxuY29uc3QgREVGQVVMVF9DT01NQU5EX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5jb25zdCBERUZBVUxUX01BWF9NRU1PUllfQllURVMgPSAxMF8wMDBfMDAwO1xuY29uc3QgTkFUSVZFX01PTlRZX1RBUkdFVCA9IHtcbiAgbmFtZTogXCJuYXRpdmUgTW9udHlcIixcbiAgbG9hZDogKCkgPT4gaW1wb3J0KFwiQHB5ZGFudGljL21vbnR5L25vZGVcIiksXG59IGFzIGNvbnN0O1xuY29uc3QgV0FTTV9NT05UWV9UQVJHRVQgPSB7XG4gIG5hbWU6IFwiV0FTTSBNb250eVwiLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoXCJAcHlkYW50aWMvbW9udHkvd2FzbVwiKSxcbn0gYXMgY29uc3Q7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21vbnR5XCIpO1xuXG50eXBlIE1vbnR5UG9vbCA9IFBpY2s8TW9udHksIFwiY2hlY2tvdXRcIj47XG5cbmludGVyZmFjZSBNb250eUNvbnRleHQge1xuICBjcmFzaGVkRXJyb3I6IHR5cGVvZiBNb250eUNyYXNoZWRFcnJvcjtcbiAgcG9vbDogTW9udHlQb29sO1xufVxuXG4vKiogQGludGVybmFsIFNpemUgdGhlIHNoYXJlZCB3b3JrZXIgcG9vbCBmcm9tIHRoZSBob3N0J3MgYXZhaWxhYmxlIHByb2Nlc3NvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9udHlNYXhQcm9jZXNzZXMocGFyYWxsZWxpc206IG51bWJlciA9IGF2YWlsYWJsZVBhcmFsbGVsaXNtKCkpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoNCwgTWF0aC5mbG9vcihwYXJhbGxlbGlzbSkgKiAyKTtcbn1cblxuY29uc3QgbW9udHlDb250ZXh0ID0gZnVuY3Rpb25VdGlscy5tZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPE1vbnR5Q29udGV4dD4gPT4ge1xuICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNvbmZpZ1V0aWxzLmJvb2xlYW4odW5kZWZpbmVkLCBcIk1PTlRZX0ZPUkNFX1dBU01cIilcbiAgICA/IFtXQVNNX01PTlRZX1RBUkdFVF1cbiAgICA6IFtOQVRJVkVfTU9OVFlfVEFSR0VULCBXQVNNX01PTlRZX1RBUkdFVF07XG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgdGFyZ2V0LmxvYWQoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJHt0YXJnZXQubmFtZX0gbW9kdWxlIGF2YWlsYWJsZWApO1xuICAgICAgY29uc3QgbWF4UHJvY2Vzc2VzID0gbW9udHlNYXhQcm9jZXNzZXMoKTtcbiAgICAgIGNvbnN0IHBvb2wgPSBhd2FpdCBtb2R1bGUuTW9udHkuY3JlYXRlKHtcbiAgICAgICAgbWluUHJvY2Vzc2VzOiAxLFxuICAgICAgICBtYXhQcm9jZXNzZXMsXG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiAzNSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke3RhcmdldC5uYW1lfSBwb29sIGNyZWF0ZWRgLCB7IG1heFByb2Nlc3NlcyB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyYXNoZWRFcnJvcjogbW9kdWxlLk1vbnR5Q3Jhc2hlZEVycm9yLFxuICAgICAgICBwb29sLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSk7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7dGFyZ2V0Lm5hbWV9IHVuYXZhaWxhYmxlYCwge1xuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFwiRmFpbGVkIHRvIGNyZWF0ZSBNb250eSBwb29sXCIpO1xufSk7XG5cbi8qKiBSZXNvdXJjZSBjb250cm9scyBmb3IgdGhlIE1vbnR5IFB5dGhvbiBmYWxsYmFjay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9udHlTYW5kYm94T3B0aW9ucyB7XG4gIC8qKiBNYXN0cmEgcHJvdmlkZXIgaWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCBleGVjdXRpb24gdGltZW91dC4gUGVyLWNhbGwgYG9wdGlvbnMudGltZW91dGAgd2lucy4gKi9cbiAgY29tbWFuZFRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gTW9udHkgaGVhcCBieXRlcyBmb3Igb25lIGNoZWNrb3V0LiAqL1xuICBtYXhNZW1vcnlCeXRlcz86IG51bWJlcjtcbiAgLyoqIFR5cGUtY2hlY2sgZWFjaCBQeXRob24gc25pcHBldCBiZWZvcmUgcnVubmluZyBpdC4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIHR5cGVDaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKiBQeXRob24tb25seSwgZGVueS1ieS1kZWZhdWx0IHNhbmRib3ggYmFja2VkIGJ5IE1vbnR5J3Mgc2VsZWN0ZWQgd29ya2VyIHBvb2wuICovXG5leHBvcnQgY2xhc3MgTW9udHlTYW5kYm94IGV4dGVuZHMgTWFzdHJhU2FuZGJveCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvdmlkZXIgPSBcIm1vbnR5XCI7XG4gIHN0YXR1czogUHJvdmlkZXJTdGF0dXMgPSBcInBlbmRpbmdcIjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1hbmRUaW1lb3V0TXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhNZW1vcnlCeXRlczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGVDaGVjazogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIGxhc3RVc2VkQXQ/OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1vbnR5U2FuZGJveE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zLm5hbWUgPz8gXCJQeWRhbnRpYyBNb250eVwiO1xuICAgIHN1cGVyKHsgbmFtZSB9KTtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBcIm1vbnR5XCI7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmNvbW1hbmRUaW1lb3V0TXMgPSBvcHRpb25zLmNvbW1hbmRUaW1lb3V0TXMgPz8gREVGQVVMVF9DT01NQU5EX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5tYXhNZW1vcnlCeXRlcyA9IG9wdGlvbnMubWF4TWVtb3J5Qnl0ZXMgPz8gREVGQVVMVF9NQVhfTUVNT1JZX0JZVEVTO1xuICAgIHRoaXMudHlwZUNoZWNrID0gb3B0aW9ucy50eXBlQ2hlY2sgPz8gZmFsc2U7XG4gIH1cblxuICAvKiogV2FybSB0aGUgc2hhcmVkIGNyYXNoLWlzb2xhdGVkIHdvcmtlciBwb29sLiAqL1xuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBtb250eUNvbnRleHQoKTtcbiAgfVxuXG4gIC8qKiBUaGUgcHJvY2Vzcy13aWRlIHBvb2wgc3RheXMgd2FybTsgdGhpcyBpbnN0YW5jZSBjYXJyaWVzIG5vIG9wZW4gc2Vzc2lvbi4gKi9cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgLyoqIFRoZSBwcm9jZXNzLXdpZGUgcG9vbCBzdGF5cyB3YXJtOyBlYWNoIGNvbW1hbmQgY2xvc2VzIGl0cyBvd24gY2hlY2tvdXQuICovXG4gIGFzeW5jIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIC8qKiBFeGVjdXRlIFB5dGhvbiBzb3VyY2UgYW5kIG1hcCBNb250eSBvdXRwdXQgdG8gTWFzdHJhJ3MgY29tbWFuZCByZXN1bHQuICovXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIG9wdGlvbnM6IEV4ZWN1dGVDb21tYW5kT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgY29uc3QgY29kZSA9IG1vbnR5Q29kZShjb21tYW5kLCBhcmdzKTtcbiAgICBpZiAoY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFpbGVkUmVzdWx0KFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGFydGVkLFxuICAgICAgICBcIk1vbnR5IGZhbGxiYWNrIGFjY2VwdHMgUHl0aG9uIHNvdXJjZSBkaXJlY3RseSwgb3IgcHl0aG9uL3B5dGhvbjMgd2l0aCBhIHNpbmdsZSAtYyBzY3JpcHQuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuZW52ID8/IHt9KS5maWx0ZXIoXG4gICAgICAoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICk7XG4gICAgaWYgKGVudmlyb25tZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmYWlsZWRSZXN1bHQoXG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN0YXJ0ZWQsXG4gICAgICAgIFwiTW9udHkgZmFsbGJhY2sgZG9lcyBub3QgZXhwb3NlIGhvc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY3dkKSB7XG4gICAgICByZXR1cm4gZmFpbGVkUmVzdWx0KFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGFydGVkLFxuICAgICAgICBcIk1vbnR5IGZhbGxiYWNrIGRvZXMgbm90IGV4cG9zZSBhIGhvc3Qgd29ya2luZyBkaXJlY3RvcnkuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hYm9ydFNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgb3B0aW9ucy5hYm9ydFNpZ25hbC5yZWFzb247XG5cbiAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG4gICAgY29uc3QgdGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyB0aGlzLmNvbW1hbmRUaW1lb3V0TXM7XG4gICAgY29uc3QgcG9vbCA9IChhd2FpdCBtb250eUNvbnRleHQoKSkucG9vbDtcbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgY2hlY2tvdXRTZXNzaW9uKFxuICAgICAgcG9vbCxcbiAgICAgIHtcbiAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgbWF4RmVlZER1cmF0aW9uU2VjczogTWF0aC5tYXgoMC4wMDEsIHRpbWVvdXQgLyAxXzAwMCksXG4gICAgICAgICAgbWF4TWVtb3J5OiB0aGlzLm1heE1lbW9yeUJ5dGVzLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlQ2hlY2s6IHRoaXMudHlwZUNoZWNrLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgKTtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgUmV0YWluZWRPdXRwdXQob3B0aW9ucyk7XG4gICAgY29uc3Qgd29ya2VyUGlkID0gc2Vzc2lvbi53b3JrZXJQaWQ7XG4gICAgbGV0IGFib3J0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvbkFib3J0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB0ZXJtaW5hdGVXb3JrZXIod29ya2VyUGlkKTtcbiAgICB9O1xuICAgIG9wdGlvbnMuYWJvcnRTaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIG9uQWJvcnQoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGFib3J0ZWQpIHRocm93IGFib3J0UmVhc29uKG9wdGlvbnMuYWJvcnRTaWduYWwpO1xuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBzZXNzaW9uLmZlZWRSdW4oc3RyaXBQeXRob25GZW5jZShjb2RlKSwge1xuICAgICAgICBwcmludENhbGxiYWNrOiAoc3RyZWFtLCB0ZXh0KSA9PiBvdXRwdXQuZW1pdChzdHJlYW0sIHRleHQpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXR1cm5lZCA9IGZvcm1hdFJlc3VsdCh2YWx1ZSk7XG4gICAgICBpZiAocmV0dXJuZWQpIHtcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gcmV0dXJuZWQuZW5kc1dpdGgoXCJcXG5cIikgPyByZXR1cm5lZCA6IGAke3JldHVybmVkfVxcbmA7XG4gICAgICAgIG91dHB1dC5lbWl0KFwic3Rkb3V0XCIsIHN1ZmZpeCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RVc2VkQXQgPSBuZXcgRGF0ZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgZXhpdENvZGU6IDAsXG4gICAgICAgIHN0ZG91dDogb3V0cHV0LnN0ZG91dC52YWx1ZSxcbiAgICAgICAgc3RkZXJyOiBvdXRwdXQuc3RkZXJyLnZhbHVlLFxuICAgICAgICBleGVjdXRpb25UaW1lTXM6IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZCxcbiAgICAgICAgLi4ub3V0cHV0Lm1ldGFkYXRhKCksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGFib3J0ZWQgfHwgb3B0aW9ucy5hYm9ydFNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICB0aHJvdyBhYm9ydFJlYXNvbihvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpO1xuICAgICAgb3V0cHV0LmVtaXQoXCJzdGRlcnJcIiwgb3V0cHV0LnN0ZGVyci52YWx1ZSA/IGBcXG4ke21lc3NhZ2V9YCA6IG1lc3NhZ2UpO1xuICAgICAgY29uc3QgeyBjcmFzaGVkRXJyb3IgfSA9IGF3YWl0IG1vbnR5Q29udGV4dCgpO1xuICAgICAgY29uc3QgdGltZWRPdXQgPSBjYXVnaHQgaW5zdGFuY2VvZiBjcmFzaGVkRXJyb3IgJiYgY2F1Z2h0LnRpbWVkT3V0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGV4aXRDb2RlOiB0aW1lZE91dCA/IC0xIDogMSxcbiAgICAgICAgc3Rkb3V0OiBvdXRwdXQuc3Rkb3V0LnZhbHVlLFxuICAgICAgICBzdGRlcnI6IG91dHB1dC5zdGRlcnIudmFsdWUsXG4gICAgICAgIGV4ZWN1dGlvblRpbWVNczogcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkLFxuICAgICAgICAuLi4odGltZWRPdXQgPyB7IHRpbWVkT3V0OiB0cnVlLCBraWxsZWQ6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgLi4ub3V0cHV0Lm1ldGFkYXRhKCksXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBvcHRpb25zLmFib3J0U2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBhd2FpdCBzZXNzaW9uLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNSZWFkeSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IFwicnVubmluZ1wiO1xuICB9XG5cbiAgZ2V0SW5mbygpOiBTYW5kYm94SW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXIsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgY3JlYXRlZEF0OiB0aGlzLmNyZWF0ZWRBdCxcbiAgICAgIC4uLih0aGlzLmxhc3RVc2VkQXQgPyB7IGxhc3RVc2VkQXQ6IHRoaXMubGFzdFVzZWRBdCB9IDoge30pLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG4gICAgICAgIGhvc3RBY2Nlc3M6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0SW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiQ29tbWFuZHMgcnVuIGFzIFB5dGhvbiBzb3VyY2UgaW4gdGhlIFB5ZGFudGljIE1vbnR5IGZhbGxiYWNrLlwiLFxuICAgICAgXCJQYXNzIFB5dGhvbiBjb2RlIGRpcmVjdGx5IHJhdGhlciB0aGFuIHNoZWxsIHN5bnRheC5cIixcbiAgICAgIFwiVGhlcmUgaXMgbm8gaG9zdCBmaWxlc3lzdGVtLCBuZXR3b3JrLCBlbnZpcm9ubWVudCwgc2hlbGwsIG9yIHRoaXJkLXBhcnR5IHBhY2thZ2UgYWNjZXNzLlwiLFxuICAgIF0uam9pbihcIiBcIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9udHlDb2RlKGNvbW1hbmQ6IHN0cmluZywgYXJnczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiBjb21tYW5kO1xuICBpZiAoKGNvbW1hbmQgPT09IFwicHl0aG9uXCIgfHwgY29tbWFuZCA9PT0gXCJweXRob24zXCIpICYmIGFyZ3MubGVuZ3RoID09PSAyICYmIGFyZ3NbMF0gPT09IFwiLWNcIikge1xuICAgIHJldHVybiBhcmdzWzFdO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHN0cmlwUHl0aG9uRmVuY2UoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IGNvZGUudHJpbSgpO1xuICBjb25zdCBtYXRjaCA9IC9eYGBgKD86cHl0aG9ufHB5KT9cXHMqXFxuKFtcXHNcXFNdKj8pXFxuYGBgJC9pLmV4ZWModHJpbW1lZCk7XG4gIHJldHVybiBtYXRjaD8uWzFdID8/IGNvZGU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMikgPz8gU3RyaW5nKHZhbHVlKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbn1cblxuY2xhc3MgUmV0YWluZWRPdXRwdXQge1xuICByZWFkb25seSBzdGRvdXQ6IFJldGFpbmVkVGV4dDtcbiAgcmVhZG9ubHkgc3RkZXJyOiBSZXRhaW5lZFRleHQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvblN0ZG91dDogRXhlY3V0ZUNvbW1hbmRPcHRpb25zW1wib25TdGRvdXRcIl07XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRlcnI6IEV4ZWN1dGVDb21tYW5kT3B0aW9uc1tcIm9uU3RkZXJyXCJdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEV4ZWN1dGVDb21tYW5kT3B0aW9ucykge1xuICAgIHRoaXMuc3Rkb3V0ID0gbmV3IFJldGFpbmVkVGV4dChvcHRpb25zLm1heFJldGFpbmVkQnl0ZXMpO1xuICAgIHRoaXMuc3RkZXJyID0gbmV3IFJldGFpbmVkVGV4dChvcHRpb25zLm1heFJldGFpbmVkQnl0ZXMpO1xuICAgIHRoaXMub25TdGRvdXQgPSBvcHRpb25zLm9uU3Rkb3V0O1xuICAgIHRoaXMub25TdGRlcnIgPSBvcHRpb25zLm9uU3RkZXJyO1xuICB9XG5cbiAgZW1pdChzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoc3RyZWFtID09PSBcInN0ZG91dFwiKSB7XG4gICAgICB0aGlzLm9uU3Rkb3V0Py4odGV4dCk7XG4gICAgICB0aGlzLnN0ZG91dC5hcHBlbmQodGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25TdGRlcnI/Lih0ZXh0KTtcbiAgICAgIHRoaXMuc3RkZXJyLmFwcGVuZCh0ZXh0KTtcbiAgICB9XG4gIH1cblxuICBtZXRhZGF0YSgpOiBQaWNrPFxuICAgIENvbW1hbmRSZXN1bHQsXG4gICAgXCJzdGRvdXRUcnVuY2F0ZWRcIiB8IFwic3RkZXJyVHJ1bmNhdGVkXCIgfCBcInN0ZG91dERyb3BwZWRCeXRlc1wiIHwgXCJzdGRlcnJEcm9wcGVkQnl0ZXNcIlxuICA+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHRoaXMuc3Rkb3V0LmRyb3BwZWRCeXRlcyA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdGRvdXRUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgICBzdGRvdXREcm9wcGVkQnl0ZXM6IHRoaXMuc3Rkb3V0LmRyb3BwZWRCeXRlcyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgICAgLi4uKHRoaXMuc3RkZXJyLmRyb3BwZWRCeXRlcyA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdGRlcnJUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgICBzdGRlcnJEcm9wcGVkQnl0ZXM6IHRoaXMuc3RkZXJyLmRyb3BwZWRCeXRlcyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgUmV0YWluZWRUZXh0IHtcbiAgdmFsdWUgPSBcIlwiO1xuICBkcm9wcGVkQnl0ZXMgPSAwO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4Qnl0ZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuXG4gIGNvbnN0cnVjdG9yKG1heEJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IG1heEJ5dGVzID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBpZiAoXG4gICAgICByZXNvbHZlZCAhPT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICYmXG4gICAgICAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlc29sdmVkKSB8fCByZXNvbHZlZCA8IDApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibWF4UmV0YWluZWRCeXRlcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlciBvciBJbmZpbml0eVwiKTtcbiAgICB9XG4gICAgdGhpcy5tYXhCeXRlcyA9IHJlc29sdmVkO1xuICB9XG5cbiAgYXBwZW5kKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm1heEJ5dGVzID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgIHRoaXMudmFsdWUgKz0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29tYmluZWQgPSB0aGlzLmVuY29kZXIuZW5jb2RlKHRoaXMudmFsdWUgKyB0ZXh0KTtcbiAgICBpZiAoY29tYmluZWQubGVuZ3RoIDw9IHRoaXMubWF4Qnl0ZXMpIHtcbiAgICAgIHRoaXMudmFsdWUgKz0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHN0YXJ0ID0gY29tYmluZWQubGVuZ3RoIC0gdGhpcy5tYXhCeXRlcztcbiAgICB3aGlsZSAoc3RhcnQgPCBjb21iaW5lZC5sZW5ndGggJiYgKGNvbWJpbmVkW3N0YXJ0XSEgJiAweGMwKSA9PT0gMHg4MCkgc3RhcnQrKztcbiAgICBjb25zdCByZXRhaW5lZCA9IGNvbWJpbmVkLnN1YmFycmF5KHN0YXJ0KTtcbiAgICB0aGlzLmRyb3BwZWRCeXRlcyArPSBjb21iaW5lZC5sZW5ndGggLSByZXRhaW5lZC5sZW5ndGg7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZGVjb2Rlci5kZWNvZGUocmV0YWluZWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRlcm1pbmF0ZVdvcmtlcih3b3JrZXJQaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAod29ya2VyUGlkID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwod29ya2VyUGlkLCBcIlNJR0tJTExcIik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFRoZSBjb21tYW5kIGNhbiBmaW5pc2ggYmV0d2VlbiB0aGUgYWJvcnQgZXZlbnQgYW5kIHRoZSBraWxsIHJlcXVlc3QuXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tvdXRTZXNzaW9uKFxuICBwb29sOiBNb250eVBvb2wsXG4gIG9wdGlvbnM6IENoZWNrb3V0T3B0aW9ucyxcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8TW9udHlTZXNzaW9uPiB7XG4gIGNvbnN0IGNoZWNrb3V0ID0gcG9vbC5jaGVja291dChvcHRpb25zKTtcbiAgaWYgKCFzaWduYWwpIHJldHVybiBjaGVja291dDtcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdm9pZCBjaGVja291dC50aGVuKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNsb3NlKCkpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgdGhyb3cgYWJvcnRSZWFzb24oc2lnbmFsKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxNb250eVNlc3Npb24+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICByZWplY3QoYWJvcnRSZWFzb24oc2lnbmFsKSk7XG4gICAgICB2b2lkIGNoZWNrb3V0LnRoZW4oKHNlc3Npb24pID0+IHNlc3Npb24uY2xvc2UoKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB9O1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGNoZWNrb3V0LnRoZW4oXG4gICAgICAoc2Vzc2lvbikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgICAgcmVzb2x2ZShzZXNzaW9uKTtcbiAgICAgIH0sXG4gICAgICAoY2F1Z2h0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICByZWplY3QoY2F1Z2h0KTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFib3J0UmVhc29uKHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgcmV0dXJuIHNpZ25hbD8ucmVhc29uID8/IG5ldyBET01FeGNlcHRpb24oXCJUaGUgY29tbWFuZCB3YXMgYWJvcnRlZFwiLCBcIkFib3J0RXJyb3JcIik7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFJlc3VsdChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgc3RhcnRlZDogbnVtYmVyLFxuICBzdGRlcnI6IHN0cmluZyxcbik6IENvbW1hbmRSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGNvbW1hbmQsXG4gICAgYXJncyxcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBleGl0Q29kZTogMSxcbiAgICBzdGRvdXQ6IFwiXCIsXG4gICAgc3RkZXJyLFxuICAgIGV4ZWN1dGlvblRpbWVNczogcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkLFxuICB9O1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBjb25zdCBzYW5kYm94ID0gbmV3IE1vbnR5U2FuZGJveCgpO1xuICBhd2FpdCBzYW5kYm94LnN0YXJ0KCk7XG4gIGNvbnNvbGUubG9nKGF3YWl0IHNhbmRib3guZXhlY3V0ZUNvbW1hbmQoXCJwcmludCgnSGVsbG8sIHdvcmxkIScpXCIpKTtcbiAgYXdhaXQgc2FuZGJveC5zdG9wKCk7XG59XG4iXX0=
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udHktc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb250eS1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUNMLGFBQWEsR0FLZCxNQUFNLHdCQUF3QixDQUFDO0FBR2hDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDO0FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsVUFBVSxDQUFDO0FBQzVDLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztDQUNsQyxDQUFDO0FBQ1gsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixJQUFJLEVBQUUsWUFBWTtJQUNsQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO0NBQ2xDLENBQUM7QUFDWCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBUzFDLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsY0FBc0Isb0JBQW9CLEVBQUU7SUFDNUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBMkIsRUFBRTtJQUMzRSxNQUFNLE1BQU0sR0FB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Q0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUErQjtJQUNsRCxPQUFPLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSSxZQUFZLENBQUMseUJBQXlCLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixPQUFlLEVBQ2YsSUFBYyxFQUNkLE9BQWUsRUFDZixNQUFjO0lBRWQsT0FBTztRQUNMLE9BQU87UUFDUCxJQUFJO1FBQ0osT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsQ0FBQztRQUNYLE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTTtRQUNOLGVBQWUsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTztLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQeWRhbnRpYyBNb250eSBmYWxsYmFjayBmb3IgTWFzdHJhIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqIFByZWZlcnMgTW9udHkncyBuYXRpdmUgTm9kZSBzdWJwcm9jZXNzIHdvcmtlcnMgYW5kIGZhbGxzIGJhY2sgdG8gaXRzIFdBU01cbiAqIHdvcmtlcnMgd2hlbiB0aGUgbmF0aXZlIHBhY2thZ2UgaXMgdW5hdmFpbGFibGUuIEl0IGV4ZWN1dGVzIFB5dGhvbiBzb3VyY2VcbiAqIHdpdGggbm8gaG9zdCBmaWxlc3lzdGVtLCBuZXR3b3JrLCBlbnZpcm9ubWVudCwgc2hlbGwsIG9yIHRoaXJkLXBhcnR5IHBhY2thZ2VcbiAqIGFjY2Vzcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYXZhaWxhYmxlUGFyYWxsZWxpc20gfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBmdW5jdGlvblV0aWxzLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTWFzdHJhU2FuZGJveCxcbiAgdHlwZSBDb21tYW5kUmVzdWx0LFxuICB0eXBlIEV4ZWN1dGVDb21tYW5kT3B0aW9ucyxcbiAgdHlwZSBQcm92aWRlclN0YXR1cyxcbiAgdHlwZSBTYW5kYm94SW5mbyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tvdXRPcHRpb25zLCBNb250eSwgTW9udHlDcmFzaGVkRXJyb3IsIE1vbnR5U2Vzc2lvbiB9IGZyb20gXCJAcHlkYW50aWMvbW9udHlcIjtcblxuY29uc3QgREVGQVVMVF9DT01NQU5EX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5jb25zdCBERUZBVUxUX01BWF9NRU1PUllfQllURVMgPSAxMF8wMDBfMDAwO1xuY29uc3QgTkFUSVZFX01PTlRZX1RBUkdFVCA9IHtcbiAgbmFtZTogXCJuYXRpdmUgTW9udHlcIixcbiAgbG9hZDogKCkgPT4gaW1wb3J0KFwiQHB5ZGFudGljL21vbnR5L25vZGVcIiksXG59IGFzIGNvbnN0O1xuY29uc3QgV0FTTV9NT05UWV9UQVJHRVQgPSB7XG4gIG5hbWU6IFwiV0FTTSBNb250eVwiLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoXCJAcHlkYW50aWMvbW9udHkvd2FzbVwiKSxcbn0gYXMgY29uc3Q7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21vbnR5XCIpO1xuXG50eXBlIE1vbnR5UG9vbCA9IFBpY2s8TW9udHksIFwiY2hlY2tvdXRcIj47XG5cbmludGVyZmFjZSBNb250eUNvbnRleHQge1xuICBjcmFzaGVkRXJyb3I6IHR5cGVvZiBNb250eUNyYXNoZWRFcnJvcjtcbiAgcG9vbDogTW9udHlQb29sO1xufVxuXG4vKiogQGludGVybmFsIFNpemUgdGhlIHNoYXJlZCB3b3JrZXIgcG9vbCBmcm9tIHRoZSBob3N0J3MgYXZhaWxhYmxlIHByb2Nlc3NvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9udHlNYXhQcm9jZXNzZXMocGFyYWxsZWxpc206IG51bWJlciA9IGF2YWlsYWJsZVBhcmFsbGVsaXNtKCkpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoNCwgTWF0aC5mbG9vcihwYXJhbGxlbGlzbSkgKiAyKTtcbn1cblxuY29uc3QgbW9udHlDb250ZXh0ID0gZnVuY3Rpb25VdGlscy5tZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPE1vbnR5Q29udGV4dD4gPT4ge1xuICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNvbmZpZ1V0aWxzLmJvb2xlYW4odW5kZWZpbmVkLCBcIk1PTlRZX0ZPUkNFX1dBU01cIilcbiAgICA/IFtXQVNNX01PTlRZX1RBUkdFVF1cbiAgICA6IFtOQVRJVkVfTU9OVFlfVEFSR0VULCBXQVNNX01PTlRZX1RBUkdFVF07XG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgdGFyZ2V0LmxvYWQoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJHt0YXJnZXQubmFtZX0gbW9kdWxlIGF2YWlsYWJsZWApO1xuICAgICAgY29uc3QgbWF4UHJvY2Vzc2VzID0gbW9udHlNYXhQcm9jZXNzZXMoKTtcbiAgICAgIGNvbnN0IHBvb2wgPSBhd2FpdCBtb2R1bGUuTW9udHkuY3JlYXRlKHtcbiAgICAgICAgbWluUHJvY2Vzc2VzOiAxLFxuICAgICAgICBtYXhQcm9jZXNzZXMsXG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiAzNSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke3RhcmdldC5uYW1lfSBwb29sIGNyZWF0ZWRgLCB7IG1heFByb2Nlc3NlcyB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyYXNoZWRFcnJvcjogbW9kdWxlLk1vbnR5Q3Jhc2hlZEVycm9yLFxuICAgICAgICBwb29sLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSk7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7dGFyZ2V0Lm5hbWV9IHVuYXZhaWxhYmxlYCwge1xuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBcIkZhaWxlZCB0byBjcmVhdGUgTW9udHkgcG9vbFwiKTtcbn0pO1xuXG4vKiogUmVzb3VyY2UgY29udHJvbHMgZm9yIHRoZSBNb250eSBQeXRob24gZmFsbGJhY2suICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbnR5U2FuZGJveE9wdGlvbnMge1xuICAvKiogTWFzdHJhIHByb3ZpZGVyIGlkLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgZXhlY3V0aW9uIHRpbWVvdXQuIFBlci1jYWxsIGBvcHRpb25zLnRpbWVvdXRgIHdpbnMuICovXG4gIGNvbW1hbmRUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIE1vbnR5IGhlYXAgYnl0ZXMgZm9yIG9uZSBjaGVja291dC4gKi9cbiAgbWF4TWVtb3J5Qnl0ZXM/OiBudW1iZXI7XG4gIC8qKiBUeXBlLWNoZWNrIGVhY2ggUHl0aG9uIHNuaXBwZXQgYmVmb3JlIHJ1bm5pbmcgaXQuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICB0eXBlQ2hlY2s/OiBib29sZWFuO1xufVxuXG4vKiogUHl0aG9uLW9ubHksIGRlbnktYnktZGVmYXVsdCBzYW5kYm94IGJhY2tlZCBieSBNb250eSdzIHNlbGVjdGVkIHdvcmtlciBwb29sLiAqL1xuZXhwb3J0IGNsYXNzIE1vbnR5U2FuZGJveCBleHRlbmRzIE1hc3RyYVNhbmRib3gge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3ZpZGVyID0gXCJtb250eVwiO1xuICBzdGF0dXM6IFByb3ZpZGVyU3RhdHVzID0gXCJwZW5kaW5nXCI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4TWVtb3J5Qnl0ZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSB0eXBlQ2hlY2s6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlZEF0ID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBsYXN0VXNlZEF0PzogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb250eVNhbmRib3hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5uYW1lID8/IFwiUHlkYW50aWMgTW9udHlcIjtcbiAgICBzdXBlcih7IG5hbWUgfSk7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQgPz8gXCJtb250eVwiO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jb21tYW5kVGltZW91dE1zID0gb3B0aW9ucy5jb21tYW5kVGltZW91dE1zID8/IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMubWF4TWVtb3J5Qnl0ZXMgPSBvcHRpb25zLm1heE1lbW9yeUJ5dGVzID8/IERFRkFVTFRfTUFYX01FTU9SWV9CWVRFUztcbiAgICB0aGlzLnR5cGVDaGVjayA9IG9wdGlvbnMudHlwZUNoZWNrID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIFdhcm0gdGhlIHNoYXJlZCBjcmFzaC1pc29sYXRlZCB3b3JrZXIgcG9vbC4gKi9cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbW9udHlDb250ZXh0KCk7XG4gIH1cblxuICAvKiogVGhlIHByb2Nlc3Mtd2lkZSBwb29sIHN0YXlzIHdhcm07IHRoaXMgaW5zdGFuY2UgY2FycmllcyBubyBvcGVuIHNlc3Npb24uICovXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIC8qKiBUaGUgcHJvY2Vzcy13aWRlIHBvb2wgc3RheXMgd2FybTsgZWFjaCBjb21tYW5kIGNsb3NlcyBpdHMgb3duIGNoZWNrb3V0LiAqL1xuICBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogRXhlY3V0ZSBQeXRob24gc291cmNlIGFuZCBtYXAgTW9udHkgb3V0cHV0IHRvIE1hc3RyYSdzIGNvbW1hbmQgcmVzdWx0LiAqL1xuICBhc3luYyBleGVjdXRlQ29tbWFuZChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10gPSBbXSxcbiAgICBvcHRpb25zOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxDb21tYW5kUmVzdWx0PiB7XG4gICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IGNvZGUgPSBtb250eUNvZGUoY29tbWFuZCwgYXJncyk7XG4gICAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBhY2NlcHRzIFB5dGhvbiBzb3VyY2UgZGlyZWN0bHksIG9yIHB5dGhvbi9weXRob24zIHdpdGggYSBzaW5nbGUgLWMgc2NyaXB0LlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmVudiA/PyB7fSkuZmlsdGVyKFxuICAgICAgKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICApO1xuICAgIGlmIChlbnZpcm9ubWVudC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmFpbGVkUmVzdWx0KFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGFydGVkLFxuICAgICAgICBcIk1vbnR5IGZhbGxiYWNrIGRvZXMgbm90IGV4cG9zZSBob3N0IGVudmlyb25tZW50IHZhcmlhYmxlcy5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmN3ZCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBkb2VzIG5vdCBleHBvc2UgYSBob3N0IHdvcmtpbmcgZGlyZWN0b3J5LlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHRocm93IG9wdGlvbnMuYWJvcnRTaWduYWwucmVhc29uO1xuXG4gICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gdGhpcy5jb21tYW5kVGltZW91dE1zO1xuICAgIGNvbnN0IHBvb2wgPSAoYXdhaXQgbW9udHlDb250ZXh0KCkpLnBvb2w7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGNoZWNrb3V0U2Vzc2lvbihcbiAgICAgIHBvb2wsXG4gICAgICB7XG4gICAgICAgIGxpbWl0czoge1xuICAgICAgICAgIG1heEZlZWREdXJhdGlvblNlY3M6IE1hdGgubWF4KDAuMDAxLCB0aW1lb3V0IC8gMV8wMDApLFxuICAgICAgICAgIG1heE1lbW9yeTogdGhpcy5tYXhNZW1vcnlCeXRlcyxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZUNoZWNrOiB0aGlzLnR5cGVDaGVjayxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFJldGFpbmVkT3V0cHV0KG9wdGlvbnMpO1xuICAgIGNvbnN0IHdvcmtlclBpZCA9IHNlc3Npb24ud29ya2VyUGlkO1xuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdGVybWluYXRlV29ya2VyKHdvcmtlclBpZCk7XG4gICAgfTtcbiAgICBvcHRpb25zLmFib3J0U2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSBvbkFib3J0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhYm9ydGVkKSB0aHJvdyBhYm9ydFJlYXNvbihvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgc2Vzc2lvbi5mZWVkUnVuKHN0cmlwUHl0aG9uRmVuY2UoY29kZSksIHtcbiAgICAgICAgcHJpbnRDYWxsYmFjazogKHN0cmVhbSwgdGV4dCkgPT4gb3V0cHV0LmVtaXQoc3RyZWFtLCB0ZXh0KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmV0dXJuZWQgPSBmb3JtYXRSZXN1bHQodmFsdWUpO1xuICAgICAgaWYgKHJldHVybmVkKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHJldHVybmVkLmVuZHNXaXRoKFwiXFxuXCIpID8gcmV0dXJuZWQgOiBgJHtyZXR1cm5lZH1cXG5gO1xuICAgICAgICBvdXRwdXQuZW1pdChcInN0ZG91dFwiLCBzdWZmaXgpO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0VXNlZEF0ID0gbmV3IERhdGUoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGV4aXRDb2RlOiAwLFxuICAgICAgICBzdGRvdXQ6IG91dHB1dC5zdGRvdXQudmFsdWUsXG4gICAgICAgIHN0ZGVycjogb3V0cHV0LnN0ZGVyci52YWx1ZSxcbiAgICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgIC4uLm91dHB1dC5tZXRhZGF0YSgpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmIChhYm9ydGVkIHx8IG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgYWJvcnRSZWFzb24ob3B0aW9ucy5hYm9ydFNpZ25hbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KTtcbiAgICAgIG91dHB1dC5lbWl0KFwic3RkZXJyXCIsIG91dHB1dC5zdGRlcnIudmFsdWUgPyBgXFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlKTtcbiAgICAgIGNvbnN0IHsgY3Jhc2hlZEVycm9yIH0gPSBhd2FpdCBtb250eUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IHRpbWVkT3V0ID0gY2F1Z2h0IGluc3RhbmNlb2YgY3Jhc2hlZEVycm9yICYmIGNhdWdodC50aW1lZE91dDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBleGl0Q29kZTogdGltZWRPdXQgPyAtMSA6IDEsXG4gICAgICAgIHN0ZG91dDogb3V0cHV0LnN0ZG91dC52YWx1ZSxcbiAgICAgICAgc3RkZXJyOiBvdXRwdXQuc3RkZXJyLnZhbHVlLFxuICAgICAgICBleGVjdXRpb25UaW1lTXM6IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZCxcbiAgICAgICAgLi4uKHRpbWVkT3V0ID8geyB0aW1lZE91dDogdHJ1ZSwga2lsbGVkOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIC4uLm91dHB1dC5tZXRhZGF0YSgpLFxuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgYXdhaXQgc2Vzc2lvbi5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzUmVhZHkoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBcInJ1bm5pbmdcIjtcbiAgfVxuXG4gIGdldEluZm8oKTogU2FuZGJveEluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQsXG4gICAgICAuLi4odGhpcy5sYXN0VXNlZEF0ID8geyBsYXN0VXNlZEF0OiB0aGlzLmxhc3RVc2VkQXQgfSA6IHt9KSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGxhbmd1YWdlOiBcInB5dGhvblwiLFxuICAgICAgICBob3N0QWNjZXNzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEluc3RydWN0aW9ucygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICBcIkNvbW1hbmRzIHJ1biBhcyBQeXRob24gc291cmNlIGluIHRoZSBQeWRhbnRpYyBNb250eSBmYWxsYmFjay5cIixcbiAgICAgIFwiUGFzcyBQeXRob24gY29kZSBkaXJlY3RseSByYXRoZXIgdGhhbiBzaGVsbCBzeW50YXguXCIsXG4gICAgICBcIlRoZXJlIGlzIG5vIGhvc3QgZmlsZXN5c3RlbSwgbmV0d29yaywgZW52aXJvbm1lbnQsIHNoZWxsLCBvciB0aGlyZC1wYXJ0eSBwYWNrYWdlIGFjY2Vzcy5cIixcbiAgICBdLmpvaW4oXCIgXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vbnR5Q29kZShjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gY29tbWFuZDtcbiAgaWYgKChjb21tYW5kID09PSBcInB5dGhvblwiIHx8IGNvbW1hbmQgPT09IFwicHl0aG9uM1wiKSAmJiBhcmdzLmxlbmd0aCA9PT0gMiAmJiBhcmdzWzBdID09PSBcIi1jXCIpIHtcbiAgICByZXR1cm4gYXJnc1sxXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzdHJpcFB5dGhvbkZlbmNlKGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSBjb2RlLnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXmBgYCg/OnB5dGhvbnxweSk/XFxzKlxcbihbXFxzXFxTXSo/KVxcbmBgYCQvaS5leGVjKHRyaW1tZWQpO1xuICByZXR1cm4gbWF0Y2g/LlsxXSA/PyBjb2RlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZXN1bHQodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIFwiXCI7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpID8/IFN0cmluZyh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIFJldGFpbmVkT3V0cHV0IHtcbiAgcmVhZG9ubHkgc3Rkb3V0OiBSZXRhaW5lZFRleHQ7XG4gIHJlYWRvbmx5IHN0ZGVycjogUmV0YWluZWRUZXh0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRvdXQ6IEV4ZWN1dGVDb21tYW5kT3B0aW9uc1tcIm9uU3Rkb3V0XCJdO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uU3RkZXJyOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnNbXCJvblN0ZGVyclwiXTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnMpIHtcbiAgICB0aGlzLnN0ZG91dCA9IG5ldyBSZXRhaW5lZFRleHQob3B0aW9ucy5tYXhSZXRhaW5lZEJ5dGVzKTtcbiAgICB0aGlzLnN0ZGVyciA9IG5ldyBSZXRhaW5lZFRleHQob3B0aW9ucy5tYXhSZXRhaW5lZEJ5dGVzKTtcbiAgICB0aGlzLm9uU3Rkb3V0ID0gb3B0aW9ucy5vblN0ZG91dDtcbiAgICB0aGlzLm9uU3RkZXJyID0gb3B0aW9ucy5vblN0ZGVycjtcbiAgfVxuXG4gIGVtaXQoc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIiwgdGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHN0cmVhbSA9PT0gXCJzdGRvdXRcIikge1xuICAgICAgdGhpcy5vblN0ZG91dD8uKHRleHQpO1xuICAgICAgdGhpcy5zdGRvdXQuYXBwZW5kKHRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU3RkZXJyPy4odGV4dCk7XG4gICAgICB0aGlzLnN0ZGVyci5hcHBlbmQodGV4dCk7XG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGEoKTogUGljazxcbiAgICBDb21tYW5kUmVzdWx0LFxuICAgIFwic3Rkb3V0VHJ1bmNhdGVkXCIgfCBcInN0ZGVyclRydW5jYXRlZFwiIHwgXCJzdGRvdXREcm9wcGVkQnl0ZXNcIiB8IFwic3RkZXJyRHJvcHBlZEJ5dGVzXCJcbiAgPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLih0aGlzLnN0ZG91dC5kcm9wcGVkQnl0ZXMgPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3Rkb3V0VHJ1bmNhdGVkOiB0cnVlLFxuICAgICAgICAgICAgc3Rkb3V0RHJvcHBlZEJ5dGVzOiB0aGlzLnN0ZG91dC5kcm9wcGVkQnl0ZXMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIC4uLih0aGlzLnN0ZGVyci5kcm9wcGVkQnl0ZXMgPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3RkZXJyVHJ1bmNhdGVkOiB0cnVlLFxuICAgICAgICAgICAgc3RkZXJyRHJvcHBlZEJ5dGVzOiB0aGlzLnN0ZGVyci5kcm9wcGVkQnl0ZXMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIFJldGFpbmVkVGV4dCB7XG4gIHZhbHVlID0gXCJcIjtcbiAgZHJvcHBlZEJ5dGVzID0gMDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1heEJ5dGVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuICBjb25zdHJ1Y3RvcihtYXhCeXRlczogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBtYXhCeXRlcyA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgaWYgKFxuICAgICAgcmVzb2x2ZWQgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJlxuICAgICAgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXNvbHZlZCkgfHwgcmVzb2x2ZWQgPCAwKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1heFJldGFpbmVkQnl0ZXMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXIgb3IgSW5maW5pdHlcIik7XG4gICAgfVxuICAgIHRoaXMubWF4Qnl0ZXMgPSByZXNvbHZlZDtcbiAgfVxuXG4gIGFwcGVuZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBpZiAodGhpcy5tYXhCeXRlcyA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB7XG4gICAgICB0aGlzLnZhbHVlICs9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbWJpbmVkID0gdGhpcy5lbmNvZGVyLmVuY29kZSh0aGlzLnZhbHVlICsgdGV4dCk7XG4gICAgaWYgKGNvbWJpbmVkLmxlbmd0aCA8PSB0aGlzLm1heEJ5dGVzKSB7XG4gICAgICB0aGlzLnZhbHVlICs9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBzdGFydCA9IGNvbWJpbmVkLmxlbmd0aCAtIHRoaXMubWF4Qnl0ZXM7XG4gICAgd2hpbGUgKHN0YXJ0IDwgY29tYmluZWQubGVuZ3RoICYmIChjb21iaW5lZFtzdGFydF0hICYgMHhjMCkgPT09IDB4ODApIHN0YXJ0Kys7XG4gICAgY29uc3QgcmV0YWluZWQgPSBjb21iaW5lZC5zdWJhcnJheShzdGFydCk7XG4gICAgdGhpcy5kcm9wcGVkQnl0ZXMgKz0gY29tYmluZWQubGVuZ3RoIC0gcmV0YWluZWQubGVuZ3RoO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmRlY29kZXIuZGVjb2RlKHJldGFpbmVkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXJtaW5hdGVXb3JrZXIod29ya2VyUGlkOiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKHdvcmtlclBpZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5raWxsKHdvcmtlclBpZCwgXCJTSUdLSUxMXCIpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBUaGUgY29tbWFuZCBjYW4gZmluaXNoIGJldHdlZW4gdGhlIGFib3J0IGV2ZW50IGFuZCB0aGUga2lsbCByZXF1ZXN0LlxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrb3V0U2Vzc2lvbihcbiAgcG9vbDogTW9udHlQb29sLFxuICBvcHRpb25zOiBDaGVja291dE9wdGlvbnMsXG4gIHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPE1vbnR5U2Vzc2lvbj4ge1xuICBjb25zdCBjaGVja291dCA9IHBvb2wuY2hlY2tvdXQob3B0aW9ucyk7XG4gIGlmICghc2lnbmFsKSByZXR1cm4gY2hlY2tvdXQ7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIHZvaWQgY2hlY2tvdXQudGhlbigoc2Vzc2lvbikgPT4gc2Vzc2lvbi5jbG9zZSgpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHRocm93IGFib3J0UmVhc29uKHNpZ25hbCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2U8TW9udHlTZXNzaW9uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvbkFib3J0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KGFib3J0UmVhc29uKHNpZ25hbCkpO1xuICAgICAgdm9pZCBjaGVja291dC50aGVuKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNsb3NlKCkpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBjaGVja291dC50aGVuKFxuICAgICAgKHNlc3Npb24pID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIHJlc29sdmUoc2Vzc2lvbik7XG4gICAgICB9LFxuICAgICAgKGNhdWdodDogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgICAgcmVqZWN0KGNhdWdodCk7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhYm9ydFJlYXNvbihzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIHJldHVybiBzaWduYWw/LnJlYXNvbiA/PyBuZXcgRE9NRXhjZXB0aW9uKFwiVGhlIGNvbW1hbmQgd2FzIGFib3J0ZWRcIiwgXCJBYm9ydEVycm9yXCIpO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRSZXN1bHQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogc3RyaW5nW10sXG4gIHN0YXJ0ZWQ6IG51bWJlcixcbiAgc3RkZXJyOiBzdHJpbmcsXG4pOiBDb21tYW5kUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXhpdENvZGU6IDEsXG4gICAgc3Rkb3V0OiBcIlwiLFxuICAgIHN0ZGVycixcbiAgICBleGVjdXRpb25UaW1lTXM6IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZCxcbiAgfTtcbn1cblxuaWYgKGltcG9ydC5tZXRhLm1haW4pIHtcbiAgY29uc3Qgc2FuZGJveCA9IG5ldyBNb250eVNhbmRib3goKTtcbiAgYXdhaXQgc2FuZGJveC5zdGFydCgpO1xuICBjb25zb2xlLmxvZyhhd2FpdCBzYW5kYm94LmV4ZWN1dGVDb21tYW5kKFwicHJpbnQoJ0hlbGxvLCB3b3JsZCEnKVwiKSk7XG4gIGF3YWl0IHNhbmRib3guc3RvcCgpO1xufVxuIl19
@@ -109,14 +109,6 @@ export declare class MastraPlugin extends Plugin<MastraPluginConfig> {
109
109
  * boot rather than the first request, and so every request agrees.
110
110
  */
111
111
  private identityMode;
112
- /**
113
- * Dedicated service-principal Lakebase pool backing Mastra memory /
114
- * storage. Built once in {@link buildAgentAndServer} (outside any
115
- * `asUser` scope, so it never inherits a request's OBO identity) and
116
- * drained in {@link shutdown}. `null` until setup runs or when
117
- * Lakebase isn't needed.
118
- */
119
- private servicePrincipalPool;
120
112
  setup(): Promise<void>;
121
113
  /**
122
114
  * The plugin instance the chat path's Databricks calls should run through for
@@ -141,19 +133,10 @@ export declare class MastraPlugin extends Plugin<MastraPluginConfig> {
141
133
  * already in the registry by the time this fires.
142
134
  */
143
135
  private applyLakebaseAutoDefaults;
144
- /**
145
- * Drain the memory service-principal pool. Idempotent: the handle is
146
- * cleared before the drain starts, so a second call is a no-op and a
147
- * later `setup()` rebuilds the pool. Bounded by
148
- * {@link POOL_DRAIN_TIMEOUT_MS} to stay well inside the 15s graceful
149
- * shutdown budget.
150
- */
136
+ /** Flush pending direct MLflow traces during graceful shutdown. */
151
137
  shutdown(): Promise<void>;
152
138
  /**
153
- * Abort in-flight work. AppKit's graceful shutdown calls this hook
154
- * synchronously and never awaits {@link shutdown}, so the pool drain is
155
- * started here too; it cannot be awaited from a `void` hook, and
156
- * {@link shutdown} is idempotent so the duplicate call is free.
139
+ * Abort in-flight work and start the asynchronous trace flush.
157
140
  */
158
141
  abortActiveOperations(): void;
159
142
  exports(): {