sliftutils 1.7.136 → 1.7.137

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 (51) hide show
  1. package/examplestorage/browser.tsx +3 -2
  2. package/index.d.ts +10 -3
  3. package/misc/dist/strings.ts.cache +2 -2
  4. package/misc/https/certs.d.ts +5 -1
  5. package/misc/https/certs.ts +5 -1
  6. package/misc/https/dist/certs.ts.cache +8 -4
  7. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  8. package/package.json +1 -1
  9. package/security/authorizedKeys/daemon/daemon.ts +4 -3
  10. package/security/authorizedKeys/daemon/dist/changes.ts.cache +2 -2
  11. package/security/authorizedKeys/daemon/dist/git.ts.cache +2 -2
  12. package/security/authorizedKeys/daemon/dist/notify.ts.cache +2 -2
  13. package/security/authorizedKeys/daemon/dist/paths.ts.cache +2 -2
  14. package/security/authorizedKeys/daemon/dist/repoFiles.ts.cache +2 -2
  15. package/security/authorizedKeys/daemon/dist/revocation.ts.cache +0 -0
  16. package/security/authorizedKeys/daemon/dist/sessions.ts.cache +2 -2
  17. package/security/authorizedKeys/daemon/dist/state.ts.cache +2 -2
  18. package/security/authorizedKeys/daemon/dist/trust.ts.cache +126 -4
  19. package/security/authorizedKeys/daemon/revocation.d.ts +4 -7
  20. package/security/authorizedKeys/daemon/revocation.ts +0 -0
  21. package/security/authorizedKeys/daemon/trust.d.ts +12 -1
  22. package/security/authorizedKeys/daemon/trust.ts +124 -1
  23. package/security/authorizedKeys/dist/authorizedKeys.ts.cache +2 -2
  24. package/security/authorizedKeys/dist/keysRepo.ts.cache +2 -2
  25. package/security/authorizedKeys/dist/revokeSource.ts.cache +2 -2
  26. package/security/authorizedKeys/dist/sources.ts.cache +2 -2
  27. package/security/authorizedKeys/dist/unrevoke.ts.cache +5 -186
  28. package/security/authorizedKeys/dist/unrevokeCli.ts.cache +195 -0
  29. package/security/helpers/dist/paths.ts.cache +2 -2
  30. package/security/helpers/dist/remoteSSH.ts.cache +2 -2
  31. package/security/helpers/dist/spawn.ts.cache +2 -2
  32. package/security/keys/dist/deriveKey.ts.cache +2 -2
  33. package/security/keys/dist/sshKeyFile.ts.cache +2 -2
  34. package/security/machines/dist/machines.ts.cache +20 -68
  35. package/security/machines/machines.ts +18 -67
  36. package/security/notifications/dist/discord.ts.cache +2 -2
  37. package/security/signedFiles/dist/manifest.ts.cache +2 -2
  38. package/security/signedFiles/dist/signFiles.ts.cache +16 -52
  39. package/security/signedFiles/dist/sshsig.ts.cache +2 -2
  40. package/storage/remoteStorage/ArchivesRemote.d.ts +2 -1
  41. package/storage/remoteStorage/ArchivesRemote.ts +14 -7
  42. package/storage/remoteStorage/accessPage.tsx +7 -123
  43. package/storage/remoteStorage/createArchives.d.ts +2 -1
  44. package/storage/remoteStorage/createArchives.ts +1 -1
  45. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +14 -7
  46. package/storage/remoteStorage/dist/createArchives.ts.cache +2 -2
  47. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +3 -3
  48. package/storage/remoteStorage/dist/storageController.ts.cache +8 -7
  49. package/storage/remoteStorage/sourceWrapper.ts +1 -1
  50. package/storage/remoteStorage/storageController.d.ts +1 -0
  51. package/storage/remoteStorage/storageController.ts +8 -6
@@ -27,7 +27,7 @@ class ExampleStoragePage extends preact.Component {
27
27
  content: "",
28
28
  contentLoaded: false,
29
29
  newFileName: "",
30
- access: undefined as { link: string; machineId: string; ip: string } | undefined,
30
+ access: undefined as { machineId: string; ip: string; reason: string; addMachineCommand: string } | undefined,
31
31
  error: "",
32
32
  });
33
33
 
@@ -90,7 +90,8 @@ class ExampleStoragePage extends preact.Component {
90
90
  <div>This machine does not have access to the account yet.</div>
91
91
  <div>Machine: {synced.access.machineId}</div>
92
92
  <div>IP: {synced.access.ip}</div>
93
- <a href={synced.access.link} target="_blank">{synced.access.link}</a>
93
+ <div>{synced.access.reason}</div>
94
+ <div><code>{synced.access.addMachineCommand}</code></div>
94
95
  </div>}
95
96
  {synced.loaded && <div className={css.hbox(24).alignItems("flex-start")}>
96
97
  <div className={css.vbox(8)}>
package/index.d.ts CHANGED
@@ -126,7 +126,11 @@ declare module "sliftutils/misc/https/certs" {
126
126
  export declare function getIdentityCAPromise(domain: string): X509KeyPair;
127
127
  export declare function getOwnMachineId(domain: string): string;
128
128
  export declare function getOwnThreadId(domain: string): string;
129
- /** Part of the machineId comes from the publicKey, so we can use it to verify */
129
+ /** Part of the machineId comes from the publicKey, so we can use it to verify.
130
+
131
+ Fairly weak: it only proves the id names this key, not that the caller holds the key - usually a
132
+ better workflow should be used, with a back and forth (ex, validateCertificate over a signed
133
+ exchange). In some cases it is sufficient, such as exposing source maps to the client. */
130
134
  export declare function verifyMachineIdForPublicKey(config: {
131
135
  machineId: string;
132
136
  publicKey: Buffer;
@@ -3387,9 +3391,10 @@ declare module "sliftutils/storage/remoteStorage/ArchivesRemote" {
3387
3391
  private authenticate;
3388
3392
  private callAuthed;
3389
3393
  waitingForAccess(): Promise<{
3390
- link: string;
3391
3394
  machineId: string;
3392
3395
  ip: string;
3396
+ reason: string;
3397
+ addMachineCommand: string;
3393
3398
  } | undefined>;
3394
3399
  hasWriteAccess(): Promise<boolean>;
3395
3400
  private registerAccessRequest;
@@ -4034,9 +4039,10 @@ declare module "sliftutils/storage/remoteStorage/createArchives" {
4034
4039
  private prepareWrongTargetRetry;
4035
4040
  private request;
4036
4041
  waitingForAccess(): Promise<{
4037
- link: string;
4038
4042
  machineId: string;
4039
4043
  ip: string;
4044
+ reason: string;
4045
+ addMachineCommand: string;
4040
4046
  } | undefined>;
4041
4047
  /** The sources that can serve a file right now, in dispatch order - the first is the write node, the one a plain read asks first. Each entry's url is what GetConfig.sourceUrl / GetInfoConfig.sourceUrl accept, so listing these and then reading with sourceUrl compares the copies the sources actually hold. */
4042
4048
  getFileSources(fileName: string): Promise<SourceConfig[]>;
@@ -4442,6 +4448,7 @@ declare module "sliftutils/storage/remoteStorage/storageController" {
4442
4448
  };
4443
4449
  export type AuthToken = {
4444
4450
  certPem: string;
4451
+ issuerPem: string;
4445
4452
  signature: string;
4446
4453
  data: AuthTokenData;
4447
4454
  };
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.ellipsize = void 0;
4
4
  function ellipsize(text, maxLength) {
@@ -9,4 +9,4 @@ function ellipsize(text, maxLength) {
9
9
  }
10
10
  exports.ellipsize = ellipsize;
11
11
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsU0FBUyxDQUFDLElBQVksRUFBRSxTQUFpQjtJQUNyRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoRCxDQUFDO0FBTEQsOEJBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZWxsaXBzaXplKHRleHQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0LnNsaWNlKDAsIG1heExlbmd0aCAtIDMpICsgXCIuLi5cIjtcbn1cbiJdfQ==
12
- /* _JS_SOURCE_HASH = "2940a18b46d3e6b0349b3768588927e9002bfc3a985f2b84c32f2ad2f84813ff"; */
12
+ /* _JS_SOURCE_HASH = "42720f3fe753adb3976d4e2195d69f9ff6c408573751f8cdc6368d2988eac5c7"; */
@@ -59,7 +59,11 @@ export declare function getIdentityCA(domain: string): X509KeyPair;
59
59
  export declare function getIdentityCAPromise(domain: string): X509KeyPair;
60
60
  export declare function getOwnMachineId(domain: string): string;
61
61
  export declare function getOwnThreadId(domain: string): string;
62
- /** Part of the machineId comes from the publicKey, so we can use it to verify */
62
+ /** Part of the machineId comes from the publicKey, so we can use it to verify.
63
+
64
+ Fairly weak: it only proves the id names this key, not that the caller holds the key - usually a
65
+ better workflow should be used, with a back and forth (ex, validateCertificate over a signed
66
+ exchange). In some cases it is sufficient, such as exposing source maps to the client. */
63
67
  export declare function verifyMachineIdForPublicKey(config: {
64
68
  machineId: string;
65
69
  publicKey: Buffer;
@@ -471,7 +471,11 @@ export function getOwnThreadId(domain: string) {
471
471
  return decodeNodeIdAssert(getThreadKeyCert(domain).domain, domain).threadId;
472
472
  }
473
473
 
474
- /** Part of the machineId comes from the publicKey, so we can use it to verify */
474
+ /** Part of the machineId comes from the publicKey, so we can use it to verify.
475
+
476
+ Fairly weak: it only proves the id names this key, not that the caller holds the key - usually a
477
+ better workflow should be used, with a back and forth (ex, validateCertificate over a signed
478
+ exchange). In some cases it is sufficient, such as exposing source maps to the client. */
475
479
  export function verifyMachineIdForPublicKey(config: {
476
480
  machineId: string;
477
481
  publicKey: Buffer;
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  /// <reference path="./node-forge-ed25519.d.ts" />
3
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
4
  if (k2 === undefined) k2 = k;
@@ -433,7 +433,11 @@ function getOwnThreadId(domain) {
433
433
  return decodeNodeIdAssert(getThreadKeyCert(domain).domain, domain).threadId;
434
434
  }
435
435
  exports.getOwnThreadId = getOwnThreadId;
436
- /** Part of the machineId comes from the publicKey, so we can use it to verify */
436
+ /** Part of the machineId comes from the publicKey, so we can use it to verify.
437
+
438
+ Fairly weak: it only proves the id names this key, not that the caller holds the key - usually a
439
+ better workflow should be used, with a back and forth (ex, validateCertificate over a signed
440
+ exchange). In some cases it is sufficient, such as exposing source maps to the client. */
437
441
  function verifyMachineIdForPublicKey(config) {
438
442
  let { machineId, publicKey } = config;
439
443
  let domainPart = getDomainPartFromPublicKey(publicKey);
@@ -464,5 +468,5 @@ function getOwnNodeIdAllowUndefined() {
464
468
  return SocketFunction_1.SocketFunction.mountedNodeId;
465
469
  }
466
470
  exports.getOwnNodeIdAllowUndefined = getOwnNodeIdAllowUndefined;
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0RBQWtEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRCwrbkJBQStuQjtBQUMvbkIsc0lBQXNJO0FBRXRJLGlEQUFpRDtBQUVqRCx1RUFBK0Q7QUFDL0Qsa0RBQW9DO0FBR3BDLHlEQUEwRDtBQUUxRCwwREFBK0I7QUFDL0Isb0RBQTRCO0FBQzVCLDZEQUFpRTtBQUNqRSxtRUFBOEY7QUFDOUYsNkRBQWtIO0FBQ2xILG1FQUFnRTtBQUNoRSw2REFBMEU7QUFDMUUscUVBQTRFO0FBQzVFLHdDQUF1QztBQUV2QyxJQUFBLHNCQUFPLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsSUFBQSxzQkFBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRW5ELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUV6QixRQUFBLGtCQUFrQixHQUFHLHNDQUFzQyxDQUFDO0FBRTVELFFBQUEsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO0FBR2pELFNBQVMsZ0JBQWdCLENBQUMsTUFBYztJQUNwQyxPQUFPLElBQUEsb0NBQVcsRUFBc0IsTUFBTSxFQUFFLDBCQUFrQixDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxtRkFBbUY7QUFDbkYsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYztJQUNsRCxPQUFPLElBQUEsNENBQW1CLEVBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSwwQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUZELDBEQUVDO0FBSUQsU0FBZ0IsYUFBYSxDQUFDLElBQXFCO0lBQy9DLElBQUksT0FBTyxHQUFHLElB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QUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFSixTQUFnQixZQUFZO0lBQ3hCLElBQUksTUFBTSxHQUFHLCtCQUFjLENBQUMsYUFBYSxDQUFDO0lBQzFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQU5ELG9DQU1DO0FBRUQsU0FBZ0IsMEJBQTBCO0lBQ3RDLE9BQU8sK0JBQWMsQ0FBQyxhQUFhLENBQUM7QUFDeEMsQ0FBQztBQUZELGdFQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vbm9kZS1mb3JnZS1lZDI1NTE5LmQudHNcIiAvPlxuXG4vLyBOT1RFOiBXZSBjYW4ndCB1c2UgY3J5cHRvLnN1YnRsZSAobm9uLWV4dHJhY3RhYmxlIENyeXB0b0tleXMpIGZvciBvdXIga2V5cywgYmVjYXVzZSBzdWJ0bGUgaXMgYXN5bmNocm9ub3VzLCBhbmQgZXZlcnl0aGluZyBoZXJlIChrZXkgZ2VuZXJhdGlvbiwgY2VydCBjcmVhdGlvbiwgc2lnbmluZykgbXVzdCBiZSBhdmFpbGFibGUgc3luY2hyb25vdXNseS4gVGhlIG9ubHkgcmVhbCBiZW5lZml0IG9mIHN1YnRsZSBpcyB0aGF0IGEgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgYXR0YWNrIGNhbid0IGV4ZmlsdHJhdGUgdGhlIGtleS4gV2hpY2gsIHdoaWxlIG5pY2UsIGlzIG9mIG1pbm9yIGJlbmVmaXQsIGFzIHRoZSBjcm9zcy1zaXRlIHNjcmlwdCBjYW4gYWxyZWFkeSBkbyBxdWl0ZSBhIGJpdCBvZiBkYW1hZ2UgYW55d2F5IHdpdGggYWNjZXNzLiBBbmQgaWYgdGhhdCBoYXBwZW5zLCB0aGUgZmlyc3QgdGhpbmcgdGhlIHVzZXIgaXMgcHJvYmFibHkgZ29pbmcgdG8gZG8gaXMgcmVzZXQgYWxsIHRoZWlyIGNyZWRlbnRpYWxzLCB3aGljaCBzb2x2ZXMgdGhlIGNhc2Ugb2YgdGhlIGtleSBiZWluZyBleGZpbHRyYXRlZCBhbnl3YXkgKGJ5IHRlbGxpbmcgdGhlIHNlcnZlciB0byBzdG9wIHRydXN0aW5nIGFsbCBpZGVudGl0aWVzKS5cbi8vIE5PVEU6IFdlIGFyZSBqdXN0IG5vdCBnb2luZyB0byBzdXBwb3J0IEhUVFBTIGJyb3dzZXIgY2VydHMuIE91ciBjb2RlIGlzIHB1cmVseSBmb3IgaWRlbnRpZmljYXRpb24sIGFuZCBzbyBpdCBvbmx5IHN1cHBvcnRzIEVEMjU1MTkuXG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1MjgwI3BhZ2UtNDJcblxuaW1wb3J0IHsgc2V0RmxhZyB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vcmVxdWlyZS9jb21waWxlRmxhZ3NcIjtcbmltcG9ydCAqIGFzIGZvcmdlIGZyb20gXCJub2RlLWZvcmdlXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgZnNTeW5jIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgY2FjaGUsIGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgc2hhMjY1IGZyb20gXCJqcy1zaGEyNTZcIjtcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgdHJ1c3RDZXJ0aWZpY2F0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NlcnRTdG9yZVwiO1xuaW1wb3J0IHsgbWVhc3VyZUJsb2NrLCBtZWFzdXJlRm5jLCBtZWFzdXJlV3JhcCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL3Byb2ZpbGluZy9tZWFzdXJlXCI7XG5pbXBvcnQgeyBnZXROb2RlSWREb21haW4sIGdldE5vZGVJZERvbWFpbk1heWJlVW5kZWZpbmVkLCBnZXROb2RlSWRMb2NhdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL25vZGVDYWNoZVwiO1xuaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyByZXNldEFsbE5vZGVDYWxsRmFjdG9yaWVzIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBnZXRLZXlTdG9yZSwgREVWX2dldEtleVN0b3JlUGF0aCB9IGZyb20gXCIuL3BlcnNpc3RlbnRMb2NhbFN0b3JhZ2VcIjtcbmltcG9ydCB7IGVsbGlwc2l6ZSB9IGZyb20gXCIuLi9zdHJpbmdzXCI7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJub2RlLWZvcmdlXCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5zZXRGbGFnKHJlcXVpcmUsIFwianMtc2hhMjU2XCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5cbmNvbnN0IHRpbWVJbkRheSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbmV4cG9ydCBjb25zdCBDQV9OT1RfRk9VTkRfRVJST1IgPSBcIjE4YWE3MzE4LWY4OGYtNGQyZC1iNDFmLTNkYWY0YTQzMzgyN1wiO1xuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlTdG9yYWdlS2V5ID0gXCJtYWNoaW5lQ0FfMTRcIjtcbmV4cG9ydCB0eXBlIElkZW50aXR5U3RvcmFnZVR5cGUgPSB7IGRvbWFpbjogc3RyaW5nOyBjZXJ0QjY0OiBzdHJpbmc7IGtleUI2NDogc3RyaW5nIH07XG5cbmZ1bmN0aW9uIGdldElkZW50aXR5U3RvcmUoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0S2V5U3RvcmU8SWRlbnRpdHlTdG9yYWdlVHlwZT4oZG9tYWluLCBpZGVudGl0eVN0b3JhZ2VLZXkpO1xufVxuXG4vLyBKdXN0IHVzZWQgZm9yIG1hY2hpbmUgbWFpbnRlbmFuY2UgKGZpbmRpbmcgYSBtYWNoaW5lJ3MgaWRlbnRpdHkgZmlsZSBvbiBkaXNrLCBleCB0byBjb3B5IGl0IHRvXG4vLyBhbm90aGVyIG1hY2hpbmUgb3ZlciBzc2gpLiBORVZFUiBhY2Nlc3MgdGhpcyB1bmxlc3MgZXhwbGljaXRseSBnaXZlbiBwZXJtaXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIERFVl9nZXRJZGVudGl0eUZpbGVQYXRoKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWU6IGRvbWFpbiwga2V5OiBpZGVudGl0eVN0b3JhZ2VLZXkgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWDUwOUtleVBhaXIgeyBkb21haW46IHN0cmluZzsgY2VydDogQnVmZmVyOyBrZXk6IEJ1ZmZlcjsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbW9uTmFtZShjZXJ0OiBCdWZmZXIgfCBzdHJpbmcpIHtcbiAgICBsZXQgc3ViamVjdCA9IG5ldyBjcnlwdG8uWDUwOUNlcnRpZmljYXRlKGNlcnQpLnN1YmplY3Q7XG4gICAgbGV0IHN1YmplY3RLVlBzID0gbmV3IE1hcChzdWJqZWN0LnNwbGl0KFwiLFwiKS5tYXAoeCA9PiB4LnRyaW0oKS5zcGxpdChcIj1cIikpLm1hcCh4ID0+IFt4WzBdLCB4LnNsaWNlKDEpLmpvaW4oXCI9XCIpXSkpO1xuICAgIGxldCBjb21tb25OYW1lID0gc3ViamVjdEtWUHMuZ2V0KFwiQ05cIik7XG4gICAgaWYgKCFjb21tb25OYW1lKSB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1vbiBuYW1lIGluIHN1YmplY3Q6ICR7c3ViamVjdH1gKTtcbiAgICByZXR1cm4gY29tbW9uTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVg1MDkoXG4gICAgY29uZmlnOiB7XG4gICAgICAgIGRvbWFpbjogc3RyaW5nO1xuICAgICAgICBpc3N1ZXI6IFg1MDlLZXlQYWlyIHwgXCJzZWxmXCI7XG4gICAgICAgIGxpZmVTcGFuOiBudW1iZXI7XG4gICAgICAgIGtleVBhaXI6IHtcbiAgICAgICAgICAgIHB1YmxpY0tleTogZm9yZ2UuRWQyNTUxOVB1YmxpY0tleTtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IGZvcmdlLkVkMjU1MTlQcml2YXRlS2V5O1xuICAgICAgICB9O1xuICAgIH1cbik6IFg1MDlLZXlQYWlyIHtcbiAgICByZXR1cm4gbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIGNyZWF0ZVg1MDkoKSB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgaXNzdWVyLCBsaWZlU3Bhbiwga2V5UGFpciB9ID0gY29uZmlnO1xuXG4gICAgICAgIGxldCBjZXJ0T2JqID0gZm9yZ2UucGtpLmNyZWF0ZUNlcnRpZmljYXRlKCk7XG4gICAgICAgIGNlcnRPYmoucHVibGljS2V5ID0ga2V5UGFpci5wdWJsaWNLZXkgYXMgdW5rbm93biBhcyBmb3JnZS5wa2kuUHVibGljS2V5O1xuICAgICAgICBjZXJ0T2JqLnNlcmlhbE51bWJlciA9IFwiMDFcIjtcbiAgICAgICAgLy8gR2l2ZSBpdCA1IG1pbnV0ZXMgYmVmb3JlIG5vdy4gSWYgd2UgZ2l2ZSBpdCB0b28gbXVjaCB0aW1lLCBpdCBjYW4gbG9vayBsaWtlIHRoZSBjZXJ0IGlzIHJlYWxseSBvbGQsIHdoaWNoIHdpbGwgdHJpZ2dlciB2YXJpb3VzIHByb2Nlc3NlcyB0byB0cnkgdG8gZ2V0IGEgZnJlc2hlciBvbmUgKGFzIGlmIGl0IGxhc3RzIGZvciAxIGhvdXIsIGJ1dCB3ZSBzZXQgbm90QmVmb3JlIHRvIDEgbW9udGggYWdvLCBpdCBsb29rcyAxIG1vbnRoIG9sZCwgYW5kIHNvIGFsbW9zdCBleHBpcmVkLCB3aGVuIGl0IGlzbid0Li4uKVxuICAgICAgICBjZXJ0T2JqLnZhbGlkaXR5Lm5vdEJlZm9yZSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwICogNjAgKiA1KTtcbiAgICAgICAgY2VydE9iai52YWxpZGl0eS5ub3RBZnRlciA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBsaWZlU3Bhbik7XG5cbiAgICAgICAgY29uc3QgY29tbW9uTmFtZUF0dHJzID0gW3sgbmFtZTogXCJjb21tb25OYW1lXCIsIHZhbHVlOiBkb21haW4gfV07XG4gICAgICAgIGNlcnRPYmouc2V0U3ViamVjdChjb21tb25OYW1lQXR0cnMpO1xuXG4gICAgICAgIGlmIChpc3N1ZXIgPT09IFwic2VsZlwiKSB7XG4gICAgICAgICAgICBjZXJ0T2JqLnNldElzc3Vlcihjb21tb25OYW1lQXR0cnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VydE9iai5zZXRJc3N1ZXIoZm9yZ2UucGtpLmNlcnRpZmljYXRlRnJvbVBlbShpc3N1ZXIuY2VydC50b1N0cmluZygpKS5zdWJqZWN0LmF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4dGVuc2lvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgaXNDQSA9IGlzc3VlciA9PT0gXCJzZWxmXCI7XG4gICAgICAgIGlmIChpc0NBKSB7XG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goeyBuYW1lOiBcImJhc2ljQ29uc3RyYWludHNcIiwgY0E6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxIb3N0RG9tYWluID0gXCIxMjctMC0wLTEuXCIgKyBkb21haW4uc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgICAgICBleHRlbnNpb25zLnB1c2goLi4uW1xuICAgICAgICAgICAgeyBuYW1lOiBcImtleVVzYWdlXCIsIGtleUNlcnRTaWduOiBpc0NBLCBkaWdpdGFsU2lnbmF0dXJlOiB0cnVlLCBub25SZXB1ZGlhdGlvbjogdHJ1ZSwga2V5RW5jaXBoZXJtZW50OiB0cnVlLCBkYXRhRW5jaXBoZXJtZW50OiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3ViamVjdEtleUlkZW50aWZpZXJcIiB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic3ViamVjdEFsdE5hbWVcIixcbiAgICAgICAgICAgICAgICBhbHROYW1lczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBkb21haW4gfSxcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogXCIqLlwiICsgZG9tYWluIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogMiwgdmFsdWU6IGxvY2FsSG9zdERvbWFpbiB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBObyBsb25nZXIgYWxsb3cgMTI3LjAuMC4xICh7IHR5cGU6IDcsIGlwOiBcIjEyNy4wLjAuMVwiIH0pLCB0byBtYWtlIHRoaXMgbW9yZSBzZWN1cmUuIFdlIG1pZ2h0IGVuYWJsZSB0aGlzIGJlaGF2aW9yIGJlaGluZCBhIGZsYWcsIGZvciBkZXZlbG9wbWVudC5cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gTk9URTogbmFtZUNvbnN0cmFpbnRzIHJlcXVpcmUgb3VyIGZvcmtlZCBub2RlLWZvcmdlIChcIm5vZGUtZm9yZ2VcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc2xpZnRpc3QvZm9yZ2UjZTYxODE4MWI0NjliMDdiZGM3MGI5NjhiMDM5MWJlYjhlZjVmZWNkNlwiKS4gQ2hyb21lIGlnbm9yZXMgdGhlbSAoaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA3MjA4MyksIGJ1dCBvdXIgb3duIHZhbGlkYXRpb24gKHZhbGlkYXRlQ0FDZXJ0L3ZhbGlkYXRlQ2VydGlmaWNhdGUpIGVuZm9yY2VzIHRoZW0uXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lQ29uc3RyYWludHNcIixcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWRTdWJ0cmVlczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBmb3JnZS51dGlsLmVuY29kZVV0ZjgoZG9tYWluKSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBmb3JnZS51dGlsLmVuY29kZVV0ZjgobG9jYWxIb3N0RG9tYWluKSB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBjZXJ0T2JqLnNldEV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7XG5cblxuICAgICAgICBtZWFzdXJlQmxvY2soZnVuY3Rpb24gc2lnbigpIHtcbiAgICAgICAgICAgIGlmIChpc3N1ZXIgPT09IFwic2VsZlwiKSB7XG4gICAgICAgICAgICAgICAgY2VydE9iai5zaWduKGtleVBhaXIucHJpdmF0ZUtleSBhcyBhbnkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjZXJ0T2JqLnNpZ24oZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5RnJvbVBlbShpc3N1ZXIua2V5LnRvU3RyaW5nKCkpIGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gdG9QZW1zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb21haW4sXG4gICAgICAgICAgICAgICAgY2VydDogQnVmZmVyLmZyb20oZm9yZ2UucGtpLmNlcnRpZmljYXRlVG9QZW0oY2VydE9iaikpLFxuICAgICAgICAgICAgICAgIGtleTogQnVmZmVyLmZyb20ocHJpdmF0ZUtleVRvUGVtKGtleVBhaXIucHJpdmF0ZUtleSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUtleVRvUGVtKGtleTogZm9yZ2UuRWQyNTUxOVByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5VG9QZW0oa2V5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNlcnQoUEVNb3JERVI6IHN0cmluZyB8IEJ1ZmZlcikge1xuICAgIHJldHVybiBmb3JnZS5wa2kuY2VydGlmaWNhdGVGcm9tUGVtKG5vcm1hbGl6ZUNlcnRUb1BFTShQRU1vckRFUikpO1xufVxuXG5mdW5jdGlvbiBnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQ6IGZvcmdlLnBraS5DZXJ0aWZpY2F0ZSk6IGZvcmdlLkVkMjU1MTlQdWJsaWNLZXkge1xuICAgIGxldCBwdWJsaWNLZXkgPSBjZXJ0UGFyc2VkLnB1YmxpY0tleTtcbiAgICBpZiAoIShcInB1YmxpY0tleUJ5dGVzXCIgaW4gcHVibGljS2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgRUQyNTUxOSBjZXJ0aWZpY2F0ZXMgYXJlIHN1cHBvcnRlZCwgdGhlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXkgaXMgbm90IEVEMjU1MTkgKHN1YmplY3Q6ICR7Y2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIik/LnZhbHVlfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHB1YmxpY0tleSBhcyB1bmtub3duIGFzIGZvcmdlLkVkMjU1MTlQdWJsaWNLZXk7XG59XG5cbi8vIEdldHMgYSB1bmlxdWUgdmFsdWUgdG8gcmVwcmVzZW50IHRoZSBwdWJsaWMga2V5XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljSWRlbnRpZmllcihQRU1vckRFUjogc3RyaW5nIHwgQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZ2V0RUQyNTUxOVB1YmxpY0tleShwYXJzZUNlcnQoUEVNb3JERVIpKS5wdWJsaWNLZXlCeXRlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduID0gbWVhc3VyZVdyYXAoZnVuY3Rpb24gc2lnbihrZXlQYWlyOiB7IGtleTogc3RyaW5nIHwgQnVmZmVyIH0sIGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGxldCBkYXRhU3RyID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgbGV0IHByaXZhdGVLZXkgPSBmb3JnZS5lZDI1NTE5LnByaXZhdGVLZXlGcm9tUGVtKGtleVBhaXIua2V5LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBwcml2YXRlS2V5LnNpZ24oZGF0YVN0cik7XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeShjZXJ0OiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBkYXRhOiB1bmtub3duKSB7XG4gICAgbGV0IGNlcnRPYmogPSBwYXJzZUNlcnQoY2VydCk7XG4gICAgbGV0IHB1YmxpY0tleSA9IGdldEVEMjU1MTlQdWJsaWNLZXkoY2VydE9iaik7XG4gICAgbGV0IGRhdGFTdHIgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBpZiAoIXB1YmxpY0tleS52ZXJpZnkoZGF0YVN0ciwgc2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkLiBTaWduYXR1cmU6ICR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlKX0gfCBEYXRhOiAke2VsbGlwc2l6ZShkYXRhU3RyLCAxMDI0KX1gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNlcnRUb1BFTShQRU1vckRFUjogc3RyaW5nIHwgQnVmZmVyKTogc3RyaW5nIHtcbiAgICBpZiAoUEVNb3JERVIudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXCIpKSB7XG4gICAgICAgIHJldHVybiBQRU1vckRFUi50b1N0cmluZygpO1xuICAgIH1cbiAgICBQRU1vckRFUiA9IFBFTW9yREVSLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiBcIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcblwiICsgUEVNb3JERVIgKyBcIlxcbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cIjtcbn1cblxuLy8gQmFzZTMyIChSRkMgNDY0OCwgbG93ZXJjYXNlLCB1bnBhZGRlZCksIGFzIGRvbWFpbiBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgd2hpY2ggcnVsZXMgb3V0IGJhc2U2NC9oZXgtd2l0aC1jYXNlXG5jb25zdCBiYXNlMzJBbHBoYWJldCA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjdcIjtcbmZ1bmN0aW9uIGVuY29kZUJhc2UzMihieXRlczogQnVmZmVyKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBsZXQgYml0Q291bnQgPSAwO1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgZm9yIChsZXQgYnl0ZSBvZiBieXRlcykge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSB8IGJ5dGU7XG4gICAgICAgIGJpdENvdW50ICs9IDg7XG4gICAgICAgIHdoaWxlIChiaXRDb3VudCA+PSA1KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYmFzZTMyQWxwaGFiZXRbKHZhbHVlID4+PiAoYml0Q291bnQgLSA1KSkgJiAzMV07XG4gICAgICAgICAgICBiaXRDb3VudCAtPSA1O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChiaXRDb3VudCA+IDApIHtcbiAgICAgICAgcmVzdWx0ICs9IGJhc2UzMkFscGhhYmV0Wyh2YWx1ZSA8PCAoNSAtIGJpdENvdW50KSkgJiAzMV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KHB1YmxpY0tleTogeyBwdWJsaWNLZXlCeXRlczogQnVmZmVyIH0gfCBCdWZmZXIpIHtcbiAgICBsZXQgYnl0ZXM6IEJ1ZmZlcjtcbiAgICBpZiAoXCJwdWJsaWNLZXlCeXRlc1wiIGluIHB1YmxpY0tleSkge1xuICAgICAgICBieXRlcyA9IHB1YmxpY0tleS5wdWJsaWNLZXlCeXRlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcyA9IHB1YmxpY0tleTtcbiAgICB9XG4gICAgcmV0dXJuIFwiYlwiICsgZW5jb2RlQmFzZTMyKEJ1ZmZlci5mcm9tKHNoYTI2NS5zaGEyNTYuYXJyYXkoQnVmZmVyLmZyb20oYnl0ZXMpKSkpLnNsaWNlKDAsIDIwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ0FDZXJ0KGRvbWFpbjogc3RyaW5nLCBjZXJ0OiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICBsZXQgY2VydFBhcnNlZCA9IHBhcnNlQ2VydChjZXJ0KTtcblxuICAgIGxldCBzdWJqZWN0ID0gY2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIikudmFsdWUgYXMgc3RyaW5nO1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBkb21haW5QYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcblxuICAgIGxldCByb290RG9tYWluUGFyc2VkID0gW2RvbWFpblBhcnRzLnNoaWZ0KCksIGRvbWFpblBhcnRzLnNoaWZ0KCldLnJldmVyc2UoKS5qb2luKFwiLlwiKTtcbiAgICBpZiAocm9vdERvbWFpblBhcnNlZCAhPT0gZG9tYWluKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBvdXIgdHJ1c3Qgc3RvcmUgY29udGFpbnMgbW9yZSB0aGVuIGp1c3QgT1VSIGNlcnRpZmljYXRlcywgc28gaWYgd2UgYWxsb3cgYW55IGRvbWFpbnMgdGhlbiByZWFsIGRvbWFpbnMgY2FuIGltcGVyc29uYXRlIGFueW9uZSEgSXQgaGFzIHRvIGJlIE9VUiBkb21haW4gdG8gYmUgdHJ1c3RlZCFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSByb290IGRvbWFpbiBzaG91bGQgYmUgJHtkb21haW59LCBidXQgaXMgJHtyb290RG9tYWluUGFyc2VkfWApO1xuICAgIH1cbiAgICAvLyBUT0RPOiBNYXliZSBqdXN0IHNraXAgaWYgaXQgaXNuJ3QgYSBoYXNoIHN0cmluZz9cbiAgICBpZiAoZG9tYWluUGFydHNbMF0gPT09IFwibm9wcm94eVwiKSB7XG4gICAgICAgIGRvbWFpblBhcnRzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgbGV0IGNlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnQgPSAoZG9tYWluUGFydHMuc2hpZnQoKSB8fCBcIlwiKS5zcGxpdChcIi1cIikuc2xpY2UoLTEpWzBdO1xuICAgIGxldCBjZXJ0QWN0dWFsUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGdldEVEMjU1MTlQdWJsaWNLZXkoY2VydFBhcnNlZCkpO1xuICAgIGlmIChjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0ICE9PSBjZXJ0QWN0dWFsUHVibGljS2V5UGFydCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIHB1YmxpYyBrZXkgaW4gdGhlIHVybCBpcyAke2NlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnR9LCBidXQgaW4gdGhlIGNlcnQgaXMgJHtjZXJ0QWN0dWFsUHVibGljS2V5UGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBBTFNPLCByZXF1aXJlIG5hbWUgY29uc3RyYWludHMgdG8gYmUgcHJlc2VudCwgYW5kIHRvIHJlc3RyaWN0IHRvIHRoZSBcIkNOXCJcbiAgICBsZXQgbmFtZUNvbnN0cmFpbnRzID0gY2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJuYW1lQ29uc3RyYWludHNcIikgYXMgYW55O1xuICAgIGlmICghbmFtZUNvbnN0cmFpbnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBoYXZlIG5hbWVDb25zdHJhaW50c2ApO1xuICAgIH1cbiAgICBsZXQgc3VidHJlZXMgPSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXM7XG4gICAgaWYgKCFzdWJ0cmVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gSWdub3JlIGxvY2FsaG9zdERvbWFpbiwgYXMgaXQgY2FuIGFsd2F5cyBzYWZlbHkgYmUgYWxsb3dlZCAodGhlIHNhbWUgbWFjaGluZSBpcyBhbHdheXMgYWxsb3dlZCkuXG4gICAgc3VidHJlZVZhbHVlcyA9IHN1YnRyZWVWYWx1ZXMuZmlsdGVyKCh4OiBzdHJpbmcpID0+IHggIT09IGxvY2FsaG9zdERvbWFpbik7XG4gICAgaWYgKHN1YnRyZWVWYWx1ZXMubGVuZ3RoICE9PSAxIHx8IHN1YnRyZWVWYWx1ZXNbMF0gIT09IHN1YmplY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBtdXN0IGhhdmUgYSBzaW5nbGUgY29uc3RyYWluZWQgZG9tYWluIChoYWQgJHtKU09OLnN0cmluZ2lmeShzdWJ0cmVlVmFsdWVzKX0pYCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVBbHROYW1lcyhjZXJ0UGFyc2VkLCBzdWJqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ2VydGlmaWNhdGUoZG9tYWluOiBzdHJpbmcsIGNlcnQ6IEJ1ZmZlciB8IHN0cmluZywgaXNzdWVyQ2VydDogQnVmZmVyIHwgc3RyaW5nKSB7XG4gICAgdmFsaWRhdGVDQUNlcnQoZG9tYWluLCBpc3N1ZXJDZXJ0KTtcblxuICAgIGxldCBjZXJ0UGFyc2VkID0gcGFyc2VDZXJ0KGNlcnQpO1xuICAgIGxldCBzdWJqZWN0ID0gY2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIikudmFsdWUgYXMgc3RyaW5nO1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBkb21haW5QYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcblxuICAgIGxldCByb290RG9tYWluUGFyc2VkID0gW2RvbWFpblBhcnRzLnNoaWZ0KCksIGRvbWFpblBhcnRzLnNoaWZ0KCldLnJldmVyc2UoKS5qb2luKFwiLlwiKTtcbiAgICBpZiAocm9vdERvbWFpblBhcnNlZCAhPT0gZG9tYWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgcm9vdCBkb21haW4gc2hvdWxkIGJlICR7ZG9tYWlufSwgYnV0IGlzICR7cm9vdERvbWFpblBhcnNlZH1gKTtcbiAgICB9XG4gICAgLy8gVE9ETzogTWF5YmUganVzdCBza2lwIGlmIGl0IGlzbid0IGEgaGFzaCBzdHJpbmc/XG4gICAgaWYgKGRvbWFpblBhcnRzWzBdID09PSBcIm5vcHJveHlcIikge1xuICAgICAgICBkb21haW5QYXJ0cy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGxldCBpc3N1ZXJDZXJ0UGFyc2VkID0gcGFyc2VDZXJ0KGlzc3VlckNlcnQpO1xuXG4gICAgbGV0IGlzc3VlckV4cGVjdGVkUHVibGljS2V5UGFydCA9IGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIjtcbiAgICBsZXQgaXNzdWVyQWN0dWFsUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGdldEVEMjU1MTlQdWJsaWNLZXkoaXNzdWVyQ2VydFBhcnNlZCkpO1xuICAgIGlmIChpc3N1ZXJFeHBlY3RlZFB1YmxpY0tleVBhcnQgIT09IGlzc3VlckFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJc3N1ZXIgcHVibGljIGtleSBpbiB0aGUgdXJsIGlzICR7aXNzdWVyRXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7aXNzdWVyQWN0dWFsUHVibGljS2V5UGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBUYWtlIHRoZSBsYXN0IHBhcnRcbiAgICBsZXQgY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCA9IGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIjtcbiAgICBsZXQgY2VydEFjdHVhbFB1YmxpY0tleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQpKTtcbiAgICBpZiAoY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCAhPT0gY2VydEFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IGluIHRoZSB1cmwgaXMgJHtjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7Y2VydEFjdHVhbFB1YmxpY0tleVBhcnR9YCk7XG4gICAgfVxuXG5cbiAgICBsZXQgbmFtZUNvbnN0cmFpbnRzID0gaXNzdWVyQ2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJuYW1lQ29uc3RyYWludHNcIikgYXMgYW55O1xuICAgIGlmICghbmFtZUNvbnN0cmFpbnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ0EgbXVzdCBoYXZlIG5hbWVDb25zdHJhaW50c2ApO1xuICAgIH1cbiAgICBsZXQgc3VidHJlZXMgPSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXM7XG4gICAgaWYgKCFzdWJ0cmVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENBIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gSWdub3JlIGxvY2FsaG9zdERvbWFpbiwgYXMgaXQgY2FuIGFsd2F5cyBzYWZlbHkgYmUgYWxsb3dlZCAodGhlIHNhbWUgbWFjaGluZSBpcyBhbHdheXMgYWxsb3dlZCkuXG4gICAgc3VidHJlZVZhbHVlcyA9IHN1YnRyZWVWYWx1ZXMuZmlsdGVyKCh4OiBzdHJpbmcpID0+IHggIT09IGxvY2FsaG9zdERvbWFpbik7XG4gICAgaWYgKHN1YnRyZWVWYWx1ZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ0EgbXVzdCBoYXZlIGEgc2luZ2xlIGNvbnN0cmFpbmVkIGRvbWFpbiAoaGFkICR7SlNPTi5zdHJpbmdpZnkoc3VidHJlZVZhbHVlcyl9KWApO1xuICAgIH1cblxuICAgIGxldCBzdWJ0cmVlID0gc3VidHJlZVZhbHVlc1swXTtcbiAgICBpZiAoc3VidHJlZSAhPT0gc3ViamVjdCAmJiAhc3ViamVjdC5lbmRzV2l0aChcIi5cIiArIHN1YnRyZWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBiZSBhIHN1YnRyZWUgb2YgdGhlIENBIChDQTogJHtzdWJ0cmVlfSwgY2VydDogJHtzdWJqZWN0fSlgKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUFsdE5hbWVzKGNlcnRQYXJzZWQsIHN1YmplY3QpO1xuXG4gICAgLy8gVmVyaWZ5IGlzc3VlciBBQ1RVQUxMWSBzaWduZWQgY2VydFBhcnNlZFxuICAgIGlmICghaXNzdWVyQ2VydFBhcnNlZC52ZXJpZnkoY2VydFBhcnNlZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJc3N1ZXIgZGlkIG5vdCBzaWduIGNlcnRpZmljYXRlYCk7XG4gICAgfVxufVxuXG4vLyBSZXF1aXJlIGFsdCBuYW1lcyB0byBiZSBlaXRoZXIgZXF1YWwgdG8gXCJDTlwiLCBvciBhIHN1YnRyZWUgb2YgXCJDTlwiXG5mdW5jdGlvbiB2YWxpZGF0ZUFsdE5hbWVzKGNlcnRQYXJzZWQ6IGZvcmdlLnBraS5DZXJ0aWZpY2F0ZSwgc3ViamVjdDogc3RyaW5nKSB7XG4gICAgbGV0IGxvY2FsaG9zdERvbWFpbiA9IFwiMTI3LTAtMC0xLlwiICsgc3ViamVjdC5zcGxpdChcIi5cIikuc2xpY2UoLTIpLmpvaW4oXCIuXCIpO1xuXG4gICAgbGV0IGFsdE5hbWVzT2JqID0gY2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJzdWJqZWN0QWx0TmFtZVwiKSBhcyBhbnk7XG4gICAgbGV0IGFsdE5hbWVzID0gYWx0TmFtZXNPYmo/LmFsdE5hbWVzLm1hcCgoeDogYW55KSA9PiB4LnZhbHVlKTtcbiAgICAvLyBBbGxvdyBsb2NhbGhvc3REb21haW4sIGFzIGl0IGNhbiBhbHdheXMgc2FmZWx5IGJlIGFsbG93ZWRcbiAgICBhbHROYW1lcyA9IGFsdE5hbWVzLmZpbHRlcigoeDogc3RyaW5nKSA9PiB4ICE9PSBsb2NhbGhvc3REb21haW4pO1xuICAgIGlmIChcbiAgICAgICAgYWx0TmFtZXMuc29tZSgoeDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB4ID09PSBzdWJqZWN0XG4gICAgICAgICAgICAgICAgfHwgeC5lbmRzV2l0aChcIi5cIiArIHN1YmplY3QpXG4gICAgICAgICAgICAgICAgLy8gTk9URTogV2UgZG9uJ3QgYWxsb3cgMTI3LjAuMC4xICh8fCB4ID09PSBCdWZmZXIuZnJvbShbMTI3LCAwLCAwLCAxXSkudG9TdHJpbmcoKSksIGJlY2F1c2UgaXQgaXMgc28gZWFzeSB0byBwdWJsaXNoIGEgMTI3LjAuMC4xIEEgcmVjb3JkLCBhbmQgZXZlbiB0byBnZW5lcmF0ZSBhIHJlYWwgY2VydCwgc28gd2Ugc2hvdWxkIGp1c3QgZG8gdGhhdCwgYW5kIGtlZXAgaXQgc2VjdXJlLiBJZiB3ZSBuZWVkIHRoaXMgZm9yIGRldmVsb3BtZW50IHdlIGNhbiBwdXQgaXQgYmVoaW5kIGEgZmxhZywgc28gbm9uLWRldmVsb3BtZW50IGluc3RhbmNlcyBhcmUgc3RpbGwgc2VjdXJlLlxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhbHQgbmFtZXMuIE11c3QgYmUgc3VidHJlZXMgb2YgdGhlIHN1YmplY3QgKENOKSAke0pTT04uc3RyaW5naWZ5KHN1YmplY3QpfSwgd2FzICR7SlNPTi5zdHJpbmdpZnkoYWx0TmFtZXMpfWApO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKCkge1xuICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKCkge1xuICAgICAgICAvLyBOT1RFOiBXZSB1c2UgRUQyNTUxOSBiZWNhdXNlIGl0IGNhbiBnZW5lcmF0ZSBrZXlzIGFib3V0IDEwWCBmYXN0ZXIgdGhhbiBSU0EgKHdoaWNoIGlzIHN0aWxsIHNsb3csIH42bXMgb24gbXkgbWFjaGluZSwgc28gd2UgREVGSU5JVEVMWSBkb24ndCB3YW50IGl0IHRvIGJlIDEwWCBzbG93ZXIhKSAtIGh0dHBzOi8vc2VjdXJpdHkuc3RhY2tleGNoYW5nZS5jb20vYS8yMzY5NDMvMjgyMzY3XG4gICAgICAgIHJldHVybiBmb3JnZS5lZDI1NTE5LmdlbmVyYXRlS2V5UGFpcigpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDQShkb21haW46IHN0cmluZykge1xuICAgIGNvbnN0IGtleVBhaXIgPSBnZW5lcmF0ZUtleVBhaXIoKTtcbiAgICBsZXQgY2FQdWJsaWNLZXlQYXJ0ID0gZ2V0RG9tYWluUGFydEZyb21QdWJsaWNLZXkoa2V5UGFpci5wdWJsaWNLZXkpO1xuICAgIGxldCBmdWxsRG9tYWluID0gYCR7Y2FQdWJsaWNLZXlQYXJ0fS4ke2RvbWFpbn1gO1xuICAgIHJldHVybiBjcmVhdGVYNTA5KHsgZG9tYWluOiBmdWxsRG9tYWluLCBpc3N1ZXI6IFwic2VsZlwiLCBrZXlQYWlyLCBsaWZlU3BhbjogdGltZUluRGF5ICogMzY1ICogMjAgfSk7XG59XG5cbmxldCBpZGVudGl0eUNBID0gY2FjaGUoKGRvbWFpbjogc3RyaW5nKSA9PiBsYXp5KCgpOiBYNTA5S2V5UGFpciA9PiB7XG4gICAgbGV0IGlkZW50aXR5Q0FDYWNoZWQgPSBnZXRJZGVudGl0eVN0b3JlKGRvbWFpbik7XG4gICAgbGV0IGNhQ2FjaGVkID0gaWRlbnRpdHlDQUNhY2hlZC5nZXQoKTtcbiAgICBpZiAoIWNhQ2FjaGVkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBHZW5lcmF0aW5nIG5ldyBpZGVudGl0eSBDQWApO1xuICAgICAgICBsZXQgdmFsdWUgPSBnZW5lcmF0ZUNBKGRvbWFpbik7XG4gICAgICAgIGNhQ2FjaGVkID0ge1xuICAgICAgICAgICAgZG9tYWluOiB2YWx1ZS5kb21haW4sXG4gICAgICAgICAgICBjZXJ0QjY0OiB2YWx1ZS5jZXJ0LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICAgICAga2V5QjY0OiB2YWx1ZS5rZXkudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgICAgIH07XG4gICAgICAgIGlkZW50aXR5Q0FDYWNoZWQuc2V0KGNhQ2FjaGVkKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgZG9tYWluOiBjYUNhY2hlZC5kb21haW4sXG4gICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKGNhQ2FjaGVkLmNlcnRCNjQsIFwiYmFzZTY0XCIpLFxuICAgICAgICBrZXk6IEJ1ZmZlci5mcm9tKGNhQ2FjaGVkLmtleUI2NCwgXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICB0cnVzdENlcnRpZmljYXRlKHJlc3VsdC5jZXJ0LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59KSk7XG5cbi8vIElNUE9SVEFOVCEgV2UgZG8gbm90IGVtYmVkIGFueSBkZWJ1ZyBpbmZvIGluIHRoaXMgZG9tYWluLiBJZiB3ZSBkaWQsIGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Li4uIHBvdGVudGFsbHkgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBhcyBpZiB0aGUgZGVidWcgaW5mbyAoc3VjaCBhcyBhIHByZWZpeCkgaXMgdXNlZCB0byBpZGVudGlmeSB3aGF0IGEgY2VydGlmaWNhdGUgaXMgZm9yLCBpdCB3b3VsZCBiZSBlYXN5IGZvciBhbiBhdHRhY2sgdG8gZm9yZ2UgdGhpcyAoYXMgdGhlIGRlYnVnIGluZm8gd29uJ3QgYmUgc2VjdXJlZCkuIFNvIGl0IGlzIG11Y2ggYmV0dGVyIHRvIGtlZXAgdGhlIGNlcnRpZmljYXRlIG9wYXF1ZSwgYW5kIHRoZW4gcmVxdWlyZSBhbnkgbWV0YWRhdGEgdG8gYmUgYWN0dWFsbHkgdmV0dGVkIChhbmQgaG9wZWZ1bGx5IHN0b3JlZCBpbiBhIFVJLCBzaG93aW5nIElQLCB0aW1lLCBldGMpLlxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNlcnRGcm9tQ0EoY29uZmlnOiB7XG4gICAgQ0FLZXlQYWlyOiBYNTA5S2V5UGFpcjtcbn0pOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIG1lYXN1cmVCbG9jayhmdW5jdGlvbiBjcmVhdGVDZXJ0RnJvbUNBKCkge1xuICAgICAgICBsZXQgeyBDQUtleVBhaXIgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3Qga2V5UGFpciA9IGdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgICBsZXQgZG9tYWluS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGtleVBhaXIucHVibGljS2V5KTtcbiAgICAgICAgbGV0IGZ1bGxEb21haW4gPSBgJHtkb21haW5LZXlQYXJ0fS4ke2NvbmZpZy5DQUtleVBhaXIuZG9tYWlufWA7XG4gICAgICAgIHJldHVybiBjcmVhdGVYNTA5KHtcbiAgICAgICAgICAgIGRvbWFpbjogZnVsbERvbWFpbixcbiAgICAgICAgICAgIGlzc3VlcjogQ0FLZXlQYWlyLFxuICAgICAgICAgICAga2V5UGFpcixcbiAgICAgICAgICAgIGxpZmVTcGFuOiB0aW1lSW5EYXkgKiAzNjUgKiAxMCxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWNoaW5lSWQoZG9tYWluTmFtZU9yTm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRlY29kZU5vZGVJZEFzc2VydChkb21haW5OYW1lT3JOb2RlSWQsIGRvbWFpbiwgXCJhbGxvd01pc3NpbmdUaHJlYWRJZFwiKS5tYWNoaW5lSWQ7XG59XG5cbmV4cG9ydCB0eXBlIE5vZGVJZFBhcnRzID0ge1xuICAgIHRocmVhZElkOiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgZG9tYWluOiBzdHJpbmc7XG4gICAgcG9ydDogbnVtYmVyO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVOb2RlSWQobm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nLCBhbGxvd01pc3NpbmdUaHJlYWRJZD86IFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIik6IE5vZGVJZFBhcnRzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbG9jYXRpb25PYmogPSBnZXROb2RlSWRMb2NhdGlvbihub2RlSWQpO1xuICAgIGlmICghbG9jYXRpb25PYmopIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHBhcnRzID0gbG9jYXRpb25PYmouYWRkcmVzcy5zcGxpdChcIi5cIik7XG4gICAgLy8gTk9URTogV2UgaGF2ZSB0byBvbmx5IGFsbG93IGxvY2FsaG9zdCBkb21haW5zIG9uIG91ciBvd24gZG9tYWluLCBhcyB0aGUgdW5kZXJseWluZyBkb21haW4gZ2V0cyBzdHJpcHBlZCB3aGVuIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIG1hY2hpbmVJZC4gU28gaWYgd2UgYWxsb3dlZCBsb2NhbGhvc3QgZG9tYWlucyBvbiBvdGhlciBkb21haW5zLCBhIHNlcnZlciBjb3VsZCB0cmljayB1cyBpbnRvIGNvbm5lY3RpbmcgdG8gaXQsIGFuZCB0aGVuIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGl0IGNvdWxkIHRhbGsgYmFjayBhbmQgd2Ugd291bGQgdGhpbmsgaXQgaGFzIGEgbG9jYWxob3N0IG1hY2hpbmVJZCwgd2hpY2ggaXMgaW1wbGljaXRseSB0cnVzdGVkLCB3aGljaCB3b3VsZCB0aGVuIGdpdmUgaXQgYWNjZXNzIHRvIGV2ZXJ5dGhpbmcuXG4gICAgaWYgKGxvY2F0aW9uT2JqLmFkZHJlc3MgPT09IGAxMjctMC0wLTEuJHtkb21haW59YCAmJiBub2RlSWQuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aHJlYWRJZDogXCJcIixcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcGFydHMuYXQoLTMpIHx8IFwiXCIsXG4gICAgICAgICAgICBkb21haW46IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgIHBvcnQ6IGxvY2F0aW9uT2JqLnBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBpc1ZhbGlkID0gcGFydHMubGVuZ3RoID49IDQgfHwgYWxsb3dNaXNzaW5nVGhyZWFkSWQgJiYgcGFydHMubGVuZ3RoID09PSAzO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0aHJlYWRJZDogcGFydHMuYXQoLTQpIHx8IFwiXCIsXG4gICAgICAgIG1hY2hpbmVJZDogcGFydHMuYXQoLTMpIHx8IFwiXCIsXG4gICAgICAgIGRvbWFpbjogcGFydHMuc2xpY2UoLTIpLmpvaW4oXCIuXCIpIHx8IFwiXCIsXG4gICAgICAgIHBvcnQ6IGxvY2F0aW9uT2JqLnBvcnQsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVOb2RlSWRBc3NlcnQobm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nLCBhbGxvd01pc3NpbmdUaHJlYWRJZD86IFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIik6IE5vZGVJZFBhcnRzIHtcbiAgICBsZXQgcmVzdWx0ID0gZGVjb2RlTm9kZUlkKG5vZGVJZCwgZG9tYWluLCBhbGxvd01pc3NpbmdUaHJlYWRJZCk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5vZGVJZDogJHtKU09OLnN0cmluZ2lmeShub2RlSWQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5vZGVJZChwYXJ0czogTm9kZUlkUGFydHMpIHtcbiAgICByZXR1cm4gYCR7cGFydHMudGhyZWFkSWR9LiR7cGFydHMubWFjaGluZUlkfS4ke3BhcnRzLmRvbWFpbn06JHtwYXJ0cy5wb3J0fWA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJZGVudGl0eUNBUmF3KGRvbWFpbjogc3RyaW5nLCBqc29uOiBzdHJpbmcpIHtcbiAgICBsZXQgaWRlbnRpdHlDQUNhY2hlZCA9IGdldElkZW50aXR5U3RvcmUoZG9tYWluKTtcbiAgICBsZXQgb2JqID0gSlNPTi5wYXJzZShqc29uKSBhcyB7XG4gICAgICAgIGRvbWFpbjogc3RyaW5nO1xuICAgICAgICBjZXJ0QjY0OiBzdHJpbmc7XG4gICAgICAgIGtleUI2NDogc3RyaW5nO1xuICAgIH07XG4gICAgbGV0IGNhID0ge1xuICAgICAgICBkb21haW46IG9iai5kb21haW4sXG4gICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKG9iai5jZXJ0QjY0LCBcImJhc2U2NFwiKSxcbiAgICAgICAga2V5OiBCdWZmZXIuZnJvbShvYmoua2V5QjY0LCBcImJhc2U2NFwiKSxcbiAgICB9O1xuICAgIHRydXN0Q2VydGlmaWNhdGUoY2EuY2VydC50b1N0cmluZygpKTtcbiAgICBpZGVudGl0eUNBKGRvbWFpbikuc2V0KGNhKTtcbiAgICBnZXRUaHJlYWRLZXlDZXJ0QmFzZShkb21haW4pLnJlc2V0KCk7XG4gICAgaWRlbnRpdHlDQUNhY2hlZC5zZXQob2JqKTtcbiAgICByZXNldEFsbE5vZGVDYWxsRmFjdG9yaWVzKCk7XG59XG5cbi8vIE5PVEU6IFRoZSBpZGVudGl0eSBDQSBpcyBhdmFpbGFibGUgc3luY2hyb25vdXNseSAoc3RvcmFnZSBpcyBmcy9sb2NhbFN0b3JhZ2UsIGJvdGggc3luY2hyb25vdXMpLCBzbyB0aGlzIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHN0YXJ0dXAgY29kZSB0aGF0IGF3YWl0cyBpdC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkSWRlbnRpdHlDQShkb21haW46IHN0cmluZykge1xuICAgIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aXR5Q0EoZG9tYWluOiBzdHJpbmcpOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuXG4vLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBhIGRhdGFiYXNlLCBzbyBpdCBpcyBlYXN5IGZvciB1cyB0byB0cnVzdCBDQXMgY3Jvc3MgbWFjaGluZSwgYW5kIGV2ZW4gaGF2ZSBtdWx0aXBsZSB1c2VycywgZXRjLCBldGMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpdHlDQVByb21pc2UoZG9tYWluOiBzdHJpbmcpOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25NYWNoaW5lSWQoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0TWFjaGluZUlkKGdldElkZW50aXR5Q0EoZG9tYWluKS5kb21haW4sIGRvbWFpbik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duVGhyZWFkSWQoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZGVjb2RlTm9kZUlkQXNzZXJ0KGdldFRocmVhZEtleUNlcnQoZG9tYWluKS5kb21haW4sIGRvbWFpbikudGhyZWFkSWQ7XG59XG5cbi8qKiBQYXJ0IG9mIHRoZSBtYWNoaW5lSWQgY29tZXMgZnJvbSB0aGUgcHVibGljS2V5LCBzbyB3ZSBjYW4gdXNlIGl0IHRvIHZlcmlmeSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeU1hY2hpbmVJZEZvclB1YmxpY0tleShjb25maWc6IHtcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBwdWJsaWNLZXk6IEJ1ZmZlcjtcbn0pOiBib29sZWFuIHtcbiAgICBsZXQgeyBtYWNoaW5lSWQsIHB1YmxpY0tleSB9ID0gY29uZmlnO1xuICAgIGxldCBkb21haW5QYXJ0ID0gZ2V0RG9tYWluUGFydEZyb21QdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICAvLyBtYWNoaW5lSWQgaXMgdGhlIGJhcmUga2V5LWhhc2ggbGFiZWwsIGJ1dCBhbHNvIGFjY2VwdCBsZWdhY3kgXCJoYXNoLmRvbWFpbi50bGRcIiBmb3Jtc1xuICAgIHJldHVybiBtYWNoaW5lSWQuc3BsaXQoXCIuXCIpWzBdID09PSBkb21haW5QYXJ0O1xufVxuXG4vLyBOT1RFOiBXZSBkb24ndCBoYXZlIGEgY2FjaGUgcGVyIENBLCBhcy4uLiB0aGUgQ0Egc2hvdWxkIGJlIHNldCBmaXJzdFxuLy8gVE9ETzogTWF5YmUgdGhyb3cgaWYgdGhleSB0cnkgdG8gY2hhbmdlIHRoZSBDQSBhZnRlciB0aGV5IGdlbmVyYXRlIGFueSBjZXJ0aWZpY2F0ZXM/XG4vLyBUT0RPOiBSZWdlbmVyYXRlIGNlcnRpZmljYXRlcyBhZnRlciBlbm91Z2ggdGltZSAoYXMgdGhyZWFkIGNlcnRzIHNob3VsZCBiZSByZWxhdGl2ZWx5IHNob3J0IGxpdmVkLCBzbyBpdCBpcyBwbGF1c2libGUgZm9yIHRoZW0gdG8gZXhwaXJlKS4gV2Ugd2lsbCBhbHNvIG5lZWQgdG8gcHJvdmlkZSBhIGNhbGxiYWNrIHNvIHRoYXQgdXNlcnMgb2YgdGhlIGNlcnQgY2FuIHVwZGF0ZSB0aGUgY2VydCB0aGV5IGFyZSB1c2luZyBhcyB3ZWxsLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFRocmVhZEtleUNlcnQoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0VGhyZWFkS2V5Q2VydEJhc2UoZG9tYWluKSgpO1xufVxuY29uc3QgZ2V0VGhyZWFkS2V5Q2VydEJhc2UgPSBjYWNoZSgoZG9tYWluOiBzdHJpbmcpID0+IGxhenkoKCkgPT4ge1xuICAgIGxldCBjYSA9IGdldElkZW50aXR5Q0EoZG9tYWluKTtcbiAgICByZXR1cm4gY3JlYXRlQ2VydEZyb21DQSh7IENBS2V5UGFpcjogY2EgfSk7XG59KSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Ob2RlSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgbm9kZUlkID0gU29ja2V0RnVuY3Rpb24ubW91bnRlZE5vZGVJZDtcbiAgICBpZiAoIW5vZGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgbXVzdCBiZSBtb3VudGVkIGJlZm9yZSBub2RlSWQgaXMgYWNjZXNzZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVJZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93bk5vZGVJZEFsbG93VW5kZWZpbmVkKCkge1xuICAgIHJldHVybiBTb2NrZXRGdW5jdGlvbi5tb3VudGVkTm9kZUlkO1xufSJdfQ==
468
- /* _JS_SOURCE_HASH = "1d83400606d976cb8c71fbb87684eb3e68498980b35716a2abdb9c666ca22539"; */
471
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0RBQWtEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRCwrbkJBQStuQjtBQUMvbkIsc0lBQXNJO0FBRXRJLGlEQUFpRDtBQUVqRCx1RUFBK0Q7QUFDL0Qsa0RBQW9DO0FBR3BDLHlEQUEwRDtBQUUxRCwwREFBK0I7QUFDL0Isb0RBQTRCO0FBQzVCLDZEQUFpRTtBQUNqRSxtRUFBOEY7QUFDOUYsNkRBQWtIO0FBQ2xILG1FQUFnRTtBQUNoRSw2REFBMEU7QUFDMUUscUVBQTRFO0FBQzVFLHdDQUF1QztBQUV2QyxJQUFBLHNCQUFPLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsSUFBQSxzQkFBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRW5ELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUV6QixRQUFBLGtCQUFrQixHQUFHLHNDQUFzQyxDQUFDO0FBRTVELFFBQUEsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO0FBR2pELFNBQVMsZ0JBQWdCLENBQUMsTUFBYztJQUNwQyxPQUFPLElBQUEsb0NBQVcsRUFBc0IsTUFBTSxFQUFFLDBCQUFrQixDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxtRkFBbUY7QUFDbkYsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYztJQUNsRCxPQUFPLElBQUEsNENBQW1CLEVBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSwwQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUZELDBEQUVDO0FBSUQsU0FBZ0IsYUFBYSxDQUFDLElBQXFCO0lBQy9DLElBQUksT0FBTyxHQUFHLElB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QyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFSixTQUFnQixZQUFZO0lBQ3hCLElBQUksTUFBTSxHQUFHLCtCQUFjLENBQUMsYUFBYSxDQUFDO0lBQzFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQU5ELG9DQU1DO0FBRUQsU0FBZ0IsMEJBQTBCO0lBQ3RDLE9BQU8sK0JBQWMsQ0FBQyxhQUFhLENBQUM7QUFDeEMsQ0FBQztBQUZELGdFQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vbm9kZS1mb3JnZS1lZDI1NTE5LmQudHNcIiAvPlxuXG4vLyBOT1RFOiBXZSBjYW4ndCB1c2UgY3J5cHRvLnN1YnRsZSAobm9uLWV4dHJhY3RhYmxlIENyeXB0b0tleXMpIGZvciBvdXIga2V5cywgYmVjYXVzZSBzdWJ0bGUgaXMgYXN5bmNocm9ub3VzLCBhbmQgZXZlcnl0aGluZyBoZXJlIChrZXkgZ2VuZXJhdGlvbiwgY2VydCBjcmVhdGlvbiwgc2lnbmluZykgbXVzdCBiZSBhdmFpbGFibGUgc3luY2hyb25vdXNseS4gVGhlIG9ubHkgcmVhbCBiZW5lZml0IG9mIHN1YnRsZSBpcyB0aGF0IGEgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgYXR0YWNrIGNhbid0IGV4ZmlsdHJhdGUgdGhlIGtleS4gV2hpY2gsIHdoaWxlIG5pY2UsIGlzIG9mIG1pbm9yIGJlbmVmaXQsIGFzIHRoZSBjcm9zcy1zaXRlIHNjcmlwdCBjYW4gYWxyZWFkeSBkbyBxdWl0ZSBhIGJpdCBvZiBkYW1hZ2UgYW55d2F5IHdpdGggYWNjZXNzLiBBbmQgaWYgdGhhdCBoYXBwZW5zLCB0aGUgZmlyc3QgdGhpbmcgdGhlIHVzZXIgaXMgcHJvYmFibHkgZ29pbmcgdG8gZG8gaXMgcmVzZXQgYWxsIHRoZWlyIGNyZWRlbnRpYWxzLCB3aGljaCBzb2x2ZXMgdGhlIGNhc2Ugb2YgdGhlIGtleSBiZWluZyBleGZpbHRyYXRlZCBhbnl3YXkgKGJ5IHRlbGxpbmcgdGhlIHNlcnZlciB0byBzdG9wIHRydXN0aW5nIGFsbCBpZGVudGl0aWVzKS5cbi8vIE5PVEU6IFdlIGFyZSBqdXN0IG5vdCBnb2luZyB0byBzdXBwb3J0IEhUVFBTIGJyb3dzZXIgY2VydHMuIE91ciBjb2RlIGlzIHB1cmVseSBmb3IgaWRlbnRpZmljYXRpb24sIGFuZCBzbyBpdCBvbmx5IHN1cHBvcnRzIEVEMjU1MTkuXG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1MjgwI3BhZ2UtNDJcblxuaW1wb3J0IHsgc2V0RmxhZyB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vcmVxdWlyZS9jb21waWxlRmxhZ3NcIjtcbmltcG9ydCAqIGFzIGZvcmdlIGZyb20gXCJub2RlLWZvcmdlXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgZnNTeW5jIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgY2FjaGUsIGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgc2hhMjY1IGZyb20gXCJqcy1zaGEyNTZcIjtcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgdHJ1c3RDZXJ0aWZpY2F0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NlcnRTdG9yZVwiO1xuaW1wb3J0IHsgbWVhc3VyZUJsb2NrLCBtZWFzdXJlRm5jLCBtZWFzdXJlV3JhcCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL3Byb2ZpbGluZy9tZWFzdXJlXCI7XG5pbXBvcnQgeyBnZXROb2RlSWREb21haW4sIGdldE5vZGVJZERvbWFpbk1heWJlVW5kZWZpbmVkLCBnZXROb2RlSWRMb2NhdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL25vZGVDYWNoZVwiO1xuaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyByZXNldEFsbE5vZGVDYWxsRmFjdG9yaWVzIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBnZXRLZXlTdG9yZSwgREVWX2dldEtleVN0b3JlUGF0aCB9IGZyb20gXCIuL3BlcnNpc3RlbnRMb2NhbFN0b3JhZ2VcIjtcbmltcG9ydCB7IGVsbGlwc2l6ZSB9IGZyb20gXCIuLi9zdHJpbmdzXCI7XG5cbnNldEZsYWcocmVxdWlyZSwgXCJub2RlLWZvcmdlXCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5zZXRGbGFnKHJlcXVpcmUsIFwianMtc2hhMjU2XCIsIFwiYWxsb3djbGllbnRcIiwgdHJ1ZSk7XG5cbmNvbnN0IHRpbWVJbkRheSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbmV4cG9ydCBjb25zdCBDQV9OT1RfRk9VTkRfRVJST1IgPSBcIjE4YWE3MzE4LWY4OGYtNGQyZC1iNDFmLTNkYWY0YTQzMzgyN1wiO1xuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlTdG9yYWdlS2V5ID0gXCJtYWNoaW5lQ0FfMTRcIjtcbmV4cG9ydCB0eXBlIElkZW50aXR5U3RvcmFnZVR5cGUgPSB7IGRvbWFpbjogc3RyaW5nOyBjZXJ0QjY0OiBzdHJpbmc7IGtleUI2NDogc3RyaW5nIH07XG5cbmZ1bmN0aW9uIGdldElkZW50aXR5U3RvcmUoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0S2V5U3RvcmU8SWRlbnRpdHlTdG9yYWdlVHlwZT4oZG9tYWluLCBpZGVudGl0eVN0b3JhZ2VLZXkpO1xufVxuXG4vLyBKdXN0IHVzZWQgZm9yIG1hY2hpbmUgbWFpbnRlbmFuY2UgKGZpbmRpbmcgYSBtYWNoaW5lJ3MgaWRlbnRpdHkgZmlsZSBvbiBkaXNrLCBleCB0byBjb3B5IGl0IHRvXG4vLyBhbm90aGVyIG1hY2hpbmUgb3ZlciBzc2gpLiBORVZFUiBhY2Nlc3MgdGhpcyB1bmxlc3MgZXhwbGljaXRseSBnaXZlbiBwZXJtaXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIERFVl9nZXRJZGVudGl0eUZpbGVQYXRoKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWU6IGRvbWFpbiwga2V5OiBpZGVudGl0eVN0b3JhZ2VLZXkgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWDUwOUtleVBhaXIgeyBkb21haW46IHN0cmluZzsgY2VydDogQnVmZmVyOyBrZXk6IEJ1ZmZlcjsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbW9uTmFtZShjZXJ0OiBCdWZmZXIgfCBzdHJpbmcpIHtcbiAgICBsZXQgc3ViamVjdCA9IG5ldyBjcnlwdG8uWDUwOUNlcnRpZmljYXRlKGNlcnQpLnN1YmplY3Q7XG4gICAgbGV0IHN1YmplY3RLVlBzID0gbmV3IE1hcChzdWJqZWN0LnNwbGl0KFwiLFwiKS5tYXAoeCA9PiB4LnRyaW0oKS5zcGxpdChcIj1cIikpLm1hcCh4ID0+IFt4WzBdLCB4LnNsaWNlKDEpLmpvaW4oXCI9XCIpXSkpO1xuICAgIGxldCBjb21tb25OYW1lID0gc3ViamVjdEtWUHMuZ2V0KFwiQ05cIik7XG4gICAgaWYgKCFjb21tb25OYW1lKSB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1vbiBuYW1lIGluIHN1YmplY3Q6ICR7c3ViamVjdH1gKTtcbiAgICByZXR1cm4gY29tbW9uTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVg1MDkoXG4gICAgY29uZmlnOiB7XG4gICAgICAgIGRvbWFpbjogc3RyaW5nO1xuICAgICAgICBpc3N1ZXI6IFg1MDlLZXlQYWlyIHwgXCJzZWxmXCI7XG4gICAgICAgIGxpZmVTcGFuOiBudW1iZXI7XG4gICAgICAgIGtleVBhaXI6IHtcbiAgICAgICAgICAgIHB1YmxpY0tleTogZm9yZ2UuRWQyNTUxOVB1YmxpY0tleTtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IGZvcmdlLkVkMjU1MTlQcml2YXRlS2V5O1xuICAgICAgICB9O1xuICAgIH1cbik6IFg1MDlLZXlQYWlyIHtcbiAgICByZXR1cm4gbWVhc3VyZUJsb2NrKGZ1bmN0aW9uIGNyZWF0ZVg1MDkoKSB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgaXNzdWVyLCBsaWZlU3Bhbiwga2V5UGFpciB9ID0gY29uZmlnO1xuXG4gICAgICAgIGxldCBjZXJ0T2JqID0gZm9yZ2UucGtpLmNyZWF0ZUNlcnRpZmljYXRlKCk7XG4gICAgICAgIGNlcnRPYmoucHVibGljS2V5ID0ga2V5UGFpci5wdWJsaWNLZXkgYXMgdW5rbm93biBhcyBmb3JnZS5wa2kuUHVibGljS2V5O1xuICAgICAgICBjZXJ0T2JqLnNlcmlhbE51bWJlciA9IFwiMDFcIjtcbiAgICAgICAgLy8gR2l2ZSBpdCA1IG1pbnV0ZXMgYmVmb3JlIG5vdy4gSWYgd2UgZ2l2ZSBpdCB0b28gbXVjaCB0aW1lLCBpdCBjYW4gbG9vayBsaWtlIHRoZSBjZXJ0IGlzIHJlYWxseSBvbGQsIHdoaWNoIHdpbGwgdHJpZ2dlciB2YXJpb3VzIHByb2Nlc3NlcyB0byB0cnkgdG8gZ2V0IGEgZnJlc2hlciBvbmUgKGFzIGlmIGl0IGxhc3RzIGZvciAxIGhvdXIsIGJ1dCB3ZSBzZXQgbm90QmVmb3JlIHRvIDEgbW9udGggYWdvLCBpdCBsb29rcyAxIG1vbnRoIG9sZCwgYW5kIHNvIGFsbW9zdCBleHBpcmVkLCB3aGVuIGl0IGlzbid0Li4uKVxuICAgICAgICBjZXJ0T2JqLnZhbGlkaXR5Lm5vdEJlZm9yZSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwICogNjAgKiA1KTtcbiAgICAgICAgY2VydE9iai52YWxpZGl0eS5ub3RBZnRlciA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBsaWZlU3Bhbik7XG5cbiAgICAgICAgY29uc3QgY29tbW9uTmFtZUF0dHJzID0gW3sgbmFtZTogXCJjb21tb25OYW1lXCIsIHZhbHVlOiBkb21haW4gfV07XG4gICAgICAgIGNlcnRPYmouc2V0U3ViamVjdChjb21tb25OYW1lQXR0cnMpO1xuXG4gICAgICAgIGlmIChpc3N1ZXIgPT09IFwic2VsZlwiKSB7XG4gICAgICAgICAgICBjZXJ0T2JqLnNldElzc3Vlcihjb21tb25OYW1lQXR0cnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VydE9iai5zZXRJc3N1ZXIoZm9yZ2UucGtpLmNlcnRpZmljYXRlRnJvbVBlbShpc3N1ZXIuY2VydC50b1N0cmluZygpKS5zdWJqZWN0LmF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4dGVuc2lvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgaXNDQSA9IGlzc3VlciA9PT0gXCJzZWxmXCI7XG4gICAgICAgIGlmIChpc0NBKSB7XG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goeyBuYW1lOiBcImJhc2ljQ29uc3RyYWludHNcIiwgY0E6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxIb3N0RG9tYWluID0gXCIxMjctMC0wLTEuXCIgKyBkb21haW4uc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgICAgICBleHRlbnNpb25zLnB1c2goLi4uW1xuICAgICAgICAgICAgeyBuYW1lOiBcImtleVVzYWdlXCIsIGtleUNlcnRTaWduOiBpc0NBLCBkaWdpdGFsU2lnbmF0dXJlOiB0cnVlLCBub25SZXB1ZGlhdGlvbjogdHJ1ZSwga2V5RW5jaXBoZXJtZW50OiB0cnVlLCBkYXRhRW5jaXBoZXJtZW50OiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3ViamVjdEtleUlkZW50aWZpZXJcIiB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic3ViamVjdEFsdE5hbWVcIixcbiAgICAgICAgICAgICAgICBhbHROYW1lczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBkb21haW4gfSxcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAyLCB2YWx1ZTogXCIqLlwiICsgZG9tYWluIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogMiwgdmFsdWU6IGxvY2FsSG9zdERvbWFpbiB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBObyBsb25nZXIgYWxsb3cgMTI3LjAuMC4xICh7IHR5cGU6IDcsIGlwOiBcIjEyNy4wLjAuMVwiIH0pLCB0byBtYWtlIHRoaXMgbW9yZSBzZWN1cmUuIFdlIG1pZ2h0IGVuYWJsZSB0aGlzIGJlaGF2aW9yIGJlaGluZCBhIGZsYWcsIGZvciBkZXZlbG9wbWVudC5cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gTk9URTogbmFtZUNvbnN0cmFpbnRzIHJlcXVpcmUgb3VyIGZvcmtlZCBub2RlLWZvcmdlIChcIm5vZGUtZm9yZ2VcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc2xpZnRpc3QvZm9yZ2UjZTYxODE4MWI0NjliMDdiZGM3MGI5NjhiMDM5MWJlYjhlZjVmZWNkNlwiKS4gQ2hyb21lIGlnbm9yZXMgdGhlbSAoaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA3MjA4MyksIGJ1dCBvdXIgb3duIHZhbGlkYXRpb24gKHZhbGlkYXRlQ0FDZXJ0L3ZhbGlkYXRlQ2VydGlmaWNhdGUpIGVuZm9yY2VzIHRoZW0uXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lQ29uc3RyYWludHNcIixcbiAgICAgICAgICAgICAgICBwZXJtaXR0ZWRTdWJ0cmVlczogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBmb3JnZS51dGlsLmVuY29kZVV0ZjgoZG9tYWluKSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IDIsIHZhbHVlOiBmb3JnZS51dGlsLmVuY29kZVV0ZjgobG9jYWxIb3N0RG9tYWluKSB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBjZXJ0T2JqLnNldEV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7XG5cblxuICAgICAgICBtZWFzdXJlQmxvY2soZnVuY3Rpb24gc2lnbigpIHtcbiAgICAgICAgICAgIGlmIChpc3N1ZXIgPT09IFwic2VsZlwiKSB7XG4gICAgICAgICAgICAgICAgY2VydE9iai5zaWduKGtleVBhaXIucHJpdmF0ZUtleSBhcyBhbnkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjZXJ0T2JqLnNpZ24oZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5RnJvbVBlbShpc3N1ZXIua2V5LnRvU3RyaW5nKCkpIGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gdG9QZW1zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb21haW4sXG4gICAgICAgICAgICAgICAgY2VydDogQnVmZmVyLmZyb20oZm9yZ2UucGtpLmNlcnRpZmljYXRlVG9QZW0oY2VydE9iaikpLFxuICAgICAgICAgICAgICAgIGtleTogQnVmZmVyLmZyb20ocHJpdmF0ZUtleVRvUGVtKGtleVBhaXIucHJpdmF0ZUtleSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUtleVRvUGVtKGtleTogZm9yZ2UuRWQyNTUxOVByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gZm9yZ2UuZWQyNTUxOS5wcml2YXRlS2V5VG9QZW0oa2V5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNlcnQoUEVNb3JERVI6IHN0cmluZyB8IEJ1ZmZlcikge1xuICAgIHJldHVybiBmb3JnZS5wa2kuY2VydGlmaWNhdGVGcm9tUGVtKG5vcm1hbGl6ZUNlcnRUb1BFTShQRU1vckRFUikpO1xufVxuXG5mdW5jdGlvbiBnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQ6IGZvcmdlLnBraS5DZXJ0aWZpY2F0ZSk6IGZvcmdlLkVkMjU1MTlQdWJsaWNLZXkge1xuICAgIGxldCBwdWJsaWNLZXkgPSBjZXJ0UGFyc2VkLnB1YmxpY0tleTtcbiAgICBpZiAoIShcInB1YmxpY0tleUJ5dGVzXCIgaW4gcHVibGljS2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgRUQyNTUxOSBjZXJ0aWZpY2F0ZXMgYXJlIHN1cHBvcnRlZCwgdGhlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXkgaXMgbm90IEVEMjU1MTkgKHN1YmplY3Q6ICR7Y2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIik/LnZhbHVlfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHB1YmxpY0tleSBhcyB1bmtub3duIGFzIGZvcmdlLkVkMjU1MTlQdWJsaWNLZXk7XG59XG5cbi8vIEdldHMgYSB1bmlxdWUgdmFsdWUgdG8gcmVwcmVzZW50IHRoZSBwdWJsaWMga2V5XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljSWRlbnRpZmllcihQRU1vckRFUjogc3RyaW5nIHwgQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZ2V0RUQyNTUxOVB1YmxpY0tleShwYXJzZUNlcnQoUEVNb3JERVIpKS5wdWJsaWNLZXlCeXRlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduID0gbWVhc3VyZVdyYXAoZnVuY3Rpb24gc2lnbihrZXlQYWlyOiB7IGtleTogc3RyaW5nIHwgQnVmZmVyIH0sIGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGxldCBkYXRhU3RyID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgbGV0IHByaXZhdGVLZXkgPSBmb3JnZS5lZDI1NTE5LnByaXZhdGVLZXlGcm9tUGVtKGtleVBhaXIua2V5LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBwcml2YXRlS2V5LnNpZ24oZGF0YVN0cik7XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeShjZXJ0OiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBkYXRhOiB1bmtub3duKSB7XG4gICAgbGV0IGNlcnRPYmogPSBwYXJzZUNlcnQoY2VydCk7XG4gICAgbGV0IHB1YmxpY0tleSA9IGdldEVEMjU1MTlQdWJsaWNLZXkoY2VydE9iaik7XG4gICAgbGV0IGRhdGFTdHIgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBpZiAoIXB1YmxpY0tleS52ZXJpZnkoZGF0YVN0ciwgc2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkLiBTaWduYXR1cmU6ICR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlKX0gfCBEYXRhOiAke2VsbGlwc2l6ZShkYXRhU3RyLCAxMDI0KX1gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNlcnRUb1BFTShQRU1vckRFUjogc3RyaW5nIHwgQnVmZmVyKTogc3RyaW5nIHtcbiAgICBpZiAoUEVNb3JERVIudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXCIpKSB7XG4gICAgICAgIHJldHVybiBQRU1vckRFUi50b1N0cmluZygpO1xuICAgIH1cbiAgICBQRU1vckRFUiA9IFBFTW9yREVSLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiBcIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcblwiICsgUEVNb3JERVIgKyBcIlxcbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cIjtcbn1cblxuLy8gQmFzZTMyIChSRkMgNDY0OCwgbG93ZXJjYXNlLCB1bnBhZGRlZCksIGFzIGRvbWFpbiBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgd2hpY2ggcnVsZXMgb3V0IGJhc2U2NC9oZXgtd2l0aC1jYXNlXG5jb25zdCBiYXNlMzJBbHBoYWJldCA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjdcIjtcbmZ1bmN0aW9uIGVuY29kZUJhc2UzMihieXRlczogQnVmZmVyKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBsZXQgYml0Q291bnQgPSAwO1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgZm9yIChsZXQgYnl0ZSBvZiBieXRlcykge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSB8IGJ5dGU7XG4gICAgICAgIGJpdENvdW50ICs9IDg7XG4gICAgICAgIHdoaWxlIChiaXRDb3VudCA+PSA1KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYmFzZTMyQWxwaGFiZXRbKHZhbHVlID4+PiAoYml0Q291bnQgLSA1KSkgJiAzMV07XG4gICAgICAgICAgICBiaXRDb3VudCAtPSA1O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChiaXRDb3VudCA+IDApIHtcbiAgICAgICAgcmVzdWx0ICs9IGJhc2UzMkFscGhhYmV0Wyh2YWx1ZSA8PCAoNSAtIGJpdENvdW50KSkgJiAzMV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KHB1YmxpY0tleTogeyBwdWJsaWNLZXlCeXRlczogQnVmZmVyIH0gfCBCdWZmZXIpIHtcbiAgICBsZXQgYnl0ZXM6IEJ1ZmZlcjtcbiAgICBpZiAoXCJwdWJsaWNLZXlCeXRlc1wiIGluIHB1YmxpY0tleSkge1xuICAgICAgICBieXRlcyA9IHB1YmxpY0tleS5wdWJsaWNLZXlCeXRlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcyA9IHB1YmxpY0tleTtcbiAgICB9XG4gICAgcmV0dXJuIFwiYlwiICsgZW5jb2RlQmFzZTMyKEJ1ZmZlci5mcm9tKHNoYTI2NS5zaGEyNTYuYXJyYXkoQnVmZmVyLmZyb20oYnl0ZXMpKSkpLnNsaWNlKDAsIDIwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ0FDZXJ0KGRvbWFpbjogc3RyaW5nLCBjZXJ0OiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICBsZXQgY2VydFBhcnNlZCA9IHBhcnNlQ2VydChjZXJ0KTtcblxuICAgIGxldCBzdWJqZWN0ID0gY2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIikudmFsdWUgYXMgc3RyaW5nO1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBkb21haW5QYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcblxuICAgIGxldCByb290RG9tYWluUGFyc2VkID0gW2RvbWFpblBhcnRzLnNoaWZ0KCksIGRvbWFpblBhcnRzLnNoaWZ0KCldLnJldmVyc2UoKS5qb2luKFwiLlwiKTtcbiAgICBpZiAocm9vdERvbWFpblBhcnNlZCAhPT0gZG9tYWluKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBvdXIgdHJ1c3Qgc3RvcmUgY29udGFpbnMgbW9yZSB0aGVuIGp1c3QgT1VSIGNlcnRpZmljYXRlcywgc28gaWYgd2UgYWxsb3cgYW55IGRvbWFpbnMgdGhlbiByZWFsIGRvbWFpbnMgY2FuIGltcGVyc29uYXRlIGFueW9uZSEgSXQgaGFzIHRvIGJlIE9VUiBkb21haW4gdG8gYmUgdHJ1c3RlZCFcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSByb290IGRvbWFpbiBzaG91bGQgYmUgJHtkb21haW59LCBidXQgaXMgJHtyb290RG9tYWluUGFyc2VkfWApO1xuICAgIH1cbiAgICAvLyBUT0RPOiBNYXliZSBqdXN0IHNraXAgaWYgaXQgaXNuJ3QgYSBoYXNoIHN0cmluZz9cbiAgICBpZiAoZG9tYWluUGFydHNbMF0gPT09IFwibm9wcm94eVwiKSB7XG4gICAgICAgIGRvbWFpblBhcnRzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgbGV0IGNlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnQgPSAoZG9tYWluUGFydHMuc2hpZnQoKSB8fCBcIlwiKS5zcGxpdChcIi1cIikuc2xpY2UoLTEpWzBdO1xuICAgIGxldCBjZXJ0QWN0dWFsUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGdldEVEMjU1MTlQdWJsaWNLZXkoY2VydFBhcnNlZCkpO1xuICAgIGlmIChjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0ICE9PSBjZXJ0QWN0dWFsUHVibGljS2V5UGFydCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIHB1YmxpYyBrZXkgaW4gdGhlIHVybCBpcyAke2NlcnRFeHBlY3RlZFB1YmxpY0tleVBhcnR9LCBidXQgaW4gdGhlIGNlcnQgaXMgJHtjZXJ0QWN0dWFsUHVibGljS2V5UGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBBTFNPLCByZXF1aXJlIG5hbWUgY29uc3RyYWludHMgdG8gYmUgcHJlc2VudCwgYW5kIHRvIHJlc3RyaWN0IHRvIHRoZSBcIkNOXCJcbiAgICBsZXQgbmFtZUNvbnN0cmFpbnRzID0gY2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJuYW1lQ29uc3RyYWludHNcIikgYXMgYW55O1xuICAgIGlmICghbmFtZUNvbnN0cmFpbnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBoYXZlIG5hbWVDb25zdHJhaW50c2ApO1xuICAgIH1cbiAgICBsZXQgc3VidHJlZXMgPSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXM7XG4gICAgaWYgKCFzdWJ0cmVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gSWdub3JlIGxvY2FsaG9zdERvbWFpbiwgYXMgaXQgY2FuIGFsd2F5cyBzYWZlbHkgYmUgYWxsb3dlZCAodGhlIHNhbWUgbWFjaGluZSBpcyBhbHdheXMgYWxsb3dlZCkuXG4gICAgc3VidHJlZVZhbHVlcyA9IHN1YnRyZWVWYWx1ZXMuZmlsdGVyKCh4OiBzdHJpbmcpID0+IHggIT09IGxvY2FsaG9zdERvbWFpbik7XG4gICAgaWYgKHN1YnRyZWVWYWx1ZXMubGVuZ3RoICE9PSAxIHx8IHN1YnRyZWVWYWx1ZXNbMF0gIT09IHN1YmplY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBtdXN0IGhhdmUgYSBzaW5nbGUgY29uc3RyYWluZWQgZG9tYWluIChoYWQgJHtKU09OLnN0cmluZ2lmeShzdWJ0cmVlVmFsdWVzKX0pYCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVBbHROYW1lcyhjZXJ0UGFyc2VkLCBzdWJqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ2VydGlmaWNhdGUoZG9tYWluOiBzdHJpbmcsIGNlcnQ6IEJ1ZmZlciB8IHN0cmluZywgaXNzdWVyQ2VydDogQnVmZmVyIHwgc3RyaW5nKSB7XG4gICAgdmFsaWRhdGVDQUNlcnQoZG9tYWluLCBpc3N1ZXJDZXJ0KTtcblxuICAgIGxldCBjZXJ0UGFyc2VkID0gcGFyc2VDZXJ0KGNlcnQpO1xuICAgIGxldCBzdWJqZWN0ID0gY2VydFBhcnNlZC5zdWJqZWN0LmdldEZpZWxkKFwiQ05cIikudmFsdWUgYXMgc3RyaW5nO1xuICAgIGxldCBsb2NhbGhvc3REb21haW4gPSBcIjEyNy0wLTAtMS5cIiArIHN1YmplY3Quc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcblxuICAgIGxldCBkb21haW5QYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcblxuICAgIGxldCByb290RG9tYWluUGFyc2VkID0gW2RvbWFpblBhcnRzLnNoaWZ0KCksIGRvbWFpblBhcnRzLnNoaWZ0KCldLnJldmVyc2UoKS5qb2luKFwiLlwiKTtcbiAgICBpZiAocm9vdERvbWFpblBhcnNlZCAhPT0gZG9tYWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgcm9vdCBkb21haW4gc2hvdWxkIGJlICR7ZG9tYWlufSwgYnV0IGlzICR7cm9vdERvbWFpblBhcnNlZH1gKTtcbiAgICB9XG4gICAgLy8gVE9ETzogTWF5YmUganVzdCBza2lwIGlmIGl0IGlzbid0IGEgaGFzaCBzdHJpbmc/XG4gICAgaWYgKGRvbWFpblBhcnRzWzBdID09PSBcIm5vcHJveHlcIikge1xuICAgICAgICBkb21haW5QYXJ0cy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGxldCBpc3N1ZXJDZXJ0UGFyc2VkID0gcGFyc2VDZXJ0KGlzc3VlckNlcnQpO1xuXG4gICAgbGV0IGlzc3VlckV4cGVjdGVkUHVibGljS2V5UGFydCA9IGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIjtcbiAgICBsZXQgaXNzdWVyQWN0dWFsUHVibGljS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGdldEVEMjU1MTlQdWJsaWNLZXkoaXNzdWVyQ2VydFBhcnNlZCkpO1xuICAgIGlmIChpc3N1ZXJFeHBlY3RlZFB1YmxpY0tleVBhcnQgIT09IGlzc3VlckFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJc3N1ZXIgcHVibGljIGtleSBpbiB0aGUgdXJsIGlzICR7aXNzdWVyRXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7aXNzdWVyQWN0dWFsUHVibGljS2V5UGFydH1gKTtcbiAgICB9XG5cbiAgICAvLyBUYWtlIHRoZSBsYXN0IHBhcnRcbiAgICBsZXQgY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCA9IGRvbWFpblBhcnRzLnNoaWZ0KCkgfHwgXCJcIjtcbiAgICBsZXQgY2VydEFjdHVhbFB1YmxpY0tleVBhcnQgPSBnZXREb21haW5QYXJ0RnJvbVB1YmxpY0tleShnZXRFRDI1NTE5UHVibGljS2V5KGNlcnRQYXJzZWQpKTtcbiAgICBpZiAoY2VydEV4cGVjdGVkUHVibGljS2V5UGFydCAhPT0gY2VydEFjdHVhbFB1YmxpY0tleVBhcnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IGluIHRoZSB1cmwgaXMgJHtjZXJ0RXhwZWN0ZWRQdWJsaWNLZXlQYXJ0fSwgYnV0IGluIHRoZSBjZXJ0IGlzICR7Y2VydEFjdHVhbFB1YmxpY0tleVBhcnR9YCk7XG4gICAgfVxuXG5cbiAgICBsZXQgbmFtZUNvbnN0cmFpbnRzID0gaXNzdWVyQ2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJuYW1lQ29uc3RyYWludHNcIikgYXMgYW55O1xuICAgIGlmICghbmFtZUNvbnN0cmFpbnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ0EgbXVzdCBoYXZlIG5hbWVDb25zdHJhaW50c2ApO1xuICAgIH1cbiAgICBsZXQgc3VidHJlZXMgPSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXM7XG4gICAgaWYgKCFzdWJ0cmVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENBIG11c3QgaGF2ZSBuYW1lQ29uc3RyYWludHMucGVybWl0dGVkU3VidHJlZXNgKTtcbiAgICB9XG4gICAgbGV0IHN1YnRyZWVWYWx1ZXMgPSBzdWJ0cmVlcy5tYXAoKHg6IGFueSkgPT4geC52YWx1ZSk7XG4gICAgLy8gSWdub3JlIGxvY2FsaG9zdERvbWFpbiwgYXMgaXQgY2FuIGFsd2F5cyBzYWZlbHkgYmUgYWxsb3dlZCAodGhlIHNhbWUgbWFjaGluZSBpcyBhbHdheXMgYWxsb3dlZCkuXG4gICAgc3VidHJlZVZhbHVlcyA9IHN1YnRyZWVWYWx1ZXMuZmlsdGVyKCh4OiBzdHJpbmcpID0+IHggIT09IGxvY2FsaG9zdERvbWFpbik7XG4gICAgaWYgKHN1YnRyZWVWYWx1ZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ0EgbXVzdCBoYXZlIGEgc2luZ2xlIGNvbnN0cmFpbmVkIGRvbWFpbiAoaGFkICR7SlNPTi5zdHJpbmdpZnkoc3VidHJlZVZhbHVlcyl9KWApO1xuICAgIH1cblxuICAgIGxldCBzdWJ0cmVlID0gc3VidHJlZVZhbHVlc1swXTtcbiAgICBpZiAoc3VidHJlZSAhPT0gc3ViamVjdCAmJiAhc3ViamVjdC5lbmRzV2l0aChcIi5cIiArIHN1YnRyZWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgbXVzdCBiZSBhIHN1YnRyZWUgb2YgdGhlIENBIChDQTogJHtzdWJ0cmVlfSwgY2VydDogJHtzdWJqZWN0fSlgKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUFsdE5hbWVzKGNlcnRQYXJzZWQsIHN1YmplY3QpO1xuXG4gICAgLy8gVmVyaWZ5IGlzc3VlciBBQ1RVQUxMWSBzaWduZWQgY2VydFBhcnNlZFxuICAgIGlmICghaXNzdWVyQ2VydFBhcnNlZC52ZXJpZnkoY2VydFBhcnNlZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJc3N1ZXIgZGlkIG5vdCBzaWduIGNlcnRpZmljYXRlYCk7XG4gICAgfVxufVxuXG4vLyBSZXF1aXJlIGFsdCBuYW1lcyB0byBiZSBlaXRoZXIgZXF1YWwgdG8gXCJDTlwiLCBvciBhIHN1YnRyZWUgb2YgXCJDTlwiXG5mdW5jdGlvbiB2YWxpZGF0ZUFsdE5hbWVzKGNlcnRQYXJzZWQ6IGZvcmdlLnBraS5DZXJ0aWZpY2F0ZSwgc3ViamVjdDogc3RyaW5nKSB7XG4gICAgbGV0IGxvY2FsaG9zdERvbWFpbiA9IFwiMTI3LTAtMC0xLlwiICsgc3ViamVjdC5zcGxpdChcIi5cIikuc2xpY2UoLTIpLmpvaW4oXCIuXCIpO1xuXG4gICAgbGV0IGFsdE5hbWVzT2JqID0gY2VydFBhcnNlZC5nZXRFeHRlbnNpb24oXCJzdWJqZWN0QWx0TmFtZVwiKSBhcyBhbnk7XG4gICAgbGV0IGFsdE5hbWVzID0gYWx0TmFtZXNPYmo/LmFsdE5hbWVzLm1hcCgoeDogYW55KSA9PiB4LnZhbHVlKTtcbiAgICAvLyBBbGxvdyBsb2NhbGhvc3REb21haW4sIGFzIGl0IGNhbiBhbHdheXMgc2FmZWx5IGJlIGFsbG93ZWRcbiAgICBhbHROYW1lcyA9IGFsdE5hbWVzLmZpbHRlcigoeDogc3RyaW5nKSA9PiB4ICE9PSBsb2NhbGhvc3REb21haW4pO1xuICAgIGlmIChcbiAgICAgICAgYWx0TmFtZXMuc29tZSgoeDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB4ID09PSBzdWJqZWN0XG4gICAgICAgICAgICAgICAgfHwgeC5lbmRzV2l0aChcIi5cIiArIHN1YmplY3QpXG4gICAgICAgICAgICAgICAgLy8gTk9URTogV2UgZG9uJ3QgYWxsb3cgMTI3LjAuMC4xICh8fCB4ID09PSBCdWZmZXIuZnJvbShbMTI3LCAwLCAwLCAxXSkudG9TdHJpbmcoKSksIGJlY2F1c2UgaXQgaXMgc28gZWFzeSB0byBwdWJsaXNoIGEgMTI3LjAuMC4xIEEgcmVjb3JkLCBhbmQgZXZlbiB0byBnZW5lcmF0ZSBhIHJlYWwgY2VydCwgc28gd2Ugc2hvdWxkIGp1c3QgZG8gdGhhdCwgYW5kIGtlZXAgaXQgc2VjdXJlLiBJZiB3ZSBuZWVkIHRoaXMgZm9yIGRldmVsb3BtZW50IHdlIGNhbiBwdXQgaXQgYmVoaW5kIGEgZmxhZywgc28gbm9uLWRldmVsb3BtZW50IGluc3RhbmNlcyBhcmUgc3RpbGwgc2VjdXJlLlxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhbHQgbmFtZXMuIE11c3QgYmUgc3VidHJlZXMgb2YgdGhlIHN1YmplY3QgKENOKSAke0pTT04uc3RyaW5naWZ5KHN1YmplY3QpfSwgd2FzICR7SlNPTi5zdHJpbmdpZnkoYWx0TmFtZXMpfWApO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKCkge1xuICAgIHJldHVybiBtZWFzdXJlQmxvY2soZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKCkge1xuICAgICAgICAvLyBOT1RFOiBXZSB1c2UgRUQyNTUxOSBiZWNhdXNlIGl0IGNhbiBnZW5lcmF0ZSBrZXlzIGFib3V0IDEwWCBmYXN0ZXIgdGhhbiBSU0EgKHdoaWNoIGlzIHN0aWxsIHNsb3csIH42bXMgb24gbXkgbWFjaGluZSwgc28gd2UgREVGSU5JVEVMWSBkb24ndCB3YW50IGl0IHRvIGJlIDEwWCBzbG93ZXIhKSAtIGh0dHBzOi8vc2VjdXJpdHkuc3RhY2tleGNoYW5nZS5jb20vYS8yMzY5NDMvMjgyMzY3XG4gICAgICAgIHJldHVybiBmb3JnZS5lZDI1NTE5LmdlbmVyYXRlS2V5UGFpcigpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDQShkb21haW46IHN0cmluZykge1xuICAgIGNvbnN0IGtleVBhaXIgPSBnZW5lcmF0ZUtleVBhaXIoKTtcbiAgICBsZXQgY2FQdWJsaWNLZXlQYXJ0ID0gZ2V0RG9tYWluUGFydEZyb21QdWJsaWNLZXkoa2V5UGFpci5wdWJsaWNLZXkpO1xuICAgIGxldCBmdWxsRG9tYWluID0gYCR7Y2FQdWJsaWNLZXlQYXJ0fS4ke2RvbWFpbn1gO1xuICAgIHJldHVybiBjcmVhdGVYNTA5KHsgZG9tYWluOiBmdWxsRG9tYWluLCBpc3N1ZXI6IFwic2VsZlwiLCBrZXlQYWlyLCBsaWZlU3BhbjogdGltZUluRGF5ICogMzY1ICogMjAgfSk7XG59XG5cbmxldCBpZGVudGl0eUNBID0gY2FjaGUoKGRvbWFpbjogc3RyaW5nKSA9PiBsYXp5KCgpOiBYNTA5S2V5UGFpciA9PiB7XG4gICAgbGV0IGlkZW50aXR5Q0FDYWNoZWQgPSBnZXRJZGVudGl0eVN0b3JlKGRvbWFpbik7XG4gICAgbGV0IGNhQ2FjaGVkID0gaWRlbnRpdHlDQUNhY2hlZC5nZXQoKTtcbiAgICBpZiAoIWNhQ2FjaGVkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBHZW5lcmF0aW5nIG5ldyBpZGVudGl0eSBDQWApO1xuICAgICAgICBsZXQgdmFsdWUgPSBnZW5lcmF0ZUNBKGRvbWFpbik7XG4gICAgICAgIGNhQ2FjaGVkID0ge1xuICAgICAgICAgICAgZG9tYWluOiB2YWx1ZS5kb21haW4sXG4gICAgICAgICAgICBjZXJ0QjY0OiB2YWx1ZS5jZXJ0LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICAgICAga2V5QjY0OiB2YWx1ZS5rZXkudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgICAgIH07XG4gICAgICAgIGlkZW50aXR5Q0FDYWNoZWQuc2V0KGNhQ2FjaGVkKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgZG9tYWluOiBjYUNhY2hlZC5kb21haW4sXG4gICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKGNhQ2FjaGVkLmNlcnRCNjQsIFwiYmFzZTY0XCIpLFxuICAgICAgICBrZXk6IEJ1ZmZlci5mcm9tKGNhQ2FjaGVkLmtleUI2NCwgXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICB0cnVzdENlcnRpZmljYXRlKHJlc3VsdC5jZXJ0LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59KSk7XG5cbi8vIElNUE9SVEFOVCEgV2UgZG8gbm90IGVtYmVkIGFueSBkZWJ1ZyBpbmZvIGluIHRoaXMgZG9tYWluLiBJZiB3ZSBkaWQsIGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Li4uIHBvdGVudGFsbHkgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBhcyBpZiB0aGUgZGVidWcgaW5mbyAoc3VjaCBhcyBhIHByZWZpeCkgaXMgdXNlZCB0byBpZGVudGlmeSB3aGF0IGEgY2VydGlmaWNhdGUgaXMgZm9yLCBpdCB3b3VsZCBiZSBlYXN5IGZvciBhbiBhdHRhY2sgdG8gZm9yZ2UgdGhpcyAoYXMgdGhlIGRlYnVnIGluZm8gd29uJ3QgYmUgc2VjdXJlZCkuIFNvIGl0IGlzIG11Y2ggYmV0dGVyIHRvIGtlZXAgdGhlIGNlcnRpZmljYXRlIG9wYXF1ZSwgYW5kIHRoZW4gcmVxdWlyZSBhbnkgbWV0YWRhdGEgdG8gYmUgYWN0dWFsbHkgdmV0dGVkIChhbmQgaG9wZWZ1bGx5IHN0b3JlZCBpbiBhIFVJLCBzaG93aW5nIElQLCB0aW1lLCBldGMpLlxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNlcnRGcm9tQ0EoY29uZmlnOiB7XG4gICAgQ0FLZXlQYWlyOiBYNTA5S2V5UGFpcjtcbn0pOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIG1lYXN1cmVCbG9jayhmdW5jdGlvbiBjcmVhdGVDZXJ0RnJvbUNBKCkge1xuICAgICAgICBsZXQgeyBDQUtleVBhaXIgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3Qga2V5UGFpciA9IGdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgICBsZXQgZG9tYWluS2V5UGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KGtleVBhaXIucHVibGljS2V5KTtcbiAgICAgICAgbGV0IGZ1bGxEb21haW4gPSBgJHtkb21haW5LZXlQYXJ0fS4ke2NvbmZpZy5DQUtleVBhaXIuZG9tYWlufWA7XG4gICAgICAgIHJldHVybiBjcmVhdGVYNTA5KHtcbiAgICAgICAgICAgIGRvbWFpbjogZnVsbERvbWFpbixcbiAgICAgICAgICAgIGlzc3VlcjogQ0FLZXlQYWlyLFxuICAgICAgICAgICAga2V5UGFpcixcbiAgICAgICAgICAgIGxpZmVTcGFuOiB0aW1lSW5EYXkgKiAzNjUgKiAxMCxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWNoaW5lSWQoZG9tYWluTmFtZU9yTm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRlY29kZU5vZGVJZEFzc2VydChkb21haW5OYW1lT3JOb2RlSWQsIGRvbWFpbiwgXCJhbGxvd01pc3NpbmdUaHJlYWRJZFwiKS5tYWNoaW5lSWQ7XG59XG5cbmV4cG9ydCB0eXBlIE5vZGVJZFBhcnRzID0ge1xuICAgIHRocmVhZElkOiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgZG9tYWluOiBzdHJpbmc7XG4gICAgcG9ydDogbnVtYmVyO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVOb2RlSWQobm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nLCBhbGxvd01pc3NpbmdUaHJlYWRJZD86IFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIik6IE5vZGVJZFBhcnRzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbG9jYXRpb25PYmogPSBnZXROb2RlSWRMb2NhdGlvbihub2RlSWQpO1xuICAgIGlmICghbG9jYXRpb25PYmopIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHBhcnRzID0gbG9jYXRpb25PYmouYWRkcmVzcy5zcGxpdChcIi5cIik7XG4gICAgLy8gTk9URTogV2UgaGF2ZSB0byBvbmx5IGFsbG93IGxvY2FsaG9zdCBkb21haW5zIG9uIG91ciBvd24gZG9tYWluLCBhcyB0aGUgdW5kZXJseWluZyBkb21haW4gZ2V0cyBzdHJpcHBlZCB3aGVuIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIG1hY2hpbmVJZC4gU28gaWYgd2UgYWxsb3dlZCBsb2NhbGhvc3QgZG9tYWlucyBvbiBvdGhlciBkb21haW5zLCBhIHNlcnZlciBjb3VsZCB0cmljayB1cyBpbnRvIGNvbm5lY3RpbmcgdG8gaXQsIGFuZCB0aGVuIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGl0IGNvdWxkIHRhbGsgYmFjayBhbmQgd2Ugd291bGQgdGhpbmsgaXQgaGFzIGEgbG9jYWxob3N0IG1hY2hpbmVJZCwgd2hpY2ggaXMgaW1wbGljaXRseSB0cnVzdGVkLCB3aGljaCB3b3VsZCB0aGVuIGdpdmUgaXQgYWNjZXNzIHRvIGV2ZXJ5dGhpbmcuXG4gICAgaWYgKGxvY2F0aW9uT2JqLmFkZHJlc3MgPT09IGAxMjctMC0wLTEuJHtkb21haW59YCAmJiBub2RlSWQuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aHJlYWRJZDogXCJcIixcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcGFydHMuYXQoLTMpIHx8IFwiXCIsXG4gICAgICAgICAgICBkb21haW46IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgIHBvcnQ6IGxvY2F0aW9uT2JqLnBvcnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBpc1ZhbGlkID0gcGFydHMubGVuZ3RoID49IDQgfHwgYWxsb3dNaXNzaW5nVGhyZWFkSWQgJiYgcGFydHMubGVuZ3RoID09PSAzO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0aHJlYWRJZDogcGFydHMuYXQoLTQpIHx8IFwiXCIsXG4gICAgICAgIG1hY2hpbmVJZDogcGFydHMuYXQoLTMpIHx8IFwiXCIsXG4gICAgICAgIGRvbWFpbjogcGFydHMuc2xpY2UoLTIpLmpvaW4oXCIuXCIpIHx8IFwiXCIsXG4gICAgICAgIHBvcnQ6IGxvY2F0aW9uT2JqLnBvcnQsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVOb2RlSWRBc3NlcnQobm9kZUlkOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nLCBhbGxvd01pc3NpbmdUaHJlYWRJZD86IFwiYWxsb3dNaXNzaW5nVGhyZWFkSWRcIik6IE5vZGVJZFBhcnRzIHtcbiAgICBsZXQgcmVzdWx0ID0gZGVjb2RlTm9kZUlkKG5vZGVJZCwgZG9tYWluLCBhbGxvd01pc3NpbmdUaHJlYWRJZCk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5vZGVJZDogJHtKU09OLnN0cmluZ2lmeShub2RlSWQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5vZGVJZChwYXJ0czogTm9kZUlkUGFydHMpIHtcbiAgICByZXR1cm4gYCR7cGFydHMudGhyZWFkSWR9LiR7cGFydHMubWFjaGluZUlkfS4ke3BhcnRzLmRvbWFpbn06JHtwYXJ0cy5wb3J0fWA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJZGVudGl0eUNBUmF3KGRvbWFpbjogc3RyaW5nLCBqc29uOiBzdHJpbmcpIHtcbiAgICBsZXQgaWRlbnRpdHlDQUNhY2hlZCA9IGdldElkZW50aXR5U3RvcmUoZG9tYWluKTtcbiAgICBsZXQgb2JqID0gSlNPTi5wYXJzZShqc29uKSBhcyB7XG4gICAgICAgIGRvbWFpbjogc3RyaW5nO1xuICAgICAgICBjZXJ0QjY0OiBzdHJpbmc7XG4gICAgICAgIGtleUI2NDogc3RyaW5nO1xuICAgIH07XG4gICAgbGV0IGNhID0ge1xuICAgICAgICBkb21haW46IG9iai5kb21haW4sXG4gICAgICAgIGNlcnQ6IEJ1ZmZlci5mcm9tKG9iai5jZXJ0QjY0LCBcImJhc2U2NFwiKSxcbiAgICAgICAga2V5OiBCdWZmZXIuZnJvbShvYmoua2V5QjY0LCBcImJhc2U2NFwiKSxcbiAgICB9O1xuICAgIHRydXN0Q2VydGlmaWNhdGUoY2EuY2VydC50b1N0cmluZygpKTtcbiAgICBpZGVudGl0eUNBKGRvbWFpbikuc2V0KGNhKTtcbiAgICBnZXRUaHJlYWRLZXlDZXJ0QmFzZShkb21haW4pLnJlc2V0KCk7XG4gICAgaWRlbnRpdHlDQUNhY2hlZC5zZXQob2JqKTtcbiAgICByZXNldEFsbE5vZGVDYWxsRmFjdG9yaWVzKCk7XG59XG5cbi8vIE5PVEU6IFRoZSBpZGVudGl0eSBDQSBpcyBhdmFpbGFibGUgc3luY2hyb25vdXNseSAoc3RvcmFnZSBpcyBmcy9sb2NhbFN0b3JhZ2UsIGJvdGggc3luY2hyb25vdXMpLCBzbyB0aGlzIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHN0YXJ0dXAgY29kZSB0aGF0IGF3YWl0cyBpdC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkSWRlbnRpdHlDQShkb21haW46IHN0cmluZykge1xuICAgIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aXR5Q0EoZG9tYWluOiBzdHJpbmcpOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuXG4vLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBhIGRhdGFiYXNlLCBzbyBpdCBpcyBlYXN5IGZvciB1cyB0byB0cnVzdCBDQXMgY3Jvc3MgbWFjaGluZSwgYW5kIGV2ZW4gaGF2ZSBtdWx0aXBsZSB1c2VycywgZXRjLCBldGMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpdHlDQVByb21pc2UoZG9tYWluOiBzdHJpbmcpOiBYNTA5S2V5UGFpciB7XG4gICAgcmV0dXJuIGlkZW50aXR5Q0EoZG9tYWluKSgpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25NYWNoaW5lSWQoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0TWFjaGluZUlkKGdldElkZW50aXR5Q0EoZG9tYWluKS5kb21haW4sIGRvbWFpbik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duVGhyZWFkSWQoZG9tYWluOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZGVjb2RlTm9kZUlkQXNzZXJ0KGdldFRocmVhZEtleUNlcnQoZG9tYWluKS5kb21haW4sIGRvbWFpbikudGhyZWFkSWQ7XG59XG5cbi8qKiBQYXJ0IG9mIHRoZSBtYWNoaW5lSWQgY29tZXMgZnJvbSB0aGUgcHVibGljS2V5LCBzbyB3ZSBjYW4gdXNlIGl0IHRvIHZlcmlmeS5cblxuICAgIEZhaXJseSB3ZWFrOiBpdCBvbmx5IHByb3ZlcyB0aGUgaWQgbmFtZXMgdGhpcyBrZXksIG5vdCB0aGF0IHRoZSBjYWxsZXIgaG9sZHMgdGhlIGtleSAtIHVzdWFsbHkgYVxuICAgIGJldHRlciB3b3JrZmxvdyBzaG91bGQgYmUgdXNlZCwgd2l0aCBhIGJhY2sgYW5kIGZvcnRoIChleCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZSBvdmVyIGEgc2lnbmVkXG4gICAgZXhjaGFuZ2UpLiBJbiBzb21lIGNhc2VzIGl0IGlzIHN1ZmZpY2llbnQsIHN1Y2ggYXMgZXhwb3Npbmcgc291cmNlIG1hcHMgdG8gdGhlIGNsaWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlNYWNoaW5lSWRGb3JQdWJsaWNLZXkoY29uZmlnOiB7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgcHVibGljS2V5OiBCdWZmZXI7XG59KTogYm9vbGVhbiB7XG4gICAgbGV0IHsgbWFjaGluZUlkLCBwdWJsaWNLZXkgfSA9IGNvbmZpZztcbiAgICBsZXQgZG9tYWluUGFydCA9IGdldERvbWFpblBhcnRGcm9tUHVibGljS2V5KHB1YmxpY0tleSk7XG4gICAgLy8gbWFjaGluZUlkIGlzIHRoZSBiYXJlIGtleS1oYXNoIGxhYmVsLCBidXQgYWxzbyBhY2NlcHQgbGVnYWN5IFwiaGFzaC5kb21haW4udGxkXCIgZm9ybXNcbiAgICByZXR1cm4gbWFjaGluZUlkLnNwbGl0KFwiLlwiKVswXSA9PT0gZG9tYWluUGFydDtcbn1cblxuLy8gTk9URTogV2UgZG9uJ3QgaGF2ZSBhIGNhY2hlIHBlciBDQSwgYXMuLi4gdGhlIENBIHNob3VsZCBiZSBzZXQgZmlyc3Rcbi8vIFRPRE86IE1heWJlIHRocm93IGlmIHRoZXkgdHJ5IHRvIGNoYW5nZSB0aGUgQ0EgYWZ0ZXIgdGhleSBnZW5lcmF0ZSBhbnkgY2VydGlmaWNhdGVzP1xuLy8gVE9ETzogUmVnZW5lcmF0ZSBjZXJ0aWZpY2F0ZXMgYWZ0ZXIgZW5vdWdoIHRpbWUgKGFzIHRocmVhZCBjZXJ0cyBzaG91bGQgYmUgcmVsYXRpdmVseSBzaG9ydCBsaXZlZCwgc28gaXQgaXMgcGxhdXNpYmxlIGZvciB0aGVtIHRvIGV4cGlyZSkuIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHByb3ZpZGUgYSBjYWxsYmFjayBzbyB0aGF0IHVzZXJzIG9mIHRoZSBjZXJ0IGNhbiB1cGRhdGUgdGhlIGNlcnQgdGhleSBhcmUgdXNpbmcgYXMgd2VsbC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaHJlYWRLZXlDZXJ0KGRvbWFpbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGdldFRocmVhZEtleUNlcnRCYXNlKGRvbWFpbikoKTtcbn1cbmNvbnN0IGdldFRocmVhZEtleUNlcnRCYXNlID0gY2FjaGUoKGRvbWFpbjogc3RyaW5nKSA9PiBsYXp5KCgpID0+IHtcbiAgICBsZXQgY2EgPSBnZXRJZGVudGl0eUNBKGRvbWFpbik7XG4gICAgcmV0dXJuIGNyZWF0ZUNlcnRGcm9tQ0EoeyBDQUtleVBhaXI6IGNhIH0pO1xufSkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duTm9kZUlkKCk6IHN0cmluZyB7XG4gICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLm1vdW50ZWROb2RlSWQ7XG4gICAgaWYgKCFub2RlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIG11c3QgYmUgbW91bnRlZCBiZWZvcmUgbm9kZUlkIGlzIGFjY2Vzc2VkYCk7XG4gICAgfVxuICAgIHJldHVybiBub2RlSWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Ob2RlSWRBbGxvd1VuZGVmaW5lZCgpIHtcbiAgICByZXR1cm4gU29ja2V0RnVuY3Rpb24ubW91bnRlZE5vZGVJZDtcbn0iXX0=
472
+ /* _JS_SOURCE_HASH = "18e0cf4c95470e338c3004e08d10382c7418b898a917fb8878ac7aa88e3fe03e"; */
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -48,4 +48,4 @@ function getKeyStore(appName, key) {
48
48
  }
49
49
  exports.getKeyStore = getKeyStore;
50
50
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVudExvY2FsU3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcnNpc3RlbnRMb2NhbFN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQWtEO0FBQ2xELDRDQUFvQjtBQUNwQiw0Q0FBb0I7QUFHcEIsZ0dBQWdHO0FBQ2hHLDJFQUEyRTtBQUMzRSxTQUFnQixtQkFBbUIsQ0FBQyxNQUF3QztJQUN4RSxPQUFPLFlBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNoRixDQUFDO0FBRkQsa0RBRUM7QUFFRCxTQUFnQixXQUFXLENBQUksT0FBZSxFQUFFLEdBQVc7SUFJdkQsSUFBSSxJQUFBLGFBQU0sR0FBRSxFQUFFLENBQUM7UUFDWCxJQUFJLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE9BQU87WUFDSCxHQUFHO2dCQUNDLElBQUksUUFBUSxHQUF1QixTQUFTLENBQUM7Z0JBQzdDLElBQUksQ0FBQztvQkFBQyxRQUFRLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQUMsQ0FBQztnQkFBQyxXQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsUUFBUTtvQkFBRSxPQUFPLFNBQVMsQ0FBQztnQkFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBTSxDQUFDO1lBQ3JDLENBQUM7WUFDRCxHQUFHLENBQUMsS0FBZTtnQkFDZixZQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU87WUFDSCxHQUFHO2dCQUNDLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJO29CQUFFLE9BQU8sU0FBUyxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFNLENBQUM7WUFDakMsQ0FBQztZQUNELEdBQUcsQ0FBQyxLQUFlO2dCQUNmLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDO0FBN0JELGtDQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTm9kZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGNhY2hlIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuXG4vLyBKdXN0IHVzZWQgZm9yIG1hY2hpbmUgbWFpbnRlbmFuY2UgKGZpbmRpbmcgYSBrZXkgc3RvcmUgZmlsZSBvbiBkaXNrLCBleCB0byBjb3B5IGl0IHRvIGFub3RoZXJcbi8vIG1hY2hpbmUgb3ZlciBzc2gpLiBORVZFUiBhY2Nlc3MgdGhpcyB1bmxlc3MgZXhwbGljaXRseSBnaXZlbiBwZXJtaXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIERFVl9nZXRLZXlTdG9yZVBhdGgoY29uZmlnOiB7IGFwcE5hbWU6IHN0cmluZzsga2V5OiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9zLmhvbWVkaXIoKSArIGAva2V5c3RvcmVfJHtjb25maWcuYXBwTmFtZX1fYCArIGNvbmZpZy5rZXkgKyBcIi5qc29uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlTdG9yZTxUPihhcHBOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nKToge1xuICAgIGdldCgpOiBUIHwgdW5kZWZpbmVkO1xuICAgIHNldCh2YWx1ZTogVCB8IG51bGwpOiB2b2lkO1xufSB7XG4gICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIGxldCBwYXRoID0gREVWX2dldEtleVN0b3JlUGF0aCh7IGFwcE5hbWUsIGtleSB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudHM6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0cnkgeyBjb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIik7IH0gY2F0Y2ggeyB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50cykgYXMgVDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGpzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghanNvbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKSBhcyBUO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufSJdfQ==
51
- /* _JS_SOURCE_HASH = "8629bad96550e94cfee314efe493d7d6b1624ffb43e188404f3f82736e8f8a55"; */
51
+ /* _JS_SOURCE_HASH = "eda31a3ba13006b5baae8a9c245281529c344df7293acc20dad7ea5209c3f21d"; */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliftutils",
3
- "version": "1.7.136",
3
+ "version": "1.7.137",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -16,7 +16,7 @@ import { enforceSSHDConfig } from "./sshdConfig";
16
16
  import { getState, loadState, saveState, sourceState } from "./state";
17
17
  import { readSignedRepo, SignedRepoError, UNSIGNED } from "./trust";
18
18
  import { parseAuthLog, readNewAuthLog, watchAuthLog } from "./authLog";
19
- import { absorbRevocations, applyUnrevokes, pairKey, recordRevocation, removeRevokedKeys } from "./revocation";
19
+ import { absorbRevocations, applyUnrevokes, pairKey, recordRevocation, reportRevokedKeys } from "./revocation";
20
20
  import { revokeRepo, syncRepoFiles } from "./repoFiles";
21
21
  import { revokeRepoURL } from "../revokeSource";
22
22
  import { keyFingerprint, normalizeKeys } from "../authorizedKeys";
@@ -286,7 +286,8 @@ async function everyCheck() {
286
286
  // written down when it happened, because the revoke repo was unreachable.
287
287
  await writeQueuedRevocations();
288
288
 
289
- await enforceRootKeys(await removeRevokedKeys(mergedKeys));
289
+ await reportRevokedKeys();
290
+ await enforceRootKeys(mergedKeys);
290
291
  await checkOtherUserKeys();
291
292
  await enforceSSHDConfig();
292
293
  }
@@ -396,7 +397,7 @@ async function resolveSourceKeys(repoURL: string) {
396
397
  let manifestHash: string;
397
398
  let signatureHash: string;
398
399
  try {
399
- let signed = await readSignedRepo(repoPath);
400
+ let signed = await readSignedRepo({ repoPath, sourceURL: repoURL });
400
401
  signer = signed.signer;
401
402
  signedFiles = signed.files;
402
403
  manifestHash = signed.manifestHash;
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  // Why root's authorized_keys is about to change, collected as it happens.
3
3
  //
4
4
  // Nothing announces itself at the moment it decides something. A revocation arriving, a key being
@@ -37,4 +37,4 @@ function takeChangeReasons() {
37
37
  }
38
38
  exports.takeChangeReasons = takeChangeReasons;
39
39
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBFQUEwRTtBQUMxRSxFQUFFO0FBQ0Ysa0dBQWtHO0FBQ2xHLCtGQUErRjtBQUMvRixtR0FBbUc7QUFDbkcsbUNBQW1DO0FBQ25DLEVBQUU7QUFDRixtR0FBbUc7QUFDbkcsd0NBQXdDOzs7QUFPeEMsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO0FBQzNCLElBQUksY0FBYyxHQUFvQixFQUFFLENBQUM7QUFFekMsU0FBZ0IsZUFBZSxDQUFDLE1BQWM7SUFDMUMsbUVBQW1FO0lBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0FBQ0wsQ0FBQztBQUxELDBDQUtDO0FBRUQ7MkJBQzJCO0FBQzNCLFNBQWdCLHNCQUFzQixDQUFDLE1BQXFCO0lBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxRSxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDTCxDQUFDO0FBSkQsd0RBSUM7QUFFRDt5RkFDeUY7QUFDekYsU0FBZ0IsaUJBQWlCO0lBQzdCLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNqRCxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBTEQsOENBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXaHkgcm9vdCdzIGF1dGhvcml6ZWRfa2V5cyBpcyBhYm91dCB0byBjaGFuZ2UsIGNvbGxlY3RlZCBhcyBpdCBoYXBwZW5zLlxuLy9cbi8vIE5vdGhpbmcgYW5ub3VuY2VzIGl0c2VsZiBhdCB0aGUgbW9tZW50IGl0IGRlY2lkZXMgc29tZXRoaW5nLiBBIHJldm9jYXRpb24gYXJyaXZpbmcsIGEga2V5IGJlaW5nXG4vLyByZXZva2VkIGhlcmUsIGFuIHVucmV2b2tlIHRha2luZyBlZmZlY3QsIGEgcmVwbyBtb3Zpbmcgb246IGVhY2ggb2YgdGhvc2Ugc2F5cyB3aGF0IGl0IGlzIGFuZFxuLy8gbGVhdmVzIGl0IGhlcmUuIFRoZSBmaWxlIGlzIHRoZW4gd3JpdHRlbiwgYW5kIG9ubHkgaWYgaXQgYWN0dWFsbHkgY2FtZSBvdXQgZGlmZmVyZW50IGRvZXMgYW55IG9mXG4vLyBpdCBnZXQgcmVwb3J0ZWQsIGluIG9uZSBtZXNzYWdlLlxuLy9cbi8vIERvaW5nIGl0IHRoZSBvdGhlciB3YXkgcm91bmQgaXMgd2hhdCBwcm9kdWNlZCBzZXZlcmFsIG1lc3NhZ2VzIGZvciBvbmUgZXZlbnQsIGFuZCBtZXNzYWdlcyBhYm91dFxuLy8gcmVtb3ZpbmcgYSBrZXkgdGhhdCBoYWQgYWxyZWFkeSBnb25lLlxuXG4vKiogQSByZWFzb24gaW1wb3J0YW50IGVub3VnaCB0byBuYW1lIHRoZSB3aG9sZSBtZXNzYWdlLiBJdHMgaGVhZGxpbmUgcmVwbGFjZXMgdGhlIG9uZSB0aGUgY2hhbmdlXG4gICAgaXRzZWxmIHdvdWxkIGhhdmUgZ290LCBiZWNhdXNlIFwic29tZWJvZHkgaXMgdXNpbmcgYSBrZXkgdGhleSBzaG91bGQgbm90XCIgb3V0cmFua3MgXCJ0aGUga2V5c1xuICAgIGNoYW5nZWRcIiBpbiB0aGUgb25lIGxpbmUgYSBwaG9uZSBzaG93cy4gKi9cbmV4cG9ydCB0eXBlIExlYWRpbmdSZWFzb24gPSB7IGhlYWRsaW5lOiBzdHJpbmc7IGJvZHk6IHN0cmluZyB9O1xuXG5sZXQgcmVhc29uczogc3RyaW5nW10gPSBbXTtcbmxldCBsZWFkaW5nUmVhc29uczogTGVhZGluZ1JlYXNvbltdID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRDaGFuZ2VSZWFzb24ocmVhc29uOiBzdHJpbmcpIHtcbiAgICAvLyBUaGUgc2FtZSByZWFzb24gdHdpY2UgaW4gb25lIHBhc3Mgc2F5cyBub3RoaW5nIHRoZSBvbmNlIGRpZCBub3QuXG4gICAgaWYgKCFyZWFzb25zLmluY2x1ZGVzKHJlYXNvbikpIHtcbiAgICAgICAgcmVhc29ucy5wdXNoKHJlYXNvbik7XG4gICAgfVxufVxuXG4vKiogRm9yIHRoZSBvbmUgdGhpbmcgd29ydGggcmVhZGluZyBiZWZvcmUgYW55dGhpbmcgZWxzZTogc29tZWJvZHkgdXNpbmcgYSBrZXkgZnJvbSBhbiBhZGRyZXNzIGl0XG4gICAgaXMgbm90IGFsbG93ZWQgZnJvbS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRMZWFkaW5nQ2hhbmdlUmVhc29uKHJlYXNvbjogTGVhZGluZ1JlYXNvbikge1xuICAgIGlmICghbGVhZGluZ1JlYXNvbnMuc29tZShleGlzdGluZyA9PiBleGlzdGluZy5oZWFkbGluZSA9PT0gcmVhc29uLmhlYWRsaW5lKSkge1xuICAgICAgICBsZWFkaW5nUmVhc29ucy5wdXNoKHJlYXNvbik7XG4gICAgfVxufVxuXG4vKiogVGhlIHJlYXNvbnMgZ2F0aGVyZWQgc2luY2UgdGhlIGxhc3Qgd3JpdGUsIGFuZCBjbGVhcnMgdGhlbS4gQ2FsbGVkIHdoZXRoZXIgb3Igbm90IGFueXRoaW5nXG4gICAgY2hhbmdlZCwgc28gcmVhc29ucyB0aGF0IGNhbWUgdG8gbm90aGluZyBjYW5ub3Qgc2hvdyB1cCBhZ2FpbnN0IHNvbWUgbGF0ZXIgY2hhbmdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VDaGFuZ2VSZWFzb25zKCkge1xuICAgIGxldCB0YWtlbiA9IHsgbGVhZGluZzogbGVhZGluZ1JlYXNvbnMsIHJlYXNvbnMgfTtcbiAgICBsZWFkaW5nUmVhc29ucyA9IFtdO1xuICAgIHJlYXNvbnMgPSBbXTtcbiAgICByZXR1cm4gdGFrZW47XG59XG4iXX0=
40
- /* _JS_SOURCE_HASH = "1c4e21fc729f0fdeef2bb7701dbe6d2363e0f5ef8bed27f096594086b9d4f4eb"; */
40
+ /* _JS_SOURCE_HASH = "6d0282fa2244057d7a106dc14b6b13dd37ddc1ba1ecc4a44b33dfd51c3e409a5"; */
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -143,4 +143,4 @@ async function syncRepo(repoURL, options) {
143
143
  }
144
144
  exports.syncRepo = syncRepo;
145
145
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJEQUE2QjtBQUM3QixnREFBd0I7QUFDeEIsK0NBQW1EO0FBQ25ELHdDQUEwRTtBQUMxRSxtQ0FBNkQ7QUFDN0QsbUNBQXNDO0FBRXRDLEtBQUssVUFBVSxVQUFVLENBQUMsUUFBZ0I7SUFDdEMsSUFBSSxDQUFDO1FBQ0QsTUFBTSxrQkFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUQsOEZBQThGO0FBQ3ZGLEtBQUssVUFBVSxNQUFNLENBQUMsTUFBaUY7SUFDMUcsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNsRCxJQUFJLFVBQVUsR0FBRyxVQUFVLE9BQU8sNkVBQTZFLENBQUM7SUFDaEgsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFBLG9CQUFZLEVBQUM7UUFDNUIsT0FBTyxFQUFFLEtBQUs7UUFDZCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLFVBQVUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3RELEdBQUc7UUFDSCxXQUFXLEVBQUUsbUJBQVc7S0FDM0IsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FDWCxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLE1BQU0sQ0FBQyxNQUFNLElBQUk7Y0FDaEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsNkJBQXFCLENBQUMsRUFBRSxDQUNoRixDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFuQkQsd0JBbUJDO0FBRU0sS0FBSyxVQUFVLFlBQVksQ0FBQyxNQUE2QztJQUM1RSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLFFBQVEsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBWEQsb0NBV0M7QUFFRDswRUFDMEU7QUFDbkUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxNQUE4RDtJQUMxRixJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDNUMsSUFBSSxZQUFZLEdBQUcsR0FBRyxRQUFRLFdBQVcsQ0FBQztJQUMxQyxNQUFNLGtCQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxrQkFBRSxDQUFDLEtBQUssQ0FBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEUsTUFBTSxrQkFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sa0JBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxPQUFPLFNBQVMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBVEQsOEJBU0M7QUFFTSxLQUFLLFVBQVUsYUFBYSxDQUFDLE1BQTZDO0lBQzdFLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BHLENBQUM7QUFGRCxzQ0FFQztBQUVEOzt5REFFeUQ7QUFDbEQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxNQUE2RDtJQUN6RixJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDM0MsOEZBQThGO0lBQzlGLDZCQUE2QjtJQUM3QixNQUFNLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRiwrRkFBK0Y7SUFDL0YsZ0RBQWdEO0lBQ2hELE1BQU0sTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsTUFBTSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRSxNQUFNLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLDZGQUE2RjtJQUM3Riw2RkFBNkY7SUFDN0YscUNBQXFDO0lBQ3JDLE1BQU0sTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQWRELDhCQWNDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUFDLE9BQWU7SUFDM0MsSUFBSSxRQUFRLEdBQUcsSUFBQSx3QkFBYyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLElBQUksT0FBTyxHQUFHLE1BQU0sSUFBQSx1QkFBYSxFQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUEsdUJBQWEsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUNyRSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxJQUFJLENBQUMsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozt3R0FRd0c7QUFDakcsS0FBSyxVQUFVLFFBQVEsQ0FBQyxPQUFlLEVBQUUsT0FBbUM7SUFDL0UsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxJQUFJLFFBQVEsR0FBRyxJQUFBLHdCQUFjLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsSUFBSSxPQUFPLEdBQUcsTUFBTSxJQUFBLHVCQUFhLEVBQUMsT0FBTyxDQUFDLElBQUksSUFBQSx1QkFBYSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLElBQUksTUFBTSxHQUFHLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFckcsMkZBQTJGO0lBQzNGLG1GQUFtRjtJQUNuRixJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLE1BQU0sWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSw2QkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVcsQ0FBQSxJQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoRyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUN6RixDQUFDO0lBRUQsb0ZBQW9GO0lBQ3BGLElBQUksV0FBVyxHQUFHLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDO0lBQzNELE1BQU0sU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkUsU0FBUyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUU5RyxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUM3QixJQUFJLFdBQVcsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDM0MsMEZBQTBGO1FBQzFGLGtDQUFrQztRQUNsQyxJQUFJLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQztZQUN4QixJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7WUFDN0QsR0FBRyxFQUFFLFFBQVE7WUFDYixPQUFPO1lBQ1AsWUFBWSxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBcENELDRCQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBzcGF3blByb21pc2UgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9zcGF3blwiO1xuaW1wb3J0IHsgZmluZFNvdXJjZUtleSwgc291cmNlS2V5UGF0aCwgc291cmNlUmVwb1BhdGggfSBmcm9tIFwiLi4vc291cmNlc1wiO1xuaW1wb3J0IHsgR0lUX1RJTUVPVVQsIE1BWF9FUlJPUl9CT0RZX0xFTkdUSCB9IGZyb20gXCIuL3BhdGhzXCI7XG5pbXBvcnQgeyBzb3VyY2VTdGF0ZSB9IGZyb20gXCIuL3N0YXRlXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLyoqIGNvcmUuc3NoQ29tbWFuZCBrZWVwcyB0aGUga2V5IHNlbGVjdGlvbiB3aXRoIHRoZSBjb21tYW5kIGluc3RlYWQgb2YgaW4gdGhlIGVudmlyb25tZW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkdpdChjb25maWc6IHsgYXJnczogc3RyaW5nW107IGN3ZD86IHN0cmluZzsga2V5UGF0aDogc3RyaW5nOyBhbGxvd0ZhaWx1cmU/OiBib29sZWFuIH0pIHtcbiAgICBsZXQgeyBhcmdzLCBjd2QsIGtleVBhdGgsIGFsbG93RmFpbHVyZSB9ID0gY29uZmlnO1xuICAgIGxldCBzc2hDb21tYW5kID0gYHNzaCAtaSAke2tleVBhdGh9IC1vIElkZW50aXRpZXNPbmx5PXllcyAtbyBCYXRjaE1vZGU9eWVzIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1hY2NlcHQtbmV3YDtcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc3Bhd25Qcm9taXNlKHtcbiAgICAgICAgY29tbWFuZDogXCJnaXRcIixcbiAgICAgICAgYXJnczogW1wiLWNcIiwgYGNvcmUuc3NoQ29tbWFuZD0ke3NzaENvbW1hbmR9YCwgLi4uYXJnc10sXG4gICAgICAgIGN3ZCxcbiAgICAgICAgdGltZW91dFRpbWU6IEdJVF9USU1FT1VULFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBnaXQgJHthcmdzLmpvaW4oXCIgXCIpfSB0byBydW4sIGZhaWxlZCB3aXRoICR7cmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwICYmICFhbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEV4cGVjdGVkIGdpdCAke2FyZ3Muam9pbihcIiBcIil9IHRvIGV4aXQgMCwgd2FzICR7cmVzdWx0LnN0YXR1c30uIGBcbiAgICAgICAgICAgICsgYCR7KHJlc3VsdC5zdGRvdXQgKyByZXN1bHQuc3RkZXJyKS50cmltKCkuc2xpY2UoMCwgTUFYX0VSUk9SX0JPRFlfTEVOR1RIKX1gXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBvSXNVc2FibGUoY29uZmlnOiB7IHJlcG9QYXRoOiBzdHJpbmc7IGtleVBhdGg6IHN0cmluZyB9KSB7XG4gICAgbGV0IHsgcmVwb1BhdGgsIGtleVBhdGggfSA9IGNvbmZpZztcbiAgICBpZiAoIWF3YWl0IHBhdGhFeGlzdHMocGF0aC5qb2luKHJlcG9QYXRoLCBcIi5naXRcIikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIi0tZ2l0LWRpclwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCwgYWxsb3dGYWlsdXJlOiB0cnVlIH0pO1xuICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZXBvIGF0ICR7cmVwb1BhdGh9IGlzIG5vdCB1c2FibGUuICR7KHJlc3VsdC5zdGRvdXQgKyByZXN1bHQuc3RkZXJyKS50cmltKCl9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDbG9uZWQgYmVzaWRlIHRoZSBvbGQgY2hlY2tvdXQgYW5kIHN3YXBwZWQgaW4sIHNvIGEgY2xvbmUgdGhhdCBmYWlscyBsZWF2ZXMgdGhlIGNvcHkgd2UgYXJlXG4gICAgYWxyZWFkeSB1c2luZyB1bnRvdWNoZWQgcmF0aGVyIHRoYW4gZGVsZXRpbmcgdGhlIG9ubHkga2V5cyB3ZSBoYXZlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb25lUmVwbyhjb25maWc6IHsgcmVwb1VSTDogc3RyaW5nOyByZXBvUGF0aDogc3RyaW5nOyBrZXlQYXRoOiBzdHJpbmcgfSkge1xuICAgIGxldCB7IHJlcG9VUkwsIHJlcG9QYXRoLCBrZXlQYXRoIH0gPSBjb25maWc7XG4gICAgbGV0IGluY29taW5nUGF0aCA9IGAke3JlcG9QYXRofS5pbmNvbWluZ2A7XG4gICAgYXdhaXQgZnMucm0oaW5jb21pbmdQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKHJlcG9QYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiY2xvbmVcIiwgcmVwb1VSTCwgaW5jb21pbmdQYXRoXSwga2V5UGF0aCB9KTtcbiAgICBhd2FpdCBmcy5ybShyZXBvUGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGZzLnJlbmFtZShpbmNvbWluZ1BhdGgsIHJlcG9QYXRoKTtcbiAgICBjb25zb2xlLmxvZyhgQ2xvbmVkICR7cmVwb1VSTH0gaW50byAke3JlcG9QYXRofWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudEJyYW5jaChjb25maWc6IHsgcmVwb1BhdGg6IHN0cmluZzsga2V5UGF0aDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gKGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIi0tYWJicmV2LXJlZlwiLCBcIkhFQURcIl0sIC4uLmNvbmZpZyB9KSkuc3Rkb3V0LnRyaW0oKTtcbn1cblxuLyoqIEZvcmNlcyBhIGNoZWNrb3V0J3Mgd29ya2luZyB0cmVlIHRvIGEgcmVmLiBBbnl0aGluZyBsb2NhbCAtIGFuIGVkaXRlZCBmaWxlLCBvciBhIHN0cmF5IHVudHJhY2tlZFxuICAgIG9uZSAtIGlzIHN0YWdlZCBhbmQgc3Rhc2hlZCByYXRoZXIgdGhhbiBkZWxldGVkLCBzbyB0aGUgdHJlZSBjb21lcyBvdXQgY2xlYW4gYnV0IG5vdGhpbmcgaXMgbG9zdFxuICAgIGZvciBnb29kOiBpdCBzaXRzIGluIGEgc3Rhc2ggaWYgaXQgaXMgZXZlciB3YW50ZWQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0R2l0UmVmKGNvbmZpZzogeyByZXBvUGF0aDogc3RyaW5nOyBnaXRSZWY6IHN0cmluZzsga2V5UGF0aDogc3RyaW5nIH0pIHtcbiAgICBsZXQgeyByZXBvUGF0aCwgZ2l0UmVmLCBrZXlQYXRoIH0gPSBjb25maWc7XG4gICAgLy8gU3RhZ2luZyB0aGUgdW50cmFja2VkIGZpbGVzIGZpcnN0IGlzIHdoYXQgbGV0cyB0aGUgc3Rhc2ggY2FycnkgdGhlbSBvZmYsIHNvIHRoZSByZXNldCBsYW5kc1xuICAgIC8vIG9uIGEgZ2VudWluZWx5IGNsZWFuIHRyZWUuXG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiYWRkXCIsIFwiLS1hbGxcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGgsIGFsbG93RmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAvLyBBIGNoZWNrb3V0IHdpdGggbm90aGluZyB0byBzdGFzaCBtYWtlcyBnaXQgc3Rhc2ggZXhpdCBub24temVybywgd2hpY2ggaXMgaGFybWxlc3MgaGVyZSAtIHRoZVxuICAgIC8vIHJlc2V0IGJlbG93IGlzIHdoYXQgYWN0dWFsbHkgZm9yY2VzIHRoZSB0cmVlLlxuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInN0YXNoXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoLCBhbGxvd0ZhaWx1cmU6IHRydWUgfSk7XG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiZmV0Y2hcIiwgXCItLXBydW5lXCIsIFwib3JpZ2luXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoIH0pO1xuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJlc2V0XCIsIFwiLS1oYXJkXCIsIGdpdFJlZl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGggfSk7XG4gICAgLy8gRHJvcHMgb2JqZWN0cyBub3RoaW5nIHJlZmVyZW5jZXMgYW55IG1vcmUsIHNvIGEgZmlsZSBjb21taXR0ZWQgYnkgbWlzdGFrZSBjYW5ub3QgYmxvYXQgdGhlXG4gICAgLy8gY2hlY2tvdXQgZm9yZXZlci4gUmVmbG9ncyBrZWVwIHRoZSBqdXN0LXJlcGxhY2VkIGNvbW1pdCByZWFjaGFibGUsIHNvIGEgaGlzdG9yeSByZXdyaXRlIGlzXG4gICAgLy8gc3RpbGwgZGV0ZWN0YWJsZSByaWdodCBhZnRlciB0aGlzLlxuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInBydW5lXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoLCBhbGxvd0ZhaWx1cmU6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNvdXJjZVJlcG8ocmVwb1VSTDogc3RyaW5nKSB7XG4gICAgbGV0IHJlcG9QYXRoID0gc291cmNlUmVwb1BhdGgocmVwb1VSTCk7XG4gICAgbGV0IGtleVBhdGggPSBhd2FpdCBmaW5kU291cmNlS2V5KHJlcG9VUkwpIHx8IHNvdXJjZUtleVBhdGgocmVwb1VSTCk7XG4gICAgaWYgKCFhd2FpdCByZXBvSXNVc2FibGUoeyByZXBvUGF0aCwga2V5UGF0aCB9KSkge1xuICAgICAgICBhd2FpdCBjbG9uZVJlcG8oeyByZXBvVVJMLCByZXBvUGF0aCwga2V5UGF0aCB9KTtcbiAgICB9XG4gICAgaWYgKCFzb3VyY2VTdGF0ZShyZXBvVVJMKS5icmFuY2gpIHtcbiAgICAgICAgc291cmNlU3RhdGUocmVwb1VSTCkuYnJhbmNoID0gYXdhaXQgY3VycmVudEJyYW5jaCh7IHJlcG9QYXRoLCBrZXlQYXRoIH0pO1xuICAgIH1cbn1cblxuLyoqIFJldHVybnMgd2hhdCBjaGFuZ2VkLCBzbyB0aGUgY2FsbGVyIGNhbiByZXBvcnQgaXQuIEEgcmV3cml0dGVuIGhpc3RvcnkgaXMgY2FsbGVkIG91dFxuICAgIHNlcGFyYXRlbHkgLSBpdCBtZWFucyB0aGUgcmVtb3RlIG5vIGxvbmdlciBjb250YWlucyB0aGUgY29tbWl0cyB3ZSBhbHJlYWR5IGhhZC5cblxuICAgIGZvcmNlVXBkYXRlIGZvcmNlcyB0aGUgd29ya2luZyB0cmVlIGJhY2sgdG8gdGhlIHJlbW90ZSBldmVuIHdoZW4gdGhlIHJlbW90ZSBoYXMgbm90IG1vdmVkLCB3aGljaFxuICAgIGlzIHdoYXQgaGVhbHMgYSBjaGVja291dCBsZWZ0IGRpcnR5IC0gYW4gZWRpdGVkIG9yIGhhbGYtd3JpdHRlbiBmaWxlIHRoYXQgbm8gbG9uZ2VyIG1hdGNoZXMgaXRzXG4gICAgc2lnbmF0dXJlLiBJdCB3b3VsZCBiZSBtYWRkZW5pbmcgdG8gYSBkZXZlbG9wZXIgZWRpdGluZyB0aGUgcmVwbyBpbiBwbGFjZSwgc2luY2UgaXQgc3Rhc2hlcyB0aGVpclxuICAgIHVuY29tbWl0dGVkIHdvcms7IGJ1dCBtYWtlIHN1cmUgbm90aGluZyB0aGF0IGFuc3dlcnMgdGhpcyBjaGVja291dCBpcyBydW5uaW5nIG9uIHRoZSBtYWNoaW5lIHlvdVxuICAgIGVkaXQgb24uIElmIHRoZSBjaGVja291dCB3ZW50IGRpcnR5IGJlY2F1c2UgYSBtYWNoaW5lIGNvbm5lY3Rpb24gdHJpZ2dlcmVkIGEgcmV2b2NhdGlvbiwga2lsbCB0aGVcbiAgICBzZXJ2aWNlcyBvbiB0aGF0IG1hY2hpbmUgYmVmb3JlIHlvdSB0b3VjaCB0aGUgdHJ1c3RlZCBtYWNoaW5lcywgb3IgdGhleSB3aWxsIGp1c3QgZGlydHkgaXQgYWdhaW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1JlcG8ocmVwb1VSTDogc3RyaW5nLCBvcHRpb25zPzogeyBmb3JjZVVwZGF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGF3YWl0IGVuc3VyZVNvdXJjZVJlcG8ocmVwb1VSTCk7XG4gICAgbGV0IHJlcG9QYXRoID0gc291cmNlUmVwb1BhdGgocmVwb1VSTCk7XG4gICAgbGV0IGtleVBhdGggPSBhd2FpdCBmaW5kU291cmNlS2V5KHJlcG9VUkwpIHx8IHNvdXJjZUtleVBhdGgocmVwb1VSTCk7XG4gICAgbGV0IGJyYW5jaCA9IHNvdXJjZVN0YXRlKHJlcG9VUkwpLmJyYW5jaDtcbiAgICBsZXQgbG9jYWxTaGEgPSAoYXdhaXQgcnVuR2l0KHsgYXJnczogW1wicmV2LXBhcnNlXCIsIFwiSEVBRFwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCB9KSkuc3Rkb3V0LnRyaW0oKTtcblxuICAgIC8vIEEgcmVmIGxpc3RpbmcgaXMgYSBmZXcgaHVuZHJlZCBieXRlcyBhbmQgbm8gb2JqZWN0cywgc28gdGhlIHVzdWFsIGNhc2Ugb2Ygbm90aGluZyBoYXZpbmdcbiAgICAvLyBjaGFuZ2VkIGNvc3RzIGFsbW9zdCBub3RoaW5nIGFuZCB3ZSBvbmx5IGZldGNoIHdoZW4gdGhlcmUgaXMgc29tZXRoaW5nIHRvIGZldGNoLlxuICAgIGxldCBsaXN0aW5nID0gKGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcImxzLXJlbW90ZVwiLCBcIm9yaWdpblwiLCBicmFuY2hdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoIH0pKS5zdGRvdXQ7XG4gICAgbGV0IHJlbW90ZVNoYSA9IChsaXN0aW5nLnNwbGl0KC9cXHMrLylbMF0gfHwgXCJcIikudHJpbSgpO1xuICAgIGlmICghcmVtb3RlU2hhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb3JpZ2luIHRvIHJlcG9ydCBhIHNoYSBmb3IgJHticmFuY2h9LCBsaXN0ZWQgJHtsaXN0aW5nLnNsaWNlKDAsIE1BWF9FUlJPUl9CT0RZX0xFTkdUSCl9YCk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucz8uZm9yY2VVcGRhdGUgJiYgcmVtb3RlU2hhID09PSBsb2NhbFNoYSAmJiByZW1vdGVTaGEgPT09IHNvdXJjZVN0YXRlKHJlcG9VUkwpLmxhc3RTaGEpIHtcbiAgICAgICAgcmV0dXJuIHsgY2hhbmdlZDogZmFsc2UsIGhpc3RvcnlSZXdyaXR0ZW46IGZhbHNlLCByZW1vdGVTaGEsIHByZXZpb3VzU2hhOiBsb2NhbFNoYSB9O1xuICAgIH1cblxuICAgIC8vIFRoZSByZW1vdGUgaGFzIG1vdmVkLCBvciB3ZSBoYXZlIG5vdCBhcHBsaWVkIGl0IHlldCwgc28gZm9yY2UgdGhlIGNoZWNrb3V0IHRvIGl0LlxuICAgIGxldCBwcmV2aW91c1NoYSA9IHNvdXJjZVN0YXRlKHJlcG9VUkwpLmxhc3RTaGEgfHwgbG9jYWxTaGE7XG4gICAgYXdhaXQgc2V0R2l0UmVmKHsgcmVwb1BhdGgsIGdpdFJlZjogYG9yaWdpbi8ke2JyYW5jaH1gLCBrZXlQYXRoIH0pO1xuICAgIHJlbW90ZVNoYSA9IChhd2FpdCBydW5HaXQoeyBhcmdzOiBbXCJyZXYtcGFyc2VcIiwgYG9yaWdpbi8ke2JyYW5jaH1gXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCB9KSkuc3Rkb3V0LnRyaW0oKTtcblxuICAgIGxldCBoaXN0b3J5UmV3cml0dGVuID0gZmFsc2U7XG4gICAgaWYgKHByZXZpb3VzU2hhICYmIHByZXZpb3VzU2hhICE9PSByZW1vdGVTaGEpIHtcbiAgICAgICAgLy8gSWYgd2hhdCB3ZSBhbHJlYWR5IGhhZCBpcyBubyBsb25nZXIgYW4gYW5jZXN0b3Igb2YgdGhlIHJlbW90ZSB0aXAsIGNvbW1pdHMgd2VyZSByZW1vdmVkXG4gICAgICAgIC8vIG9yIHJld3JpdHRlbiByYXRoZXIgdGhhbiBhZGRlZC5cbiAgICAgICAgbGV0IGFuY2VzdHJ5ID0gYXdhaXQgcnVuR2l0KHtcbiAgICAgICAgICAgIGFyZ3M6IFtcIm1lcmdlLWJhc2VcIiwgXCItLWlzLWFuY2VzdG9yXCIsIHByZXZpb3VzU2hhLCByZW1vdGVTaGFdLFxuICAgICAgICAgICAgY3dkOiByZXBvUGF0aCxcbiAgICAgICAgICAgIGtleVBhdGgsXG4gICAgICAgICAgICBhbGxvd0ZhaWx1cmU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBoaXN0b3J5UmV3cml0dGVuID0gYW5jZXN0cnkuc3RhdHVzICE9PSAwO1xuICAgIH1cbiAgICByZXR1cm4geyBjaGFuZ2VkOiB0cnVlLCBoaXN0b3J5UmV3cml0dGVuLCByZW1vdGVTaGEsIHByZXZpb3VzU2hhIH07XG59XG4iXX0=
146
- /* _JS_SOURCE_HASH = "62f9a483fdd197ea6df77cf5efeabfe4654e15b789d07e8ac036f002babc436b"; */
146
+ /* _JS_SOURCE_HASH = "5b3d86f7c2e2742fa1cde29c721a12b86e9fe35bbe00566f214fee4920dc6089"; */
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -36,4 +36,4 @@ async function notify(headline, body) {
36
36
  }
37
37
  exports.notify = notify;
38
38
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQix5REFBc0U7QUFFdEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBRXhCLFNBQWdCLFlBQVksQ0FBQyxLQUFhO0lBQ3RDLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDM0IsQ0FBQztBQUZELG9DQUVDO0FBRUQsZ0dBQWdHO0FBQ2hHLGlHQUFpRztBQUNqRyxrR0FBa0c7QUFDbEcsK0RBQStEO0FBQy9EOzs7Ozt3RUFLd0U7QUFDakUsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQixFQUFFLElBQVk7SUFDdkQsSUFBSSxJQUFJLEdBQUcsS0FBSyxRQUFRLFNBQVMsSUFBSSxPQUFPLGNBQWMsSUFBSSxZQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUM5RSwrRkFBK0Y7SUFDL0YsNEZBQTRGO0lBQzVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQztRQUNELE1BQU0sSUFBQSxpQ0FBdUIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULHdGQUF3RjtRQUN4RixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7QUFDTCxDQUFDO0FBWEQsd0JBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBzZW5kRGlzY29yZE5vdGlmaWNhdGlvbiB9IGZyb20gXCIuLi8uLi9ub3RpZmljYXRpb25zL2Rpc2NvcmRcIjtcblxubGV0IGhvc3RMYWJlbFZhbHVlID0gXCJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEhvc3RMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaG9zdExhYmVsVmFsdWUgPSB2YWx1ZTtcbn1cblxuLy8gRE8gTk9UIGFkZCBuZXcgY2FsbHMgdG8gdGhpcy4gRXZlcnkgbWVzc2FnZSBnb2VzIHRvIGEgcmVhbCBEaXNjb3JkIHNlcnZlciBzb21lb25lIHJlYWRzLCBzbyBhXG4vLyBub3RpZmljYXRpb24gaXMgb25seSBldmVyIGFkZGVkIHdoZW4gdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciB0aGF0IHNwZWNpZmljIGNhc2UuIFN0YXJ0dXAsXG4vLyBzdWNjZXNzLCBlcnJvcnMsIHJldHJpZXMgYW5kIHJlY292ZXJpZXMgYWxsIGJlbG9uZyBpbiBjb25zb2xlLmxvZyBpbnN0ZWFkLiBUaGUgY29tcGxldGUgbGlzdCBvZlxuLy8gY2FzZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBub3RpZnkgaXMgYXQgdGhlIHRvcCBvZiBkYWVtb24udHMuXG4vKiogQSBoZWFkbGluZSBhbmQgdGhlIHJlc3QuXG5cbiAgICBUaGUgaGVhZGxpbmUgaXMgYWxsIGEgcGhvbmUgc2hvd3MuIEl0IGdldHMgdGhlIHdob2xlIHByZXZpZXcgdG8gaXRzZWxmOiBubyBwcm9kdWN0IG5hbWUsIG5vXG4gICAgaG9zdCwgbm8gdGltZXN0YW1wIGluIGZyb250IG9mIGl0LCBiZWNhdXNlIGEgcGVyc29uIGdsYW5jaW5nIGF0IHRoZWlyIGxvY2sgc2NyZWVuIG5lZWRzIHRvIHJlYWRcbiAgICB3aGF0IGhhcHBlbmVkLCBub3Qgd2hpY2ggbWFjaGluZSBzYWlkIGl0IG9yIHdoZW4uIFRob3NlIGdvIGF0IHRoZSBlbmQsIHdoZXJlIHRoZXkgYXJlIHRoZXJlIGZvclxuICAgIHdob2V2ZXIgb3BlbnMgdGhlIG1lc3NhZ2UgYW5kIG91dCBvZiB0aGUgd2F5IG9mIHdob2V2ZXIgZG9lcyBub3QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm90aWZ5KGhlYWRsaW5lOiBzdHJpbmcsIGJvZHk6IHN0cmluZykge1xuICAgIGxldCBmdWxsID0gYCoqJHtoZWFkbGluZX0qKlxcblxcbiR7Ym9keX1cXG5cXG4ke2hvc3RMYWJlbFZhbHVlIHx8IG9zLmhvc3RuYW1lKCl9YDtcbiAgICAvLyBMb2dnZWQgYmVmb3JlIGl0IGlzIHNlbnQsIGFuZCB3aGV0aGVyIG9yIG5vdCBpdCBhcnJpdmVzLCBzbyB0aGUgam91cm5hbCBpcyBhIGNvbXBsZXRlIHJlY29yZFxuICAgIC8vIG9mIHdoYXQgdGhpcyBtYWNoaW5lIGhhZCB0byBzYXkgZXZlbiB3aGVuIERpc2NvcmQgaXMgdW5yZWFjaGFibGUgb3IgdGhlIHdlYmhvb2sgaXMgd3JvbmcuXG4gICAgY29uc29sZS5sb2coYERpc2NvcmQ6ICR7ZnVsbH1gKTtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZW5kRGlzY29yZE5vdGlmaWNhdGlvbihmdWxsKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEEgZmFpbGVkIG5vdGlmaWNhdGlvbiBtdXN0IG5ldmVyIHRha2UgdGhlIGRhZW1vbiBkb3duLCB0aGUgbG9jYWwgbG9nIGlzIHRoZSBmYWxsYmFjay5cbiAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBzZW5kIHRoZSBEaXNjb3JkIG5vdGlmaWNhdGlvbiBhYm92ZS4gJHtlfWApO1xuICAgIH1cbn1cbiJdfQ==
39
- /* _JS_SOURCE_HASH = "edf1462978c5a8842ca1de5fd78ec5ec2831c44002ae68f5affb30ee6f61eb33"; */
39
+ /* _JS_SOURCE_HASH = "9fe72e2c338fa1d2d53a34b85265b997cc47def23f019ca77b8a3735088305e5"; */
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  // Locations the daemon owns. Fixed rather than configurable, so every machine looks the same and
3
3
  // the config file only carries what genuinely differs between them.
4
4
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
@@ -23,4 +23,4 @@ exports.SIGNER_CHANGE_DELAY = 24 * 60 * 60 * 1000;
23
23
  // recovers from corruption and interrupted fetches. Counted in checks, so about a quarter hour.
24
24
  exports.MAX_REPO_FAILURES_BEFORE_RECLONE = 15;
25
25
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUdBQWlHO0FBQ2pHLG9FQUFvRTs7O0FBRXZELFFBQUEsV0FBVyxHQUFHLDZCQUE2QixDQUFDO0FBQzVDLFFBQUEsVUFBVSxHQUFHLGdDQUFnQyxDQUFDO0FBQzlDLFFBQUEsaUJBQWlCLEdBQUcsNkNBQTZDLENBQUM7QUFDbEUsUUFBQSxvQkFBb0IsR0FBRyw0QkFBNEIsQ0FBQztBQUNwRCxRQUFBLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDO0FBQzFDLFFBQUEsZUFBZSxHQUFHLHdCQUF3QixDQUFDO0FBQzNDLFFBQUEsZ0JBQWdCLEdBQUcsMkNBQTJDLENBQUM7QUFDL0QsUUFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQzVCLFFBQUEsYUFBYSxHQUFHLG1CQUFtQixDQUFDO0FBRXBDLFFBQUEsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBQSxzQkFBc0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN2QyxRQUFBLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQUEscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLCtGQUErRjtBQUMvRix3RkFBd0Y7QUFDM0UsUUFBQSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkQsNEZBQTRGO0FBQzVGLGdHQUFnRztBQUNuRixRQUFBLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExvY2F0aW9ucyB0aGUgZGFlbW9uIG93bnMuIEZpeGVkIHJhdGhlciB0aGFuIGNvbmZpZ3VyYWJsZSwgc28gZXZlcnkgbWFjaGluZSBsb29rcyB0aGUgc2FtZSBhbmRcbi8vIHRoZSBjb25maWcgZmlsZSBvbmx5IGNhcnJpZXMgd2hhdCBnZW51aW5lbHkgZGlmZmVycyBiZXR3ZWVuIHRoZW0uXG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUEFUSCA9IFwiL2V0Yy9wb3J0c2VjdXJlL2RhZW1vbi5qc29uXCI7XG5leHBvcnQgY29uc3QgU1RBVEVfUEFUSCA9IFwiL3Zhci9saWIvcG9ydHNlY3VyZS9zdGF0ZS5qc29uXCI7XG5leHBvcnQgY29uc3QgS0VZU19ISVNUT1JZX1BBVEggPSBcIi92YXIvbGliL3BvcnRzZWN1cmUvYXV0aG9yaXplZC1rZXlzLWhpc3RvcnlcIjtcbmV4cG9ydCBjb25zdCBST09UX0FVVEhPUklaRURfS0VZUyA9IFwiL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNcIjtcbmV4cG9ydCBjb25zdCBTU0hEX0NPTkZJR19QQVRIID0gXCIvZXRjL3NzaC9zc2hkX2NvbmZpZ1wiO1xuZXhwb3J0IGNvbnN0IFNTSERfRFJPUElOX0RJUiA9IFwiL2V0Yy9zc2gvc3NoZF9jb25maWcuZFwiO1xuZXhwb3J0IGNvbnN0IFNTSERfRFJPUElOX1BBVEggPSBcIi9ldGMvc3NoL3NzaGRfY29uZmlnLmQvMDAtcG9ydHNlY3VyZS5jb25mXCI7XG5leHBvcnQgY29uc3QgUEFTU1dEX1BBVEggPSBcIi9ldGMvcGFzc3dkXCI7XG5leHBvcnQgY29uc3QgQVVUSF9MT0dfUEFUSCA9IFwiL3Zhci9sb2cvYXV0aC5sb2dcIjtcblxuZXhwb3J0IGNvbnN0IENIRUNLX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfQ0hFQ0tfSU5URVJWQUwgPSA1ICogNjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IEdJVF9USU1FT1VUID0gMTIwICogMTAwMDtcbmV4cG9ydCBjb25zdCBNQVhfRVJST1JfQk9EWV9MRU5HVEggPSA1MDA7XG4vLyBBIHNvdXJjZSB0aGF0IHN0YXJ0cyBiZWluZyBzaWduZWQgYnkgc29tZW9uZSBuZXcgaXMgaGVsZCBhdCBhcm0ncyBsZW5ndGggZm9yIHRoaXMgbG9uZywgc28gYVxuLy8gc3RvbGVuIHNpZ25pbmcga2V5IGNhbm5vdCBwdXNoIGtleXMgb250byBhIG1hY2hpbmUgYmVmb3JlIGFueW9uZSBub3RpY2VzIHRoZSB3YXJuaW5nLlxuZXhwb3J0IGNvbnN0IFNJR05FUl9DSEFOR0VfREVMQVkgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuLy8gQWZ0ZXIgdGhpcyBtYW55IGNvbnNlY3V0aXZlIGZhaWx1cmVzIGEgcmVwbyBpcyB0aHJvd24gYXdheSBhbmQgY2xvbmVkIGZyb20gc2NyYXRjaCwgd2hpY2hcbi8vIHJlY292ZXJzIGZyb20gY29ycnVwdGlvbiBhbmQgaW50ZXJydXB0ZWQgZmV0Y2hlcy4gQ291bnRlZCBpbiBjaGVja3MsIHNvIGFib3V0IGEgcXVhcnRlciBob3VyLlxuZXhwb3J0IGNvbnN0IE1BWF9SRVBPX0ZBSUxVUkVTX0JFRk9SRV9SRUNMT05FID0gMTU7XG4iXX0=
26
- /* _JS_SOURCE_HASH = "c606b0bfd0484c71ea64ce15490c8a5c417cd888ee8184397cc81fed374ef249"; */
26
+ /* _JS_SOURCE_HASH = "d214733e56571f96efa46794d88b788ac72af825fd2d9633e88572404bbde2ad"; */
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -109,4 +109,4 @@ async function listRepoDir(repo, directory) {
109
109
  }
110
110
  exports.listRepoDir = listRepoDir;
111
111
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb0ZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVwb0ZpbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJEQUE2QjtBQUM3QixnREFBd0I7QUFDeEIsa0RBQWlJO0FBQ2pJLHdDQUEwRTtBQUMxRSwrQkFBbUU7QUFlbkUsU0FBZ0IsVUFBVSxDQUFDLFNBQWlCO0lBQ3hDLE9BQU87UUFDSCxPQUFPLEVBQUUsU0FBUztRQUNsQixRQUFRLEVBQUUsSUFBQSx3QkFBYyxFQUFDLFNBQVMsQ0FBQztRQUNuQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUEsdUJBQWEsRUFBQyxTQUFTLENBQUMsSUFBSSxJQUFBLHVCQUFhLEVBQUMsU0FBUyxDQUFDO0tBQ2xGLENBQUM7QUFDTixDQUFDO0FBTkQsZ0NBTUM7QUFFRCxTQUFnQixVQUFVLENBQUMsU0FBaUI7SUFDeEMsT0FBTztRQUNILE9BQU8sRUFBRSxJQUFBLDRCQUFhLEVBQUMsU0FBUyxDQUFDO1FBQ2pDLFFBQVEsRUFBRSxJQUFBLDZCQUFjLEVBQUMsU0FBUyxDQUFDO1FBQ25DLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO0tBQzVDLENBQUM7QUFDTixDQUFDO0FBTkQsZ0NBTUM7QUFFRDsrREFDK0Q7QUFDeEQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxTQUFpQjtJQUNuRCxJQUFJLFFBQVEsR0FBRyxNQUFNLElBQUEsNEJBQWEsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLE1BQU0sSUFBQSx1QkFBYSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFNBQVMsT0FBTyxJQUFBLHVC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a0JBQUUsQ0FBQyxPQUFPLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztBQUNMLENBQUM7QUFQRCxrQ0FPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBkZXJpdmVSZXZva2VLZXksIGZpbmRSZXZva2VLZXksIFJFVk9LRV9LRVlfTEFCRUwsIHJldm9rZUtleVBhdGgsIHJldm9rZVJlcG9QYXRoLCByZXZva2VSZXBvVVJMIH0gZnJvbSBcIi4uL3Jldm9rZVNvdXJjZVwiO1xuaW1wb3J0IHsgZmluZFNvdXJjZUtleSwgc291cmNlS2V5UGF0aCwgc291cmNlUmVwb1BhdGggfSBmcm9tIFwiLi4vc291cmNlc1wiO1xuaW1wb3J0IHsgY2xvbmVSZXBvLCByZXBvSXNVc2FibGUsIHJ1bkdpdCwgc2V0R2l0UmVmIH0gZnJvbSBcIi4vZ2l0XCI7XG5cbi8qKiBSZWFkaW5nIGEgcmVwbywgbWFkZSB0byBsb29rIGxpa2UgcmVhZGluZyBhIGRpcmVjdG9yeS4gQSBjYWxsZXIgYXNrcyBmb3IgYSBmaWxlIGFuZCBnZXRzIGl0c1xuICAgIGNvbnRlbnRzOyBrZWVwaW5nIGEgY2hlY2tvdXQgb24gZGlzaywgY2xvbmluZyBpdCBvbmNlIGFuZCBwdWxsaW5nIGl0IHNpbmNlLCBpcyB0aGlzIG1vZHVsZSdzXG4gICAgYnVzaW5lc3MgYW5kIG5vYm9keSBlbHNlJ3MuXG5cbiAgICBOb3RoaW5nIGhlcmUgZXZlciBhbnN3ZXJzIFwidGhlcmUgaXMgbm90aGluZ1wiIHdoZW4gdGhlIHRydXRoIGlzIFwiSSBjb3VsZCBub3QgbG9va1wiLiBBIHJlcG8gdGhhdFxuICAgIGNhbm5vdCBiZSByZWFjaGVkIHRocm93cywgYW5kIHRoZSBjYWxsZXIgc2tpcHMgdGhhdCBzb3VyY2UsIGJlY2F1c2UgcmVhZGluZyBhbiB1bnJlYWNoYWJsZVxuICAgIHJldm9rZSByZXBvIGFzIGVtcHR5IHdvdWxkIHVuLXJldm9rZSBldmVyeSBrZXkgaW4gaXQuICovXG5leHBvcnQgdHlwZSBSZXBvUmVmID0ge1xuICAgIHJlcG9VUkw6IHN0cmluZztcbiAgICByZXBvUGF0aDogc3RyaW5nO1xuICAgIGtleVBhdGg6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3VyY2VSZXBvKHNvdXJjZVVSTDogc3RyaW5nKTogUmVwb1JlZiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVwb1VSTDogc291cmNlVVJMLFxuICAgICAgICByZXBvUGF0aDogc291cmNlUmVwb1BhdGgoc291cmNlVVJMKSxcbiAgICAgICAga2V5UGF0aDogYXN5bmMgKCkgPT4gYXdhaXQgZmluZFNvdXJjZUtleShzb3VyY2VVUkwpIHx8IHNvdXJjZUtleVBhdGgoc291cmNlVVJMKSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlUmVwbyhzb3VyY2VVUkw6IHN0cmluZyk6IFJlcG9SZWYge1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlcG9VUkw6IHJldm9rZVJlcG9VUkwoc291cmNlVVJMKSxcbiAgICAgICAgcmVwb1BhdGg6IHJldm9rZVJlcG9QYXRoKHNvdXJjZVVSTCksXG4gICAgICAgIGtleVBhdGg6ICgpID0+IGVuc3VyZVJldm9rZUtleShzb3VyY2VVUkwpLFxuICAgIH07XG59XG5cbi8qKiBUaGUgcmV2b2tlIHJlcG8ncyBrZXkgaXMgd29ya2VkIG91dCBmcm9tIHRoZSBzb3VyY2Uncywgc28gbm90aGluZyBleHRyYSBoYWQgdG8gYmUgdXBsb2FkZWQgYW5kXG4gICAgbm90aGluZyBleHRyYSBpcyBzdG9yZWQgYW55d2hlcmUgaXQgY291bGQgYmUgdGFrZW4gZnJvbS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVSZXZva2VLZXkoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICBsZXQgZXhpc3RpbmcgPSBhd2FpdCBmaW5kUmV2b2tlS2V5KHNvdXJjZVVSTCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgbGV0IHNvdXJjZUtleSA9IGF3YWl0IGZpbmRTb3VyY2VLZXkoc291cmNlVVJMKTtcbiAgICBpZiAoIXNvdXJjZUtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEga2V5IGZvciAke3NvdXJjZVVSTH0gYXQgJHtzb3VyY2VLZXlQYXRoKHNvdXJjZVVSTCl9LCBubyBzdWNoIGZpbGUgZXhpc3RzYCk7XG4gICAgfVxuICAgIGxldCBkZXJpdmVkID0gZGVyaXZlUmV2b2tlS2V5KGF3YWl0IGZzLnJlYWRGaWxlKHNvdXJjZUtleSwgXCJ1dGY4XCIpKTtcbiAgICBsZXQga2V5UGF0aCA9IHJldm9rZUtleVBhdGgoc291cmNlVVJMKTtcbiAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUoa2V5UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoa2V5UGF0aCwgZGVyaXZlZC5wcml2YXRlS2V5RmlsZSwgeyBtb2RlOiAwbzYwMCB9KTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoYCR7a2V5UGF0aH0ucHViYCwgYCR7ZGVyaXZlZC5wdWJsaWNLZXl9ICR7UkVWT0tFX0tFWV9MQUJFTH1cXG5gLCB7IG1vZGU6IDBvNjQ0IH0pO1xuICAgIGNvbnNvbGUubG9nKGBEZXJpdmVkIHRoZSByZXZva2Uga2V5IGZvciAke3NvdXJjZVVSTH0gaW50byAke2tleVBhdGh9YCk7XG4gICAgcmV0dXJuIGtleVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLyoqIEJyaW5ncyB0aGUgY2hlY2tvdXQgaW4gbGluZSB3aXRoIHRoZSByZW1vdGUuIENsb25lZCB0aGUgZmlyc3QgdGltZSwgcHVsbGVkIGFmdGVyIHRoYXQsIGFuZCB0aGVcbiAgICB1c3VhbCBjYXNlIG9mIG5vdGhpbmcgaGF2aW5nIGNoYW5nZWQgY29zdHMgb25lIHJlZiBsaXN0aW5nIGFuZCBubyBvYmplY3RzLiBUaHJvd3MgaWYgdGhlIHJlcG9cbiAgICBjYW5ub3QgYmUgcmVhZCwgc28gYSBjYWxsZXIgY2Fubm90IG1pc3Rha2UgdGhhdCBmb3IgYW4gZW1wdHkgcmVwby4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzeW5jUmVwb0ZpbGVzKHJlcG86IFJlcG9SZWYpIHtcbiAgICBsZXQgeyByZXBvVVJMLCByZXBvUGF0aCB9ID0gcmVwbztcbiAgICBsZXQga2V5UGF0aCA9IGF3YWl0IHJlcG8ua2V5UGF0aCgpO1xuICAgIGlmICghYXdhaXQgcmVwb0lzVXNhYmxlKHsgcmVwb1BhdGgsIGtleVBhdGggfSkpIHtcbiAgICAgICAgYXdhaXQgY2xvbmVSZXBvKHsgcmVwb1VSTCwgcmVwb1BhdGgsIGtleVBhdGggfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGxvY2FsSGVhZCA9IGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIkhFQURcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGgsIGFsbG93RmFpbHVyZTogdHJ1ZSB9KTtcbiAgICBpZiAobG9jYWxIZWFkLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAvLyBBIHJlcG8gd2l0aCBubyBjb21taXRzIHlldCwgd2hpY2ggaXMgdGhlIHN0YXRlIGV2ZXJ5IHJldm9rZSByZXBvIHN0YXJ0cyBpbi4gVGhlcmUgaXNcbiAgICAgICAgLy8gbm90aGluZyB0byBwdWxsIGFuZCBub3RoaW5nIHRvIHNheS5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYnJhbmNoID0gKGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInJldi1wYXJzZVwiLCBcIi0tYWJicmV2LXJlZlwiLCBcIkhFQURcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGggfSkpLnN0ZG91dC50cmltKCk7XG4gICAgbGV0IGxpc3RpbmcgPSAoYXdhaXQgcnVuR2l0KHsgYXJnczogW1wibHMtcmVtb3RlXCIsIFwib3JpZ2luXCIsIGJyYW5jaF0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGggfSkpLnN0ZG91dDtcbiAgICBsZXQgcmVtb3RlU2hhID0gKGxpc3Rpbmcuc3BsaXQoL1xccysvKVswXSB8fCBcIlwiKS50cmltKCk7XG4gICAgaWYgKHJlbW90ZVNoYSAmJiByZW1vdGVTaGEgPT09IGxvY2FsSGVhZC5zdGRvdXQudHJpbSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgc2V0R2l0UmVmKHsgcmVwb1BhdGgsIGdpdFJlZjogYG9yaWdpbi8ke2JyYW5jaH1gLCBrZXlQYXRoIH0pO1xufVxuXG4vKiogVGhyb3dzIHdoZW4gdGhlcmUgaXMgbm8gY2hlY2tvdXQgYXQgYWxsLiBcIkkgaGF2ZSBuZXZlciBtYW5hZ2VkIHRvIHJlYWQgdGhpcyByZXBvXCIgYW5kIFwidGhpc1xuICAgIHJlcG8gaXMgZW1wdHlcIiBhcmUgZGlmZmVyZW50IGFuc3dlcnMgYW5kIG11c3Qgbm90IGNvbGxhcHNlIGludG8gb25lLiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVxdWlyZUNoZWNrb3V0KHJlcG86IFJlcG9SZWYpIHtcbiAgICBpZiAoIWF3YWl0IHBhdGhFeGlzdHMocGF0aC5qb2luKHJlcG8ucmVwb1BhdGgsIFwiLmdpdFwiKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIGNoZWNrb3V0IG9mICR7cmVwby5yZXBvVVJMfSBhdCAke3JlcG8ucmVwb1BhdGh9LCB0aGVyZSBpcyBub25lYCk7XG4gICAgfVxufVxuXG4vKiogT25lIGZpbGUgb3V0IG9mIHRoZSByZXBvLCBvciB1bmRlZmluZWQgaWYgdGhlIHJlcG8gZG9lcyBub3QgaGF2ZSB0aGF0IGZpbGUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcG9GaWxlKHJlcG86IFJlcG9SZWYsIGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICBhd2FpdCByZXF1aXJlQ2hlY2tvdXQocmVwbyk7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihyZXBvLnJlcG9QYXRoLCBmaWxlUGF0aCksIFwidXRmOFwiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vKiogVGhlIG5hbWVzIGluIG9uZSBvZiB0aGUgcmVwbydzIGRpcmVjdG9yaWVzLCBvciBub3RoaW5nIGlmIGl0IGhhcyBubyBzdWNoIGRpcmVjdG9yeS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UmVwb0RpcihyZXBvOiBSZXBvUmVmLCBkaXJlY3Rvcnk6IHN0cmluZykge1xuICAgIGF3YWl0IHJlcXVpcmVDaGVja291dChyZXBvKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gKGF3YWl0IGZzLnJlYWRkaXIocGF0aC5qb2luKHJlcG8ucmVwb1BhdGgsIGRpcmVjdG9yeSkpKS5zb3J0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuIl19
112
- /* _JS_SOURCE_HASH = "0c99291f2632bb60fefb4a47d4036bccb35629523daf32dc86833dbeb2b4059a"; */
112
+ /* _JS_SOURCE_HASH = "e3c39f6cf7357fcbb3416b41929eff34594dd374b40cfbe507b24ea03190e137"; */