@pipeline-builder/api-server 3.4.120 → 3.4.123

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@ Assembles the standardized HTTP runtime shared by every backend service: a confi
25
25
  | `requireOrgId` | Validate the `x-org-id` header is present |
26
26
  | `checkQuota` | Quota enforcement middleware |
27
27
  | `etagMiddleware` | Conditional GET (304 Not Modified) support |
28
- | `idempotencyMiddleware`, `createMemoryStore`, `createRedisIdempotencyStore` | Idempotency-key handling with pluggable stores |
28
+ | `idempotencyMiddleware`, `createMemoryStore` | Idempotency-key handling with a pluggable `IdempotencyStore` (in-memory default) |
29
29
 
30
30
  ### Route helpers (`./api`)
31
31
  | Export | Purpose |
@@ -289,4 +289,4 @@ export function createApp(options = {}) {
289
289
  app.get('/logs/:requestId', sseManager.middleware());
290
290
  return { app, sseManager };
291
291
  }
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2FwcC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqTixPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sT0FBTyxFQUFFLEVBQWdFLE1BQU0sU0FBUyxDQUFDO0FBQ2hHLE9BQU8sU0FBUyxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxGLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UseUVBQXlFO0FB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RSxDQUFDO1lBQ3hFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLDhCQUE4QixFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hGLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNmLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDbEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsb0NBQW9DLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxxQ0FBcUMsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkYsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHNlbmRTdWNjZXNzLCBzZW5kRXJyb3IsIGdlbmVyYXRlT3BlbkFwaVNwZWMsIEVycm9yQ29kZSwgY3JlYXRlTG9nZ2VyLCB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsLCBjcmVhdGVIZWFsdGhSb3V0ZXIsIHNldENvdW50ZXJFbWl0dGVyLCBzYWZlQ3JlYXRlUmVxdWlyZSwgcmVxdWlyZUF1dGggfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IE9wZW5BcGlTcGVjT3B0aW9ucyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbmZpZywgQ29yZUNvbnN0YW50cyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IGNvbXByZXNzaW9uIGZyb20gJ2NvbXByZXNzaW9uJztcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnO1xuaW1wb3J0IGV4cHJlc3MsIHsgdHlwZSBFeHByZXNzLCB0eXBlIE5leHRGdW5jdGlvbiwgdHlwZSBSZXF1ZXN0LCB0eXBlIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgcmF0ZUxpbWl0LCB7IGlwS2V5R2VuZXJhdG9yIH0gZnJvbSAnZXhwcmVzcy1yYXRlLWxpbWl0JztcbmltcG9ydCBoZWxtZXQgZnJvbSAnaGVsbWV0JztcbmltcG9ydCBzd2FnZ2VyVWkgZnJvbSAnc3dhZ2dlci11aS1leHByZXNzJztcbmltcG9ydCB7IHY3IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGV0YWdNaWRkbGV3YXJlIH0gZnJvbSAnLi9ldGFnLW1pZGRsZXdhcmUuanMnO1xuaW1wb3J0IHsgbWV0cmljc01pZGRsZXdhcmUsIG1ldHJpY3NIYW5kbGVyLCBpbmNDb3VudGVyIH0gZnJvbSAnLi9tZXRyaWNzLmpzJztcbmltcG9ydCB7IHJlYWRpbmVzc0d1YXJkIH0gZnJvbSAnLi9yZWFkaW5lc3MuanMnO1xuaW1wb3J0IHsgU1NFTWFuYWdlciwgU1NFX1JFUVVFU1RfSURfUkUgfSBmcm9tICcuLi9odHRwL3NzZS1jb25uZWN0aW9uLW1hbmFnZXIuanMnO1xuXG4vLyBXaXJlIGFwaS1jb3JlJ3MgY291bnRlciBzaGltIHRvIHRoZSByZWFsIHByb20tY2xpZW50IHJlZ2lzdHJ5LiBUaGlzIGlzXG4vLyBhIG5vLW9wIHVudGlsIGluY0NvdW50ZXIgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSAobGF6eSByZWdpc3RyYXRpb25cbi8vIGluIG1ldHJpY3MudHMpLCBhbmQgbGV0cyBhcGktY29yZSBoZWxwZXJzIGxpa2UgdGhlIHF1b3RhIGNsaWVudCByZWNvcmRcbi8vIGBxdW90YV9mYWlsX29wZW5fdG90YWxgIHdpdGhvdXQgdGFraW5nIGEgaGFyZCBkZXAgb24gYXBpLXNlcnZlci5cbnNldENvdW50ZXJFbWl0dGVyKGluY0NvdW50ZXIpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBcHBPcHRpb25zIHtcbiAgLyoqIEVuYWJsZSBDT1JTIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVDb3JzPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBIZWxtZXQgc2VjdXJpdHkgaGVhZGVycyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlSGVsbWV0PzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSByYXRlIGxpbWl0aW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVSYXRlTGltaXQ/OiBib29sZWFuO1xuICAvKiogUmVkaXMgVVJMIGZvciBzaGFyZWQgcmF0ZS1saW1pdCBzdGF0ZSAoZS5nLiAncmVkaXM6Ly9ob3N0OjYzNzknKS4gSW4tbWVtb3J5IHdoZW4gb21pdHRlZC4gKi9cbiAgcmVkaXNVcmw/OiBzdHJpbmc7XG4gIC8qKiBFbmFibGUgSlNPTiBib2R5IHBhcnNpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUpzb25Cb2R5PzogYm9vbGVhbjtcbiAgLyoqIEpTT04gYm9keSBzaXplIGxpbWl0IChkZWZhdWx0OiAnMW1iJykgKi9cbiAganNvbkxpbWl0Pzogc3RyaW5nO1xuICAvKiogRW5hYmxlIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlVXJsRW5jb2RlZD86IGJvb2xlYW47XG4gIC8qKiBVUkwtZW5jb2RlZCBib2R5IHNpemUgbGltaXQgKGRlZmF1bHQ6ICcxbWInKSAqL1xuICB1cmxFbmNvZGVkTGltaXQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gU1NFIG1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgc3NlTWFuYWdlcj86IFNTRU1hbmFnZXI7XG4gIC8qKiBIZWFsdGggY2hlY2sgZGVwZW5kZW5jeSBjaGVja2VyIOKAlCBpZiBwcm92aWRlZCwgL2hlYWx0aCByZXBvcnRzIGRlcGVuZGVuY3kgc3RhdHVzICovXG4gIGNoZWNrRGVwZW5kZW5jaWVzPzogKCkgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nPj47XG4gIC8qKiBFbmFibGUgT3BlbkFQSSBzcGVjIGF0IC9kb2NzL29wZW5hcGkuanNvbiBhbmQgU3dhZ2dlciBVSSBhdCAvZG9jcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlT3BlbkFwaT86IGJvb2xlYW47XG4gIC8qKiBPcGVuQVBJIHNwZWMgY3VzdG9taXphdGlvbiBvcHRpb25zICovXG4gIG9wZW5BcGlPcHRpb25zPzogT3BlbkFwaVNwZWNPcHRpb25zO1xuICAvKiogRW5hYmxlIGd6aXAvZGVmbGF0ZSByZXNwb25zZSBjb21wcmVzc2lvbiAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlQ29tcHJlc3Npb24/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0cmEgd2FybXVwIGNhbGxiYWNrcyBpbnZva2VkIGJ5IGBHRVQgL3dhcm11cGAgaW4gYWRkaXRpb24gdG8gdGhlXG4gICAqIGRlZmF1bHQgUG9zdGdyZXMgcGluZy4gVXNlIGZvciBzZXJ2aWNlcyB0aGF0IGRlcGVuZCBvbiBNb25nbywgUmVkaXMsXG4gICAqIFNRUywgZXRjLiDigJQgcHJlLXdhcm1pbmcgb3BlbnMgY29ubmVjdGlvbiBwb29scyBiZWZvcmUgcmVhbCB0cmFmZmljXG4gICAqIGFycml2ZXMuIEVhY2ggY2FsbGJhY2sgc2hvdWxkIHJlc29sdmUgd2hlbiBpdHMgZGVwZW5kZW5jeSBpcyByZWFkeTtcbiAgICogYW55IHJlamVjdGlvbiBjYXVzZXMgL3dhcm11cCB0byByZXR1cm4gNTAzLlxuICAgKi9cbiAgd2FybXVwSG9va3M/OiBBcnJheTwoKSA9PiBQcm9taXNlPHZvaWQ+Pjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgY3JlYXRpbmcgYW4gRXhwcmVzcyBhcHBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUFwcFJlc3VsdCB7XG4gIC8qKiBDb25maWd1cmVkIEV4cHJlc3MgYXBwbGljYXRpb24gKi9cbiAgYXBwOiBFeHByZXNzO1xuICAvKiogU1NFIG1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgc3NlTWFuYWdlcjogU1NFTWFuYWdlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSBhbiBFeHByZXNzIGFwcGxpY2F0aW9uIHdpdGggY29tbW9uIG1pZGRsZXdhcmVcbiAqXG4gKiBTZXRzIHVwOlxuICogLSBDT1JTIHdpdGggY29uZmlndXJlZCBvcmlnaW5zXG4gKiAtIEhlbG1ldCBzZWN1cml0eSBoZWFkZXJzXG4gKiAtIFJhdGUgbGltaXRpbmdcbiAqIC0gSlNPTiBhbmQgVVJMLWVuY29kZWQgYm9keSBwYXJzaW5nXG4gKiAtIFRydXN0IHByb3h5IHNldHRpbmdzXG4gKiAtIEhlYWx0aCBjaGVjayBlbmRwb2ludCAoL2hlYWx0aClcbiAqIC0gTWV0cmljcyBlbmRwb2ludCAoL21ldHJpY3MpXG4gKiAtIFNTRSBsb2dzIGVuZHBvaW50ICgvbG9ncy86cmVxdWVzdElkKVxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEV4cHJlc3MgYXBwIGFuZCBTU0UgbWFuYWdlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IGFwcCwgc3NlTWFuYWdlciB9ID0gY3JlYXRlQXBwKCk7XG4gKlxuICogYXBwLnBvc3QoJy9hcGkvcmVzb3VyY2UnLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gKiAgIC8vIFlvdXIgcm91dGUgaGFuZGxlclxuICogfSk7XG4gKlxuICogc3RhcnRTZXJ2ZXIoYXBwLCB7IG5hbWU6ICdNeSBTZXJ2aWNlJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwKG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMgPSB7fSk6IENyZWF0ZUFwcFJlc3VsdCB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVDb3JzID0gdHJ1ZSxcbiAgICBlbmFibGVIZWxtZXQgPSB0cnVlLFxuICAgIGVuYWJsZVJhdGVMaW1pdCA9IHRydWUsXG4gICAgZW5hYmxlSnNvbkJvZHkgPSB0cnVlLFxuICAgIGpzb25MaW1pdCA9ICcxbWInLFxuICAgIGVuYWJsZVVybEVuY29kZWQgPSB0cnVlLFxuICAgIHVybEVuY29kZWRMaW1pdCA9ICcxbWInLFxuICAgIHNzZU1hbmFnZXIgPSBuZXcgU1NFTWFuYWdlcigpLFxuICAgIGNoZWNrRGVwZW5kZW5jaWVzLFxuICAgIGVuYWJsZU9wZW5BcGkgPSB0cnVlLFxuICAgIG9wZW5BcGlPcHRpb25zLFxuICAgIGVuYWJsZUNvbXByZXNzaW9uID0gdHJ1ZSxcbiAgICB3YXJtdXBIb29rcyA9IFtdLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBGYWlsIGZhc3QgaWYgSldUX1NFQ1JFVCBpcyBub3QgY29uZmlndXJlZCDigJQgcHJldmVudHMgc2lsZW50IGF1dGggZmFpbHVyZXMgYXQgcnVudGltZVxuICBpZiAoIXByb2Nlc3MuZW52LkpXVF9TRUNSRVQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0pXVF9TRUNSRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVxdWlyZWQuIFNldCBpdCBiZWZvcmUgc3RhcnRpbmcgdGhlIHNlcnZlci4nKTtcbiAgfVxuXG4gIC8vIE9wZW5UZWxlbWV0cnkgaXMgTk9UIGluaXRpYWxpemVkIGhlcmU6IGJ5IHRoZSB0aW1lIGNyZWF0ZUFwcCBydW5zLCBleHByZXNzXG4gIC8vIGFuZCBodHRwIGhhdmUgYWxyZWFkeSBiZWVuIHJlcXVpcmVkLCBzbyB0aGUgYXV0by1pbnN0cnVtZW50YXRpb24gaG9va3NcbiAgLy8gd291bGQgaGF2ZSBub3RoaW5nIHRvIHBhdGNoIChubyBpbmJvdW5kIHNwYW4g4oaSIG5vIHRyYWNlIGlkKS4gVHJhY2luZyBpc1xuICAvLyBzdGFydGVkIGJ5IHRoZSBgb3RlbC1ib290c3RyYXAuanNgIHByZWxvYWQgaW5zdGVhZCAobm9kZSAtciDigKYg4oCUIHNlZSBlYWNoXG4gIC8vIHNlcnZpY2UncyBEb2NrZXJmaWxlIENNRCAvIHN0YXJ0IHNjcmlwdCksIHdoaWNoIHJ1bnMgYmVmb3JlIGFueVxuICAvLyBpbnN0cnVtZW50ZWQgbW9kdWxlIGxvYWRzLiBgY3VycmVudFRyYWNlSWQoKWAgdGhlbiByZWFkcyB0aGUgYWN0aXZlIHNwYW4uXG5cbiAgY29uc3Qgc2VydmVyQ29uZmlnID0gQ29uZmlnLmdldCgnc2VydmVyJyk7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBTZWN1cml0eSBtaWRkbGV3YXJlLlxuICAvL1xuICAvLyBTd2FnZ2VyIFVJIG5lZWRzIHVuc2FmZS1pbmxpbmUgKyB1bnNhZmUtZXZhbCBmb3IgaXRzIGJ1bmRsZWQgc2NyaXB0cyDigJRcbiAgLy8gYnV0IHdlIG9ubHkgcmVsYXggQ1NQIHRoYXQgZmFyIHdoZW4gKGEpIE9wZW5BUEkgaXMgZW5hYmxlZCBBTkQgKGIpIHdlJ3JlXG4gIC8vIG5vdCBpbiBwcm9kdWN0aW9uLiBJbiBwcm9kLCBTd2FnZ2VyIHNob3VsZCBiZSBzZXJ2ZWQgYmVoaW5kIGEgc2VwYXJhdGVcbiAgLy8gaG9zdCBvciBhdXRoLWdhdGVkIHJvdXRlOyB0aGUgbWFpbiBhcHAga2VlcHMgdGhlIHN0cmljdCBDU1Agc28gYSBTdG9yZWRcbiAgLy8gWFNTIGluIGFueSBoYW5kbGVyIGNhbid0IGBldmFsKClgIGFyYml0cmFyeSBzY3JpcHQuXG4gIGNvbnN0IGlzUHJvZHVjdGlvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG4gIGNvbnN0IGFsbG93U3dhZ2dlckNzcCA9IGVuYWJsZU9wZW5BcGkgJiYgIWlzUHJvZHVjdGlvbjtcbiAgaWYgKGVuYWJsZUhlbG1ldCkge1xuICAgIGFwcC51c2UoaGVsbWV0KHtcbiAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeToge1xuICAgICAgICBkaXJlY3RpdmVzOiB7XG4gICAgICAgICAgZGVmYXVsdFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIHNjcmlwdFNyYzogYWxsb3dTd2FnZ2VyQ3NwXG4gICAgICAgICAgICA/IFtcIidzZWxmJ1wiLCBcIid1bnNhZmUtaW5saW5lJ1wiLCBcIid1bnNhZmUtZXZhbCdcIl1cbiAgICAgICAgICAgIDogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIHN0eWxlU3JjOiBbXCInc2VsZidcIiwgXCIndW5zYWZlLWlubGluZSdcIl0sXG4gICAgICAgICAgaW1nU3JjOiBbXCInc2VsZidcIiwgJ2RhdGE6JywgJ2Jsb2I6J10sXG4gICAgICAgICAgY29ubmVjdFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIGZvbnRTcmM6IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgICBvYmplY3RTcmM6IFtcIidub25lJ1wiXSxcbiAgICAgICAgICBmcmFtZUFuY2VzdG9yczogW1wiJ25vbmUnXCJdLFxuICAgICAgICAgIGJhc2VVcmk6IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgICBmb3JtQWN0aW9uOiBbXCInc2VsZidcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIGlmIChlbmFibGVDb3JzKSB7XG4gICAgYXBwLnVzZShjb3JzKHNlcnZlckNvbmZpZy5jb3JzKSk7XG4gIH1cblxuICAvLyBSZXNwb25zZSBjb21wcmVzc2lvbiAoZ3ppcC9kZWZsYXRlKSDigJQgc2tpcCBTU0Ugc3RyZWFtc1xuICBpZiAoZW5hYmxlQ29tcHJlc3Npb24pIHtcbiAgICBhcHAudXNlKGNvbXByZXNzaW9uKHtcbiAgICAgIGZpbHRlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICAvLyBEb24ndCBjb21wcmVzcyBTU0Ugc3RyZWFtcy4gTWF0Y2ggYnkgaW5jbHVzaW9uOiB0aGUgQWNjZXB0IGhlYWRlciBpc1xuICAgICAgICAvLyBvZnRlbiBhIGxpc3QgKGUuZy4gXCJ0ZXh0L2V2ZW50LXN0cmVhbSwgKi8qXCIpLCBzbyBleGFjdCBlcXVhbGl0eSBtaXNzZWRcbiAgICAgICAgLy8gdGhvc2UgYW5kIGNvbXByZXNzZWQvYnVmZmVyZWQgdGhlIHN0cmVhbS5cbiAgICAgICAgaWYgKChyZXEuaGVhZGVycy5hY2NlcHQgfHwgJycpLmluY2x1ZGVzKCd0ZXh0L2V2ZW50LXN0cmVhbScpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBjb21wcmVzc2lvbi5maWx0ZXIocmVxLCByZXMpO1xuICAgICAgfSxcbiAgICAgIHRocmVzaG9sZDogQ29yZUNvbnN0YW50cy5DT01QUkVTU0lPTl9USFJFU0hPTERfQllURVMsXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gRVRhZyBzdXBwb3J0IGZvciBjb25kaXRpb25hbCBHRVQgcmVxdWVzdHMgKDMwNCBOb3QgTW9kaWZpZWQpXG4gIGFwcC51c2UoZXRhZ01pZGRsZXdhcmUoKSk7XG5cbiAgLy8gQm9keSBwYXJzaW5nXG4gIGlmIChlbmFibGVKc29uQm9keSkge1xuICAgIGFwcC51c2UoZXhwcmVzcy5qc29uKHsgbGltaXQ6IGpzb25MaW1pdCB9KSk7XG4gIH1cblxuICBpZiAoZW5hYmxlVXJsRW5jb2RlZCkge1xuICAgIGFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgZXh0ZW5kZWQ6IHRydWUsIGxpbWl0OiB1cmxFbmNvZGVkTGltaXQgfSkpO1xuICB9XG5cbiAgLy8gVHJ1c3QgcHJveHkgKG11c3QgYmUgc2V0IGJlZm9yZSByYXRlIGxpbWl0ZXIgc28gcmVxLmlwIHJlc29sdmVzIGNvcnJlY3RseSlcbiAgYXBwLnNldCgndHJ1c3QgcHJveHknLCBzZXJ2ZXJDb25maWcudHJ1c3RQcm94eSk7XG5cbiAgLy8gUmVxdWVzdCBJRCDigJQgcHJlZmVyIGV4aXN0aW5nIGhlYWRlciBmcm9tIG5naW54LCBvdGhlcndpc2UgZ2VuZXJhdGUgb25lXG4gIGFwcC51c2UoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3QgaGRyID0gcmVxLmhlYWRlcnNbJ3gtcmVxdWVzdC1pZCddO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IChBcnJheS5pc0FycmF5KGhkcikgPyBoZHJbMF0gOiBoZHIpIHx8IHV1aWQoKTtcbiAgICByZXEucmVxdWVzdElkID0gcmVxdWVzdElkO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUmVxdWVzdC1JZCcsIHJlcXVlc3RJZCk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICAvLyBIZWFsdGggY2hlY2sgcmVnaXN0ZXJlZCBiZWZvcmUgcmF0ZSBsaW1pdGVyIHNvIGl0IGlzIG5ldmVyIHRocm90dGxlZFxuICBhcHAudXNlKGNyZWF0ZUhlYWx0aFJvdXRlcih7XG4gICAgc2VydmljZU5hbWU6IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJyxcbiAgICBjaGVja0RlcGVuZGVuY2llcyxcbiAgfSkpO1xuXG4gIC8vIFJlYWRpbmVzcyBndWFyZCDigJQgNTAzcyBidXNpbmVzcyB0cmFmZmljIHdoaWxlIHRoZSBzZXJ2aWNlIGlzIE5vdFJlYWR5XG4gIC8vIChkYXRhc3RvcmUgc3RpbGwgY29ubmVjdGluZyBhdCBzdGFydHVwLCBvciBkcm9wcGVkKS4gTW91bnRlZCByaWdodCBhZnRlclxuICAvLyB0aGUgaGVhbHRoIHJvdXRlciBhbmQgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZSBzbyBhIE5vdFJlYWR5IHJlcXVlc3QgaXNcbiAgLy8gcmVqZWN0ZWQgY2hlYXBseSwgYmVmb3JlIHJhdGUtbGltaXQgLyBpZGVtcG90ZW5jeSAvIGJ1c2luZXNzIGhhbmRsZXJzIGV2ZXJcbiAgLy8gdG91Y2ggYSBkaXNjb25uZWN0ZWQgZGF0YXN0b3JlLiBJdCBhbGxvd2xpc3RzIHRoZSBpbmZyYSBlbmRwb2ludHNcbiAgLy8gKC9tZXRyaWNzLCAvd2FybXVwLCAvZG9jcywgL2xvZ3MpIHJlZ2lzdGVyZWQgYmVsb3csIHBsdXMgL2hlYWx0aCArIC9yZWFkeS5cbiAgYXBwLnVzZShyZWFkaW5lc3NHdWFyZCgpKTtcblxuICAvLyBXYXJtLXVwIGVuZHBvaW50IOKAlCBwcmUtb3BlbnMgY29ubmVjdGlvbiBwb29scyBzbyB0aGUgZmlyc3QgcmVhbCByZXF1ZXN0XG4gIC8vIGRvZXNuJ3QgcGF5IGNvbGQtc3RhcnQgbGF0ZW5jeS4gQWx3YXlzIHBpbmdzIFBvc3RncmVzOyBzZXJ2aWNlcyB1c2luZ1xuICAvLyBNb25nbyAvIFJlZGlzIC8gU1FTIHBhc3MgYHdhcm11cEhvb2tzYCBzbyB0aG9zZSBhcmUgd2FybWVkIGluIHBhcmFsbGVsLlxuICBhcHAuZ2V0KCcvd2FybXVwJywgYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRDb25uZWN0aW9uKCkudGVzdENvbm5lY3Rpb24oKSxcbiAgICAgICAgLi4ud2FybXVwSG9va3MubWFwKChob29rKSA9PiBob29rKCkpLFxuICAgICAgXSk7XG4gICAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyB3YXJtZWQ6IHRydWUsIGhvb2tzOiB3YXJtdXBIb29rcy5sZW5ndGggfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdXYXJtdXAgZmFpbGVkJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgZW5kcG9pbnQg4oCUIGFsd2F5cyByZWdpc3RlcmVkIChuZXZlciB0aHJvdHRsZWQpXG4gIGFwcC5nZXQoJy9tZXRyaWNzJywgbWV0cmljc0hhbmRsZXIoKSk7XG5cbiAgLy8gT3BlbkFQSSBzcGVjIGFuZCBTd2FnZ2VyIFVJIChyZWdpc3RlcmVkIGJlZm9yZSByYXRlIGxpbWl0ZXIpXG4gIGlmIChlbmFibGVPcGVuQXBpKSB7XG4gICAgY29uc3Qgc3BlYyA9IGdlbmVyYXRlT3BlbkFwaVNwZWMob3BlbkFwaU9wdGlvbnMpO1xuICAgIGFwcC5nZXQoJy9kb2NzL29wZW5hcGkuanNvbicsIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICByZXMuanNvbihzcGVjKTtcbiAgICB9KTtcbiAgICBhcHAudXNlKCcvZG9jcycsIHN3YWdnZXJVaS5zZXJ2ZSwgc3dhZ2dlclVpLnNldHVwKHNwZWMsIHtcbiAgICAgIGN1c3RvbVNpdGVUaXRsZTogb3BlbkFwaU9wdGlvbnM/LnRpdGxlID8/ICdQaXBlbGluZSBCdWlsZGVyIEFQSSBEb2NzJyxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBSYXRlIGxpbWl0aW5nIOKAlCB1c2VzIFJlZGlzIHdoZW4gcmVkaXNVcmwgaXMgcHJvdmlkZWQgZm9yIHNoYXJlZCBzdGF0ZSBhY3Jvc3MgaW5zdGFuY2VzXG4gIGlmIChlbmFibGVSYXRlTGltaXQpIHtcbiAgICBjb25zdCByYXRlTGltaXRDb25maWcgPSBDb25maWcuZ2V0KCdyYXRlTGltaXQnKTtcblxuICAgIGNvbnN0IHJhdGVMaW1pdE9wdGlvbnM6IFBhcmFtZXRlcnM8dHlwZW9mIHJhdGVMaW1pdD5bMF0gPSB7XG4gICAgICBtYXg6IHJhdGVMaW1pdENvbmZpZy5tYXgsXG4gICAgICB3aW5kb3dNczogcmF0ZUxpbWl0Q29uZmlnLndpbmRvd01zLFxuICAgICAgc3RhbmRhcmRIZWFkZXJzOiB0cnVlLFxuICAgICAgbGVnYWN5SGVhZGVyczogZmFsc2UsXG4gICAgICAvLyBTa2lwIHJhdGUgbGltaXRpbmcgb25seSBmb3IgQ1JZUFRPR1JBUEhJQ0FMTFktVkVSSUZJRUQgaW50ZXJuYWwgc2VydmljZVxuICAgICAgLy8gY2FsbGVycy4gVGhlIGxpbWl0ZXIgcnVucyBiZWZvcmUgcmVxdWlyZUF1dGgsIHNvIHRoZSBwcmV2aW91c2x5LXRydXN0ZWRcbiAgICAgIC8vIHBsYWludGV4dCBgeC1pbnRlcm5hbC1zZXJ2aWNlYCBoZWFkZXIgd2FzIHNwb29mYWJsZSBieSBhbnkgZXh0ZXJuYWxcbiAgICAgIC8vIGNsaWVudCDihpIgdG90YWwgYnlwYXNzLiB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsIHZlcmlmaWVzIHRoZSBzaWduZWRcbiAgICAgIC8vIHNlcnZpY2UgSldUIGluc3RlYWQ7IGludGVyLXNlcnZpY2UgY2FsbGVycyBhbGwgc2VuZCBvbmVcbiAgICAgIC8vIChnZXRTZXJ2aWNlQXV0aEhlYWRlcikuXG4gICAgICBza2lwOiAocmVxOiBSZXF1ZXN0KSA9PiB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsKHJlcSksXG4gICAgICAvLyBLZXkgb24gY2xpZW50IElQIG9ubHkuIFRoZSBsaW1pdGVyIHJ1bnMgcHJlLWF1dGgsIHNvIGByZXEudXNlcmAgaXMgdW5zZXRcbiAgICAgIC8vIGFuZCBhbnkgb3JnIGlkIHdvdWxkIGNvbWUgZnJvbSB0aGUgY2FsbGVyLXN1cHBsaWVkIGB4LW9yZy1pZGAgaGVhZGVyIOKAlFxuICAgICAgLy8gc3Bvb2ZhYmxlLCBsZXR0aW5nIGFuIGF0dGFja2VyIHJvdGF0ZSB2YWx1ZXMgdG8gZXZhZGUgdGhlIGJ1Y2tldCBvclxuICAgICAgLy8gZmxvb2QgYSB2aWN0aW0gb3JnJ3MgYnVja2V0LiBpcEtleUdlbmVyYXRvciBub3JtYWxpemVzIElQdjYgdG8gYSAvNjRcbiAgICAgIC8vIHByZWZpeCAoYWxzbyByZXF1aXJlZCBieSBleHByZXNzLXJhdGUtbGltaXQgOC54J3MgdmFsaWRhdG9yKS5cbiAgICAgIGtleUdlbmVyYXRvcjogKHJlcTogUmVxdWVzdCkgPT4gaXBLZXlHZW5lcmF0b3IocmVxLmlwIHx8ICdhbm9uJywgNjQpLFxuICAgICAgaGFuZGxlcjogKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgc2VuZEVycm9yKHJlcywgNDI5LCAnVG9vIG1hbnkgcmVxdWVzdHMsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJywgRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERUQpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gVXNlIFJlZGlzIHN0b3JlIHdoZW4gYXZhaWxhYmxlIGZvciBzaGFyZWQgc3RhdGUgYWNyb3NzIGluc3RhbmNlc1xuICAgIGlmIChvcHRpb25zLnJlZGlzVXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBFU00gaGFzIG5vIGdsb2JhbCBgcmVxdWlyZWA7IHNhZmVDcmVhdGVSZXF1aXJlIGxvYWRzIHRoZSBvcHRpb25hbFxuICAgICAgICAvLyByZWRpcyBkZXBzIHN5bmNocm9ub3VzbHkgaGVyZSAob25seSB3aGVuIGEgcmVkaXNVcmwgaXMgY29uZmlndXJlZCkuXG4gICAgICAgIC8vIChDSlMtYnVuZGxlIHNhZmUg4oCUIHNlZSBhcGktY29yZSdzIHNhZmUtcmVxdWlyZS50cy4pXG4gICAgICAgIGNvbnN0IHJlcXVpcmUgPSBzYWZlQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICBjb25zdCB7IFJlZGlzU3RvcmUgfSA9IHJlcXVpcmUoJ3JhdGUtbGltaXQtcmVkaXMnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgY29uc3QgUmVkaXMgPSByZXF1aXJlKCdpb3JlZGlzJyk7XG4gICAgICAgIGNvbnN0IHJlZGlzQ2xpZW50ID0gbmV3IFJlZGlzKG9wdGlvbnMucmVkaXNVcmwpO1xuICAgICAgICAvLyBpb3JlZGlzIGVtaXRzICdlcnJvcicgb24gY29ubmVjdGlvbiBsb3NzOyB3aXRob3V0IGEgbGlzdGVuZXIgTm9kZVxuICAgICAgICAvLyB0cmVhdHMgaXQgYXMgYW4gdW5oYW5kbGVkICdlcnJvcicgZXZlbnQgYW5kIENSQVNIRVMgdGhlIHByb2Nlc3MuIExvZ1xuICAgICAgICAvLyBhbmQgbGV0IGlvcmVkaXMgYXV0by1yZWNvbm5lY3QgKHJhdGUgbGltaXRpbmcgZmFsbHMgYmFjayBwZXItc3RvcmUpLlxuICAgICAgICByZWRpc0NsaWVudC5vbignZXJyb3InLCAoZTogdW5rbm93bikgPT5cbiAgICAgICAgICBjcmVhdGVMb2dnZXIoJ3JhdGUtbGltaXQnKS53YXJuKCdSZWRpcyByYXRlLWxpbWl0IHN0b3JlIGVycm9yJywgeyBlcnJvcjogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH0pKTtcbiAgICAgICAgcmF0ZUxpbWl0T3B0aW9ucy5zdG9yZSA9IG5ldyBSZWRpc1N0b3JlKHtcbiAgICAgICAgICBzZW5kQ29tbWFuZDogKC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiByZWRpc0NsaWVudC5jYWxsKC4uLmFyZ3MpLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjcmVhdGVMb2dnZXIoJ3JhdGUtbGltaXQnKS53YXJuKCdSZWRpcyBzdG9yZSB1bmF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIGluLW1lbW9yeSByYXRlIGxpbWl0aW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXBwLnVzZShyYXRlTGltaXQocmF0ZUxpbWl0T3B0aW9ucykpO1xuICB9XG5cbiAgLy8gRXhwcmVzcyByZXF1ZXN0IHRpbWVvdXQg4oCUIHVzZXMgQ29yZUNvbnN0YW50cyB0byBzaGFyZSB0aGUgc2FtZSBkZWZhdWx0IGFzIExhbWJkYSBoYW5kbGVyc1xuICBjb25zdCB0aW1lb3V0TXMgPSBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NUztcbiAgYXBwLnVzZSgoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgcmVzLnNldFRpbWVvdXQodGltZW91dE1zLCAoKSA9PiB7XG4gICAgICBpZiAoIXJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdSZXF1ZXN0IHRpbWVvdXQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gIH0pO1xuXG4gIC8vIFJlcXVlc3QgZHVyYXRpb24gbG9nZ2luZ1xuICBjb25zdCBkdXJhdGlvbkxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVxdWVzdC1kdXJhdGlvbicpO1xuICBhcHAudXNlKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICByZXMub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgZHVyYXRpb25Mb2dnZXIuaW5mbyhgJHtyZXEubWV0aG9kfSAke3JlcS5vcmlnaW5hbFVybH0gJHtyZXMuc3RhdHVzQ29kZX0gJHtkdXJhdGlvbn1tc2AsIHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBwYXRoOiByZXEub3JpZ2luYWxVcmwsXG4gICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBkdXJhdGlvbk1zOiBkdXJhdGlvbixcbiAgICAgICAgcmVxdWVzdElkOiByZXEucmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgbWlkZGxld2FyZSDigJQgcmVjb3JkcyByZXF1ZXN0IGR1cmF0aW9uIGFuZCBjb3VudFxuICBhcHAudXNlKG1ldHJpY3NNaWRkbGV3YXJlKCkpO1xuXG4gIC8vIE5PVEU6IGlkZW1wb3RlbmN5IGlzIGludGVudGlvbmFsbHkgTk9UIG1vdW50ZWQgaGVyZS4gSXQgbmVlZHMgdGhlIFZFUklGSUVEXG4gIC8vIG9yZyBpZCB0byBuYW1lc3BhY2UgaXRzIHJlcGxheSBjYWNoZSwgYnV0IHRoaXMgcHJlLWF1dGggcG9zaXRpb24gcnVucyBiZWZvcmVcbiAgLy8gYHJlcXVpcmVBdXRoYC9gYXR0YWNoUmVxdWVzdENvbnRleHRgIHBvcHVsYXRlIGlkZW50aXR5LCBzbyBhIGdsb2JhbCBtb3VudFxuICAvLyBoZXJlIGlzIGEgcGVybWFuZW50IG5vLW9wIChvcmcgYWx3YXlzIHVuZGVmaW5lZCDihpIgc2tpcCkuIEl0IGlzIGluc3RlYWQgd2lyZWRcbiAgLy8gaW50byB0aGUgcG9zdC1hdXRoIHJvdXRlIGNoYWlucyDigJQgc2VlIGBjcmVhdGVQcm90ZWN0ZWRSb3V0ZWAgL1xuICAvLyBgY3JlYXRlQXV0aGVudGljYXRlZFdpdGhPcmdSb3V0ZWAgaW4gbWlkZGxld2FyZS1mYWN0b3J5LnRzLlxuXG4gIC8vIFNTRSBsb2dzIGVuZHBvaW50IOKAlCB0aWNrZXQtZ2F0ZWQgKFdhdmUgMmIpLlxuICAvLyBUaGUgc3RyZWFtIGNhcnJpZXMgcGVyLW9yZyBidWlsZCBsb2dzLCBzbyBpdCBtdXN0IG5vdCBiZSB3b3JsZC1yZWFkYWJsZS5cbiAgLy8gQ2xpZW50cyBmaXJzdCBQT1NUIC9sb2dzL3RpY2tldCAoSldULWF1dGhlbnRpY2F0ZWQpIHRvIG1pbnQgYSBzaG9ydC1saXZlZCxcbiAgLy8gc2luZ2xlLXVzZSB0aWNrZXQgYm91bmQgdG8gdGhlaXIgb3JnIEFORCB0byB0aGUgc3BlY2lmaWMgYHJlcXVlc3RJZGAgc3RyZWFtXG4gIC8vIHRoZXkgaW50ZW5kIHRvIG9wZW4sIHRoZW4gb3BlbiB0aGUgRXZlbnRTb3VyY2Ugd2l0aCA/dGlja2V0PTx0Pi4gVGhpcyBrZWVwc1xuICAvLyB0aGUgSldUIG91dCBvZiBxdWVyeSBzdHJpbmdzIC8gYWNjZXNzIGxvZ3Mgd2hpbGUgZW5mb3JjaW5nIG9yZyBvd25lcnNoaXAsXG4gIC8vIHBlci1zdWJqZWN0IGF1dGhvcml6YXRpb24sIGFuZCB0aGUgcGVyLW9yZyBjb25uZWN0aW9uIGNhcCBvbiB0aGUgc3RyZWFtLlxuICAvLyBNaXJyb3JzIHRoZSBtZXNzYWdlLXNlcnZpY2Ugbm90aWZpY2F0aW9ucyBTU0UgdGlja2V0IGV4Y2hhbmdlLlxuICBhcHAucG9zdCgnL2xvZ3MvdGlja2V0JywgcmVxdWlyZUF1dGgsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBvcmdJZCA9IHJlcS51c2VyPy5vcmdhbml6YXRpb25JZD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIW9yZ0lkKSB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MDAsICdUb2tlbiBtaXNzaW5nIG9yZ2FuaXphdGlvbicsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIGNhbGxlciBtdXN0IG5hbWUgdGhlIHN0cmVhbSBzdWJqZWN0IHVwIGZyb250IHNvIHRoZSB0aWNrZXQgaXMgYm91bmQgdG9cbiAgICAvLyBpdC4gV2l0aG91dCB0aGlzLCBhIHRpY2tldCBjb3VsZCBiZSByZXBsYXllZCBhZ2FpbnN0IEFOWSByZXF1ZXN0SWQgdGhlXG4gICAgLy8gb3JnIGNvdWxkIGd1ZXNzLCBsZXR0aW5nIGl0IGF0dGFjaCB0byBhbm90aGVyIG9yZydzIGxvZyBzdHJlYW0uIFN0cmljdGx5XG4gICAgLy8gZm9ybWF0LXZhbGlkYXRlZCBzbyBpdCBjYW4ndCBjYXJyeSBhbiBpbmplY3Rpb24gcGF5bG9hZCBpbnRvIHRoZSBzdWJqZWN0LlxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IChyZXEuYm9keSBhcyB7IHJlcXVlc3RJZD86IHVua25vd24gfSB8IHVuZGVmaW5lZCk/LnJlcXVlc3RJZDtcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RJZCAhPT0gJ3N0cmluZycgfHwgIVNTRV9SRVFVRVNUX0lEX1JFLnRlc3QocmVxdWVzdElkKSkge1xuICAgICAgc2VuZEVycm9yKHJlcywgNDAwLCAnTWlzc2luZyBvciBpbnZhbGlkIHJlcXVlc3RJZCcsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gc3NlTWFuYWdlci5jcmVhdGVUaWNrZXQob3JnSWQsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnb3JnLWxpbWl0Jykge1xuICAgICAgICBzZW5kRXJyb3IocmVzLCA0MjksICdUb28gbWFueSBsb2cgc3RyZWFtIHRpY2tldHMgaXNzdWVkJywgRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbmRFcnJvcihyZXMsIDUwMywgJ0xvZyBzdHJlYW1pbmcgc3Vic3lzdGVtIGF0IGNhcGFjaXR5JywgRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHsgdGlja2V0OiByZXN1bHQudGlja2V0IH0pO1xuICB9KTtcblxuICAvLyBUaGUgc3RyZWFtIGl0c2VsZiByZXNvbHZlcyArIGNvbnN1bWVzIHRoZSB0aWNrZXQgaW5zaWRlIG1pZGRsZXdhcmUoKSBhbmRcbiAgLy8gcmVqZWN0cyBhbnkgYW5vbnltb3VzIC8gaW52YWxpZCAvIGV4cGlyZWQgLyBhbHJlYWR5LXVzZWQgdGlja2V0IHdpdGggNDAxLlxuICBhcHAuZ2V0KCcvbG9ncy86cmVxdWVzdElkJywgc3NlTWFuYWdlci5taWRkbGV3YXJlKCkpO1xuXG4gIHJldHVybiB7IGFwcCwgc3NlTWFuYWdlciB9O1xufVxuIl19
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2FwcC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqTixPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sT0FBTyxFQUFFLEVBQWdFLE1BQU0sU0FBUyxDQUFDO0FBQ2hHLE9BQU8sU0FBUyxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxGLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UseUVBQXlFO0FB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RSxDQUFDO1lBQ3hFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLDhCQUE4QixFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hGLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNmLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDbEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsb0NBQW9DLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxxQ0FBcUMsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkYsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHNlbmRTdWNjZXNzLCBzZW5kRXJyb3IsIGdlbmVyYXRlT3BlbkFwaVNwZWMsIEVycm9yQ29kZSwgY3JlYXRlTG9nZ2VyLCB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsLCBjcmVhdGVIZWFsdGhSb3V0ZXIsIHNldENvdW50ZXJFbWl0dGVyLCBzYWZlQ3JlYXRlUmVxdWlyZSwgcmVxdWlyZUF1dGggfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IE9wZW5BcGlTcGVjT3B0aW9ucyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbmZpZywgQ29yZUNvbnN0YW50cyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IGNvbXByZXNzaW9uIGZyb20gJ2NvbXByZXNzaW9uJztcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnO1xuaW1wb3J0IGV4cHJlc3MsIHsgdHlwZSBFeHByZXNzLCB0eXBlIE5leHRGdW5jdGlvbiwgdHlwZSBSZXF1ZXN0LCB0eXBlIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgcmF0ZUxpbWl0LCB7IGlwS2V5R2VuZXJhdG9yIH0gZnJvbSAnZXhwcmVzcy1yYXRlLWxpbWl0JztcbmltcG9ydCBoZWxtZXQgZnJvbSAnaGVsbWV0JztcbmltcG9ydCBzd2FnZ2VyVWkgZnJvbSAnc3dhZ2dlci11aS1leHByZXNzJztcbmltcG9ydCB7IHY3IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGV0YWdNaWRkbGV3YXJlIH0gZnJvbSAnLi9ldGFnLW1pZGRsZXdhcmUuanMnO1xuaW1wb3J0IHsgbWV0cmljc01pZGRsZXdhcmUsIG1ldHJpY3NIYW5kbGVyLCBpbmNDb3VudGVyIH0gZnJvbSAnLi9tZXRyaWNzLmpzJztcbmltcG9ydCB7IHJlYWRpbmVzc0d1YXJkIH0gZnJvbSAnLi9yZWFkaW5lc3MuanMnO1xuaW1wb3J0IHsgU1NFTWFuYWdlciwgU1NFX1JFUVVFU1RfSURfUkUgfSBmcm9tICcuLi9odHRwL3NzZS1jb25uZWN0aW9uLW1hbmFnZXIuanMnO1xuXG4vLyBXaXJlIGFwaS1jb3JlJ3MgY291bnRlciBzaGltIHRvIHRoZSByZWFsIHByb20tY2xpZW50IHJlZ2lzdHJ5LiBUaGlzIGlzXG4vLyBhIG5vLW9wIHVudGlsIGluY0NvdW50ZXIgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSAobGF6eSByZWdpc3RyYXRpb25cbi8vIGluIG1ldHJpY3MudHMpLCBhbmQgbGV0cyBhcGktY29yZSBoZWxwZXJzIGxpa2UgdGhlIHF1b3RhIGNsaWVudCByZWNvcmRcbi8vIGBxdW90YV9mYWlsX29wZW5fdG90YWxgIHdpdGhvdXQgdGFraW5nIGEgaGFyZCBkZXAgb24gYXBpLXNlcnZlci5cbnNldENvdW50ZXJFbWl0dGVyKGluY0NvdW50ZXIpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBcHBPcHRpb25zIHtcbiAgLyoqIEVuYWJsZSBDT1JTIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVDb3JzPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBIZWxtZXQgc2VjdXJpdHkgaGVhZGVycyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlSGVsbWV0PzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSByYXRlIGxpbWl0aW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVSYXRlTGltaXQ/OiBib29sZWFuO1xuICAvKiogUmVkaXMgVVJMIGZvciBzaGFyZWQgcmF0ZS1saW1pdCBzdGF0ZSAoZS5nLiAncmVkaXM6Ly9ob3N0OjYzNzknKS4gSW4tbWVtb3J5IHdoZW4gb21pdHRlZC4gKi9cbiAgcmVkaXNVcmw/OiBzdHJpbmc7XG4gIC8qKiBFbmFibGUgSlNPTiBib2R5IHBhcnNpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUpzb25Cb2R5PzogYm9vbGVhbjtcbiAgLyoqIEpTT04gYm9keSBzaXplIGxpbWl0IChkZWZhdWx0OiAnMW1iJykgKi9cbiAganNvbkxpbWl0Pzogc3RyaW5nO1xuICAvKiogRW5hYmxlIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlVXJsRW5jb2RlZD86IGJvb2xlYW47XG4gIC8qKiBVUkwtZW5jb2RlZCBib2R5IHNpemUgbGltaXQgKGRlZmF1bHQ6ICcxbWInKSAqL1xuICB1cmxFbmNvZGVkTGltaXQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gU1NFIG1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgc3NlTWFuYWdlcj86IFNTRU1hbmFnZXI7XG4gIC8qKiBIZWFsdGggY2hlY2sgZGVwZW5kZW5jeSBjaGVja2VyIOKAlCBpZiBwcm92aWRlZCwgL2hlYWx0aCByZXBvcnRzIGRlcGVuZGVuY3kgc3RhdHVzICovXG4gIGNoZWNrRGVwZW5kZW5jaWVzPzogKCkgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nPj47XG4gIC8qKiBFbmFibGUgT3BlbkFQSSBzcGVjIGF0IC9kb2NzL29wZW5hcGkuanNvbiBhbmQgU3dhZ2dlciBVSSBhdCAvZG9jcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlT3BlbkFwaT86IGJvb2xlYW47XG4gIC8qKiBPcGVuQVBJIHNwZWMgY3VzdG9taXphdGlvbiBvcHRpb25zICovXG4gIG9wZW5BcGlPcHRpb25zPzogT3BlbkFwaVNwZWNPcHRpb25zO1xuICAvKiogRW5hYmxlIGd6aXAvZGVmbGF0ZSByZXNwb25zZSBjb21wcmVzc2lvbiAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlQ29tcHJlc3Npb24/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0cmEgd2FybXVwIGNhbGxiYWNrcyBpbnZva2VkIGJ5IGBHRVQgL3dhcm11cGAgaW4gYWRkaXRpb24gdG8gdGhlXG4gICAqIGRlZmF1bHQgUG9zdGdyZXMgcGluZy4gVXNlIGZvciBzZXJ2aWNlcyB0aGF0IGRlcGVuZCBvbiBNb25nbywgUmVkaXMsXG4gICAqIFNRUywgZXRjLiDigJQgcHJlLXdhcm1pbmcgb3BlbnMgY29ubmVjdGlvbiBwb29scyBiZWZvcmUgcmVhbCB0cmFmZmljXG4gICAqIGFycml2ZXMuIEVhY2ggY2FsbGJhY2sgc2hvdWxkIHJlc29sdmUgd2hlbiBpdHMgZGVwZW5kZW5jeSBpcyByZWFkeTtcbiAgICogYW55IHJlamVjdGlvbiBjYXVzZXMgL3dhcm11cCB0byByZXR1cm4gNTAzLlxuICAgKi9cbiAgd2FybXVwSG9va3M/OiBBcnJheTwoKSA9PiBQcm9taXNlPHZvaWQ+Pjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgY3JlYXRpbmcgYW4gRXhwcmVzcyBhcHBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUFwcFJlc3VsdCB7XG4gIC8qKiBDb25maWd1cmVkIEV4cHJlc3MgYXBwbGljYXRpb24gKi9cbiAgYXBwOiBFeHByZXNzO1xuICAvKiogU1NFIG1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgc3NlTWFuYWdlcjogU1NFTWFuYWdlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSBhbiBFeHByZXNzIGFwcGxpY2F0aW9uIHdpdGggY29tbW9uIG1pZGRsZXdhcmVcbiAqXG4gKiBTZXRzIHVwOlxuICogLSBDT1JTIHdpdGggY29uZmlndXJlZCBvcmlnaW5zXG4gKiAtIEhlbG1ldCBzZWN1cml0eSBoZWFkZXJzXG4gKiAtIFJhdGUgbGltaXRpbmdcbiAqIC0gSlNPTiBhbmQgVVJMLWVuY29kZWQgYm9keSBwYXJzaW5nXG4gKiAtIFRydXN0IHByb3h5IHNldHRpbmdzXG4gKiAtIEhlYWx0aCBjaGVjayBlbmRwb2ludCAoL2hlYWx0aClcbiAqIC0gTWV0cmljcyBlbmRwb2ludCAoL21ldHJpY3MpXG4gKiAtIFNTRSBsb2dzIGVuZHBvaW50ICgvbG9ncy86cmVxdWVzdElkKVxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEV4cHJlc3MgYXBwIGFuZCBTU0UgbWFuYWdlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IGFwcCwgc3NlTWFuYWdlciB9ID0gY3JlYXRlQXBwKCk7XG4gKlxuICogYXBwLnBvc3QoJy9hcGkvcmVzb3VyY2UnLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gKiAgIC8vIFlvdXIgcm91dGUgaGFuZGxlclxuICogfSk7XG4gKlxuICogc3RhcnRTZXJ2ZXIoYXBwLCB7IG5hbWU6ICdNeSBTZXJ2aWNlJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwKG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMgPSB7fSk6IENyZWF0ZUFwcFJlc3VsdCB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVDb3JzID0gdHJ1ZSxcbiAgICBlbmFibGVIZWxtZXQgPSB0cnVlLFxuICAgIGVuYWJsZVJhdGVMaW1pdCA9IHRydWUsXG4gICAgZW5hYmxlSnNvbkJvZHkgPSB0cnVlLFxuICAgIGpzb25MaW1pdCA9ICcxbWInLFxuICAgIGVuYWJsZVVybEVuY29kZWQgPSB0cnVlLFxuICAgIHVybEVuY29kZWRMaW1pdCA9ICcxbWInLFxuICAgIHNzZU1hbmFnZXIgPSBuZXcgU1NFTWFuYWdlcigpLFxuICAgIGNoZWNrRGVwZW5kZW5jaWVzLFxuICAgIGVuYWJsZU9wZW5BcGkgPSB0cnVlLFxuICAgIG9wZW5BcGlPcHRpb25zLFxuICAgIGVuYWJsZUNvbXByZXNzaW9uID0gdHJ1ZSxcbiAgICB3YXJtdXBIb29rcyA9IFtdLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBGYWlsIGZhc3QgaWYgSldUX1NFQ1JFVCBpcyBub3QgY29uZmlndXJlZCDigJQgcHJldmVudHMgc2lsZW50IGF1dGggZmFpbHVyZXMgYXQgcnVudGltZVxuICBpZiAoIXByb2Nlc3MuZW52LkpXVF9TRUNSRVQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0pXVF9TRUNSRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVxdWlyZWQuIFNldCBpdCBiZWZvcmUgc3RhcnRpbmcgdGhlIHNlcnZlci4nKTtcbiAgfVxuXG4gIC8vIE9wZW5UZWxlbWV0cnkgaXMgTk9UIGluaXRpYWxpemVkIGhlcmU6IGJ5IHRoZSB0aW1lIGNyZWF0ZUFwcCBydW5zLCBleHByZXNzXG4gIC8vIGFuZCBodHRwIGhhdmUgYWxyZWFkeSBiZWVuIHJlcXVpcmVkLCBzbyB0aGUgYXV0by1pbnN0cnVtZW50YXRpb24gaG9va3NcbiAgLy8gd291bGQgaGF2ZSBub3RoaW5nIHRvIHBhdGNoIChubyBpbmJvdW5kIHNwYW4g4oaSIG5vIHRyYWNlIGlkKS4gVHJhY2luZyBpc1xuICAvLyBzdGFydGVkIGJ5IHRoZSBgb3RlbC1ib290c3RyYXAuanNgIHByZWxvYWQgaW5zdGVhZCAobm9kZSAtciDigKYg4oCUIHNlZSBlYWNoXG4gIC8vIHNlcnZpY2UncyBEb2NrZXJmaWxlIENNRCAvIHN0YXJ0IHNjcmlwdCksIHdoaWNoIHJ1bnMgYmVmb3JlIGFueVxuICAvLyBpbnN0cnVtZW50ZWQgbW9kdWxlIGxvYWRzLiBgY3VycmVudFRyYWNlSWQoKWAgdGhlbiByZWFkcyB0aGUgYWN0aXZlIHNwYW4uXG5cbiAgY29uc3Qgc2VydmVyQ29uZmlnID0gQ29uZmlnLmdldCgnc2VydmVyJyk7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBTZWN1cml0eSBtaWRkbGV3YXJlLlxuICAvL1xuICAvLyBTd2FnZ2VyIFVJIG5lZWRzIHVuc2FmZS1pbmxpbmUgKyB1bnNhZmUtZXZhbCBmb3IgaXRzIGJ1bmRsZWQgc2NyaXB0cyDigJRcbiAgLy8gYnV0IHdlIG9ubHkgcmVsYXggQ1NQIHRoYXQgZmFyIHdoZW4gKGEpIE9wZW5BUEkgaXMgZW5hYmxlZCBBTkQgKGIpIHdlJ3JlXG4gIC8vIG5vdCBpbiBwcm9kdWN0aW9uLiBJbiBwcm9kLCBTd2FnZ2VyIHNob3VsZCBiZSBzZXJ2ZWQgYmVoaW5kIGEgc2VwYXJhdGVcbiAgLy8gaG9zdCBvciBhdXRoLWdhdGVkIHJvdXRlOyB0aGUgbWFpbiBhcHAga2VlcHMgdGhlIHN0cmljdCBDU1Agc28gYSBTdG9yZWRcbiAgLy8gWFNTIGluIGFueSBoYW5kbGVyIGNhbid0IGBldmFsKClgIGFyYml0cmFyeSBzY3JpcHQuXG4gIGNvbnN0IGlzUHJvZHVjdGlvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG4gIGNvbnN0IGFsbG93U3dhZ2dlckNzcCA9IGVuYWJsZU9wZW5BcGkgJiYgIWlzUHJvZHVjdGlvbjtcbiAgaWYgKGVuYWJsZUhlbG1ldCkge1xuICAgIGFwcC51c2UoaGVsbWV0KHtcbiAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeToge1xuICAgICAgICBkaXJlY3RpdmVzOiB7XG4gICAgICAgICAgZGVmYXVsdFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIHNjcmlwdFNyYzogYWxsb3dTd2FnZ2VyQ3NwXG4gICAgICAgICAgICA/IFtcIidzZWxmJ1wiLCBcIid1bnNhZmUtaW5saW5lJ1wiLCBcIid1bnNhZmUtZXZhbCdcIl1cbiAgICAgICAgICAgIDogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIHN0eWxlU3JjOiBbXCInc2VsZidcIiwgXCIndW5zYWZlLWlubGluZSdcIl0sXG4gICAgICAgICAgaW1nU3JjOiBbXCInc2VsZidcIiwgJ2RhdGE6JywgJ2Jsb2I6J10sXG4gICAgICAgICAgY29ubmVjdFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIGZvbnRTcmM6IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgICBvYmplY3RTcmM6IFtcIidub25lJ1wiXSxcbiAgICAgICAgICBmcmFtZUFuY2VzdG9yczogW1wiJ25vbmUnXCJdLFxuICAgICAgICAgIGJhc2VVcmk6IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgICBmb3JtQWN0aW9uOiBbXCInc2VsZidcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIGlmIChlbmFibGVDb3JzKSB7XG4gICAgYXBwLnVzZShjb3JzKHNlcnZlckNvbmZpZy5jb3JzKSk7XG4gIH1cblxuICAvLyBSZXNwb25zZSBjb21wcmVzc2lvbiAoZ3ppcC9kZWZsYXRlKSDigJQgc2tpcCBTU0Ugc3RyZWFtc1xuICBpZiAoZW5hYmxlQ29tcHJlc3Npb24pIHtcbiAgICBhcHAudXNlKGNvbXByZXNzaW9uKHtcbiAgICAgIGZpbHRlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICAvLyBEb24ndCBjb21wcmVzcyBTU0Ugc3RyZWFtcy4gTWF0Y2ggYnkgaW5jbHVzaW9uOiB0aGUgQWNjZXB0IGhlYWRlciBpc1xuICAgICAgICAvLyBvZnRlbiBhIGxpc3QgKGUuZy4gXCJ0ZXh0L2V2ZW50LXN0cmVhbSwgKi8qXCIpLCBzbyBleGFjdCBlcXVhbGl0eSBtaXNzZWRcbiAgICAgICAgLy8gdGhvc2UgYW5kIGNvbXByZXNzZWQvYnVmZmVyZWQgdGhlIHN0cmVhbS5cbiAgICAgICAgaWYgKChyZXEuaGVhZGVycy5hY2NlcHQgfHwgJycpLmluY2x1ZGVzKCd0ZXh0L2V2ZW50LXN0cmVhbScpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBjb21wcmVzc2lvbi5maWx0ZXIocmVxLCByZXMpO1xuICAgICAgfSxcbiAgICAgIHRocmVzaG9sZDogQ29yZUNvbnN0YW50cy5DT01QUkVTU0lPTl9USFJFU0hPTERfQllURVMsXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gRVRhZyBzdXBwb3J0IGZvciBjb25kaXRpb25hbCBHRVQgcmVxdWVzdHMgKDMwNCBOb3QgTW9kaWZpZWQpXG4gIGFwcC51c2UoZXRhZ01pZGRsZXdhcmUoKSk7XG5cbiAgLy8gQm9keSBwYXJzaW5nXG4gIGlmIChlbmFibGVKc29uQm9keSkge1xuICAgIGFwcC51c2UoZXhwcmVzcy5qc29uKHsgbGltaXQ6IGpzb25MaW1pdCB9KSk7XG4gIH1cblxuICBpZiAoZW5hYmxlVXJsRW5jb2RlZCkge1xuICAgIGFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgZXh0ZW5kZWQ6IHRydWUsIGxpbWl0OiB1cmxFbmNvZGVkTGltaXQgfSkpO1xuICB9XG5cbiAgLy8gVHJ1c3QgcHJveHkgKG11c3QgYmUgc2V0IGJlZm9yZSByYXRlIGxpbWl0ZXIgc28gcmVxLmlwIHJlc29sdmVzIGNvcnJlY3RseSlcbiAgYXBwLnNldCgndHJ1c3QgcHJveHknLCBzZXJ2ZXJDb25maWcudHJ1c3RQcm94eSk7XG5cbiAgLy8gUmVxdWVzdCBJRCDigJQgcHJlZmVyIGV4aXN0aW5nIGhlYWRlciBmcm9tIG5naW54LCBvdGhlcndpc2UgZ2VuZXJhdGUgb25lXG4gIGFwcC51c2UoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3QgaGRyID0gcmVxLmhlYWRlcnNbJ3gtcmVxdWVzdC1pZCddO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IChBcnJheS5pc0FycmF5KGhkcikgPyBoZHJbMF0gOiBoZHIpIHx8IHV1aWQoKTtcbiAgICByZXEucmVxdWVzdElkID0gcmVxdWVzdElkO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUmVxdWVzdC1JZCcsIHJlcXVlc3RJZCk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICAvLyBIZWFsdGggY2hlY2sgcmVnaXN0ZXJlZCBiZWZvcmUgcmF0ZSBsaW1pdGVyIHNvIGl0IGlzIG5ldmVyIHRocm90dGxlZFxuICBhcHAudXNlKGNyZWF0ZUhlYWx0aFJvdXRlcih7XG4gICAgc2VydmljZU5hbWU6IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJyxcbiAgICBjaGVja0RlcGVuZGVuY2llcyxcbiAgfSkpO1xuXG4gIC8vIFJlYWRpbmVzcyBndWFyZCDigJQgNTAzcyBidXNpbmVzcyB0cmFmZmljIHdoaWxlIHRoZSBzZXJ2aWNlIGlzIE5vdFJlYWR5XG4gIC8vIChkYXRhc3RvcmUgc3RpbGwgY29ubmVjdGluZyBhdCBzdGFydHVwLCBvciBkcm9wcGVkKS4gTW91bnRlZCByaWdodCBhZnRlclxuICAvLyB0aGUgaGVhbHRoIHJvdXRlciBhbmQgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZSBzbyBhIE5vdFJlYWR5IHJlcXVlc3QgaXNcbiAgLy8gcmVqZWN0ZWQgY2hlYXBseSwgYmVmb3JlIHJhdGUtbGltaXQgLyBpZGVtcG90ZW5jeSAvIGJ1c2luZXNzIGhhbmRsZXJzIGV2ZXJcbiAgLy8gdG91Y2ggYSBkaXNjb25uZWN0ZWQgZGF0YXN0b3JlLiBJdCBhbGxvd2xpc3RzIHRoZSBpbmZyYSBlbmRwb2ludHNcbiAgLy8gKC9tZXRyaWNzLCAvd2FybXVwLCAvZG9jcywgL2xvZ3MpIHJlZ2lzdGVyZWQgYmVsb3csIHBsdXMgL2hlYWx0aCArIC9yZWFkeS5cbiAgYXBwLnVzZShyZWFkaW5lc3NHdWFyZCgpKTtcblxuICAvLyBXYXJtLXVwIGVuZHBvaW50IOKAlCBwcmUtb3BlbnMgY29ubmVjdGlvbiBwb29scyBzbyB0aGUgZmlyc3QgcmVhbCByZXF1ZXN0XG4gIC8vIGRvZXNuJ3QgcGF5IGNvbGQtc3RhcnQgbGF0ZW5jeS4gQWx3YXlzIHBpbmdzIFBvc3RncmVzOyBzZXJ2aWNlcyB1c2luZ1xuICAvLyBNb25nbyAvIFJlZGlzIC8gU1FTIHBhc3MgYHdhcm11cEhvb2tzYCBzbyB0aG9zZSBhcmUgd2FybWVkIGluIHBhcmFsbGVsLlxuICBhcHAuZ2V0KCcvd2FybXVwJywgYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRDb25uZWN0aW9uKCkudGVzdENvbm5lY3Rpb24oKSxcbiAgICAgICAgLi4ud2FybXVwSG9va3MubWFwKChob29rKSA9PiBob29rKCkpLFxuICAgICAgXSk7XG4gICAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyB3YXJtZWQ6IHRydWUsIGhvb2tzOiB3YXJtdXBIb29rcy5sZW5ndGggfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdXYXJtdXAgZmFpbGVkJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgZW5kcG9pbnQg4oCUIGFsd2F5cyByZWdpc3RlcmVkIChuZXZlciB0aHJvdHRsZWQpXG4gIGFwcC5nZXQoJy9tZXRyaWNzJywgbWV0cmljc0hhbmRsZXIoKSk7XG5cbiAgLy8gT3BlbkFQSSBzcGVjIGFuZCBTd2FnZ2VyIFVJIChyZWdpc3RlcmVkIGJlZm9yZSByYXRlIGxpbWl0ZXIpXG4gIGlmIChlbmFibGVPcGVuQXBpKSB7XG4gICAgY29uc3Qgc3BlYyA9IGdlbmVyYXRlT3BlbkFwaVNwZWMob3BlbkFwaU9wdGlvbnMpO1xuICAgIGFwcC5nZXQoJy9kb2NzL29wZW5hcGkuanNvbicsIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICByZXMuanNvbihzcGVjKTtcbiAgICB9KTtcbiAgICBhcHAudXNlKCcvZG9jcycsIHN3YWdnZXJVaS5zZXJ2ZSwgc3dhZ2dlclVpLnNldHVwKHNwZWMsIHtcbiAgICAgIGN1c3RvbVNpdGVUaXRsZTogb3BlbkFwaU9wdGlvbnM/LnRpdGxlID8/ICdQaXBlbGluZSBCdWlsZGVyIEFQSSBEb2NzJyxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBSYXRlIGxpbWl0aW5nIOKAlCB1c2VzIFJlZGlzIHdoZW4gcmVkaXNVcmwgaXMgcHJvdmlkZWQgZm9yIHNoYXJlZCBzdGF0ZSBhY3Jvc3MgaW5zdGFuY2VzXG4gIGlmIChlbmFibGVSYXRlTGltaXQpIHtcbiAgICBjb25zdCByYXRlTGltaXRDb25maWcgPSBDb25maWcuZ2V0KCdyYXRlTGltaXQnKTtcblxuICAgIGNvbnN0IHJhdGVMaW1pdE9wdGlvbnM6IFBhcmFtZXRlcnM8dHlwZW9mIHJhdGVMaW1pdD5bMF0gPSB7XG4gICAgICBtYXg6IHJhdGVMaW1pdENvbmZpZy5tYXgsXG4gICAgICB3aW5kb3dNczogcmF0ZUxpbWl0Q29uZmlnLndpbmRvd01zLFxuICAgICAgc3RhbmRhcmRIZWFkZXJzOiB0cnVlLFxuICAgICAgbGVnYWN5SGVhZGVyczogZmFsc2UsXG4gICAgICAvLyBTa2lwIHJhdGUgbGltaXRpbmcgb25seSBmb3IgQ1JZUFRPR1JBUEhJQ0FMTFktVkVSSUZJRUQgaW50ZXJuYWwgc2VydmljZVxuICAgICAgLy8gY2FsbGVycy4gVGhlIGxpbWl0ZXIgcnVucyBiZWZvcmUgcmVxdWlyZUF1dGgsIHNvIHRoZSBwcmV2aW91c2x5LXRydXN0ZWRcbiAgICAgIC8vIHBsYWludGV4dCBgeC1pbnRlcm5hbC1zZXJ2aWNlYCBoZWFkZXIgd2FzIHNwb29mYWJsZSBieSBhbnkgZXh0ZXJuYWxcbiAgICAgIC8vIGNsaWVudCDihpIgdG90YWwgYnlwYXNzLiB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsIHZlcmlmaWVzIHRoZSBzaWduZWRcbiAgICAgIC8vIHNlcnZpY2UgSldUIGluc3RlYWQ7IGludGVyLXNlcnZpY2UgY2FsbGVycyBhbGwgc2VuZCBvbmVcbiAgICAgIC8vIChnZXRTZXJ2aWNlQXV0aEhlYWRlcikuXG4gICAgICBza2lwOiAocmVxOiBSZXF1ZXN0KSA9PiB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsKHJlcSksXG4gICAgICAvLyBLZXkgb24gY2xpZW50IElQIG9ubHkuIFRoZSBsaW1pdGVyIHJ1bnMgcHJlLWF1dGgsIHNvIGByZXEudXNlcmAgaXMgdW5zZXRcbiAgICAgIC8vIGFuZCBhbnkgb3JnIGlkIHdvdWxkIGNvbWUgZnJvbSB0aGUgY2FsbGVyLXN1cHBsaWVkIGB4LW9yZy1pZGAgaGVhZGVyIOKAlFxuICAgICAgLy8gc3Bvb2ZhYmxlLCBsZXR0aW5nIGFuIGF0dGFja2VyIHJvdGF0ZSB2YWx1ZXMgdG8gZXZhZGUgdGhlIGJ1Y2tldCBvclxuICAgICAgLy8gZmxvb2QgYSB2aWN0aW0gb3JnJ3MgYnVja2V0LiBpcEtleUdlbmVyYXRvciBub3JtYWxpemVzIElQdjYgdG8gYSAvNjRcbiAgICAgIC8vIHByZWZpeCAoYWxzbyByZXF1aXJlZCBieSBleHByZXNzLXJhdGUtbGltaXQgOC54J3MgdmFsaWRhdG9yKS5cbiAgICAgIGtleUdlbmVyYXRvcjogKHJlcTogUmVxdWVzdCkgPT4gaXBLZXlHZW5lcmF0b3IocmVxLmlwIHx8ICdhbm9uJywgNjQpLFxuICAgICAgaGFuZGxlcjogKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgc2VuZEVycm9yKHJlcywgNDI5LCAnVG9vIG1hbnkgcmVxdWVzdHMsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJywgRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERUQpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gVXNlIFJlZGlzIHN0b3JlIHdoZW4gYXZhaWxhYmxlIGZvciBzaGFyZWQgc3RhdGUgYWNyb3NzIGluc3RhbmNlc1xuICAgIGlmIChvcHRpb25zLnJlZGlzVXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBFU00gaGFzIG5vIGdsb2JhbCBgcmVxdWlyZWA7IHNhZmVDcmVhdGVSZXF1aXJlIGxvYWRzIHRoZSBvcHRpb25hbFxuICAgICAgICAvLyByZWRpcyBkZXBzIHN5bmNocm9ub3VzbHkgaGVyZSAob25seSB3aGVuIGEgcmVkaXNVcmwgaXMgY29uZmlndXJlZCkuXG4gICAgICAgIC8vIChDSlMtYnVuZGxlIHNhZmUg4oCUIHNlZSBhcGktY29yZSdzIHNhZmUtcmVxdWlyZS50cy4pXG4gICAgICAgIGNvbnN0IHJlcXVpcmUgPSBzYWZlQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICBjb25zdCB7IFJlZGlzU3RvcmUgfSA9IHJlcXVpcmUoJ3JhdGUtbGltaXQtcmVkaXMnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgY29uc3QgUmVkaXMgPSByZXF1aXJlKCdpb3JlZGlzJyk7XG4gICAgICAgIGNvbnN0IHJlZGlzQ2xpZW50ID0gbmV3IFJlZGlzKG9wdGlvbnMucmVkaXNVcmwpO1xuICAgICAgICAvLyBpb3JlZGlzIGVtaXRzICdlcnJvcicgb24gY29ubmVjdGlvbiBsb3NzOyB3aXRob3V0IGEgbGlzdGVuZXIgTm9kZVxuICAgICAgICAvLyB0cmVhdHMgaXQgYXMgYW4gdW5oYW5kbGVkICdlcnJvcicgZXZlbnQgYW5kIENSQVNIRVMgdGhlIHByb2Nlc3MuIExvZ1xuICAgICAgICAvLyBhbmQgbGV0IGlvcmVkaXMgYXV0by1yZWNvbm5lY3QgKHJhdGUgbGltaXRpbmcgZmFsbHMgYmFjayBwZXItc3RvcmUpLlxuICAgICAgICByZWRpc0NsaWVudC5vbignZXJyb3InLCAoZTogdW5rbm93bikgPT5cbiAgICAgICAgICBjcmVhdGVMb2dnZXIoJ3JhdGUtbGltaXQnKS53YXJuKCdSZWRpcyByYXRlLWxpbWl0IHN0b3JlIGVycm9yJywgeyBlcnJvcjogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH0pKTtcbiAgICAgICAgcmF0ZUxpbWl0T3B0aW9ucy5zdG9yZSA9IG5ldyBSZWRpc1N0b3JlKHtcbiAgICAgICAgICBzZW5kQ29tbWFuZDogKC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiByZWRpc0NsaWVudC5jYWxsKC4uLmFyZ3MpLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjcmVhdGVMb2dnZXIoJ3JhdGUtbGltaXQnKS53YXJuKCdSZWRpcyBzdG9yZSB1bmF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIGluLW1lbW9yeSByYXRlIGxpbWl0aW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXBwLnVzZShyYXRlTGltaXQocmF0ZUxpbWl0T3B0aW9ucykpO1xuICB9XG5cbiAgLy8gRXhwcmVzcyByZXF1ZXN0IHRpbWVvdXQg4oCUIHVzZXMgQ29yZUNvbnN0YW50cyB0byBzaGFyZSB0aGUgc2FtZSBkZWZhdWx0IGFzIExhbWJkYSBoYW5kbGVyc1xuICBjb25zdCB0aW1lb3V0TXMgPSBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NUztcbiAgYXBwLnVzZSgoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgcmVzLnNldFRpbWVvdXQodGltZW91dE1zLCAoKSA9PiB7XG4gICAgICBpZiAoIXJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdSZXF1ZXN0IHRpbWVvdXQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gIH0pO1xuXG4gIC8vIFJlcXVlc3QgZHVyYXRpb24gbG9nZ2luZ1xuICBjb25zdCBkdXJhdGlvbkxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVxdWVzdC1kdXJhdGlvbicpO1xuICBhcHAudXNlKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICByZXMub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgZHVyYXRpb25Mb2dnZXIuaW5mbyhgJHtyZXEubWV0aG9kfSAke3JlcS5vcmlnaW5hbFVybH0gJHtyZXMuc3RhdHVzQ29kZX0gJHtkdXJhdGlvbn1tc2AsIHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBwYXRoOiByZXEub3JpZ2luYWxVcmwsXG4gICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBkdXJhdGlvbk1zOiBkdXJhdGlvbixcbiAgICAgICAgcmVxdWVzdElkOiByZXEucmVxdWVzdElkLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgbWlkZGxld2FyZSDigJQgcmVjb3JkcyByZXF1ZXN0IGR1cmF0aW9uIGFuZCBjb3VudFxuICBhcHAudXNlKG1ldHJpY3NNaWRkbGV3YXJlKCkpO1xuXG4gIC8vIE5PVEU6IGlkZW1wb3RlbmN5IGlzIGludGVudGlvbmFsbHkgTk9UIG1vdW50ZWQgaGVyZS4gSXQgbmVlZHMgdGhlIFZFUklGSUVEXG4gIC8vIG9yZyBpZCB0byBuYW1lc3BhY2UgaXRzIHJlcGxheSBjYWNoZSwgYnV0IHRoaXMgcHJlLWF1dGggcG9zaXRpb24gcnVucyBiZWZvcmVcbiAgLy8gYHJlcXVpcmVBdXRoYC9gYXR0YWNoUmVxdWVzdENvbnRleHRgIHBvcHVsYXRlIGlkZW50aXR5LCBzbyBhIGdsb2JhbCBtb3VudFxuICAvLyBoZXJlIGlzIGEgcGVybWFuZW50IG5vLW9wIChvcmcgYWx3YXlzIHVuZGVmaW5lZCDihpIgc2tpcCkuIEl0IGlzIGluc3RlYWQgd2lyZWRcbiAgLy8gaW50byB0aGUgcG9zdC1hdXRoIHJvdXRlIGNoYWlucyDigJQgc2VlIGBjcmVhdGVQcm90ZWN0ZWRSb3V0ZWAgL1xuICAvLyBgY3JlYXRlQXV0aGVudGljYXRlZFdpdGhPcmdSb3V0ZWAgaW4gbWlkZGxld2FyZS1mYWN0b3J5LnRzLlxuXG4gIC8vIFNTRSBsb2dzIGVuZHBvaW50IOKAlCB0aWNrZXQtZ2F0ZWQgKFdhdmUgMmIpLlxuICAvLyBUaGUgc3RyZWFtIGNhcnJpZXMgcGVyLW9yZyBidWlsZCBsb2dzLCBzbyBpdCBtdXN0IG5vdCBiZSB3b3JsZC1yZWFkYWJsZS5cbiAgLy8gQ2xpZW50cyBmaXJzdCBQT1NUIC9sb2dzL3RpY2tldCAoSldULWF1dGhlbnRpY2F0ZWQpIHRvIG1pbnQgYSBzaG9ydC1saXZlZCxcbiAgLy8gc2luZ2xlLXVzZSB0aWNrZXQgYm91bmQgdG8gdGhlaXIgb3JnIEFORCB0byB0aGUgc3BlY2lmaWMgYHJlcXVlc3RJZGAgc3RyZWFtXG4gIC8vIHRoZXkgaW50ZW5kIHRvIG9wZW4sIHRoZW4gb3BlbiB0aGUgRXZlbnRTb3VyY2Ugd2l0aCA/dGlja2V0PTx0Pi4gVGhpcyBrZWVwc1xuICAvLyB0aGUgSldUIG91dCBvZiBxdWVyeSBzdHJpbmdzIC8gYWNjZXNzIGxvZ3Mgd2hpbGUgZW5mb3JjaW5nIG9yZyBvd25lcnNoaXAsXG4gIC8vIHBlci1zdWJqZWN0IGF1dGhvcml6YXRpb24sIGFuZCB0aGUgcGVyLW9yZyBjb25uZWN0aW9uIGNhcCBvbiB0aGUgc3RyZWFtLlxuICAvLyBNaXJyb3JzIHRoZSBtZXNzYWdlLXNlcnZpY2Ugbm90aWZpY2F0aW9ucyBTU0UgdGlja2V0IGV4Y2hhbmdlLlxuICBhcHAucG9zdCgnL2xvZ3MvdGlja2V0JywgcmVxdWlyZUF1dGgsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBvcmdJZCA9IHJlcS51c2VyPy5vcmdhbml6YXRpb25JZD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIW9yZ0lkKSB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MDAsICdUb2tlbiBtaXNzaW5nIG9yZ2FuaXphdGlvbicsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIGNhbGxlciBtdXN0IG5hbWUgdGhlIHN0cmVhbSBzdWJqZWN0IHVwIGZyb250IHNvIHRoZSB0aWNrZXQgaXMgYm91bmQgdG9cbiAgICAvLyBpdC4gV2l0aG91dCB0aGlzLCBhIHRpY2tldCBjb3VsZCBiZSByZXBsYXllZCBhZ2FpbnN0IEFOWSByZXF1ZXN0SWQgdGhlXG4gICAgLy8gb3JnIGNvdWxkIGd1ZXNzLCBsZXR0aW5nIGl0IGF0dGFjaCB0byBhbm90aGVyIG9yZydzIGxvZyBzdHJlYW0uIFN0cmljdGx5XG4gICAgLy8gZm9ybWF0LXZhbGlkYXRlZCBzbyBpdCBjYW4ndCBjYXJyeSBhbiBpbmplY3Rpb24gcGF5bG9hZCBpbnRvIHRoZSBzdWJqZWN0LlxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IChyZXEuYm9keSBhcyB7IHJlcXVlc3RJZD86IHVua25vd24gfSB8IHVuZGVmaW5lZCk/LnJlcXVlc3RJZDtcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RJZCAhPT0gJ3N0cmluZycgfHwgIVNTRV9SRVFVRVNUX0lEX1JFLnRlc3QocmVxdWVzdElkKSkge1xuICAgICAgc2VuZEVycm9yKHJlcywgNDAwLCAnTWlzc2luZyBvciBpbnZhbGlkIHJlcXVlc3RJZCcsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gc3NlTWFuYWdlci5jcmVhdGVUaWNrZXQob3JnSWQsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnb3JnLWxpbWl0Jykge1xuICAgICAgICBzZW5kRXJyb3IocmVzLCA0MjksICdUb28gbWFueSBsb2cgc3RyZWFtIHRpY2tldHMgaXNzdWVkJywgRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbmRFcnJvcihyZXMsIDUwMywgJ0xvZyBzdHJlYW1pbmcgc3Vic3lzdGVtIGF0IGNhcGFjaXR5JywgRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHsgdGlja2V0OiByZXN1bHQudGlja2V0IH0pO1xuICB9KTtcblxuICAvLyBUaGUgc3RyZWFtIGl0c2VsZiByZXNvbHZlcyArIGNvbnN1bWVzIHRoZSB0aWNrZXQgaW5zaWRlIG1pZGRsZXdhcmUoKSBhbmRcbiAgLy8gcmVqZWN0cyBhbnkgYW5vbnltb3VzIC8gaW52YWxpZCAvIGV4cGlyZWQgLyBhbHJlYWR5LXVzZWQgdGlja2V0IHdpdGggNDAxLlxuICBhcHAuZ2V0KCcvbG9ncy86cmVxdWVzdElkJywgc3NlTWFuYWdlci5taWRkbGV3YXJlKCkpO1xuXG4gIHJldHVybiB7IGFwcCwgc3NlTWFuYWdlciB9O1xufVxuIl19
@@ -28,19 +28,6 @@ export interface IdempotencyStore {
28
28
  /** Remove a key — releases a reservation after a non-cacheable (non-2xx) response. */
29
29
  delete(key: string): Promise<void>;
30
30
  }
31
- /**
32
- * Minimal interface a Redis client must satisfy. Compatible with
33
- * `ioredis` and `redis` v4+ — both expose `get`/`set` and accept `EX`
34
- * for expiry. Pass your real client in via `idempotencyMiddleware({
35
- * store: createRedisIdempotencyStore(client) })`.
36
- */
37
- export interface RedisLike {
38
- get(key: string): Promise<string | null>;
39
- set(key: string, value: string, ...args: unknown[]): Promise<unknown>;
40
- del?(key: string): Promise<unknown>;
41
- }
42
- /** Redis-backed idempotency store — share state across replicas. */
43
- export declare function createRedisIdempotencyStore(client: RedisLike, prefix?: string): IdempotencyStore;
44
31
  /** Default in-memory store. Single-replica only. Exported for testing. */
45
32
  export declare function createMemoryStore(): IdempotencyStore;
46
33
  export interface IdempotencyMiddlewareOptions {
@@ -55,8 +42,9 @@ export interface IdempotencyMiddlewareOptions {
55
42
  * - First call: processes normally, caches the response
56
43
  * - Subsequent calls with same key: returns cached response (prevents duplicate mutations)
57
44
  *
58
- * Pass `{ store: createRedisIdempotencyStore(redisClient) }` to dedupe
59
- * across replicas.
45
+ * Defaults to an in-memory store (single-replica). Pass a custom
46
+ * cross-replica `{ store }` implementing `IdempotencyStore` to dedupe across
47
+ * replicas.
60
48
  */
61
49
  export declare function idempotencyMiddleware(options?: IdempotencyMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => void;
62
50
  export {};
@@ -37,35 +37,6 @@ function bodyFingerprint(body) {
37
37
  return '-';
38
38
  }
39
39
  }
40
- /** Redis-backed idempotency store — share state across replicas. */
41
- export function createRedisIdempotencyStore(client, prefix = 'idemp:') {
42
- return {
43
- async get(key) {
44
- const raw = await client.get(prefix + key);
45
- if (!raw)
46
- return null;
47
- try {
48
- return JSON.parse(raw);
49
- }
50
- catch {
51
- return null;
52
- }
53
- },
54
- async set(key, entry, ttlSeconds) {
55
- await client.set(prefix + key, JSON.stringify(entry), 'EX', ttlSeconds);
56
- },
57
- async reserve(key, entry, ttlSeconds) {
58
- // SET key val EX ttl NX — atomic across replicas. Redis returns 'OK' when
59
- // it set the key and null when the key already existed.
60
- const res = await client.set(prefix + key, JSON.stringify(entry), 'EX', ttlSeconds, 'NX');
61
- return res !== null && res !== undefined;
62
- },
63
- async delete(key) {
64
- if (client.del)
65
- await client.del(prefix + key);
66
- },
67
- };
68
- }
69
40
  /** Default in-memory store. Single-replica only. Exported for testing. */
70
41
  export function createMemoryStore() {
71
42
  const map = new Map();
@@ -131,8 +102,9 @@ const memoryStore = createMemoryStore();
131
102
  * - First call: processes normally, caches the response
132
103
  * - Subsequent calls with same key: returns cached response (prevents duplicate mutations)
133
104
  *
134
- * Pass `{ store: createRedisIdempotencyStore(redisClient) }` to dedupe
135
- * across replicas.
105
+ * Defaults to an in-memory store (single-replica). Pass a custom
106
+ * cross-replica `{ store }` implementing `IdempotencyStore` to dedupe across
107
+ * replicas.
136
108
  */
137
109
  export function idempotencyMiddleware(options = {}) {
138
110
  const store = options.store ?? memoryStore;
@@ -276,4 +248,4 @@ export function idempotencyMiddleware(options = {}) {
276
248
  });
277
249
  };
278
250
  }
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3ktbWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaWRlbXBvdGVuY3ktbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hFLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBYztJQUNyQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDeEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNsRixNQUFNLEdBQUcsR0FBRyxLQUFnQyxDQUFDO0lBQzdDLE9BQU8sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FB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dHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgc2VuZEVycm9yLCBFcnJvckNvZGUgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdpZGVtcG90ZW5jeScpO1xuXG4vKipcbiAqIENhbm9uaWNhbCAoa2V5LXNvcnRlZCkgSlNPTiBzZXJpYWxpemF0aW9uIHNvIHRoZSBTQU1FIGxvZ2ljYWwgcGF5bG9hZCBoYXNoZXNcbiAqIGlkZW50aWNhbGx5IHJlZ2FyZGxlc3Mgb2YgcHJvcGVydHkgaW5zZXJ0aW9uIG9yZGVyIOKAlCBhIHBsYWluIGBKU09OLnN0cmluZ2lmeWBcbiAqIHdvdWxkIGxldCBge2EsYn1gIGFuZCBge2IsYX1gIHByb2R1Y2UgZGlmZmVyZW50IGZpbmdlcnByaW50cyBmb3Igb25lIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0cmluZ2lmeSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpID8/ICdudWxsJztcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ1snICsgdmFsdWUubWFwKHN0YWJsZVN0cmluZ2lmeSkuam9pbignLCcpICsgJ10nO1xuICBjb25zdCBvYmogPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuICd7JyArIE9iamVjdC5rZXlzKG9iaikuc29ydCgpLm1hcCgoaykgPT4gSlNPTi5zdHJpbmdpZnkoaykgKyAnOicgKyBzdGFibGVTdHJpbmdpZnkob2JqW2tdKSkuam9pbignLCcpICsgJ30nO1xufVxuXG4vKipcbiAqIFNob3J0LCBzdGFibGUgZmluZ2VycHJpbnQgb2YgYSByZXF1ZXN0IGJvZHkuIEZvbGRzIHRoZSBwYXlsb2FkIGludG8gdGhlXG4gKiBpZGVtcG90ZW5jeSBrZXkgc28gcmVwbGF5aW5nIHRoZSBTQU1FIGtleSB3aXRoIGEgRElGRkVSRU5UIGJvZHkgaXMgdHJlYXRlZCBhc1xuICogYSBkaXN0aW5jdCBvcGVyYXRpb24gKGZyZXNoIGV4ZWN1dGlvbikgcmF0aGVyIHRoYW4gcmVwbGF5aW5nIHRoZSBvbGQgcmVzcG9uc2UuXG4gKiBFbXB0eS9hYnNlbnQgYm9kaWVzIGNvbGxhcHNlIHRvICctJyBzbyBib2R5LWxlc3MgbXV0YXRpb25zIHN0YXkgdW5hZmZlY3RlZC5cbiAqL1xuZnVuY3Rpb24gYm9keUZpbmdlcnByaW50KGJvZHk6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoYm9keSA9PT0gdW5kZWZpbmVkIHx8IGJvZHkgPT09IG51bGwpIHJldHVybiAnLSc7XG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoYm9keSBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCkgcmV0dXJuICctJztcbiAgdHJ5IHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHN0YWJsZVN0cmluZ2lmeShib2R5KSkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCAxNik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vbi1zZXJpYWxpemFibGUgYm9keSAoZS5nLiBhIHN0cmVhbS9jaXJjdWxhciByZWYpOiBza2lwIGZpbmdlcnByaW50aW5nXG4gICAgLy8gcmF0aGVyIHRoYW4gZmFpbCB0aGUgcmVxdWVzdCDigJQga2V5IHN0YXlzIHNjb3BlZCBieSBtZXRob2Qrcm91dGUrb3JnLlxuICAgIHJldHVybiAnLSc7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENhY2hlZEVudHJ5IHtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBib2R5OiB1bmtub3duO1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgLyoqIFJlc2VydmF0aW9uIHBsYWNlaG9sZGVyOiB0aGUgcmVxdWVzdCBpcyBpbi1mbGlnaHQsIG5vIHJlYWwgcmVzcG9uc2UgeWV0LlxuICAgKiAgQSBkdXBsaWNhdGUgdGhhdCBzZWVzIGEgcGVuZGluZyBlbnRyeSBpcyByZWplY3RlZCB3aXRoIDQwOSwgbm90IHJlcGxheWVkLiAqL1xuICBwZW5kaW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQbHVnZ2FibGUgYmFja2VuZCBmb3IgaWRlbXBvdGVuY3kta2V5IHJlcGxheSBjYWNoZS4gVGhlIGRlZmF1bHQgaW4tbWVtb3J5XG4gKiBpbXBsZW1lbnRhdGlvbiB3b3JrcyBmaW5lIHNpbmdsZS1yZXBsaWNhOyBhIFJlZGlzLWJhY2tlZCBpbXBsZW1lbnRhdGlvblxuICogaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3QgZGVkdXBsaWNhdGlvbiBhY3Jvc3MgaG9yaXpvbnRhbGx5LXNjYWxlZCByZXBsaWNhc1xuICogKG90aGVyd2lzZSB0d28gcmVwbGljYXMgYmVoaW5kIGEgbG9hZC1iYWxhbmNlciBjYWNoZSBpbmRlcGVuZGVudGx5IGFuZCBhXG4gKiByZXRyeSBoaXR0aW5nIGEgZGlmZmVyZW50IHBvZCB3b24ndCByZXBsYXkpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW1wb3RlbmN5U3RvcmUge1xuICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPENhY2hlZEVudHJ5IHwgbnVsbD47XG4gIHNldChrZXk6IHN0cmluZywgZW50cnk6IENhY2hlZEVudHJ5LCB0dGxTZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQXRvbWljYWxseSBjbGFpbSBga2V5YCBJRkYgaXQgaXMgY3VycmVudGx5IGFic2VudC4gUmV0dXJucyBgdHJ1ZWAgd2hlbiBUSElTXG4gICAqIGNhbGxlciBzZXQgdGhlIGVudHJ5ICh3b24gdGhlIHJhY2UpLCBgZmFsc2VgIHdoZW4gYW4gZW50cnkgYWxyZWFkeSBleGlzdHMuXG4gICAqIFRoaXMgaXMgd2hhdCBzZXJpYWxpemVzIGNvbmN1cnJlbnQgZmlyc3QtdGltZSByZXF1ZXN0cyB0aGF0IHNoYXJlIGFuXG4gICAqIElkZW1wb3RlbmN5LUtleSDigJQgYSBwbGFpbiBnZXQtdGhlbi1zZXQgbGVhdmVzIGEgd2luZG93IHdoZXJlIHR3byByZXF1ZXN0c1xuICAgKiBib3RoIHNlZSBcIm5vdCBjYWNoZWRcIiBhbmQgYm90aCBleGVjdXRlIHRoZSBtdXRhdGlvbi5cbiAgICovXG4gIHJlc2VydmUoa2V5OiBzdHJpbmcsIGVudHJ5OiBDYWNoZWRFbnRyeSwgdHRsU2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPjtcbiAgLyoqIFJlbW92ZSBhIGtleSDigJQgcmVsZWFzZXMgYSByZXNlcnZhdGlvbiBhZnRlciBhIG5vbi1jYWNoZWFibGUgKG5vbi0yeHgpIHJlc3BvbnNlLiAqL1xuICBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIE1pbmltYWwgaW50ZXJmYWNlIGEgUmVkaXMgY2xpZW50IG11c3Qgc2F0aXNmeS4gQ29tcGF0aWJsZSB3aXRoXG4gKiBgaW9yZWRpc2AgYW5kIGByZWRpc2AgdjQrIOKAlCBib3RoIGV4cG9zZSBgZ2V0YC9gc2V0YCBhbmQgYWNjZXB0IGBFWGBcbiAqIGZvciBleHBpcnkuIFBhc3MgeW91ciByZWFsIGNsaWVudCBpbiB2aWEgYGlkZW1wb3RlbmN5TWlkZGxld2FyZSh7XG4gKiBzdG9yZTogY3JlYXRlUmVkaXNJZGVtcG90ZW5jeVN0b3JlKGNsaWVudCkgfSlgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlzTGlrZSB7XG4gIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gIC8vIFZhcmlhZGljIHRvIGZpdCBpb3JlZGlzIChgc2V0KGssIHYsICdFWCcsIHR0bCwgJ05YJylgKSDigJQgYHJlc2VydmVgIG5lZWRzIHRoZVxuICAvLyBgTlhgIGZsYWcgZm9yIGFuIGF0b21pYyBzZXQtaWYtYWJzZW50LCB3aGljaCB0aGUgZml4ZWQgNC1hcmcgZm9ybSBjYW4ndCBleHByZXNzLlxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGRlbD8oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+O1xufVxuXG4vKiogUmVkaXMtYmFja2VkIGlkZW1wb3RlbmN5IHN0b3JlIOKAlCBzaGFyZSBzdGF0ZSBhY3Jvc3MgcmVwbGljYXMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkaXNJZGVtcG90ZW5jeVN0b3JlKGNsaWVudDogUmVkaXNMaWtlLCBwcmVmaXggPSAnaWRlbXA6Jyk6IElkZW1wb3RlbmN5U3RvcmUge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXkpIHtcbiAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IGNsaWVudC5nZXQocHJlZml4ICsga2V5KTtcbiAgICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgQ2FjaGVkRW50cnk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzZXQoa2V5LCBlbnRyeSwgdHRsU2Vjb25kcykge1xuICAgICAgYXdhaXQgY2xpZW50LnNldChwcmVmaXggKyBrZXksIEpTT04uc3RyaW5naWZ5KGVudHJ5KSwgJ0VYJywgdHRsU2Vjb25kcyk7XG4gICAgfSxcbiAgICBhc3luYyByZXNlcnZlKGtleSwgZW50cnksIHR0bFNlY29uZHMpIHtcbiAgICAgIC8vIFNFVCBrZXkgdmFsIEVYIHR0bCBOWCDigJQgYXRvbWljIGFjcm9zcyByZXBsaWNhcy4gUmVkaXMgcmV0dXJucyAnT0snIHdoZW5cbiAgICAgIC8vIGl0IHNldCB0aGUga2V5IGFuZCBudWxsIHdoZW4gdGhlIGtleSBhbHJlYWR5IGV4aXN0ZWQuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuc2V0KHByZWZpeCArIGtleSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpLCAnRVgnLCB0dGxTZWNvbmRzLCAnTlgnKTtcbiAgICAgIHJldHVybiByZXMgIT09IG51bGwgJiYgcmVzICE9PSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBhc3luYyBkZWxldGUoa2V5KSB7XG4gICAgICBpZiAoY2xpZW50LmRlbCkgYXdhaXQgY2xpZW50LmRlbChwcmVmaXggKyBrZXkpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBEZWZhdWx0IGluLW1lbW9yeSBzdG9yZS4gU2luZ2xlLXJlcGxpY2Egb25seS4gRXhwb3J0ZWQgZm9yIHRlc3RpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVtb3J5U3RvcmUoKTogSWRlbXBvdGVuY3lTdG9yZSB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRFbnRyeT4oKTtcbiAgY29uc3QgY2xlYW51cFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgbWFwKSB7XG4gICAgICBpZiAobm93ID4gdi5leHBpcmVzQXQpIG1hcC5kZWxldGUoayk7XG4gICAgfVxuICB9LCBDb3JlQ29uc3RhbnRzLklERU1QT1RFTkNZX0NMRUFOVVBfSU5URVJWQUxfTVMpO1xuICBjbGVhbnVwVGltZXIudW5yZWYoKTtcblxuICAvKiogUmV0dXJuIHRoZSBsaXZlIChub24tZXhwaXJlZCkgZW50cnksIGV2aWN0aW5nIGl0IGxhemlseSBpZiBleHBpcmVkLiAqL1xuICBjb25zdCBsaXZlID0gKGtleTogc3RyaW5nKTogQ2FjaGVkRW50cnkgfCBudWxsID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IG1hcC5nZXQoa2V5KTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4gbnVsbDtcbiAgICBpZiAoRGF0ZS5ub3coKSA+IGVudHJ5LmV4cGlyZXNBdCkge1xuICAgICAgbWFwLmRlbGV0ZShrZXkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0IGNhcGFjaXR5LCBldmljdCB0aGUgT0xERVNUIGVudHJ5IChNYXAgcHJlc2VydmVzIGluc2VydGlvbiBvcmRlcikgcmF0aGVyXG4gICAqIHRoYW4gc2lsZW50bHkgZHJvcHBpbmcgdGhlIE5FVyBrZXkg4oCUIG90aGVyd2lzZSwgb25jZSBmdWxsLCB0aGUgc3RvcmUgc3RvcHNcbiAgICogZGVkdXBsaWNhdGluZyBmcmVzaCByZXF1ZXN0cyB1bnRpbCB0aGUgVFRMIHN3ZWVwIHJ1bnMuIFN0YXlzIGJvdW5kZWQ7IGZhdm9yc1xuICAgKiByZWNlbnQga2V5cyAobW9zdCBsaWtlbHkgdG8gYmUgcmV0cmllZCkuXG4gICAqL1xuICBjb25zdCBldmljdElmRnVsbCA9IChrZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmICghbWFwLmhhcyhrZXkpICYmIG1hcC5zaXplID49IENvcmVDb25zdGFudHMuSURFTVBPVEVOQ1lfTUFYX1NUT1JFX1NJWkUpIHtcbiAgICAgIGNvbnN0IG9sZGVzdCA9IG1hcC5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgaWYgKG9sZGVzdCAhPT0gdW5kZWZpbmVkKSBtYXAuZGVsZXRlKG9sZGVzdCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXkpIHtcbiAgICAgIHJldHVybiBsaXZlKGtleSk7XG4gICAgfSxcbiAgICBhc3luYyBzZXQoa2V5LCBlbnRyeSkge1xuICAgICAgZXZpY3RJZkZ1bGwoa2V5KTtcbiAgICAgIG1hcC5zZXQoa2V5LCBlbnRyeSk7XG4gICAgfSxcbiAgICBhc3luYyByZXNlcnZlKGtleSwgZW50cnkpIHtcbiAgICAgIC8vIEF0b21pYyBpbiBhIHNpbmdsZS10aHJlYWRlZCBydW50aW1lOiBubyBhd2FpdCBiZXR3ZWVuIHRoZSBsaXZlbmVzcyBjaGVja1xuICAgICAgLy8gYW5kIHRoZSBzZXQsIHNvIHR3byBjb25jdXJyZW50IGNhbGxlcnMgY2FuJ3QgYm90aCBvYnNlcnZlIFwiYWJzZW50XCIuXG4gICAgICBpZiAobGl2ZShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBldmljdElmRnVsbChrZXkpO1xuICAgICAgbWFwLnNldChrZXksIGVudHJ5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgYXN5bmMgZGVsZXRlKGtleSkge1xuICAgICAgbWFwLmRlbGV0ZShrZXkpO1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IG1lbW9yeVN0b3JlID0gY3JlYXRlTWVtb3J5U3RvcmUoKTtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVtcG90ZW5jeU1pZGRsZXdhcmVPcHRpb25zIHtcbiAgLyoqIEN1c3RvbSBzdG9yZSBiYWNrZW5kIChkZWZhdWx0OiBpbi1tZW1vcnkpLiBQYXNzIGEgUmVkaXMtYmFja2VkIHN0b3JlXG4gICAqICBmb3IgbXVsdGktcmVwbGljYSBkZXBsb3ltZW50cy4gKi9cbiAgc3RvcmU/OiBJZGVtcG90ZW5jeVN0b3JlO1xufVxuXG4vKipcbiAqIE1pZGRsZXdhcmUgdGhhdCBzdXBwb3J0cyBpZGVtcG90ZW5jeSBrZXlzIGZvciBQT1NUL1BVVC9ERUxFVEUgbXV0YXRpb25zLlxuICpcbiAqIFdoZW4gYSByZXF1ZXN0IGluY2x1ZGVzIHRoZSBgSWRlbXBvdGVuY3ktS2V5YCBoZWFkZXI6XG4gKiAtIEZpcnN0IGNhbGw6IHByb2Nlc3NlcyBub3JtYWxseSwgY2FjaGVzIHRoZSByZXNwb25zZVxuICogLSBTdWJzZXF1ZW50IGNhbGxzIHdpdGggc2FtZSBrZXk6IHJldHVybnMgY2FjaGVkIHJlc3BvbnNlIChwcmV2ZW50cyBkdXBsaWNhdGUgbXV0YXRpb25zKVxuICpcbiAqIFBhc3MgYHsgc3RvcmU6IGNyZWF0ZVJlZGlzSWRlbXBvdGVuY3lTdG9yZShyZWRpc0NsaWVudCkgfWAgdG8gZGVkdXBlXG4gKiBhY3Jvc3MgcmVwbGljYXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVtcG90ZW5jeU1pZGRsZXdhcmUob3B0aW9uczogSWRlbXBvdGVuY3lNaWRkbGV3YXJlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHN0b3JlID0gb3B0aW9ucy5zdG9yZSA/PyBtZW1vcnlTdG9yZTtcbiAgY29uc3QgdHRsTXMgPSBDb3JlQ29uc3RhbnRzLklERU1QT1RFTkNZX1RUTF9NUztcbiAgY29uc3QgdHRsU2VjID0gTWF0aC5mbG9vcih0dGxNcyAvIDEwMDApO1xuXG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBrZXkgPSByZXEuaGVhZGVyc1snaWRlbXBvdGVuY3kta2V5J10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICgha2V5KSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gT25seSBhcHBseSB0byBtdXRhdGlvbiBtZXRob2RzXG4gICAgaWYgKCFbJ1BPU1QnLCAnUFVUJywgJ0RFTEVURSddLmluY2x1ZGVzKHJlcS5tZXRob2QpKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gTmFtZXNwYWNlIGJ5IG9yZ0lkIHRvIHByZXZlbnQgY3Jvc3Mtb3JnIGNhY2hlIGNvbGxpc2lvbnMuIFByZWZlciB0aGVcbiAgICAvLyBWRVJJRklFRCBhdXRoIG9yZyAoYHJlcS51c2VyYCwgcG9wdWxhdGVkIGJ5IHJlcXVpcmVBdXRoIGFmdGVyIHNpZ25hdHVyZVxuICAgIC8vIHZlcmlmaWNhdGlvbikgb3ZlciBgcmVxLmNvbnRleHQuaWRlbnRpdHlgLCB3aGljaCBzb21lIHNlcnZpY2VzIHBvcHVsYXRlXG4gICAgLy8gcHJlLWF1dGggZnJvbSBhbiBVTlZFUklGSUVEIHRva2VuIHBlZWsg4oCUIG5hbWVzcGFjaW5nIGEgbXV0YXRpb24ncyByZXBsYXlcbiAgICAvLyBjYWNoZSBvbiBhbiB1bnZlcmlmaWVkLCBjYWxsZXItaW5mbHVlbmNlZCBvcmcgaWQgd291bGQgYmUgdW5zYWZlLlxuICAgIGNvbnN0IG9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkIHx8IHJlcS5jb250ZXh0Py5pZGVudGl0eT8ub3JnSWQ7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuIG5leHQoKTsgLy8gc2tpcCBpZGVtcG90ZW5jeSBmb3IgdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzXG5cbiAgICAvLyBOYW1lc3BhY2UgdGhlIHN0b3JlZCBrZXkgYnkgKG1ldGhvZCwgcm91dGUsIG9yZywgYm9keSkgc28gYW4gSWRlbXBvdGVuY3ktS2V5XG4gICAgLy8gaXMgc2NvcGVkIHRvIE9ORSBzcGVjaWZpYyBlbmRwb2ludCtwYXlsb2FkLiBSZXVzaW5nIGEgc2luZ2xlIGtleSBhY3Jvc3MgdHdvXG4gICAgLy8gcm91dGVzIChlLmcuIFBPU1QgL3BpcGVsaW5lcyB0aGVuIFBPU1QgL3BsdWdpbnMpIHByZXZpb3VzbHkgcmVwbGF5ZWQgdGhlXG4gICAgLy8gZmlyc3QgZW5kcG9pbnQncyAyeHggZm9yIHRoZSBzZWNvbmQg4oCUIHRoZSBzdG9yZSBpcyBhIG1vZHVsZS1sZXZlbCBzaW5nbGV0b25cbiAgICAvLyBzaGFyZWQgYnkgZXZlcnkgcm91dGUuIEZvbGRpbmcgaW4gbWV0aG9kICsgcm91dGUgcGF0aCArIGEgYm9keSBmaW5nZXJwcmludFxuICAgIC8vIG9ubHkgbWFrZXMga2V5cyBNT1JFIHNwZWNpZmljLCBzbyB0aGVyZSBpcyBubyBjcm9zcy1jb250YW1pbmF0aW9uIHJpc2suXG4gICAgY29uc3Qgcm91dGVQYXRoID0gKHJlcS5iYXNlVXJsID8/ICcnKSArIChyZXEucm91dGU/LnBhdGggPz8gcmVxLnBhdGggPz8gJycpO1xuICAgIGNvbnN0IGZ1bGxLZXkgPSBgJHtyZXEubWV0aG9kfToke3JvdXRlUGF0aH06JHtvcmdJZH06JHtib2R5RmluZ2VycHJpbnQocmVxLmJvZHkpfToke2tleX1gO1xuXG4gICAgLyoqIFJlamVjdCBhIGR1cGxpY2F0ZSB3aG9zZSBvcmlnaW5hbCBpcyBzdGlsbCBpbi1mbGlnaHQuICovXG4gICAgY29uc3Qgc2VuZEluUHJvZ3Jlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsICcxJyk7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MDksICdBIHJlcXVlc3Qgd2l0aCB0aGlzIElkZW1wb3RlbmN5LUtleSBpcyBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZCcsIEVycm9yQ29kZS5DT05GTElDVCk7XG4gICAgfTtcblxuICAgIHN0b3JlLmdldChmdWxsS2V5KS50aGVuKGFzeW5jIChjYWNoZWQpID0+IHtcbiAgICAgIGlmIChjYWNoZWQgJiYgIWNhY2hlZC5wZW5kaW5nKSB7XG4gICAgICAgIC8vIENvbXBsZXRlZCByZXNwb25zZSBvbiByZWNvcmQg4oaSIHJlcGxheSBpdC5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdJZGVtcG90ZW50IHJlcXVlc3QgcmVwbGF5ZWQnLCB7IGtleTogZnVsbEtleSB9KTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignWC1JZGVtcG90ZW50LVJlcGxheWVkJywgJ3RydWUnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhjYWNoZWQuc3RhdHVzQ29kZSkuanNvbihjYWNoZWQuYm9keSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLnBlbmRpbmcpIHtcbiAgICAgICAgLy8gVGhlIG9yaWdpbmFsIGlzIHN0aWxsIHJ1bm5pbmcg4oCUIGRvbid0IHJ1biB0aGUgbXV0YXRpb24gYSBzZWNvbmQgdGltZS5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdJZGVtcG90ZW50IHJlcXVlc3QgcmVqZWN0ZWQgKGluIHByb2dyZXNzKScsIHsga2V5OiBmdWxsS2V5IH0pO1xuICAgICAgICByZXR1cm4gc2VuZEluUHJvZ3Jlc3MoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXRvbWljYWxseSByZXNlcnZlIHRoZSBrZXkuIExvc2luZyB0aGlzIHJhY2UgbWVhbnMgYSBjb25jdXJyZW50IHJlcXVlc3RcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUga2V5IGdvdCB0aGVyZSBmaXJzdCBhbmQgaXMgaW4tZmxpZ2h0IOKGkiA0MDkuXG4gICAgICBjb25zdCB3b24gPSBhd2FpdCBzdG9yZS5yZXNlcnZlKFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB7IHN0YXR1c0NvZGU6IDAsIGJvZHk6IG51bGwsIHBlbmRpbmc6IHRydWUsIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIHR0bE1zIH0sXG4gICAgICAgIHR0bFNlYyxcbiAgICAgICk7XG4gICAgICBpZiAoIXdvbikge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0lkZW1wb3RlbnQgcmVxdWVzdCByZWplY3RlZCAobG9zdCByZXNlcnZlIHJhY2UpJywgeyBrZXk6IGZ1bGxLZXkgfSk7XG4gICAgICAgIHJldHVybiBzZW5kSW5Qcm9ncmVzcygpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBvd24gdGhlIHJlc2VydmF0aW9uLiBJdCBNVVNUIGJlIHJlc29sdmVkIGV4YWN0bHkgb25jZSDigJQgZWl0aGVyIHRoZVxuICAgICAgLy8gcmVhbCAyeHggcmVzcG9uc2UgaXMgY2FjaGVkIGZvciByZXBsYXksIG9yIHRoZSByZXNlcnZhdGlvbiBpcyByZWxlYXNlZCBzb1xuICAgICAgLy8gYSByZXRyeSBjYW4gcHJvY2VlZC4gYHNldHRsZWRgIGd1YXJkcyBhZ2FpbnN0IGEgZG91YmxlLXJlc29sdmUuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGNhcHR1cmVkQm9keTogdW5rbm93bjtcbiAgICAgIGxldCBib2R5Q2FwdHVyZWQgPSBmYWxzZTtcblxuICAgICAgLyoqIFJlbWVtYmVyIHRoZSByZXNwb25zZSBib2R5IGZvciByZXBsYXkgKGZpcnN0IGNhcHR1cmUgd2lucykuICovXG4gICAgICBjb25zdCBjYXB0dXJlQm9keSA9IChib2R5OiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghYm9keUNhcHR1cmVkKSB7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICBib2R5Q2FwdHVyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZWxlYXNlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgc3RvcmUuZGVsZXRlKGZ1bGxLZXkpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybignSWRlbXBvdGVuY3kgcmVzZXJ2YXRpb24gcmVsZWFzZSBmYWlsZWQnLCB7IGtleTogZnVsbEtleSwgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjYWNoZVN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBzdG9yZS5zZXQoZnVsbEtleSwge1xuICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgIGJvZHk6IGJvZHlDYXB0dXJlZCA/IGNhcHR1cmVkQm9keSA6IG51bGwsXG4gICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgdHRsTXMsXG4gICAgICAgIH0sIHR0bFNlYykuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdJZGVtcG90ZW5jeSBzdG9yZS5zZXQgZmFpbGVkJywgeyBrZXk6IGZ1bGxLZXksIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgLyoqIFJlc29sdmUgdGhlIHJlc2VydmF0aW9uIGZyb20gdGhlIEFDVFVBTCBmaW5hbCBzdGF0dXM6IGNhY2hlIDJ4eCwgZWxzZSByZWxlYXNlLiAqL1xuICAgICAgY29uc3Qgc2V0dGxlRnJvbVN0YXR1cyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMCkgY2FjaGVTdWNjZXNzKCk7XG4gICAgICAgIGVsc2UgcmVsZWFzZSgpO1xuICAgICAgfTtcblxuICAgICAgLy8gRmFzdCBwYXRoOiByZXMuanNvbiBpcyB0aGUgY29tbW9uIGNvbXBsZXRpb24uIENhcHR1cmUgdGhlIGJvZHkgYW5kIHNldHRsZVxuICAgICAgLy8gaW1tZWRpYXRlbHkgb2ZmIHRoZSBzdGF0dXMgc2V0IGJ5IHJlcy5zdGF0dXMoLi4uKS5qc29uKC4uLikuXG4gICAgICBjb25zdCBvcmlnaW5hbEpzb24gPSByZXMuanNvbi5iaW5kKHJlcyk7XG4gICAgICByZXMuanNvbiA9IChib2R5OiB1bmtub3duKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ1gtSWRlbXBvdGVudC1SZXBsYXllZCcsICdmYWxzZScpO1xuICAgICAgICBjYXB0dXJlQm9keShib2R5KTtcbiAgICAgICAgc2V0dGxlRnJvbVN0YXR1cygpO1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxKc29uKGJvZHkpO1xuICAgICAgfTtcblxuICAgICAgLy8gQm9keS1jYXB0dXJlIGJhY2tzdG9wcyBmb3IgY29tcGxldGlvbnMgdGhhdCBieXBhc3MgcmVzLmpzb25cbiAgICAgIC8vIChyZXMuc2VuZCAvIHJlcy5lbmQgLyByZXMuc2VuZEZpbGUg4oaSIHJlcy5lbmQpLiBUaGVzZSBvbmx5IFJFQ09SRCB0aGUgYm9keTtcbiAgICAgIC8vIHRoZSBhY3R1YWwgc2V0dGxlIGhhcHBlbnMgb24gYGZpbmlzaGAgZnJvbSB0aGUgcmVhbCBzdGF0dXMgY29kZS4gRmlyc3RcbiAgICAgIC8vIGNhcHR1cmUgd2lucywgc28gcmVzLmpzb24ncyBib2R5IGlzIG5ldmVyIGNsb2JiZXJlZCBieSBpdHMgaW50ZXJuYWxcbiAgICAgIC8vIHJlcy5zZW5kL3Jlcy5lbmQgY2FsbHMuXG4gICAgICBjb25zdCBwYXRjaGVkID0gcmVzIGFzIHVua25vd24gYXMge1xuICAgICAgICBzZW5kPzogKGJvZHk/OiB1bmtub3duKSA9PiB1bmtub3duO1xuICAgICAgICBlbmQ/OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICAgICAgICBvbj86IChldmVudDogc3RyaW5nLCBjYjogKCkgPT4gdm9pZCkgPT4gdW5rbm93bjtcbiAgICAgIH07XG4gICAgICBpZiAodHlwZW9mIHBhdGNoZWQuc2VuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFNlbmQgPSBwYXRjaGVkLnNlbmQuYmluZChyZXMpO1xuICAgICAgICBwYXRjaGVkLnNlbmQgPSAoYm9keT86IHVua25vd24pID0+IHtcbiAgICAgICAgICBjYXB0dXJlQm9keShib2R5KTtcbiAgICAgICAgICByZXR1cm4gb3JpZ2luYWxTZW5kKGJvZHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXRjaGVkLmVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVuZCA9IHBhdGNoZWQuZW5kLmJpbmQocmVzKTtcbiAgICAgICAgcGF0Y2hlZC5lbmQgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBhcmdzWzBdO1xuICAgICAgICAgIGlmIChjaHVuayAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBjaHVuayAhPT0gJ2Z1bmN0aW9uJykgY2FwdHVyZUJvZHkoY2h1bmspO1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbEVuZCguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQmFja3N0b3AgZm9yIEFOWSBjb21wbGV0aW9uIHBhdGgg4oCUIGluY2x1ZGluZyBhIDJ4eCB0aGF0IGZpbmlzaGVkIHZpYVxuICAgICAgLy8gcmVzLnNlbmQvcmVzLmVuZC9yZXMuc2VuZEZpbGUvMjA0IGFuZCBuZXZlciBoaXQgdGhlIHBhdGNoZWQgcmVzLmpzb24uXG4gICAgICAvLyBEZWNpZGluZyBvbiB0aGUgcmVhbCBmaW5hbCBzdGF0dXMgaGVyZSBtZWFucyBhIHN1Y2Nlc3NmdWwgb3AgaXMgY2FjaGVkXG4gICAgICAvLyAob3IgYSBmYWlsZWQgb25lIHJlbGVhc2VkKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyB0aGUgcmVzZXJ2YXRpb24gYW5kXG4gICAgICAvLyA0MDktaW5nIGV2ZXJ5IHJldHJ5IGZvciB0aGUgZnVsbCBUVEwuIEd1YXJkZWQg4oCUIHRlc3QgZG91YmxlcyBtYXkgbm90IGJlXG4gICAgICAvLyBFdmVudEVtaXR0ZXJzOyByZXMuanNvbidzIGZhc3QgcGF0aCBhbHJlYWR5IHNldHRsZWQgdGhlIGNvbW1vbiBjYXNlLlxuICAgICAgaWYgKHR5cGVvZiBwYXRjaGVkLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBhdGNoZWQub24oJ2ZpbmlzaCcsIHNldHRsZUZyb21TdGF0dXMpO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gSWYgdGhlIHN0b3JlIGJhY2tlbmQgaXMgZG93biwgZmFpbCBvcGVuIOKAlCBwcm9jZXNzIHRoZSByZXF1ZXN0IG5vcm1hbGx5LlxuICAgICAgbG9nZ2VyLndhcm4oJ0lkZW1wb3RlbmN5IHN0b3JlLmdldCBmYWlsZWQ7IHByb2NlZWRpbmcgd2l0aG91dCBkZWR1cCcsIHsga2V5OiBmdWxsS2V5LCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9O1xufVxuIl19
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3ktbWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaWRlbXBvdGVuY3ktbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hFLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBYztJQUNyQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDeEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNsRixNQUFNLEdBQUcsR0FBRyxLQUFnQyxDQUFDO0lBQzdDLE9BQU8sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FB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LEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFO29CQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVO3dCQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDM0UsT0FBTyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUVELHVFQUF1RTtZQUN2RSx3RUFBd0U7WUFDeEUseUVBQXlFO1lBQ3pFLHNFQUFzRTtZQUN0RSwwRUFBMEU7WUFDMUUsdUVBQXVFO1lBQ3ZFLElBQUksT0FBTyxPQUFPLENBQUMsRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxJQUFJLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2YsMEVBQTBFO1lBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0RBQXdELEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pKLElBQUksRUFBRSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBzZW5kRXJyb3IsIEVycm9yQ29kZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvcmVDb25zdGFudHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2lkZW1wb3RlbmN5Jyk7XG5cbi8qKlxuICogQ2Fub25pY2FsIChrZXktc29ydGVkKSBKU09OIHNlcmlhbGl6YXRpb24gc28gdGhlIFNBTUUgbG9naWNhbCBwYXlsb2FkIGhhc2hlc1xuICogaWRlbnRpY2FsbHkgcmVnYXJkbGVzcyBvZiBwcm9wZXJ0eSBpbnNlcnRpb24gb3JkZXIg4oCUIGEgcGxhaW4gYEpTT04uc3RyaW5naWZ5YFxuICogd291bGQgbGV0IGB7YSxifWAgYW5kIGB7YixhfWAgcHJvZHVjZSBkaWZmZXJlbnQgZmluZ2VycHJpbnRzIGZvciBvbmUgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlU3RyaW5naWZ5KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPz8gJ251bGwnO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAnWycgKyB2YWx1ZS5tYXAoc3RhYmxlU3RyaW5naWZ5KS5qb2luKCcsJykgKyAnXSc7XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4gJ3snICsgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkubWFwKChrKSA9PiBKU09OLnN0cmluZ2lmeShrKSArICc6JyArIHN0YWJsZVN0cmluZ2lmeShvYmpba10pKS5qb2luKCcsJykgKyAnfSc7XG59XG5cbi8qKlxuICogU2hvcnQsIHN0YWJsZSBmaW5nZXJwcmludCBvZiBhIHJlcXVlc3QgYm9keS4gRm9sZHMgdGhlIHBheWxvYWQgaW50byB0aGVcbiAqIGlkZW1wb3RlbmN5IGtleSBzbyByZXBsYXlpbmcgdGhlIFNBTUUga2V5IHdpdGggYSBESUZGRVJFTlQgYm9keSBpcyB0cmVhdGVkIGFzXG4gKiBhIGRpc3RpbmN0IG9wZXJhdGlvbiAoZnJlc2ggZXhlY3V0aW9uKSByYXRoZXIgdGhhbiByZXBsYXlpbmcgdGhlIG9sZCByZXNwb25zZS5cbiAqIEVtcHR5L2Fic2VudCBib2RpZXMgY29sbGFwc2UgdG8gJy0nIHNvIGJvZHktbGVzcyBtdXRhdGlvbnMgc3RheSB1bmFmZmVjdGVkLlxuICovXG5mdW5jdGlvbiBib2R5RmluZ2VycHJpbnQoYm9keTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmIChib2R5ID09PSB1bmRlZmluZWQgfHwgYm9keSA9PT0gbnVsbCkgcmV0dXJuICctJztcbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhib2R5IGFzIG9iamVjdCkubGVuZ3RoID09PSAwKSByZXR1cm4gJy0nO1xuICB0cnkge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoc3RhYmxlU3RyaW5naWZ5KGJvZHkpKS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDE2KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gTm9uLXNlcmlhbGl6YWJsZSBib2R5IChlLmcuIGEgc3RyZWFtL2NpcmN1bGFyIHJlZik6IHNraXAgZmluZ2VycHJpbnRpbmdcbiAgICAvLyByYXRoZXIgdGhhbiBmYWlsIHRoZSByZXF1ZXN0IOKAlCBrZXkgc3RheXMgc2NvcGVkIGJ5IG1ldGhvZCtyb3V0ZStvcmcuXG4gICAgcmV0dXJuICctJztcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2FjaGVkRW50cnkge1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGJvZHk6IHVua25vd247XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICAvKiogUmVzZXJ2YXRpb24gcGxhY2Vob2xkZXI6IHRoZSByZXF1ZXN0IGlzIGluLWZsaWdodCwgbm8gcmVhbCByZXNwb25zZSB5ZXQuXG4gICAqICBBIGR1cGxpY2F0ZSB0aGF0IHNlZXMgYSBwZW5kaW5nIGVudHJ5IGlzIHJlamVjdGVkIHdpdGggNDA5LCBub3QgcmVwbGF5ZWQuICovXG4gIHBlbmRpbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBsdWdnYWJsZSBiYWNrZW5kIGZvciBpZGVtcG90ZW5jeS1rZXkgcmVwbGF5IGNhY2hlLiBUaGUgZGVmYXVsdCBpbi1tZW1vcnlcbiAqIGltcGxlbWVudGF0aW9uIHdvcmtzIGZpbmUgc2luZ2xlLXJlcGxpY2E7IGEgUmVkaXMtYmFja2VkIGltcGxlbWVudGF0aW9uXG4gKiBpcyByZXF1aXJlZCBmb3IgY29ycmVjdCBkZWR1cGxpY2F0aW9uIGFjcm9zcyBob3Jpem9udGFsbHktc2NhbGVkIHJlcGxpY2FzXG4gKiAob3RoZXJ3aXNlIHR3byByZXBsaWNhcyBiZWhpbmQgYSBsb2FkLWJhbGFuY2VyIGNhY2hlIGluZGVwZW5kZW50bHkgYW5kIGFcbiAqIHJldHJ5IGhpdHRpbmcgYSBkaWZmZXJlbnQgcG9kIHdvbid0IHJlcGxheSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbXBvdGVuY3lTdG9yZSB7XG4gIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVkRW50cnkgfCBudWxsPjtcbiAgc2V0KGtleTogc3RyaW5nLCBlbnRyeTogQ2FjaGVkRW50cnksIHR0bFNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBBdG9taWNhbGx5IGNsYWltIGBrZXlgIElGRiBpdCBpcyBjdXJyZW50bHkgYWJzZW50LiBSZXR1cm5zIGB0cnVlYCB3aGVuIFRISVNcbiAgICogY2FsbGVyIHNldCB0aGUgZW50cnkgKHdvbiB0aGUgcmFjZSksIGBmYWxzZWAgd2hlbiBhbiBlbnRyeSBhbHJlYWR5IGV4aXN0cy5cbiAgICogVGhpcyBpcyB3aGF0IHNlcmlhbGl6ZXMgY29uY3VycmVudCBmaXJzdC10aW1lIHJlcXVlc3RzIHRoYXQgc2hhcmUgYW5cbiAgICogSWRlbXBvdGVuY3ktS2V5IOKAlCBhIHBsYWluIGdldC10aGVuLXNldCBsZWF2ZXMgYSB3aW5kb3cgd2hlcmUgdHdvIHJlcXVlc3RzXG4gICAqIGJvdGggc2VlIFwibm90IGNhY2hlZFwiIGFuZCBib3RoIGV4ZWN1dGUgdGhlIG11dGF0aW9uLlxuICAgKi9cbiAgcmVzZXJ2ZShrZXk6IHN0cmluZywgZW50cnk6IENhY2hlZEVudHJ5LCB0dGxTZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKiogUmVtb3ZlIGEga2V5IOKAlCByZWxlYXNlcyBhIHJlc2VydmF0aW9uIGFmdGVyIGEgbm9uLWNhY2hlYWJsZSAobm9uLTJ4eCkgcmVzcG9uc2UuICovXG4gIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBEZWZhdWx0IGluLW1lbW9yeSBzdG9yZS4gU2luZ2xlLXJlcGxpY2Egb25seS4gRXhwb3J0ZWQgZm9yIHRlc3RpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVtb3J5U3RvcmUoKTogSWRlbXBvdGVuY3lTdG9yZSB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRFbnRyeT4oKTtcbiAgY29uc3QgY2xlYW51cFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgbWFwKSB7XG4gICAgICBpZiAobm93ID4gdi5leHBpcmVzQXQpIG1hcC5kZWxldGUoayk7XG4gICAgfVxuICB9LCBDb3JlQ29uc3RhbnRzLklERU1QT1RFTkNZX0NMRUFOVVBfSU5URVJWQUxfTVMpO1xuICBjbGVhbnVwVGltZXIudW5yZWYoKTtcblxuICAvKiogUmV0dXJuIHRoZSBsaXZlIChub24tZXhwaXJlZCkgZW50cnksIGV2aWN0aW5nIGl0IGxhemlseSBpZiBleHBpcmVkLiAqL1xuICBjb25zdCBsaXZlID0gKGtleTogc3RyaW5nKTogQ2FjaGVkRW50cnkgfCBudWxsID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IG1hcC5nZXQoa2V5KTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4gbnVsbDtcbiAgICBpZiAoRGF0ZS5ub3coKSA+IGVudHJ5LmV4cGlyZXNBdCkge1xuICAgICAgbWFwLmRlbGV0ZShrZXkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0IGNhcGFjaXR5LCBldmljdCB0aGUgT0xERVNUIGVudHJ5IChNYXAgcHJlc2VydmVzIGluc2VydGlvbiBvcmRlcikgcmF0aGVyXG4gICAqIHRoYW4gc2lsZW50bHkgZHJvcHBpbmcgdGhlIE5FVyBrZXkg4oCUIG90aGVyd2lzZSwgb25jZSBmdWxsLCB0aGUgc3RvcmUgc3RvcHNcbiAgICogZGVkdXBsaWNhdGluZyBmcmVzaCByZXF1ZXN0cyB1bnRpbCB0aGUgVFRMIHN3ZWVwIHJ1bnMuIFN0YXlzIGJvdW5kZWQ7IGZhdm9yc1xuICAgKiByZWNlbnQga2V5cyAobW9zdCBsaWtlbHkgdG8gYmUgcmV0cmllZCkuXG4gICAqL1xuICBjb25zdCBldmljdElmRnVsbCA9IChrZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmICghbWFwLmhhcyhrZXkpICYmIG1hcC5zaXplID49IENvcmVDb25zdGFudHMuSURFTVBPVEVOQ1lfTUFYX1NUT1JFX1NJWkUpIHtcbiAgICAgIGNvbnN0IG9sZGVzdCA9IG1hcC5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgaWYgKG9sZGVzdCAhPT0gdW5kZWZpbmVkKSBtYXAuZGVsZXRlKG9sZGVzdCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXkpIHtcbiAgICAgIHJldHVybiBsaXZlKGtleSk7XG4gICAgfSxcbiAgICBhc3luYyBzZXQoa2V5LCBlbnRyeSkge1xuICAgICAgZXZpY3RJZkZ1bGwoa2V5KTtcbiAgICAgIG1hcC5zZXQoa2V5LCBlbnRyeSk7XG4gICAgfSxcbiAgICBhc3luYyByZXNlcnZlKGtleSwgZW50cnkpIHtcbiAgICAgIC8vIEF0b21pYyBpbiBhIHNpbmdsZS10aHJlYWRlZCBydW50aW1lOiBubyBhd2FpdCBiZXR3ZWVuIHRoZSBsaXZlbmVzcyBjaGVja1xuICAgICAgLy8gYW5kIHRoZSBzZXQsIHNvIHR3byBjb25jdXJyZW50IGNhbGxlcnMgY2FuJ3QgYm90aCBvYnNlcnZlIFwiYWJzZW50XCIuXG4gICAgICBpZiAobGl2ZShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBldmljdElmRnVsbChrZXkpO1xuICAgICAgbWFwLnNldChrZXksIGVudHJ5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgYXN5bmMgZGVsZXRlKGtleSkge1xuICAgICAgbWFwLmRlbGV0ZShrZXkpO1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IG1lbW9yeVN0b3JlID0gY3JlYXRlTWVtb3J5U3RvcmUoKTtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVtcG90ZW5jeU1pZGRsZXdhcmVPcHRpb25zIHtcbiAgLyoqIEN1c3RvbSBzdG9yZSBiYWNrZW5kIChkZWZhdWx0OiBpbi1tZW1vcnkpLiBQYXNzIGEgUmVkaXMtYmFja2VkIHN0b3JlXG4gICAqICBmb3IgbXVsdGktcmVwbGljYSBkZXBsb3ltZW50cy4gKi9cbiAgc3RvcmU/OiBJZGVtcG90ZW5jeVN0b3JlO1xufVxuXG4vKipcbiAqIE1pZGRsZXdhcmUgdGhhdCBzdXBwb3J0cyBpZGVtcG90ZW5jeSBrZXlzIGZvciBQT1NUL1BVVC9ERUxFVEUgbXV0YXRpb25zLlxuICpcbiAqIFdoZW4gYSByZXF1ZXN0IGluY2x1ZGVzIHRoZSBgSWRlbXBvdGVuY3ktS2V5YCBoZWFkZXI6XG4gKiAtIEZpcnN0IGNhbGw6IHByb2Nlc3NlcyBub3JtYWxseSwgY2FjaGVzIHRoZSByZXNwb25zZVxuICogLSBTdWJzZXF1ZW50IGNhbGxzIHdpdGggc2FtZSBrZXk6IHJldHVybnMgY2FjaGVkIHJlc3BvbnNlIChwcmV2ZW50cyBkdXBsaWNhdGUgbXV0YXRpb25zKVxuICpcbiAqIERlZmF1bHRzIHRvIGFuIGluLW1lbW9yeSBzdG9yZSAoc2luZ2xlLXJlcGxpY2EpLiBQYXNzIGEgY3VzdG9tXG4gKiBjcm9zcy1yZXBsaWNhIGB7IHN0b3JlIH1gIGltcGxlbWVudGluZyBgSWRlbXBvdGVuY3lTdG9yZWAgdG8gZGVkdXBlIGFjcm9zc1xuICogcmVwbGljYXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVtcG90ZW5jeU1pZGRsZXdhcmUob3B0aW9uczogSWRlbXBvdGVuY3lNaWRkbGV3YXJlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHN0b3JlID0gb3B0aW9ucy5zdG9yZSA/PyBtZW1vcnlTdG9yZTtcbiAgY29uc3QgdHRsTXMgPSBDb3JlQ29uc3RhbnRzLklERU1QT1RFTkNZX1RUTF9NUztcbiAgY29uc3QgdHRsU2VjID0gTWF0aC5mbG9vcih0dGxNcyAvIDEwMDApO1xuXG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBrZXkgPSByZXEuaGVhZGVyc1snaWRlbXBvdGVuY3kta2V5J10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICgha2V5KSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gT25seSBhcHBseSB0byBtdXRhdGlvbiBtZXRob2RzXG4gICAgaWYgKCFbJ1BPU1QnLCAnUFVUJywgJ0RFTEVURSddLmluY2x1ZGVzKHJlcS5tZXRob2QpKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgLy8gTmFtZXNwYWNlIGJ5IG9yZ0lkIHRvIHByZXZlbnQgY3Jvc3Mtb3JnIGNhY2hlIGNvbGxpc2lvbnMuIFByZWZlciB0aGVcbiAgICAvLyBWRVJJRklFRCBhdXRoIG9yZyAoYHJlcS51c2VyYCwgcG9wdWxhdGVkIGJ5IHJlcXVpcmVBdXRoIGFmdGVyIHNpZ25hdHVyZVxuICAgIC8vIHZlcmlmaWNhdGlvbikgb3ZlciBgcmVxLmNvbnRleHQuaWRlbnRpdHlgLCB3aGljaCBzb21lIHNlcnZpY2VzIHBvcHVsYXRlXG4gICAgLy8gcHJlLWF1dGggZnJvbSBhbiBVTlZFUklGSUVEIHRva2VuIHBlZWsg4oCUIG5hbWVzcGFjaW5nIGEgbXV0YXRpb24ncyByZXBsYXlcbiAgICAvLyBjYWNoZSBvbiBhbiB1bnZlcmlmaWVkLCBjYWxsZXItaW5mbHVlbmNlZCBvcmcgaWQgd291bGQgYmUgdW5zYWZlLlxuICAgIGNvbnN0IG9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkIHx8IHJlcS5jb250ZXh0Py5pZGVudGl0eT8ub3JnSWQ7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuIG5leHQoKTsgLy8gc2tpcCBpZGVtcG90ZW5jeSBmb3IgdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzXG5cbiAgICAvLyBOYW1lc3BhY2UgdGhlIHN0b3JlZCBrZXkgYnkgKG1ldGhvZCwgcm91dGUsIG9yZywgYm9keSkgc28gYW4gSWRlbXBvdGVuY3ktS2V5XG4gICAgLy8gaXMgc2NvcGVkIHRvIE9ORSBzcGVjaWZpYyBlbmRwb2ludCtwYXlsb2FkLiBSZXVzaW5nIGEgc2luZ2xlIGtleSBhY3Jvc3MgdHdvXG4gICAgLy8gcm91dGVzIChlLmcuIFBPU1QgL3BpcGVsaW5lcyB0aGVuIFBPU1QgL3BsdWdpbnMpIHByZXZpb3VzbHkgcmVwbGF5ZWQgdGhlXG4gICAgLy8gZmlyc3QgZW5kcG9pbnQncyAyeHggZm9yIHRoZSBzZWNvbmQg4oCUIHRoZSBzdG9yZSBpcyBhIG1vZHVsZS1sZXZlbCBzaW5nbGV0b25cbiAgICAvLyBzaGFyZWQgYnkgZXZlcnkgcm91dGUuIEZvbGRpbmcgaW4gbWV0aG9kICsgcm91dGUgcGF0aCArIGEgYm9keSBmaW5nZXJwcmludFxuICAgIC8vIG9ubHkgbWFrZXMga2V5cyBNT1JFIHNwZWNpZmljLCBzbyB0aGVyZSBpcyBubyBjcm9zcy1jb250YW1pbmF0aW9uIHJpc2suXG4gICAgY29uc3Qgcm91dGVQYXRoID0gKHJlcS5iYXNlVXJsID8/ICcnKSArIChyZXEucm91dGU/LnBhdGggPz8gcmVxLnBhdGggPz8gJycpO1xuICAgIGNvbnN0IGZ1bGxLZXkgPSBgJHtyZXEubWV0aG9kfToke3JvdXRlUGF0aH06JHtvcmdJZH06JHtib2R5RmluZ2VycHJpbnQocmVxLmJvZHkpfToke2tleX1gO1xuXG4gICAgLyoqIFJlamVjdCBhIGR1cGxpY2F0ZSB3aG9zZSBvcmlnaW5hbCBpcyBzdGlsbCBpbi1mbGlnaHQuICovXG4gICAgY29uc3Qgc2VuZEluUHJvZ3Jlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsICcxJyk7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MDksICdBIHJlcXVlc3Qgd2l0aCB0aGlzIElkZW1wb3RlbmN5LUtleSBpcyBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZCcsIEVycm9yQ29kZS5DT05GTElDVCk7XG4gICAgfTtcblxuICAgIHN0b3JlLmdldChmdWxsS2V5KS50aGVuKGFzeW5jIChjYWNoZWQpID0+IHtcbiAgICAgIGlmIChjYWNoZWQgJiYgIWNhY2hlZC5wZW5kaW5nKSB7XG4gICAgICAgIC8vIENvbXBsZXRlZCByZXNwb25zZSBvbiByZWNvcmQg4oaSIHJlcGxheSBpdC5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdJZGVtcG90ZW50IHJlcXVlc3QgcmVwbGF5ZWQnLCB7IGtleTogZnVsbEtleSB9KTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignWC1JZGVtcG90ZW50LVJlcGxheWVkJywgJ3RydWUnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhjYWNoZWQuc3RhdHVzQ29kZSkuanNvbihjYWNoZWQuYm9keSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLnBlbmRpbmcpIHtcbiAgICAgICAgLy8gVGhlIG9yaWdpbmFsIGlzIHN0aWxsIHJ1bm5pbmcg4oCUIGRvbid0IHJ1biB0aGUgbXV0YXRpb24gYSBzZWNvbmQgdGltZS5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdJZGVtcG90ZW50IHJlcXVlc3QgcmVqZWN0ZWQgKGluIHByb2dyZXNzKScsIHsga2V5OiBmdWxsS2V5IH0pO1xuICAgICAgICByZXR1cm4gc2VuZEluUHJvZ3Jlc3MoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXRvbWljYWxseSByZXNlcnZlIHRoZSBrZXkuIExvc2luZyB0aGlzIHJhY2UgbWVhbnMgYSBjb25jdXJyZW50IHJlcXVlc3RcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUga2V5IGdvdCB0aGVyZSBmaXJzdCBhbmQgaXMgaW4tZmxpZ2h0IOKGkiA0MDkuXG4gICAgICBjb25zdCB3b24gPSBhd2FpdCBzdG9yZS5yZXNlcnZlKFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB7IHN0YXR1c0NvZGU6IDAsIGJvZHk6IG51bGwsIHBlbmRpbmc6IHRydWUsIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIHR0bE1zIH0sXG4gICAgICAgIHR0bFNlYyxcbiAgICAgICk7XG4gICAgICBpZiAoIXdvbikge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0lkZW1wb3RlbnQgcmVxdWVzdCByZWplY3RlZCAobG9zdCByZXNlcnZlIHJhY2UpJywgeyBrZXk6IGZ1bGxLZXkgfSk7XG4gICAgICAgIHJldHVybiBzZW5kSW5Qcm9ncmVzcygpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBvd24gdGhlIHJlc2VydmF0aW9uLiBJdCBNVVNUIGJlIHJlc29sdmVkIGV4YWN0bHkgb25jZSDigJQgZWl0aGVyIHRoZVxuICAgICAgLy8gcmVhbCAyeHggcmVzcG9uc2UgaXMgY2FjaGVkIGZvciByZXBsYXksIG9yIHRoZSByZXNlcnZhdGlvbiBpcyByZWxlYXNlZCBzb1xuICAgICAgLy8gYSByZXRyeSBjYW4gcHJvY2VlZC4gYHNldHRsZWRgIGd1YXJkcyBhZ2FpbnN0IGEgZG91YmxlLXJlc29sdmUuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGNhcHR1cmVkQm9keTogdW5rbm93bjtcbiAgICAgIGxldCBib2R5Q2FwdHVyZWQgPSBmYWxzZTtcblxuICAgICAgLyoqIFJlbWVtYmVyIHRoZSByZXNwb25zZSBib2R5IGZvciByZXBsYXkgKGZpcnN0IGNhcHR1cmUgd2lucykuICovXG4gICAgICBjb25zdCBjYXB0dXJlQm9keSA9IChib2R5OiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghYm9keUNhcHR1cmVkKSB7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICBib2R5Q2FwdHVyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZWxlYXNlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgc3RvcmUuZGVsZXRlKGZ1bGxLZXkpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybignSWRlbXBvdGVuY3kgcmVzZXJ2YXRpb24gcmVsZWFzZSBmYWlsZWQnLCB7IGtleTogZnVsbEtleSwgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjYWNoZVN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBzdG9yZS5zZXQoZnVsbEtleSwge1xuICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgIGJvZHk6IGJvZHlDYXB0dXJlZCA/IGNhcHR1cmVkQm9keSA6IG51bGwsXG4gICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgdHRsTXMsXG4gICAgICAgIH0sIHR0bFNlYykuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdJZGVtcG90ZW5jeSBzdG9yZS5zZXQgZmFpbGVkJywgeyBrZXk6IGZ1bGxLZXksIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgLyoqIFJlc29sdmUgdGhlIHJlc2VydmF0aW9uIGZyb20gdGhlIEFDVFVBTCBmaW5hbCBzdGF0dXM6IGNhY2hlIDJ4eCwgZWxzZSByZWxlYXNlLiAqL1xuICAgICAgY29uc3Qgc2V0dGxlRnJvbVN0YXR1cyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMCkgY2FjaGVTdWNjZXNzKCk7XG4gICAgICAgIGVsc2UgcmVsZWFzZSgpO1xuICAgICAgfTtcblxuICAgICAgLy8gRmFzdCBwYXRoOiByZXMuanNvbiBpcyB0aGUgY29tbW9uIGNvbXBsZXRpb24uIENhcHR1cmUgdGhlIGJvZHkgYW5kIHNldHRsZVxuICAgICAgLy8gaW1tZWRpYXRlbHkgb2ZmIHRoZSBzdGF0dXMgc2V0IGJ5IHJlcy5zdGF0dXMoLi4uKS5qc29uKC4uLikuXG4gICAgICBjb25zdCBvcmlnaW5hbEpzb24gPSByZXMuanNvbi5iaW5kKHJlcyk7XG4gICAgICByZXMuanNvbiA9IChib2R5OiB1bmtub3duKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ1gtSWRlbXBvdGVudC1SZXBsYXllZCcsICdmYWxzZScpO1xuICAgICAgICBjYXB0dXJlQm9keShib2R5KTtcbiAgICAgICAgc2V0dGxlRnJvbVN0YXR1cygpO1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxKc29uKGJvZHkpO1xuICAgICAgfTtcblxuICAgICAgLy8gQm9keS1jYXB0dXJlIGJhY2tzdG9wcyBmb3IgY29tcGxldGlvbnMgdGhhdCBieXBhc3MgcmVzLmpzb25cbiAgICAgIC8vIChyZXMuc2VuZCAvIHJlcy5lbmQgLyByZXMuc2VuZEZpbGUg4oaSIHJlcy5lbmQpLiBUaGVzZSBvbmx5IFJFQ09SRCB0aGUgYm9keTtcbiAgICAgIC8vIHRoZSBhY3R1YWwgc2V0dGxlIGhhcHBlbnMgb24gYGZpbmlzaGAgZnJvbSB0aGUgcmVhbCBzdGF0dXMgY29kZS4gRmlyc3RcbiAgICAgIC8vIGNhcHR1cmUgd2lucywgc28gcmVzLmpzb24ncyBib2R5IGlzIG5ldmVyIGNsb2JiZXJlZCBieSBpdHMgaW50ZXJuYWxcbiAgICAgIC8vIHJlcy5zZW5kL3Jlcy5lbmQgY2FsbHMuXG4gICAgICBjb25zdCBwYXRjaGVkID0gcmVzIGFzIHVua25vd24gYXMge1xuICAgICAgICBzZW5kPzogKGJvZHk/OiB1bmtub3duKSA9PiB1bmtub3duO1xuICAgICAgICBlbmQ/OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICAgICAgICBvbj86IChldmVudDogc3RyaW5nLCBjYjogKCkgPT4gdm9pZCkgPT4gdW5rbm93bjtcbiAgICAgIH07XG4gICAgICBpZiAodHlwZW9mIHBhdGNoZWQuc2VuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFNlbmQgPSBwYXRjaGVkLnNlbmQuYmluZChyZXMpO1xuICAgICAgICBwYXRjaGVkLnNlbmQgPSAoYm9keT86IHVua25vd24pID0+IHtcbiAgICAgICAgICBjYXB0dXJlQm9keShib2R5KTtcbiAgICAgICAgICByZXR1cm4gb3JpZ2luYWxTZW5kKGJvZHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXRjaGVkLmVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVuZCA9IHBhdGNoZWQuZW5kLmJpbmQocmVzKTtcbiAgICAgICAgcGF0Y2hlZC5lbmQgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBhcmdzWzBdO1xuICAgICAgICAgIGlmIChjaHVuayAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBjaHVuayAhPT0gJ2Z1bmN0aW9uJykgY2FwdHVyZUJvZHkoY2h1bmspO1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbEVuZCguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQmFja3N0b3AgZm9yIEFOWSBjb21wbGV0aW9uIHBhdGgg4oCUIGluY2x1ZGluZyBhIDJ4eCB0aGF0IGZpbmlzaGVkIHZpYVxuICAgICAgLy8gcmVzLnNlbmQvcmVzLmVuZC9yZXMuc2VuZEZpbGUvMjA0IGFuZCBuZXZlciBoaXQgdGhlIHBhdGNoZWQgcmVzLmpzb24uXG4gICAgICAvLyBEZWNpZGluZyBvbiB0aGUgcmVhbCBmaW5hbCBzdGF0dXMgaGVyZSBtZWFucyBhIHN1Y2Nlc3NmdWwgb3AgaXMgY2FjaGVkXG4gICAgICAvLyAob3IgYSBmYWlsZWQgb25lIHJlbGVhc2VkKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyB0aGUgcmVzZXJ2YXRpb24gYW5kXG4gICAgICAvLyA0MDktaW5nIGV2ZXJ5IHJldHJ5IGZvciB0aGUgZnVsbCBUVEwuIEd1YXJkZWQg4oCUIHRlc3QgZG91YmxlcyBtYXkgbm90IGJlXG4gICAgICAvLyBFdmVudEVtaXR0ZXJzOyByZXMuanNvbidzIGZhc3QgcGF0aCBhbHJlYWR5IHNldHRsZWQgdGhlIGNvbW1vbiBjYXNlLlxuICAgICAgaWYgKHR5cGVvZiBwYXRjaGVkLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBhdGNoZWQub24oJ2ZpbmlzaCcsIHNldHRsZUZyb21TdGF0dXMpO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gSWYgdGhlIHN0b3JlIGJhY2tlbmQgaXMgZG93biwgZmFpbCBvcGVuIOKAlCBwcm9jZXNzIHRoZSByZXF1ZXN0IG5vcm1hbGx5LlxuICAgICAgbG9nZ2VyLndhcm4oJ0lkZW1wb3RlbmN5IHN0b3JlLmdldCBmYWlsZWQ7IHByb2NlZWRpbmcgd2l0aG91dCBkZWR1cCcsIHsga2V5OiBmdWxsS2V5LCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9O1xufVxuIl19
@@ -218,4 +218,4 @@ function humanizeName(metricName) {
218
218
  .replace(/_/g, ' ')
219
219
  .replace(/^./, (c) => c.toUpperCase());
220
220
  }
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpGLE1BQU0sWUFBWSxHQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUE2QixDQUFDLFdBQVcsQ0FBQztBQUU3RixpQ0FBaUM7QUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUVoQyxxQ0FBcUM7QUFDckMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFFckQsa0ZBQWtGO0FBQ2xGLHFCQUFxQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUVwQyxnREFBZ0Q7QUFDaEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsK0JBQStCO0lBQ3JDLElBQUksRUFBRSxzQ0FBc0M7SUFDNUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQVU7SUFDdkQsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsMkJBQTJCO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUM7SUFDcEMsSUFB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QyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQztZQUNoQixJQUFJO1lBQ0osSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDeEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQy9CLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztTQUN0QixDQUFDLENBQUM7UUFDSCxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLFVBQWtCO0lBQ3RDLDREQUE0RDtJQUM1RCxPQUFPLFVBQVU7U0FDZCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztTQUNsQixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBSZWdpc3RyeSwgY29sbGVjdERlZmF1bHRNZXRyaWNzLCBDb3VudGVyLCBIaXN0b2dyYW0sIEdhdWdlIH0gZnJvbSAncHJvbS1jbGllbnQnO1xuXG5jb25zdCBTRVJWSUNFX05BTUUgPSAoQ29uZmlnLmdldEFueSgnb2JzZXJ2YWJpbGl0eScpIGFzIHsgc2VydmljZU5hbWU6IHN0cmluZyB9KS5zZXJ2aWNlTmFtZTtcblxuLyoqIFNoYXJlZCBQcm9tZXRoZXVzIHJlZ2lzdHJ5ICovXG5jb25zdCByZWdpc3RlciA9IG5ldyBSZWdpc3RyeSgpO1xuXG4vLyBTZXQgZGVmYXVsdCBsYWJlbHMgZm9yIGFsbCBtZXRyaWNzXG5yZWdpc3Rlci5zZXREZWZhdWx0TGFiZWxzKHsgc2VydmljZTogU0VSVklDRV9OQU1FIH0pO1xuXG4vLyBDb2xsZWN0IGRlZmF1bHQgTm9kZS5qcyBwcm9jZXNzIG1ldHJpY3MgKENQVSwgbWVtb3J5LCBoZWFwLCBldmVudCBsb29wIGxhZywgR0MpXG5jb2xsZWN0RGVmYXVsdE1ldHJpY3MoeyByZWdpc3RlciB9KTtcblxuLyoqIEhUVFAgcmVxdWVzdCBkdXJhdGlvbiBoaXN0b2dyYW0gKHNlY29uZHMpICovXG5jb25zdCBodHRwUmVxdWVzdER1cmF0aW9uID0gbmV3IEhpc3RvZ3JhbSh7XG4gIG5hbWU6ICdodHRwX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kcycsXG4gIGhlbHA6ICdEdXJhdGlvbiBvZiBIVFRQIHJlcXVlc3RzIGluIHNlY29uZHMnLFxuICBsYWJlbE5hbWVzOiBbJ21ldGhvZCcsICdyb3V0ZScsICdzdGF0dXNfY29kZSddIGFzIGNvbnN0LFxuICBidWNrZXRzOiBbMC4wMDUsIDAuMDEsIDAuMDI1LCAwLjA1LCAwLjEsIDAuMjUsIDAuNSwgMSwgMi41LCA1LCAxMF0sXG4gIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbn0pO1xuXG4vKiogSFRUUCByZXF1ZXN0IGNvdW50ZXIgKi9cbmNvbnN0IGh0dHBSZXF1ZXN0c1RvdGFsID0gbmV3IENvdW50ZXIoe1xuICBuYW1lOiAnaHR0cF9yZXF1ZXN0c190b3RhbCcsXG4gIGhlbHA6ICdUb3RhbCBudW1iZXIgb2YgSFRUUCByZXF1ZXN0cycsXG4gIGxhYmVsTmFtZXM6IFsnbWV0aG9kJywgJ3JvdXRlJywgJ3N0YXR1c19jb2RlJ10gYXMgY29uc3QsXG4gIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbn0pO1xuXG4vKipcbiAqIFBlci1vcmcgSFRUUCByZXF1ZXN0IGNvdW50ZXIg4oCUIFNBTVBMRUQgdG8ga2VlcCBQcm9tZXRoZXVzIGNhcmRpbmFsaXR5XG4gKiB1bmRlciBjb250cm9sLiBDYXJkaW5hbGl0eSBvZiBgb3JnX2lkICogbWV0aG9kICogcm91dGUgKiBzdGF0dXNfY29kZWBcbiAqIGdyb3dzIG11bHRpcGxpY2F0aXZlbHk7IHdpdGggTiBvcmdzICogNTAgcm91dGVzICogNSBzdGF0dXNfY29kZXMgdGhhdCdzXG4gKiAyNTDDl04gc2VyaWVzLiBXZSBzYW1wbGUgMS1pbi1OIHJlcXVlc3RzIChjb25maWd1cmFibGUgdmlhXG4gKiBgSFRUUF9NRVRSSUNTX09SR19TQU1QTEVfUkFURWAsIGRlZmF1bHQgMS4wID0gZXZlcnkgcmVxdWVzdCkuXG4gKlxuICogT3BlcmF0b3JzIGFuc3dlciBcIndoYXQncyBvcmcgWCdzIHA5OT9cIiB2aWEgc2VwYXJhdGUgcGVyLW9yZyBoaXN0b2dyYW1zXG4gKiBzY3JhcGVkIGF0IGEgbG93ZXIgcmF0ZSwgT1IgdmlhIExva2kgTG9nUUwgcXVlcmllcyBhZ2FpbnN0IHRoZVxuICogdW5zYW1wbGVkIGFjY2Vzcy1sb2cgc3RyZWFtLiBUaGlzIGNvdW50ZXIgaXMgdGhlIGZhc3QtcGF0aCBcIm5vaXN5XG4gKiBuZWlnaGJvciBkZXRlY3Rpb25cIiDigJQgb3BlcmF0b3JzIGFsZXJ0IHdoZW4gb25lIG9yZydzIHJlcXVlc3QgcmF0ZVxuICogZGV2aWF0ZXMgZnJvbSB0aGUgZmxlZXQgbWVkaWFuLlxuICpcbiAqIE5PVCBhIGhpc3RvZ3JhbTogaGlzdG9ncmFtIGxhYmVsIGNhcmRpbmFsaXR5IGlzIGV2ZW4gbW9yZSBzZW5zaXRpdmVcbiAqIChlYWNoIGJ1Y2tldCBpcyBhIHNlcGFyYXRlIHNlcmllcykuIElmIHBlci1vcmcgbGF0ZW5jeSBwZXJjZW50aWxlcyBhcmVcbiAqIG5lZWRlZCBsYXRlciwgYWRkIGEgc2VwYXJhdGUgaGlzdG9ncmFtIHdpdGggYSBjb2Fyc2VyIGJ1Y2tldCBzZXQgYW5kXG4gKiBsb3dlciBzYW1wbGUgcmF0ZS5cbiAqL1xuY29uc3QgaHR0cFJlcXVlc3RzQnlPcmdUb3RhbCA9IG5ldyBDb3VudGVyKHtcbiAgbmFtZTogJ2h0dHBfcmVxdWVzdHNfYnlfb3JnX3RvdGFsJyxcbiAgaGVscDogJ1NhbXBsZWQgcGVyLW9yZyBIVFRQIHJlcXVlc3QgY291bnQgKHNhbXBsZSByYXRlIHZpYSBIVFRQX01FVFJJQ1NfT1JHX1NBTVBMRV9SQVRFKScsXG4gIGxhYmVsTmFtZXM6IFsnbWV0aG9kJywgJ3JvdXRlJywgJ3N0YXR1c19jb2RlJywgJ29yZ19pZCddIGFzIGNvbnN0LFxuICByZWdpc3RlcnM6IFtyZWdpc3Rlcl0sXG59KTtcblxuLyoqIFNhbXBsZSByYXRlIGZvciB0aGUgcGVyLW9yZyBjb3VudGVyLiAxLjAgPSBldmVyeSByZXF1ZXN0LCAwLjAgPSBkaXNhYmxlZC5cbiAqICBQYXJzZWQgb25jZSBhdCBtb2R1bGUgbG9hZCDigJQgb3BlcmF0b3JzIHR1bmUgYnkgcmVzdGFydGluZyB0aGUgc2VydmljZS4gKi9cbmNvbnN0IE9SR19TQU1QTEVfUkFURSA9ICgoKSA9PiB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LkhUVFBfTUVUUklDU19PUkdfU0FNUExFX1JBVEU7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gMS4wO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHJhdyk7XG4gIGlmIChOdW1iZXIuaXNOYU4ocGFyc2VkKSB8fCBwYXJzZWQgPCAwIHx8IHBhcnNlZCA+IDEpIHJldHVybiAxLjA7XG4gIHJldHVybiBwYXJzZWQ7XG59KSgpO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbiBFeHByZXNzIHJvdXRlIHBhdGggdG8gcHJldmVudCBsYWJlbCBjYXJkaW5hbGl0eSBleHBsb3Npb24uXG4gKlxuICogVXNlcyBFeHByZXNzJ3MgbWF0Y2hlZCByb3V0ZSBwYXR0ZXJuIChlLmcuIGAvcGx1Z2lucy86aWRgKSB3aGVuIGF2YWlsYWJsZSxcbiAqIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHRoZSByYXcgcGF0aCB3aXRoIFVVSUQvbnVtZXJpYyBzZWdtZW50cyByZXBsYWNlZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUm91dGUocmVxOiBSZXF1ZXN0KTogc3RyaW5nIHtcbiAgLy8gUHJlZmVyIEV4cHJlc3MgbWF0Y2hlZCByb3V0ZSBwYXR0ZXJuXG4gIGlmIChyZXEucm91dGU/LnBhdGgpIHtcbiAgICByZXR1cm4gcmVxLmJhc2VVcmwgKyByZXEucm91dGUucGF0aDtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiByZXBsYWNlIFVVSURzIGFuZCBudW1lcmljIElEcyB3aXRoIDppZFxuICByZXR1cm4gcmVxLnBhdGhcbiAgICAucmVwbGFjZSgvWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9L2dpLCAnOmlkJylcbiAgICAucmVwbGFjZSgvXFwvXFxkKyg/PVxcL3wkKS9nLCAnLzppZCcpO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgbWlkZGxld2FyZSB0aGF0IHJlY29yZHMgcmVxdWVzdCBkdXJhdGlvbiBhbmQgY291bnQuXG4gKlxuICogTXVzdCBiZSByZWdpc3RlcmVkIGJlZm9yZSByb3V0ZSBoYW5kbGVycyBzbyBgcmVzLm9uKCdmaW5pc2gnKWAgZmlyZXNcbiAqIGFmdGVyIHRoZSByZXNwb25zZSBpcyBzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0cmljc01pZGRsZXdhcmUoKSB7XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiB2b2lkID0+IHtcbiAgICAvLyBOT1RFOiBubyAvbWV0cmljcyBvciAvaGVhbHRoIHNraXAgbmVlZGVkIGhlcmUg4oCUIGJvdGggZW5kcG9pbnRzIGFyZVxuICAgIC8vIHJlZ2lzdGVyZWQgaW4gYXBwLWZhY3RvcnkgQkVGT1JFIHRoaXMgbWlkZGxld2FyZSAoY3JlYXRlSGVhbHRoUm91dGVyIGFuZFxuICAgIC8vIGFwcC5nZXQoJy9tZXRyaWNzJykgYm90aCB0ZXJtaW5hdGUgdGhlIHJlc3BvbnNlKSwgc28gbmVpdGhlciBldmVyIHJlYWNoZXNcbiAgICAvLyB0aGlzIGhhbmRsZXIuXG4gICAgY29uc3QgZW5kID0gaHR0cFJlcXVlc3REdXJhdGlvbi5zdGFydFRpbWVyKCk7XG5cbiAgICByZXMub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvdXRlID0gbm9ybWFsaXplUm91dGUocmVxKTtcbiAgICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgc3RhdHVzX2NvZGU6IFN0cmluZyhyZXMuc3RhdHVzQ29kZSksXG4gICAgICB9O1xuXG4gICAgICBlbmQobGFiZWxzKTtcbiAgICAgIGh0dHBSZXF1ZXN0c1RvdGFsLmluYyhsYWJlbHMpO1xuXG4gICAgICAvLyBQZXItb3JnIHNhbXBsZWQgY291bnRlci4gU2tpcCB3aGVuOlxuICAgICAgLy8gICAtIG5vIG9yZyBjb250ZXh0IG9uIHRoZSByZXF1ZXN0IChhbm9ueW1vdXMgLyBoZWFsdGggZW5kcG9pbnRzKVxuICAgICAgLy8gICAtIHNhbXBsZSByYXRlIGlzIDAgKGRpc2FibGVkKVxuICAgICAgLy8gICAtIGRpY2Ugcm9sbCBmYWlsc1xuICAgICAgLy8gVXNpbmcgTWF0aC5yYW5kb20gZm9yIHRoZSBzYW1wbGVyIOKAlCBmb3IgdW5iaWFzZWQgbG93LXJhdGUgc2FtcGxpbmdcbiAgICAgIC8vIGEgZGV0ZXJtaW5pc3RpYyBwZXItcmVxdWVzdCBoYXNoIHdvdWxkIGJlIG1vcmUgdW5pZm9ybSwgYnV0IGF0IHRoZVxuICAgICAgLy8gZGVmYXVsdCByYXRlIG9mIDEuMCBldmVyeSByZXF1ZXN0IGxhbmRzIHNvIHRoaXMgaXMgZmluZS5cbiAgICAgIGNvbnN0IG9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkO1xuICAgICAgaWYgKG9yZ0lkICYmIE9SR19TQU1QTEVfUkFURSA+IDAgJiYgTWF0aC5yYW5kb20oKSA8IE9SR19TQU1QTEVfUkFURSkge1xuICAgICAgICBodHRwUmVxdWVzdHNCeU9yZ1RvdGFsLmluYyh7IC4uLmxhYmVscywgb3JnX2lkOiBvcmdJZCB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG5leHQoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIGhhbmRsZXIgdGhhdCByZXR1cm5zIFByb21ldGhldXMgbWV0cmljcyBpbiB0ZXh0IGV4cG9zaXRpb24gZm9ybWF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0cmljc0hhbmRsZXIoKSB7XG4gIHJldHVybiBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIHJlZ2lzdGVyLmNvbnRlbnRUeXBlKTtcbiAgICByZXMuZW5kKGF3YWl0IHJlZ2lzdGVyLm1ldHJpY3MoKSk7XG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQnVzaW5lc3MgLyBkb21haW4gbWV0cmljc1xuLy9cbi8vIFNlcnZpY2VzIHNob3VsZCBlbWl0IGNvdW50ZXJzIGZvciB0aGUgdGhpbmdzIG9wZXJhdG9ycyBhY3R1YWxseSBjYXJlIGFib3V0XG4vLyAocGlwZWxpbmVzIGdlbmVyYXRlZCwgcGx1Z2luIGJ1aWxkcyBjb21wbGV0ZWQsIGNvbXBsaWFuY2UgdmlvbGF0aW9ucyxcbi8vIEFJIHRva2VucyBjb25zdW1lZCkg4oCUIG5vdCBqdXN0IEhUVFAgdHJhZmZpYy4gVGhlIGhlbHBlcnMgYmVsb3cgcmVnaXN0ZXJcbi8vIGNvdW50ZXJzIGxhemlseSBvbiB0aGUgc2hhcmVkIHJlZ2lzdHJ5IHNvIG11bHRpcGxlIHNlcnZpY2VzIGNhbiBjYWxsXG4vLyBgaW5jQ291bnRlcigncGx1Z2luX2J1aWxkc190b3RhbCcsIHsgc3RhdHVzOiAnY29tcGxldGVkJyB9KWAgd2l0aG91dFxuLy8gd29ycnlpbmcgYWJvdXQgZG91YmxlLXJlZ2lzdHJhdGlvbi5cbi8vXG4vLyBOYW1pbmcgY29udmVudGlvbjogYDxkb21haW4+Xzxub3VuPl90b3RhbGAgZm9yIGNvdW50ZXJzLCBgX3NlY29uZHNgIGZvclxuLy8gaGlzdG9ncmFtcyDigJQgbWF0Y2hlcyBQcm9tZXRoZXVzIGJlc3QtcHJhY3RpY2UuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgYnVzaW5lc3NDb3VudGVycyA9IG5ldyBNYXA8c3RyaW5nLCBDb3VudGVyPHN0cmluZz4+KCk7XG5jb25zdCBidXNpbmVzc0hpc3RvZ3JhbXMgPSBuZXcgTWFwPHN0cmluZywgSGlzdG9ncmFtPHN0cmluZz4+KCk7XG5jb25zdCBidXNpbmVzc0dhdWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBHYXVnZTxzdHJpbmc+PigpO1xuXG4vKipcbiAqIEluY3JlbWVudCBhIGJ1c2luZXNzIGNvdW50ZXIsIGNyZWF0aW5nIGl0IG9uIGZpcnN0IHVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW5jQ291bnRlcigncGlwZWxpbmVzX2dlbmVyYXRlZF90b3RhbCcsIHsgcHJvdmlkZXI6ICdhbnRocm9waWMnIH0pO1xuICogaW5jQ291bnRlcigncGx1Z2luX2J1aWxkc190b3RhbCcsIHsgc3RhdHVzOiAnY29tcGxldGVkJyB9KTtcbiAqIGluY0NvdW50ZXIoJ3F1b3RhX3RocmVzaG9sZF9jcm9zc2VkX3RvdGFsJywgeyB0eXBlOiAnYWlDYWxscycsIHRpZXI6ICdwcm8nIH0pO1xuICogaW5jQ291bnRlcignY29tcGxpYW5jZV92aW9sYXRpb25zX2ZvdW5kX3RvdGFsJywgeyBzZXZlcml0eTogJ2NyaXRpY2FsJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5jQ291bnRlcihuYW1lOiBzdHJpbmcsIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LCB2YWx1ZSA9IDEpOiB2b2lkIHtcbiAgbGV0IGNvdW50ZXIgPSBidXNpbmVzc0NvdW50ZXJzLmdldChuYW1lKTtcbiAgaWYgKCFjb3VudGVyKSB7XG4gICAgY291bnRlciA9IG5ldyBDb3VudGVyKHtcbiAgICAgIG5hbWUsXG4gICAgICBoZWxwOiBodW1hbml6ZU5hbWUobmFtZSksXG4gICAgICBsYWJlbE5hbWVzOiBPYmplY3Qua2V5cyhsYWJlbHMpLFxuICAgICAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxuICAgIH0pO1xuICAgIGJ1c2luZXNzQ291bnRlcnMuc2V0KG5hbWUsIGNvdW50ZXIpO1xuICB9XG4gIGNvdW50ZXIuaW5jKGxhYmVscywgdmFsdWUpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhbiBvYnNlcnZhdGlvbiBvbiBhIGJ1c2luZXNzIGhpc3RvZ3JhbSwgY3JlYXRpbmcgaXQgb24gZmlyc3QgdXNlLlxuICogVXNlIGZvciBkdXJhdGlvbnMsIHNpemVzLCBhbnl0aGluZyB3aGVyZSBwZXJjZW50aWxlcyBtYXR0ZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG9ic2VydmUoJ2FpX2dlbmVyYXRpb25fZHVyYXRpb25fc2Vjb25kcycsIHsgcHJvdmlkZXI6ICdhbnRocm9waWMnLCBtb2RlbDogJ3Nvbm5ldCcgfSwgZHVyYXRpb25TZWMpO1xuICogb2JzZXJ2ZSgncGx1Z2luX2J1aWxkX2R1cmF0aW9uX3NlY29uZHMnLCB7IGJ1aWxkVHlwZTogJ2RvY2tlcicgfSwgZHVyYXRpb25TZWMpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlKG5hbWU6IHN0cmluZywgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gIGxldCBoaXN0ID0gYnVzaW5lc3NIaXN0b2dyYW1zLmdldChuYW1lKTtcbiAgaWYgKCFoaXN0KSB7XG4gICAgaGlzdCA9IG5ldyBIaXN0b2dyYW0oe1xuICAgICAgbmFtZSxcbiAgICAgIGhlbHA6IGh1bWFuaXplTmFtZShuYW1lKSxcbiAgICAgIGxhYmVsTmFtZXM6IE9iamVjdC5rZXlzKGxhYmVscyksXG4gICAgICAvLyBEZWZhdWx0IGJ1Y2tldHMgdGFyZ2V0IHN1Yi1zZWNvbmQgdGhyb3VnaCBzZXZlcmFsLW1pbnV0ZSBvYnNlcnZhdGlvbnMuXG4gICAgICAvLyBPdmVycmlkZSBieSByZWdpc3RlcmluZyB0aGUgaGlzdG9ncmFtIGV4cGxpY2l0bHkgYmVmb3JlIGZpcnN0IGNhbGxcbiAgICAgIC8vIGlmIHlvdSBuZWVkIGEgZGlmZmVyZW50IGJ1Y2tldCBkaXN0cmlidXRpb24uXG4gICAgICBidWNrZXRzOiBbMC4wNSwgMC4xLCAwLjI1LCAwLjUsIDEsIDIuNSwgNSwgMTAsIDMwLCA2MCwgMTIwLCAzMDBdLFxuICAgICAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxuICAgIH0pO1xuICAgIGJ1c2luZXNzSGlzdG9ncmFtcy5zZXQobmFtZSwgaGlzdCk7XG4gIH1cbiAgaGlzdC5vYnNlcnZlKGxhYmVscywgdmFsdWUpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgdmFsdWUgb2YgYSBidXNpbmVzcyBnYXVnZSwgY3JlYXRpbmcgaXQgb24gZmlyc3QgdXNlLiBVc2UgZm9yXG4gKiBwb2ludC1pbi10aW1lIG9ic2VydmF0aW9ucyBzYW1wbGVkIGJ5IGEgc2NyYXBlciDigJQgcXVldWUgZGVwdGgsIGFjdGl2ZVxuICogY29ubmVjdGlvbiBjb3VudHMsIGluLWZsaWdodCByZXF1ZXN0cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2V0R2F1Z2UoJ3BsdWdpbl9xdWV1ZV9qb2JzJywgeyBxdWV1ZTogJ3BsdWdpbi1idWlsZCcsIHN0YXRlOiAnd2FpdGluZycgfSwgMTIpO1xuICogc2V0R2F1Z2UoJ3BsdWdpbl9xdWV1ZV9qb2JzJywgeyBxdWV1ZTogJ3BsdWdpbi1idWlsZCcsIHN0YXRlOiAnYWN0aXZlJyB9LCAzKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0R2F1Z2UobmFtZTogc3RyaW5nLCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IGdhdWdlID0gYnVzaW5lc3NHYXVnZXMuZ2V0KG5hbWUpO1xuICBpZiAoIWdhdWdlKSB7XG4gICAgZ2F1Z2UgPSBuZXcgR2F1Z2Uoe1xuICAgICAgbmFtZSxcbiAgICAgIGhlbHA6IGh1bWFuaXplTmFtZShuYW1lKSxcbiAgICAgIGxhYmVsTmFtZXM6IE9iamVjdC5rZXlzKGxhYmVscyksXG4gICAgICByZWdpc3RlcnM6IFtyZWdpc3Rlcl0sXG4gICAgfSk7XG4gICAgYnVzaW5lc3NHYXVnZXMuc2V0KG5hbWUsIGdhdWdlKTtcbiAgfVxuICBnYXVnZS5zZXQobGFiZWxzLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGh1bWFuaXplTmFtZShtZXRyaWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBgcGlwZWxpbmVzX2dlbmVyYXRlZF90b3RhbGAg4oaSIFwiUGlwZWxpbmVzIGdlbmVyYXRlZCB0b3RhbFwiXG4gIHJldHVybiBtZXRyaWNOYW1lXG4gICAgLnJlcGxhY2UoL18vZywgJyAnKVxuICAgIC5yZXBsYWNlKC9eLi8sIChjKSA9PiBjLnRvVXBwZXJDYXNlKCkpO1xufVxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpGLE1BQU0sWUFBWSxHQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUE2QixDQUFDLFdBQVcsQ0FBQztBQUU3RixpQ0FBaUM7QUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUVoQyxxQ0FBcUM7QUFDckMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFFckQsa0ZBQWtGO0FBQ2xGLHFCQUFxQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUVwQyxnREFBZ0Q7QUFDaEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsK0JBQStCO0lBQ3JDLElBQUksRUFBRSxzQ0FBc0M7SUFDNUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQVU7SUFDdkQsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsMkJBQTJCO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxPQUFPLENBQUM7SUFDcEMsSUFB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SSxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDO1lBQ2hCLElBQUk7WUFDSixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztZQUN4QixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0IsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsVUFBa0I7SUFDdEMsNERBQTREO0lBQzVELE9BQU8sVUFBVTtTQUNkLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1NBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IFJlZ2lzdHJ5LCBjb2xsZWN0RGVmYXVsdE1ldHJpY3MsIENvdW50ZXIsIEhpc3RvZ3JhbSwgR2F1Z2UgfSBmcm9tICdwcm9tLWNsaWVudCc7XG5cbmNvbnN0IFNFUlZJQ0VfTkFNRSA9IChDb25maWcuZ2V0QW55KCdvYnNlcnZhYmlsaXR5JykgYXMgeyBzZXJ2aWNlTmFtZTogc3RyaW5nIH0pLnNlcnZpY2VOYW1lO1xuXG4vKiogU2hhcmVkIFByb21ldGhldXMgcmVnaXN0cnkgKi9cbmNvbnN0IHJlZ2lzdGVyID0gbmV3IFJlZ2lzdHJ5KCk7XG5cbi8vIFNldCBkZWZhdWx0IGxhYmVscyBmb3IgYWxsIG1ldHJpY3NcbnJlZ2lzdGVyLnNldERlZmF1bHRMYWJlbHMoeyBzZXJ2aWNlOiBTRVJWSUNFX05BTUUgfSk7XG5cbi8vIENvbGxlY3QgZGVmYXVsdCBOb2RlLmpzIHByb2Nlc3MgbWV0cmljcyAoQ1BVLCBtZW1vcnksIGhlYXAsIGV2ZW50IGxvb3AgbGFnLCBHQylcbmNvbGxlY3REZWZhdWx0TWV0cmljcyh7IHJlZ2lzdGVyIH0pO1xuXG4vKiogSFRUUCByZXF1ZXN0IGR1cmF0aW9uIGhpc3RvZ3JhbSAoc2Vjb25kcykgKi9cbmNvbnN0IGh0dHBSZXF1ZXN0RHVyYXRpb24gPSBuZXcgSGlzdG9ncmFtKHtcbiAgbmFtZTogJ2h0dHBfcmVxdWVzdF9kdXJhdGlvbl9zZWNvbmRzJyxcbiAgaGVscDogJ0R1cmF0aW9uIG9mIEhUVFAgcmVxdWVzdHMgaW4gc2Vjb25kcycsXG4gIGxhYmVsTmFtZXM6IFsnbWV0aG9kJywgJ3JvdXRlJywgJ3N0YXR1c19jb2RlJ10gYXMgY29uc3QsXG4gIGJ1Y2tldHM6IFswLjAwNSwgMC4wMSwgMC4wMjUsIDAuMDUsIDAuMSwgMC4yNSwgMC41LCAxLCAyLjUsIDUsIDEwXSxcbiAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxufSk7XG5cbi8qKiBIVFRQIHJlcXVlc3QgY291bnRlciAqL1xuY29uc3QgaHR0cFJlcXVlc3RzVG90YWwgPSBuZXcgQ291bnRlcih7XG4gIG5hbWU6ICdodHRwX3JlcXVlc3RzX3RvdGFsJyxcbiAgaGVscDogJ1RvdGFsIG51bWJlciBvZiBIVFRQIHJlcXVlc3RzJyxcbiAgbGFiZWxOYW1lczogWydtZXRob2QnLCAncm91dGUnLCAnc3RhdHVzX2NvZGUnXSBhcyBjb25zdCxcbiAgcmVnaXN0ZXJzOiBbcmVnaXN0ZXJdLFxufSk7XG5cbi8qKlxuICogUGVyLW9yZyBIVFRQIHJlcXVlc3QgY291bnRlciDigJQgU0FNUExFRCB0byBrZWVwIFByb21ldGhldXMgY2FyZGluYWxpdHlcbiAqIHVuZGVyIGNvbnRyb2wuIENhcmRpbmFsaXR5IG9mIGBvcmdfaWQgKiBtZXRob2QgKiByb3V0ZSAqIHN0YXR1c19jb2RlYFxuICogZ3Jvd3MgbXVsdGlwbGljYXRpdmVseTsgd2l0aCBOIG9yZ3MgKiA1MCByb3V0ZXMgKiA1IHN0YXR1c19jb2RlcyB0aGF0J3NcbiAqIDI1MMOXTiBzZXJpZXMuIFdlIHNhbXBsZSAxLWluLU4gcmVxdWVzdHMgKGNvbmZpZ3VyYWJsZSB2aWFcbiAqIGBIVFRQX01FVFJJQ1NfT1JHX1NBTVBMRV9SQVRFYCwgZGVmYXVsdCAxLjAgPSBldmVyeSByZXF1ZXN0KS5cbiAqXG4gKiBPcGVyYXRvcnMgYW5zd2VyIFwid2hhdCdzIG9yZyBYJ3MgcDk5P1wiIHZpYSBzZXBhcmF0ZSBwZXItb3JnIGhpc3RvZ3JhbXNcbiAqIHNjcmFwZWQgYXQgYSBsb3dlciByYXRlLCBPUiB2aWEgTG9raSBMb2dRTCBxdWVyaWVzIGFnYWluc3QgdGhlXG4gKiB1bnNhbXBsZWQgYWNjZXNzLWxvZyBzdHJlYW0uIFRoaXMgY291bnRlciBpcyB0aGUgZmFzdC1wYXRoIFwibm9pc3lcbiAqIG5laWdoYm9yIGRldGVjdGlvblwiIOKAlCBvcGVyYXRvcnMgYWxlcnQgd2hlbiBvbmUgb3JnJ3MgcmVxdWVzdCByYXRlXG4gKiBkZXZpYXRlcyBmcm9tIHRoZSBmbGVldCBtZWRpYW4uXG4gKlxuICogTk9UIGEgaGlzdG9ncmFtOiBoaXN0b2dyYW0gbGFiZWwgY2FyZGluYWxpdHkgaXMgZXZlbiBtb3JlIHNlbnNpdGl2ZVxuICogKGVhY2ggYnVja2V0IGlzIGEgc2VwYXJhdGUgc2VyaWVzKS4gSWYgcGVyLW9yZyBsYXRlbmN5IHBlcmNlbnRpbGVzIGFyZVxuICogbmVlZGVkIGxhdGVyLCBhZGQgYSBzZXBhcmF0ZSBoaXN0b2dyYW0gd2l0aCBhIGNvYXJzZXIgYnVja2V0IHNldCBhbmRcbiAqIGxvd2VyIHNhbXBsZSByYXRlLlxuICovXG5jb25zdCBodHRwUmVxdWVzdHNCeU9yZ1RvdGFsID0gbmV3IENvdW50ZXIoe1xuICBuYW1lOiAnaHR0cF9yZXF1ZXN0c19ieV9vcmdfdG90YWwnLFxuICBoZWxwOiAnU2FtcGxlZCBwZXItb3JnIEhUVFAgcmVxdWVzdCBjb3VudCAoc2FtcGxlIHJhdGUgdmlhIEhUVFBfTUVUUklDU19PUkdfU0FNUExFX1JBVEUpJyxcbiAgbGFiZWxOYW1lczogWydtZXRob2QnLCAncm91dGUnLCAnc3RhdHVzX2NvZGUnLCAnb3JnX2lkJ10gYXMgY29uc3QsXG4gIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbn0pO1xuXG4vKiogU2FtcGxlIHJhdGUgZm9yIHRoZSBwZXItb3JnIGNvdW50ZXIuIDEuMCA9IGV2ZXJ5IHJlcXVlc3QsIDAuMCA9IGRpc2FibGVkLlxuICogIFBhcnNlZCBvbmNlIGF0IG1vZHVsZSBsb2FkIOKAlCBvcGVyYXRvcnMgdHVuZSBieSByZXN0YXJ0aW5nIHRoZSBzZXJ2aWNlLiAqL1xuY29uc3QgT1JHX1NBTVBMRV9SQVRFID0gKCgpID0+IHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnYuSFRUUF9NRVRSSUNTX09SR19TQU1QTEVfUkFURTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycpIHJldHVybiAxLjA7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQocmF3KTtcbiAgaWYgKE51bWJlci5pc05hTihwYXJzZWQpIHx8IHBhcnNlZCA8IDAgfHwgcGFyc2VkID4gMSkgcmV0dXJuIDEuMDtcbiAgcmV0dXJuIHBhcnNlZDtcbn0pKCk7XG5cbi8qKlxuICogTm9ybWFsaXplIGFuIEV4cHJlc3Mgcm91dGUgcGF0aCB0byBwcmV2ZW50IGxhYmVsIGNhcmRpbmFsaXR5IGV4cGxvc2lvbi5cbiAqXG4gKiBVc2VzIEV4cHJlc3MncyBtYXRjaGVkIHJvdXRlIHBhdHRlcm4gKGUuZy4gYC9wbHVnaW5zLzppZGApIHdoZW4gYXZhaWxhYmxlLFxuICogb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIHJhdyBwYXRoIHdpdGggVVVJRC9udW1lcmljIHNlZ21lbnRzIHJlcGxhY2VkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSb3V0ZShyZXE6IFJlcXVlc3QpOiBzdHJpbmcge1xuICAvLyBQcmVmZXIgRXhwcmVzcyBtYXRjaGVkIHJvdXRlIHBhdHRlcm5cbiAgaWYgKHJlcS5yb3V0ZT8ucGF0aCkge1xuICAgIHJldHVybiByZXEuYmFzZVVybCArIHJlcS5yb3V0ZS5wYXRoO1xuICB9XG5cbiAgLy8gRmFsbGJhY2s6IHJlcGxhY2UgVVVJRHMgYW5kIG51bWVyaWMgSURzIHdpdGggOmlkXG4gIHJldHVybiByZXEucGF0aFxuICAgIC5yZXBsYWNlKC9bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0vZ2ksICc6aWQnKVxuICAgIC5yZXBsYWNlKC9cXC9cXGQrKD89XFwvfCQpL2csICcvOmlkJyk7XG59XG5cbi8qKlxuICogRXhwcmVzcyBtaWRkbGV3YXJlIHRoYXQgcmVjb3JkcyByZXF1ZXN0IGR1cmF0aW9uIGFuZCBjb3VudC5cbiAqXG4gKiBNdXN0IGJlIHJlZ2lzdGVyZWQgYmVmb3JlIHJvdXRlIGhhbmRsZXJzIHNvIGByZXMub24oJ2ZpbmlzaCcpYCBmaXJlc1xuICogYWZ0ZXIgdGhlIHJlc3BvbnNlIGlzIHNlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRyaWNzTWlkZGxld2FyZSgpIHtcbiAgcmV0dXJuIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgIC8vIE5PVEU6IG5vIC9tZXRyaWNzIG9yIC9oZWFsdGggc2tpcCBuZWVkZWQgaGVyZSDigJQgYm90aCBlbmRwb2ludHMgYXJlXG4gICAgLy8gcmVnaXN0ZXJlZCBpbiBhcHAtZmFjdG9yeSBCRUZPUkUgdGhpcyBtaWRkbGV3YXJlIChjcmVhdGVIZWFsdGhSb3V0ZXIgYW5kXG4gICAgLy8gYXBwLmdldCgnL21ldHJpY3MnKSBib3RoIHRlcm1pbmF0ZSB0aGUgcmVzcG9uc2UpLCBzbyBuZWl0aGVyIGV2ZXIgcmVhY2hlc1xuICAgIC8vIHRoaXMgaGFuZGxlci5cbiAgICBjb25zdCBlbmQgPSBodHRwUmVxdWVzdER1cmF0aW9uLnN0YXJ0VGltZXIoKTtcblxuICAgIHJlcy5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgY29uc3Qgcm91dGUgPSBub3JtYWxpemVSb3V0ZShyZXEpO1xuICAgICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBzdGF0dXNfY29kZTogU3RyaW5nKHJlcy5zdGF0dXNDb2RlKSxcbiAgICAgIH07XG5cbiAgICAgIGVuZChsYWJlbHMpO1xuICAgICAgaHR0cFJlcXVlc3RzVG90YWwuaW5jKGxhYmVscyk7XG5cbiAgICAgIC8vIFBlci1vcmcgc2FtcGxlZCBjb3VudGVyLiBTa2lwIHdoZW46XG4gICAgICAvLyAgIC0gbm8gb3JnIGNvbnRleHQgb24gdGhlIHJlcXVlc3QgKGFub255bW91cyAvIGhlYWx0aCBlbmRwb2ludHMpXG4gICAgICAvLyAgIC0gc2FtcGxlIHJhdGUgaXMgMCAoZGlzYWJsZWQpXG4gICAgICAvLyAgIC0gZGljZSByb2xsIGZhaWxzXG4gICAgICAvLyBVc2luZyBNYXRoLnJhbmRvbSBmb3IgdGhlIHNhbXBsZXIg4oCUIGZvciB1bmJpYXNlZCBsb3ctcmF0ZSBzYW1wbGluZ1xuICAgICAgLy8gYSBkZXRlcm1pbmlzdGljIHBlci1yZXF1ZXN0IGhhc2ggd291bGQgYmUgbW9yZSB1bmlmb3JtLCBidXQgYXQgdGhlXG4gICAgICAvLyBkZWZhdWx0IHJhdGUgb2YgMS4wIGV2ZXJ5IHJlcXVlc3QgbGFuZHMgc28gdGhpcyBpcyBmaW5lLlxuICAgICAgY29uc3Qgb3JnSWQgPSByZXEudXNlcj8ub3JnYW5pemF0aW9uSWQ7XG4gICAgICBpZiAob3JnSWQgJiYgT1JHX1NBTVBMRV9SQVRFID4gMCAmJiBNYXRoLnJhbmRvbSgpIDwgT1JHX1NBTVBMRV9SQVRFKSB7XG4gICAgICAgIGh0dHBSZXF1ZXN0c0J5T3JnVG90YWwuaW5jKHsgLi4ubGFiZWxzLCBvcmdfaWQ6IG9yZ0lkIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbmV4dCgpO1xuICB9O1xufVxuXG4vKipcbiAqIEV4cHJlc3MgaGFuZGxlciB0aGF0IHJldHVybnMgUHJvbWV0aGV1cyBtZXRyaWNzIGluIHRleHQgZXhwb3NpdGlvbiBmb3JtYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRyaWNzSGFuZGxlcigpIHtcbiAgcmV0dXJuIGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgcmVnaXN0ZXIuY29udGVudFR5cGUpO1xuICAgIHJlcy5lbmQoYXdhaXQgcmVnaXN0ZXIubWV0cmljcygpKTtcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCdXNpbmVzcyAvIGRvbWFpbiBtZXRyaWNzXG4vL1xuLy8gU2VydmljZXMgc2hvdWxkIGVtaXQgY291bnRlcnMgZm9yIHRoZSB0aGluZ3Mgb3BlcmF0b3JzIGFjdHVhbGx5IGNhcmUgYWJvdXRcbi8vIChwaXBlbGluZXMgZ2VuZXJhdGVkLCBwbHVnaW4gYnVpbGRzIGNvbXBsZXRlZCwgY29tcGxpYW5jZSB2aW9sYXRpb25zLFxuLy8gQUkgdG9rZW5zIGNvbnN1bWVkKSDigJQgbm90IGp1c3QgSFRUUCB0cmFmZmljLiBUaGUgaGVscGVycyBiZWxvdyByZWdpc3RlclxuLy8gY291bnRlcnMgbGF6aWx5IG9uIHRoZSBzaGFyZWQgcmVnaXN0cnkgc28gbXVsdGlwbGUgc2VydmljZXMgY2FuIGNhbGxcbi8vIGBpbmNDb3VudGVyKCdwbHVnaW5fYnVpbGRzX3RvdGFsJywgeyBzdGF0dXM6ICdjb21wbGV0ZWQnIH0pYCB3aXRob3V0XG4vLyB3b3JyeWluZyBhYm91dCBkb3VibGUtcmVnaXN0cmF0aW9uLlxuLy9cbi8vIE5hbWluZyBjb252ZW50aW9uOiBgPGRvbWFpbj5fPG5vdW4+X3RvdGFsYCBmb3IgY291bnRlcnMsIGBfc2Vjb25kc2AgZm9yXG4vLyBoaXN0b2dyYW1zIOKAlCBtYXRjaGVzIFByb21ldGhldXMgYmVzdC1wcmFjdGljZS5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBidXNpbmVzc0NvdW50ZXJzID0gbmV3IE1hcDxzdHJpbmcsIENvdW50ZXI8c3RyaW5nPj4oKTtcbmNvbnN0IGJ1c2luZXNzSGlzdG9ncmFtcyA9IG5ldyBNYXA8c3RyaW5nLCBIaXN0b2dyYW08c3RyaW5nPj4oKTtcbmNvbnN0IGJ1c2luZXNzR2F1Z2VzID0gbmV3IE1hcDxzdHJpbmcsIEdhdWdlPHN0cmluZz4+KCk7XG5cbi8qKlxuICogSW5jcmVtZW50IGEgYnVzaW5lc3MgY291bnRlciwgY3JlYXRpbmcgaXQgb24gZmlyc3QgdXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbmNDb3VudGVyKCdwaXBlbGluZXNfZ2VuZXJhdGVkX3RvdGFsJywgeyBwcm92aWRlcjogJ2FudGhyb3BpYycgfSk7XG4gKiBpbmNDb3VudGVyKCdwbHVnaW5fYnVpbGRzX3RvdGFsJywgeyBzdGF0dXM6ICdjb21wbGV0ZWQnIH0pO1xuICogaW5jQ291bnRlcigncXVvdGFfdGhyZXNob2xkX2Nyb3NzZWRfdG90YWwnLCB7IHR5cGU6ICdhaUNhbGxzJywgdGllcjogJ3BybycgfSk7XG4gKiBpbmNDb3VudGVyKCdjb21wbGlhbmNlX3Zpb2xhdGlvbnNfZm91bmRfdG90YWwnLCB7IHNldmVyaXR5OiAnY3JpdGljYWwnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmNDb3VudGVyKG5hbWU6IHN0cmluZywgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sIHZhbHVlID0gMSk6IHZvaWQge1xuICBsZXQgY291bnRlciA9IGJ1c2luZXNzQ291bnRlcnMuZ2V0KG5hbWUpO1xuICBpZiAoIWNvdW50ZXIpIHtcbiAgICBjb3VudGVyID0gbmV3IENvdW50ZXIoe1xuICAgICAgbmFtZSxcbiAgICAgIGhlbHA6IGh1bWFuaXplTmFtZShuYW1lKSxcbiAgICAgIGxhYmVsTmFtZXM6IE9iamVjdC5rZXlzKGxhYmVscyksXG4gICAgICByZWdpc3RlcnM6IFtyZWdpc3Rlcl0sXG4gICAgfSk7XG4gICAgYnVzaW5lc3NDb3VudGVycy5zZXQobmFtZSwgY291bnRlcik7XG4gIH1cbiAgY291bnRlci5pbmMobGFiZWxzLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogUmVjb3JkIGFuIG9ic2VydmF0aW9uIG9uIGEgYnVzaW5lc3MgaGlzdG9ncmFtLCBjcmVhdGluZyBpdCBvbiBmaXJzdCB1c2UuXG4gKiBVc2UgZm9yIGR1cmF0aW9ucywgc2l6ZXMsIGFueXRoaW5nIHdoZXJlIHBlcmNlbnRpbGVzIG1hdHRlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogb2JzZXJ2ZSgnYWlfZ2VuZXJhdGlvbl9kdXJhdGlvbl9zZWNvbmRzJywgeyBwcm92aWRlcjogJ2FudGhyb3BpYycsIG1vZGVsOiAnc29ubmV0JyB9LCBkdXJhdGlvblNlYyk7XG4gKiBvYnNlcnZlKCdwbHVnaW5fYnVpbGRfZHVyYXRpb25fc2Vjb25kcycsIHsgYnVpbGRUeXBlOiAnZG9ja2VyJyB9LCBkdXJhdGlvblNlYyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmUobmFtZTogc3RyaW5nLCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IGhpc3QgPSBidXNpbmVzc0hpc3RvZ3JhbXMuZ2V0KG5hbWUpO1xuICBpZiAoIWhpc3QpIHtcbiAgICBoaXN0ID0gbmV3IEhpc3RvZ3JhbSh7XG4gICAgICBuYW1lLFxuICAgICAgaGVscDogaHVtYW5pemVOYW1lKG5hbWUpLFxuICAgICAgbGFiZWxOYW1lczogT2JqZWN0LmtleXMobGFiZWxzKSxcbiAgICAgIC8vIERlZmF1bHQgYnVja2V0cyB0YXJnZXQgc3ViLXNlY29uZCB0aHJvdWdoIHNldmVyYWwtbWludXRlIG9ic2VydmF0aW9ucy5cbiAgICAgIC8vIE92ZXJyaWRlIGJ5IHJlZ2lzdGVyaW5nIHRoZSBoaXN0b2dyYW0gZXhwbGljaXRseSBiZWZvcmUgZmlyc3QgY2FsbFxuICAgICAgLy8gaWYgeW91IG5lZWQgYSBkaWZmZXJlbnQgYnVja2V0IGRpc3RyaWJ1dGlvbi5cbiAgICAgIGJ1Y2tldHM6IFswLjA1LCAwLjEsIDAuMjUsIDAuNSwgMSwgMi41LCA1LCAxMCwgMzAsIDYwLCAxMjAsIDMwMF0sXG4gICAgICByZWdpc3RlcnM6IFtyZWdpc3Rlcl0sXG4gICAgfSk7XG4gICAgYnVzaW5lc3NIaXN0b2dyYW1zLnNldChuYW1lLCBoaXN0KTtcbiAgfVxuICBoaXN0Lm9ic2VydmUobGFiZWxzLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSB2YWx1ZSBvZiBhIGJ1c2luZXNzIGdhdWdlLCBjcmVhdGluZyBpdCBvbiBmaXJzdCB1c2UuIFVzZSBmb3JcbiAqIHBvaW50LWluLXRpbWUgb2JzZXJ2YXRpb25zIHNhbXBsZWQgYnkgYSBzY3JhcGVyIOKAlCBxdWV1ZSBkZXB0aCwgYWN0aXZlXG4gKiBjb25uZWN0aW9uIGNvdW50cywgaW4tZmxpZ2h0IHJlcXVlc3RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZXRHYXVnZSgncGx1Z2luX3F1ZXVlX2pvYnMnLCB7IHF1ZXVlOiAncGx1Z2luLWJ1aWxkJywgc3RhdGU6ICd3YWl0aW5nJyB9LCAxMik7XG4gKiBzZXRHYXVnZSgncGx1Z2luX3F1ZXVlX2pvYnMnLCB7IHF1ZXVlOiAncGx1Z2luLWJ1aWxkJywgc3RhdGU6ICdhY3RpdmUnIH0sIDMpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRHYXVnZShuYW1lOiBzdHJpbmcsIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICBsZXQgZ2F1Z2UgPSBidXNpbmVzc0dhdWdlcy5nZXQobmFtZSk7XG4gIGlmICghZ2F1Z2UpIHtcbiAgICBnYXVnZSA9IG5ldyBHYXVnZSh7XG4gICAgICBuYW1lLFxuICAgICAgaGVscDogaHVtYW5pemVOYW1lKG5hbWUpLFxuICAgICAgbGFiZWxOYW1lczogT2JqZWN0LmtleXMobGFiZWxzKSxcbiAgICAgIHJlZ2lzdGVyczogW3JlZ2lzdGVyXSxcbiAgICB9KTtcbiAgICBidXNpbmVzc0dhdWdlcy5zZXQobmFtZSwgZ2F1Z2UpO1xuICB9XG4gIGdhdWdlLnNldChsYWJlbHMsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaHVtYW5pemVOYW1lKG1ldHJpY05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIGBwaXBlbGluZXNfZ2VuZXJhdGVkX3RvdGFsYCDihpIgXCJQaXBlbGluZXMgZ2VuZXJhdGVkIHRvdGFsXCJcbiAgcmV0dXJuIG1ldHJpY05hbWVcbiAgICAucmVwbGFjZSgvXy9nLCAnICcpXG4gICAgLnJlcGxhY2UoL14uLywgKGMpID0+IGMudG9VcHBlckNhc2UoKSk7XG59XG4iXX0=
@@ -62,4 +62,4 @@ export function readinessGuard(bypassPaths = DEFAULT_READINESS_BYPASS) {
62
62
  sendError(res, 503, 'Service not ready — dependencies are still connecting');
63
63
  };
64
64
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGluZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9yZWFkaW5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHdkQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBRXhCLG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsT0FBTztJQUNyQixPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBYztJQUNyQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRXZHLFNBQVMsVUFBVSxDQUFDLElBQVksRUFBRSxNQUF5QjtJQUN6RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsY0FBaUMsd0JBQXdCO0lBQ3RGLE9BQU8sQ0FBQyxHQUFZLEVBQUUsR0FBYSxFQUFFLElBQUksRUFBUSxFQUFFO1FBQ2pELElBQUksWUFBWSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDdEQsSUFBSSxFQUFFLENBQUM7WUFDUCxPQUFPO1FBQ1QsQ0FBQztRQUNELEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLHVEQUF1RCxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlcXVlc3RIYW5kbGVyLCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuXG4vKipcbiAqIFNlcnZpY2UgcmVhZGluZXNzIHN0YXRlLlxuICpcbiAqIEZsaXBwZWQgYnkgc3RhcnRTZXJ2ZXIncyBkZXBlbmRlbmN5IHN1cGVydmlzb3I6IHNldCBmYWxzZSB0aGUgaW5zdGFudCB3ZVxuICogc3RhcnQgbGlzdGVuaW5nLCB0cnVlIG9uY2UgdGhlIGJhY2tpbmcgc3RvcmUocykgY29ubmVjdCwgYW5kIGJhY2sgdG8gZmFsc2VcbiAqIGlmIHRoZXkgbGF0ZXIgZHJvcC4gUmVhZCBieSB0aGUgcmVhZGluZXNzLWd1YXJkIG1pZGRsZXdhcmUgKGFuZCB0ZXN0cykuXG4gKlxuICogTW9kdWxlLWxldmVsIHNpbmdsZXRvbjogZWFjaCBzZXJ2aWNlIHJ1bnMgYXMgaXRzIG93biBwcm9jZXNzIHdpdGggZXhhY3RseVxuICogb25lIHNlcnZlciwgc28gYSBzaW5nbGUgZmxhZyBpcyBzdWZmaWNpZW50IGFuZCBhdm9pZHMgdGhyZWFkaW5nIHN0YXRlXG4gKiB0aHJvdWdoIGNyZWF0ZUFwcCArIHN0YXJ0U2VydmVyLlxuICpcbiAqIERlZmF1bHRzIHRvIGB0cnVlYCBzbyBhbiBhcHAgYnVpbHQgd2l0aCBjcmVhdGVBcHAgYnV0IE5PVCBzdGFydGVkIHZpYVxuICogc3RhcnRTZXJ2ZXIg4oCUIGV2ZXJ5IHJvdXRlIHVuaXQgdGVzdCwgd2hpY2ggZHJpdmVzIHRoZSBhcHAgZGlyZWN0bHkgd2l0aFxuICogc3VwZXJ0ZXN0IOKAlCBpcyBuZXZlciBibG9ja2VkIGJ5IHRoZSBndWFyZC4gc3RhcnRTZXJ2ZXIgZmxpcHMgaXQgdG8gZmFsc2VcbiAqIHN5bmNocm9ub3VzbHkgYmVmb3JlIGl0IG9wZW5zIHRoZSBwb3J0LCBzbyB0aGUgcHJvZHVjdGlvbiBwYXRoIGlzIGdhdGVkLlxuICovXG5sZXQgc2VydmljZVJlYWR5ID0gdHJ1ZTtcblxuLyoqIFRydWUgb25jZSBkZXBlbmRlbmNpZXMgaGF2ZSBjb25uZWN0ZWQgKGFuZCByZW1haW4gY29ubmVjdGVkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2VydmljZVJlYWR5O1xufVxuXG4vKiogU2V0IGJ5IHRoZSBzdGFydHVwIHN1cGVydmlzb3IgKGFuZCB0ZXN0cykuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UmVhZHkocmVhZHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgc2VydmljZVJlYWR5ID0gcmVhZHk7XG59XG5cbi8qKlxuICogRGVmYXVsdCBpbmZyYSBlbmRwb2ludHMgdGhhdCBtdXN0IHN0YXkgcmVhY2hhYmxlIHdoaWxlIE5vdFJlYWR5LCBzb1xuICogb3JjaGVzdHJhdG9ycyBjYW4gcHJvYmUgbGl2ZW5lc3MvcmVhZGluZXNzLCBzY3JhcGUgbWV0cmljcywgd2FybSBwb29scyxcbiAqIHNlcnZlIGRvY3MsIGFuZCByZWxheSBTU0UgbG9ncyBkdXJpbmcgc3RhcnR1cCBvciBhIGRlcGVuZGVuY3kgb3V0YWdlLiBUaGlzXG4gKiBtYXRjaGVzIHdoYXQgYGNyZWF0ZUFwcGAgbW91bnRzLiBBIHNlcnZpY2Ugd2hvc2Ugb3duIHJvdXRlcyBDT0xMSURFIHdpdGggb25lXG4gKiBvZiB0aGVzZSBwcmVmaXhlcyAoZS5nLiBwbGF0Zm9ybSBzZXJ2ZXMgYSB0ZW5hbnQgbG9nIEFQSSBhdCBgL2xvZ3NgKSBtdXN0XG4gKiBwYXNzIGEgbmFycm93ZXIgbGlzdCB0byBgcmVhZGluZXNzR3VhcmQoKWAgc28gaXRzIGJ1c2luZXNzIHJvdXRlcyBzdGF5IGdhdGVkLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUFESU5FU1NfQllQQVNTID0gWycvaGVhbHRoJywgJy9yZWFkeScsICcvbWV0cmljcycsICcvd2FybXVwJywgJy9kb2NzJywgJy9sb2dzJ107XG5cbmZ1bmN0aW9uIGlzQnlwYXNzZWQocGF0aDogc3RyaW5nLCBieXBhc3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBieXBhc3Muc29tZSgocCkgPT4gcGF0aCA9PT0gcCB8fCBwYXRoLnN0YXJ0c1dpdGgoYCR7cH0vYCkpO1xufVxuXG4vKipcbiAqIFJlYWRpbmVzcyBndWFyZCDigJQgd2hpbGUgdGhlIHNlcnZpY2UgaXMgTm90UmVhZHkgKGRlcGVuZGVuY2llcyBub3QgeWV0XG4gKiBjb25uZWN0ZWQsIG9yIGRyb3BwZWQpLCByZWplY3QgYnVzaW5lc3MgcmVxdWVzdHMgd2l0aCA1MDMgKyBSZXRyeS1BZnRlclxuICogaW5zdGVhZCBvZiBsZXR0aW5nIHRoZW0gaGl0IGEgZGlzY29ubmVjdGVkIGRhdGFzdG9yZSBhbmQgNTAwLlxuICpcbiAqIFRoaXMgaXMgdGhlIHBvcnRhYmxlLCBhcHAtbGV2ZWwgcmVhZGluZXNzIG1lY2hhbmlzbSB0aGF0IHdvcmtzIG9uIGV2ZXJ5XG4gKiBkZXBsb3kgdGFyZ2V0IOKAlCBpbmNsdWRpbmcgRG9ja2VyIENvbXBvc2UgKHNpbmdsZSByZXBsaWNhLCBubyBvcmNoZXN0cmF0b3JcbiAqIHRyYWZmaWMtZHJhaW5pbmcpIGFuZCBGYXJnYXRlIChFQ1MgZXhwb3NlcyBvbmx5IG9uZSBwZXItc2VydmljZSBoZWFsdGhcbiAqIHNpZ25hbCwgd2hpY2ggaXMgYWxzbyBhIGtpbGwgdHJpZ2dlcikuIGs4cyByZWFkaW5lc3MgcHJvYmVzIGxheWVyIG9uIHRvcC5cbiAqXG4gKiBAcGFyYW0gYnlwYXNzUGF0aHMgSW5mcmEgcHJlZml4ZXMgdGhhdCBhbHdheXMgcGFzcyB0aHJvdWdoIGV2ZW4gd2hpbGVcbiAqICAgTm90UmVhZHkuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX1JFQURJTkVTU19CWVBBU1N9OyBwYXNzIGEgY3VzdG9tIGxpc3RcbiAqICAgd2hlbiBhIGJ1c2luZXNzIHJvdXRlIHdvdWxkIG90aGVyd2lzZSBjb2xsaWRlIHdpdGggYSBkZWZhdWx0IHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRpbmVzc0d1YXJkKGJ5cGFzc1BhdGhzOiByZWFkb25seSBzdHJpbmdbXSA9IERFRkFVTFRfUkVBRElORVNTX0JZUEFTUyk6IFJlcXVlc3RIYW5kbGVyIHtcbiAgcmV0dXJuIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQpOiB2b2lkID0+IHtcbiAgICBpZiAoc2VydmljZVJlYWR5IHx8IGlzQnlwYXNzZWQocmVxLnBhdGgsIGJ5cGFzc1BhdGhzKSkge1xuICAgICAgbmV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsICc1Jyk7XG4gICAgc2VuZEVycm9yKHJlcywgNTAzLCAnU2VydmljZSBub3QgcmVhZHkg4oCUIGRlcGVuZGVuY2llcyBhcmUgc3RpbGwgY29ubmVjdGluZycpO1xuICB9O1xufVxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGluZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9yZWFkaW5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHdkQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBRXhCLG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsT0FBTztJQUNyQixPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBYztJQUNyQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRXZHLFNBQVMsVUFBVSxDQUFDLElBQVksRUFBRSxNQUF5QjtJQUN6RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsV0FBVyxHQUFzQix3QkFBd0I7SUFDdEYsT0FBTyxDQUFDLEdBQVksRUFBRSxHQUFhLEVBQUUsSUFBSSxFQUFRLEVBQUU7UUFDakQsSUFBSSxZQUFZLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLEVBQUUsQ0FBQztZQUNQLE9BQU87UUFDVCxDQUFDO1FBQ0QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsdURBQXVELENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHNlbmRFcnJvciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVxdWVzdEhhbmRsZXIsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5cbi8qKlxuICogU2VydmljZSByZWFkaW5lc3Mgc3RhdGUuXG4gKlxuICogRmxpcHBlZCBieSBzdGFydFNlcnZlcidzIGRlcGVuZGVuY3kgc3VwZXJ2aXNvcjogc2V0IGZhbHNlIHRoZSBpbnN0YW50IHdlXG4gKiBzdGFydCBsaXN0ZW5pbmcsIHRydWUgb25jZSB0aGUgYmFja2luZyBzdG9yZShzKSBjb25uZWN0LCBhbmQgYmFjayB0byBmYWxzZVxuICogaWYgdGhleSBsYXRlciBkcm9wLiBSZWFkIGJ5IHRoZSByZWFkaW5lc3MtZ3VhcmQgbWlkZGxld2FyZSAoYW5kIHRlc3RzKS5cbiAqXG4gKiBNb2R1bGUtbGV2ZWwgc2luZ2xldG9uOiBlYWNoIHNlcnZpY2UgcnVucyBhcyBpdHMgb3duIHByb2Nlc3Mgd2l0aCBleGFjdGx5XG4gKiBvbmUgc2VydmVyLCBzbyBhIHNpbmdsZSBmbGFnIGlzIHN1ZmZpY2llbnQgYW5kIGF2b2lkcyB0aHJlYWRpbmcgc3RhdGVcbiAqIHRocm91Z2ggY3JlYXRlQXBwICsgc3RhcnRTZXJ2ZXIuXG4gKlxuICogRGVmYXVsdHMgdG8gYHRydWVgIHNvIGFuIGFwcCBidWlsdCB3aXRoIGNyZWF0ZUFwcCBidXQgTk9UIHN0YXJ0ZWQgdmlhXG4gKiBzdGFydFNlcnZlciDigJQgZXZlcnkgcm91dGUgdW5pdCB0ZXN0LCB3aGljaCBkcml2ZXMgdGhlIGFwcCBkaXJlY3RseSB3aXRoXG4gKiBzdXBlcnRlc3Qg4oCUIGlzIG5ldmVyIGJsb2NrZWQgYnkgdGhlIGd1YXJkLiBzdGFydFNlcnZlciBmbGlwcyBpdCB0byBmYWxzZVxuICogc3luY2hyb25vdXNseSBiZWZvcmUgaXQgb3BlbnMgdGhlIHBvcnQsIHNvIHRoZSBwcm9kdWN0aW9uIHBhdGggaXMgZ2F0ZWQuXG4gKi9cbmxldCBzZXJ2aWNlUmVhZHkgPSB0cnVlO1xuXG4vKiogVHJ1ZSBvbmNlIGRlcGVuZGVuY2llcyBoYXZlIGNvbm5lY3RlZCAoYW5kIHJlbWFpbiBjb25uZWN0ZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZXJ2aWNlUmVhZHk7XG59XG5cbi8qKiBTZXQgYnkgdGhlIHN0YXJ0dXAgc3VwZXJ2aXNvciAoYW5kIHRlc3RzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRSZWFkeShyZWFkeTogYm9vbGVhbik6IHZvaWQge1xuICBzZXJ2aWNlUmVhZHkgPSByZWFkeTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGluZnJhIGVuZHBvaW50cyB0aGF0IG11c3Qgc3RheSByZWFjaGFibGUgd2hpbGUgTm90UmVhZHksIHNvXG4gKiBvcmNoZXN0cmF0b3JzIGNhbiBwcm9iZSBsaXZlbmVzcy9yZWFkaW5lc3MsIHNjcmFwZSBtZXRyaWNzLCB3YXJtIHBvb2xzLFxuICogc2VydmUgZG9jcywgYW5kIHJlbGF5IFNTRSBsb2dzIGR1cmluZyBzdGFydHVwIG9yIGEgZGVwZW5kZW5jeSBvdXRhZ2UuIFRoaXNcbiAqIG1hdGNoZXMgd2hhdCBgY3JlYXRlQXBwYCBtb3VudHMuIEEgc2VydmljZSB3aG9zZSBvd24gcm91dGVzIENPTExJREUgd2l0aCBvbmVcbiAqIG9mIHRoZXNlIHByZWZpeGVzIChlLmcuIHBsYXRmb3JtIHNlcnZlcyBhIHRlbmFudCBsb2cgQVBJIGF0IGAvbG9nc2ApIG11c3RcbiAqIHBhc3MgYSBuYXJyb3dlciBsaXN0IHRvIGByZWFkaW5lc3NHdWFyZCgpYCBzbyBpdHMgYnVzaW5lc3Mgcm91dGVzIHN0YXkgZ2F0ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQURJTkVTU19CWVBBU1MgPSBbJy9oZWFsdGgnLCAnL3JlYWR5JywgJy9tZXRyaWNzJywgJy93YXJtdXAnLCAnL2RvY3MnLCAnL2xvZ3MnXTtcblxuZnVuY3Rpb24gaXNCeXBhc3NlZChwYXRoOiBzdHJpbmcsIGJ5cGFzczogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIGJ5cGFzcy5zb21lKChwKSA9PiBwYXRoID09PSBwIHx8IHBhdGguc3RhcnRzV2l0aChgJHtwfS9gKSk7XG59XG5cbi8qKlxuICogUmVhZGluZXNzIGd1YXJkIOKAlCB3aGlsZSB0aGUgc2VydmljZSBpcyBOb3RSZWFkeSAoZGVwZW5kZW5jaWVzIG5vdCB5ZXRcbiAqIGNvbm5lY3RlZCwgb3IgZHJvcHBlZCksIHJlamVjdCBidXNpbmVzcyByZXF1ZXN0cyB3aXRoIDUwMyArIFJldHJ5LUFmdGVyXG4gKiBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlbSBoaXQgYSBkaXNjb25uZWN0ZWQgZGF0YXN0b3JlIGFuZCA1MDAuXG4gKlxuICogVGhpcyBpcyB0aGUgcG9ydGFibGUsIGFwcC1sZXZlbCByZWFkaW5lc3MgbWVjaGFuaXNtIHRoYXQgd29ya3Mgb24gZXZlcnlcbiAqIGRlcGxveSB0YXJnZXQg4oCUIGluY2x1ZGluZyBEb2NrZXIgQ29tcG9zZSAoc2luZ2xlIHJlcGxpY2EsIG5vIG9yY2hlc3RyYXRvclxuICogdHJhZmZpYy1kcmFpbmluZykgYW5kIEZhcmdhdGUgKEVDUyBleHBvc2VzIG9ubHkgb25lIHBlci1zZXJ2aWNlIGhlYWx0aFxuICogc2lnbmFsLCB3aGljaCBpcyBhbHNvIGEga2lsbCB0cmlnZ2VyKS4gazhzIHJlYWRpbmVzcyBwcm9iZXMgbGF5ZXIgb24gdG9wLlxuICpcbiAqIEBwYXJhbSBieXBhc3NQYXRocyBJbmZyYSBwcmVmaXhlcyB0aGF0IGFsd2F5cyBwYXNzIHRocm91Z2ggZXZlbiB3aGlsZVxuICogICBOb3RSZWFkeS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfUkVBRElORVNTX0JZUEFTU307IHBhc3MgYSBjdXN0b20gbGlzdFxuICogICB3aGVuIGEgYnVzaW5lc3Mgcm91dGUgd291bGQgb3RoZXJ3aXNlIGNvbGxpZGUgd2l0aCBhIGRlZmF1bHQgcHJlZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZGluZXNzR3VhcmQoYnlwYXNzUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gREVGQVVMVF9SRUFESU5FU1NfQllQQVNTKTogUmVxdWVzdEhhbmRsZXIge1xuICByZXR1cm4gKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dCk6IHZvaWQgPT4ge1xuICAgIGlmIChzZXJ2aWNlUmVhZHkgfHwgaXNCeXBhc3NlZChyZXEucGF0aCwgYnlwYXNzUGF0aHMpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlcy5zZXRIZWFkZXIoJ1JldHJ5LUFmdGVyJywgJzUnKTtcbiAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdTZXJ2aWNlIG5vdCByZWFkeSDigJQgZGVwZW5kZW5jaWVzIGFyZSBzdGlsbCBjb25uZWN0aW5nJyk7XG4gIH07XG59XG4iXX0=
@@ -77,4 +77,4 @@ export function withRoute(handler, options = {}) {
77
77
  }
78
78
  };
79
79
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGUtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGNBQWMsRUFDZCxTQUFTLEVBQ1QsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixZQUFZLEdBQ2IsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHOUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTdDOzs7OztHQUtHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBYztJQUNyQyxJQUFJLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUN4RSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxtQkFBbUIseUJBQXlCLENBQUM7SUFDdkUsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUE4QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsT0FBNEMsRUFDNUMsVUFBNEIsRUFBRTtJQUU5QixNQUFNLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV4QyxPQUFPLEtBQUssRUFBRSxHQUFZLEVBQUUsR0FBYSxFQUFFLEVBQUU7UUFDM0MsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFekMsSUFBSSxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHNEQUFzRDtZQUN0RCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRTtvQkFDdEQsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO29CQUN4QixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQztpQkFDOUIsQ0FBQyxDQUFDO2dCQUNILE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxLQUFLLFlBQVksUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRztvQkFDOUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVO29CQUNsQixDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNSLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELDZFQUE2RTtZQUM3RSw4RUFBOEU7WUFDOUUsK0VBQStFO1lBQy9FLDhFQUE4RTtZQUM5RSxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2pDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztnQkFDeEIsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUM7Z0JBQzdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFDLENBQUMsQ0FBQztZQUNILE9BQU8saUJBQWlCLENBQUMsR0FBRyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7XG4gIEFwcEVycm9yLFxuICBlcnJvck1lc3NhZ2UsXG4gIGV4dHJhY3REYkVycm9yLFxuICBzZW5kRXJyb3IsXG4gIHNlbmRCYWRSZXF1ZXN0LFxuICBzZW5kSW50ZXJuYWxFcnJvcixcbiAgY3JlYXRlTG9nZ2VyLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBSZXF1ZXN0SGFuZGxlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgZ2V0Q29udGV4dCB9IGZyb20gJy4vZ2V0LWNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gJy4vcmVxdWVzdC10eXBlcy5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncm91dGUtd3JhcHBlcicpO1xuXG4vKipcbiAqIEEgbG9nLXNhZmUgcmVuZGVyaW5nIG9mIGFuIHVua25vd24gZXJyb3IuIGRyaXp6bGUtb3JtJ3MgYERyaXp6bGVRdWVyeUVycm9yYFxuICogZW1iZWRzIHRoZSBmYWlsZWQgU1FMIHN0YXRlbWVudCBBTkQgdGhlIGJvdW5kIHBhcmFtZXRlciB2YWx1ZXMgKHJlYWwgZGF0YSkgaW5cbiAqIGl0cyBgLm1lc3NhZ2VgIChgRmFpbGVkIHF1ZXJ5OiA8c3FsPlxcbnBhcmFtczogPHZhbHVlcz5gKS4gTmV2ZXIgcHV0IHRoYXQgaW4gYVxuICogcmVzcG9uc2Ugb3IgYSBsb2cgbGluZSDigJQgY29sbGFwc2UgaXQgdG8gdGhlIGVycm9yIG5hbWUuIE90aGVyIGVycm9ycyBhcmUgc2FmZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUVycm9yRm9yTG9nKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdGYWlsZWQgcXVlcnk6JykpIHtcbiAgICByZXR1cm4gYCR7ZXJyb3IubmFtZSB8fCAnRHJpenpsZVF1ZXJ5RXJyb3InfTogZGF0YWJhc2UgcXVlcnkgZmFpbGVkYDtcbiAgfVxuICByZXR1cm4gZXJyb3JNZXNzYWdlKGVycm9yKTtcbn1cblxuLyoqXG4gKiBDb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gZXZlcnkgcm91dGUgaGFuZGxlciB3cmFwcGVkIHdpdGggYHdpdGhSb3V0ZSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUNvbnRleHQge1xuICAvKiogT3JpZ2luYWwgRXhwcmVzcyByZXF1ZXN0ICovXG4gIHJlcTogUmVxdWVzdDtcbiAgLyoqIE9yaWdpbmFsIEV4cHJlc3MgcmVzcG9uc2UgKi9cbiAgcmVzOiBSZXNwb25zZTtcbiAgLyoqIFJlcXVlc3QgY29udGV4dCB3aXRoIGlkZW50aXR5IGFuZCBsb2dnaW5nICovXG4gIGN0eDogUmVxdWVzdENvbnRleHQ7XG4gIC8qKiBMb3dlcmNhc2VkIG9yZ2FuaXphdGlvbiBJRCAoZ3VhcmFudGVlZCBub24tZW1wdHkgd2hlbiByZXF1aXJlT3JnSWQgaXMgdHJ1ZSkgKi9cbiAgb3JnSWQ6IHN0cmluZztcbiAgLyoqIFVzZXIgSUQgZnJvbSBKV1QgKGRlZmF1bHRzIHRvIGVtcHR5IHN0cmluZykgKi9cbiAgdXNlcklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHdpdGhSb3V0ZSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaXRoUm91dGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVxdWlyZSBvcmdJZCBvbiB0aGUgcmVxdWVzdC5cbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgcmV0dXJucyA0MDAgaWYgb3JnSWQgaXMgbWlzc2luZy5cbiAgICogU2V0IHRvIGZhbHNlIGZvciByb3V0ZXMgdGhhdCBkb24ndCBuZWVkIG9yZyBjb250ZXh0LlxuICAgKi9cbiAgcmVxdWlyZU9yZ0lkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXcmFwIGFuIGFzeW5jIHJvdXRlIGhhbmRsZXIgd2l0aCBzdGFuZGFyZCBib2lsZXJwbGF0ZS5cbiAqXG4gKiBFeHRyYWN0cyBjb250ZXh0LCBvcmdJZCwgdXNlcklkIGZyb20gdGhlIHJlcXVlc3QsIHZhbGlkYXRlcyBvcmdJZCxcbiAqIGFuZCBjYXRjaGVzIGVycm9ycy4gVHlwZWQgYEFwcEVycm9yYCBzdWJjbGFzc2VzIGFyZSBhdXRvbWF0aWNhbGx5XG4gKiBtYXBwZWQgdG8gdGhlIGNvcnJlY3QgSFRUUCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlciAtIEFzeW5jIGZ1bmN0aW9uIHJlY2VpdmluZyBhIFJvdXRlQ29udGV4dFxuICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIEV4cHJlc3MgUmVxdWVzdEhhbmRsZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcm91dGVyLmdldCgnLzppZCcsIHdpdGhSb3V0ZShhc3luYyAoeyByZXEsIHJlcywgY3R4LCBvcmdJZCB9KSA9PiB7XG4gKiAgIGNvbnN0IGlkID0gZ2V0UGFyYW0ocmVxLnBhcmFtcywgJ2lkJyk7XG4gKiAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBpcGVsaW5lU2VydmljZS5maW5kQnlJZChpZCwgb3JnSWQpO1xuICogICBpZiAoIXJlc3VsdCkgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoJ1BpcGVsaW5lIG5vdCBmb3VuZCcpO1xuICogICByZXR1cm4gc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHsgcGlwZWxpbmU6IHJlc3VsdCB9KTtcbiAqIH0pKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJvdXRlKFxuICBoYW5kbGVyOiAocmM6IFJvdXRlQ29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgb3B0aW9uczogV2l0aFJvdXRlT3B0aW9ucyA9IHt9LFxuKTogUmVxdWVzdEhhbmRsZXIge1xuICBjb25zdCB7IHJlcXVpcmVPcmdJZCA9IHRydWUgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBjdHggPSBnZXRDb250ZXh0KHJlcSk7XG4gICAgY29uc3Qgb3JnSWQgPSBjdHguaWRlbnRpdHkub3JnSWQ/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgdXNlcklkID0gY3R4LmlkZW50aXR5LnVzZXJJZCB8fCAnJztcblxuICAgIGlmIChyZXF1aXJlT3JnSWQgJiYgIW9yZ0lkKSB7XG4gICAgICByZXR1cm4gc2VuZEJhZFJlcXVlc3QocmVzLCAnT3JnYW5pemF0aW9uIElEIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGhhbmRsZXIoeyByZXEsIHJlcywgY3R4LCBvcmdJZCwgdXNlcklkIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEb24ndCBzZW5kIGFub3RoZXIgcmVzcG9uc2UgaWYgb25lIHdhcyBhbHJlYWR5IHNlbnRcbiAgICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdSb3V0ZSBoYW5kbGVyIGVycm9yIGFmdGVyIHJlc3BvbnNlIHNlbnQnLCB7XG4gICAgICAgICAgcmVxdWVzdElkOiBjdHgucmVxdWVzdElkLFxuICAgICAgICAgIGVycm9yOiBzYWZlRXJyb3JGb3JMb2coZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBcHBFcnJvcikge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBlcnJvci5zdGF0dXNDb2RlID49IDQwMCAmJiBlcnJvci5zdGF0dXNDb2RlIDwgNjAwXG4gICAgICAgICAgPyBlcnJvci5zdGF0dXNDb2RlXG4gICAgICAgICAgOiA1MDA7XG4gICAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBzdGF0dXMsIGVycm9yLm1lc3NhZ2UsIGVycm9yLmNvZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBVbmhhbmRsZWQgZXJyb3Ig4oaSIDUwMC4gTkVWRVIgZWNobyB0aGUgcmF3IG1lc3NhZ2UgdG8gdGhlIGNsaWVudDogREIgZHJpdmVyXG4gICAgICAvLyBlcnJvcnMgY2FycnkgdGhlIFNRTCArIGJvdW5kIHBhcmFtcywgYW5kIENydWRTZXJ2aWNlIGRlbGliZXJhdGVseSBsZXRzIHRoZW1cbiAgICAgIC8vIHByb3BhZ2F0ZSBoZXJlLiBTZW5kIGEgZ2VuZXJpYyBtZXNzYWdlICsgcmVxdWVzdElkICh0byBjb3JyZWxhdGUgd2l0aCBsb2dzKSxcbiAgICAgIC8vIGFuZCBsb2cgb25seSBzYW5pdGl6ZWQgREIgbWV0YWRhdGEgKGNvZGUvY29uc3RyYWludC90YWJsZSDigJQgbm8gU1FML3BhcmFtcykuXG4gICAgICBjb25zdCBkYiA9IGV4dHJhY3REYkVycm9yKGVycm9yKTtcbiAgICAgIGN0eC5sb2coJ0VSUk9SJywgJ1JlcXVlc3QgZmFpbGVkJywge1xuICAgICAgICByZXF1ZXN0SWQ6IGN0eC5yZXF1ZXN0SWQsXG4gICAgICAgIGVycm9yOiBzYWZlRXJyb3JGb3JMb2coZXJyb3IpLFxuICAgICAgICAuLi4oT2JqZWN0LmtleXMoZGIpLmxlbmd0aCA/IHsgZGIgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNlbmRJbnRlcm5hbEVycm9yKHJlcywgJ0ludGVybmFsIHNlcnZlciBlcnJvcicsIHsgcmVxdWVzdElkOiBjdHgucmVxdWVzdElkIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGUtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGNBQWMsRUFDZCxTQUFTLEVBQ1QsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixZQUFZLEdBQ2IsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHOUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTdDOzs7OztHQUtHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBYztJQUNyQyxJQUFJLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUN4RSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxtQkFBbUIseUJBQXlCLENBQUM7SUFDdkUsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUE4QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsT0FBNEMsRUFDNUMsT0FBTyxHQUFxQixFQUFFO0lBRTlCLE1BQU0sRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXhDLE9BQU8sS0FBSyxFQUFFLEdBQVksRUFBRSxHQUFhLEVBQUUsRUFBRTtRQUMzQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUV6QyxJQUFJLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sY0FBYyxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysc0RBQXNEO1lBQ3RELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFO29CQUN0RCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7b0JBQ3hCLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDO2lCQUM5QixDQUFDLENBQUM7Z0JBQ0gsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLEtBQUssWUFBWSxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHO29CQUM5RCxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVU7b0JBQ2xCLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ1IsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBRUQsNkVBQTZFO1lBQzdFLDhFQUE4RTtZQUM5RSwrRUFBK0U7WUFDL0UsOEVBQThFO1lBQzlFLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtnQkFDakMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO2dCQUN4QixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQztnQkFDN0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHtcbiAgQXBwRXJyb3IsXG4gIGVycm9yTWVzc2FnZSxcbiAgZXh0cmFjdERiRXJyb3IsXG4gIHNlbmRFcnJvcixcbiAgc2VuZEJhZFJlcXVlc3QsXG4gIHNlbmRJbnRlcm5hbEVycm9yLFxuICBjcmVhdGVMb2dnZXIsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIFJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRDb250ZXh0IH0gZnJvbSAnLi9nZXQtY29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSAnLi9yZXF1ZXN0LXR5cGVzLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyb3V0ZS13cmFwcGVyJyk7XG5cbi8qKlxuICogQSBsb2ctc2FmZSByZW5kZXJpbmcgb2YgYW4gdW5rbm93biBlcnJvci4gZHJpenpsZS1vcm0ncyBgRHJpenpsZVF1ZXJ5RXJyb3JgXG4gKiBlbWJlZHMgdGhlIGZhaWxlZCBTUUwgc3RhdGVtZW50IEFORCB0aGUgYm91bmQgcGFyYW1ldGVyIHZhbHVlcyAocmVhbCBkYXRhKSBpblxuICogaXRzIGAubWVzc2FnZWAgKGBGYWlsZWQgcXVlcnk6IDxzcWw+XFxucGFyYW1zOiA8dmFsdWVzPmApLiBOZXZlciBwdXQgdGhhdCBpbiBhXG4gKiByZXNwb25zZSBvciBhIGxvZyBsaW5lIOKAlCBjb2xsYXBzZSBpdCB0byB0aGUgZXJyb3IgbmFtZS4gT3RoZXIgZXJyb3JzIGFyZSBzYWZlLlxuICovXG5mdW5jdGlvbiBzYWZlRXJyb3JGb3JMb2coZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ZhaWxlZCBxdWVyeTonKSkge1xuICAgIHJldHVybiBgJHtlcnJvci5uYW1lIHx8ICdEcml6emxlUXVlcnlFcnJvcid9OiBkYXRhYmFzZSBxdWVyeSBmYWlsZWRgO1xuICB9XG4gIHJldHVybiBlcnJvck1lc3NhZ2UoZXJyb3IpO1xufVxuXG4vKipcbiAqIENvbnRleHQgb2JqZWN0IHBhc3NlZCB0byBldmVyeSByb3V0ZSBoYW5kbGVyIHdyYXBwZWQgd2l0aCBgd2l0aFJvdXRlKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlQ29udGV4dCB7XG4gIC8qKiBPcmlnaW5hbCBFeHByZXNzIHJlcXVlc3QgKi9cbiAgcmVxOiBSZXF1ZXN0O1xuICAvKiogT3JpZ2luYWwgRXhwcmVzcyByZXNwb25zZSAqL1xuICByZXM6IFJlc3BvbnNlO1xuICAvKiogUmVxdWVzdCBjb250ZXh0IHdpdGggaWRlbnRpdHkgYW5kIGxvZ2dpbmcgKi9cbiAgY3R4OiBSZXF1ZXN0Q29udGV4dDtcbiAgLyoqIExvd2VyY2FzZWQgb3JnYW5pemF0aW9uIElEIChndWFyYW50ZWVkIG5vbi1lbXB0eSB3aGVuIHJlcXVpcmVPcmdJZCBpcyB0cnVlKSAqL1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogVXNlciBJRCBmcm9tIEpXVCAoZGVmYXVsdHMgdG8gZW1wdHkgc3RyaW5nKSAqL1xuICB1c2VySWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgd2l0aFJvdXRlKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhSb3V0ZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byByZXF1aXJlIG9yZ0lkIG9uIHRoZSByZXF1ZXN0LlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCByZXR1cm5zIDQwMCBpZiBvcmdJZCBpcyBtaXNzaW5nLlxuICAgKiBTZXQgdG8gZmFsc2UgZm9yIHJvdXRlcyB0aGF0IGRvbid0IG5lZWQgb3JnIGNvbnRleHQuXG4gICAqL1xuICByZXF1aXJlT3JnSWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdyYXAgYW4gYXN5bmMgcm91dGUgaGFuZGxlciB3aXRoIHN0YW5kYXJkIGJvaWxlcnBsYXRlLlxuICpcbiAqIEV4dHJhY3RzIGNvbnRleHQsIG9yZ0lkLCB1c2VySWQgZnJvbSB0aGUgcmVxdWVzdCwgdmFsaWRhdGVzIG9yZ0lkLFxuICogYW5kIGNhdGNoZXMgZXJyb3JzLiBUeXBlZCBgQXBwRXJyb3JgIHN1YmNsYXNzZXMgYXJlIGF1dG9tYXRpY2FsbHlcbiAqIG1hcHBlZCB0byB0aGUgY29ycmVjdCBIVFRQIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyIC0gQXN5bmMgZnVuY3Rpb24gcmVjZWl2aW5nIGEgUm91dGVDb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgRXhwcmVzcyBSZXF1ZXN0SGFuZGxlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByb3V0ZXIuZ2V0KCcvOmlkJywgd2l0aFJvdXRlKGFzeW5jICh7IHJlcSwgcmVzLCBjdHgsIG9yZ0lkIH0pID0+IHtcbiAqICAgY29uc3QgaWQgPSBnZXRQYXJhbShyZXEucGFyYW1zLCAnaWQnKTtcbiAqICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGlwZWxpbmVTZXJ2aWNlLmZpbmRCeUlkKGlkLCBvcmdJZCk7XG4gKiAgIGlmICghcmVzdWx0KSB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcignUGlwZWxpbmUgbm90IGZvdW5kJyk7XG4gKiAgIHJldHVybiBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyBwaXBlbGluZTogcmVzdWx0IH0pO1xuICogfSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUm91dGUoXG4gIGhhbmRsZXI6IChyYzogUm91dGVDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LFxuICBvcHRpb25zOiBXaXRoUm91dGVPcHRpb25zID0ge30sXG4pOiBSZXF1ZXN0SGFuZGxlciB7XG4gIGNvbnN0IHsgcmVxdWlyZU9yZ0lkID0gdHJ1ZSB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IGdldENvbnRleHQocmVxKTtcbiAgICBjb25zdCBvcmdJZCA9IGN0eC5pZGVudGl0eS5vcmdJZD8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCB1c2VySWQgPSBjdHguaWRlbnRpdHkudXNlcklkIHx8ICcnO1xuXG4gICAgaWYgKHJlcXVpcmVPcmdJZCAmJiAhb3JnSWQpIHtcbiAgICAgIHJldHVybiBzZW5kQmFkUmVxdWVzdChyZXMsICdPcmdhbml6YXRpb24gSUQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgaGFuZGxlcih7IHJlcSwgcmVzLCBjdHgsIG9yZ0lkLCB1c2VySWQgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvbid0IHNlbmQgYW5vdGhlciByZXNwb25zZSBpZiBvbmUgd2FzIGFscmVhZHkgc2VudFxuICAgICAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1JvdXRlIGhhbmRsZXIgZXJyb3IgYWZ0ZXIgcmVzcG9uc2Ugc2VudCcsIHtcbiAgICAgICAgICByZXF1ZXN0SWQ6IGN0eC5yZXF1ZXN0SWQsXG4gICAgICAgICAgZXJyb3I6IHNhZmVFcnJvckZvckxvZyhlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFwcEVycm9yKSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yLnN0YXR1c0NvZGUgPj0gNDAwICYmIGVycm9yLnN0YXR1c0NvZGUgPCA2MDBcbiAgICAgICAgICA/IGVycm9yLnN0YXR1c0NvZGVcbiAgICAgICAgICA6IDUwMDtcbiAgICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIHN0YXR1cywgZXJyb3IubWVzc2FnZSwgZXJyb3IuY29kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVuaGFuZGxlZCBlcnJvciDihpIgNTAwLiBORVZFUiBlY2hvIHRoZSByYXcgbWVzc2FnZSB0byB0aGUgY2xpZW50OiBEQiBkcml2ZXJcbiAgICAgIC8vIGVycm9ycyBjYXJyeSB0aGUgU1FMICsgYm91bmQgcGFyYW1zLCBhbmQgQ3J1ZFNlcnZpY2UgZGVsaWJlcmF0ZWx5IGxldHMgdGhlbVxuICAgICAgLy8gcHJvcGFnYXRlIGhlcmUuIFNlbmQgYSBnZW5lcmljIG1lc3NhZ2UgKyByZXF1ZXN0SWQgKHRvIGNvcnJlbGF0ZSB3aXRoIGxvZ3MpLFxuICAgICAgLy8gYW5kIGxvZyBvbmx5IHNhbml0aXplZCBEQiBtZXRhZGF0YSAoY29kZS9jb25zdHJhaW50L3RhYmxlIOKAlCBubyBTUUwvcGFyYW1zKS5cbiAgICAgIGNvbnN0IGRiID0gZXh0cmFjdERiRXJyb3IoZXJyb3IpO1xuICAgICAgY3R4LmxvZygnRVJST1InLCAnUmVxdWVzdCBmYWlsZWQnLCB7XG4gICAgICAgIHJlcXVlc3RJZDogY3R4LnJlcXVlc3RJZCxcbiAgICAgICAgZXJyb3I6IHNhZmVFcnJvckZvckxvZyhlcnJvciksXG4gICAgICAgIC4uLihPYmplY3Qua2V5cyhkYikubGVuZ3RoID8geyBkYiB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2VuZEludGVybmFsRXJyb3IocmVzLCAnSW50ZXJuYWwgc2VydmVyIGVycm9yJywgeyByZXF1ZXN0SWQ6IGN0eC5yZXF1ZXN0SWQgfSk7XG4gICAgfVxuICB9O1xufVxuIl19
package/lib/api/server.js CHANGED
@@ -231,4 +231,4 @@ export function runServer(app, options = {}) {
231
231
  process.exit(1);
232
232
  });
233
233
  }
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQWlCLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9GLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLHlDQUF5QztBQUN6QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUNqQyxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixJQUFJLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVyRzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsS0FBSyxVQUFVLHFCQUFxQixDQUNsQyxJQUFZLEVBQ1osYUFBZ0QsRUFDaEQsWUFBMEQsRUFDMUQsT0FBc0I7SUFFdEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQztRQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxhQUFhLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTtZQUNSLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLHlDQUF5QyxLQUFLLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3ZELE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN2RSxJQUFJLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQztJQUNwQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNsQixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFJLENBQUM7WUFDSCxFQUFFLEdBQUcsTUFBTSxLQUFLLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDckIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2YsU0FBUyxHQUFHLG1CQUFtQixDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLGlDQUFpQyxDQUFDLENBQUM7UUFDeEQsQ0FBQzthQUFNLElBQUksQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUM1QixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUkscURBQXFELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsd0VBQXdFO1FBQ3hFLDhDQUE4QztRQUM5QyxJQUFJLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDZCxNQUFNLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkIsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQXNDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUMvQixHQUFZLEVBQ1osVUFBOEIsRUFBRTtJQUVoQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sRUFDSixJQUFJLEdBQUcsY0FBYyxFQUNyQixVQUFVLEVBQ1YsaUJBQWlCLEdBQUcsS0FBSyxFQUN6QixPQUFPLEVBQ1AsVUFBVSxFQUNWLGFBQWEsRUFDYixZQUFZLEVBQ1osYUFBYSxHQUNkLEdBQUcsT0FBTyxDQUFDO0lBQ1osTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO0lBRS9DLDJFQUEyRTtJQUMzRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLENBQUM7SUFFbkMsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSwyQ0FBMkM7SUFDM0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWhCLDZFQUE2RTtJQUM3RSxzRUFBc0U7SUFDdEUsc0VBQXNFO0lBQ3RFLHlFQUF5RTtJQUN6RSwyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILHdEQUF3RDtJQUN4RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFekIsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsU0FBUztJQUNULHFCQUFxQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkRBQTZELEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxNQUFlLEVBQUUsRUFBRTtRQUN6QyxJQUFJLFlBQVk7WUFBRSxPQUFPO1FBQ3pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLHdDQUF3QyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNILE1BQU0sVUFBVSxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUVsQyxpQ0FBaUM7WUFDakMsTUFBTSxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVsRyw0QkFBNEI7WUFDNUIsSUFBSSxhQUFhLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQztvQkFDSCxJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQixNQUFNLGFBQWEsRUFBRSxDQUFDO29CQUN4QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxlQUFlLEVBQUUsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0JBQStCO1FBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRiwyQkFBMkI7SUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRXhELE9BQU87UUFDTCxNQUFNO1FBQ04sSUFBSTtRQUNKLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDM0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFZLEVBQUUsVUFBOEIsRUFBRTtJQUN0RSx5RUFBeUU7SUFDekUseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3hDLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLHFFQUFxRTtRQUNyRSw2RUFBNkU7UUFDN0UsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRTtZQUNyQyxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUM3RCxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztTQUN4RCxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgZXJyb3JNZXNzYWdlLCBpbnN0YWxsQ3Jhc2hIYW5kbGVycyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiwgY2xvc2VDb25uZWN0aW9uIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgdHlwZSB7IEV4cHJlc3MgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHNldFJlYWR5LCBpc1JlYWR5IH0gZnJvbSAnLi9yZWFkaW5lc3MuanMnO1xuaW1wb3J0IHsgc2h1dGRvd25UcmFjaW5nIH0gZnJvbSAnLi90cmFjaW5nLmpzJztcbmltcG9ydCB7IFNTRU1hbmFnZXIgfSBmcm9tICcuLi9odHRwL3NzZS1jb25uZWN0aW9uLW1hbmFnZXIuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3NlcnZlcicpO1xuXG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vLyBEZXBlbmRlbmN5LXN1cGVydmlzb3IgY2FkZW5jZS4gSW5pdGlhbCBjb25uZWN0IHJldHJpZXMgd2l0aCBjYXBwZWQgYmFja29mZjtcbi8vIG9uY2UgY29ubmVjdGVkLCByZS1jaGVja3MgYXQgYSBzdGVhZHkgaW50ZXJ2YWwgc28gYSBsYXRlciBvdXRhZ2UgZmxpcHMgdGhlXG4vLyBzZXJ2aWNlIE5vdFJlYWR5IChkcmFpbmluZyB0cmFmZmljKSBhbmQgYSByZWNvdmVyeSBmbGlwcyBpdCBiYWNrIOKAlCB3aXRob3V0XG4vLyBldmVyIGV4aXRpbmcgLyByZXN0YXJ0aW5nIHRoZSBwcm9jZXNzLlxuY29uc3QgUkVBRFlfUkVUUllfQkFTRV9NUyA9IDEwMDA7XG5jb25zdCBSRUFEWV9SRVRSWV9NQVhfTVMgPSAxMDAwMDtcbmNvbnN0IFJFQURZX01PTklUT1JfSU5URVJWQUxfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5SRUFESU5FU1NfTU9OSVRPUl9JTlRFUlZBTF9NUyB8fCAnMTUwMDAnLCAxMCk7XG5cbi8qKlxuICogRXN0YWJsaXNoIGFuZCBjb250aW51b3VzbHkgbW9uaXRvciB0aGUgc2VydmljZSdzIGRhdGFzdG9yZSBkZXBlbmRlbmN5LFxuICogZmxpcHBpbmcgcmVhZGluZXNzIHN0YXRlIGluc3RlYWQgb2YgY3Jhc2gtbG9vcGluZy5cbiAqXG4gKiAtIEVzdGFibGlzaCBwaGFzZTogcmV0cnkgYG9uQmVmb3JlU3RhcnRgIChlLmcuIGNvbm5lY3RNb25nbykgd2l0aCBjYXBwZWRcbiAqICAgYmFja29mZiB1bnRpbCBpdCBzdWNjZWVkcyDigJQgYSBjb2xkIGRhdGFzdG9yZSBtdXN0IG5ldmVyIGV4aXQgdGhlIHByb2Nlc3MuXG4gKiAtIE1vbml0b3IgcGhhc2U6IHBvbGwgYHRlc3REYXRhYmFzZWAgZm9yIHRoZSBsaWZlIG9mIHRoZSBwcm9jZXNzOyBmbGlwXG4gKiAgIHJlYWR5L05vdFJlYWR5IG9uIHRyYW5zaXRpb25zLiBXaGlsZSBOb3RSZWFkeSB0aGUgcmVhZGluZXNzIGd1YXJkIDUwM3NcbiAqICAgYnVzaW5lc3MgdHJhZmZpYyBhbmQgb3JjaGVzdHJhdG9yIHJlYWRpbmVzcyBwcm9iZXMgZHJhaW4gdGhlIGluc3RhbmNlLlxuICpcbiAqIFJ1bnMgaW4gdGhlIGJhY2tncm91bmQgKHRoZSBIVFRQIHNlcnZlciBpcyBhbHJlYWR5IGxpc3RlbmluZykuIFN0b3BzIHdoZW5cbiAqIGBhYm9ydGVkKClgIHJldHVybnMgdHJ1ZSAoZ3JhY2VmdWwgc2h1dGRvd24pLCBzbyBpdCBuZXZlciBrZWVwcyBhIGNsb3NpbmdcbiAqIHByb2Nlc3MgYWxpdmUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN1cGVydmlzZURlcGVuZGVuY2llcyhcbiAgbmFtZTogc3RyaW5nLFxuICBvbkJlZm9yZVN0YXJ0OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsXG4gIHRlc3REYXRhYmFzZTogKCgpID0+IFByb21pc2U8Ym9vbGVhbj4pIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIGFib3J0ZWQ6ICgpID0+IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG9uQmVmb3JlU3RhcnQpIHtcbiAgICBsZXQgZGVsYXkgPSBSRUFEWV9SRVRSWV9CQVNFX01TO1xuICAgIHdoaWxlICghYWJvcnRlZCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvbkJlZm9yZVN0YXJ0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYCR7bmFtZX06IGRlcGVuZGVuY3kgaW5pdCBmYWlsZWQsIHJldHJ5aW5nIGluICR7ZGVsYXl9bXNgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgICAgIGRlbGF5ID0gTWF0aC5taW4oZGVsYXkgKiAyLCBSRUFEWV9SRVRSWV9NQVhfTVMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vIGRhdGFzdG9yZSB0byBnYXRlIG9uIOKGkiByZWFkeSBhcyBzb29uIGFzIHdlIGFyZSBsaXN0ZW5pbmcuXG4gIGlmICh0ZXN0RGF0YWJhc2UgPT09IGZhbHNlKSB7XG4gICAgc2V0UmVhZHkodHJ1ZSk7XG4gICAgbG9nZ2VyLmluZm8oYCR7bmFtZX0gcmVhZHkgKG5vIGRhdGFzdG9yZSBkZXBlbmRlbmN5KWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb2JlID0gdGVzdERhdGFiYXNlID8/ICgoKSA9PiBnZXRDb25uZWN0aW9uKCkudGVzdENvbm5lY3Rpb24oKSk7XG4gIGxldCB3YWl0RGVsYXkgPSBSRUFEWV9SRVRSWV9CQVNFX01TO1xuICB3aGlsZSAoIWFib3J0ZWQoKSkge1xuICAgIGxldCBvayA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBvayA9IGF3YWl0IHByb2JlKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBvayA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChvayAmJiAhaXNSZWFkeSgpKSB7XG4gICAgICBzZXRSZWFkeSh0cnVlKTtcbiAgICAgIHdhaXREZWxheSA9IFJFQURZX1JFVFJZX0JBU0VfTVM7XG4gICAgICBsb2dnZXIuaW5mbyhgJHtuYW1lfSByZWFkeSDigJQgZGVwZW5kZW5jaWVzIGNvbm5lY3RlZGApO1xuICAgIH0gZWxzZSBpZiAoIW9rICYmIGlzUmVhZHkoKSkge1xuICAgICAgc2V0UmVhZHkoZmFsc2UpO1xuICAgICAgbG9nZ2VyLndhcm4oYCR7bmFtZX0gZGVncmFkZWQg4oCUIGRlcGVuZGVuY3kgY2hlY2sgZmFpbGluZyAobm93IE5vdFJlYWR5KWApO1xuICAgIH1cblxuICAgIC8vIFN0ZWFkeSBjYWRlbmNlIG9uY2UgcmVhZHk7IGZhc3RlciBiYWNrb2ZmIHdoaWxlIHdhaXRpbmcgc28gd2UgZmxpcCB0b1xuICAgIC8vIHJlYWR5IHByb21wdGx5IHdoZW4gdGhlIGRhdGFzdG9yZSBjb21lcyB1cC5cbiAgICBpZiAoaXNSZWFkeSgpKSB7XG4gICAgICBhd2FpdCBzbGVlcChSRUFEWV9NT05JVE9SX0lOVEVSVkFMX01TKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc2xlZXAod2FpdERlbGF5KTtcbiAgICAgIHdhaXREZWxheSA9IE1hdGgubWluKHdhaXREZWxheSAqIDIsIFJFQURZX1JFVFJZX01BWF9NUyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgYSBzZXJ2ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFydFNlcnZlck9wdGlvbnMge1xuICAvKiogU2VydmljZSBuYW1lIGZvciBsb2dnaW5nICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBQb3J0IHRvIGxpc3RlbiBvbiAoZGVmYXVsdDogZnJvbSBjb25maWcpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBTU0UgbWFuYWdlciBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gKi9cbiAgc3NlTWFuYWdlcj86IFNTRU1hbmFnZXI7XG4gIC8qKiBTaHV0ZG93biB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMTUwMDApICovXG4gIHNodXRkb3duVGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogQ2FsbGJhY2sgYWZ0ZXIgc2VydmVyIHN0YXJ0cyAqL1xuICBvblN0YXJ0PzogKHBvcnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIGJlZm9yZSBzaHV0ZG93biAqL1xuICBvblNodXRkb3duPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJ1bnMgYmVmb3JlIGRhdGFiYXNlIGNoZWNrIChlLmcuLCBpbml0aWFsaXplIGV4dGVybmFsIGNvbm5lY3Rpb25zKSAqL1xuICBvbkJlZm9yZVN0YXJ0PzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEN1c3RvbSBkYXRhYmFzZSBoZWFsdGggY2hlY2ssIG9yIGZhbHNlIHRvIHNraXAuIERlZmF1bHQ6IFBvc3RncmVTUUwgdGVzdENvbm5lY3Rpb24gKi9cbiAgdGVzdERhdGFiYXNlPzogKCgpID0+IFByb21pc2U8Ym9vbGVhbj4pIHwgZmFsc2U7XG4gIC8qKiBDdXN0b20gZGF0YWJhc2UgY2xvc2UsIG9yIGZhbHNlIHRvIHNraXAuIERlZmF1bHQ6IFBvc3RncmVTUUwgY2xvc2VDb25uZWN0aW9uICovXG4gIGNsb3NlRGF0YWJhc2U/OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygc3RhcnRpbmcgYSBzZXJ2ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFydFNlcnZlclJlc3VsdCB7XG4gIC8qKiBIVFRQIHNlcnZlciBpbnN0YW5jZSAqL1xuICBzZXJ2ZXI6IFNlcnZlcjtcbiAgLyoqIFBvcnQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24gKi9cbiAgcG9ydDogbnVtYmVyO1xuICAvKiogRnVuY3Rpb24gdG8gbWFudWFsbHkgdHJpZ2dlciBzaHV0ZG93biAqL1xuICBzaHV0ZG93bjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBTdGFydCBhbiBFeHByZXNzIHNlcnZlciB3aXRoIGdyYWNlZnVsIHNodXRkb3duIGhhbmRsaW5nXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBkYXRhYmFzZSBjb25uZWN0aW9uIHRlc3RpbmdcbiAqIC0gR3JhY2VmdWwgc2h1dGRvd24gb24gU0lHSU5UL1NJR1RFUk1cbiAqIC0gU1NFIGNvbm5lY3Rpb24gY2xlYW51cFxuICogLSBDb25maWd1cmFibGUgc2h1dGRvd24gdGltZW91dFxuICpcbiAqIEBwYXJhbSBhcHAgLSBFeHByZXNzIGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNlcnZlciBvcHRpb25zXG4gKiBAcmV0dXJucyBTZXJ2ZXIgaW5zdGFuY2UgYW5kIGNvbnRyb2wgZnVuY3Rpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHsgYXBwLCBzc2VNYW5hZ2VyIH0gPSBjcmVhdGVBcHAoKTtcbiAqXG4gKiBhcHAucG9zdCgnL2FwaS9yZXNvdXJjZScsIHJlcXVpcmVBdXRoLCBoYW5kbGVyKTtcbiAqXG4gKiBhd2FpdCBzdGFydFNlcnZlcihhcHAsIHtcbiAqICAgbmFtZTogJ015IE1pY3Jvc2VydmljZScsXG4gKiAgIHNzZU1hbmFnZXIsXG4gKiAgIG9uU3RhcnQ6IChwb3J0KSA9PiBjb25zb2xlLmxvZyhgTGlzdGVuaW5nIG9uICR7cG9ydH1gKSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlcihcbiAgYXBwOiBFeHByZXNzLFxuICBvcHRpb25zOiBTdGFydFNlcnZlck9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8U3RhcnRTZXJ2ZXJSZXN1bHQ+IHtcbiAgY29uc3Qgc2VydmVyQ29uZmlnID0gQ29uZmlnLmdldCgnc2VydmVyJyk7XG4gIGNvbnN0IHtcbiAgICBuYW1lID0gJ01pY3Jvc2VydmljZScsXG4gICAgc3NlTWFuYWdlcixcbiAgICBzaHV0ZG93blRpbWVvdXRNcyA9IDE1MDAwLFxuICAgIG9uU3RhcnQsXG4gICAgb25TaHV0ZG93bixcbiAgICBvbkJlZm9yZVN0YXJ0LFxuICAgIHRlc3REYXRhYmFzZSxcbiAgICBjbG9zZURhdGFiYXNlLFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcG9ydCA9IG9wdGlvbnMucG9ydCA/PyBzZXJ2ZXJDb25maWcucG9ydDtcblxuICAvLyBWYWxpZGF0ZSBhdXRoIGNvbmZpZ3VyYXRpb24gYXQgc2VydmVyIHN0YXJ0dXAgKG5vdCBkdXJpbmcgQ0RLIHN5bnRoZXNpcylcbiAgQ29uZmlnLnZhbGlkYXRlQXV0aCgpO1xuXG4gIGxvZ2dlci5pbmZvKGBTdGFydGluZyAke25hbWV9Li4uYCk7XG5cbiAgLy8gTWFyayBOb3RSZWFkeSBzeW5jaHJvbm91c2x5LCBCRUZPUkUgdGhlIHBvcnQgb3BlbnMsIHNvIG5vIHJlcXVlc3Qgc2xpcHNcbiAgLy8gdGhyb3VnaCB0aGUgcmVhZGluZXNzIGd1YXJkIGJlZm9yZSB0aGUgc3VwZXJ2aXNvciBoYXMgcnVuLiBUaGUgc3VwZXJ2aXNvclxuICAvLyBmbGlwcyBpdCB0cnVlIG9uY2UgZGVwZW5kZW5jaWVzIGNvbm5lY3QuXG4gIHNldFJlYWR5KGZhbHNlKTtcblxuICAvLyBMaXN0ZW4gRklSU1QuIFByZXZpb3VzbHkgdGhlIHByb2Nlc3MgdGVzdGVkIHRoZSBEQiBhbmQgYHByb2Nlc3MuZXhpdCgxKWAnZFxuICAvLyBvbiBmYWlsdXJlICh0byBiZSByZXN0YXJ0ZWQpLCBzbyBkdXJpbmcgYSBjb2xkLURCIHN0YW1wZWRlIHNlcnZpY2VzXG4gIC8vIGNyYXNoLWxvb3BlZCBhbmQgbmV2ZXIgZXZlbiBvcGVuZWQgdGhlaXIgcG9ydC4gTm93IHdlIG9wZW4gdGhlIHBvcnRcbiAgLy8gaW1tZWRpYXRlbHkg4oCUIC9oZWFsdGggKGxpdmVuZXNzKSwgL3JlYWR5IChyZWFkaW5lc3MpIGFuZCB0aGUgcmVhZGluZXNzXG4gIC8vIGd1YXJkIGFsbCByZXNwb25kIGF0IG9uY2Ug4oCUIGFuZCBlc3RhYmxpc2ggKyBtb25pdG9yIHRoZSBkYXRhc3RvcmUgaW4gdGhlXG4gIC8vIGJhY2tncm91bmQsIHJlcG9ydGluZyBOb3RSZWFkeSB1bnRpbCBpdCBjb25uZWN0cyBpbnN0ZWFkIG9mIGV4aXRpbmcuXG4gIGNvbnN0IHNlcnZlciA9IGFwcC5saXN0ZW4ocG9ydCwgKCkgPT4ge1xuICAgIGxvZ2dlci5pbmZvKGAke25hbWV9IGxpc3RlbmluZyBvbiBwb3J0OiAke3BvcnR9YCk7XG4gICAgbG9nZ2VyLmluZm8oYFBsYXRmb3JtIFVSTDogJHtzZXJ2ZXJDb25maWcucGxhdGZvcm1Vcmx9YCk7XG4gICAgb25TdGFydD8uKHBvcnQpO1xuICB9KTtcblxuICAvLyBTaHV0ZG93biBoYW5kbGVyIChndWFyZGVkIGFnYWluc3QgY29uY3VycmVudCBzaWduYWxzKVxuICBsZXQgc2h1dHRpbmdEb3duID0gZmFsc2U7XG5cbiAgLy8gQmFja2dyb3VuZCBkZXBlbmRlbmN5IHN1cGVydmlzb3Ig4oCUIGVzdGFibGlzaGVkICsgbW9uaXRvcmVkIGFmdGVyIGxpc3RlbixcbiAgLy8gc3RvcHBlZCBvbiBzaHV0ZG93biBzbyBpdCBuZXZlciBrZWVwcyBhIGNsb3NpbmcgcHJvY2VzcyBhbGl2ZS4gR3VhcmQgdGhlXG4gIC8vIGZsb2F0aW5nIHByb21pc2U6IGV2ZXJ5IGV4cGVjdGVkIGZhaWx1cmUgaXMgaGFuZGxlZCBpbnNpZGUsIHNvIGEgcmVqZWN0aW9uXG4gIC8vIGhlcmUgbWVhbnMgYSBwcm9ncmFtbWluZyBlcnJvciDigJQgbG9nIGl0IGFuZCBsZWF2ZSB0aGUgc2VydmljZSBOb3RSZWFkeVxuICAvLyByYXRoZXIgdGhhbiBsZXR0aW5nIGl0IGJlY29tZSBhbiB1bmhhbmRsZWRSZWplY3Rpb24gdGhhdCBjcmFzaC1leGl0cyB0aGVcbiAgLy8gcHJvY2VzcyAod2hpY2ggd291bGQgZGVmZWF0IHRoZSB3aG9sZSBcIm5ldmVyIGV4aXQgb24gZGVwZW5kZW5jeSB0cm91YmxlXCJcbiAgLy8gZ29hbCkuXG4gIHN1cGVydmlzZURlcGVuZGVuY2llcyhuYW1lLCBvbkJlZm9yZVN0YXJ0LCB0ZXN0RGF0YWJhc2UsICgpID0+IHNodXR0aW5nRG93bikuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKCdEZXBlbmRlbmN5IHN1cGVydmlzb3IgY3Jhc2hlZDsgc2VydmljZSB3aWxsIHJlbWFpbiBOb3RSZWFkeScsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHNodXRkb3duID0gYXN5bmMgKHNpZ25hbD86IHN0cmluZykgPT4ge1xuICAgIGlmIChzaHV0dGluZ0Rvd24pIHJldHVybjtcbiAgICBzaHV0dGluZ0Rvd24gPSB0cnVlO1xuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgbG9nZ2VyLmluZm8oYCR7c2lnbmFsfSByZWNlaXZlZCwgc2h1dHRpbmcgZG93biBncmFjZWZ1bGx5Li4uYCk7XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9tIHNodXRkb3duIGNhbGxiYWNrXG4gICAgaWYgKG9uU2h1dGRvd24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9uU2h1dGRvd24oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgaW4gb25TaHV0ZG93biBjYWxsYmFjaycsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgU1NFIGNvbm5lY3Rpb25zXG4gICAgaWYgKHNzZU1hbmFnZXIpIHtcbiAgICAgIHNzZU1hbmFnZXIuc2h1dGRvd24oKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdTU0UgY29ubmVjdGlvbnMgY2xvc2VkJyk7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgSFRUUCBzZXJ2ZXJcbiAgICBzZXJ2ZXIuY2xvc2UoYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oJ0hUVFAgc2VydmVyIGNsb3NlZCcpO1xuXG4gICAgICAvLyBTaHV0ZG93biBPcGVuVGVsZW1ldHJ5IHRyYWNpbmdcbiAgICAgIGF3YWl0IHNodXRkb3duVHJhY2luZygpLmNhdGNoKGVyciA9PiBsb2dnZXIuZXJyb3IoJ0Vycm9yIHNodXR0aW5nIGRvd24gdHJhY2luZycsIHsgZXJyb3I6IGVyciB9KSk7XG5cbiAgICAgIC8vIENsb3NlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAgICAgIGlmIChjbG9zZURhdGFiYXNlICE9PSBmYWxzZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChjbG9zZURhdGFiYXNlKSB7XG4gICAgICAgICAgICBhd2FpdCBjbG9zZURhdGFiYXNlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IGNsb3NlQ29ubmVjdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiBjbG9zZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNsb3NpbmcgZGF0YWJhc2UnLCB7IGVycm9yIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9KTtcblxuICAgIC8vIEZvcmNlIHNodXRkb3duIGFmdGVyIHRpbWVvdXRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcignRm9yY2VkIHNodXRkb3duIGFmdGVyIHRpbWVvdXQnKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9LCBzaHV0ZG93blRpbWVvdXRNcykudW5yZWYoKTtcbiAgfTtcblxuICAvLyBSZWdpc3RlciBzaWduYWwgaGFuZGxlcnNcbiAgcHJvY2Vzcy5vbmNlKCdTSUdJTlQnLCAoKSA9PiB2b2lkIHNodXRkb3duKCdTSUdJTlQnKSk7XG4gIHByb2Nlc3Mub25jZSgnU0lHVEVSTScsICgpID0+IHZvaWQgc2h1dGRvd24oJ1NJR1RFUk0nKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzZXJ2ZXIsXG4gICAgcG9ydCxcbiAgICBzaHV0ZG93bjogKCkgPT4gc2h1dGRvd24oKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTaW1wbGUgc2VydmVyIHN0YXJ0IHdyYXBwZXIgd2l0aCBlcnJvciBoYW5kbGluZ1xuICpcbiAqIEBwYXJhbSBhcHAgLSBFeHByZXNzIGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNlcnZlciBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHsgYXBwLCBzc2VNYW5hZ2VyIH0gPSBjcmVhdGVBcHAoKTtcbiAqIGFwcC5wb3N0KCcvYXBpL3Jlc291cmNlJywgaGFuZGxlcik7XG4gKlxuICogdm9pZCBydW5TZXJ2ZXIoYXBwLCB7IG5hbWU6ICdNeSBTZXJ2aWNlJywgc3NlTWFuYWdlciB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2VydmVyKGFwcDogRXhwcmVzcywgb3B0aW9uczogU3RhcnRTZXJ2ZXJPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgLy8gTGFzdC1yZXNvcnQgZmF1bHQgaGFuZGxlcnMgZm9yIHRoZSBwcm9kdWN0aW9uIGVudHJ5cG9pbnQ6IGFuIHVuaGFuZGxlZFxuICAvLyByZWplY3Rpb24gLyB1bmNhdWdodCBleGNlcHRpb24gaXMgbG9nZ2VkIChub3Qgc2lsZW50bHkgZmF0YWwpIHRoZW4gdGhlXG4gIC8vIHByb2Nlc3MgZXhpdHMgZm9yIHRoZSBvcmNoZXN0cmF0b3IgdG8gcmVzdGFydC4gTm8tb3AgdW5kZXIgTk9ERV9FTlY9dGVzdC5cbiAgaW5zdGFsbENyYXNoSGFuZGxlcnMobG9nZ2VyKTtcbiAgc3RhcnRTZXJ2ZXIoYXBwLCBvcHRpb25zKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAvLyBzdGFydFNlcnZlciBub3cgbGlzdGVucy1maXJzdCBhbmQgc3VwZXJ2aXNlcyB0aGUgREIgaW4gdGhlIGJhY2tncm91bmQsIHNvXG4gICAgLy8gaXQgb25seSByZWplY3RzIG9uIGEgZ2VudWluZWx5IGZhdGFsIFNFVFVQIGVycm9yIChpbnZhbGlkIGF1dGggY29uZmlnLCBhXG4gICAgLy8gZmFpbGVkIG9uU3RhcnQsIHRoZSBwb3J0IGFscmVhZHkgaW4gdXNlKS4gTG9nIG1lc3NhZ2UgKyBzdGFjayBleHBsaWNpdGx5OlxuICAgIC8vIGFuIEVycm9yIGluIHdpbnN0b24gbWV0YWRhdGEgc2VyaWFsaXplcyB0byBge31gIChtZXNzYWdlL3N0YWNrIGFyZVxuICAgIC8vIG5vbi1lbnVtZXJhYmxlKSwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGhpZGUgdGhlIGNhdXNlIGJlaGluZCBge2Vycm9yOnt9fWAuXG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgc2VydmVyJywge1xuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcbn1cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQWlCLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9GLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLHlDQUF5QztBQUN6QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUNqQyxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixJQUFJLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVyRzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsS0FBSyxVQUFVLHFCQUFxQixD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QUN4Qyw0RUFBNEU7UUFDNUUsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxxRUFBcUU7UUFDckUsNkVBQTZFO1FBQzdFLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7WUFDckMsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDN0QsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDeEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIGVycm9yTWVzc2FnZSwgaW5zdGFsbENyYXNoSGFuZGxlcnMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB7IGdldENvbm5lY3Rpb24sIGNsb3NlQ29ubmVjdGlvbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHR5cGUgeyBFeHByZXNzIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBzZXRSZWFkeSwgaXNSZWFkeSB9IGZyb20gJy4vcmVhZGluZXNzLmpzJztcbmltcG9ydCB7IHNodXRkb3duVHJhY2luZyB9IGZyb20gJy4vdHJhY2luZy5qcyc7XG5pbXBvcnQgeyBTU0VNYW5hZ2VyIH0gZnJvbSAnLi4vaHR0cC9zc2UtY29ubmVjdGlvbi1tYW5hZ2VyLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzZXJ2ZXInKTtcblxuY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcblxuLy8gRGVwZW5kZW5jeS1zdXBlcnZpc29yIGNhZGVuY2UuIEluaXRpYWwgY29ubmVjdCByZXRyaWVzIHdpdGggY2FwcGVkIGJhY2tvZmY7XG4vLyBvbmNlIGNvbm5lY3RlZCwgcmUtY2hlY2tzIGF0IGEgc3RlYWR5IGludGVydmFsIHNvIGEgbGF0ZXIgb3V0YWdlIGZsaXBzIHRoZVxuLy8gc2VydmljZSBOb3RSZWFkeSAoZHJhaW5pbmcgdHJhZmZpYykgYW5kIGEgcmVjb3ZlcnkgZmxpcHMgaXQgYmFjayDigJQgd2l0aG91dFxuLy8gZXZlciBleGl0aW5nIC8gcmVzdGFydGluZyB0aGUgcHJvY2Vzcy5cbmNvbnN0IFJFQURZX1JFVFJZX0JBU0VfTVMgPSAxMDAwO1xuY29uc3QgUkVBRFlfUkVUUllfTUFYX01TID0gMTAwMDA7XG5jb25zdCBSRUFEWV9NT05JVE9SX0lOVEVSVkFMX01TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUkVBRElORVNTX01PTklUT1JfSU5URVJWQUxfTVMgfHwgJzE1MDAwJywgMTApO1xuXG4vKipcbiAqIEVzdGFibGlzaCBhbmQgY29udGludW91c2x5IG1vbml0b3IgdGhlIHNlcnZpY2UncyBkYXRhc3RvcmUgZGVwZW5kZW5jeSxcbiAqIGZsaXBwaW5nIHJlYWRpbmVzcyBzdGF0ZSBpbnN0ZWFkIG9mIGNyYXNoLWxvb3BpbmcuXG4gKlxuICogLSBFc3RhYmxpc2ggcGhhc2U6IHJldHJ5IGBvbkJlZm9yZVN0YXJ0YCAoZS5nLiBjb25uZWN0TW9uZ28pIHdpdGggY2FwcGVkXG4gKiAgIGJhY2tvZmYgdW50aWwgaXQgc3VjY2VlZHMg4oCUIGEgY29sZCBkYXRhc3RvcmUgbXVzdCBuZXZlciBleGl0IHRoZSBwcm9jZXNzLlxuICogLSBNb25pdG9yIHBoYXNlOiBwb2xsIGB0ZXN0RGF0YWJhc2VgIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2VzczsgZmxpcFxuICogICByZWFkeS9Ob3RSZWFkeSBvbiB0cmFuc2l0aW9ucy4gV2hpbGUgTm90UmVhZHkgdGhlIHJlYWRpbmVzcyBndWFyZCA1MDNzXG4gKiAgIGJ1c2luZXNzIHRyYWZmaWMgYW5kIG9yY2hlc3RyYXRvciByZWFkaW5lc3MgcHJvYmVzIGRyYWluIHRoZSBpbnN0YW5jZS5cbiAqXG4gKiBSdW5zIGluIHRoZSBiYWNrZ3JvdW5kICh0aGUgSFRUUCBzZXJ2ZXIgaXMgYWxyZWFkeSBsaXN0ZW5pbmcpLiBTdG9wcyB3aGVuXG4gKiBgYWJvcnRlZCgpYCByZXR1cm5zIHRydWUgKGdyYWNlZnVsIHNodXRkb3duKSwgc28gaXQgbmV2ZXIga2VlcHMgYSBjbG9zaW5nXG4gKiBwcm9jZXNzIGFsaXZlLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdXBlcnZpc2VEZXBlbmRlbmNpZXMoXG4gIG5hbWU6IHN0cmluZyxcbiAgb25CZWZvcmVTdGFydDogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgdW5kZWZpbmVkLFxuICB0ZXN0RGF0YWJhc2U6ICgoKSA9PiBQcm9taXNlPGJvb2xlYW4+KSB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICBhYm9ydGVkOiAoKSA9PiBib29sZWFuLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChvbkJlZm9yZVN0YXJ0KSB7XG4gICAgbGV0IGRlbGF5ID0gUkVBRFlfUkVUUllfQkFTRV9NUztcbiAgICB3aGlsZSAoIWFib3J0ZWQoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb25CZWZvcmVTdGFydCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGAke25hbWV9OiBkZXBlbmRlbmN5IGluaXQgZmFpbGVkLCByZXRyeWluZyBpbiAke2RlbGF5fW1zYCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgICAgYXdhaXQgc2xlZXAoZGVsYXkpO1xuICAgICAgICBkZWxheSA9IE1hdGgubWluKGRlbGF5ICogMiwgUkVBRFlfUkVUUllfTUFYX01TKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBObyBkYXRhc3RvcmUgdG8gZ2F0ZSBvbiDihpIgcmVhZHkgYXMgc29vbiBhcyB3ZSBhcmUgbGlzdGVuaW5nLlxuICBpZiAodGVzdERhdGFiYXNlID09PSBmYWxzZSkge1xuICAgIHNldFJlYWR5KHRydWUpO1xuICAgIGxvZ2dlci5pbmZvKGAke25hbWV9IHJlYWR5IChubyBkYXRhc3RvcmUgZGVwZW5kZW5jeSlgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm9iZSA9IHRlc3REYXRhYmFzZSA/PyAoKCkgPT4gZ2V0Q29ubmVjdGlvbigpLnRlc3RDb25uZWN0aW9uKCkpO1xuICBsZXQgd2FpdERlbGF5ID0gUkVBRFlfUkVUUllfQkFTRV9NUztcbiAgd2hpbGUgKCFhYm9ydGVkKCkpIHtcbiAgICBsZXQgb2sgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgb2sgPSBhd2FpdCBwcm9iZSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgb2sgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAob2sgJiYgIWlzUmVhZHkoKSkge1xuICAgICAgc2V0UmVhZHkodHJ1ZSk7XG4gICAgICB3YWl0RGVsYXkgPSBSRUFEWV9SRVRSWV9CQVNFX01TO1xuICAgICAgbG9nZ2VyLmluZm8oYCR7bmFtZX0gcmVhZHkg4oCUIGRlcGVuZGVuY2llcyBjb25uZWN0ZWRgKTtcbiAgICB9IGVsc2UgaWYgKCFvayAmJiBpc1JlYWR5KCkpIHtcbiAgICAgIHNldFJlYWR5KGZhbHNlKTtcbiAgICAgIGxvZ2dlci53YXJuKGAke25hbWV9IGRlZ3JhZGVkIOKAlCBkZXBlbmRlbmN5IGNoZWNrIGZhaWxpbmcgKG5vdyBOb3RSZWFkeSlgKTtcbiAgICB9XG5cbiAgICAvLyBTdGVhZHkgY2FkZW5jZSBvbmNlIHJlYWR5OyBmYXN0ZXIgYmFja29mZiB3aGlsZSB3YWl0aW5nIHNvIHdlIGZsaXAgdG9cbiAgICAvLyByZWFkeSBwcm9tcHRseSB3aGVuIHRoZSBkYXRhc3RvcmUgY29tZXMgdXAuXG4gICAgaWYgKGlzUmVhZHkoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoUkVBRFlfTU9OSVRPUl9JTlRFUlZBTF9NUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHNsZWVwKHdhaXREZWxheSk7XG4gICAgICB3YWl0RGVsYXkgPSBNYXRoLm1pbih3YWl0RGVsYXkgKiAyLCBSRUFEWV9SRVRSWV9NQVhfTVMpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIGEgc2VydmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRTZXJ2ZXJPcHRpb25zIHtcbiAgLyoqIFNlcnZpY2UgbmFtZSBmb3IgbG9nZ2luZyAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogUG9ydCB0byBsaXN0ZW4gb24gKGRlZmF1bHQ6IGZyb20gY29uZmlnKSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogU1NFIG1hbmFnZXIgZm9yIGdyYWNlZnVsIHNodXRkb3duICovXG4gIHNzZU1hbmFnZXI/OiBTU0VNYW5hZ2VyO1xuICAvKiogU2h1dGRvd24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDE1MDAwKSAqL1xuICBzaHV0ZG93blRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIENhbGxiYWNrIGFmdGVyIHNlcnZlciBzdGFydHMgKi9cbiAgb25TdGFydD86IChwb3J0OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayBiZWZvcmUgc2h1dGRvd24gKi9cbiAgb25TaHV0ZG93bj86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBSdW5zIGJlZm9yZSBkYXRhYmFzZSBjaGVjayAoZS5nLiwgaW5pdGlhbGl6ZSBleHRlcm5hbCBjb25uZWN0aW9ucykgKi9cbiAgb25CZWZvcmVTdGFydD86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBDdXN0b20gZGF0YWJhc2UgaGVhbHRoIGNoZWNrLCBvciBmYWxzZSB0byBza2lwLiBEZWZhdWx0OiBQb3N0Z3JlU1FMIHRlc3RDb25uZWN0aW9uICovXG4gIHRlc3REYXRhYmFzZT86ICgoKSA9PiBQcm9taXNlPGJvb2xlYW4+KSB8IGZhbHNlO1xuICAvKiogQ3VzdG9tIGRhdGFiYXNlIGNsb3NlLCBvciBmYWxzZSB0byBza2lwLiBEZWZhdWx0OiBQb3N0Z3JlU1FMIGNsb3NlQ29ubmVjdGlvbiAqL1xuICBjbG9zZURhdGFiYXNlPzogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgZmFsc2U7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIGEgc2VydmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRTZXJ2ZXJSZXN1bHQge1xuICAvKiogSFRUUCBzZXJ2ZXIgaW5zdGFuY2UgKi9cbiAgc2VydmVyOiBTZXJ2ZXI7XG4gIC8qKiBQb3J0IHRoZSBzZXJ2ZXIgaXMgbGlzdGVuaW5nIG9uICovXG4gIHBvcnQ6IG51bWJlcjtcbiAgLyoqIEZ1bmN0aW9uIHRvIG1hbnVhbGx5IHRyaWdnZXIgc2h1dGRvd24gKi9cbiAgc2h1dGRvd246ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogU3RhcnQgYW4gRXhwcmVzcyBzZXJ2ZXIgd2l0aCBncmFjZWZ1bCBzaHV0ZG93biBoYW5kbGluZ1xuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgZGF0YWJhc2UgY29ubmVjdGlvbiB0ZXN0aW5nXG4gKiAtIEdyYWNlZnVsIHNodXRkb3duIG9uIFNJR0lOVC9TSUdURVJNXG4gKiAtIFNTRSBjb25uZWN0aW9uIGNsZWFudXBcbiAqIC0gQ29uZmlndXJhYmxlIHNodXRkb3duIHRpbWVvdXRcbiAqXG4gKiBAcGFyYW0gYXBwIC0gRXhwcmVzcyBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXJ2ZXIgb3B0aW9uc1xuICogQHJldHVybnMgU2VydmVyIGluc3RhbmNlIGFuZCBjb250cm9sIGZ1bmN0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IGFwcCwgc3NlTWFuYWdlciB9ID0gY3JlYXRlQXBwKCk7XG4gKlxuICogYXBwLnBvc3QoJy9hcGkvcmVzb3VyY2UnLCByZXF1aXJlQXV0aCwgaGFuZGxlcik7XG4gKlxuICogYXdhaXQgc3RhcnRTZXJ2ZXIoYXBwLCB7XG4gKiAgIG5hbWU6ICdNeSBNaWNyb3NlcnZpY2UnLFxuICogICBzc2VNYW5hZ2VyLFxuICogICBvblN0YXJ0OiAocG9ydCkgPT4gY29uc29sZS5sb2coYExpc3RlbmluZyBvbiAke3BvcnR9YCksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXIoXG4gIGFwcDogRXhwcmVzcyxcbiAgb3B0aW9uczogU3RhcnRTZXJ2ZXJPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFN0YXJ0U2VydmVyUmVzdWx0PiB7XG4gIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICBjb25zdCB7XG4gICAgbmFtZSA9ICdNaWNyb3NlcnZpY2UnLFxuICAgIHNzZU1hbmFnZXIsXG4gICAgc2h1dGRvd25UaW1lb3V0TXMgPSAxNTAwMCxcbiAgICBvblN0YXJ0LFxuICAgIG9uU2h1dGRvd24sXG4gICAgb25CZWZvcmVTdGFydCxcbiAgICB0ZXN0RGF0YWJhc2UsXG4gICAgY2xvc2VEYXRhYmFzZSxcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgPz8gc2VydmVyQ29uZmlnLnBvcnQ7XG5cbiAgLy8gVmFsaWRhdGUgYXV0aCBjb25maWd1cmF0aW9uIGF0IHNlcnZlciBzdGFydHVwIChub3QgZHVyaW5nIENESyBzeW50aGVzaXMpXG4gIENvbmZpZy52YWxpZGF0ZUF1dGgoKTtcblxuICBsb2dnZXIuaW5mbyhgU3RhcnRpbmcgJHtuYW1lfS4uLmApO1xuXG4gIC8vIE1hcmsgTm90UmVhZHkgc3luY2hyb25vdXNseSwgQkVGT1JFIHRoZSBwb3J0IG9wZW5zLCBzbyBubyByZXF1ZXN0IHNsaXBzXG4gIC8vIHRocm91Z2ggdGhlIHJlYWRpbmVzcyBndWFyZCBiZWZvcmUgdGhlIHN1cGVydmlzb3IgaGFzIHJ1bi4gVGhlIHN1cGVydmlzb3JcbiAgLy8gZmxpcHMgaXQgdHJ1ZSBvbmNlIGRlcGVuZGVuY2llcyBjb25uZWN0LlxuICBzZXRSZWFkeShmYWxzZSk7XG5cbiAgLy8gTGlzdGVuIEZJUlNULiBQcmV2aW91c2x5IHRoZSBwcm9jZXNzIHRlc3RlZCB0aGUgREIgYW5kIGBwcm9jZXNzLmV4aXQoMSlgJ2RcbiAgLy8gb24gZmFpbHVyZSAodG8gYmUgcmVzdGFydGVkKSwgc28gZHVyaW5nIGEgY29sZC1EQiBzdGFtcGVkZSBzZXJ2aWNlc1xuICAvLyBjcmFzaC1sb29wZWQgYW5kIG5ldmVyIGV2ZW4gb3BlbmVkIHRoZWlyIHBvcnQuIE5vdyB3ZSBvcGVuIHRoZSBwb3J0XG4gIC8vIGltbWVkaWF0ZWx5IOKAlCAvaGVhbHRoIChsaXZlbmVzcyksIC9yZWFkeSAocmVhZGluZXNzKSBhbmQgdGhlIHJlYWRpbmVzc1xuICAvLyBndWFyZCBhbGwgcmVzcG9uZCBhdCBvbmNlIOKAlCBhbmQgZXN0YWJsaXNoICsgbW9uaXRvciB0aGUgZGF0YXN0b3JlIGluIHRoZVxuICAvLyBiYWNrZ3JvdW5kLCByZXBvcnRpbmcgTm90UmVhZHkgdW50aWwgaXQgY29ubmVjdHMgaW5zdGVhZCBvZiBleGl0aW5nLlxuICBjb25zdCBzZXJ2ZXIgPSBhcHAubGlzdGVuKHBvcnQsICgpID0+IHtcbiAgICBsb2dnZXIuaW5mbyhgJHtuYW1lfSBsaXN0ZW5pbmcgb24gcG9ydDogJHtwb3J0fWApO1xuICAgIGxvZ2dlci5pbmZvKGBQbGF0Zm9ybSBVUkw6ICR7c2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsfWApO1xuICAgIG9uU3RhcnQ/Lihwb3J0KTtcbiAgfSk7XG5cbiAgLy8gU2h1dGRvd24gaGFuZGxlciAoZ3VhcmRlZCBhZ2FpbnN0IGNvbmN1cnJlbnQgc2lnbmFscylcbiAgbGV0IHNodXR0aW5nRG93biA9IGZhbHNlO1xuXG4gIC8vIEJhY2tncm91bmQgZGVwZW5kZW5jeSBzdXBlcnZpc29yIOKAlCBlc3RhYmxpc2hlZCArIG1vbml0b3JlZCBhZnRlciBsaXN0ZW4sXG4gIC8vIHN0b3BwZWQgb24gc2h1dGRvd24gc28gaXQgbmV2ZXIga2VlcHMgYSBjbG9zaW5nIHByb2Nlc3MgYWxpdmUuIEd1YXJkIHRoZVxuICAvLyBmbG9hdGluZyBwcm9taXNlOiBldmVyeSBleHBlY3RlZCBmYWlsdXJlIGlzIGhhbmRsZWQgaW5zaWRlLCBzbyBhIHJlamVjdGlvblxuICAvLyBoZXJlIG1lYW5zIGEgcHJvZ3JhbW1pbmcgZXJyb3Ig4oCUIGxvZyBpdCBhbmQgbGVhdmUgdGhlIHNlcnZpY2UgTm90UmVhZHlcbiAgLy8gcmF0aGVyIHRoYW4gbGV0dGluZyBpdCBiZWNvbWUgYW4gdW5oYW5kbGVkUmVqZWN0aW9uIHRoYXQgY3Jhc2gtZXhpdHMgdGhlXG4gIC8vIHByb2Nlc3MgKHdoaWNoIHdvdWxkIGRlZmVhdCB0aGUgd2hvbGUgXCJuZXZlciBleGl0IG9uIGRlcGVuZGVuY3kgdHJvdWJsZVwiXG4gIC8vIGdvYWwpLlxuICBzdXBlcnZpc2VEZXBlbmRlbmNpZXMobmFtZSwgb25CZWZvcmVTdGFydCwgdGVzdERhdGFiYXNlLCAoKSA9PiBzaHV0dGluZ0Rvd24pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGxvZ2dlci5lcnJvcignRGVwZW5kZW5jeSBzdXBlcnZpc29yIGNyYXNoZWQ7IHNlcnZpY2Ugd2lsbCByZW1haW4gTm90UmVhZHknLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICB9KTtcblxuICBjb25zdCBzaHV0ZG93biA9IGFzeW5jIChzaWduYWw/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoc2h1dHRpbmdEb3duKSByZXR1cm47XG4gICAgc2h1dHRpbmdEb3duID0gdHJ1ZTtcblxuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGAke3NpZ25hbH0gcmVjZWl2ZWQsIHNodXR0aW5nIGRvd24gZ3JhY2VmdWxseS4uLmApO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBzaHV0ZG93biBjYWxsYmFja1xuICAgIGlmIChvblNodXRkb3duKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvblNodXRkb3duKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGluIG9uU2h1dGRvd24gY2FsbGJhY2snLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsb3NlIFNTRSBjb25uZWN0aW9uc1xuICAgIGlmIChzc2VNYW5hZ2VyKSB7XG4gICAgICBzc2VNYW5hZ2VyLnNodXRkb3duKCk7XG4gICAgICBsb2dnZXIuaW5mbygnU1NFIGNvbm5lY3Rpb25zIGNsb3NlZCcpO1xuICAgIH1cblxuICAgIC8vIENsb3NlIEhUVFAgc2VydmVyXG4gICAgc2VydmVyLmNsb3NlKGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKCdIVFRQIHNlcnZlciBjbG9zZWQnKTtcblxuICAgICAgLy8gU2h1dGRvd24gT3BlblRlbGVtZXRyeSB0cmFjaW5nXG4gICAgICBhd2FpdCBzaHV0ZG93blRyYWNpbmcoKS5jYXRjaChlcnIgPT4gbG9nZ2VyLmVycm9yKCdFcnJvciBzaHV0dGluZyBkb3duIHRyYWNpbmcnLCB7IGVycm9yOiBlcnIgfSkpO1xuXG4gICAgICAvLyBDbG9zZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gICAgICBpZiAoY2xvc2VEYXRhYmFzZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoY2xvc2VEYXRhYmFzZSkge1xuICAgICAgICAgICAgYXdhaXQgY2xvc2VEYXRhYmFzZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBjbG9zZUNvbm5lY3Rpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gY2xvc2VkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjbG9zaW5nIGRhdGFiYXNlJywgeyBlcnJvciB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSk7XG5cbiAgICAvLyBGb3JjZSBzaHV0ZG93biBhZnRlciB0aW1lb3V0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZvcmNlZCBzaHV0ZG93biBhZnRlciB0aW1lb3V0Jyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSwgc2h1dGRvd25UaW1lb3V0TXMpLnVucmVmKCk7XG4gIH07XG5cbiAgLy8gUmVnaXN0ZXIgc2lnbmFsIGhhbmRsZXJzXG4gIHByb2Nlc3Mub25jZSgnU0lHSU5UJywgKCkgPT4gdm9pZCBzaHV0ZG93bignU0lHSU5UJykpO1xuICBwcm9jZXNzLm9uY2UoJ1NJR1RFUk0nLCAoKSA9PiB2b2lkIHNodXRkb3duKCdTSUdURVJNJykpO1xuXG4gIHJldHVybiB7XG4gICAgc2VydmVyLFxuICAgIHBvcnQsXG4gICAgc2h1dGRvd246ICgpID0+IHNodXRkb3duKCksXG4gIH07XG59XG5cbi8qKlxuICogU2ltcGxlIHNlcnZlciBzdGFydCB3cmFwcGVyIHdpdGggZXJyb3IgaGFuZGxpbmdcbiAqXG4gKiBAcGFyYW0gYXBwIC0gRXhwcmVzcyBhcHBsaWNhdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXJ2ZXIgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IGFwcCwgc3NlTWFuYWdlciB9ID0gY3JlYXRlQXBwKCk7XG4gKiBhcHAucG9zdCgnL2FwaS9yZXNvdXJjZScsIGhhbmRsZXIpO1xuICpcbiAqIHZvaWQgcnVuU2VydmVyKGFwcCwgeyBuYW1lOiAnTXkgU2VydmljZScsIHNzZU1hbmFnZXIgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blNlcnZlcihhcHA6IEV4cHJlc3MsIG9wdGlvbnM6IFN0YXJ0U2VydmVyT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIC8vIExhc3QtcmVzb3J0IGZhdWx0IGhhbmRsZXJzIGZvciB0aGUgcHJvZHVjdGlvbiBlbnRyeXBvaW50OiBhbiB1bmhhbmRsZWRcbiAgLy8gcmVqZWN0aW9uIC8gdW5jYXVnaHQgZXhjZXB0aW9uIGlzIGxvZ2dlZCAobm90IHNpbGVudGx5IGZhdGFsKSB0aGVuIHRoZVxuICAvLyBwcm9jZXNzIGV4aXRzIGZvciB0aGUgb3JjaGVzdHJhdG9yIHRvIHJlc3RhcnQuIE5vLW9wIHVuZGVyIE5PREVfRU5WPXRlc3QuXG4gIGluc3RhbGxDcmFzaEhhbmRsZXJzKGxvZ2dlcik7XG4gIHN0YXJ0U2VydmVyKGFwcCwgb3B0aW9ucykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgLy8gc3RhcnRTZXJ2ZXIgbm93IGxpc3RlbnMtZmlyc3QgYW5kIHN1cGVydmlzZXMgdGhlIERCIGluIHRoZSBiYWNrZ3JvdW5kLCBzb1xuICAgIC8vIGl0IG9ubHkgcmVqZWN0cyBvbiBhIGdlbnVpbmVseSBmYXRhbCBTRVRVUCBlcnJvciAoaW52YWxpZCBhdXRoIGNvbmZpZywgYVxuICAgIC8vIGZhaWxlZCBvblN0YXJ0LCB0aGUgcG9ydCBhbHJlYWR5IGluIHVzZSkuIExvZyBtZXNzYWdlICsgc3RhY2sgZXhwbGljaXRseTpcbiAgICAvLyBhbiBFcnJvciBpbiB3aW5zdG9uIG1ldGFkYXRhIHNlcmlhbGl6ZXMgdG8gYHt9YCAobWVzc2FnZS9zdGFjayBhcmVcbiAgICAvLyBub24tZW51bWVyYWJsZSksIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBoaWRlIHRoZSBjYXVzZSBiZWhpbmQgYHtlcnJvcjp7fX1gLlxuICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcicsIHtcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG59XG4iXX0=
@@ -40,4 +40,4 @@ export function withTenantContext(resolve = identityScope) {
40
40
  runWithTenantContext(scope, () => next());
41
41
  };
42
42
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3RlbmFudC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBc0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFZOUM7O2tDQUVrQztBQUNsQyxNQUFNLGFBQWEsR0FBd0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSztJQUNyQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztJQUNoQyxXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxvQkFBb0I7Q0FDNUMsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFVBQStCLGFBQWE7SUFDNUUsT0FBTyxDQUFDLEdBQVksRUFBRSxJQUFjLEVBQUUsSUFBa0IsRUFBUSxFQUFFO1FBQ2hFLElBQUksS0FBb0IsQ0FBQztRQUN6QixJQUFJLENBQUM7WUFDSCxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7UUFDRCxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGlzU3lzdGVtQWRtaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBydW5XaXRoVGVuYW50Q29udGV4dCwgdHlwZSBUZW5hbnRDb250ZXh0IH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGdldENvbnRleHQgfSBmcm9tICcuL2dldC1jb250ZXh0LmpzJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgUkxTIHRlbmFudCBzY29wZSBmb3IgYSByZXF1ZXN0LiBUaGUgZGVmYXVsdCByZWFkcyB0aGUgQ0FMTEVSJ3NcbiAqIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgb3JnIChgY3R4LmlkZW50aXR5Lm9yZ0lkYCwgdmFsaWRhdGVkIGJ5IHJlcXVpcmVPcmdJZCkg4oCUIE5PVFxuICogYGdldE9yZ0lkKHJlcSlgLCB3aGljaCBwcmVmZXJzIHJvdXRlIHBhcmFtcyAodGhlIHF1ZXJpZWQgc2NvcGUpLCB0aGUgd3JvbmcgdGVuYW50IGZvclxuICogUkxTLiBTZXJ2aWNlcyB3aXRoIGEgZGlmZmVyZW50IHJlcXVlc3QgYm91bmRhcnkgc3VwcGx5IHRoZWlyIG93biByZXNvbHZlciAoZS5nLiBwbGF0Zm9ybVxuICogc2V0cyB0aGUgc2NvcGUgcHJlLWF1dGggZnJvbSBhbiB1bnZlcmlmaWVkIEpXVCBwZWVrIHNvIHVuYXV0aGVudGljYXRlZCBlbmRwb2ludHMgc3RpbGxcbiAqIGdldCBhIHNhbmUgZGVmYXVsdCkuXG4gKi9cbmV4cG9ydCB0eXBlIFRlbmFudFNjb3BlUmVzb2x2ZXIgPSAocmVxOiBSZXF1ZXN0KSA9PiBUZW5hbnRDb250ZXh0O1xuXG4vKiogRGVmYXVsdCByZXNvbHZlcjogdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkncyBvcmcgKyBzdXBlci1hZG1pbiBmbGFnLCBwbHVzXG4gKiAgdGhlIGFjdGl2ZS1vcmcgcGFyZW50IChvcmcg4oaSIHRlYW0gaGllcmFyY2h5KSBzbyBkb3duc3RyZWFtIHNpZGUtZWZmZWN0cyBjYW5cbiAqICByZWFjaCBpdCB3aXRob3V0IGEgcmVxdWVzdC4gKi9cbmNvbnN0IGlkZW50aXR5U2NvcGU6IFRlbmFudFNjb3BlUmVzb2x2ZXIgPSAocmVxKSA9PiAoe1xuICBvcmdJZDogZ2V0Q29udGV4dChyZXEpLmlkZW50aXR5Lm9yZ0lkLFxuICBpc1N1cGVyQWRtaW46IGlzU3lzdGVtQWRtaW4ocmVxKSxcbiAgcGFyZW50T3JnSWQ6IHJlcS51c2VyPy5wYXJlbnRPcmdhbml6YXRpb25JZCxcbn0pO1xuXG4vKipcbiAqIEVzdGFibGlzaCB0aGUgcmVxdWVzdCdzIHJvdy1sZXZlbC1zZWN1cml0eSB0ZW5hbnQgc2NvcGUuXG4gKlxuICogUnVucyB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBpbnNpZGUgYHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9KWAgKGFuXG4gKiBBc3luY0xvY2FsU3RvcmFnZSBzY29wZSkgc28gZXZlcnkgYHdpdGhUZW5hbnRUeGAgcXVlcnkgZG93bnN0cmVhbSBjYW4gYFNFVCBMT0NBTGAgdGhlXG4gKiBQb3N0Z3JlcyBHVUNzIHRoYXQgUkxTIHBvbGljaWVzIHJlYWQuIFdpdGhvdXQgdGhpcywgcmVhZHMgYWdhaW5zdCBGT1JDRS1STFMgdGFibGVzIChlLmcuXG4gKiBgcGx1Z2luc2AsIGBwaXBlbGluZXNgKSBydW4gd2l0aCBlbXB0eSBHVUNzIGFuZCBzaWxlbnRseSByZXR1cm4gbm8gcm93cyDigJQgdGhlIFwic2V0IG9uY2VcbiAqIGF0IHRoZSByZXF1ZXN0IGJvdW5kYXJ5XCIgYm9va2VuZCB0aGUgUkxTIGVuZm9yY2VtZW50IHBsYW4gY2FsbHMgZm9yLlxuICpcbiAqIERlZmF1bHQgcGxhY2VtZW50IGlzIEFGVEVSIGByZXF1aXJlQXV0aGAgKyBgcmVxdWlyZU9yZ0lkYCAodGhlIHJvdXRlIGZhY3RvcmllcyBkbyB0aGlzKTtcbiAqIHBhc3MgYSBjdXN0b20gYHJlc29sdmVgIGZvciBhIGRpZmZlcmVudCBib3VuZGFyeS4gQSB0aHJvd24gcmVzb2x2ZXIgbWVhbnMgdGVuYW50IGlkZW50aXR5XG4gKiBjb3VsZCBOT1QgYmUgZXN0YWJsaXNoZWQgKGEgd2lyaW5nIGJ1ZyDigJQgdGhpcyBydW5zIGFmdGVyIGF1dGgpIOKAlCB3ZSBoYXJkLUZBSUwgdGhlIHJlcXVlc3RcbiAqICg1MDAgdmlhIG5leHQoZXJyKSkgcmF0aGVyIHRoYW4gcHJvY2VlZC4gUHJvY2VlZGluZyB3b3VsZCBydW4gcXVlcmllcyB3aXRoIGVtcHR5IFJMUyBHVUNzO1xuICogdW5kZXIgRk9SQ0UgUkxTIHRoYXQgaGlkZXMgcm93cywgYnV0IHdoaWxlIFJMUyBpcyBpbiBvd25lci1ieXBhc3MgbW9kZSB0aGUgYXBwLWxheWVyIFdIRVJFXG4gKiBjbGF1c2UgaXMgdGhlIG9ubHkgdGVuYW50IGdhdGUsIHNvIGEgc2NvcGVsZXNzIHJlcXVlc3QgbXVzdCBub3Qgc2lsZW50bHkgY29udGludWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGVuYW50Q29udGV4dChyZXNvbHZlOiBUZW5hbnRTY29wZVJlc29sdmVyID0gaWRlbnRpdHlTY29wZSkge1xuICByZXR1cm4gKHJlcTogUmVxdWVzdCwgX3JlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgIGxldCBzY29wZTogVGVuYW50Q29udGV4dDtcbiAgICB0cnkge1xuICAgICAgc2NvcGUgPSByZXNvbHZlKHJlcSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJ1bldpdGhUZW5hbnRDb250ZXh0KHNjb3BlLCAoKSA9PiBuZXh0KCkpO1xuICB9O1xufVxuIl19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3RlbmFudC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBc0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFZOUM7O2tDQUVrQztBQUNsQyxNQUFNLGFBQWEsR0FBd0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSztJQUNyQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztJQUNoQyxXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxvQkFBb0I7Q0FDNUMsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQU8sR0FBd0IsYUFBYTtJQUM1RSxPQUFPLENBQUMsR0FBWSxFQUFFLElBQWMsRUFBRSxJQUFrQixFQUFRLEVBQUU7UUFDaEUsSUFBSSxLQUFvQixDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUNELG9CQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgaXNTeXN0ZW1BZG1pbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHJ1bldpdGhUZW5hbnRDb250ZXh0LCB0eXBlIFRlbmFudENvbnRleHQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgZ2V0Q29udGV4dCB9IGZyb20gJy4vZ2V0LWNvbnRleHQuanMnO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBSTFMgdGVuYW50IHNjb3BlIGZvciBhIHJlcXVlc3QuIFRoZSBkZWZhdWx0IHJlYWRzIHRoZSBDQUxMRVInc1xuICogYXV0aGVudGljYXRlZCBpZGVudGl0eSBvcmcgKGBjdHguaWRlbnRpdHkub3JnSWRgLCB2YWxpZGF0ZWQgYnkgcmVxdWlyZU9yZ0lkKSDigJQgTk9UXG4gKiBgZ2V0T3JnSWQocmVxKWAsIHdoaWNoIHByZWZlcnMgcm91dGUgcGFyYW1zICh0aGUgcXVlcmllZCBzY29wZSksIHRoZSB3cm9uZyB0ZW5hbnQgZm9yXG4gKiBSTFMuIFNlcnZpY2VzIHdpdGggYSBkaWZmZXJlbnQgcmVxdWVzdCBib3VuZGFyeSBzdXBwbHkgdGhlaXIgb3duIHJlc29sdmVyIChlLmcuIHBsYXRmb3JtXG4gKiBzZXRzIHRoZSBzY29wZSBwcmUtYXV0aCBmcm9tIGFuIHVudmVyaWZpZWQgSldUIHBlZWsgc28gdW5hdXRoZW50aWNhdGVkIGVuZHBvaW50cyBzdGlsbFxuICogZ2V0IGEgc2FuZSBkZWZhdWx0KS5cbiAqL1xuZXhwb3J0IHR5cGUgVGVuYW50U2NvcGVSZXNvbHZlciA9IChyZXE6IFJlcXVlc3QpID0+IFRlbmFudENvbnRleHQ7XG5cbi8qKiBEZWZhdWx0IHJlc29sdmVyOiB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eSdzIG9yZyArIHN1cGVyLWFkbWluIGZsYWcsIHBsdXNcbiAqICB0aGUgYWN0aXZlLW9yZyBwYXJlbnQgKG9yZyDihpIgdGVhbSBoaWVyYXJjaHkpIHNvIGRvd25zdHJlYW0gc2lkZS1lZmZlY3RzIGNhblxuICogIHJlYWNoIGl0IHdpdGhvdXQgYSByZXF1ZXN0LiAqL1xuY29uc3QgaWRlbnRpdHlTY29wZTogVGVuYW50U2NvcGVSZXNvbHZlciA9IChyZXEpID0+ICh7XG4gIG9yZ0lkOiBnZXRDb250ZXh0KHJlcSkuaWRlbnRpdHkub3JnSWQsXG4gIGlzU3VwZXJBZG1pbjogaXNTeXN0ZW1BZG1pbihyZXEpLFxuICBwYXJlbnRPcmdJZDogcmVxLnVzZXI/LnBhcmVudE9yZ2FuaXphdGlvbklkLFxufSk7XG5cbi8qKlxuICogRXN0YWJsaXNoIHRoZSByZXF1ZXN0J3Mgcm93LWxldmVsLXNlY3VyaXR5IHRlbmFudCBzY29wZS5cbiAqXG4gKiBSdW5zIHRoZSByZXN0IG9mIHRoZSByZXF1ZXN0IGluc2lkZSBgcnVuV2l0aFRlbmFudENvbnRleHQoeyBvcmdJZCwgaXNTdXBlckFkbWluIH0pYCAoYW5cbiAqIEFzeW5jTG9jYWxTdG9yYWdlIHNjb3BlKSBzbyBldmVyeSBgd2l0aFRlbmFudFR4YCBxdWVyeSBkb3duc3RyZWFtIGNhbiBgU0VUIExPQ0FMYCB0aGVcbiAqIFBvc3RncmVzIEdVQ3MgdGhhdCBSTFMgcG9saWNpZXMgcmVhZC4gV2l0aG91dCB0aGlzLCByZWFkcyBhZ2FpbnN0IEZPUkNFLVJMUyB0YWJsZXMgKGUuZy5cbiAqIGBwbHVnaW5zYCwgYHBpcGVsaW5lc2ApIHJ1biB3aXRoIGVtcHR5IEdVQ3MgYW5kIHNpbGVudGx5IHJldHVybiBubyByb3dzIOKAlCB0aGUgXCJzZXQgb25jZVxuICogYXQgdGhlIHJlcXVlc3QgYm91bmRhcnlcIiBib29rZW5kIHRoZSBSTFMgZW5mb3JjZW1lbnQgcGxhbiBjYWxscyBmb3IuXG4gKlxuICogRGVmYXVsdCBwbGFjZW1lbnQgaXMgQUZURVIgYHJlcXVpcmVBdXRoYCArIGByZXF1aXJlT3JnSWRgICh0aGUgcm91dGUgZmFjdG9yaWVzIGRvIHRoaXMpO1xuICogcGFzcyBhIGN1c3RvbSBgcmVzb2x2ZWAgZm9yIGEgZGlmZmVyZW50IGJvdW5kYXJ5LiBBIHRocm93biByZXNvbHZlciBtZWFucyB0ZW5hbnQgaWRlbnRpdHlcbiAqIGNvdWxkIE5PVCBiZSBlc3RhYmxpc2hlZCAoYSB3aXJpbmcgYnVnIOKAlCB0aGlzIHJ1bnMgYWZ0ZXIgYXV0aCkg4oCUIHdlIGhhcmQtRkFJTCB0aGUgcmVxdWVzdFxuICogKDUwMCB2aWEgbmV4dChlcnIpKSByYXRoZXIgdGhhbiBwcm9jZWVkLiBQcm9jZWVkaW5nIHdvdWxkIHJ1biBxdWVyaWVzIHdpdGggZW1wdHkgUkxTIEdVQ3M7XG4gKiB1bmRlciBGT1JDRSBSTFMgdGhhdCBoaWRlcyByb3dzLCBidXQgd2hpbGUgUkxTIGlzIGluIG93bmVyLWJ5cGFzcyBtb2RlIHRoZSBhcHAtbGF5ZXIgV0hFUkVcbiAqIGNsYXVzZSBpcyB0aGUgb25seSB0ZW5hbnQgZ2F0ZSwgc28gYSBzY29wZWxlc3MgcmVxdWVzdCBtdXN0IG5vdCBzaWxlbnRseSBjb250aW51ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUZW5hbnRDb250ZXh0KHJlc29sdmU6IFRlbmFudFNjb3BlUmVzb2x2ZXIgPSBpZGVudGl0eVNjb3BlKSB7XG4gIHJldHVybiAocmVxOiBSZXF1ZXN0LCBfcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgbGV0IHNjb3BlOiBUZW5hbnRDb250ZXh0O1xuICAgIHRyeSB7XG4gICAgICBzY29wZSA9IHJlc29sdmUocmVxKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcnVuV2l0aFRlbmFudENvbnRleHQoc2NvcGUsICgpID0+IG5leHQoKSk7XG4gIH07XG59XG4iXX0=
@@ -541,4 +541,4 @@ export class SSEManager {
541
541
  logger.info('SSE Manager shut down');
542
542
  }
543
543
  }
544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NlLWNvbm5lY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL3NzZS1jb25uZWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFaEUsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBNEUzQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcscUVBQXFFLENBQUM7QUErQnZHOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBQ2IsT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBQ2pEOzsyQ0FFdUM7SUFDL0IsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3BEOzs4Q0FFMEM7SUFDbEMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO0lBQzlCLG9CQUFvQixDQUFTO0lBQzdCLGVBQWUsQ0FBUztJQUN4QixnQkFBZ0IsQ0FBUztJQUN6QixlQUFlLENBQVM7SUFDeEIsZ0JBQWdCLENBQVM7SUFDekIsV0FBVyxDQUFTO0lBQ3BCLGVBQWUsQ0FBUztJQUNqQyxlQUFlLEdBQTBCLElBQUksQ0FBQztJQUV0RCxZQUFZLFVBQTZCLEVBQUU7UUFDekMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywy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LEVBQUUsQ0FBQztnQkFBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3hELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxPQUFPLHdCQUF3QixDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBTU0VfVElDS0VUX1RUTF9NUyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvcmVDb25zdGFudHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHY3IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzc2UtbWFuYWdlcicpO1xuXG4vKipcbiAqIEV2ZW50IHR5cGVzIGZvciBTU0UgbG9nZ2luZ1xuICovXG5leHBvcnQgdHlwZSBTU0VFdmVudFR5cGUgPSAnSU5GTycgfCAnV0FSTicgfCAnRVJST1InIHwgJ0NPTVBMRVRFRCcgfCAnUk9MTEJBQ0snIHwgJ01FU1NBR0UnO1xuXG4vKipcbiAqIFNTRSBwYXlsb2FkIHN0cnVjdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNTRVBheWxvYWQge1xuICB0czogc3RyaW5nO1xuICB0eXBlOiBTU0VFdmVudFR5cGU7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZGF0YT86IHVua25vd247XG59XG5cbi8qKlxuICogU1NFIGNsaWVudCB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTU0VDbGllbnQge1xuICBpZDogc3RyaW5nO1xuICByZXM6IFJlc3BvbnNlO1xuICBjb25uZWN0ZWRBdDogbnVtYmVyO1xuICB0aW1lb3V0OiBOb2RlSlMuVGltZW91dDtcbiAgLyoqIE51bWJlciBvZiBjb25zZWN1dGl2ZSBiYWNrcHJlc3N1cmUgZXZlbnRzICh3cml0ZSByZXR1cm5lZCBmYWxzZSkuICovXG4gIGJhY2twcmVzc3VyZUNvdW50OiBudW1iZXI7XG4gIC8qKiBPd25pbmcgb3JnIGlkIOKAlCBwb3B1bGF0ZWQgd2hlbiB0aGUgcmVxdWVzdCB3YXMgYXV0aGVudGljYXRlZC4gVXNlZCB0b1xuICAgKiAgZGVjcmVtZW50IHRoZSBwZXItb3JnIGNvdW50ZXIgb24gZGlzY29ubmVjdCAvIGNsZWFudXAuICovXG4gIG9yZ0lkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNTRSBNYW5hZ2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNTRU1hbmFnZXJPcHRpb25zIHtcbiAgLyoqIE1heGltdW0gY2xpZW50cyBhbGxvd2VkIHBlciByZXF1ZXN0IElEIChkZWZhdWx0OiAxMCkgKi9cbiAgbWF4Q2xpZW50c1BlclJlcXVlc3Q/OiBudW1iZXI7XG4gIC8qKiBDbGllbnQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDMwIG1pbnV0ZXMpICovXG4gIGNsaWVudFRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIEludGVydmFsIGZvciBjbGVhbnVwIGNoZWNrcyBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDUgbWludXRlcykgKi9cbiAgY2xlYW51cEludGVydmFsTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0b3RhbCBvcGVuIGNvbm5lY3Rpb25zIHBlciBwcm9jZXNzLiBEZWZhdWx0cyB0byAxMDAwIGZyb21cbiAgICogYFNTRV9NQVhfVE9UQUxfQ0xJRU5UU2AuIE5ldyBjb25uZWN0aW9ucyBiZXlvbmQgdGhpcyBhcmUgcmVqZWN0ZWQgYXRcbiAgICogYGFkZENsaWVudCgpYC4gVHVuZSB1cCBpZiB5b3VyIHNlcnZpY2Ugc2VydmVzID4gMTAwMCBjb25jdXJyZW50IFNTRVxuICAgKiBkYXNoYm9hcmRzLCBidXQgYmUgYXdhcmUgTm9kZS5qcyBmZCBsaW1pdHMgZG9taW5hdGUgYWJvdmUgfjUwMDAuXG4gICAqL1xuICBtYXhUb3RhbENsaWVudHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQZXItb3JnIGNlaWxpbmcgb24gY29uY3VycmVudCBTU0Ugc3RyZWFtcy4gRGVmYXVsdHMgdG8gNTAgZnJvbVxuICAgKiBgU1NFX01BWF9DTElFTlRTX1BFUl9PUkdgLiBQcm90ZWN0cyBhZ2FpbnN0IG9uZSBub2lzeSBvcmcgY29uc3VtaW5nIHRoZVxuICAgKiBwcm9jZXNzLXdpZGUgYnVkZ2V0IOKAlCB3aXRob3V0IGl0LCBhbiBhdXRoZW50aWNhdGVkIHVzZXIgY2FuIGZhbiBvdXRcbiAgICogdGhvdXNhbmRzIG9mIHN0cmVhbXMgKG9uZSBwZXIgZGFzaGJvYXJkIC8gbG9nIHN0cmVhbSkgYW5kIHN0YXJ2ZSBvdGhlclxuICAgKiBvcmdzIG9mIGNvbm5lY3Rpb24gc2xvdHMuIFRoZSBjYXAgaXMgZW5mb3JjZWQgb25seSBvbiBgYWRkQ2xpZW50YCBjYWxsc1xuICAgKiB0aGF0IGNhcnJ5IGFuIGBvcmdJZGA7IHNlcnZpY2UtaW50ZXJuYWwgLyBhbm9ueW1vdXMgU1NFIHRyYWZmaWMgc2tpcHMgaXQuXG4gICAqL1xuICBtYXhDbGllbnRzUGVyT3JnPzogbnVtYmVyO1xuICAvKipcbiAgICogSGFyZCBjYXAgb24gdG90YWwgbGl2ZSAodW5jb25zdW1lZCwgdW5leHBpcmVkKSBTU0UgdGlja2V0cyBhY3Jvc3MgdGhlXG4gICAqIHByb2Nlc3MuIERlZmF1bHRzIHRvIDEwMDAgZnJvbSBgU1NFX01BWF9UT1RBTF9USUNLRVRTYC4gQm91bmRzIG1lbW9yeVxuICAgKiB1bmRlciBhYnVzZSDigJQgYGNyZWF0ZVRpY2tldGAgcmV0dXJucyBgeyBvazogZmFsc2UsIHJlYXNvbjogJ2NhcGFjaXR5JyB9YFxuICAgKiBvbmNlIHJlYWNoZWQuXG4gICAqL1xuICBtYXhUb3RhbFRpY2tldHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQZXItb3JnIGNhcCBvbiBsaXZlIFNTRSB0aWNrZXRzLiBEZWZhdWx0cyB0byAxMCBmcm9tXG4gICAqIGBTU0VfTUFYX1RJQ0tFVFNfUEVSX09SR2AuIFByZXZlbnRzIGEgc2luZ2xlIHRlbmFudCBmcm9tIHNhdHVyYXRpbmcgdGhlXG4gICAqIHRpY2tldCB0YWJsZSDigJQgYGNyZWF0ZVRpY2tldGAgcmV0dXJucyBgeyBvazogZmFsc2UsIHJlYXNvbjogJ29yZy1saW1pdCcgfWBcbiAgICogb25jZSByZWFjaGVkLlxuICAgKi9cbiAgbWF4VGlja2V0c1Blck9yZz86IG51bWJlcjtcbiAgLyoqIFRpY2tldCBUVEwgaW4gbXMgKGRlZmF1bHQ6IGBTU0VfVElDS0VUX1RUTF9NU2AgZnJvbSBhcGktY29yZSkuICovXG4gIHRpY2tldFR0bE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgYnVpbGQtbG9nIHN0cmVhbSBzdWJqZWN0IGlkOiBlaXRoZXIgYSBkYXNoZWQgVVVJRCAoYXBpLXNlcnZlcidzIGB1dWlkKClgKVxuICogb3IgbmdpbngncyBgJHJlcXVlc3RfaWRgIOKAlCAxNiByYW5kb20gYnl0ZXMgcmVuZGVyZWQgYXMgMzIgaGV4IGNoYXJzIHdpdGggTk9cbiAqIGRhc2hlcy4gQWNjZXB0IGJvdGggYnkgbWFraW5nIHRoZSBncm91cCBzZXBhcmF0b3JzIG9wdGlvbmFsOyBzdGlsbCBzdHJpY3RseVxuICogMzIgaGV4IGNoYXJzIHNvIGl0IGNhbid0IGNhcnJ5IGFuIGluamVjdGlvbiAvIHBhdGgtdHJhdmVyc2FsIHBheWxvYWQgaW50byB0aGVcbiAqIFNTRSBzdWJqZWN0LiBTaGFyZWQgYnkgdGhlIHRpY2tldC1taW50IHJvdXRlIGFuZCB0aGUgc3RyZWFtIG1pZGRsZXdhcmUgc29cbiAqIGJvdGggdmFsaWRhdGUgdGhlIHN1YmplY3QgaWRlbnRpY2FsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBTU0VfUkVRVUVTVF9JRF9SRSA9IC9eWzAtOWEtZl17OH0tP1swLTlhLWZdezR9LT9bMC05YS1mXXs0fS0/WzAtOWEtZl17NH0tP1swLTlhLWZdezEyfSQvaTtcblxuLyoqIEEgbWludGVkIFNTRSB0aWNrZXQg4oCUIHNpbmdsZS11c2UsIG9yZy1ib3VuZCwgc3ViamVjdC1ib3VuZCwgc2hvcnQtbGl2ZWQuICovXG5pbnRlcmZhY2UgU1NFVGlja2V0IHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBidWlsZC1sb2cgc3RyZWFtIHN1YmplY3QgdGhpcyB0aWNrZXQgYXV0aG9yaXplcy4gQSB0aWNrZXQgbWF5IE9OTFkgYmVcbiAgICogY29uc3VtZWQgdG8gb3BlbiB0aGUgc3RyZWFtIGZvciB0aGlzIGV4YWN0IHJlcXVlc3RJZC4gQmluZHMgdGhlIHNpbmdsZS11c2VcbiAgICogdGlja2V0IHRvIGEgc3BlY2lmaWMgc3ViamVjdCBzbyBhbiBhdXRoZW50aWNhdGVkIG9yZyBjYW4ndCBhdHRhY2ggdG8gYVxuICAgKiBzdHJlYW0gaXQgd2FzIG5ldmVyIGlzc3VlZCBmb3IgKHByZXZpb3VzbHkgdGhlIGA6cmVxdWVzdElkYCB3YXMgb25seVxuICAgKiBmb3JtYXQtdmFsaWRhdGVkLCBzbyBhbnkgb3JnIGNvdWxkIHN1YnNjcmliZSB0byBhbnkgc3ViamVjdCBpdCBjb3VsZFxuICAgKiBndWVzcykuIFN0b3JlZCBub3JtYWxpemVkIChkYXNoZXMgc3RyaXBwZWQsIGxvd2VyY2FzZWQpIGZvciBjb21wYXJpc29uLlxuICAgKi9cbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xufVxuXG4vKiogUmVzdWx0IG9mIHtAbGluayBTU0VNYW5hZ2VyLmNyZWF0ZVRpY2tldH0uICovXG5leHBvcnQgdHlwZSBDcmVhdGVUaWNrZXRSZXN1bHQgPVxuICB8IHsgb2s6IHRydWU7IHRpY2tldDogc3RyaW5nIH1cbiAgfCB7IG9rOiBmYWxzZTsgcmVhc29uOiAnb3JnLWxpbWl0JyB8ICdjYXBhY2l0eScgfTtcblxuLyoqXG4gKiBTU0UgTWFuYWdlciBzdGF0aXN0aWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU1NFTWFuYWdlclN0YXRzIHtcbiAgdG90YWxSZXF1ZXN0czogbnVtYmVyO1xuICB0b3RhbENsaWVudHM6IG51bWJlcjtcbiAgb2xkZXN0Q29ubmVjdGlvbk1zOiBudW1iZXIgfCBudWxsO1xufVxuXG4vKipcbiAqIFNTRSBoZWxwZXIgY2xhc3Mgd2l0aCBtZW1vcnkgbGVhayBwcm90ZWN0aW9uXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIENsaWVudCBsaW1pdHMgcGVyIHJlcXVlc3QgSURcbiAqIC0gQXV0b21hdGljIHRpbWVvdXQgZm9yIGlkbGUgY29ubmVjdGlvbnNcbiAqIC0gUGVyaW9kaWMgY2xlYW51cCBvZiBzdGFsZSBjb25uZWN0aW9uc1xuICogLSBDb25uZWN0aW9uIHN0YXRpc3RpY3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3NlTWFuYWdlciA9IG5ldyBTU0VNYW5hZ2VyKHsgbWF4Q2xpZW50c1BlclJlcXVlc3Q6IDUgfSk7XG4gKiBhcHAuZ2V0KCcvbG9ncy86cmVxdWVzdElkJywgc3NlTWFuYWdlci5taWRkbGV3YXJlKCkpO1xuICpcbiAqIC8vIFNlbmQgZXZlbnRzXG4gKiBzc2VNYW5hZ2VyLnNlbmQoJ3JlcXVlc3QtMTIzJywgJ0lORk8nLCAnUHJvY2Vzc2luZy4uLicpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTU0VNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBjbGllbnRzID0gbmV3IE1hcDxzdHJpbmcsIFNTRUNsaWVudFtdPigpO1xuICAvKiogUGVyLW9yZyBvcGVuLWNsaWVudCBjb3VudGVycy4gRGVjcmVtZW50ZWQgb24gcmVtb3ZlQ2xpZW50L2NsZWFudXAgc28gdGhlXG4gICAqICBtYXAgbWlycm9ycyBgY2xpZW50c1tdLm9yZ0lkYCBjb3VudHMgYXQgYWxsIHRpbWVzLiBPcmdzIHJlYWNoIHplcm8gYXJlXG4gICAqICBkZWxldGVkIHRvIGtlZXAgdGhlIG1hcCBib3VuZGVkLiAqL1xuICBwcml2YXRlIG9yZ0NsaWVudENvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIC8qKiBTaW5nbGUtdXNlIFNTRSB0aWNrZXRzLCBrZXllZCBieSBvcGFxdWUgdGlja2V0IGlkLiBCb3VuZGVkIGJ5XG4gICAqICBgbWF4VG90YWxUaWNrZXRzYCAvIGBtYXhUaWNrZXRzUGVyT3JnYDsgc3dlcHQgb24gdGhlIGNsZWFudXAgaW50ZXJ2YWwgYW5kXG4gICAqICB2YWxpZGF0ZWQgKGV4cGlyeSkgYXQgY29uc3VtZSB0aW1lLiAqL1xuICBwcml2YXRlIHRpY2tldHMgPSBuZXcgTWFwPHN0cmluZywgU1NFVGlja2V0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heENsaWVudHNQZXJSZXF1ZXN0OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4VG90YWxDbGllbnRzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4Q2xpZW50c1Blck9yZzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heFRvdGFsVGlja2V0czogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heFRpY2tldHNQZXJPcmc6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSB0aWNrZXRUdGxNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRpbWVvdXRNczogbnVtYmVyO1xuICBwcml2YXRlIGNsZWFudXBJbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTU0VNYW5hZ2VyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5tYXhDbGllbnRzUGVyUmVxdWVzdCA9IG9wdGlvbnMubWF4Q2xpZW50c1BlclJlcXVlc3QgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU1NFX01BWF9DTElFTlRTX1BFUl9SRVFVRVNUIHx8ICcxMCcsIDEwKTtcbiAgICB0aGlzLm1heFRvdGFsQ2xpZW50cyA9IG9wdGlvbnMubWF4VG90YWxDbGllbnRzID8/IHBhcnNlSW50KHByb2Nlc3MuZW52LlNTRV9NQVhfVE9UQUxfQ0xJRU5UUyB8fCAnMTAwMCcsIDEwKTtcbiAgICB0aGlzLm1heENsaWVudHNQZXJPcmcgPSBvcHRpb25zLm1heENsaWVudHNQZXJPcmcgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU1NFX01BWF9DTElFTlRTX1BFUl9PUkcgfHwgJzUwJywgMTApO1xuICAgIHRoaXMubWF4VG90YWxUaWNrZXRzID0gb3B0aW9ucy5tYXhUb3RhbFRpY2tldHMgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU1NFX01BWF9UT1RBTF9USUNLRVRTIHx8ICcxMDAwJywgMTApO1xuICAgIHRoaXMubWF4VGlja2V0c1Blck9yZyA9IG9wdGlvbnMubWF4VGlja2V0c1Blck9yZyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfTUFYX1RJQ0tFVFNfUEVSX09SRyB8fCAnMTAnLCAxMCk7XG4gICAgdGhpcy50aWNrZXRUdGxNcyA9IG9wdGlvbnMudGlja2V0VHRsTXMgPz8gU1NFX1RJQ0tFVF9UVExfTVM7XG4gICAgdGhpcy5jbGllbnRUaW1lb3V0TXMgPSBvcHRpb25zLmNsaWVudFRpbWVvdXRNcyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfQ0xJRU5UX1RJTUVPVVRfTVMgfHwgJzE4MDAwMDAnLCAxMCk7IC8vIDMwIG1pbnV0ZXNcblxuICAgIGNvbnN0IGNsZWFudXBJbnRlcnZhbE1zID0gb3B0aW9ucy5jbGVhbnVwSW50ZXJ2YWxNcyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfQ0xFQU5VUF9JTlRFUlZBTF9NUyB8fCAnMzAwMDAwJywgMTApOyAvLyA1IG1pbnV0ZXNcbiAgICB0aGlzLnN0YXJ0Q2xlYW51cEludGVydmFsKGNsZWFudXBJbnRlcnZhbE1zKTtcbiAgfVxuXG4gIC8qKiBUb3RhbCBvcGVuIGNvbm5lY3Rpb25zIGFjcm9zcyBhbGwgcmVxdWVzdHMuICovXG4gIHByaXZhdGUgdG90YWxDbGllbnRzKCk6IG51bWJlciB7XG4gICAgbGV0IG4gPSAwO1xuICAgIGZvciAoY29uc3QgY2xpZW50cyBvZiB0aGlzLmNsaWVudHMudmFsdWVzKCkpIG4gKz0gY2xpZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICAvKiogQ3VycmVudCBvcGVuLXN0cmVhbSBjb3VudCBmb3IgYW4gb3JnICgwIGlmIHVuc2VlbikuICovXG4gIGdldE9yZ0NsaWVudENvdW50KG9yZ0lkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9yZ0NsaWVudENvdW50cy5nZXQob3JnSWQpID8/IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2Fub25pY2FsIGZvcm0gb2YgYSByZXF1ZXN0SWQgZm9yIGVxdWFsaXR5IGNoZWNrczogZGFzaGVzIHN0cmlwcGVkIGFuZFxuICAgKiBsb3dlcmNhc2VkLCBzbyB0aGUgZGFzaGVkIChhcGktc2VydmVyIGB1dWlkKClgKSBhbmQgdW5kYXNoZWQgKG5naW54XG4gICAqIGAkcmVxdWVzdF9pZGApIHJlbmRlcmluZ3Mgb2YgdGhlIHNhbWUgaWQgY29tcGFyZSBlcXVhbC4gQ2FsbGVycyBhcmVcbiAgICogZXhwZWN0ZWQgdG8gaGF2ZSBhbHJlYWR5IGZvcm1hdC12YWxpZGF0ZWQgYWdhaW5zdCB7QGxpbmsgU1NFX1JFUVVFU1RfSURfUkV9LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgbm9ybWFsaXplUmVxdWVzdElkKHJlcXVlc3RJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVxdWVzdElkLnJlcGxhY2UoLy0vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvKiogQ291bnQgb2YgbGl2ZSAodW5leHBpcmVkKSB0aWNrZXRzIGN1cnJlbnRseSBoZWxkIGZvciBhbiBvcmcuICovXG4gIHByaXZhdGUgY291bnRMaXZlVGlja2V0c0Zvck9yZyhvcmdJZDogc3RyaW5nLCBub3c6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IHRpY2tldCBvZiB0aGlzLnRpY2tldHMudmFsdWVzKCkpIHtcbiAgICAgIGlmICh0aWNrZXQub3JnSWQgPT09IG9yZ0lkICYmIHRpY2tldC5leHBpcmVzQXQgPiBub3cpIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaW50IGEgc2hvcnQtbGl2ZWQsIHNpbmdsZS11c2UgU1NFIHRpY2tldCBib3VuZCB0byBgb3JnSWRgIEFORCBhIHNwZWNpZmljXG4gICAqIHN0cmVhbSBzdWJqZWN0IChgcmVxdWVzdElkYCkuIENsaWVudHMgUE9TVCB0byBvYnRhaW4gb25lIChKV1QtYXV0aGVudGljYXRlZClcbiAgICogZm9yIHRoZSBleGFjdCBzdHJlYW0gdGhleSBpbnRlbmQgdG8gb3BlbiwgdGhlbiBvcGVuIHRoZSBFdmVudFNvdXJjZSB3aXRoXG4gICAqIGA/dGlja2V0PTx0PmAgc28gdGhlIEpXVCBuZXZlciBsYW5kcyBpbiBhIHF1ZXJ5IHN0cmluZyAvIGFjY2VzcyBsb2cuIFRoZVxuICAgKiB0aWNrZXQgY2FuIHRoZW4gb25seSBiZSBjb25zdW1lZCB0byBvcGVuIHRoYXQgb25lIHN1YmplY3QncyBzdHJlYW0g4oCUIHNlZVxuICAgKiB7QGxpbmsgY29uc3VtZVRpY2tldH0g4oCUIHdoaWNoIGlzIHdoYXQgZW5mb3JjZXMgcGVyLXN1YmplY3QgYXV0aG9yaXphdGlvbi5cbiAgICpcbiAgICogQm91bmRlZCBieSBgbWF4VG90YWxUaWNrZXRzYCAocHJvY2Vzcy13aWRlKSBhbmQgYG1heFRpY2tldHNQZXJPcmdgXG4gICAqIChwZXItdGVuYW50KS4gTWlycm9ycyB0aGUgbWVzc2FnZS1zZXJ2aWNlIG5vdGlmaWNhdGlvbnMgdGlja2V0IHN0b3JlLlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgLSBPd25pbmcgb3JnIChhbHJlYWR5IG5vcm1hbGl6ZWQgYnkgdGhlIGNhbGxlcikuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgLSBUaGUgYnVpbGQtbG9nIHN0cmVhbSBzdWJqZWN0IHRoaXMgdGlja2V0IGF1dGhvcml6ZXMuXG4gICAqICAgVGhlIGNhbGxlciBtdXN0IGhhdmUgZm9ybWF0LXZhbGlkYXRlZCBpdCAoc2VlIHtAbGluayBTU0VfUkVRVUVTVF9JRF9SRX0pLlxuICAgKiBAcmV0dXJucyBgeyBvazogdHJ1ZSwgdGlja2V0IH1gIG9uIHN1Y2Nlc3MsIG9yIGB7IG9rOiBmYWxzZSwgcmVhc29uIH1gXG4gICAqICAgd2hlcmUgcmVhc29uIGlzIGAnb3JnLWxpbWl0J2AgKHBlci1vcmcgY2FwKSBvciBgJ2NhcGFjaXR5J2AgKHRvdGFsIGNhcCkuXG4gICAqL1xuICBjcmVhdGVUaWNrZXQob3JnSWQ6IHN0cmluZywgcmVxdWVzdElkOiBzdHJpbmcpOiBDcmVhdGVUaWNrZXRSZXN1bHQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgLy8gVG90YWwgY2FwIGZpcnN0IOKAlCBwcm90ZWN0cyBwcm9jZXNzIG1lbW9yeSBldmVuIHdoZW4gYSBzaW5nbGUgb3JnIGlzXG4gICAgLy8gdGhlIG9mZmVuZGVyLiBUaGVuIHRoZSBwZXItb3JnIGNhcCBmb3IgZmFpci1zaGFyZS5cbiAgICBpZiAodGhpcy50aWNrZXRzLnNpemUgPj0gdGhpcy5tYXhUb3RhbFRpY2tldHMpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBTU0UgdGlja2V0IGNhcCByZWFjaGVkIChtYXg6ICR7dGhpcy5tYXhUb3RhbFRpY2tldHN9KTsgcmVqZWN0aW5nIHRpY2tldCByZXF1ZXN0YCk7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogJ2NhcGFjaXR5JyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5jb3VudExpdmVUaWNrZXRzRm9yT3JnKG9yZ0lkLCBub3cpID49IHRoaXMubWF4VGlja2V0c1Blck9yZykge1xuICAgICAgbG9nZ2VyLndhcm4oYFBlci1vcmcgU1NFIHRpY2tldCBjYXAgcmVhY2hlZCBmb3IgJHtvcmdJZH0gKG1heDogJHt0aGlzLm1heFRpY2tldHNQZXJPcmd9KWApO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246ICdvcmctbGltaXQnIH07XG4gICAgfVxuXG4gICAgY29uc3QgdGlja2V0ID0gcmFuZG9tQnl0ZXMoMjQpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKTtcbiAgICB0aGlzLnRpY2tldHMuc2V0KHRpY2tldCwge1xuICAgICAgb3JnSWQsXG4gICAgICByZXF1ZXN0SWQ6IFNTRU1hbmFnZXIubm9ybWFsaXplUmVxdWVzdElkKHJlcXVlc3RJZCksXG4gICAgICBleHBpcmVzQXQ6IG5vdyArIHRoaXMudGlja2V0VHRsTXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHRpY2tldCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCBDT05TVU1FIGEgdGlja2V0IGZvciBhIHNwZWNpZmljIHN0cmVhbSBzdWJqZWN0LiBTaW5nbGUtdXNlOlxuICAgKiB0aGUgdGlja2V0IGlzIGRlbGV0ZWQgd2hldGhlciBvciBub3QgaXQgdHVybnMgb3V0IHRvIGJlIHZhbGlkLCBzbyBhIHJlcGxheVxuICAgKiBvZiB0aGUgc2FtZSB2YWx1ZSBhbHdheXMgZmFpbHMuIFJldHVybnMgdGhlIGJvdW5kIG9yZyBvbiBzdWNjZXNzLCBvciBudWxsXG4gICAqIHdoZW4gdGhlIHRpY2tldCBpcyB1bmtub3duIC8gYWxyZWFkeS11c2VkIC8gZXhwaXJlZCAvIE9SIHdhcyBtaW50ZWQgZm9yIGFcbiAgICogRElGRkVSRU5UIGByZXF1ZXN0SWRgIHRoYW4gdGhlIG9uZSBiZWluZyBvcGVuZWQuXG4gICAqXG4gICAqIFRoZSBzdWJqZWN0IGNoZWNrIGlzIHRoZSBhdXRob3JpemF0aW9uIGZpeDogd2l0aG91dCBpdCwgYSB0aWNrZXQgbWludGVkIGZvclxuICAgKiBvbmUgc3RyZWFtIGNvdWxkIGJlIHByZXNlbnRlZCB0byBvcGVuIEFOWSBzdHJlYW0gdGhlIGhvbGRlcidzIG9yZyBjb3VsZFxuICAgKiBuYW1lLCBsZXR0aW5nIGFuIGF1dGhlbnRpY2F0ZWQgb3JnIGF0dGFjaCB0byBhbm90aGVyIG9yZydzIGxvZyBzdHJlYW0gYnlcbiAgICogZ3Vlc3NpbmcgaXRzIHJlcXVlc3RJZC4gVGhlIGdlbmVyaWMgNDAxIHRoZSBjYWxsZXIgcmV0dXJucyBkb2VzIG5vdFxuICAgKiBkaXN0aW5ndWlzaCBcInVua25vd24gdGlja2V0XCIgZnJvbSBcIndyb25nIHN1YmplY3RcIiwgc28gaXQgbGVha3Mgbm90aGluZ1xuICAgKiBhYm91dCB3aGljaCByZXF1ZXN0SWRzIGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGlja2V0SWQgLSBUaGUgb3BhcXVlIHRpY2tldCB2YWx1ZSBmcm9tIGA/dGlja2V0PWAuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgLSBUaGUgc3RyZWFtIHN1YmplY3QgZnJvbSB0aGUgVVJMIHBhdGggKGA6cmVxdWVzdElkYCksXG4gICAqICAgYWxyZWFkeSBmb3JtYXQtdmFsaWRhdGVkIGJ5IHRoZSBjYWxsZXIuXG4gICAqL1xuICBjb25zdW1lVGlja2V0KHRpY2tldElkOiBzdHJpbmcsIHJlcXVlc3RJZDogc3RyaW5nKTogeyBvcmdJZDogc3RyaW5nIH0gfCBudWxsIHtcbiAgICBjb25zdCB0aWNrZXQgPSB0aGlzLnRpY2tldHMuZ2V0KHRpY2tldElkKTtcbiAgICB0aGlzLnRpY2tldHMuZGVsZXRlKHRpY2tldElkKTsgLy8gc2luZ2xlLXVzZSDigJQgY29uc3VtZSBpbW1lZGlhdGVseVxuICAgIGlmICghdGlja2V0IHx8IERhdGUubm93KCkgPiB0aWNrZXQuZXhwaXJlc0F0KSByZXR1cm4gbnVsbDtcbiAgICAvLyBTdWJqZWN0IGJpbmRpbmcg4oCUIHJlamVjdCBhIHRpY2tldCBwcmVzZW50ZWQgZm9yIGEgc3ViamVjdCBpdCB3YXMgbm90XG4gICAgLy8gbWludGVkIGZvci4gQm90aCBzaWRlcyBhcmUgbm9ybWFsaXplZCBzbyBkYXNoZWQvdW5kYXNoZWQgZm9ybXMgbWF0Y2guXG4gICAgaWYgKHRpY2tldC5yZXF1ZXN0SWQgIT09IFNTRU1hbmFnZXIubm9ybWFsaXplUmVxdWVzdElkKHJlcXVlc3RJZCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7IG9yZ0lkOiB0aWNrZXQub3JnSWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2xpZW50IHRvIHRoZSBTU0UgbWFuYWdlclxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIC0gVW5pcXVlIHJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgUmVzcG9uc2Ugb2JqZWN0XG4gICAqIEBwYXJhbSBvcmdJZCAtIEF1dGhlbnRpY2F0ZWQgb3JnIGlkIChvcHRpb25hbCkuIFdoZW4gc2V0LCBlbmZvcmNlcyB0aGVcbiAgICogICBwZXItb3JnIGNhcCBhbmQgdGhlIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQgb24gZGlzY29ubmVjdC9jbGVhbnVwLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGNsaWVudCB3YXMgYWRkZWQsIGZhbHNlIGlmIHJlamVjdGVkIChsaW1pdCByZWFjaGVkKVxuICAgKi9cbiAgYWRkQ2xpZW50KHJlcXVlc3RJZDogc3RyaW5nLCByZXM6IFJlc3BvbnNlLCBvcmdJZD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5jbGllbnRzLmdldChyZXF1ZXN0SWQpIHx8IFtdO1xuXG4gICAgLy8gQ2hlY2sgY2xpZW50IGxpbWl0XG4gICAgaWYgKGV4aXN0aW5nLmxlbmd0aCA+PSB0aGlzLm1heENsaWVudHNQZXJSZXF1ZXN0KSB7XG4gICAgICBsb2dnZXIud2FybihgQ2xpZW50IGxpbWl0IHJlYWNoZWQgZm9yIHJlcXVlc3QgJHtyZXF1ZXN0SWR9IChtYXg6ICR7dGhpcy5tYXhDbGllbnRzUGVyUmVxdWVzdH0pYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUHJvY2Vzcy13aWRlIGNhcDogcHJvdGVjdHMgZmQgdGFibGUgKyBtZW1vcnkgZnJvbSBydW5hd2F5IGRhc2hib2FyZHMuXG4gICAgaWYgKHRoaXMudG90YWxDbGllbnRzKCkgPj0gdGhpcy5tYXhUb3RhbENsaWVudHMpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBUb3RhbCBTU0UgY2xpZW50IGNhcCByZWFjaGVkIChtYXg6ICR7dGhpcy5tYXhUb3RhbENsaWVudHN9KTsgcmVqZWN0aW5nIG5ldyBjb25uZWN0aW9uYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUGVyLW9yZyBjYXA6IHByZXZlbnRzIG9uZSBub2lzeSBvcmcgZnJvbSBtb25vcG9saXppbmcgcHJvY2Vzcy13aWRlXG4gICAgLy8gc2xvdHMuIEVuZm9yY2VkIG9ubHkgd2hlbiBvcmdJZCBpcyBrbm93biDigJQgc2VydmljZS1pbnRlcm5hbCAvIGFub255bW91c1xuICAgIC8vIHN0cmVhbXMgdGhhdCBuZXZlciBpZGVudGlmeSB3aXRoIGFuIG9yZ0lkIHN0YXkgc3ViamVjdCB0byB0aGUgZ2xvYmFsXG4gICAgLy8gY2VpbGluZ3MgYWJvdmUuIFJlc2VydmUgYXRvbWljYWxseSBiZWZvcmUgaW5zZXJ0IHNvIHR3byBjb25jdXJyZW50XG4gICAgLy8gcmVxdWVzdHMgYXQgdGhlIGxpbWl0IGNhbid0IGJvdGggc3VjY2VlZC5cbiAgICBpZiAob3JnSWQpIHtcbiAgICAgIGNvbnN0IG9yZ0N1cnJlbnQgPSB0aGlzLm9yZ0NsaWVudENvdW50cy5nZXQob3JnSWQpID8/IDA7XG4gICAgICBpZiAob3JnQ3VycmVudCA+PSB0aGlzLm1heENsaWVudHNQZXJPcmcpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFBlci1vcmcgU1NFIGNsaWVudCBjYXAgcmVhY2hlZCBmb3IgJHtvcmdJZH0gKG1heDogJHt0aGlzLm1heENsaWVudHNQZXJPcmd9KTsgcmVqZWN0aW5nIG5ldyBjb25uZWN0aW9uYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3JnQ2xpZW50Q291bnRzLnNldChvcmdJZCwgb3JnQ3VycmVudCArIDEpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aW1lb3V0IGZvciB0aGlzIGNsaWVudFxuICAgIGNvbnN0IGNsaWVudElkID0gdXVpZCgpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2xpZW50ICR7Y2xpZW50SWR9IHRpbWVkIG91dCBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH1gKTtcbiAgICAgIHRoaXMucmVtb3ZlQ2xpZW50KHJlcXVlc3RJZCwgY2xpZW50SWQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUmVzcG9uc2UgYWxyZWFkeSBjbG9zZWQgb24gdGltZW91dCcsIHsgcmVxdWVzdElkLCBjbGllbnRJZCwgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSB9KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLmNsaWVudFRpbWVvdXRNcyk7XG5cbiAgICBjb25zdCBjbGllbnQ6IFNTRUNsaWVudCA9IHtcbiAgICAgIGlkOiBjbGllbnRJZCxcbiAgICAgIHJlcyxcbiAgICAgIGNvbm5lY3RlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgdGltZW91dCxcbiAgICAgIGJhY2twcmVzc3VyZUNvdW50OiAwLFxuICAgICAgb3JnSWQsXG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBkaXNjb25uZWN0aW9uXG4gICAgcmVzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRoaXMucmVtb3ZlQ2xpZW50KHJlcXVlc3RJZCwgY2xpZW50SWQpO1xuICAgIH0pO1xuXG4gICAgcmVzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihgU1NFIGNsaWVudCBlcnJvciBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH06YCwgZXJyKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRoaXMucmVtb3ZlQ2xpZW50KHJlcXVlc3RJZCwgY2xpZW50SWQpO1xuICAgIH0pO1xuXG4gICAgZXhpc3RpbmcucHVzaChjbGllbnQpO1xuICAgIHRoaXMuY2xpZW50cy5zZXQocmVxdWVzdElkLCBleGlzdGluZyk7XG5cbiAgICBsb2dnZXIuZGVidWcoYENsaWVudCAke2NsaWVudElkfSBjb25uZWN0ZWQgZm9yIHJlcXVlc3QgJHtyZXF1ZXN0SWR9ICh0b3RhbDogJHtleGlzdGluZy5sZW5ndGh9KWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIERyb3Agb25lIGZyb20gdGhlIHBlci1vcmcgY291bnRlci4gSWRlbXBvdGVudDogYSBjb3VudGVyIGF0IDAgc3RheXMgYXQgMFxuICAgKiAgYW5kIHRoZSBvcmcga2V5IGlzIHJlbW92ZWQgZnJvbSB0aGUgbWFwLiAqL1xuICBwcml2YXRlIGRlY3JlbWVudE9yZ0NvdW50KG9yZ0lkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLm9yZ0NsaWVudENvdW50cy5nZXQob3JnSWQpID8/IDA7XG4gICAgaWYgKGN1cnJlbnQgPD0gMSkgdGhpcy5vcmdDbGllbnRDb3VudHMuZGVsZXRlKG9yZ0lkKTtcbiAgICBlbHNlIHRoaXMub3JnQ2xpZW50Q291bnRzLnNldChvcmdJZCwgY3VycmVudCAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjbGllbnQgZnJvbSB0aGUgbWFuYWdlclxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVDbGllbnQocmVxdWVzdElkOiBzdHJpbmcsIGNsaWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjbGllbnRzID0gdGhpcy5jbGllbnRzLmdldChyZXF1ZXN0SWQpO1xuICAgIGlmICghY2xpZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVtYWluaW5nID0gY2xpZW50cy5maWx0ZXIoYyA9PiB7XG4gICAgICBpZiAoYy5pZCA9PT0gY2xpZW50SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGMudGltZW91dCk7XG4gICAgICAgIC8vIE1pcnJvciB0aGUgcGVyLW9yZyBjb3VudGVyIOKAlCBtdXN0IGRlY3JlbWVudCBoZXJlLCBub3QganVzdCBpbiB0aGVcbiAgICAgICAgLy8gZXhwbGljaXQgY2xvc2UgcGF0aHMsIHNpbmNlICdjbG9zZScvJ2Vycm9yJyBldmVudCBoYW5kbGVycyBhcmUgdGhlXG4gICAgICAgIC8vIHByaW1hcnkgZGlzY29ubmVjdCBzaWduYWwgaW4gcHJhY3RpY2UuXG4gICAgICAgIHRoaXMuZGVjcmVtZW50T3JnQ291bnQoYy5vcmdJZCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlbWFpbmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2xpZW50cy5kZWxldGUocmVxdWVzdElkKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQWxsIGNsaWVudHMgZGlzY29ubmVjdGVkIGZvciByZXF1ZXN0ICR7cmVxdWVzdElkfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsaWVudHMuc2V0KHJlcXVlc3RJZCwgcmVtYWluaW5nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIHRvIGFsbCBTU0UgY2xpZW50cyBmb3IgYSByZXF1ZXN0SWRcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RJZCAtIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHR5cGUgLSBFdmVudCB0eXBlXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gTWVzc2FnZSBzdHJpbmdcbiAgICogQHBhcmFtIGRhdGEgLSBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgICogQHJldHVybnMgTnVtYmVyIG9mIGNsaWVudHMgdGhlIG1lc3NhZ2Ugd2FzIHNlbnQgdG9cbiAgICovXG4gIHNlbmQocmVxdWVzdElkOiBzdHJpbmcsIHR5cGU6IFNTRUV2ZW50VHlwZSwgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bik6IG51bWJlciB7XG4gICAgY29uc3QgcGF5bG9hZDogU1NFUGF5bG9hZCA9IHtcbiAgICAgIHRzOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0eXBlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGRhdGEsXG4gICAgfTtcblxuICAgIGNvbnN0IGNsaWVudHMgPSBbLi4uKHRoaXMuY2xpZW50cy5nZXQocmVxdWVzdElkKSB8fCBbXSldO1xuICAgIGxldCBzZW50Q291bnQgPSAwO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBgZGF0YTogJHtKU09OLnN0cmluZ2lmeShwYXlsb2FkKX1cXG5cXG5gO1xuXG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgY2xpZW50cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQmFja3ByZXNzdXJlOiBza2lwIGNsaWVudHMgd2hvc2Ugd3JpdGUgYnVmZmVyIGlzIGZ1bGxcbiAgICAgICAgaWYgKGNsaWVudC5yZXMud3JpdGFibGVFbmRlZCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2xpZW50KHJlcXVlc3RJZCwgY2xpZW50LmlkKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5Xcml0ZSA9IGNsaWVudC5yZXMud3JpdGUoc2VyaWFsaXplZCk7XG4gICAgICAgIGlmICghY2FuV3JpdGUpIHtcbiAgICAgICAgICBjbGllbnQuYmFja3ByZXNzdXJlQ291bnQrKztcbiAgICAgICAgICAvLyBEaXNjb25uZWN0IGNsaWVudHMgdGhhdCBjb25zaXN0ZW50bHkgY2FuJ3Qga2VlcCB1cCAoMTAgY29uc2VjdXRpdmUgYmFja3ByZXNzdXJlIGV2ZW50cylcbiAgICAgICAgICBpZiAoY2xpZW50LmJhY2twcmVzc3VyZUNvdW50ID49IENvcmVDb25zdGFudHMuU1NFX0JBQ0tQUkVTU1VSRV9USFJFU0hPTEQpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBEaXNjb25uZWN0aW5nIHNsb3cgY2xpZW50ICR7Y2xpZW50LmlkfSBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH0gKCR7Y2xpZW50LmJhY2twcmVzc3VyZUNvdW50fSBiYWNrcHJlc3N1cmUgZXZlbnRzKWApO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGllbnQocmVxdWVzdElkLCBjbGllbnQuaWQpO1xuICAgICAgICAgICAgdHJ5IHsgY2xpZW50LnJlcy5lbmQoKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgY2xvc2VkICovIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnQuYmFja3ByZXNzdXJlQ291bnQgPSAwOyAvLyBSZXNldCBvbiBzdWNjZXNzZnVsIHdyaXRlXG4gICAgICAgIH1cbiAgICAgICAgc2VudENvdW50Kys7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzZW5kIHRvIGNsaWVudCAke2NsaWVudC5pZH06YCwgZXJyb3IpO1xuICAgICAgICB0aGlzLnJlbW92ZUNsaWVudChyZXF1ZXN0SWQsIGNsaWVudC5pZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbnRDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCcm9hZGNhc3QgYSBtZXNzYWdlIHRvIGFsbCBjb25uZWN0ZWQgY2xpZW50cyBhY3Jvc3MgYWxsIHJlcXVlc3RzXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gRXZlbnQgdHlwZVxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIE1lc3NhZ2Ugc3RyaW5nXG4gICAqIEBwYXJhbSBkYXRhIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhXG4gICAqIEByZXR1cm5zIFRvdGFsIG51bWJlciBvZiBjbGllbnRzIHRoZSBtZXNzYWdlIHdhcyBzZW50IHRvXG4gICAqL1xuICBicm9hZGNhc3QodHlwZTogU1NFRXZlbnRUeXBlLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWxTZW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RJZCBvZiB0aGlzLmNsaWVudHMua2V5cygpKSB7XG4gICAgICB0b3RhbFNlbnQgKz0gdGhpcy5zZW5kKHJlcXVlc3RJZCwgdHlwZSwgbWVzc2FnZSwgZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0b3RhbFNlbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYWxsIGNsaWVudHMgZm9yIGEgc3BlY2lmaWMgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIC0gUmVxdWVzdCBJRCB0byBjbG9zZVxuICAgKiBAcGFyYW0gZmluYWxNZXNzYWdlIC0gT3B0aW9uYWwgZmluYWwgbWVzc2FnZSB0byBzZW5kIGJlZm9yZSBjbG9zaW5nXG4gICAqL1xuICBjbG9zZVJlcXVlc3QocmVxdWVzdElkOiBzdHJpbmcsIGZpbmFsTWVzc2FnZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNsaWVudHMgPSB0aGlzLmNsaWVudHMuZ2V0KHJlcXVlc3RJZCk7XG4gICAgaWYgKCFjbGllbnRzKSByZXR1cm47XG5cbiAgICBpZiAoZmluYWxNZXNzYWdlKSB7XG4gICAgICB0aGlzLnNlbmQocmVxdWVzdElkLCAnQ09NUExFVEVEJywgZmluYWxNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiBjbGllbnRzKSB7XG4gICAgICBjbGVhclRpbWVvdXQoY2xpZW50LnRpbWVvdXQpO1xuICAgICAgdGhpcy5kZWNyZW1lbnRPcmdDb3VudChjbGllbnQub3JnSWQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xpZW50LnJlcy5lbmQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1Jlc3BvbnNlIGFscmVhZHkgY2xvc2VkIG9uIHJlcXVlc3QgY2xvc2UnLCB7IHJlcXVlc3RJZCwgY2xpZW50SWQ6IGNsaWVudC5pZCwgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudHMuZGVsZXRlKHJlcXVlc3RJZCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBDbG9zZWQgYWxsIGNsaWVudHMgZm9yIHJlcXVlc3QgJHtyZXF1ZXN0SWR9YCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YXRpc3RpY3MgYWJvdXQgY3VycmVudCBjb25uZWN0aW9uc1xuICAgKi9cbiAgZ2V0U3RhdHMoKTogU1NFTWFuYWdlclN0YXRzIHtcbiAgICBsZXQgdG90YWxDbGllbnRzID0gMDtcbiAgICBsZXQgb2xkZXN0Q29ubmVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGZvciAoY29uc3QgY2xpZW50cyBvZiB0aGlzLmNsaWVudHMudmFsdWVzKCkpIHtcbiAgICAgIHRvdGFsQ2xpZW50cyArPSBjbGllbnRzLmxlbmd0aDtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50IG9mIGNsaWVudHMpIHtcbiAgICAgICAgY29uc3QgYWdlID0gbm93IC0gY2xpZW50LmNvbm5lY3RlZEF0O1xuICAgICAgICBpZiAob2xkZXN0Q29ubmVjdGlvbiA9PT0gbnVsbCB8fCBhZ2UgPiBvbGRlc3RDb25uZWN0aW9uKSB7XG4gICAgICAgICAgb2xkZXN0Q29ubmVjdGlvbiA9IGFnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFJlcXVlc3RzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgIHRvdGFsQ2xpZW50cyxcbiAgICAgIG9sZGVzdENvbm5lY3Rpb25Nczogb2xkZXN0Q29ubmVjdGlvbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgcmVxdWVzdCBoYXMgYW55IGNvbm5lY3RlZCBjbGllbnRzXG4gICAqL1xuICBoYXNDbGllbnRzKHJlcXVlc3RJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2xpZW50cyA9IHRoaXMuY2xpZW50cy5nZXQocmVxdWVzdElkKTtcbiAgICByZXR1cm4gY2xpZW50cyAhPT0gdW5kZWZpbmVkICYmIGNsaWVudHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlciBvZiBjbGllbnRzIGZvciBhIHNwZWNpZmljIHJlcXVlc3RcbiAgICovXG4gIGdldENsaWVudENvdW50KHJlcXVlc3RJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnRzLmdldChyZXF1ZXN0SWQpPy5sZW5ndGggPz8gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaWRkbGV3YXJlIHRvIGluaXRpYWxpemUgYSB0aWNrZXQtYXV0aGVudGljYXRlZCBTU0UgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVGhlIHN0cmVhbSBpcyBOT1Qgb3BlbiB0byB0aGUgd29ybGQ6IHRoZSBjYWxsZXIgbXVzdCBmaXJzdCBleGNoYW5nZSBpdHNcbiAgICogSldUIGZvciBhIHNob3J0LWxpdmVkIHNpbmdsZS11c2UgdGlja2V0IChzZWUge0BsaW5rIGNyZWF0ZVRpY2tldH0sIHdpcmVkIHRvXG4gICAqIGBQT1NUIC9sb2dzL3RpY2tldGApIGFuZCBwYXNzIGl0IGFzIGA/dGlja2V0PTx0PmAuIFRoZSBtaWRkbGV3YXJlIHZhbGlkYXRlc1xuICAgKiArIGNvbnN1bWVzIHRoZSB0aWNrZXQsIGJpbmRzIHRoZSBjb25uZWN0aW9uIHRvIHRoZSB0aWNrZXQncyBvcmcsIGFuZFxuICAgKiBlbmZvcmNlcyB0aGUgcGVyLW9yZyBjb25uZWN0aW9uIGNhcC4gQSBtaXNzaW5nIC8gaW52YWxpZCAvIGV4cGlyZWQgL1xuICAgKiBhbHJlYWR5LXVzZWQgdGlja2V0IGlzIHJlamVjdGVkIHdpdGggNDAxIGJlZm9yZSBhbnkgU1NFIGhlYWRlcnMgZmx1c2guXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXBwLmdldCgnL2xvZ3MvOnJlcXVlc3RJZCcsIHNzZU1hbmFnZXIubWlkZGxld2FyZSgpKTtcbiAgICogYGBgXG4gICAqL1xuICBtaWRkbGV3YXJlKCkge1xuICAgIHJldHVybiAocmVxOiB7IHBhcmFtczogeyByZXF1ZXN0SWQ6IHN0cmluZyB9OyBxdWVyeT86IHsgdGlja2V0PzogdW5rbm93biB9IH0sIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxdWVzdElkIH0gPSByZXEucGFyYW1zO1xuXG4gICAgICBpZiAoIVNTRV9SRVFVRVNUX0lEX1JFLnRlc3QocmVxdWVzdElkKSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwMCkuZW5kKCdJbnZhbGlkIHJlcXVlc3RJZCBmb3JtYXQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaWNrZXQgYXV0aCDigJQgcmVxdWlyZWQuIFJlc29sdmUgYD90aWNrZXQ9PHQ+YCwgdGhlbiB2YWxpZGF0ZSArIGNvbnN1bWVcbiAgICAgIC8vIGl0IChzaW5nbGUtdXNlKSBGT1IgVEhJUyBTVUJKRUNULiBBbiBhbm9ueW1vdXMsIG1hbGZvcm1lZCwgdW5rbm93bixcbiAgICAgIC8vIGV4cGlyZWQsIGFscmVhZHktY29uc3VtZWQsIG9yIHdyb25nLXN1YmplY3QgdGlja2V0IGlzIGEgNDAxLiBUaGUgb3JnIGlzXG4gICAgICAvLyB0YWtlbiBmcm9tIHRoZSB0aWNrZXQsIHNvIHRoZSBzdHJlYW0gaXMgYWx3YXlzIGJvdW5kIHRvIGEgdmVyaWZpZWRcbiAgICAgIC8vIHRlbmFudCBBTkQgdG8gdGhlIGV4YWN0IHN1YmplY3QgdGhlIHRpY2tldCB3YXMgbWludGVkIGZvciAobm8gYW5vbnltb3VzXG4gICAgICAvLyBzdHJlYW1zLCBubyBjcm9zcy1zdWJqZWN0IGF0dGFjaCkuXG4gICAgICBjb25zdCB0aWNrZXRJZCA9IHJlcS5xdWVyeT8udGlja2V0O1xuICAgICAgaWYgKHR5cGVvZiB0aWNrZXRJZCAhPT0gJ3N0cmluZycgfHwgdGlja2V0SWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAxKS5lbmQoJ01pc3NpbmcgdGlja2V0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnN1bWVkID0gdGhpcy5jb25zdW1lVGlja2V0KHRpY2tldElkLCByZXF1ZXN0SWQpO1xuICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICByZXMuc3RhdHVzKDQwMSkuZW5kKCdJbnZhbGlkIG9yIGV4cGlyZWQgdGlja2V0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ0lkID0gY29uc3VtZWQub3JnSWQ7XG5cbiAgICAgIC8vIFByZS1mbGlnaHQgcGVyLXJlcXVlc3QgY2FwIHNvIHdlIGNhbiByZXR1cm4gNDI5IGJlZm9yZSBmbHVzaGluZ1xuICAgICAgLy8gU1NFIGhlYWRlcnMgKGFmdGVyIGhlYWRlcnMgYXJlIGZsdXNoZWQgdGhlIGNsaWVudCBjYW4ndCByZWFkIGEgNDI5KS5cbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5jbGllbnRzLmdldChyZXF1ZXN0SWQpIHx8IFtdO1xuICAgICAgaWYgKGV4aXN0aW5nLmxlbmd0aCA+PSB0aGlzLm1heENsaWVudHNQZXJSZXF1ZXN0KSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBDbGllbnQgbGltaXQgcmVhY2hlZCBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH0gKG1heDogJHt0aGlzLm1heENsaWVudHNQZXJSZXF1ZXN0fSlgKTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjkpLmVuZCgnVG9vIG1hbnkgY29ubmVjdGlvbnMgZm9yIHRoaXMgcmVxdWVzdCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNhbWUgZm9yIHRoZSBwZXItb3JnIGNhcCDigJQgYmV0dGVyIHRvIHNlbmQgNDI5IHRoYW4gb3BlbiB0aGUgc3RyZWFtIGFuZFxuICAgICAgLy8gaW1tZWRpYXRlbHkgY2xvc2UgaXQuIFRoZSB0aWNrZXQgZ3VhcmFudGVlcyBhIHZlcmlmaWVkIG9yZyBpZCwgc28gdGhlXG4gICAgICAvLyBwZXItb3JnIGNlaWxpbmcgaXMgYWx3YXlzIGVuZm9yY2VkIGZvciB0aGUgL2xvZ3Mgc3RyZWFtLlxuICAgICAgaWYgKCh0aGlzLm9yZ0NsaWVudENvdW50cy5nZXQob3JnSWQpID8/IDApID49IHRoaXMubWF4Q2xpZW50c1Blck9yZykge1xuICAgICAgICBsb2dnZXIud2FybihgUGVyLW9yZyBTU0UgY2xpZW50IGNhcCByZWFjaGVkIGZvciAke29yZ0lkfSAobWF4OiAke3RoaXMubWF4Q2xpZW50c1Blck9yZ30pYCk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDI5KS5lbmQoJ1RvbyBtYW55IFNTRSBjb25uZWN0aW9ucyBmb3IgdGhpcyBvcmdhbml6YXRpb24nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9ldmVudC1zdHJlYW0nKTtcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nvbm5lY3Rpb24nLCAna2VlcC1hbGl2ZScpO1xuICAgICAgcmVzLnNldEhlYWRlcignWC1BY2NlbC1CdWZmZXJpbmcnLCAnbm8nKTsgLy8gRGlzYWJsZSBuZ2lueCBidWZmZXJpbmdcbiAgICAgIHJlcy5mbHVzaEhlYWRlcnMoKTtcblxuICAgICAgLy8gSGVhZGVycyBhcmUgZmx1c2hlZCDigJQgd2UgY2FuIG5vIGxvbmdlciBzZW5kIGEgNDI5LiBhZGRDbGllbnQgcmUtY2hlY2tzXG4gICAgICAvLyB0aGUgY2FwcyAoaW5jbHVkaW5nIHRoZSBwcm9jZXNzLXdpZGUgdG90YWwtY2xpZW50cyBjYXAsIHdoaWNoIHRoZVxuICAgICAgLy8gcHJlLWZsaWdodCBhYm92ZSBkb2VzIG5vdCkgYW5kIGNhbiBzdGlsbCByZWplY3Qgb24gYSByYWNlOiBhIGNvbmN1cnJlbnRcbiAgICAgIC8vIGNvbm5lY3Rpb24gbWF5IGhhdmUgZmlsbGVkIGEgY2FwIGJldHdlZW4gdGhlIHByZS1mbGlnaHQgY2hlY2sgYW5kIGhlcmUuXG4gICAgICAvLyBPbiByZWplY3Rpb24sIGNsb3NlIHRoZSBub3ctZGFuZ2xpbmcgcmVzcG9uc2UgaW5zdGVhZCBvZiBsZWF2aW5nIGFuXG4gICAgICAvLyBvcGVuIHNvY2tldCB3aXRoIG5vIGNsaWVudCByZWNvcmQgKHdoaWNoIHdvdWxkIGxlYWsgYW4gZmQgKyBuZXZlciBlbWl0XG4gICAgICAvLyBzdHJlYW0gZGF0YSkuXG4gICAgICBjb25zdCBhZGRlZCA9IHRoaXMuYWRkQ2xpZW50KHJlcXVlc3RJZCwgcmVzLCBvcmdJZCk7XG4gICAgICBpZiAoIWFkZGVkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBTU0UgYWRkQ2xpZW50IHJlamVjdGVkIGFmdGVyIGhlYWRlcnMgZmx1c2hlZCBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH07IGNsb3NpbmcgZGFuZ2xpbmcgcmVzcG9uc2VgKTtcbiAgICAgICAgdHJ5IHsgcmVzLmVuZCgpOyB9IGNhdGNoIHsgLyogYWxyZWFkeSBjbG9zZWQgKi8gfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgcGVyaW9kaWMgY2xlYW51cCBvZiBzdGFsZSBjb25uZWN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGFydENsZWFudXBJbnRlcnZhbChpbnRlcnZhbE1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgIH0sIGludGVydmFsTXMpO1xuXG4gICAgLy8gRG9uJ3QgcHJldmVudCBwcm9jZXNzIGV4aXRcbiAgICB0aGlzLmNsZWFudXBJbnRlcnZhbC51bnJlZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIHN0YWxlIGNvbm5lY3Rpb25zIHVzaW5nIHNpbmdsZS1wYXNzIHBhcnRpdGlvbi5cbiAgICogTyhSIMOXIEMpIGluc3RlYWQgb2YgTyhSIMOXIEPCsiksIGFuZCBhdm9pZHMgbXV0YXRpb24tZHVyaW5nLWl0ZXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBjbGVhbmVkID0gMDtcblxuICAgIC8vIFN3ZWVwIGV4cGlyZWQgdGlja2V0cyBzbyB0aGUgc3RvcmUgc3RheXMgYm91bmRlZCBldmVuIHdoZW4gdGlja2V0cyBhcmVcbiAgICAvLyBtaW50ZWQgYnV0IG5ldmVyIGNvbnN1bWVkIChjbGllbnQgY2xvc2VkIHRoZSB0YWIgYmVmb3JlIGNvbm5lY3RpbmcpLlxuICAgIC8vIENvbnN1bWUtdGltZSBzdGlsbCByZS1jaGVja3MgZXhwaXJ5LCBzbyB0aGlzIGlzIG1lbW9yeSBoeWdpZW5lIG9ubHkuXG4gICAgZm9yIChjb25zdCBbaWQsIHRpY2tldF0gb2YgdGhpcy50aWNrZXRzKSB7XG4gICAgICBpZiAobm93ID4gdGlja2V0LmV4cGlyZXNBdCkgdGhpcy50aWNrZXRzLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbcmVxdWVzdElkLCBjbGllbnRzXSBvZiB0aGlzLmNsaWVudHMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBzdGFsZTogU1NFQ2xpZW50W10gPSBbXTtcbiAgICAgIGNvbnN0IGFjdGl2ZTogU1NFQ2xpZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBjbGllbnQgb2YgY2xpZW50cykge1xuICAgICAgICAvLyBUaW1lLWJhc2VkIGV2aWN0aW9uIE9SIGEgc29ja2V0IHRoYXQgc2lsZW50bHkgY2xvc2VkIChubyAnY2xvc2UnXG4gICAgICAgIC8vIGV2ZW50KSDigJQgTm9kZSBzb21ldGltZXMgZHJvcHMgc29ja2V0cyB3aXRob3V0IGZpcmluZyB0aGUgZXZlbnQsXG4gICAgICAgIC8vIHNvIHdlIGV4cGxpY2l0bHkgY2hlY2sgd3JpdGFibGVFbmRlZC9kZXN0cm95ZWQgaGVyZS5cbiAgICAgICAgY29uc3QgYWdlU3RhbGUgPSBub3cgLSBjbGllbnQuY29ubmVjdGVkQXQgPiB0aGlzLmNsaWVudFRpbWVvdXRNcztcbiAgICAgICAgY29uc3Qgc29ja2V0RGVhZCA9IGNsaWVudC5yZXMud3JpdGFibGVFbmRlZCB8fCAoY2xpZW50LnJlcyBhcyB7IGRlc3Ryb3llZD86IGJvb2xlYW4gfSkuZGVzdHJveWVkID09PSB0cnVlO1xuICAgICAgICBpZiAoYWdlU3RhbGUgfHwgc29ja2V0RGVhZCkge1xuICAgICAgICAgIHN0YWxlLnB1c2goY2xpZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmUucHVzaChjbGllbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHN0YWxlKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChjbGllbnQudGltZW91dCk7XG4gICAgICAgIHRoaXMuZGVjcmVtZW50T3JnQ291bnQoY2xpZW50Lm9yZ0lkKTtcbiAgICAgICAgdHJ5IHsgY2xpZW50LnJlcy5lbmQoKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgY2xvc2VkICovIH1cbiAgICAgICAgY2xlYW5lZCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmNsaWVudHMuZGVsZXRlKHJlcXVlc3RJZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YWxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jbGllbnRzLnNldChyZXF1ZXN0SWQsIGFjdGl2ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsZWFuZWQgPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgQ2xlYW5lZCB1cCAke2NsZWFuZWR9IHN0YWxlIFNTRSBjb25uZWN0aW9uc2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaHV0ZG93biB0aGUgU1NFIG1hbmFnZXIgYW5kIGNsb3NlIGFsbCBjb25uZWN0aW9uc1xuICAgKi9cbiAgc2h1dGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2xlYW51cEludGVydmFsKTtcbiAgICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RJZCBvZiBbLi4udGhpcy5jbGllbnRzLmtleXMoKV0pIHtcbiAgICAgIHRoaXMuY2xvc2VSZXF1ZXN0KHJlcXVlc3RJZCwgJ1NlcnZlciBzaHV0dGluZyBkb3duJyk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oJ1NTRSBNYW5hZ2VyIHNodXQgZG93bicpO1xuICB9XG59XG4iXX0=
544
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NlLWNvbm5lY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL3NzZS1jb25uZWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFaEUsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBNEUzQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcscUVBQXFFLENBQUM7QUErQnZHOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBQ2IsT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBQ2pEOzsyQ0FFdUM7SUFDL0IsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3BEOzs4Q0FFMEM7SUFDbEMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO0lBQzlCLG9CQUFvQixDQUFTO0lBQzdCLGVBQWUsQ0FBUztJQUN4QixnQkFBZ0IsQ0FBUztJQUN6QixlQUFlLENBQVM7SUFDeEIsZ0JBQWdCLENBQVM7SUFDekIsV0FBVyxDQUFTO0lBQ3BCLGVBQWUsQ0FBUztJQUNqQyxlQUFlLEdBQTBCLElBQUksQ0FBQztJQUV0RCxZQUFZLE9BQU8sR0FBc0IsRUFBRTtRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxD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LEdBQUcsRUFBRSxDQUFDO2dCQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLE9BQU8sd0JBQXdCLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztRQUVELEtBQUssTUFBTSxTQUFTLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIFNTRV9USUNLRVRfVFRMX01TIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50cyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgdjcgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3NzZS1tYW5hZ2VyJyk7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgZm9yIFNTRSBsb2dnaW5nXG4gKi9cbmV4cG9ydCB0eXBlIFNTRUV2ZW50VHlwZSA9ICdJTkZPJyB8ICdXQVJOJyB8ICdFUlJPUicgfCAnQ09NUExFVEVEJyB8ICdST0xMQkFDSycgfCAnTUVTU0FHRSc7XG5cbi8qKlxuICogU1NFIHBheWxvYWQgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU1NFUGF5bG9hZCB7XG4gIHRzOiBzdHJpbmc7XG4gIHR5cGU6IFNTRUV2ZW50VHlwZTtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkYXRhPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTU0UgY2xpZW50IHdpdGggY29ubmVjdGlvbiB0cmFja2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNTRUNsaWVudCB7XG4gIGlkOiBzdHJpbmc7XG4gIHJlczogUmVzcG9uc2U7XG4gIGNvbm5lY3RlZEF0OiBudW1iZXI7XG4gIHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0O1xuICAvKiogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJhY2twcmVzc3VyZSBldmVudHMgKHdyaXRlIHJldHVybmVkIGZhbHNlKS4gKi9cbiAgYmFja3ByZXNzdXJlQ291bnQ6IG51bWJlcjtcbiAgLyoqIE93bmluZyBvcmcgaWQg4oCUIHBvcHVsYXRlZCB3aGVuIHRoZSByZXF1ZXN0IHdhcyBhdXRoZW50aWNhdGVkLiBVc2VkIHRvXG4gICAqICBkZWNyZW1lbnQgdGhlIHBlci1vcmcgY291bnRlciBvbiBkaXNjb25uZWN0IC8gY2xlYW51cC4gKi9cbiAgb3JnSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU1NFIE1hbmFnZXIgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU1NFTWFuYWdlck9wdGlvbnMge1xuICAvKiogTWF4aW11bSBjbGllbnRzIGFsbG93ZWQgcGVyIHJlcXVlc3QgSUQgKGRlZmF1bHQ6IDEwKSAqL1xuICBtYXhDbGllbnRzUGVyUmVxdWVzdD86IG51bWJlcjtcbiAgLyoqIENsaWVudCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMzAgbWludXRlcykgKi9cbiAgY2xpZW50VGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogSW50ZXJ2YWwgZm9yIGNsZWFudXAgY2hlY2tzIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogNSBtaW51dGVzKSAqL1xuICBjbGVhbnVwSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhhcmQgY2FwIG9uIHRvdGFsIG9wZW4gY29ubmVjdGlvbnMgcGVyIHByb2Nlc3MuIERlZmF1bHRzIHRvIDEwMDAgZnJvbVxuICAgKiBgU1NFX01BWF9UT1RBTF9DTElFTlRTYC4gTmV3IGNvbm5lY3Rpb25zIGJleW9uZCB0aGlzIGFyZSByZWplY3RlZCBhdFxuICAgKiBgYWRkQ2xpZW50KClgLiBUdW5lIHVwIGlmIHlvdXIgc2VydmljZSBzZXJ2ZXMgPiAxMDAwIGNvbmN1cnJlbnQgU1NFXG4gICAqIGRhc2hib2FyZHMsIGJ1dCBiZSBhd2FyZSBOb2RlLmpzIGZkIGxpbWl0cyBkb21pbmF0ZSBhYm92ZSB+NTAwMC5cbiAgICovXG4gIG1heFRvdGFsQ2xpZW50cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBlci1vcmcgY2VpbGluZyBvbiBjb25jdXJyZW50IFNTRSBzdHJlYW1zLiBEZWZhdWx0cyB0byA1MCBmcm9tXG4gICAqIGBTU0VfTUFYX0NMSUVOVFNfUEVSX09SR2AuIFByb3RlY3RzIGFnYWluc3Qgb25lIG5vaXN5IG9yZyBjb25zdW1pbmcgdGhlXG4gICAqIHByb2Nlc3Mtd2lkZSBidWRnZXQg4oCUIHdpdGhvdXQgaXQsIGFuIGF1dGhlbnRpY2F0ZWQgdXNlciBjYW4gZmFuIG91dFxuICAgKiB0aG91c2FuZHMgb2Ygc3RyZWFtcyAob25lIHBlciBkYXNoYm9hcmQgLyBsb2cgc3RyZWFtKSBhbmQgc3RhcnZlIG90aGVyXG4gICAqIG9yZ3Mgb2YgY29ubmVjdGlvbiBzbG90cy4gVGhlIGNhcCBpcyBlbmZvcmNlZCBvbmx5IG9uIGBhZGRDbGllbnRgIGNhbGxzXG4gICAqIHRoYXQgY2FycnkgYW4gYG9yZ0lkYDsgc2VydmljZS1pbnRlcm5hbCAvIGFub255bW91cyBTU0UgdHJhZmZpYyBza2lwcyBpdC5cbiAgICovXG4gIG1heENsaWVudHNQZXJPcmc/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0b3RhbCBsaXZlICh1bmNvbnN1bWVkLCB1bmV4cGlyZWQpIFNTRSB0aWNrZXRzIGFjcm9zcyB0aGVcbiAgICogcHJvY2Vzcy4gRGVmYXVsdHMgdG8gMTAwMCBmcm9tIGBTU0VfTUFYX1RPVEFMX1RJQ0tFVFNgLiBCb3VuZHMgbWVtb3J5XG4gICAqIHVuZGVyIGFidXNlIOKAlCBgY3JlYXRlVGlja2V0YCByZXR1cm5zIGB7IG9rOiBmYWxzZSwgcmVhc29uOiAnY2FwYWNpdHknIH1gXG4gICAqIG9uY2UgcmVhY2hlZC5cbiAgICovXG4gIG1heFRvdGFsVGlja2V0cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBlci1vcmcgY2FwIG9uIGxpdmUgU1NFIHRpY2tldHMuIERlZmF1bHRzIHRvIDEwIGZyb21cbiAgICogYFNTRV9NQVhfVElDS0VUU19QRVJfT1JHYC4gUHJldmVudHMgYSBzaW5nbGUgdGVuYW50IGZyb20gc2F0dXJhdGluZyB0aGVcbiAgICogdGlja2V0IHRhYmxlIOKAlCBgY3JlYXRlVGlja2V0YCByZXR1cm5zIGB7IG9rOiBmYWxzZSwgcmVhc29uOiAnb3JnLWxpbWl0JyB9YFxuICAgKiBvbmNlIHJlYWNoZWQuXG4gICAqL1xuICBtYXhUaWNrZXRzUGVyT3JnPzogbnVtYmVyO1xuICAvKiogVGlja2V0IFRUTCBpbiBtcyAoZGVmYXVsdDogYFNTRV9USUNLRVRfVFRMX01TYCBmcm9tIGFwaS1jb3JlKS4gKi9cbiAgdGlja2V0VHRsTXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBidWlsZC1sb2cgc3RyZWFtIHN1YmplY3QgaWQ6IGVpdGhlciBhIGRhc2hlZCBVVUlEIChhcGktc2VydmVyJ3MgYHV1aWQoKWApXG4gKiBvciBuZ2lueCdzIGAkcmVxdWVzdF9pZGAg4oCUIDE2IHJhbmRvbSBieXRlcyByZW5kZXJlZCBhcyAzMiBoZXggY2hhcnMgd2l0aCBOT1xuICogZGFzaGVzLiBBY2NlcHQgYm90aCBieSBtYWtpbmcgdGhlIGdyb3VwIHNlcGFyYXRvcnMgb3B0aW9uYWw7IHN0aWxsIHN0cmljdGx5XG4gKiAzMiBoZXggY2hhcnMgc28gaXQgY2FuJ3QgY2FycnkgYW4gaW5qZWN0aW9uIC8gcGF0aC10cmF2ZXJzYWwgcGF5bG9hZCBpbnRvIHRoZVxuICogU1NFIHN1YmplY3QuIFNoYXJlZCBieSB0aGUgdGlja2V0LW1pbnQgcm91dGUgYW5kIHRoZSBzdHJlYW0gbWlkZGxld2FyZSBzb1xuICogYm90aCB2YWxpZGF0ZSB0aGUgc3ViamVjdCBpZGVudGljYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNTRV9SRVFVRVNUX0lEX1JFID0gL15bMC05YS1mXXs4fS0/WzAtOWEtZl17NH0tP1swLTlhLWZdezR9LT9bMC05YS1mXXs0fS0/WzAtOWEtZl17MTJ9JC9pO1xuXG4vKiogQSBtaW50ZWQgU1NFIHRpY2tldCDigJQgc2luZ2xlLXVzZSwgb3JnLWJvdW5kLCBzdWJqZWN0LWJvdW5kLCBzaG9ydC1saXZlZC4gKi9cbmludGVyZmFjZSBTU0VUaWNrZXQge1xuICBvcmdJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGJ1aWxkLWxvZyBzdHJlYW0gc3ViamVjdCB0aGlzIHRpY2tldCBhdXRob3JpemVzLiBBIHRpY2tldCBtYXkgT05MWSBiZVxuICAgKiBjb25zdW1lZCB0byBvcGVuIHRoZSBzdHJlYW0gZm9yIHRoaXMgZXhhY3QgcmVxdWVzdElkLiBCaW5kcyB0aGUgc2luZ2xlLXVzZVxuICAgKiB0aWNrZXQgdG8gYSBzcGVjaWZpYyBzdWJqZWN0IHNvIGFuIGF1dGhlbnRpY2F0ZWQgb3JnIGNhbid0IGF0dGFjaCB0byBhXG4gICAqIHN0cmVhbSBpdCB3YXMgbmV2ZXIgaXNzdWVkIGZvciAocHJldmlvdXNseSB0aGUgYDpyZXF1ZXN0SWRgIHdhcyBvbmx5XG4gICAqIGZvcm1hdC12YWxpZGF0ZWQsIHNvIGFueSBvcmcgY291bGQgc3Vic2NyaWJlIHRvIGFueSBzdWJqZWN0IGl0IGNvdWxkXG4gICAqIGd1ZXNzKS4gU3RvcmVkIG5vcm1hbGl6ZWQgKGRhc2hlcyBzdHJpcHBlZCwgbG93ZXJjYXNlZCkgZm9yIGNvbXBhcmlzb24uXG4gICAqL1xuICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgZXhwaXJlc0F0OiBudW1iZXI7XG59XG5cbi8qKiBSZXN1bHQgb2Yge0BsaW5rIFNTRU1hbmFnZXIuY3JlYXRlVGlja2V0fS4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVRpY2tldFJlc3VsdCA9XG4gIHwgeyBvazogdHJ1ZTsgdGlja2V0OiBzdHJpbmcgfVxuICB8IHsgb2s6IGZhbHNlOyByZWFzb246ICdvcmctbGltaXQnIHwgJ2NhcGFjaXR5JyB9O1xuXG4vKipcbiAqIFNTRSBNYW5hZ2VyIHN0YXRpc3RpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTU0VNYW5hZ2VyU3RhdHMge1xuICB0b3RhbFJlcXVlc3RzOiBudW1iZXI7XG4gIHRvdGFsQ2xpZW50czogbnVtYmVyO1xuICBvbGRlc3RDb25uZWN0aW9uTXM6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogU1NFIGhlbHBlciBjbGFzcyB3aXRoIG1lbW9yeSBsZWFrIHByb3RlY3Rpb25cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQ2xpZW50IGxpbWl0cyBwZXIgcmVxdWVzdCBJRFxuICogLSBBdXRvbWF0aWMgdGltZW91dCBmb3IgaWRsZSBjb25uZWN0aW9uc1xuICogLSBQZXJpb2RpYyBjbGVhbnVwIG9mIHN0YWxlIGNvbm5lY3Rpb25zXG4gKiAtIENvbm5lY3Rpb24gc3RhdGlzdGljc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzc2VNYW5hZ2VyID0gbmV3IFNTRU1hbmFnZXIoeyBtYXhDbGllbnRzUGVyUmVxdWVzdDogNSB9KTtcbiAqIGFwcC5nZXQoJy9sb2dzLzpyZXF1ZXN0SWQnLCBzc2VNYW5hZ2VyLm1pZGRsZXdhcmUoKSk7XG4gKlxuICogLy8gU2VuZCBldmVudHNcbiAqIHNzZU1hbmFnZXIuc2VuZCgncmVxdWVzdC0xMjMnLCAnSU5GTycsICdQcm9jZXNzaW5nLi4uJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNTRU1hbmFnZXIge1xuICBwcml2YXRlIGNsaWVudHMgPSBuZXcgTWFwPHN0cmluZywgU1NFQ2xpZW50W10+KCk7XG4gIC8qKiBQZXItb3JnIG9wZW4tY2xpZW50IGNvdW50ZXJzLiBEZWNyZW1lbnRlZCBvbiByZW1vdmVDbGllbnQvY2xlYW51cCBzbyB0aGVcbiAgICogIG1hcCBtaXJyb3JzIGBjbGllbnRzW10ub3JnSWRgIGNvdW50cyBhdCBhbGwgdGltZXMuIE9yZ3MgcmVhY2ggemVybyBhcmVcbiAgICogIGRlbGV0ZWQgdG8ga2VlcCB0aGUgbWFwIGJvdW5kZWQuICovXG4gIHByaXZhdGUgb3JnQ2xpZW50Q291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgLyoqIFNpbmdsZS11c2UgU1NFIHRpY2tldHMsIGtleWVkIGJ5IG9wYXF1ZSB0aWNrZXQgaWQuIEJvdW5kZWQgYnlcbiAgICogIGBtYXhUb3RhbFRpY2tldHNgIC8gYG1heFRpY2tldHNQZXJPcmdgOyBzd2VwdCBvbiB0aGUgY2xlYW51cCBpbnRlcnZhbCBhbmRcbiAgICogIHZhbGlkYXRlZCAoZXhwaXJ5KSBhdCBjb25zdW1lIHRpbWUuICovXG4gIHByaXZhdGUgdGlja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBTU0VUaWNrZXQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4Q2xpZW50c1BlclJlcXVlc3Q6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhUb3RhbENsaWVudHM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhDbGllbnRzUGVyT3JnOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4VG90YWxUaWNrZXRzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4VGlja2V0c1Blck9yZzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpY2tldFR0bE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50VGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgY2xlYW51cEludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNTRU1hbmFnZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm1heENsaWVudHNQZXJSZXF1ZXN0ID0gb3B0aW9ucy5tYXhDbGllbnRzUGVyUmVxdWVzdCA/PyBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfTUFYX0NMSUVOVFNfUEVSX1JFUVVFU1QgfHwgJzEwJywgMTApO1xuICAgIHRoaXMubWF4VG90YWxDbGllbnRzID0gb3B0aW9ucy5tYXhUb3RhbENsaWVudHMgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU1NFX01BWF9UT1RBTF9DTElFTlRTIHx8ICcxMDAwJywgMTApO1xuICAgIHRoaXMubWF4Q2xpZW50c1Blck9yZyA9IG9wdGlvbnMubWF4Q2xpZW50c1Blck9yZyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfTUFYX0NMSUVOVFNfUEVSX09SRyB8fCAnNTAnLCAxMCk7XG4gICAgdGhpcy5tYXhUb3RhbFRpY2tldHMgPSBvcHRpb25zLm1heFRvdGFsVGlja2V0cyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfTUFYX1RPVEFMX1RJQ0tFVFMgfHwgJzEwMDAnLCAxMCk7XG4gICAgdGhpcy5tYXhUaWNrZXRzUGVyT3JnID0gb3B0aW9ucy5tYXhUaWNrZXRzUGVyT3JnID8/IHBhcnNlSW50KHByb2Nlc3MuZW52LlNTRV9NQVhfVElDS0VUU19QRVJfT1JHIHx8ICcxMCcsIDEwKTtcbiAgICB0aGlzLnRpY2tldFR0bE1zID0gb3B0aW9ucy50aWNrZXRUdGxNcyA/PyBTU0VfVElDS0VUX1RUTF9NUztcbiAgICB0aGlzLmNsaWVudFRpbWVvdXRNcyA9IG9wdGlvbnMuY2xpZW50VGltZW91dE1zID8/IHBhcnNlSW50KHByb2Nlc3MuZW52LlNTRV9DTElFTlRfVElNRU9VVF9NUyB8fCAnMTgwMDAwMCcsIDEwKTsgLy8gMzAgbWludXRlc1xuXG4gICAgY29uc3QgY2xlYW51cEludGVydmFsTXMgPSBvcHRpb25zLmNsZWFudXBJbnRlcnZhbE1zID8/IHBhcnNlSW50KHByb2Nlc3MuZW52LlNTRV9DTEVBTlVQX0lOVEVSVkFMX01TIHx8ICczMDAwMDAnLCAxMCk7IC8vIDUgbWludXRlc1xuICAgIHRoaXMuc3RhcnRDbGVhbnVwSW50ZXJ2YWwoY2xlYW51cEludGVydmFsTXMpO1xuICB9XG5cbiAgLyoqIFRvdGFsIG9wZW4gY29ubmVjdGlvbnMgYWNyb3NzIGFsbCByZXF1ZXN0cy4gKi9cbiAgcHJpdmF0ZSB0b3RhbENsaWVudHMoKTogbnVtYmVyIHtcbiAgICBsZXQgbiA9IDA7XG4gICAgZm9yIChjb25zdCBjbGllbnRzIG9mIHRoaXMuY2xpZW50cy52YWx1ZXMoKSkgbiArPSBjbGllbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IG9wZW4tc3RyZWFtIGNvdW50IGZvciBhbiBvcmcgKDAgaWYgdW5zZWVuKS4gKi9cbiAgZ2V0T3JnQ2xpZW50Q291bnQob3JnSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3JnQ2xpZW50Q291bnRzLmdldChvcmdJZCkgPz8gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5vbmljYWwgZm9ybSBvZiBhIHJlcXVlc3RJZCBmb3IgZXF1YWxpdHkgY2hlY2tzOiBkYXNoZXMgc3RyaXBwZWQgYW5kXG4gICAqIGxvd2VyY2FzZWQsIHNvIHRoZSBkYXNoZWQgKGFwaS1zZXJ2ZXIgYHV1aWQoKWApIGFuZCB1bmRhc2hlZCAobmdpbnhcbiAgICogYCRyZXF1ZXN0X2lkYCkgcmVuZGVyaW5ncyBvZiB0aGUgc2FtZSBpZCBjb21wYXJlIGVxdWFsLiBDYWxsZXJzIGFyZVxuICAgKiBleHBlY3RlZCB0byBoYXZlIGFscmVhZHkgZm9ybWF0LXZhbGlkYXRlZCBhZ2FpbnN0IHtAbGluayBTU0VfUkVRVUVTVF9JRF9SRX0uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVSZXF1ZXN0SWQocmVxdWVzdElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXF1ZXN0SWQucmVwbGFjZSgvLS9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKiBDb3VudCBvZiBsaXZlICh1bmV4cGlyZWQpIHRpY2tldHMgY3VycmVudGx5IGhlbGQgZm9yIGFuIG9yZy4gKi9cbiAgcHJpdmF0ZSBjb3VudExpdmVUaWNrZXRzRm9yT3JnKG9yZ0lkOiBzdHJpbmcsIG5vdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgdGlja2V0IG9mIHRoaXMudGlja2V0cy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHRpY2tldC5vcmdJZCA9PT0gb3JnSWQgJiYgdGlja2V0LmV4cGlyZXNBdCA+IG5vdykgY291bnQrKztcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbnQgYSBzaG9ydC1saXZlZCwgc2luZ2xlLXVzZSBTU0UgdGlja2V0IGJvdW5kIHRvIGBvcmdJZGAgQU5EIGEgc3BlY2lmaWNcbiAgICogc3RyZWFtIHN1YmplY3QgKGByZXF1ZXN0SWRgKS4gQ2xpZW50cyBQT1NUIHRvIG9idGFpbiBvbmUgKEpXVC1hdXRoZW50aWNhdGVkKVxuICAgKiBmb3IgdGhlIGV4YWN0IHN0cmVhbSB0aGV5IGludGVuZCB0byBvcGVuLCB0aGVuIG9wZW4gdGhlIEV2ZW50U291cmNlIHdpdGhcbiAgICogYD90aWNrZXQ9PHQ+YCBzbyB0aGUgSldUIG5ldmVyIGxhbmRzIGluIGEgcXVlcnkgc3RyaW5nIC8gYWNjZXNzIGxvZy4gVGhlXG4gICAqIHRpY2tldCBjYW4gdGhlbiBvbmx5IGJlIGNvbnN1bWVkIHRvIG9wZW4gdGhhdCBvbmUgc3ViamVjdCdzIHN0cmVhbSDigJQgc2VlXG4gICAqIHtAbGluayBjb25zdW1lVGlja2V0fSDigJQgd2hpY2ggaXMgd2hhdCBlbmZvcmNlcyBwZXItc3ViamVjdCBhdXRob3JpemF0aW9uLlxuICAgKlxuICAgKiBCb3VuZGVkIGJ5IGBtYXhUb3RhbFRpY2tldHNgIChwcm9jZXNzLXdpZGUpIGFuZCBgbWF4VGlja2V0c1Blck9yZ2BcbiAgICogKHBlci10ZW5hbnQpLiBNaXJyb3JzIHRoZSBtZXNzYWdlLXNlcnZpY2Ugbm90aWZpY2F0aW9ucyB0aWNrZXQgc3RvcmUuXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCAtIE93bmluZyBvcmcgKGFscmVhZHkgbm9ybWFsaXplZCBieSB0aGUgY2FsbGVyKS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCAtIFRoZSBidWlsZC1sb2cgc3RyZWFtIHN1YmplY3QgdGhpcyB0aWNrZXQgYXV0aG9yaXplcy5cbiAgICogICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBmb3JtYXQtdmFsaWRhdGVkIGl0IChzZWUge0BsaW5rIFNTRV9SRVFVRVNUX0lEX1JFfSkuXG4gICAqIEByZXR1cm5zIGB7IG9rOiB0cnVlLCB0aWNrZXQgfWAgb24gc3VjY2Vzcywgb3IgYHsgb2s6IGZhbHNlLCByZWFzb24gfWBcbiAgICogICB3aGVyZSByZWFzb24gaXMgYCdvcmctbGltaXQnYCAocGVyLW9yZyBjYXApIG9yIGAnY2FwYWNpdHknYCAodG90YWwgY2FwKS5cbiAgICovXG4gIGNyZWF0ZVRpY2tldChvcmdJZDogc3RyaW5nLCByZXF1ZXN0SWQ6IHN0cmluZyk6IENyZWF0ZVRpY2tldFJlc3VsdCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAvLyBUb3RhbCBjYXAgZmlyc3Qg4oCUIHByb3RlY3RzIHByb2Nlc3MgbWVtb3J5IGV2ZW4gd2hlbiBhIHNpbmdsZSBvcmcgaXNcbiAgICAvLyB0aGUgb2ZmZW5kZXIuIFRoZW4gdGhlIHBlci1vcmcgY2FwIGZvciBmYWlyLXNoYXJlLlxuICAgIGlmICh0aGlzLnRpY2tldHMuc2l6ZSA+PSB0aGlzLm1heFRvdGFsVGlja2V0cykge1xuICAgICAgbG9nZ2VyLndhcm4oYFNTRSB0aWNrZXQgY2FwIHJlYWNoZWQgKG1heDogJHt0aGlzLm1heFRvdGFsVGlja2V0c30pOyByZWplY3RpbmcgdGlja2V0IHJlcXVlc3RgKTtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiAnY2FwYWNpdHknIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmNvdW50TGl2ZVRpY2tldHNGb3JPcmcob3JnSWQsIG5vdykgPj0gdGhpcy5tYXhUaWNrZXRzUGVyT3JnKSB7XG4gICAgICBsb2dnZXIud2FybihgUGVyLW9yZyBTU0UgdGlja2V0IGNhcCByZWFjaGVkIGZvciAke29yZ0lkfSAobWF4OiAke3RoaXMubWF4VGlja2V0c1Blck9yZ30pYCk7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogJ29yZy1saW1pdCcgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrZXQgPSByYW5kb21CeXRlcygyNCkudG9TdHJpbmcoJ2Jhc2U2NHVybCcpO1xuICAgIHRoaXMudGlja2V0cy5zZXQodGlja2V0LCB7XG4gICAgICBvcmdJZCxcbiAgICAgIHJlcXVlc3RJZDogU1NFTWFuYWdlci5ub3JtYWxpemVSZXF1ZXN0SWQocmVxdWVzdElkKSxcbiAgICAgIGV4cGlyZXNBdDogbm93ICsgdGhpcy50aWNrZXRUdGxNcyxcbiAgICB9KTtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdGlja2V0IH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW5kIENPTlNVTUUgYSB0aWNrZXQgZm9yIGEgc3BlY2lmaWMgc3RyZWFtIHN1YmplY3QuIFNpbmdsZS11c2U6XG4gICAqIHRoZSB0aWNrZXQgaXMgZGVsZXRlZCB3aGV0aGVyIG9yIG5vdCBpdCB0dXJucyBvdXQgdG8gYmUgdmFsaWQsIHNvIGEgcmVwbGF5XG4gICAqIG9mIHRoZSBzYW1lIHZhbHVlIGFsd2F5cyBmYWlscy4gUmV0dXJucyB0aGUgYm91bmQgb3JnIG9uIHN1Y2Nlc3MsIG9yIG51bGxcbiAgICogd2hlbiB0aGUgdGlja2V0IGlzIHVua25vd24gLyBhbHJlYWR5LXVzZWQgLyBleHBpcmVkIC8gT1Igd2FzIG1pbnRlZCBmb3IgYVxuICAgKiBESUZGRVJFTlQgYHJlcXVlc3RJZGAgdGhhbiB0aGUgb25lIGJlaW5nIG9wZW5lZC5cbiAgICpcbiAgICogVGhlIHN1YmplY3QgY2hlY2sgaXMgdGhlIGF1dGhvcml6YXRpb24gZml4OiB3aXRob3V0IGl0LCBhIHRpY2tldCBtaW50ZWQgZm9yXG4gICAqIG9uZSBzdHJlYW0gY291bGQgYmUgcHJlc2VudGVkIHRvIG9wZW4gQU5ZIHN0cmVhbSB0aGUgaG9sZGVyJ3Mgb3JnIGNvdWxkXG4gICAqIG5hbWUsIGxldHRpbmcgYW4gYXV0aGVudGljYXRlZCBvcmcgYXR0YWNoIHRvIGFub3RoZXIgb3JnJ3MgbG9nIHN0cmVhbSBieVxuICAgKiBndWVzc2luZyBpdHMgcmVxdWVzdElkLiBUaGUgZ2VuZXJpYyA0MDEgdGhlIGNhbGxlciByZXR1cm5zIGRvZXMgbm90XG4gICAqIGRpc3Rpbmd1aXNoIFwidW5rbm93biB0aWNrZXRcIiBmcm9tIFwid3Jvbmcgc3ViamVjdFwiLCBzbyBpdCBsZWFrcyBub3RoaW5nXG4gICAqIGFib3V0IHdoaWNoIHJlcXVlc3RJZHMgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0aWNrZXRJZCAtIFRoZSBvcGFxdWUgdGlja2V0IHZhbHVlIGZyb20gYD90aWNrZXQ9YC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCAtIFRoZSBzdHJlYW0gc3ViamVjdCBmcm9tIHRoZSBVUkwgcGF0aCAoYDpyZXF1ZXN0SWRgKSxcbiAgICogICBhbHJlYWR5IGZvcm1hdC12YWxpZGF0ZWQgYnkgdGhlIGNhbGxlci5cbiAgICovXG4gIGNvbnN1bWVUaWNrZXQodGlja2V0SWQ6IHN0cmluZywgcmVxdWVzdElkOiBzdHJpbmcpOiB7IG9yZ0lkOiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGNvbnN0IHRpY2tldCA9IHRoaXMudGlja2V0cy5nZXQodGlja2V0SWQpO1xuICAgIHRoaXMudGlja2V0cy5kZWxldGUodGlja2V0SWQpOyAvLyBzaW5nbGUtdXNlIOKAlCBjb25zdW1lIGltbWVkaWF0ZWx5XG4gICAgaWYgKCF0aWNrZXQgfHwgRGF0ZS5ub3coKSA+IHRpY2tldC5leHBpcmVzQXQpIHJldHVybiBudWxsO1xuICAgIC8vIFN1YmplY3QgYmluZGluZyDigJQgcmVqZWN0IGEgdGlja2V0IHByZXNlbnRlZCBmb3IgYSBzdWJqZWN0IGl0IHdhcyBub3RcbiAgICAvLyBtaW50ZWQgZm9yLiBCb3RoIHNpZGVzIGFyZSBub3JtYWxpemVkIHNvIGRhc2hlZC91bmRhc2hlZCBmb3JtcyBtYXRjaC5cbiAgICBpZiAodGlja2V0LnJlcXVlc3RJZCAhPT0gU1NFTWFuYWdlci5ub3JtYWxpemVSZXF1ZXN0SWQocmVxdWVzdElkKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHsgb3JnSWQ6IHRpY2tldC5vcmdJZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjbGllbnQgdG8gdGhlIFNTRSBtYW5hZ2VyXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgLSBVbmlxdWUgcmVxdWVzdCBJRFxuICAgKiBAcGFyYW0gcmVzIC0gRXhwcmVzcyBSZXNwb25zZSBvYmplY3RcbiAgICogQHBhcmFtIG9yZ0lkIC0gQXV0aGVudGljYXRlZCBvcmcgaWQgKG9wdGlvbmFsKS4gV2hlbiBzZXQsIGVuZm9yY2VzIHRoZVxuICAgKiAgIHBlci1vcmcgY2FwIGFuZCB0aGUgY291bnRlciBpcyBkZWNyZW1lbnRlZCBvbiBkaXNjb25uZWN0L2NsZWFudXAuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgY2xpZW50IHdhcyBhZGRlZCwgZmFsc2UgaWYgcmVqZWN0ZWQgKGxpbWl0IHJlYWNoZWQpXG4gICAqL1xuICBhZGRDbGllbnQocmVxdWVzdElkOiBzdHJpbmcsIHJlczogUmVzcG9uc2UsIG9yZ0lkPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNsaWVudHMuZ2V0KHJlcXVlc3RJZCkgfHwgW107XG5cbiAgICAvLyBDaGVjayBjbGllbnQgbGltaXRcbiAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID49IHRoaXMubWF4Q2xpZW50c1BlclJlcXVlc3QpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDbGllbnQgbGltaXQgcmVhY2hlZCBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH0gKG1heDogJHt0aGlzLm1heENsaWVudHNQZXJSZXF1ZXN0fSlgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzLXdpZGUgY2FwOiBwcm90ZWN0cyBmZCB0YWJsZSArIG1lbW9yeSBmcm9tIHJ1bmF3YXkgZGFzaGJvYXJkcy5cbiAgICBpZiAodGhpcy50b3RhbENsaWVudHMoKSA+PSB0aGlzLm1heFRvdGFsQ2xpZW50cykge1xuICAgICAgbG9nZ2VyLndhcm4oYFRvdGFsIFNTRSBjbGllbnQgY2FwIHJlYWNoZWQgKG1heDogJHt0aGlzLm1heFRvdGFsQ2xpZW50c30pOyByZWplY3RpbmcgbmV3IGNvbm5lY3Rpb25gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBQZXItb3JnIGNhcDogcHJldmVudHMgb25lIG5vaXN5IG9yZyBmcm9tIG1vbm9wb2xpemluZyBwcm9jZXNzLXdpZGVcbiAgICAvLyBzbG90cy4gRW5mb3JjZWQgb25seSB3aGVuIG9yZ0lkIGlzIGtub3duIOKAlCBzZXJ2aWNlLWludGVybmFsIC8gYW5vbnltb3VzXG4gICAgLy8gc3RyZWFtcyB0aGF0IG5ldmVyIGlkZW50aWZ5IHdpdGggYW4gb3JnSWQgc3RheSBzdWJqZWN0IHRvIHRoZSBnbG9iYWxcbiAgICAvLyBjZWlsaW5ncyBhYm92ZS4gUmVzZXJ2ZSBhdG9taWNhbGx5IGJlZm9yZSBpbnNlcnQgc28gdHdvIGNvbmN1cnJlbnRcbiAgICAvLyByZXF1ZXN0cyBhdCB0aGUgbGltaXQgY2FuJ3QgYm90aCBzdWNjZWVkLlxuICAgIGlmIChvcmdJZCkge1xuICAgICAgY29uc3Qgb3JnQ3VycmVudCA9IHRoaXMub3JnQ2xpZW50Q291bnRzLmdldChvcmdJZCkgPz8gMDtcbiAgICAgIGlmIChvcmdDdXJyZW50ID49IHRoaXMubWF4Q2xpZW50c1Blck9yZykge1xuICAgICAgICBsb2dnZXIud2FybihgUGVyLW9yZyBTU0UgY2xpZW50IGNhcCByZWFjaGVkIGZvciAke29yZ0lkfSAobWF4OiAke3RoaXMubWF4Q2xpZW50c1Blck9yZ30pOyByZWplY3RpbmcgbmV3IGNvbm5lY3Rpb25gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcmdDbGllbnRDb3VudHMuc2V0KG9yZ0lkLCBvcmdDdXJyZW50ICsgMSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRpbWVvdXQgZm9yIHRoaXMgY2xpZW50XG4gICAgY29uc3QgY2xpZW50SWQgPSB1dWlkKCk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBDbGllbnQgJHtjbGllbnRJZH0gdGltZWQgb3V0IGZvciByZXF1ZXN0ICR7cmVxdWVzdElkfWApO1xuICAgICAgdGhpcy5yZW1vdmVDbGllbnQocmVxdWVzdElkLCBjbGllbnRJZCk7XG4gICAgICB0cnkge1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZXNwb25zZSBhbHJlYWR5IGNsb3NlZCBvbiB0aW1lb3V0JywgeyByZXF1ZXN0SWQsIGNsaWVudElkLCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY2xpZW50VGltZW91dE1zKTtcblxuICAgIGNvbnN0IGNsaWVudDogU1NFQ2xpZW50ID0ge1xuICAgICAgaWQ6IGNsaWVudElkLFxuICAgICAgcmVzLFxuICAgICAgY29ubmVjdGVkQXQ6IERhdGUubm93KCksXG4gICAgICB0aW1lb3V0LFxuICAgICAgYmFja3ByZXNzdXJlQ291bnQ6IDAsXG4gICAgICBvcmdJZCxcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGRpc2Nvbm5lY3Rpb25cbiAgICByZXMub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGhpcy5yZW1vdmVDbGllbnQocmVxdWVzdElkLCBjbGllbnRJZCk7XG4gICAgfSk7XG5cbiAgICByZXMub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKGBTU0UgY2xpZW50IGVycm9yIGZvciByZXF1ZXN0ICR7cmVxdWVzdElkfTpgLCBlcnIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGhpcy5yZW1vdmVDbGllbnQocmVxdWVzdElkLCBjbGllbnRJZCk7XG4gICAgfSk7XG5cbiAgICBleGlzdGluZy5wdXNoKGNsaWVudCk7XG4gICAgdGhpcy5jbGllbnRzLnNldChyZXF1ZXN0SWQsIGV4aXN0aW5nKTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhgQ2xpZW50ICR7Y2xpZW50SWR9IGNvbm5lY3RlZCBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH0gKHRvdGFsOiAke2V4aXN0aW5nLmxlbmd0aH0pYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogRHJvcCBvbmUgZnJvbSB0aGUgcGVyLW9yZyBjb3VudGVyLiBJZGVtcG90ZW50OiBhIGNvdW50ZXIgYXQgMCBzdGF5cyBhdCAwXG4gICAqICBhbmQgdGhlIG9yZyBrZXkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXAuICovXG4gIHByaXZhdGUgZGVjcmVtZW50T3JnQ291bnQob3JnSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMub3JnQ2xpZW50Q291bnRzLmdldChvcmdJZCkgPz8gMDtcbiAgICBpZiAoY3VycmVudCA8PSAxKSB0aGlzLm9yZ0NsaWVudENvdW50cy5kZWxldGUob3JnSWQpO1xuICAgIGVsc2UgdGhpcy5vcmdDbGllbnRDb3VudHMuc2V0KG9yZ0lkLCBjdXJyZW50IC0gMSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNsaWVudCBmcm9tIHRoZSBtYW5hZ2VyXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZUNsaWVudChyZXF1ZXN0SWQ6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNsaWVudHMgPSB0aGlzLmNsaWVudHMuZ2V0KHJlcXVlc3RJZCk7XG4gICAgaWYgKCFjbGllbnRzKSByZXR1cm47XG5cbiAgICBjb25zdCByZW1haW5pbmcgPSBjbGllbnRzLmZpbHRlcihjID0+IHtcbiAgICAgIGlmIChjLmlkID09PSBjbGllbnRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoYy50aW1lb3V0KTtcbiAgICAgICAgLy8gTWlycm9yIHRoZSBwZXItb3JnIGNvdW50ZXIg4oCUIG11c3QgZGVjcmVtZW50IGhlcmUsIG5vdCBqdXN0IGluIHRoZVxuICAgICAgICAvLyBleHBsaWNpdCBjbG9zZSBwYXRocywgc2luY2UgJ2Nsb3NlJy8nZXJyb3InIGV2ZW50IGhhbmRsZXJzIGFyZSB0aGVcbiAgICAgICAgLy8gcHJpbWFyeSBkaXNjb25uZWN0IHNpZ25hbCBpbiBwcmFjdGljZS5cbiAgICAgICAgdGhpcy5kZWNyZW1lbnRPcmdDb3VudChjLm9yZ0lkKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAocmVtYWluaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jbGllbnRzLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBBbGwgY2xpZW50cyBkaXNjb25uZWN0ZWQgZm9yIHJlcXVlc3QgJHtyZXF1ZXN0SWR9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xpZW50cy5zZXQocmVxdWVzdElkLCByZW1haW5pbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIG1lc3NhZ2UgdG8gYWxsIFNTRSBjbGllbnRzIGZvciBhIHJlcXVlc3RJZFxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIC0gUmVxdWVzdCBJRFxuICAgKiBAcGFyYW0gdHlwZSAtIEV2ZW50IHR5cGVcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBNZXNzYWdlIHN0cmluZ1xuICAgKiBAcGFyYW0gZGF0YSAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YVxuICAgKiBAcmV0dXJucyBOdW1iZXIgb2YgY2xpZW50cyB0aGUgbWVzc2FnZSB3YXMgc2VudCB0b1xuICAgKi9cbiAgc2VuZChyZXF1ZXN0SWQ6IHN0cmluZywgdHlwZTogU1NFRXZlbnRUeXBlLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYXlsb2FkOiBTU0VQYXlsb2FkID0ge1xuICAgICAgdHM6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHR5cGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZGF0YSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xpZW50cyA9IFsuLi4odGhpcy5jbGllbnRzLmdldChyZXF1ZXN0SWQpIHx8IFtdKV07XG4gICAgbGV0IHNlbnRDb3VudCA9IDA7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGBkYXRhOiAke0pTT04uc3RyaW5naWZ5KHBheWxvYWQpfVxcblxcbmA7XG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiBjbGllbnRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBCYWNrcHJlc3N1cmU6IHNraXAgY2xpZW50cyB3aG9zZSB3cml0ZSBidWZmZXIgaXMgZnVsbFxuICAgICAgICBpZiAoY2xpZW50LnJlcy53cml0YWJsZUVuZGVkKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVDbGllbnQocmVxdWVzdElkLCBjbGllbnQuaWQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbldyaXRlID0gY2xpZW50LnJlcy53cml0ZShzZXJpYWxpemVkKTtcbiAgICAgICAgaWYgKCFjYW5Xcml0ZSkge1xuICAgICAgICAgIGNsaWVudC5iYWNrcHJlc3N1cmVDb3VudCsrO1xuICAgICAgICAgIC8vIERpc2Nvbm5lY3QgY2xpZW50cyB0aGF0IGNvbnNpc3RlbnRseSBjYW4ndCBrZWVwIHVwICgxMCBjb25zZWN1dGl2ZSBiYWNrcHJlc3N1cmUgZXZlbnRzKVxuICAgICAgICAgIGlmIChjbGllbnQuYmFja3ByZXNzdXJlQ291bnQgPj0gQ29yZUNvbnN0YW50cy5TU0VfQkFDS1BSRVNTVVJFX1RIUkVTSE9MRCkge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYERpc2Nvbm5lY3Rpbmcgc2xvdyBjbGllbnQgJHtjbGllbnQuaWR9IGZvciByZXF1ZXN0ICR7cmVxdWVzdElkfSAoJHtjbGllbnQuYmFja3ByZXNzdXJlQ291bnR9IGJhY2twcmVzc3VyZSBldmVudHMpYCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsaWVudChyZXF1ZXN0SWQsIGNsaWVudC5pZCk7XG4gICAgICAgICAgICB0cnkgeyBjbGllbnQucmVzLmVuZCgpOyB9IGNhdGNoIHsgLyogYWxyZWFkeSBjbG9zZWQgKi8gfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsaWVudC5iYWNrcHJlc3N1cmVDb3VudCA9IDA7IC8vIFJlc2V0IG9uIHN1Y2Nlc3NmdWwgd3JpdGVcbiAgICAgICAgfVxuICAgICAgICBzZW50Q291bnQrKztcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHNlbmQgdG8gY2xpZW50ICR7Y2xpZW50LmlkfTpgLCBlcnJvcik7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2xpZW50KHJlcXVlc3RJZCwgY2xpZW50LmlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VudENvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbm5lY3RlZCBjbGllbnRzIGFjcm9zcyBhbGwgcmVxdWVzdHNcbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBFdmVudCB0eXBlXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gTWVzc2FnZSBzdHJpbmdcbiAgICogQHBhcmFtIGRhdGEgLSBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgICogQHJldHVybnMgVG90YWwgbnVtYmVyIG9mIGNsaWVudHMgdGhlIG1lc3NhZ2Ugd2FzIHNlbnQgdG9cbiAgICovXG4gIGJyb2FkY2FzdCh0eXBlOiBTU0VFdmVudFR5cGUsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pOiBudW1iZXIge1xuICAgIGxldCB0b3RhbFNlbnQgPSAwO1xuICAgIGZvciAoY29uc3QgcmVxdWVzdElkIG9mIHRoaXMuY2xpZW50cy5rZXlzKCkpIHtcbiAgICAgIHRvdGFsU2VudCArPSB0aGlzLnNlbmQocmVxdWVzdElkLCB0eXBlLCBtZXNzYWdlLCBkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsU2VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhbGwgY2xpZW50cyBmb3IgYSBzcGVjaWZpYyByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgLSBSZXF1ZXN0IElEIHRvIGNsb3NlXG4gICAqIEBwYXJhbSBmaW5hbE1lc3NhZ2UgLSBPcHRpb25hbCBmaW5hbCBtZXNzYWdlIHRvIHNlbmQgYmVmb3JlIGNsb3NpbmdcbiAgICovXG4gIGNsb3NlUmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZywgZmluYWxNZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY2xpZW50cyA9IHRoaXMuY2xpZW50cy5nZXQocmVxdWVzdElkKTtcbiAgICBpZiAoIWNsaWVudHMpIHJldHVybjtcblxuICAgIGlmIChmaW5hbE1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuc2VuZChyZXF1ZXN0SWQsICdDT01QTEVURUQnLCBmaW5hbE1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIGNsaWVudHMpIHtcbiAgICAgIGNsZWFyVGltZW91dChjbGllbnQudGltZW91dCk7XG4gICAgICB0aGlzLmRlY3JlbWVudE9yZ0NvdW50KGNsaWVudC5vcmdJZCk7XG4gICAgICB0cnkge1xuICAgICAgICBjbGllbnQucmVzLmVuZCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUmVzcG9uc2UgYWxyZWFkeSBjbG9zZWQgb24gcmVxdWVzdCBjbG9zZScsIHsgcmVxdWVzdElkLCBjbGllbnRJZDogY2xpZW50LmlkLCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2xpZW50cy5kZWxldGUocmVxdWVzdElkKTtcbiAgICBsb2dnZXIuZGVidWcoYENsb3NlZCBhbGwgY2xpZW50cyBmb3IgcmVxdWVzdCAke3JlcXVlc3RJZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhdGlzdGljcyBhYm91dCBjdXJyZW50IGNvbm5lY3Rpb25zXG4gICAqL1xuICBnZXRTdGF0cygpOiBTU0VNYW5hZ2VyU3RhdHMge1xuICAgIGxldCB0b3RhbENsaWVudHMgPSAwO1xuICAgIGxldCBvbGRlc3RDb25uZWN0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgZm9yIChjb25zdCBjbGllbnRzIG9mIHRoaXMuY2xpZW50cy52YWx1ZXMoKSkge1xuICAgICAgdG90YWxDbGllbnRzICs9IGNsaWVudHMubGVuZ3RoO1xuICAgICAgZm9yIChjb25zdCBjbGllbnQgb2YgY2xpZW50cykge1xuICAgICAgICBjb25zdCBhZ2UgPSBub3cgLSBjbGllbnQuY29ubmVjdGVkQXQ7XG4gICAgICAgIGlmIChvbGRlc3RDb25uZWN0aW9uID09PSBudWxsIHx8IGFnZSA+IG9sZGVzdENvbm5lY3Rpb24pIHtcbiAgICAgICAgICBvbGRlc3RDb25uZWN0aW9uID0gYWdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsUmVxdWVzdHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgdG90YWxDbGllbnRzLFxuICAgICAgb2xkZXN0Q29ubmVjdGlvbk1zOiBvbGRlc3RDb25uZWN0aW9uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSByZXF1ZXN0IGhhcyBhbnkgY29ubmVjdGVkIGNsaWVudHNcbiAgICovXG4gIGhhc0NsaWVudHMocmVxdWVzdElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBjbGllbnRzID0gdGhpcy5jbGllbnRzLmdldChyZXF1ZXN0SWQpO1xuICAgIHJldHVybiBjbGllbnRzICE9PSB1bmRlZmluZWQgJiYgY2xpZW50cy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGNsaWVudHMgZm9yIGEgc3BlY2lmaWMgcmVxdWVzdFxuICAgKi9cbiAgZ2V0Q2xpZW50Q291bnQocmVxdWVzdElkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNsaWVudHMuZ2V0KHJlcXVlc3RJZCk/Lmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pZGRsZXdhcmUgdG8gaW5pdGlhbGl6ZSBhIHRpY2tldC1hdXRoZW50aWNhdGVkIFNTRSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBUaGUgc3RyZWFtIGlzIE5PVCBvcGVuIHRvIHRoZSB3b3JsZDogdGhlIGNhbGxlciBtdXN0IGZpcnN0IGV4Y2hhbmdlIGl0c1xuICAgKiBKV1QgZm9yIGEgc2hvcnQtbGl2ZWQgc2luZ2xlLXVzZSB0aWNrZXQgKHNlZSB7QGxpbmsgY3JlYXRlVGlja2V0fSwgd2lyZWQgdG9cbiAgICogYFBPU1QgL2xvZ3MvdGlja2V0YCkgYW5kIHBhc3MgaXQgYXMgYD90aWNrZXQ9PHQ+YC4gVGhlIG1pZGRsZXdhcmUgdmFsaWRhdGVzXG4gICAqICsgY29uc3VtZXMgdGhlIHRpY2tldCwgYmluZHMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHRpY2tldCdzIG9yZywgYW5kXG4gICAqIGVuZm9yY2VzIHRoZSBwZXItb3JnIGNvbm5lY3Rpb24gY2FwLiBBIG1pc3NpbmcgLyBpbnZhbGlkIC8gZXhwaXJlZCAvXG4gICAqIGFscmVhZHktdXNlZCB0aWNrZXQgaXMgcmVqZWN0ZWQgd2l0aCA0MDEgYmVmb3JlIGFueSBTU0UgaGVhZGVycyBmbHVzaC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhcHAuZ2V0KCcvbG9ncy86cmVxdWVzdElkJywgc3NlTWFuYWdlci5taWRkbGV3YXJlKCkpO1xuICAgKiBgYGBcbiAgICovXG4gIG1pZGRsZXdhcmUoKSB7XG4gICAgcmV0dXJuIChyZXE6IHsgcGFyYW1zOiB7IHJlcXVlc3RJZDogc3RyaW5nIH07IHF1ZXJ5PzogeyB0aWNrZXQ/OiB1bmtub3duIH0gfSwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgeyByZXF1ZXN0SWQgfSA9IHJlcS5wYXJhbXM7XG5cbiAgICAgIGlmICghU1NFX1JFUVVFU1RfSURfUkUudGVzdChyZXF1ZXN0SWQpKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAwKS5lbmQoJ0ludmFsaWQgcmVxdWVzdElkIGZvcm1hdCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRpY2tldCBhdXRoIOKAlCByZXF1aXJlZC4gUmVzb2x2ZSBgP3RpY2tldD08dD5gLCB0aGVuIHZhbGlkYXRlICsgY29uc3VtZVxuICAgICAgLy8gaXQgKHNpbmdsZS11c2UpIEZPUiBUSElTIFNVQkpFQ1QuIEFuIGFub255bW91cywgbWFsZm9ybWVkLCB1bmtub3duLFxuICAgICAgLy8gZXhwaXJlZCwgYWxyZWFkeS1jb25zdW1lZCwgb3Igd3Jvbmctc3ViamVjdCB0aWNrZXQgaXMgYSA0MDEuIFRoZSBvcmcgaXNcbiAgICAgIC8vIHRha2VuIGZyb20gdGhlIHRpY2tldCwgc28gdGhlIHN0cmVhbSBpcyBhbHdheXMgYm91bmQgdG8gYSB2ZXJpZmllZFxuICAgICAgLy8gdGVuYW50IEFORCB0byB0aGUgZXhhY3Qgc3ViamVjdCB0aGUgdGlja2V0IHdhcyBtaW50ZWQgZm9yIChubyBhbm9ueW1vdXNcbiAgICAgIC8vIHN0cmVhbXMsIG5vIGNyb3NzLXN1YmplY3QgYXR0YWNoKS5cbiAgICAgIGNvbnN0IHRpY2tldElkID0gcmVxLnF1ZXJ5Py50aWNrZXQ7XG4gICAgICBpZiAodHlwZW9mIHRpY2tldElkICE9PSAnc3RyaW5nJyB8fCB0aWNrZXRJZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDEpLmVuZCgnTWlzc2luZyB0aWNrZXQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29uc3VtZWQgPSB0aGlzLmNvbnN1bWVUaWNrZXQodGlja2V0SWQsIHJlcXVlc3RJZCk7XG4gICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDAxKS5lbmQoJ0ludmFsaWQgb3IgZXhwaXJlZCB0aWNrZXQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JnSWQgPSBjb25zdW1lZC5vcmdJZDtcblxuICAgICAgLy8gUHJlLWZsaWdodCBwZXItcmVxdWVzdCBjYXAgc28gd2UgY2FuIHJldHVybiA0MjkgYmVmb3JlIGZsdXNoaW5nXG4gICAgICAvLyBTU0UgaGVhZGVycyAoYWZ0ZXIgaGVhZGVycyBhcmUgZmx1c2hlZCB0aGUgY2xpZW50IGNhbid0IHJlYWQgYSA0MjkpLlxuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNsaWVudHMuZ2V0KHJlcXVlc3RJZCkgfHwgW107XG4gICAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID49IHRoaXMubWF4Q2xpZW50c1BlclJlcXVlc3QpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENsaWVudCBsaW1pdCByZWFjaGVkIGZvciByZXF1ZXN0ICR7cmVxdWVzdElkfSAobWF4OiAke3RoaXMubWF4Q2xpZW50c1BlclJlcXVlc3R9KWApO1xuICAgICAgICByZXMuc3RhdHVzKDQyOSkuZW5kKCdUb28gbWFueSBjb25uZWN0aW9ucyBmb3IgdGhpcyByZXF1ZXN0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2FtZSBmb3IgdGhlIHBlci1vcmcgY2FwIOKAlCBiZXR0ZXIgdG8gc2VuZCA0MjkgdGhhbiBvcGVuIHRoZSBzdHJlYW0gYW5kXG4gICAgICAvLyBpbW1lZGlhdGVseSBjbG9zZSBpdC4gVGhlIHRpY2tldCBndWFyYW50ZWVzIGEgdmVyaWZpZWQgb3JnIGlkLCBzbyB0aGVcbiAgICAgIC8vIHBlci1vcmcgY2VpbGluZyBpcyBhbHdheXMgZW5mb3JjZWQgZm9yIHRoZSAvbG9ncyBzdHJlYW0uXG4gICAgICBpZiAoKHRoaXMub3JnQ2xpZW50Q291bnRzLmdldChvcmdJZCkgPz8gMCkgPj0gdGhpcy5tYXhDbGllbnRzUGVyT3JnKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBQZXItb3JnIFNTRSBjbGllbnQgY2FwIHJlYWNoZWQgZm9yICR7b3JnSWR9IChtYXg6ICR7dGhpcy5tYXhDbGllbnRzUGVyT3JnfSlgKTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MjkpLmVuZCgnVG9vIG1hbnkgU1NFIGNvbm5lY3Rpb25zIGZvciB0aGlzIG9yZ2FuaXphdGlvbicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2V2ZW50LXN0cmVhbScpO1xuICAgICAgcmVzLnNldEhlYWRlcignQ2FjaGUtQ29udHJvbCcsICduby1jYWNoZScpO1xuICAgICAgcmVzLnNldEhlYWRlcignQ29ubmVjdGlvbicsICdrZWVwLWFsaXZlJyk7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLUFjY2VsLUJ1ZmZlcmluZycsICdubycpOyAvLyBEaXNhYmxlIG5naW54IGJ1ZmZlcmluZ1xuICAgICAgcmVzLmZsdXNoSGVhZGVycygpO1xuXG4gICAgICAvLyBIZWFkZXJzIGFyZSBmbHVzaGVkIOKAlCB3ZSBjYW4gbm8gbG9uZ2VyIHNlbmQgYSA0MjkuIGFkZENsaWVudCByZS1jaGVja3NcbiAgICAgIC8vIHRoZSBjYXBzIChpbmNsdWRpbmcgdGhlIHByb2Nlc3Mtd2lkZSB0b3RhbC1jbGllbnRzIGNhcCwgd2hpY2ggdGhlXG4gICAgICAvLyBwcmUtZmxpZ2h0IGFib3ZlIGRvZXMgbm90KSBhbmQgY2FuIHN0aWxsIHJlamVjdCBvbiBhIHJhY2U6IGEgY29uY3VycmVudFxuICAgICAgLy8gY29ubmVjdGlvbiBtYXkgaGF2ZSBmaWxsZWQgYSBjYXAgYmV0d2VlbiB0aGUgcHJlLWZsaWdodCBjaGVjayBhbmQgaGVyZS5cbiAgICAgIC8vIE9uIHJlamVjdGlvbiwgY2xvc2UgdGhlIG5vdy1kYW5nbGluZyByZXNwb25zZSBpbnN0ZWFkIG9mIGxlYXZpbmcgYW5cbiAgICAgIC8vIG9wZW4gc29ja2V0IHdpdGggbm8gY2xpZW50IHJlY29yZCAod2hpY2ggd291bGQgbGVhayBhbiBmZCArIG5ldmVyIGVtaXRcbiAgICAgIC8vIHN0cmVhbSBkYXRhKS5cbiAgICAgIGNvbnN0IGFkZGVkID0gdGhpcy5hZGRDbGllbnQocmVxdWVzdElkLCByZXMsIG9yZ0lkKTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFNTRSBhZGRDbGllbnQgcmVqZWN0ZWQgYWZ0ZXIgaGVhZGVycyBmbHVzaGVkIGZvciByZXF1ZXN0ICR7cmVxdWVzdElkfTsgY2xvc2luZyBkYW5nbGluZyByZXNwb25zZWApO1xuICAgICAgICB0cnkgeyByZXMuZW5kKCk7IH0gY2F0Y2ggeyAvKiBhbHJlYWR5IGNsb3NlZCAqLyB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBwZXJpb2RpYyBjbGVhbnVwIG9mIHN0YWxlIGNvbm5lY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0Q2xlYW51cEludGVydmFsKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgfSwgaW50ZXJ2YWxNcyk7XG5cbiAgICAvLyBEb24ndCBwcmV2ZW50IHByb2Nlc3MgZXhpdFxuICAgIHRoaXMuY2xlYW51cEludGVydmFsLnVucmVmKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW4gdXAgc3RhbGUgY29ubmVjdGlvbnMgdXNpbmcgc2luZ2xlLXBhc3MgcGFydGl0aW9uLlxuICAgKiBPKFIgw5cgQykgaW5zdGVhZCBvZiBPKFIgw5cgQ8KyKSwgYW5kIGF2b2lkcyBtdXRhdGlvbi1kdXJpbmctaXRlcmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgbGV0IGNsZWFuZWQgPSAwO1xuXG4gICAgLy8gU3dlZXAgZXhwaXJlZCB0aWNrZXRzIHNvIHRoZSBzdG9yZSBzdGF5cyBib3VuZGVkIGV2ZW4gd2hlbiB0aWNrZXRzIGFyZVxuICAgIC8vIG1pbnRlZCBidXQgbmV2ZXIgY29uc3VtZWQgKGNsaWVudCBjbG9zZWQgdGhlIHRhYiBiZWZvcmUgY29ubmVjdGluZykuXG4gICAgLy8gQ29uc3VtZS10aW1lIHN0aWxsIHJlLWNoZWNrcyBleHBpcnksIHNvIHRoaXMgaXMgbWVtb3J5IGh5Z2llbmUgb25seS5cbiAgICBmb3IgKGNvbnN0IFtpZCwgdGlja2V0XSBvZiB0aGlzLnRpY2tldHMpIHtcbiAgICAgIGlmIChub3cgPiB0aWNrZXQuZXhwaXJlc0F0KSB0aGlzLnRpY2tldHMuZGVsZXRlKGlkKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SWQsIGNsaWVudHNdIG9mIHRoaXMuY2xpZW50cy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHN0YWxlOiBTU0VDbGllbnRbXSA9IFtdO1xuICAgICAgY29uc3QgYWN0aXZlOiBTU0VDbGllbnRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiBjbGllbnRzKSB7XG4gICAgICAgIC8vIFRpbWUtYmFzZWQgZXZpY3Rpb24gT1IgYSBzb2NrZXQgdGhhdCBzaWxlbnRseSBjbG9zZWQgKG5vICdjbG9zZSdcbiAgICAgICAgLy8gZXZlbnQpIOKAlCBOb2RlIHNvbWV0aW1lcyBkcm9wcyBzb2NrZXRzIHdpdGhvdXQgZmlyaW5nIHRoZSBldmVudCxcbiAgICAgICAgLy8gc28gd2UgZXhwbGljaXRseSBjaGVjayB3cml0YWJsZUVuZGVkL2Rlc3Ryb3llZCBoZXJlLlxuICAgICAgICBjb25zdCBhZ2VTdGFsZSA9IG5vdyAtIGNsaWVudC5jb25uZWN0ZWRBdCA+IHRoaXMuY2xpZW50VGltZW91dE1zO1xuICAgICAgICBjb25zdCBzb2NrZXREZWFkID0gY2xpZW50LnJlcy53cml0YWJsZUVuZGVkIHx8IChjbGllbnQucmVzIGFzIHsgZGVzdHJveWVkPzogYm9vbGVhbiB9KS5kZXN0cm95ZWQgPT09IHRydWU7XG4gICAgICAgIGlmIChhZ2VTdGFsZSB8fCBzb2NrZXREZWFkKSB7XG4gICAgICAgICAgc3RhbGUucHVzaChjbGllbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdGl2ZS5wdXNoKGNsaWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjbGllbnQgb2Ygc3RhbGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGNsaWVudC50aW1lb3V0KTtcbiAgICAgICAgdGhpcy5kZWNyZW1lbnRPcmdDb3VudChjbGllbnQub3JnSWQpO1xuICAgICAgICB0cnkgeyBjbGllbnQucmVzLmVuZCgpOyB9IGNhdGNoIHsgLyogYWxyZWFkeSBjbG9zZWQgKi8gfVxuICAgICAgICBjbGVhbmVkKys7XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuY2xpZW50cy5kZWxldGUocmVxdWVzdElkKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhbGUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNsaWVudHMuc2V0KHJlcXVlc3RJZCwgYWN0aXZlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xlYW5lZCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDbGVhbmVkIHVwICR7Y2xlYW5lZH0gc3RhbGUgU1NFIGNvbm5lY3Rpb25zYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNodXRkb3duIHRoZSBTU0UgbWFuYWdlciBhbmQgY2xvc2UgYWxsIGNvbm5lY3Rpb25zXG4gICAqL1xuICBzaHV0ZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGVhbnVwSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jbGVhbnVwSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdElkIG9mIFsuLi50aGlzLmNsaWVudHMua2V5cygpXSkge1xuICAgICAgdGhpcy5jbG9zZVJlcXVlc3QocmVxdWVzdElkLCAnU2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICB9XG5cbiAgICBsb2dnZXIuaW5mbygnU1NFIE1hbmFnZXIgc2h1dCBkb3duJyk7XG4gIH1cbn1cbiJdfQ==
@@ -72,4 +72,4 @@ if (process.env.OTEL_TRACING_ENABLED === 'true') {
72
72
  process.once('SIGTERM', shutdown);
73
73
  process.once('SIGINT', shutdown);
74
74
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbC1ib290c3RyYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb3RlbC1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ2hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksaUNBQWlDLENBQUM7SUFDOUYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7SUFFdkYsZ0ZBQWdGO0lBQ2hGLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsc0JBQXNCO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2Isc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUcsR0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixRQUFRLEVBQUUsc0JBQXNCLENBQUM7WUFDL0IsY0FBYyxFQUFFLFdBQVc7WUFDM0IsbUJBQW1CLEVBQUUsa0JBQWtCO1lBQ3ZDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLGFBQWE7U0FDaEUsQ0FBQztRQUNGLGFBQWEsRUFBRSxJQUFJLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0Usd0VBQXdFO1FBQ3hFLGdCQUFnQixFQUFFO1lBQ2hCLDJCQUEyQixDQUFDO2dCQUMxQixtQ0FBbUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7YUFDeEQsQ0FBQztTQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1osc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFdBQVcsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtRQUNwQixLQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNoYXJlZCBPcGVuVGVsZW1ldHJ5IHByZWxvYWQgYm9vdHN0cmFwIGZvciBldmVyeSBQaXBlbGluZSBCdWlsZGVyIHNlcnZpY2UuXG4gKlxuICogUHJlbG9hZCBpdCBCRUZPUkUgdGhlIGFwcCdzIG93biBjb2RlIHdpdGggKHNlcnZpY2VzIGFyZSBFU00sIHNvIGAtLWltcG9ydGAsXG4gKiBub3QgdGhlIENKUyBgLXJgKTpcbiAqICAgbm9kZSAtLWltcG9ydCBAcGlwZWxpbmUtYnVpbGRlci9hcGktc2VydmVyL2xpYi9vdGVsLWJvb3RzdHJhcC5qcyBpbmRleC5qc1xuICogKHNlZSBlYWNoIHNlcnZpY2UncyBEb2NrZXJmaWxlIENNRCkuXG4gKlxuICogV2h5IGEgcHJlbG9hZCBhbmQgbm90IGEgcHJvZ3JhbW1hdGljIFNESyBzdGFydCBmcm9tIGNyZWF0ZUFwcC9pbmRleC50czpcbiAqIE9wZW5UZWxlbWV0cnkgYXV0by1pbnN0cnVtZW50YXRpb24gcGF0Y2hlcyBtb2R1bGVzIGFzIHRoZXkgbG9hZC4gSWZcbiAqIGBodHRwYC9gZXhwcmVzc2AgYXJlIGFscmVhZHkgbG9hZGVkIHdoZW4gdGhlIFNESyBzdGFydHMsIHRoZSBIVFRQIHNlcnZlciBpc1xuICogbmV2ZXIgd3JhcHBlZCwgc28gbm8gaW5ib3VuZCBzZXJ2ZXIgc3BhbiDigJQgYW5kIHRoZXJlZm9yZSBubyB0cmFjZSBpZCDigJQgaXMgZXZlclxuICogY3JlYXRlZC4gVGhlIGAtLWltcG9ydGAgcHJlbG9hZCBydW5zIGZ1bGx5IGJlZm9yZSBgaW5kZXguanNgIGxvYWRzIGFueVxuICogaW5zdHJ1bWVudGVkIG1vZHVsZS4gQmVjYXVzZSB0aGUgc2VydmljZXMgYXJlIEVTTSwgd2UgYWxzbyByZWdpc3RlciB0aGVcbiAqIGltcG9ydC1pbi10aGUtbWlkZGxlIEVTTSBsb2FkZXIgaG9vayBiZWxvdyDigJQgcmVxdWlyZS1pbi10aGUtbWlkZGxlIGFsb25lIG9ubHlcbiAqIHBhdGNoZXMgQ0pTIGByZXF1aXJlKClgLCB3aGljaCBhbiBFU00gYXBwIG5ldmVyIHVzZXMuXG4gKlxuICogU2VsZi1jb250YWluZWQgb24gcHVycG9zZTogaXQgaW1wb3J0cyBPTkxZIE9wZW5UZWxlbWV0cnkgcGFja2FnZXMgYW5kIHJlYWRzXG4gKiBgcHJvY2Vzcy5lbnZgIGRpcmVjdGx5LiBJdCBtdXN0IE5PVCBpbXBvcnQgdGhpcyBwYWNrYWdlJ3Mgb3duIGJhcnJlbCAob3JcbiAqIGFwaS1jb3JlIC8gcGlwZWxpbmUtY29yZSksIGJlY2F1c2UgdGhvc2UgdHJhbnNpdGl2ZWx5IHJlcXVpcmUgZXhwcmVzcyDigJQgd2hpY2hcbiAqIHdvdWxkIGxvYWQgZXhwcmVzcyBiZWZvcmUgdGhlIFNESyBzdGFydHMgYW5kIGRlZmVhdCB0aGUgcHJlbG9hZC4gVGhpcyBpcyB3aHlcbiAqIHRoZSBib290c3RyYXAgbGl2ZXMgaW4gaXRzIG93biBlbnRyeXBvaW50IGZpbGUgcmF0aGVyIHRoYW4gc3RhcnRpbmcgdGhlIFNES1xuICogZnJvbSB3aXRoaW4gYGFwaS90cmFjaW5nLnRzYC5cbiAqXG4gKiBOby1vcCB1bmxlc3MgYE9URUxfVFJBQ0lOR19FTkFCTEVEPXRydWVgLiBTZXJ2aWNlIG5hbWUgY29tZXMgZnJvbVxuICogYE9URUxfU0VSVklDRV9OQU1FYCAoZmFsbGluZyBiYWNrIHRvIGBTRVJWSUNFX05BTUVgKSwgd2hpY2ggZXZlcnkgc2VydmljZVxuICogYWxyZWFkeSBzZXRzIGluIGl0cyBkZXBsb3kgZW52LlxuICovXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCB7IGdldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2F1dG8taW5zdHJ1bWVudGF0aW9ucy1ub2RlJztcbmltcG9ydCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwJztcbmltcG9ydCB7IHJlc291cmNlRnJvbUF0dHJpYnV0ZXMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgTm9kZVNESyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay1ub2RlJztcblxuaWYgKHByb2Nlc3MuZW52Lk9URUxfVFJBQ0lOR19FTkFCTEVEID09PSAndHJ1ZScpIHtcbiAgY29uc3QgZW5kcG9pbnQgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6NDMxOC92MS90cmFjZXMnO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52Lk9URUxfU0VSVklDRV9OQU1FIHx8IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJztcblxuICAvLyBFbmFibGUgRVNNIGluc3RydW1lbnRhdGlvbjogcmVnaXN0ZXIgdGhlIGltcG9ydC1pbi10aGUtbWlkZGxlIGhvb2sgYmVmb3JlIGFueVxuICAvLyBpbnN0cnVtZW50ZWQgbW9kdWxlIGlzIGltcG9ydGVkLiBXcmFwcGVkIHNvIGEgaG9vay1yZXNvbHV0aW9uIGZhaWx1cmVcbiAgLy8gZGVncmFkZXMgdG8gbm8taW5zdHJ1bWVudGF0aW9uICh0b2RheSdzIGJlaGF2aW91cikgcmF0aGVyIHRoYW4gY3Jhc2hpbmcgdGhlXG4gIC8vIHNlcnZpY2Ugb24gc3RhcnR1cC5cbiAgdHJ5IHtcbiAgICByZWdpc3RlcignQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2hvb2subWpzJywgaW1wb3J0Lm1ldGEudXJsKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oJ1tvdGVsXSBFU00gaW5zdHJ1bWVudGF0aW9uIGhvb2sgbm90IHJlZ2lzdGVyZWQ6JywgKGVyciBhcyBFcnJvcikubWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCBzZGsgPSBuZXcgTm9kZVNESyh7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlRnJvbUF0dHJpYnV0ZXMoe1xuICAgICAgJ3NlcnZpY2UubmFtZSc6IHNlcnZpY2VOYW1lLFxuICAgICAgJ3NlcnZpY2UubmFtZXNwYWNlJzogJ3BpcGVsaW5lLWJ1aWxkZXInLFxuICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA/PyAnZGV2ZWxvcG1lbnQnLFxuICAgIH0pLFxuICAgIHRyYWNlRXhwb3J0ZXI6IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogZW5kcG9pbnQgfSksXG4gICAgLy8gYGZzYCBzcGFucyBhcmUgbm9pc2UgZm9yIHJlcXVlc3QtbGV2ZWwgY29ycmVsYXRpb247IGV2ZXJ5dGhpbmcgZWxzZVxuICAgIC8vIChodHRwL2V4cHJlc3MvbW9uZ28vcGcv4oCmKSBpcyBhdXRvLWluc3RydW1lbnRlZCBzbyBpbmJvdW5kIHJlcXVlc3RzIGdldCBhXG4gICAgLy8gc2VydmVyIHNwYW4gd2hvc2UgdHJhY2UgaWQgZmxvd3Mgb250byBhdWRpdCBldmVudHMgKyBzdHJ1Y3R1cmVkIGxvZ3MuXG4gICAgaW5zdHJ1bWVudGF0aW9uczogW1xuICAgICAgZ2V0Tm9kZUF1dG9JbnN0cnVtZW50YXRpb25zKHtcbiAgICAgICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcyc6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xuXG4gIHNkay5zdGFydCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhgW290ZWxdIHRyYWNpbmcgaW5pdGlhbGl6ZWQgZm9yICR7c2VydmljZU5hbWV9IC0+ICR7ZW5kcG9pbnR9YCk7XG5cbiAgY29uc3Qgc2h1dGRvd24gPSAoKSA9PiB7XG4gICAgdm9pZCBzZGsuc2h1dGRvd24oKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9O1xuICBwcm9jZXNzLm9uY2UoJ1NJR1RFUk0nLCBzaHV0ZG93bik7XG4gIHByb2Nlc3Mub25jZSgnU0lHSU5UJywgc2h1dGRvd24pO1xufVxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RlbC1ib290c3RyYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb3RlbC1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ2hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksaUNBQWlDLENBQUM7SUFDOUYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7SUFFdkYsZ0ZBQWdGO0lBQ2hGLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsc0JBQXNCO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxFQUFHLEdBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdEIsUUFBUSxFQUFFLHNCQUFzQixDQUFDO1lBQy9CLGNBQWMsRUFBRSxXQUFXO1lBQzNCLG1CQUFtQixFQUFFLGtCQUFrQjtZQUN2Qyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxhQUFhO1NBQ2hFLENBQUM7UUFDRixhQUFhLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN2RCxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSxnQkFBZ0IsRUFBRTtZQUNoQiwyQkFBMkIsQ0FBQztnQkFDMUIsbUNBQW1DLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO2FBQ3hELENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNaLHNDQUFzQztJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxXQUFXLE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQztJQUU1RSxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIsS0FBSyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTaGFyZWQgT3BlblRlbGVtZXRyeSBwcmVsb2FkIGJvb3RzdHJhcCBmb3IgZXZlcnkgUGlwZWxpbmUgQnVpbGRlciBzZXJ2aWNlLlxuICpcbiAqIFByZWxvYWQgaXQgQkVGT1JFIHRoZSBhcHAncyBvd24gY29kZSB3aXRoIChzZXJ2aWNlcyBhcmUgRVNNLCBzbyBgLS1pbXBvcnRgLFxuICogbm90IHRoZSBDSlMgYC1yYCk6XG4gKiAgIG5vZGUgLS1pbXBvcnQgQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLXNlcnZlci9saWIvb3RlbC1ib290c3RyYXAuanMgaW5kZXguanNcbiAqIChzZWUgZWFjaCBzZXJ2aWNlJ3MgRG9ja2VyZmlsZSBDTUQpLlxuICpcbiAqIFdoeSBhIHByZWxvYWQgYW5kIG5vdCBhIHByb2dyYW1tYXRpYyBTREsgc3RhcnQgZnJvbSBjcmVhdGVBcHAvaW5kZXgudHM6XG4gKiBPcGVuVGVsZW1ldHJ5IGF1dG8taW5zdHJ1bWVudGF0aW9uIHBhdGNoZXMgbW9kdWxlcyBhcyB0aGV5IGxvYWQuIElmXG4gKiBgaHR0cGAvYGV4cHJlc3NgIGFyZSBhbHJlYWR5IGxvYWRlZCB3aGVuIHRoZSBTREsgc3RhcnRzLCB0aGUgSFRUUCBzZXJ2ZXIgaXNcbiAqIG5ldmVyIHdyYXBwZWQsIHNvIG5vIGluYm91bmQgc2VydmVyIHNwYW4g4oCUIGFuZCB0aGVyZWZvcmUgbm8gdHJhY2UgaWQg4oCUIGlzIGV2ZXJcbiAqIGNyZWF0ZWQuIFRoZSBgLS1pbXBvcnRgIHByZWxvYWQgcnVucyBmdWxseSBiZWZvcmUgYGluZGV4LmpzYCBsb2FkcyBhbnlcbiAqIGluc3RydW1lbnRlZCBtb2R1bGUuIEJlY2F1c2UgdGhlIHNlcnZpY2VzIGFyZSBFU00sIHdlIGFsc28gcmVnaXN0ZXIgdGhlXG4gKiBpbXBvcnQtaW4tdGhlLW1pZGRsZSBFU00gbG9hZGVyIGhvb2sgYmVsb3cg4oCUIHJlcXVpcmUtaW4tdGhlLW1pZGRsZSBhbG9uZSBvbmx5XG4gKiBwYXRjaGVzIENKUyBgcmVxdWlyZSgpYCwgd2hpY2ggYW4gRVNNIGFwcCBuZXZlciB1c2VzLlxuICpcbiAqIFNlbGYtY29udGFpbmVkIG9uIHB1cnBvc2U6IGl0IGltcG9ydHMgT05MWSBPcGVuVGVsZW1ldHJ5IHBhY2thZ2VzIGFuZCByZWFkc1xuICogYHByb2Nlc3MuZW52YCBkaXJlY3RseS4gSXQgbXVzdCBOT1QgaW1wb3J0IHRoaXMgcGFja2FnZSdzIG93biBiYXJyZWwgKG9yXG4gKiBhcGktY29yZSAvIHBpcGVsaW5lLWNvcmUpLCBiZWNhdXNlIHRob3NlIHRyYW5zaXRpdmVseSByZXF1aXJlIGV4cHJlc3Mg4oCUIHdoaWNoXG4gKiB3b3VsZCBsb2FkIGV4cHJlc3MgYmVmb3JlIHRoZSBTREsgc3RhcnRzIGFuZCBkZWZlYXQgdGhlIHByZWxvYWQuIFRoaXMgaXMgd2h5XG4gKiB0aGUgYm9vdHN0cmFwIGxpdmVzIGluIGl0cyBvd24gZW50cnlwb2ludCBmaWxlIHJhdGhlciB0aGFuIHN0YXJ0aW5nIHRoZSBTREtcbiAqIGZyb20gd2l0aGluIGBhcGkvdHJhY2luZy50c2AuXG4gKlxuICogTm8tb3AgdW5sZXNzIGBPVEVMX1RSQUNJTkdfRU5BQkxFRD10cnVlYC4gU2VydmljZSBuYW1lIGNvbWVzIGZyb21cbiAqIGBPVEVMX1NFUlZJQ0VfTkFNRWAgKGZhbGxpbmcgYmFjayB0byBgU0VSVklDRV9OQU1FYCksIHdoaWNoIGV2ZXJ5IHNlcnZpY2VcbiAqIGFscmVhZHkgc2V0cyBpbiBpdHMgZGVwbG95IGVudi5cbiAqL1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgeyBnZXROb2RlQXV0b0luc3RydW1lbnRhdGlvbnMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hdXRvLWluc3RydW1lbnRhdGlvbnMtbm9kZSc7XG5pbXBvcnQgeyBPVExQVHJhY2VFeHBvcnRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cCc7XG5pbXBvcnQgeyByZXNvdXJjZUZyb21BdHRyaWJ1dGVzIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzJztcbmltcG9ydCB7IE5vZGVTREsgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstbm9kZSc7XG5cbmlmIChwcm9jZXNzLmVudi5PVEVMX1RSQUNJTkdfRU5BQkxFRCA9PT0gJ3RydWUnKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHx8ICdodHRwOi8vbG9jYWxob3N0OjQzMTgvdjEvdHJhY2VzJztcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5PVEVMX1NFUlZJQ0VfTkFNRSB8fCBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ2FwaSc7XG5cbiAgLy8gRW5hYmxlIEVTTSBpbnN0cnVtZW50YXRpb246IHJlZ2lzdGVyIHRoZSBpbXBvcnQtaW4tdGhlLW1pZGRsZSBob29rIGJlZm9yZSBhbnlcbiAgLy8gaW5zdHJ1bWVudGVkIG1vZHVsZSBpcyBpbXBvcnRlZC4gV3JhcHBlZCBzbyBhIGhvb2stcmVzb2x1dGlvbiBmYWlsdXJlXG4gIC8vIGRlZ3JhZGVzIHRvIG5vLWluc3RydW1lbnRhdGlvbiAodG9kYXkncyBiZWhhdmlvdXIpIHJhdGhlciB0aGFuIGNyYXNoaW5nIHRoZVxuICAvLyBzZXJ2aWNlIG9uIHN0YXJ0dXAuXG4gIHRyeSB7XG4gICAgcmVnaXN0ZXIoJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9ob29rLm1qcycsIGltcG9ydC5tZXRhLnVybCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKCdbb3RlbF0gRVNNIGluc3RydW1lbnRhdGlvbiBob29rIG5vdCByZWdpc3RlcmVkOicsIChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3Qgc2RrID0gbmV3IE5vZGVTREsoe1xuICAgIHJlc291cmNlOiByZXNvdXJjZUZyb21BdHRyaWJ1dGVzKHtcbiAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICdzZXJ2aWNlLm5hbWVzcGFjZSc6ICdwaXBlbGluZS1idWlsZGVyJyxcbiAgICAgICdkZXBsb3ltZW50LmVudmlyb25tZW50JzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gJ2RldmVsb3BtZW50JyxcbiAgICB9KSxcbiAgICB0cmFjZUV4cG9ydGVyOiBuZXcgT1RMUFRyYWNlRXhwb3J0ZXIoeyB1cmw6IGVuZHBvaW50IH0pLFxuICAgIC8vIGBmc2Agc3BhbnMgYXJlIG5vaXNlIGZvciByZXF1ZXN0LWxldmVsIGNvcnJlbGF0aW9uOyBldmVyeXRoaW5nIGVsc2VcbiAgICAvLyAoaHR0cC9leHByZXNzL21vbmdvL3BnL+KApikgaXMgYXV0by1pbnN0cnVtZW50ZWQgc28gaW5ib3VuZCByZXF1ZXN0cyBnZXQgYVxuICAgIC8vIHNlcnZlciBzcGFuIHdob3NlIHRyYWNlIGlkIGZsb3dzIG9udG8gYXVkaXQgZXZlbnRzICsgc3RydWN0dXJlZCBsb2dzLlxuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIGdldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9ucyh7XG4gICAgICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZnMnOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICB9KSxcbiAgICBdLFxuICB9KTtcblxuICBzZGsuc3RhcnQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5sb2coYFtvdGVsXSB0cmFjaW5nIGluaXRpYWxpemVkIGZvciAke3NlcnZpY2VOYW1lfSAtPiAke2VuZHBvaW50fWApO1xuXG4gIGNvbnN0IHNodXRkb3duID0gKCkgPT4ge1xuICAgIHZvaWQgc2RrLnNodXRkb3duKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgfTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdURVJNJywgc2h1dGRvd24pO1xuICBwcm9jZXNzLm9uY2UoJ1NJR0lOVCcsIHNodXRkb3duKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -6,46 +6,47 @@
6
6
  "url": "git+https://github.com/mwashburn160/pipeline-builder.git"
7
7
  },
8
8
  "devDependencies": {
9
- "@jest/globals": "30.2.0",
9
+ "@jest/globals": "30.4.1",
10
10
  "@stylistic/eslint-plugin": "^2",
11
11
  "@types/compression": "1.8.1",
12
12
  "@types/cors": "2.8.19",
13
13
  "@types/express": "5.0.6",
14
- "@types/express-serve-static-core": "5.1.2",
14
+ "@types/express-serve-static-core": "5.1.3",
15
15
  "@types/jsonwebtoken": "9.0.10",
16
- "@types/node": "26.1.1",
16
+ "@types/node": "26.1.2",
17
17
  "@types/swagger-ui-express": "4.1.8",
18
18
  "@typescript-eslint/eslint-plugin": "^8",
19
19
  "@typescript-eslint/parser": "^8",
20
+ "@typescript/native": "npm:typescript@^7.0.2",
20
21
  "eslint": "^9",
21
22
  "eslint-import-resolver-typescript": "^4.4.4",
22
23
  "eslint-plugin-import": "^2.32.0",
23
24
  "jest": "30.4.2",
24
25
  "jest-junit": "^17",
25
- "ts-jest": "^29",
26
- "typescript": "6.0.3"
26
+ "ts-jest": "29.4.12",
27
+ "typescript": "npm:@typescript/typescript6@^6.0.2"
27
28
  },
28
29
  "dependencies": {
29
30
  "@opentelemetry/api": "1.9.1",
30
- "@opentelemetry/auto-instrumentations-node": "0.78.0",
31
- "@opentelemetry/exporter-trace-otlp-http": "0.220.0",
32
- "@opentelemetry/instrumentation": "0.220.0",
33
- "@opentelemetry/resources": "2.9.0",
34
- "@opentelemetry/sdk-node": "0.220.0",
31
+ "@opentelemetry/auto-instrumentations-node": "0.79.0",
32
+ "@opentelemetry/exporter-trace-otlp-http": "0.221.0",
33
+ "@opentelemetry/instrumentation": "0.221.0",
34
+ "@opentelemetry/resources": "2.10.0",
35
+ "@opentelemetry/sdk-node": "0.221.0",
35
36
  "compression": "1.8.1",
36
37
  "cors": "2.8.6",
37
38
  "express": "5.2.1",
38
- "express-rate-limit": "8.6.0",
39
+ "express-rate-limit": "8.6.1",
39
40
  "helmet": "8.3.0",
40
- "ioredis": "5.11.1",
41
+ "ioredis": "6.0.0",
41
42
  "jsonwebtoken": "9.0.3",
42
43
  "prom-client": "15.1.3",
43
44
  "rate-limit-redis": "6.0.0",
44
45
  "swagger-ui-express": "5.0.1",
45
46
  "uuid": "14.0.1",
46
- "@pipeline-builder/pipeline-core": "3.4.114",
47
- "@pipeline-builder/api-core": "3.4.96",
48
- "@pipeline-builder/pipeline-data": "3.4.100"
47
+ "@pipeline-builder/api-core": "3.4.99",
48
+ "@pipeline-builder/pipeline-core": "3.4.117",
49
+ "@pipeline-builder/pipeline-data": "3.4.103"
49
50
  },
50
51
  "keywords": [
51
52
  "ci-cd",
@@ -101,7 +102,7 @@
101
102
  "access": "public",
102
103
  "registry": "https://registry.npmjs.org/"
103
104
  },
104
- "version": "3.4.120",
105
+ "version": "3.4.123",
105
106
  "bugs": {
106
107
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
107
108
  },