experimental-agent 0.3.0 → 0.5.0

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.
Files changed (40) hide show
  1. package/README.md +61 -0
  2. package/dist/{adapter-BigchkkI.d.mts → adapter-Cl735Kp4.d.mts} +37 -39
  3. package/dist/{adapter-BigchkkI.d.ts → adapter-Cl735Kp4.d.ts} +37 -39
  4. package/dist/{chunk-ZUFJJYC4.mjs → chunk-2Y7EZPIP.mjs} +3 -2
  5. package/dist/{chunk-RT72C52I.mjs → chunk-6MS4CGEZ.mjs} +3 -2
  6. package/dist/{chunk-ELWIUJUK.mjs → chunk-AB2JYY6A.mjs} +6 -3
  7. package/dist/chunk-I5DCB7RU.mjs +346 -0
  8. package/dist/chunk-NOW6XL5E.mjs +310 -0
  9. package/dist/{docker-QPCLWLYR.mjs → docker-OBUQX5ZI.mjs} +1 -1
  10. package/dist/entry-Bs17QEiq.d.mts +45 -0
  11. package/dist/entry-QNyd4S1s.d.ts +45 -0
  12. package/dist/index.d.mts +162 -85
  13. package/dist/index.d.ts +162 -85
  14. package/dist/index.js +636 -161
  15. package/dist/index.mjs +469 -153
  16. package/dist/lifecycle-workflow-steps.d.mts +2 -2
  17. package/dist/lifecycle-workflow-steps.d.ts +2 -2
  18. package/dist/lifecycle-workflow.d.mts +2 -2
  19. package/dist/lifecycle-workflow.d.ts +2 -2
  20. package/dist/{local-KJ3BSIFJ.mjs → local-4C3V4EFS.mjs} +1 -1
  21. package/dist/next/loader.js +6 -3
  22. package/dist/next/loader.mjs +1 -1
  23. package/dist/next.js +10 -4
  24. package/dist/next.mjs +6 -3
  25. package/dist/sandbox.d.mts +3 -3
  26. package/dist/sandbox.d.ts +3 -3
  27. package/dist/sandbox.js +15 -5
  28. package/dist/sandbox.mjs +3 -3
  29. package/dist/{steps-BnkRQKlc.d.ts → steps-XA4wG8W3.d.ts} +4 -1
  30. package/dist/{steps-u-mGDbP_.d.mts → steps-eTytqxQb.d.mts} +4 -1
  31. package/dist/storage.d.mts +9 -3
  32. package/dist/storage.d.ts +9 -3
  33. package/dist/storage.js +161 -9
  34. package/dist/storage.mjs +5 -1
  35. package/dist/{vercel-QZ6INPMV.mjs → vercel-6ORAC625.mjs} +1 -1
  36. package/package.json +5 -2
  37. package/dist/chunk-BFFNCESS.mjs +0 -302
  38. package/dist/chunk-DOD4MC5D.mjs +0 -196
  39. package/dist/entry-BmQ8FO-5.d.ts +0 -36
  40. package/dist/entry-CZd9aAwn.d.mts +0 -36
package/dist/storage.js CHANGED
@@ -31,7 +31,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var entry_exports = {};
32
32
  __export(entry_exports, {
33
33
  StorageStep: () => StorageStep,
34
+ kvStorageFallback: () => kvStorageFallback,
34
35
  localStorage: () => localStorage,
36
+ shouldFallbackToKV2: () => shouldFallbackToKV2,
35
37
  toStorage: () => toStorage
36
38
  });
37
39
  module.exports = __toCommonJS(entry_exports);
@@ -119,6 +121,131 @@ function toStorage(h) {
119
121
  return isStepFunction(h) ? fromStepFunction(h) : fromHandlers(h);
120
122
  }
121
123
 
124
+ // src/storage/bindings/kv.ts
125
+ async function initKvStores(prefix) {
126
+ const { createKV } = await import("@vercel/kv2");
127
+ const kv = createKV({ prefix }).getStore("agent/");
128
+ return {
129
+ sessions: kv.getStore("session/"),
130
+ messages: kv.getStore("message/").withIndexes({
131
+ bySessionId: { key: (m) => m.sessionId }
132
+ }),
133
+ parts: kv.getStore("part/").withIndexes({
134
+ bySessionId: { key: (p) => p.sessionId }
135
+ }),
136
+ sandboxes: kv.getStore("sandbox/"),
137
+ setups: kv.getStore("setup/")
138
+ };
139
+ }
140
+ function kvStorageFallback(opts) {
141
+ let storesPromise;
142
+ function getStores() {
143
+ if (!storesPromise) {
144
+ storesPromise = initKvStores(opts.prefix);
145
+ }
146
+ return storesPromise;
147
+ }
148
+ const tag = `[agent.${opts.prefix}][kv2]`;
149
+ return {
150
+ "session.get": async ({ id }) => {
151
+ const { sessions } = await getStores();
152
+ return await sessions.getValue(id) ?? null;
153
+ },
154
+ "session.set": async ({ id, value }) => {
155
+ const { sessions } = await getStores();
156
+ await sessions.set(id, value);
157
+ },
158
+ "session.update": async ({ id, updates }) => {
159
+ const { sessions } = await getStores();
160
+ const existing = await sessions.getValue(id);
161
+ if (!existing) {
162
+ throw new Error(
163
+ `${tag}[session.update] no session found with id "${id}"`
164
+ );
165
+ }
166
+ const updated = { ...existing, ...updates };
167
+ await sessions.set(id, updated);
168
+ return updated;
169
+ },
170
+ "message.get": async ({ id }) => {
171
+ const { messages } = await getStores();
172
+ return await messages.getValue(id) ?? null;
173
+ },
174
+ "message.set": async ({ id, value }) => {
175
+ const { messages } = await getStores();
176
+ await messages.set(id, value);
177
+ },
178
+ "message.update": async ({ id, updates }) => {
179
+ const { messages } = await getStores();
180
+ const existing = await messages.getValue(id);
181
+ if (!existing) {
182
+ throw new Error(
183
+ `${tag}[message.update] no message found with id "${id}"`
184
+ );
185
+ }
186
+ const updated = { ...existing, ...updates };
187
+ await messages.set(id, updated);
188
+ return updated;
189
+ },
190
+ "message.listBySession": async ({ sessionId }) => {
191
+ const { messages } = await getStores();
192
+ const result = [];
193
+ for await (const [, entry] of messages.entries({
194
+ bySessionId: sessionId
195
+ })) {
196
+ result.push(await entry.value);
197
+ }
198
+ return result;
199
+ },
200
+ "part.get": async ({ id }) => {
201
+ const { parts } = await getStores();
202
+ return await parts.getValue(id) ?? null;
203
+ },
204
+ "part.set": async ({ id, value }) => {
205
+ const { parts } = await getStores();
206
+ await parts.set(id, value);
207
+ },
208
+ "part.listBySession": async ({ sessionId }) => {
209
+ const { parts } = await getStores();
210
+ const result = [];
211
+ for await (const [, entry] of parts.entries({
212
+ bySessionId: sessionId
213
+ })) {
214
+ result.push(await entry.value);
215
+ }
216
+ return result;
217
+ },
218
+ "sandbox.get": async ({ id }) => {
219
+ const { sandboxes } = await getStores();
220
+ return await sandboxes.getValue(id) ?? null;
221
+ },
222
+ "sandbox.set": async ({ id, value }) => {
223
+ const { sandboxes } = await getStores();
224
+ await sandboxes.set(id, value);
225
+ },
226
+ "sandbox.update": async ({ id, updates }) => {
227
+ const { sandboxes } = await getStores();
228
+ const existing = await sandboxes.getValue(id);
229
+ if (!existing) {
230
+ throw new Error(
231
+ `${tag}[sandbox.update] no sandbox found with id "${id}"`
232
+ );
233
+ }
234
+ const updated = { ...existing, ...updates };
235
+ await sandboxes.set(id, updated);
236
+ return updated;
237
+ },
238
+ "setup.get": async ({ id }) => {
239
+ const { setups } = await getStores();
240
+ return await setups.getValue(id) ?? null;
241
+ },
242
+ "setup.set": async ({ id, value }) => {
243
+ const { setups } = await getStores();
244
+ await setups.set(id, value);
245
+ }
246
+ };
247
+ }
248
+
122
249
  // src/storage/bindings/local.ts
123
250
  var _fs;
124
251
  var _path;
@@ -192,8 +319,20 @@ async function readAllFromDir(dir) {
192
319
  }
193
320
  return result;
194
321
  }
322
+ async function ensureGitignore(dir) {
323
+ const { mkdir, writeFile, readFile } = await fs();
324
+ const { join } = await path();
325
+ const gitignorePath = join(dir, ".gitignore");
326
+ try {
327
+ await readFile(gitignorePath, "utf-8");
328
+ } catch {
329
+ await mkdir(dir, { recursive: true });
330
+ await writeFile(gitignorePath, "*\n");
331
+ }
332
+ }
195
333
  function localStorage(opts) {
196
334
  const dir = opts?.dir ?? ".agent";
335
+ let gitignorePromise = null;
197
336
  const sessionStore = createStore(`${dir}/session`);
198
337
  const messageStore = createStore(`${dir}/message`);
199
338
  const partStore = createStore(`${dir}/part`);
@@ -201,34 +340,47 @@ function localStorage(opts) {
201
340
  const setupStore = createStore(`${dir}/setup`);
202
341
  const messageDir = `${dir}/message`;
203
342
  const partDir = `${dir}/part`;
343
+ function onWrite(fn) {
344
+ if (!gitignorePromise) {
345
+ gitignorePromise = ensureGitignore(dir);
346
+ }
347
+ return gitignorePromise.then(fn);
348
+ }
204
349
  return {
205
350
  "session.get": ({ id }) => sessionStore.get(id),
206
- "session.set": ({ id, value }) => sessionStore.set(id, value),
207
- "session.update": ({ id, updates }) => sessionStore.update(id, updates),
351
+ "session.set": ({ id, value }) => onWrite(() => sessionStore.set(id, value)),
352
+ "session.update": ({ id, updates }) => onWrite(() => sessionStore.update(id, updates)),
208
353
  "message.get": ({ id }) => messageStore.get(id),
209
- "message.set": ({ id, value }) => messageStore.set(id, value),
210
- "message.update": ({ id, updates }) => messageStore.update(id, updates),
354
+ "message.set": ({ id, value }) => onWrite(() => messageStore.set(id, value)),
355
+ "message.update": ({ id, updates }) => onWrite(() => messageStore.update(id, updates)),
211
356
  "message.listBySession": async ({ sessionId }) => {
212
357
  const all = await readAllFromDir(messageDir);
213
358
  return all.filter((m) => m.sessionId === sessionId);
214
359
  },
215
360
  "part.get": ({ id }) => partStore.get(id),
216
- "part.set": ({ id, value }) => partStore.set(id, value),
361
+ "part.set": ({ id, value }) => onWrite(() => partStore.set(id, value)),
217
362
  "part.listBySession": async ({ sessionId }) => {
218
363
  const all = await readAllFromDir(partDir);
219
364
  return all.filter((p) => p.sessionId === sessionId);
220
365
  },
221
366
  "sandbox.get": ({ id }) => sandboxStore.get(id),
222
- "sandbox.set": ({ id, value }) => sandboxStore.set(id, value),
223
- "sandbox.update": ({ id, updates }) => sandboxStore.update(id, updates),
367
+ "sandbox.set": ({ id, value }) => onWrite(() => sandboxStore.set(id, value)),
368
+ "sandbox.update": ({ id, updates }) => onWrite(() => sandboxStore.update(id, updates)),
224
369
  "setup.get": ({ id }) => setupStore.get(id),
225
- "setup.set": ({ id, value }) => setupStore.set(id, value)
370
+ "setup.set": ({ id, value }) => onWrite(() => setupStore.set(id, value))
226
371
  };
227
372
  }
373
+
374
+ // src/storage/should-fallback-kv2.ts
375
+ function shouldFallbackToKV2() {
376
+ return !!process.env.BLOB_READ_WRITE_TOKEN;
377
+ }
228
378
  // Annotate the CommonJS export names for ESM import in node:
229
379
  0 && (module.exports = {
230
380
  StorageStep,
381
+ kvStorageFallback,
231
382
  localStorage,
383
+ shouldFallbackToKV2,
232
384
  toStorage
233
385
  });
234
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvZW50cnkudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUgeyBTdG9yYWdlLCBTdG9yYWdlQ2FsbCwgU3RvcmFnZUhhbmRsZXJzLCBTdG9yYWdlU3RlcEZ1bmN0aW9uIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0IHsgU3RvcmFnZVN0ZXAsIHRvU3RvcmFnZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCB7IGxvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2JpbmRpbmdzL2xvY2FsXCI7XG5leHBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwLCBTZXR1cFNuYXBzaG90IH0gZnJvbSBcIi4vdHlwZXNcIjtcbiIsICJpbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSBcIkB3b3JrZmxvdy9zZXJkZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlSGFuZGxlcnMgKHB1YmxpYywgZmxhdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VIYW5kbGVycyA9IHtcbiAgXCJzZXNzaW9uLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gIFwic2Vzc2lvbi5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXNzaW9uIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNlc3Npb24udXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPjtcbiAgfSk6IFByb21pc2U8U2Vzc2lvbj47XG5cbiAgXCJtZXNzYWdlLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gIFwibWVzc2FnZS5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBNZXNzYWdlIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcIm1lc3NhZ2UudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPjtcbiAgfSk6IFByb21pc2U8TWVzc2FnZT47XG4gIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlW10+O1xuXG4gIFwicGFydC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICBcInBhcnQuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogUGFydCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnRbXT47XG5cbiAgXCJzYW5kYm94LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gIFwic2FuZGJveC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTYW5kYm94IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNhbmRib3gudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTYW5kYm94PjtcbiAgfSk6IFByb21pc2U8U2FuZGJveD47XG5cbiAgXCJzZXR1cC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgXCJzZXR1cC5zZXRcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB2YWx1ZTogU2V0dXA7XG4gIH0pOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VDYWxsIChkZXJpdmVkIGZyb20gU3RvcmFnZUhhbmRsZXJzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUNhbGwgPSB7XG4gIFtLIGluIGtleW9mIFN0b3JhZ2VIYW5kbGVyc106IHsgbWV0aG9kOiBLIH0gJiBQYXJhbWV0ZXJzPFxuICAgIFN0b3JhZ2VIYW5kbGVyc1tLXVxuICA+WzBdO1xufVtrZXlvZiBTdG9yYWdlSGFuZGxlcnNdO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZVN0ZXAgKHNlcmlhbGl6YWJsZSBhY3Jvc3Mgd29ya2Zsb3cgYm91bmRhcnkpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZVN0ZXAge1xuICBldmVudDogU3RvcmFnZUNhbGw7XG5cbiAgY29uc3RydWN0b3IoZXZlbnQ6IFN0b3JhZ2VDYWxsKSB7XG4gICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBTdG9yYWdlU3RlcCkge1xuICAgIHJldHVybiB7IGV2ZW50OiBpbnN0YW5jZS5ldmVudCB9O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oZGF0YTogeyBldmVudDogU3RvcmFnZUNhbGwgfSkge1xuICAgIHJldHVybiBuZXcgU3RvcmFnZVN0ZXAoZGF0YS5ldmVudCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNhZmUgZGlzcGF0Y2ggXHUyMDE0IGV2ZW50Lm1ldGhvZCBzZWxlY3RzIHRoZSBtYXRjaGluZyBoYW5kbGVyXG4gIG9uKGhhbmRsZXJzOiBTdG9yYWdlSGFuZGxlcnMpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc2VlIGFib3ZlXG4gICAgcmV0dXJuIChoYW5kbGVyc1t0aGlzLmV2ZW50Lm1ldGhvZF0gYXMgYW55KSh0aGlzLmV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2luZ2xlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgc3RvcmFnZSBvcGVyYXRpb25zLiBJbnRlbmRlZCB0byBiZVxuICogbWFya2VkIHdpdGggYFwidXNlIHN0ZXBcImAgc28gdGhhdCBpdHMgYm9keSAoYW5kIE5vZGUuanMtZGVwZW5kZW50XG4gKiBpbXBvcnRzIGxpa2UgZGF0YWJhc2UgY2xpZW50cykgaXMgZXh0cmFjdGVkIGJ5IHRoZSB3b3JrZmxvdyBidW5kbGVyXG4gKiBhbmQgcnVucyBzZXJ2ZXItc2lkZS5cbiAqXG4gKiBUaGUgc3RlcCByZWNlaXZlcyBhIGBTdG9yYWdlU3RlcGAgaW5zdGFuY2UgKHNlcmlhbGl6YWJsZSB2aWFcbiAqIGBAd29ya2Zsb3cvc2VyZGVgKSBhbmQgc2hvdWxkIGNhbGwgYHN0ZXAuaGFuZGxlKHsgLi4uIH0pYCB3aXRoIGFcbiAqIGBTdG9yYWdlSGFuZGxlcnNgIG1hcC5cbiAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzdGVwIGZ1bmN0aW9uIGlzIGEgZGlzcGF0Y2hlcjsgdHlwZSBzYWZldHkgaXMgYXQgdGhlIGhhbmRsZXJzIGxldmVsXG5leHBvcnQgdHlwZSBTdG9yYWdlU3RlcEZ1bmN0aW9uID0gKHN0b3JlOiBTdG9yYWdlU3RlcCkgPT4gUHJvbWlzZTxhbnk+O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZSAoaW50ZXJuYWwsIG5lc3RlZCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZSB7XG4gIHNlc3Npb246IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb24gfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj4pOiBQcm9taXNlPFNlc3Npb24+O1xuICB9O1xuICBtZXNzYWdlOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogTWVzc2FnZSk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPE1lc3NhZ2U+KTogUHJvbWlzZTxNZXNzYWdlPjtcbiAgICBsaXN0QnlTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlW10+O1xuICB9O1xuICBwYXJ0OiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxQYXJ0IHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogUGFydCk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UGFydFtdPjtcbiAgfTtcbiAgc2FuZGJveDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNhbmRib3gpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxTYW5kYm94Pik6IFByb21pc2U8U2FuZGJveD47XG4gIH07XG4gIHNldHVwOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXR1cCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNldHVwKTogUHJvbWlzZTx2b2lkPjtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU3RvcmFnZUlucHV0ID0gU3RvcmFnZUhhbmRsZXJzIHwgU3RvcmFnZVN0ZXBGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNTdGVwRnVuY3Rpb24oaDogU3RvcmFnZUlucHV0KTogaCBpcyBTdG9yYWdlU3RlcEZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBoID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGZyb21TdGVwRnVuY3Rpb24oZm46IFN0b3JhZ2VTdGVwRnVuY3Rpb24pOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24udXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXR1cC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZnJvbUhhbmRsZXJzKGg6IFN0b3JhZ2VIYW5kbGVycyk6IFN0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2Vzc2lvbi5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNlc3Npb24uc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzZXNzaW9uLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJtZXNzYWdlLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wibWVzc2FnZS5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcIm1lc3NhZ2UudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wibWVzc2FnZS5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJwYXJ0LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wicGFydC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wicGFydC5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzYW5kYm94LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2FuZGJveC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcInNhbmRib3gudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzZXR1cC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNldHVwLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdG9yYWdlKGg6IFN0b3JhZ2VJbnB1dCk6IFN0b3JhZ2Uge1xuICByZXR1cm4gaXNTdGVwRnVuY3Rpb24oaCkgPyBmcm9tU3RlcEZ1bmN0aW9uKGgpIDogZnJvbUhhbmRsZXJzKGgpO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgTWVzc2FnZSxcbiAgUGFydCxcbiAgU2FuZGJveCxcbiAgU2Vzc2lvbixcbiAgU2V0dXAsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5sZXQgX2ZzOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKSB8IHVuZGVmaW5lZDtcbmxldCBfcGF0aDogdHlwZW9mIGltcG9ydChcIm5vZGU6cGF0aFwiKSB8IHVuZGVmaW5lZDtcblxuYXN5bmMgZnVuY3Rpb24gZnMoKSB7XG4gIGlmICghX2ZzKSB7XG4gICAgX2ZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgfVxuICByZXR1cm4gX2ZzO1xufVxuYXN5bmMgZnVuY3Rpb24gcGF0aCgpIHtcbiAgaWYgKCFfcGF0aCkge1xuICAgIF9wYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICB9XG4gIHJldHVybiBfcGF0aDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8VD4oZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+XG4gICAgKGF3YWl0IHBhdGgoKSkuam9pbihkaXIsIGAke2tleX0uanNvbmApO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmcygpKS5yZWFkRmlsZShhd2FpdCBmaWxlUGF0aChrZXkpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XG4gICAgfSxcbiAgICBhc3luYyB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyByZWFkRmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgbGV0IGV4aXN0aW5nOiBUO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHAsIFwidXRmLThcIik7XG4gICAgICAgIGV4aXN0aW5nID0gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGZvdW5kOiAke2tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoZGF0YSkgYXMgVCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBza2lwIGNvcnJ1cHQgZmlsZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZShvcHRzPzogeyBkaXI/OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGNvbnN0IGRpciA9IG9wdHM/LmRpciA/PyBcIi5hZ2VudFwiO1xuXG4gIGNvbnN0IHNlc3Npb25TdG9yZSA9IGNyZWF0ZVN0b3JlPFNlc3Npb24+KGAke2Rpcn0vc2Vzc2lvbmApO1xuICBjb25zdCBtZXNzYWdlU3RvcmUgPSBjcmVhdGVTdG9yZTxNZXNzYWdlPihgJHtkaXJ9L21lc3NhZ2VgKTtcbiAgY29uc3QgcGFydFN0b3JlID0gY3JlYXRlU3RvcmU8UGFydD4oYCR7ZGlyfS9wYXJ0YCk7XG4gIGNvbnN0IHNhbmRib3hTdG9yZSA9IGNyZWF0ZVN0b3JlPFNhbmRib3g+KGAke2Rpcn0vc2FuZGJveGApO1xuICBjb25zdCBzZXR1cFN0b3JlID0gY3JlYXRlU3RvcmU8U2V0dXA+KGAke2Rpcn0vc2V0dXBgKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGAke2Rpcn0vbWVzc2FnZWA7XG4gIGNvbnN0IHBhcnREaXIgPSBgJHtkaXJ9L3BhcnRgO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiAoeyBpZCB9KSA9PiBzZXNzaW9uU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNlc3Npb24uc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBzZXNzaW9uU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PiBzZXNzaW9uU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogKHsgaWQgfSkgPT4gbWVzc2FnZVN0b3JlLmdldChpZCksXG4gICAgXCJtZXNzYWdlLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gbWVzc2FnZVN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwibWVzc2FnZS51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gbWVzc2FnZVN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPE1lc3NhZ2U+KG1lc3NhZ2VEaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6ICh7IGlkIH0pID0+IHBhcnRTdG9yZS5nZXQoaWQpLFxuICAgIFwicGFydC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHBhcnRTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigocCkgPT4gcC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogKHsgaWQgfSkgPT4gc2FuZGJveFN0b3JlLmdldChpZCksXG4gICAgXCJzYW5kYm94LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gc2FuZGJveFN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwic2FuZGJveC51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gc2FuZGJveFN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG5cbiAgICBcInNldHVwLmdldFwiOiAoeyBpZCB9KSA9PiBzZXR1cFN0b3JlLmdldChpZCksXG4gICAgXCJzZXR1cC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHNldHVwU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsbUJBQXlEO0FBaURsRCxJQUFNLGNBQU4sTUFBTSxhQUFZO0FBQUEsRUFDdkI7QUFBQSxFQUVBLFlBQVksT0FBb0I7QUFDOUIsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsUUFBUSwrQkFBa0IsRUFBRSxVQUF1QjtBQUNqRCxXQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU07QUFBQSxFQUNqQztBQUFBLEVBRUEsUUFBUSxpQ0FBb0IsRUFBRSxNQUE4QjtBQUMxRCxXQUFPLElBQUksYUFBWSxLQUFLLEtBQUs7QUFBQSxFQUNuQztBQUFBO0FBQUEsRUFHQSxHQUFHLFVBQXlDO0FBRTFDLFdBQVEsU0FBUyxLQUFLLE1BQU0sTUFBTSxFQUFVLEtBQUssS0FBSztBQUFBLEVBQ3hEO0FBQ0Y7QUErQ0EsU0FBUyxlQUFlLEdBQTJDO0FBQ2pFLFNBQU8sT0FBTyxNQUFNO0FBQ3RCO0FBRUEsU0FBUyxpQkFBaUIsSUFBa0M7QUFDMUQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFBQSxNQUM5RCxLQUFLLENB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
386
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvZW50cnkudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9rdi50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc3RvcmFnZS9zaG91bGQtZmFsbGJhY2sta3YyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgdHlwZSB7XG4gIFN0b3JhZ2UsXG4gIFN0b3JhZ2VDYWxsLFxuICBTdG9yYWdlSGFuZGxlcnMsXG4gIFN0b3JhZ2VTdGVwRnVuY3Rpb24sXG59IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCB7IFN0b3JhZ2VTdGVwLCB0b1N0b3JhZ2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5leHBvcnQgeyBrdlN0b3JhZ2VGYWxsYmFjayB9IGZyb20gXCIuL2JpbmRpbmdzL2t2XCI7XG5leHBvcnQgeyBsb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi9iaW5kaW5ncy9sb2NhbFwiO1xuZXhwb3J0IHsgc2hvdWxkRmFsbGJhY2tUb0tWMiB9IGZyb20gXCIuL3Nob3VsZC1mYWxsYmFjay1rdjJcIjtcbmV4cG9ydCB0eXBlIHtcbiAgR2VuZXJhdGlvbk9wdGlvbnMsXG4gIE1lc3NhZ2UsXG4gIE1lc3NhZ2VVc2FnZSxcbiAgUGFydCxcbiAgU2FuZGJveCxcbiAgU2Vzc2lvbixcbiAgU2V0dXAsXG4gIFNldHVwU25hcHNob3QsXG59IGZyb20gXCIuL3R5cGVzXCI7XG4iLCAiaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZUhhbmRsZXJzIChwdWJsaWMsIGZsYXQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTdG9yYWdlSGFuZGxlcnMgPSB7XG4gIFwic2Vzc2lvbi5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2Vzc2lvbiB8IG51bGw+O1xuICBcInNlc3Npb24uc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2Vzc2lvbiB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzZXNzaW9uLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj47XG4gIH0pOiBQcm9taXNlPFNlc3Npb24+O1xuXG4gIFwibWVzc2FnZS5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICBcIm1lc3NhZ2Uuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogTWVzc2FnZSB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJtZXNzYWdlLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8TWVzc2FnZT47XG4gIH0pOiBQcm9taXNlPE1lc3NhZ2U+O1xuICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiKHA6IHsgc2Vzc2lvbklkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZVtdPjtcblxuICBcInBhcnQuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnQgfCBudWxsPjtcbiAgXCJwYXJ0LnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFBhcnQgfSk6IFByb21pc2U8dm9pZD47XG4gIFwicGFydC5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxQYXJ0W10+O1xuXG4gIFwic2FuZGJveC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICBcInNhbmRib3guc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2FuZGJveCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzYW5kYm94LnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD47XG4gIH0pOiBQcm9taXNlPFNhbmRib3g+O1xuXG4gIFwic2V0dXAuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNldHVwIHwgbnVsbD47XG4gIFwic2V0dXAuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2V0dXAgfSk6IFByb21pc2U8dm9pZD47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZUNhbGwgKGRlcml2ZWQgZnJvbSBTdG9yYWdlSGFuZGxlcnMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTdG9yYWdlQ2FsbCA9IHtcbiAgW0sgaW4ga2V5b2YgU3RvcmFnZUhhbmRsZXJzXTogeyBtZXRob2Q6IEsgfSAmIFBhcmFtZXRlcnM8XG4gICAgU3RvcmFnZUhhbmRsZXJzW0tdXG4gID5bMF07XG59W2tleW9mIFN0b3JhZ2VIYW5kbGVyc107XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlU3RlcCAoc2VyaWFsaXphYmxlIGFjcm9zcyB3b3JrZmxvdyBib3VuZGFyeSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlU3RlcCB7XG4gIGV2ZW50OiBTdG9yYWdlQ2FsbDtcblxuICBjb25zdHJ1Y3RvcihldmVudDogU3RvcmFnZUNhbGwpIHtcbiAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2U6IFN0b3JhZ2VTdGVwKSB7XG4gICAgcmV0dXJuIHsgZXZlbnQ6IGluc3RhbmNlLmV2ZW50IH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7IGV2ZW50OiBTdG9yYWdlQ2FsbCB9KSB7XG4gICAgcmV0dXJuIG5ldyBTdG9yYWdlU3RlcChkYXRhLmV2ZW50KTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc2FmZSBkaXNwYXRjaCBcdTIwMTQgZXZlbnQubWV0aG9kIHNlbGVjdHMgdGhlIG1hdGNoaW5nIGhhbmRsZXJcbiAgb24oaGFuZGxlcnM6IFN0b3JhZ2VIYW5kbGVycyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzZWUgYWJvdmVcbiAgICByZXR1cm4gKGhhbmRsZXJzW3RoaXMuZXZlbnQubWV0aG9kXSBhcyBhbnkpKHRoaXMuZXZlbnQpO1xuICB9XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGFsbCBzdG9yYWdlIG9wZXJhdGlvbnMuIEludGVuZGVkIHRvIGJlXG4gKiBtYXJrZWQgd2l0aCBgXCJ1c2Ugc3RlcFwiYCBzbyB0aGF0IGl0cyBib2R5IChhbmQgTm9kZS5qcy1kZXBlbmRlbnRcbiAqIGltcG9ydHMgbGlrZSBkYXRhYmFzZSBjbGllbnRzKSBpcyBleHRyYWN0ZWQgYnkgdGhlIHdvcmtmbG93IGJ1bmRsZXJcbiAqIGFuZCBydW5zIHNlcnZlci1zaWRlLlxuICpcbiAqIFRoZSBzdGVwIHJlY2VpdmVzIGEgYFN0b3JhZ2VTdGVwYCBpbnN0YW5jZSAoc2VyaWFsaXphYmxlIHZpYVxuICogYEB3b3JrZmxvdy9zZXJkZWApIGFuZCBzaG91bGQgY2FsbCBgc3RlcC5oYW5kbGUoeyAuLi4gfSlgIHdpdGggYVxuICogYFN0b3JhZ2VIYW5kbGVyc2AgbWFwLlxuICovXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHN0ZXAgZnVuY3Rpb24gaXMgYSBkaXNwYXRjaGVyOyB0eXBlIHNhZmV0eSBpcyBhdCB0aGUgaGFuZGxlcnMgbGV2ZWxcbmV4cG9ydCB0eXBlIFN0b3JhZ2VTdGVwRnVuY3Rpb24gPSAoc3RvcmU6IFN0b3JhZ2VTdGVwKSA9PiBQcm9taXNlPGFueT47XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlIChpbnRlcm5hbCwgbmVzdGVkKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlIHtcbiAgc2Vzc2lvbjoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvbiB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNlc3Npb24pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPik6IFByb21pc2U8U2Vzc2lvbj47XG4gIH07XG4gIG1lc3NhZ2U6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2UgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBNZXNzYWdlKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8TWVzc2FnZT4pOiBQcm9taXNlPE1lc3NhZ2U+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VbXT47XG4gIH07XG4gIHBhcnQ6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFBhcnQgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBQYXJ0KTogUHJvbWlzZTx2b2lkPjtcbiAgICBsaXN0QnlTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxQYXJ0W10+O1xuICB9O1xuICBzYW5kYm94OiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2FuZGJveCk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNhbmRib3g+KTogUHJvbWlzZTxTYW5kYm94PjtcbiAgfTtcbiAgc2V0dXA6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNldHVwIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2V0dXApOiBQcm9taXNlPHZvaWQ+O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTdG9yYWdlSW5wdXQgPSBTdG9yYWdlSGFuZGxlcnMgfCBTdG9yYWdlU3RlcEZ1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1N0ZXBGdW5jdGlvbihoOiBTdG9yYWdlSW5wdXQpOiBoIGlzIFN0b3JhZ2VTdGVwRnVuY3Rpb24ge1xuICByZXR1cm4gdHlwZW9mIGggPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZnVuY3Rpb24gZnJvbVN0ZXBGdW5jdGlvbihmbjogU3RvcmFnZVN0ZXBGdW5jdGlvbik6IFN0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2Vzc2lvbi5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2Vzc2lvbi5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2Vzc2lvbi51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIsIHNlc3Npb25JZCB9KSksXG4gICAgfSxcbiAgICBwYXJ0OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5saXN0QnlTZXNzaW9uXCIsIHNlc3Npb25JZCB9KSksXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNhbmRib3guZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNhbmRib3guc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNhbmRib3gudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICB9LFxuICAgIHNldHVwOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXR1cC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tSGFuZGxlcnMoaDogU3RvcmFnZUhhbmRsZXJzKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzZXNzaW9uLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2Vzc2lvbi5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcInNlc3Npb24udXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcIm1lc3NhZ2UuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJtZXNzYWdlLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wibWVzc2FnZS51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+IGhbXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIl0oeyBzZXNzaW9uSWQgfSksXG4gICAgfSxcbiAgICBwYXJ0OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInBhcnQuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJwYXJ0LnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+IGhbXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIl0oeyBzZXNzaW9uSWQgfSksXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNhbmRib3guZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzYW5kYm94LnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2FuZGJveC51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIHNldHVwOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNldHVwLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2V0dXAuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0b3JhZ2UoaDogU3RvcmFnZUlucHV0KTogU3RvcmFnZSB7XG4gIHJldHVybiBpc1N0ZXBGdW5jdGlvbihoKSA/IGZyb21TdGVwRnVuY3Rpb24oaCkgOiBmcm9tSGFuZGxlcnMoaCk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG50eXBlIEt2U3RvcmVzID0gQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBpbml0S3ZTdG9yZXM+PjtcblxuYXN5bmMgZnVuY3Rpb24gaW5pdEt2U3RvcmVzKHByZWZpeDogc3RyaW5nKSB7XG4gIGNvbnN0IHsgY3JlYXRlS1YgfSA9IGF3YWl0IGltcG9ydChcIkB2ZXJjZWwva3YyXCIpO1xuICBjb25zdCBrdiA9IGNyZWF0ZUtWKHsgcHJlZml4IH0pLmdldFN0b3JlKFwiYWdlbnQvXCIpO1xuXG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbnM6IGt2LmdldFN0b3JlPFNlc3Npb24+KFwic2Vzc2lvbi9cIiksXG4gICAgbWVzc2FnZXM6IGt2LmdldFN0b3JlPE1lc3NhZ2U+KFwibWVzc2FnZS9cIikud2l0aEluZGV4ZXMoe1xuICAgICAgYnlTZXNzaW9uSWQ6IHsga2V5OiAobTogTWVzc2FnZSkgPT4gbS5zZXNzaW9uSWQgfSxcbiAgICB9KSxcbiAgICBwYXJ0czoga3YuZ2V0U3RvcmU8UGFydD4oXCJwYXJ0L1wiKS53aXRoSW5kZXhlcyh7XG4gICAgICBieVNlc3Npb25JZDogeyBrZXk6IChwOiBQYXJ0KSA9PiBwLnNlc3Npb25JZCB9LFxuICAgIH0pLFxuICAgIHNhbmRib3hlczoga3YuZ2V0U3RvcmU8U2FuZGJveD4oXCJzYW5kYm94L1wiKSxcbiAgICBzZXR1cHM6IGt2LmdldFN0b3JlPFNldHVwPihcInNldHVwL1wiKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGt2U3RvcmFnZUZhbGxiYWNrKG9wdHM6IHsgcHJlZml4OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGxldCBzdG9yZXNQcm9taXNlOiBQcm9taXNlPEt2U3RvcmVzPiB8IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiBnZXRTdG9yZXMoKSB7XG4gICAgaWYgKCFzdG9yZXNQcm9taXNlKSB7XG4gICAgICBzdG9yZXNQcm9taXNlID0gaW5pdEt2U3RvcmVzKG9wdHMucHJlZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3Jlc1Byb21pc2U7XG4gIH1cblxuICBjb25zdCB0YWcgPSBgW2FnZW50LiR7b3B0cy5wcmVmaXh9XVtrdjJdYDtcblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9ucyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHNlc3Npb25zLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9ucyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBzZXNzaW9ucy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgc2Vzc2lvbnMuZ2V0VmFsdWUoaWQpO1xuICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGFnfVtzZXNzaW9uLnVwZGF0ZV0gbm8gc2Vzc2lvbiBmb3VuZCB3aXRoIGlkIFwiJHtpZH1cImBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICBhd2FpdCBzZXNzaW9ucy5zZXQoaWQsIHVwZGF0ZWQpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IG1lc3NhZ2VzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBtZXNzYWdlcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgbWVzc2FnZXMuZ2V0VmFsdWUoaWQpO1xuICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGFnfVttZXNzYWdlLnVwZGF0ZV0gbm8gbWVzc2FnZSBmb3VuZCB3aXRoIGlkIFwiJHtpZH1cImBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICBhd2FpdCBtZXNzYWdlcy5zZXQoaWQsIHVwZGF0ZWQpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IHJlc3VsdDogTWVzc2FnZVtdID0gW107XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFssIGVudHJ5XSBvZiBtZXNzYWdlcy5lbnRyaWVzKHtcbiAgICAgICAgYnlTZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGF3YWl0IGVudHJ5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIFwicGFydC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHBhcnRzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBwYXJ0cy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgcGFydHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgcmVzdWx0OiBQYXJ0W10gPSBbXTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgWywgZW50cnldIG9mIHBhcnRzLmVudHJpZXMoe1xuICAgICAgICBieVNlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXdhaXQgZW50cnkudmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHNhbmRib3hlcy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNhbmRib3hlcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHNhbmRib3hlcy5nZXRWYWx1ZShpZCk7XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0YWd9W3NhbmRib3gudXBkYXRlXSBubyBzYW5kYm94IGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnVwZGF0ZXMgfTtcbiAgICAgIGF3YWl0IHNhbmRib3hlcy5zZXQoaWQsIHVwZGF0ZWQpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSxcblxuICAgIFwic2V0dXAuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2V0dXBzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2V0dXBzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzZXR1cC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2V0dXBzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNldHVwcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgU3RvcmFnZUhhbmRsZXJzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxubGV0IF9mczogdHlwZW9mIGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIikgfCB1bmRlZmluZWQ7XG5sZXQgX3BhdGg6IHR5cGVvZiBpbXBvcnQoXCJub2RlOnBhdGhcIikgfCB1bmRlZmluZWQ7XG5cbmFzeW5jIGZ1bmN0aW9uIGZzKCkge1xuICBpZiAoIV9mcykge1xuICAgIF9mcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gIH1cbiAgcmV0dXJuIF9mcztcbn1cbmFzeW5jIGZ1bmN0aW9uIHBhdGgoKSB7XG4gIGlmICghX3BhdGgpIHtcbiAgICBfcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgfVxuICByZXR1cm4gX3BhdGg7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQ+KGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXN5bmMgKGtleTogc3RyaW5nKSA9PlxuICAgIChhd2FpdCBwYXRoKCkpLmpvaW4oZGlyLCBgJHtrZXl9Lmpzb25gKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCAoYXdhaXQgZnMoKSkucmVhZEZpbGUoYXdhaXQgZmlsZVBhdGgoa2V5KSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyBta2Rpciwgd3JpdGVGaWxlIH0gPSBhd2FpdCBmcygpO1xuICAgICAgY29uc3QgeyBkaXJuYW1lIH0gPSBhd2FpdCBwYXRoKCk7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMikpO1xuICAgIH0sXG4gICAgYXN5bmMgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICBjb25zdCBwID0gYXdhaXQgZmlsZVBhdGgoa2V5KTtcbiAgICAgIGNvbnN0IHsgcmVhZEZpbGUsIG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGxldCBleGlzdGluZzogVDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwLCBcInV0Zi04XCIpO1xuICAgICAgICBleGlzdGluZyA9IEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBmb3VuZDogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4udXBkYXRlcyB9O1xuICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUocCwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCwgbnVsbCwgMikpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEZyb21EaXI8VD4oZGlyOiBzdHJpbmcpOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCB7IHJlYWRkaXIsIHJlYWRGaWxlIH0gPSBhd2FpdCBmcygpO1xuICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IHBhdGgoKTtcbiAgbGV0IGZpbGVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBmaWxlcyA9IGF3YWl0IHJlYWRkaXIoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShqb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XG4gICAgICByZXN1bHQucHVzaChKU09OLnBhcnNlKGRhdGEpIGFzIFQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc2tpcCBjb3JydXB0IGZpbGVzXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUdpdGlnbm9yZShkaXI6IHN0cmluZykge1xuICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUsIHJlYWRGaWxlIH0gPSBhd2FpdCBmcygpO1xuICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IHBhdGgoKTtcbiAgY29uc3QgZ2l0aWdub3JlUGF0aCA9IGpvaW4oZGlyLCBcIi5naXRpZ25vcmVcIik7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVhZEZpbGUoZ2l0aWdub3JlUGF0aCwgXCJ1dGYtOFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoZ2l0aWdub3JlUGF0aCwgXCIqXFxuXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbFN0b3JhZ2Uob3B0cz86IHsgZGlyPzogc3RyaW5nIH0pOiBTdG9yYWdlSGFuZGxlcnMge1xuICBjb25zdCBkaXIgPSBvcHRzPy5kaXIgPz8gXCIuYWdlbnRcIjtcbiAgbGV0IGdpdGlnbm9yZVByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBzZXNzaW9uU3RvcmUgPSBjcmVhdGVTdG9yZTxTZXNzaW9uPihgJHtkaXJ9L3Nlc3Npb25gKTtcbiAgY29uc3QgbWVzc2FnZVN0b3JlID0gY3JlYXRlU3RvcmU8TWVzc2FnZT4oYCR7ZGlyfS9tZXNzYWdlYCk7XG4gIGNvbnN0IHBhcnRTdG9yZSA9IGNyZWF0ZVN0b3JlPFBhcnQ+KGAke2Rpcn0vcGFydGApO1xuICBjb25zdCBzYW5kYm94U3RvcmUgPSBjcmVhdGVTdG9yZTxTYW5kYm94PihgJHtkaXJ9L3NhbmRib3hgKTtcbiAgY29uc3Qgc2V0dXBTdG9yZSA9IGNyZWF0ZVN0b3JlPFNldHVwPihgJHtkaXJ9L3NldHVwYCk7XG4gIGNvbnN0IG1lc3NhZ2VEaXIgPSBgJHtkaXJ9L21lc3NhZ2VgO1xuICBjb25zdCBwYXJ0RGlyID0gYCR7ZGlyfS9wYXJ0YDtcblxuICBmdW5jdGlvbiBvbldyaXRlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFnaXRpZ25vcmVQcm9taXNlKSB7XG4gICAgICBnaXRpZ25vcmVQcm9taXNlID0gZW5zdXJlR2l0aWdub3JlKGRpcik7XG4gICAgfVxuICAgIHJldHVybiBnaXRpZ25vcmVQcm9taXNlLnRoZW4oZm4pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBcInNlc3Npb24uZ2V0XCI6ICh7IGlkIH0pID0+IHNlc3Npb25TdG9yZS5nZXQoaWQpLFxuICAgIFwic2Vzc2lvbi5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNlc3Npb25TdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzZXNzaW9uU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSksXG5cbiAgICBcIm1lc3NhZ2UuZ2V0XCI6ICh7IGlkIH0pID0+IG1lc3NhZ2VTdG9yZS5nZXQoaWQpLFxuICAgIFwibWVzc2FnZS5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IG1lc3NhZ2VTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJtZXNzYWdlLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBtZXNzYWdlU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSksXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPE1lc3NhZ2U+KG1lc3NhZ2VEaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6ICh7IGlkIH0pID0+IHBhcnRTdG9yZS5nZXQoaWQpLFxuICAgIFwicGFydC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IG9uV3JpdGUoKCkgPT4gcGFydFN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigocCkgPT4gcC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogKHsgaWQgfSkgPT4gc2FuZGJveFN0b3JlLmdldChpZCksXG4gICAgXCJzYW5kYm94LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2FuZGJveFN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcInNhbmRib3gudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNhbmRib3hTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcblxuICAgIFwic2V0dXAuZ2V0XCI6ICh7IGlkIH0pID0+IHNldHVwU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNldHVwLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gb25Xcml0ZSgoKSA9PiBzZXR1cFN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgfTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gc2hvdWxkRmFsbGJhY2tUb0tWMigpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcHJvY2Vzcy5lbnYuQkxPQl9SRUFEX1dSSVRFX1RPS0VOO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxtQkFBeUQ7QUE4Q2xELElBQU0sY0FBTixNQUFNLGFBQVk7QUFBQSxFQUN2QjtBQUFBLEVBRUEsWUFBWSxPQUFvQjtBQUM5QixTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxRQUFRLCtCQUFrQixFQUFFLFVBQXVCO0FBQ2pELFdBQU8sRUFBRSxPQUFPLFNBQVMsTUFBTTtBQUFBLEVBQ2pDO0FBQUEsRUFFQSxRQUFRLGlDQUFvQixFQUFFLE1BQThCO0FBQzFELFdBQU8sSUFBSSxhQUFZLEtBQUssS0FBSztBQUFBLEVBQ25DO0FBQUE7QUFBQSxFQUdBLEdBQUcsVUFBeUM7QUFFMUMsV0FBUSxTQUFTLEtBQUssTUFBTSxNQUFNLEVBQVUsS0FBSyxLQUFLO0FBQUEsRUFDeEQ7QUFDRjtBQStDQSxTQUFTLGVBQWUsR0FBMkM7QUFDakUsU0FBTyxPQUFPLE1BQU07QUFDdEI7QUFFQSxTQUFTLGlCQUFpQixJQUFrQztBQUMxRCxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsTUFDUCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzlELEtBQUssQ0FBQyxJQUFJLFVBQ1IsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQzFELFFBQVEsQ0FBQyxJQUFJLFlBQ1gsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQUEsSUFDakU7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQUEsTUFDOUQsS0FBSyxDQUFDLElBQUksVUFDUixHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsZUFBZSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQUEsTUFDMUQsUUFBUSxDQUFDLElBQUksWUFDWCxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsa0JBQWtCLElBQUksUUFBUSxDQUFDLENBQUM7QUFBQSxNQUMvRCxlQUFlLENBQUMsY0FDZCxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEseUJBQXlCLFVBQVUsQ0FBQyxDQUFDO0FBQUEsSUFDdEU7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNKLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQUEsTUFDM0QsS0FBSyxDQUFDLElBQUksVUFDUixHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsWUFBWSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQUEsTUFDdkQsZUFBZSxDQUFDLGNBQ2QsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLHNCQUFzQixVQUFVLENBQUMsQ0FBQztBQUFBLElBQ25FO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzlELEtBQUssQ0FBQyxJQUFJLFVBQ1IsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQzFELFFBQVEsQ0FBQyxJQUFJLFlBQ1gsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQUEsSUFDakU7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQUEsTUFDNUQsS0FBSyxDQUFDLElBQUksVUFDUixHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsYUFBYSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDMUQ7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGFBQWEsR0FBNkI7QUFDakQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUNwQyxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFBQSxNQUNsRCxRQUFRLENBQUMsSUFBSSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLFFBQVEsQ0FBQztBQUFBLElBQzlEO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxLQUFLLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUFBLE1BQ3BDLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQztBQUFBLE1BQ2xELFFBQVEsQ0FBQyxJQUFJLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLElBQUksUUFBUSxDQUFDO0FBQUEsTUFDNUQsZUFBZSxDQUFDLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLFVBQVUsQ0FBQztBQUFBLElBQ3hFO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUFBLE1BQ2pDLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQztBQUFBLE1BQy9DLGVBQWUsQ0FBQyxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxVQUFVLENBQUM7QUFBQSxJQUNyRTtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUNwQyxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFBQSxNQUNsRCxRQUFRLENBQUMsSUFBSSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLFFBQVEsQ0FBQztBQUFBLElBQzlEO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUFBLE1BQ2xDLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQztBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUNGO0FBRU8sU0FBUyxVQUFVLEdBQTBCO0FBQ2xELFNBQU8sZUFBZSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxhQUFhLENBQUM7QUFDakU7OztBQ3hMQSxlQUFlLGFBQWEsUUFBZ0I7QUFDMUMsUUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLE9BQU8sYUFBYTtBQUMvQyxRQUFNLEtBQUssU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsUUFBUTtBQUVqRCxTQUFPO0FBQUEsSUFDTCxVQUFVLEdBQUcsU0FBa0IsVUFBVTtBQUFBLElBQ3pDLFVBQVUsR0FBRyxTQUFrQixVQUFVLEVBQUUsWUFBWTtBQUFBLE1BQ3JELGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBZSxFQUFFLFVBQVU7QUFBQSxJQUNsRCxDQUFDO0FBQUEsSUFDRCxPQUFPLEdBQUcsU0FBZSxPQUFPLEVBQUUsWUFBWTtBQUFBLE1BQzVDLGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBWSxFQUFFLFVBQVU7QUFBQSxJQUMvQyxDQUFDO0FBQUEsSUFDRCxXQUFXLEdBQUcsU0FBa0IsVUFBVTtBQUFBLElBQzFDLFFBQVEsR0FBRyxTQUFnQixRQUFRO0FBQUEsRUFDckM7QUFDRjtBQUVPLFNBQVMsa0JBQWtCLE1BQTJDO0FBQzNFLE1BQUk7QUFFSixXQUFTLFlBQVk7QUFDbkIsUUFBSSxDQUFDLGVBQWU7QUFDbEIsc0JBQWdCLGFBQWEsS0FBSyxNQUFNO0FBQUEsSUFDMUM7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sTUFBTSxVQUFVLEtBQUssTUFBTTtBQUVqQyxTQUFPO0FBQUEsSUFDTCxlQUFlLE9BQU8sRUFBRSxHQUFHLE1BQU07QUFDL0IsWUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLFVBQVU7QUFDckMsYUFBUSxNQUFNLFNBQVMsU0FBUyxFQUFFLEtBQU07QUFBQSxJQUMxQztBQUFBLElBRUEsZUFBZSxPQUFPLEVBQUUsSUFBSSxNQUFNLE1BQU07QUFDdEMsWUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLFVBQVU7QUFDckMsWUFBTSxTQUFTLElBQUksSUFBSSxLQUFLO0FBQUEsSUFDOUI7QUFBQSxJQUVBLGtCQUFrQixPQUFPLEVBQUUsSUFBSSxRQUFRLE1BQU07QUFDM0MsWUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLFVBQVU7QUFDckMsWUFBTSxXQUFXLE1BQU0sU0FBUyxTQUFTLEVBQUU7QUFDM0MsVUFBSSxDQUFDLFVBQVU7QUFDYixjQUFNLElBQUk7QUFBQSxVQUNSLEdBQUcsR0FBRyw4Q0FBOEMsRUFBRTtBQUFBLFFBQ3hEO0FBQUEsTUFDRjtBQUNBLFlBQU0sVUFBVSxFQUFFLEdBQUcsVUFBVSxHQUFHLFFBQVE7QUFDMUMsWUFBTSxTQUFTLElBQUksSUFBSSxPQUFPO0FBQzlCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxlQUFlLE9BQU8sRUFBRSxHQUFHLE1BQU07QUFDL0IsWUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLFVBQVU7QUFDckMsYUFBUSxNQUFNLFNBQVMsU0FBUyxFQUFFLEtBQU07QUFBQSxJQUMxQztBQUFBLElBRUEsZUFBZSxPQUFPLEVBQUUsSUFBSSxNQUFNLE1BQU07QUFDdEMsWUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLFVBQVU7QUFDckMsWUFBTSxTQUFTLElBQUksSUFBSSxLQUFLO0FBQUEsSUFDOUI7QUFBQSxJQUVBLGtCQUFrQixPQUFPLEVBQUUsSUFBSSxRQUFRLE1BQU07QUFDM0MsWUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLFVBQVU7QUFDckMsWUFBTSxXQUFXLE1BQU0sU0FBUyxTQUFTLEVBQUU7QUFDM0MsVUFBSSxDQUFDLFVBQVU7QUFDYixjQUFNLElBQUk7QUFBQSxVQUNSLEdBQUcsR0FBRyw4Q0FBOEMsRUFBRTtBQUFBLFFBQ3hEO0FBQUEsTUFDRjtBQUNBLFlBQU0sVUFBVSxFQUFFLEdBQUcsVUFBVSxHQUFHLFFBQVE7QUFDMUMsWUFBTSxTQUFTLElBQUksSUFBSSxPQUFPO0FBQzlCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSx5QkFBeUIsT0FBTyxFQUFFLFVBQVUsTUFBTTtBQUNoRCxZQUFNLEVBQUUsU0FBUyxJQUFJLE1BQU0sVUFBVTtBQUNyQyxZQUFNLFNBQW9CLENBQUM7QUFDM0IsdUJBQWlCLENBQUMsRUFBRSxLQUFLLEtBQUssU0FBUyxRQUFRO0FBQUEsUUFDN0MsYUFBYTtBQUFBLE1BQ2YsQ0FBQyxHQUFHO0FBQ0YsZUFBTyxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBQUEsTUFDL0I7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsWUFBWSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQzVCLFlBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxVQUFVO0FBQ2xDLGFBQVEsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFNO0FBQUEsSUFDdkM7QUFBQSxJQUVBLFlBQVksT0FBTyxFQUFFLElBQUksTUFBTSxNQUFNO0FBQ25DLFlBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxVQUFVO0FBQ2xDLFlBQU0sTUFBTSxJQUFJLElBQUksS0FBSztBQUFBLElBQzNCO0FBQUEsSUFFQSxzQkFBc0IsT0FBTyxFQUFFLFVBQVUsTUFBTTtBQUM3QyxZQUFNLEVBQUUsTUFBTSxJQUFJLE1BQU0sVUFBVTtBQUNsQyxZQUFNLFNBQWlCLENBQUM7QUFDeEIsdUJBQWlCLENBQUMsRUFBRSxLQUFLLEtBQUssTUFBTSxRQUFRO0FBQUEsUUFDMUMsYUFBYTtBQUFBLE1BQ2YsQ0FBQyxHQUFHO0FBQ0YsZUFBTyxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBQUEsTUFDL0I7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsZUFBZSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQy9CLFlBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxVQUFVO0FBQ3RDLGFBQVEsTUFBTSxVQUFVLFNBQVMsRUFBRSxLQUFNO0FBQUEsSUFDM0M7QUFBQSxJQUVBLGVBQWUsT0FBTyxFQUFFLElBQUksTUFBTSxNQUFNO0FBQ3RDLFlBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxVQUFVO0FBQ3RDLFlBQU0sVUFBVSxJQUFJLElBQUksS0FBSztBQUFBLElBQy9CO0FBQUEsSUFFQSxrQkFBa0IsT0FBTyxFQUFFLElBQUksUUFBUSxNQUFNO0FBQzNDLFlBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxVQUFVO0FBQ3RDLFlBQU0sV0FBVyxNQUFNLFVBQVUsU0FBUyxFQUFFO0FBQzVDLFVBQUksQ0FBQyxVQUFVO0FBQ2IsY0FBTSxJQUFJO0FBQUEsVUFDUixHQUFHLEdBQUcsOENBQThDLEVBQUU7QUFBQSxRQUN4RDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFVBQVUsRUFBRSxHQUFHLFVBQVUsR0FBRyxRQUFRO0FBQzFDLFlBQU0sVUFBVSxJQUFJLElBQUksT0FBTztBQUMvQixhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsYUFBYSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQzdCLFlBQU0sRUFBRSxPQUFPLElBQUksTUFBTSxVQUFVO0FBQ25DLGFBQVEsTUFBTSxPQUFPLFNBQVMsRUFBRSxLQUFNO0FBQUEsSUFDeEM7QUFBQSxJQUVBLGFBQWEsT0FBTyxFQUFFLElBQUksTUFBTSxNQUFNO0FBQ3BDLFlBQU0sRUFBRSxPQUFPLElBQUksTUFBTSxVQUFVO0FBQ25DLFlBQU0sT0FBTyxJQUFJLElBQUksS0FBSztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNGOzs7QUMvSUEsSUFBSTtBQUNKLElBQUk7QUFFSixlQUFlLEtBQUs7QUFDbEIsTUFBSSxDQUFDLEtBQUs7QUFDUixVQUFNLE1BQU0sT0FBTyxhQUFrQjtBQUFBLEVBQ3ZDO0FBQ0EsU0FBTztBQUNUO0FBQ0EsZUFBZSxPQUFPO0FBQ3BCLE1BQUksQ0FBQyxPQUFPO0FBQ1YsWUFBUSxNQUFNLE9BQU8sTUFBVztBQUFBLEVBQ2xDO0FBQ0EsU0FBTztBQUNUO0FBRUEsU0FBUyxZQUFlLEtBQWE7QUFDbkMsUUFBTSxXQUFXLE9BQU8sU0FDckIsTUFBTSxLQUFLLEdBQUcsS0FBSyxLQUFLLEdBQUcsR0FBRyxPQUFPO0FBRXhDLFNBQU87QUFBQSxJQUNMLE1BQU0sSUFBSSxLQUFnQztBQUN4QyxVQUFJO0FBQ0YsY0FBTSxPQUFPLE9BQU8sTUFBTSxHQUFHLEdBQUcsU0FBUyxNQUFNLFNBQVMsR0FBRyxHQUFHLE9BQU87QUFDckUsZUFBTyxLQUFLLE1BQU0sSUFBSTtBQUFBLE1BQ3hCLFFBQVE7QUFDTixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxJQUNBLE1BQU0sSUFBSSxLQUFhLE9BQXlCO0FBQzlDLFlBQU0sSUFBSSxNQUFNLFNBQVMsR0FBRztBQUM1QixZQUFNLEVBQUUsT0FBTyxVQUFVLElBQUksTUFBTSxHQUFHO0FBQ3RDLFlBQU0sRUFBRSxRQUFRLElBQUksTUFBTSxLQUFLO0FBQy9CLFlBQU0sTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzNDLFlBQU0sVUFBVSxHQUFHLEtBQUssVUFBVSxPQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDbkQ7QUFBQSxJQUNBLE1BQU0sT0FBTyxLQUFhLFNBQWlDO0FBQ3pELFlBQU0sSUFBSSxNQUFNLFNBQVMsR0FBRztBQUM1QixZQUFNLEVBQUUsVUFBVSxPQUFPLFVBQVUsSUFBSSxNQUFNLEdBQUc7QUFDaEQsWUFBTSxFQUFFLFFBQVEsSUFBSSxNQUFNLEtBQUs7QUFDL0IsVUFBSTtBQUNKLFVBQUk7QUFDRixjQUFNLE9BQU8sTUFBTSxTQUFTLEdBQUcsT0FBTztBQUN0QyxtQkFBVyxLQUFLLE1BQU0sSUFBSTtBQUFBLE1BQzVCLFFBQVE7QUFDTixjQUFNLElBQUksTUFBTSxjQUFjLEdBQUcsRUFBRTtBQUFBLE1BQ3JDO0FBQ0EsWUFBTSxVQUFVLEVBQUUsR0FBRyxVQUFVLEdBQUcsUUFBUTtBQUMxQyxZQUFNLE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUMzQyxZQUFNLFVBQVUsR0FBRyxLQUFLLFVBQVUsU0FBUyxNQUFNLENBQUMsQ0FBQztBQUNuRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDRjtBQUVBLGVBQWUsZUFBa0IsS0FBMkI7QUFDMUQsUUFBTSxFQUFFLFNBQVMsU0FBUyxJQUFJLE1BQU0sR0FBRztBQUN2QyxRQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sS0FBSztBQUM1QixNQUFJO0FBQ0osTUFBSTtBQUNGLFlBQVEsTUFBTSxRQUFRLEdBQUc7QUFBQSxFQUMzQixRQUFRO0FBQ04sV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFFBQU0sU0FBYyxDQUFDO0FBQ3JCLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksQ0FBQyxLQUFLLFNBQVMsT0FBTyxHQUFHO0FBQzNCO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDRixZQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUssS0FBSyxJQUFJLEdBQUcsT0FBTztBQUNwRCxhQUFPLEtBQUssS0FBSyxNQUFNLElBQUksQ0FBTTtBQUFBLElBQ25DLFFBQVE7QUFBQSxJQUVSO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLGVBQWUsZ0JBQWdCLEtBQWE7QUFDMUMsUUFBTSxFQUFFLE9BQU8sV0FBVyxTQUFTLElBQUksTUFBTSxHQUFHO0FBQ2hELFFBQU0sRUFBRSxLQUFLLElBQUksTUFBTSxLQUFLO0FBQzVCLFFBQU0sZ0JBQWdCLEtBQUssS0FBSyxZQUFZO0FBQzVDLE1BQUk7QUFDRixVQUFNLFNBQVMsZUFBZSxPQUFPO0FBQUEsRUFDdkMsUUFBUTtBQUNOLFVBQU0sTUFBTSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDcEMsVUFBTSxVQUFVLGVBQWUsS0FBSztBQUFBLEVBQ3RDO0FBQ0Y7QUFFTyxTQUFTLGFBQWEsTUFBMEM7QUFDckUsUUFBTSxNQUFNLE1BQU0sT0FBTztBQUN6QixNQUFJLG1CQUF5QztBQUU3QyxRQUFNLGVBQWUsWUFBcUIsR0FBRyxHQUFHLFVBQVU7QUFDMUQsUUFBTSxlQUFlLFlBQXFCLEdBQUcsR0FBRyxVQUFVO0FBQzFELFFBQU0sWUFBWSxZQUFrQixHQUFHLEdBQUcsT0FBTztBQUNqRCxRQUFNLGVBQWUsWUFBcUIsR0FBRyxHQUFHLFVBQVU7QUFDMUQsUUFBTSxhQUFhLFlBQW1CLEdBQUcsR0FBRyxRQUFRO0FBQ3BELFFBQU0sYUFBYSxHQUFHLEdBQUc7QUFDekIsUUFBTSxVQUFVLEdBQUcsR0FBRztBQUV0QixXQUFTLFFBQVcsSUFBa0M7QUFDcEQsUUFBSSxDQUFDLGtCQUFrQjtBQUNyQix5QkFBbUIsZ0JBQWdCLEdBQUc7QUFBQSxJQUN4QztBQUNBLFdBQU8saUJBQWlCLEtBQUssRUFBRTtBQUFBLEVBQ2pDO0FBRUEsU0FBTztBQUFBLElBQ0wsZUFBZSxDQUFDLEVBQUUsR0FBRyxNQUFNLGFBQWEsSUFBSSxFQUFFO0FBQUEsSUFDOUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxNQUFNLE1BQzFCLFFBQVEsTUFBTSxhQUFhLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQSxJQUMzQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksUUFBUSxNQUMvQixRQUFRLE1BQU0sYUFBYSxPQUFPLElBQUksT0FBTyxDQUFDO0FBQUEsSUFFaEQsZUFBZSxDQUFDLEVBQUUsR0FBRyxNQUFNLGFBQWEsSUFBSSxFQUFFO0FBQUEsSUFDOUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxNQUFNLE1BQzFCLFFBQVEsTUFBTSxhQUFhLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQSxJQUMzQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksUUFBUSxNQUMvQixRQUFRLE1BQU0sYUFBYSxPQUFPLElBQUksT0FBTyxDQUFDO0FBQUEsSUFDaEQseUJBQXlCLE9BQU8sRUFBRSxVQUFVLE1BQU07QUFDaEQsWUFBTSxNQUFNLE1BQU0sZUFBd0IsVUFBVTtBQUNwRCxhQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLFNBQVM7QUFBQSxJQUNwRDtBQUFBLElBRUEsWUFBWSxDQUFDLEVBQUUsR0FBRyxNQUFNLFVBQVUsSUFBSSxFQUFFO0FBQUEsSUFDeEMsWUFBWSxDQUFDLEVBQUUsSUFBSSxNQUFNLE1BQU0sUUFBUSxNQUFNLFVBQVUsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUFBLElBQ3JFLHNCQUFzQixPQUFPLEVBQUUsVUFBVSxNQUFNO0FBQzdDLFlBQU0sTUFBTSxNQUFNLGVBQXFCLE9BQU87QUFDOUMsYUFBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxTQUFTO0FBQUEsSUFDcEQ7QUFBQSxJQUVBLGVBQWUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxhQUFhLElBQUksRUFBRTtBQUFBLElBQzlDLGVBQWUsQ0FBQyxFQUFFLElBQUksTUFBTSxNQUMxQixRQUFRLE1BQU0sYUFBYSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQUEsSUFDM0Msa0JBQWtCLENBQUMsRUFBRSxJQUFJLFFBQVEsTUFDL0IsUUFBUSxNQUFNLGFBQWEsT0FBTyxJQUFJLE9BQU8sQ0FBQztBQUFBLElBRWhELGFBQWEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxXQUFXLElBQUksRUFBRTtBQUFBLElBQzFDLGFBQWEsQ0FBQyxFQUFFLElBQUksTUFBTSxNQUFNLFFBQVEsTUFBTSxXQUFXLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQSxFQUN6RTtBQUNGOzs7QUNsSk8sU0FBUyxzQkFBK0I7QUFDN0MsU0FBTyxDQUFDLENBQUMsUUFBUSxJQUFJO0FBQ3ZCOyIsCiAgIm5hbWVzIjogW10KfQo=
package/dist/storage.mjs CHANGED
@@ -1,12 +1,16 @@
1
1
  import {
2
2
  StorageStep,
3
+ kvStorageFallback,
3
4
  localStorage,
5
+ shouldFallbackToKV2,
4
6
  toStorage
5
- } from "./chunk-DOD4MC5D.mjs";
7
+ } from "./chunk-I5DCB7RU.mjs";
6
8
  import "./chunk-BJTO5JO5.mjs";
7
9
  export {
8
10
  StorageStep,
11
+ kvStorageFallback,
9
12
  localStorage,
13
+ shouldFallbackToKV2,
10
14
  toStorage
11
15
  };
12
16
  //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  vercelSandbox
3
- } from "./chunk-RT72C52I.mjs";
3
+ } from "./chunk-6MS4CGEZ.mjs";
4
4
  import "./chunk-GKASMIBR.mjs";
5
5
  import "./chunk-JO3JDCH5.mjs";
6
6
  import "./chunk-MSWINCCM.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "experimental-agent",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -53,6 +53,7 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "@swc/core": "^1.10.0",
56
+ "@vercel/kv2": "^0.0.18",
56
57
  "@vercel/oidc": "^3.1.0",
57
58
  "@vercel/sandbox": "1.7.1",
58
59
  "@workflow/serde": "4.1.0-beta.2",
@@ -63,13 +64,15 @@
63
64
  "zod": "^4.3.6"
64
65
  },
65
66
  "devDependencies": {
67
+ "@ai-sdk/react": "^3.0.88",
66
68
  "@types/node": "^20.11.24",
67
69
  "dotenv": "^17.2.3",
68
70
  "next": "^16.0.0",
71
+ "react": "^19.2.4",
69
72
  "tsup": "^8.0.2",
70
73
  "typescript": "5.5.4",
71
74
  "vitest": "^3.0.0",
72
- "workflow": "4.1.0-beta.60",
75
+ "workflow": "https://workflow-docs-3ppyos3w4.vercel.sh/workflow.tgz",
73
76
  "@agent/tsconfig": "0.0.0"
74
77
  },
75
78
  "peerDependencies": {