@rdfc/js-runner 3.0.2 → 3.1.0-alpha.1

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/lib/logger.d.ts CHANGED
@@ -6,6 +6,7 @@ export declare class RpcTransport extends Transport {
6
6
  private readonly stream;
7
7
  private readonly entities;
8
8
  private readonly aliases;
9
+ private draining;
9
10
  constructor(opts: {
10
11
  stream: grpc.ClientWritableStream<LogMessage>;
11
12
  entities: string[];
package/lib/logger.js CHANGED
@@ -4,25 +4,35 @@ export class RpcTransport extends Transport {
4
4
  stream;
5
5
  entities;
6
6
  aliases;
7
+ draining;
7
8
  constructor(opts) {
8
9
  super({ level: 'debug' });
9
10
  this.stream = opts.stream;
10
11
  this.entities = opts.entities;
11
12
  this.aliases = opts.aliases || [];
13
+ this.draining = true;
14
+ this.stream.on('drain', () => {
15
+ this.draining = true;
16
+ });
12
17
  }
13
18
  log(info, callback) {
14
- if (!this.stream.closed) {
15
- this.stream.write({
16
- msg: info.message,
17
- level: info.level,
18
- entities: this.entities,
19
- aliases: this.aliases,
20
- }, callback);
19
+ if (!this.stream.closed && !this.stream.destroyed && this.stream.writable) {
20
+ if (this.draining) {
21
+ const ok = this.stream.write({
22
+ msg: info.message,
23
+ level: info.level,
24
+ entities: this.entities,
25
+ aliases: this.aliases,
26
+ });
27
+ if (!ok) {
28
+ this.draining = false;
29
+ }
30
+ }
21
31
  }
22
32
  else {
23
33
  console.log('Output stream closed');
24
- callback();
25
34
  }
35
+ callback();
26
36
  }
27
37
  withEntity(entity) {
28
38
  return new RpcTransport({
@@ -46,4 +56,4 @@ export function extendLogger(baseLogger, newEntity) {
46
56
  transports: newTransports,
47
57
  });
48
58
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLFNBQVMsQ0FBQTtBQUN4RCxPQUFPLFNBQVMsTUFBTSxtQkFBbUIsQ0FBQTtBQUt6QyxNQUFNLE9BQU8sWUFBYSxTQUFRLFNBQVM7SUFDeEIsTUFBTSxDQUF1QztJQUM3QyxRQUFRLENBQVU7SUFDbEIsT0FBTyxDQUFVO0lBRWxDLFlBQVksSUFJWDtRQUNDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBRXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQWMsRUFBRSxRQUFvQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZjtnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsRUFDRCxRQUFRLENBQ1QsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1lBQ25DLFFBQVEsRUFBRSxDQUFBO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYztRQUN2QixPQUFPLElBQUksWUFBWSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQWtCLEVBQUUsU0FBaUI7SUFDaEUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNwRCxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLFlBQVksQ0FBQztRQUNsQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1FBQ3pCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztRQUNuQyxVQUFVLEVBQUUsYUFBYTtLQUMxQixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBMb2dFbnRyeSwgTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcbmltcG9ydCBUcmFuc3BvcnQgZnJvbSAnd2luc3Rvbi10cmFuc3BvcnQnXG5cbmltcG9ydCAqIGFzIGdycGMgZnJvbSAnQGdycGMvZ3JwYy1qcydcbmltcG9ydCB7IExvZ01lc3NhZ2UgfSBmcm9tICdAcmRmYy9wcm90bydcblxuZXhwb3J0IGNsYXNzIFJwY1RyYW5zcG9ydCBleHRlbmRzIFRyYW5zcG9ydCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBncnBjLkNsaWVudFdyaXRhYmxlU3RyZWFtPExvZ01lc3NhZ2U+XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXRpZXM6IHN0cmluZ1tdXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxpYXNlczogc3RyaW5nW11cblxuICBjb25zdHJ1Y3RvcihvcHRzOiB7XG4gICAgc3RyZWFtOiBncnBjLkNsaWVudFdyaXRhYmxlU3RyZWFtPExvZ01lc3NhZ2U+XG4gICAgZW50aXRpZXM6IHN0cmluZ1tdXG4gICAgYWxpYXNlcz86IHN0cmluZ1tdXG4gIH0pIHtcbiAgICBzdXBlcih7IGxldmVsOiAnZGVidWcnIH0pXG5cbiAgICB0aGlzLnN0cmVhbSA9IG9wdHMuc3RyZWFtXG4gICAgdGhpcy5lbnRpdGllcyA9IG9wdHMuZW50aXRpZXNcbiAgICB0aGlzLmFsaWFzZXMgPSBvcHRzLmFsaWFzZXMgfHwgW11cbiAgfVxuXG4gIGxvZyhpbmZvOiBMb2dFbnRyeSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuc3RyZWFtLmNsb3NlZCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtc2c6IGluZm8ubWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogaW5mby5sZXZlbCxcbiAgICAgICAgICBlbnRpdGllczogdGhpcy5lbnRpdGllcyxcbiAgICAgICAgICBhbGlhc2VzOiB0aGlzLmFsaWFzZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnT3V0cHV0IHN0cmVhbSBjbG9zZWQnKVxuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIHdpdGhFbnRpdHkoZW50aXR5OiBzdHJpbmcpOiBScGNUcmFuc3BvcnQge1xuICAgIHJldHVybiBuZXcgUnBjVHJhbnNwb3J0KHtcbiAgICAgIHN0cmVhbTogdGhpcy5zdHJlYW0sXG4gICAgICBlbnRpdGllczogWy4uLnRoaXMuZW50aXRpZXMsIGVudGl0eV0sXG4gICAgICBhbGlhc2VzOiB0aGlzLmFsaWFzZXMsXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kTG9nZ2VyKGJhc2VMb2dnZXI6IExvZ2dlciwgbmV3RW50aXR5OiBzdHJpbmcpOiBMb2dnZXIge1xuICBjb25zdCBuZXdUcmFuc3BvcnRzID0gYmFzZUxvZ2dlci50cmFuc3BvcnRzLm1hcCgodCkgPT4ge1xuICAgIGlmICh0IGluc3RhbmNlb2YgUnBjVHJhbnNwb3J0KSB7XG4gICAgICByZXR1cm4gdC53aXRoRW50aXR5KG5ld0VudGl0eSlcbiAgICB9XG4gICAgcmV0dXJuIHRcbiAgfSlcblxuICByZXR1cm4gY3JlYXRlTG9nZ2VyKHtcbiAgICBsZXZlbDogYmFzZUxvZ2dlci5sZXZlbCxcbiAgICBmb3JtYXQ6IGJhc2VMb2dnZXIuZm9ybWF0LFxuICAgIGRlZmF1bHRNZXRhOiBiYXNlTG9nZ2VyLmRlZmF1bHRNZXRhLFxuICAgIHRyYW5zcG9ydHM6IG5ld1RyYW5zcG9ydHMsXG4gIH0pXG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLFNBQVMsQ0FBQTtBQUN4RCxPQUFPLFNBQVMsTUFBTSxtQkFBbUIsQ0FBQTtBQUt6QyxNQUFNLE9BQU8sWUFBYSxTQUFRLFNBQVM7SUFDeEIsTUFBTSxDQUF1QztJQUM3QyxRQUFRLENBQVU7SUFDbEIsT0FBTyxDQUFVO0lBQzFCLFFBQVEsQ0FBUztJQUV6QixZQUFZLElBSVg7UUFDQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUV6QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUN0QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxHQUFHLENBQUMsSUFBYyxFQUFFLFFBQW9CO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUMzQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQ3RCLENBQUMsQ0FBQTtnQkFDRixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFDckMsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFBO0lBQ1osQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFjO1FBQ3ZCLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtJQUNoRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3BELElBQUksQ0FBQyxZQUFZLFlBQVksRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNoQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sWUFBWSxDQUFDO1FBQ2xCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztRQUN2QixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1FBQ25DLFVBQVUsRUFBRSxhQUFhO0tBQzFCLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVMb2dnZXIsIExvZ0VudHJ5LCBMb2dnZXIgfSBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IFRyYW5zcG9ydCBmcm9tICd3aW5zdG9uLXRyYW5zcG9ydCdcblxuaW1wb3J0ICogYXMgZ3JwYyBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgTG9nTWVzc2FnZSB9IGZyb20gJ0ByZGZjL3Byb3RvJ1xuXG5leHBvcnQgY2xhc3MgUnBjVHJhbnNwb3J0IGV4dGVuZHMgVHJhbnNwb3J0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdHJlYW06IGdycGMuQ2xpZW50V3JpdGFibGVTdHJlYW08TG9nTWVzc2FnZT5cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRpdGllczogc3RyaW5nW11cbiAgcHJpdmF0ZSByZWFkb25seSBhbGlhc2VzOiBzdHJpbmdbXVxuICBwcml2YXRlIGRyYWluaW5nOiBib29sZWFuXG5cbiAgY29uc3RydWN0b3Iob3B0czoge1xuICAgIHN0cmVhbTogZ3JwYy5DbGllbnRXcml0YWJsZVN0cmVhbTxMb2dNZXNzYWdlPlxuICAgIGVudGl0aWVzOiBzdHJpbmdbXVxuICAgIGFsaWFzZXM/OiBzdHJpbmdbXVxuICB9KSB7XG4gICAgc3VwZXIoeyBsZXZlbDogJ2RlYnVnJyB9KVxuXG4gICAgdGhpcy5zdHJlYW0gPSBvcHRzLnN0cmVhbVxuICAgIHRoaXMuZW50aXRpZXMgPSBvcHRzLmVudGl0aWVzXG4gICAgdGhpcy5hbGlhc2VzID0gb3B0cy5hbGlhc2VzIHx8IFtdXG4gICAgdGhpcy5kcmFpbmluZyA9IHRydWVcblxuICAgIHRoaXMuc3RyZWFtLm9uKCdkcmFpbicsICgpID0+IHtcbiAgICAgIHRoaXMuZHJhaW5pbmcgPSB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGxvZyhpbmZvOiBMb2dFbnRyeSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuc3RyZWFtLmNsb3NlZCAmJiAhdGhpcy5zdHJlYW0uZGVzdHJveWVkICYmIHRoaXMuc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICBpZiAodGhpcy5kcmFpbmluZykge1xuICAgICAgICBjb25zdCBvayA9IHRoaXMuc3RyZWFtLndyaXRlKHtcbiAgICAgICAgICBtc2c6IGluZm8ubWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogaW5mby5sZXZlbCxcbiAgICAgICAgICBlbnRpdGllczogdGhpcy5lbnRpdGllcyxcbiAgICAgICAgICBhbGlhc2VzOiB0aGlzLmFsaWFzZXMsXG4gICAgICAgIH0pXG4gICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICB0aGlzLmRyYWluaW5nID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnT3V0cHV0IHN0cmVhbSBjbG9zZWQnKVxuICAgIH1cbiAgICBjYWxsYmFjaygpXG4gIH1cblxuICB3aXRoRW50aXR5KGVudGl0eTogc3RyaW5nKTogUnBjVHJhbnNwb3J0IHtcbiAgICByZXR1cm4gbmV3IFJwY1RyYW5zcG9ydCh7XG4gICAgICBzdHJlYW06IHRoaXMuc3RyZWFtLFxuICAgICAgZW50aXRpZXM6IFsuLi50aGlzLmVudGl0aWVzLCBlbnRpdHldLFxuICAgICAgYWxpYXNlczogdGhpcy5hbGlhc2VzLFxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZExvZ2dlcihiYXNlTG9nZ2VyOiBMb2dnZXIsIG5ld0VudGl0eTogc3RyaW5nKTogTG9nZ2VyIHtcbiAgY29uc3QgbmV3VHJhbnNwb3J0cyA9IGJhc2VMb2dnZXIudHJhbnNwb3J0cy5tYXAoKHQpID0+IHtcbiAgICBpZiAodCBpbnN0YW5jZW9mIFJwY1RyYW5zcG9ydCkge1xuICAgICAgcmV0dXJuIHQud2l0aEVudGl0eShuZXdFbnRpdHkpXG4gICAgfVxuICAgIHJldHVybiB0XG4gIH0pXG5cbiAgcmV0dXJuIGNyZWF0ZUxvZ2dlcih7XG4gICAgbGV2ZWw6IGJhc2VMb2dnZXIubGV2ZWwsXG4gICAgZm9ybWF0OiBiYXNlTG9nZ2VyLmZvcm1hdCxcbiAgICBkZWZhdWx0TWV0YTogYmFzZUxvZ2dlci5kZWZhdWx0TWV0YSxcbiAgICB0cmFuc3BvcnRzOiBuZXdUcmFuc3BvcnRzLFxuICB9KVxufVxuIl19
package/lib/reader.d.ts CHANGED
@@ -14,6 +14,7 @@ export interface Reader {
14
14
  streams(): AsyncIterable<AsyncGenerator<Uint8Array>>;
15
15
  buffers(): AsyncIterable<Uint8Array>;
16
16
  anys(): AsyncIterable<Any>;
17
+ cancel(): Promise<void>;
17
18
  }
18
19
  export declare class ReaderInstance implements Reader {
19
20
  private client;
@@ -21,6 +22,8 @@ export declare class ReaderInstance implements Reader {
21
22
  private logger;
22
23
  private readonly notifyOrchestrator;
23
24
  private consumers;
25
+ private closed;
26
+ private canceled;
24
27
  constructor(uri: string, client: RunnerClient, notifyOrchestrator: Writable, logger: Logger);
25
28
  anys(): AsyncIterable<Any>;
26
29
  strings(): AsyncIterable<string>;
@@ -28,5 +31,6 @@ export declare class ReaderInstance implements Reader {
28
31
  streams(): AsyncIterable<AsyncGenerator<Uint8Array>>;
29
32
  handleMsg(msg: ReceivingMessage): void;
30
33
  close(): void;
34
+ cancel(): Promise<void>;
31
35
  handleStreamingMessage({ channel, globalSequenceNumber, }: ReceivingStreamMessage): Promise<void>;
32
36
  }
package/lib/reader.js CHANGED
@@ -4,10 +4,15 @@ class MyIter {
4
4
  convertor;
5
5
  queue = [];
6
6
  resolveNext = null;
7
+ closed = false;
7
8
  constructor(convertor) {
8
9
  this.convertor = convertor;
9
10
  }
10
11
  push(buffer, onComplete) {
12
+ if (this.closed) {
13
+ onComplete();
14
+ return;
15
+ }
11
16
  const item = this.convertor.from(buffer);
12
17
  this.queue.push({ item, onComplete });
13
18
  if (this.resolveNext) {
@@ -16,6 +21,11 @@ class MyIter {
16
21
  }
17
22
  }
18
23
  close(onComplete) {
24
+ if (this.closed) {
25
+ onComplete();
26
+ return;
27
+ }
28
+ this.closed = true;
19
29
  this.queue.push({ item: undefined, onComplete });
20
30
  if (this.resolveNext) {
21
31
  this.resolveNext(undefined);
@@ -23,6 +33,10 @@ class MyIter {
23
33
  }
24
34
  }
25
35
  async pushStream(chunks, onComplete) {
36
+ if (this.closed) {
37
+ onComplete();
38
+ return;
39
+ }
26
40
  const stream = (async function* (stream) {
27
41
  for await (const chunk of stream) {
28
42
  yield chunk.data;
@@ -58,6 +72,8 @@ export class ReaderInstance {
58
72
  logger;
59
73
  notifyOrchestrator;
60
74
  consumers = [];
75
+ closed = false;
76
+ canceled = false;
61
77
  constructor(uri, client, notifyOrchestrator, logger) {
62
78
  this.uri = uri;
63
79
  this.client = client;
@@ -86,6 +102,15 @@ export class ReaderInstance {
86
102
  }
87
103
  handleMsg(msg) {
88
104
  this.logger.debug(`${this.uri} handling message`);
105
+ if (this.closed) {
106
+ this.notifyOrchestrator({
107
+ processed: {
108
+ globalSequenceNumber: msg.globalSequenceNumber,
109
+ channel: this.uri,
110
+ },
111
+ });
112
+ return;
113
+ }
89
114
  const promises = [];
90
115
  for (const iter of this.consumers) {
91
116
  promises.push(new Promise((res) => iter.push(msg.data, () => res(null))));
@@ -98,12 +123,32 @@ export class ReaderInstance {
98
123
  }));
99
124
  }
100
125
  close() {
126
+ if (this.closed) {
127
+ return;
128
+ }
129
+ this.closed = true;
101
130
  for (const iter of this.consumers) {
102
131
  iter.close(() => { });
103
132
  }
104
133
  }
134
+ async cancel() {
135
+ if (this.canceled) {
136
+ return;
137
+ }
138
+ this.canceled = true;
139
+ this.close();
140
+ await this.notifyOrchestrator({
141
+ close: { channel: this.uri },
142
+ });
143
+ }
105
144
  async handleStreamingMessage({ channel, globalSequenceNumber, }) {
106
145
  this.logger.debug(`${this.uri} handling streaming message`);
146
+ if (this.closed) {
147
+ await this.notifyOrchestrator({
148
+ processed: { globalSequenceNumber, channel },
149
+ });
150
+ return;
151
+ }
107
152
  const chunks = this.client.receiveStreamMessage();
108
153
  const writeControlMessage = promisify(chunks.write.bind(chunks));
109
154
  const consumersConsumed = [];
@@ -208,4 +253,4 @@ function fanoutStream(stream, numConsumers, onAllHandled) {
208
253
  const rawIterables = Array.from({ length: numConsumers }, makeIterable);
209
254
  return rawIterables.map(wrap);
210
255
  }
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQ0wsWUFBWSxFQUVaLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQTtBQUVwQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBMEJoQyxNQUFNLE1BQU07SUFDRixTQUFTLENBQWM7SUFDdkIsS0FBSyxHQUEwQixFQUFFLENBQUE7SUFDakMsV0FBVyxHQUF3QyxJQUFJLENBQUE7SUFFL0QsWUFBWSxTQUF1QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQWtCLEVBQUUsVUFBc0I7UUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQXNCO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ2hELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7UUFDekIsQ0FBQztJQUNILENB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S0FBSyxDQUFDLE1BQU07d0JBQ1YsZUFBZSxFQUFFLENBQUE7d0JBQ2pCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUMxQixHQUFHLEVBQUUsQ0FBQTt3QkFDUCxDQUFDO3dCQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQTtvQkFDekMsQ0FBQztpQkFDRixDQUFBO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsS0FBSyxVQUFVLEdBQUc7UUFDaEIsV0FBVyxFQUFFLENBQUE7UUFDYixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUV0QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDZCxNQUFNLFlBQVksRUFBRSxDQUFBO1lBQ3BCLEtBQUssRUFBRSxDQUFBO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLElBQUksQ0FBQyxRQUEwQjtRQUN0QyxPQUFPO1lBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUMzQixJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxJQUFJLENBQUE7b0JBQ1YsTUFBTSxHQUFHLEVBQUUsQ0FBQTtnQkFDYixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUN2RSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudFJlYWRhYmxlU3RyZWFtIH0gZnJvbSAnQGdycGMvZ3JwYy1qcydcbmltcG9ydCB7XG4gIERhdGFDaHVuayxcbiAgUmVjZWl2aW5nTWVzc2FnZSxcbiAgUmVjZWl2aW5nU3RyZWFtTWVzc2FnZSxcbiAgUnVubmVyQ2xpZW50LFxufSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5pbXBvcnQge1xuICBBbnlDb252ZXJ0b3IsXG4gIENvbnZlcnRvcixcbiAgTm9Db252ZXJ0b3IsXG4gIFN0cmVhbUNvbnZlcnRvcixcbiAgU3RyaW5nQ29udmVydG9yLFxufSBmcm9tICcuL2NvbnZlcnRvcidcbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnLi9ydW5uZXInXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJ1xuXG5leHBvcnQgdHlwZSBBbnkgPVxuICB8IHtcbiAgICBzdHJpbmc6IHN0cmluZ1xuICB9XG4gIHwge1xuICAgIHN0cmVhbTogQXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT5cbiAgfVxuICB8IHtcbiAgICBidWZmZXI6IFVpbnQ4QXJyYXlcbiAgfVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRlciB7XG4gIHJlYWRvbmx5IHVyaTogc3RyaW5nXG4gIHN0cmluZ3MoKTogQXN5bmNJdGVyYWJsZTxzdHJpbmc+XG4gIHN0cmVhbXMoKTogQXN5bmNJdGVyYWJsZTxBc3luY0dlbmVyYXRvcjxVaW50OEFycmF5Pj5cbiAgYnVmZmVycygpOiBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+XG4gIGFueXMoKTogQXN5bmNJdGVyYWJsZTxBbnk+XG59XG5cbnR5cGUgVG9kbzxUPiA9IHtcbiAgaXRlbTogVFxuICBvbkNvbXBsZXRlOiAoKSA9PiB2b2lkXG59XG5cbmNsYXNzIE15SXRlcjxUPiBpbXBsZW1lbnRzIEFzeW5jSXRlcmFibGU8VD4ge1xuICBwcml2YXRlIGNvbnZlcnRvcjogQ29udmVydG9yPFQ+XG4gIHByaXZhdGUgcXVldWU6IFRvZG88VCB8IHVuZGVmaW5lZD5bXSA9IFtdXG4gIHByaXZhdGUgcmVzb2x2ZU5leHQ6ICgodmFsdWU6IHVuZGVmaW5lZCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yKGNvbnZlcnRvcjogQ29udmVydG9yPFQ+KSB7XG4gICAgdGhpcy5jb252ZXJ0b3IgPSBjb252ZXJ0b3JcbiAgfVxuXG4gIHB1c2goYnVmZmVyOiBVaW50OEFycmF5LCBvbkNvbXBsZXRlOiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY29udmVydG9yLmZyb20oYnVmZmVyKVxuICAgIHRoaXMucXVldWUucHVzaCh7IGl0ZW0sIG9uQ29tcGxldGUgfSlcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLnJlc29sdmVOZXh0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGNsb3NlKG9uQ29tcGxldGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnF1ZXVlLnB1c2goeyBpdGVtOiB1bmRlZmluZWQsIG9uQ29tcGxldGUgfSlcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLnJlc29sdmVOZXh0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHB1c2hTdHJlYW0oY2h1bmtzOiBBc3luY0l0ZXJhYmxlPERhdGFDaHVuaz4sIG9uQ29tcGxldGU6ICgpID0+IHZvaWQpIHtcbiAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IHRyYW5zZm9ybXMgRGF0YUNodW5rcyB0byBCdWZmZXJzXG4gICAgY29uc3Qgc3RyZWFtID0gKGFzeW5jIGZ1bmN0aW9uKihzdHJlYW0pIHtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgIHlpZWxkIGNodW5rLmRhdGFcbiAgICAgIH1cbiAgICB9KShjaHVua3MpXG5cbiAgICBjb25zdCBpdGVtID0gYXdhaXQgdGhpcy5jb252ZXJ0b3IuZnJvbVN0cmVhbShzdHJlYW0pXG4gICAgdGhpcy5xdWV1ZS5wdXNoKHsgaXRlbSwgb25Db21wbGV0ZSB9KVxuICAgIGlmICh0aGlzLnJlc29sdmVOZXh0KSB7XG4gICAgICB0aGlzLnJlc29sdmVOZXh0KHVuZGVmaW5lZClcbiAgICAgIHRoaXMucmVzb2x2ZU5leHQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgeyBpdGVtLCBvbkNvbXBsZXRlIH0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCkhXG4gICAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvbkNvbXBsZXRlKClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkIGl0ZW1cbiAgICAgICAgLy8gTm90ZTogZXhlY3V0aW9uIHBhdXNlcyBhdCBgeWllbGRgIHVudGlsIHRoZSBjb25zdW1lciBjYWxscyBgLm5leHQoKWAgYWdhaW4uXG4gICAgICAgIC8vIFdlIGNhbGwgb25Db21wbGV0ZSAqYWZ0ZXIqIHJlc3VtaW5nLCBzbyB0aGUgcHJvZHVjZXIga25vd3MgdGhlIGl0ZW0gd2FzIGFjdHVhbGx5IGNvbnN1bWVkLlxuICAgICAgICBvbkNvbXBsZXRlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHVuZGVmaW5lZD4oKHJlc29sdmUpID0+ICh0aGlzLnJlc29sdmVOZXh0ID0gcmVzb2x2ZSkpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFkZXJJbnN0YW5jZSBpbXBsZW1lbnRzIFJlYWRlciB7XG4gIHByaXZhdGUgY2xpZW50OiBSdW5uZXJDbGllbnRcbiAgcmVhZG9ubHkgdXJpOiBzdHJpbmdcbiAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGVcblxuICBwcml2YXRlIGNvbnN1bWVyczogTXlJdGVyPHVua25vd24+W10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVyaTogc3RyaW5nLFxuICAgIGNsaWVudDogUnVubmVyQ2xpZW50LFxuICAgIG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGUsXG4gICAgbG9nZ2VyOiBMb2dnZXIsXG4gICkge1xuICAgIHRoaXMudXJpID0gdXJpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlclxuICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yID0gbm90aWZ5T3JjaGVzdHJhdG9yXG4gIH1cblxuICBhbnlzKCk6IEFzeW5jSXRlcmFibGU8QW55PiB7XG4gICAgY29uc3QgaXRlciA9IG5ldyBNeUl0ZXIoQW55Q29udmVydG9yKVxuICAgIHRoaXMuY29uc3VtZXJzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgc3RyaW5ncygpOiBBc3luY0l0ZXJhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKFN0cmluZ0NvbnZlcnRvcilcbiAgICB0aGlzLmNvbnN1bWVycy5wdXNoKGl0ZXIpXG4gICAgcmV0dXJuIGl0ZXJcbiAgfVxuXG4gIGJ1ZmZlcnMoKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgaXRlciA9IG5ldyBNeUl0ZXIoTm9Db252ZXJ0b3IpXG4gICAgdGhpcy5jb25zdW1lcnMucHVzaChpdGVyKVxuICAgIHJldHVybiBpdGVyXG4gIH1cblxuICBzdHJlYW1zKCk6IEFzeW5jSXRlcmFibGU8QXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT4+IHtcbiAgICBjb25zdCBpdGVyID0gbmV3IE15SXRlcihTdHJlYW1Db252ZXJ0b3IpXG4gICAgdGhpcy5jb25zdW1lcnMucHVzaChpdGVyKVxuICAgIHJldHVybiBpdGVyXG4gIH1cblxuICBoYW5kbGVNc2cobXNnOiBSZWNlaXZpbmdNZXNzYWdlKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dGhpcy51cml9IGhhbmRsaW5nIG1lc3NhZ2VgKVxuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgaXRlciBvZiB0aGlzLmNvbnN1bWVycykge1xuICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzKSA9PiBpdGVyLnB1c2gobXNnLmRhdGEsICgpID0+IHJlcyhudWxsKSkpKVxuICAgIH1cblxuICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+XG4gICAgICB0aGlzLm5vdGlmeU9yY2hlc3RyYXRvcih7XG4gICAgICAgIHByb2Nlc3NlZDoge1xuICAgICAgICAgIGdsb2JhbFNlcXVlbmNlTnVtYmVyOiBtc2cuZ2xvYmFsU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgY2hhbm5lbDogdGhpcy51cmksXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZXIgb2YgdGhpcy5jb25zdW1lcnMpIHtcbiAgICAgIGl0ZXIuY2xvc2UoKCkgPT4geyB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZXJlIGlzIGEgc3RyZWFtIG1lc3NhZ2UgYXZhaWxhYmxlIGZvciB0aGlzIHJlYWRlclxuICBhc3luYyBoYW5kbGVTdHJlYW1pbmdNZXNzYWdlKHtcbiAgICBjaGFubmVsLFxuICAgIGdsb2JhbFNlcXVlbmNlTnVtYmVyLFxuICB9OiBSZWNlaXZpbmdTdHJlYW1NZXNzYWdlKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dGhpcy51cml9IGhhbmRsaW5nIHN0cmVhbWluZyBtZXNzYWdlYClcblxuICAgIGNvbnN0IGNodW5rcyA9IHRoaXMuY2xpZW50LnJlY2VpdmVTdHJlYW1NZXNzYWdlKClcbiAgICBjb25zdCB3cml0ZUNvbnRyb2xNZXNzYWdlID0gcHJvbWlzaWZ5KGNodW5rcy53cml0ZS5iaW5kKGNodW5rcykpXG4gICAgY29uc3QgY29uc3VtZXJzQ29uc3VtZWQgPSBbXVxuXG4gICAgLy8gQWZ0ZXIgZWFjaCBjaHVuayBpcyBoYW5kbGVkIGJ5IGFsbCBjb25zdW1lciwgZW1pdCBhIHByb2Nlc3NlZCBtZXNzYWdlXG4gICAgbGV0IGlkeCA9IDBcbiAgICBjb25zdCBtZXNzYWdlSXRlcmF0b3JzID0gZmFub3V0U3RyZWFtKFxuICAgICAgY2h1bmtzLFxuICAgICAgdGhpcy5jb25zdW1lcnMubGVuZ3RoLFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB3cml0ZUNvbnRyb2xNZXNzYWdlKHsgc3RyZWFtU2VxdWVuY2VOdW1iZXI6IGlkeCsrIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIGZvciAoY29uc3QgY29uc3VtZXIgb2YgdGhpcy5jb25zdW1lcnMpIHtcbiAgICAgIGNvbnN1bWVyc0NvbnN1bWVkLnB1c2goXG4gICAgICAgIG5ldyBQcm9taXNlKChyZXMpID0+XG4gICAgICAgICAgY29uc3VtZXIucHVzaFN0cmVhbShtZXNzYWdlSXRlcmF0b3JzLnBvcCgpISwgKCkgPT4gcmVzKG51bGwpKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICBhd2FpdCB3cml0ZUNvbnRyb2xNZXNzYWdlKHsgZ2xvYmFsU2VxdWVuY2VOdW1iZXIgfSlcblxuICAgIFByb21pc2UuYWxsKGNvbnN1bWVyc0NvbnN1bWVkKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdXcml0aW5nIHByb2Nlc3NlZCBmb3Igc3RyZWFtaW5nIG1lc3NhZ2UnKVxuICAgICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3IoeyBwcm9jZXNzZWQ6IHsgZ2xvYmFsU2VxdWVuY2VOdW1iZXIsIGNoYW5uZWwgfSB9KVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdGVlIGEgc3RyZWFtIGBudW1Db25zdW1lcnNgIHRpbWVzXG4gKiBXaGVuIGVhY2ggdGVlJ2Qgc3RyZWFtIGhhcyBoYW5kbGVkIGEgY2h1bmssIGNhbGwge0BsaW5rIG9uQWxsSGFuZGxlZH1cbiAqL1xuZnVuY3Rpb24gZmFub3V0U3RyZWFtPFQ+KFxuICBzdHJlYW06IENsaWVudFJlYWRhYmxlU3RyZWFtPFQ+LFxuICBudW1Db25zdW1lcnM6IG51bWJlcixcbiAgb25BbGxIYW5kbGVkOiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbik6IEFzeW5jSXRlcmFibGU8VD5bXSB7XG4gIHR5cGUgV2FpdGVyID0gKHZhbHVlOiBJdGVyYXRvclJlc3VsdDxUPikgPT4gdm9pZFxuXG4gIGxldCBlbmRlZCA9IGZhbHNlXG4gIGNvbnN0IGJ1ZmZlcjogVFtdID0gW11cbiAgY29uc3QgcGVuZGluZzogV2FpdGVyW10gPSBbXVxuICBsZXQgYWN0aXZlQ29uc3VtZXJzID0gbnVtQ29uc3VtZXJzXG5cbiAgLy8gY29uc3VtZXIgYm9va2tlZXBpbmdcbiAgbGV0IGF3YWl0aW5nQWNrID0gMFxuXG4gIGZ1bmN0aW9uIHB1c2hDaHVuayhjaHVuazogVCkge1xuICAgIGJ1ZmZlci5wdXNoKGNodW5rKVxuICAgIGZsdXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHdoaWxlIChidWZmZXIubGVuZ3RoID4gMCAmJiBwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNodW5rID0gYnVmZmVyWzBdIC8vIGtlZXAgdW50aWwgYWxsIGNvbnN1bWVycyBhY2tcbiAgICAgIGNvbnN0IHdhaXRlciA9IHBlbmRpbmcuc2hpZnQoKSFcbiAgICAgIHdhaXRlcih7IHZhbHVlOiBjaHVuaywgZG9uZTogZmFsc2UgfSlcbiAgICAgIGF3YWl0aW5nQWNrKytcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmQoKSB7XG4gICAgZW5kZWQgPSB0cnVlXG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd2FpdGVyID0gcGVuZGluZy5zaGlmdCgpIVxuICAgICAgd2FpdGVyKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuazogVCkgPT4ge1xuICAgIHB1c2hDaHVuayhjaHVuaylcbiAgfSlcblxuICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICBlbmQoKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd2FpdGVyID0gcGVuZGluZy5zaGlmdCgpIVxuICAgICAgd2FpdGVyKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfSlcblxuICBmdW5jdGlvbiBtYWtlSXRlcmFibGUoKTogQXN5bmNJdGVyYWJsZTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmV4dCgpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQ+PiB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBidWZmZXJbMF1cbiAgICAgICAgICAgICAgYXdhaXRpbmdBY2srK1xuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZSB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgcGVuZGluZy5wdXNoKHJlc29sdmUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgcmV0dXJuKCkge1xuICAgICAgICAgICAgYWN0aXZlQ29uc3VtZXJzLS1cbiAgICAgICAgICAgIGlmIChhY3RpdmVDb25zdW1lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgZW5kKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYWNrKCkge1xuICAgIGF3YWl0aW5nQWNrLS1cbiAgICBpZiAoYXdhaXRpbmdBY2sgPT09IDApIHtcbiAgICAgIC8vIGFsbCBjb25zdW1lcnMgZG9uZSB3aXRoIHRoZSBjdXJyZW50IGNodW5rXG4gICAgICBidWZmZXIuc2hpZnQoKSAvLyBkcm9wIGl0XG4gICAgICBhd2FpdCBvbkFsbEhhbmRsZWQoKVxuICAgICAgZmx1c2goKSAvLyBjb250aW51ZSB3aXRoIG5leHQgY2h1bmtcbiAgICB9XG4gIH1cblxuICAvLyB3cmFwIGNvbnN1bWVyIHNvIHRoZXkgKm11c3QqIGNhbGwgYWNrKCkgYWZ0ZXIgcHJvY2Vzc2luZ1xuICBmdW5jdGlvbiB3cmFwKGl0ZXJhYmxlOiBBc3luY0l0ZXJhYmxlPFQ+KTogQXN5bmNJdGVyYWJsZTxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICB5aWVsZCBpdGVtXG4gICAgICAgICAgYXdhaXQgYWNrKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBjb25zdCByYXdJdGVyYWJsZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBudW1Db25zdW1lcnMgfSwgbWFrZUl0ZXJhYmxlKVxuICByZXR1cm4gcmF3SXRlcmFibGVzLm1hcCh3cmFwKVxufVxuIl19
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQ0wsWUFBWSxFQUVaLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQTtBQUVwQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBMkJoQyxNQUFNLE1BQU07SUFDRixTQUFTLENBQWM7SUFDdkIsS0FBSyxHQUEwQixFQUFFLENBQUE7SUFDakMsV0FBVyxHQUF3QyxJQUFJLENBQUE7SUFDdkQsTUFBTSxHQUFHLEtBQUssQ0FBQTtJQUV0QixZQUFZLFNBQXVCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBa0IsRUFBRSxVQUFzQjtRQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixVQUFVLEVBQUUsQ0FBQTtZQUNaLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQXNCO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLFVBQVUsRUFBRSxDQUFBO1lBQ1osT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FB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bXBvcnQgeyBDbGllbnRSZWFkYWJsZVN0cmVhbSB9IGZyb20gJ0BncnBjL2dycGMtanMnXG5pbXBvcnQge1xuICBEYXRhQ2h1bmssXG4gIFJlY2VpdmluZ01lc3NhZ2UsXG4gIFJlY2VpdmluZ1N0cmVhbU1lc3NhZ2UsXG4gIFJ1bm5lckNsaWVudCxcbn0gZnJvbSAnQHJkZmMvcHJvdG8nXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IHtcbiAgQW55Q29udmVydG9yLFxuICBDb252ZXJ0b3IsXG4gIE5vQ29udmVydG9yLFxuICBTdHJlYW1Db252ZXJ0b3IsXG4gIFN0cmluZ0NvbnZlcnRvcixcbn0gZnJvbSAnLi9jb252ZXJ0b3InXG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJy4vcnVubmVyJ1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCdcblxuZXhwb3J0IHR5cGUgQW55ID1cbiAgfCB7XG4gICAgICBzdHJpbmc6IHN0cmluZ1xuICAgIH1cbiAgfCB7XG4gICAgICBzdHJlYW06IEFzeW5jR2VuZXJhdG9yPFVpbnQ4QXJyYXk+XG4gICAgfVxuICB8IHtcbiAgICAgIGJ1ZmZlcjogVWludDhBcnJheVxuICAgIH1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkZXIge1xuICByZWFkb25seSB1cmk6IHN0cmluZ1xuICBzdHJpbmdzKCk6IEFzeW5jSXRlcmFibGU8c3RyaW5nPlxuICBzdHJlYW1zKCk6IEFzeW5jSXRlcmFibGU8QXN5bmNHZW5lcmF0b3I8VWludDhBcnJheT4+XG4gIGJ1ZmZlcnMoKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PlxuICBhbnlzKCk6IEFzeW5jSXRlcmFibGU8QW55PlxuICBjYW5jZWwoKTogUHJvbWlzZTx2b2lkPlxufVxuXG50eXBlIFRvZG88VD4gPSB7XG4gIGl0ZW06IFRcbiAgb25Db21wbGV0ZTogKCkgPT4gdm9pZFxufVxuXG5jbGFzcyBNeUl0ZXI8VD4gaW1wbGVtZW50cyBBc3luY0l0ZXJhYmxlPFQ+IHtcbiAgcHJpdmF0ZSBjb252ZXJ0b3I6IENvbnZlcnRvcjxUPlxuICBwcml2YXRlIHF1ZXVlOiBUb2RvPFQgfCB1bmRlZmluZWQ+W10gPSBbXVxuICBwcml2YXRlIHJlc29sdmVOZXh0OiAoKHZhbHVlOiB1bmRlZmluZWQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGxcbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKGNvbnZlcnRvcjogQ29udmVydG9yPFQ+KSB7XG4gICAgdGhpcy5jb252ZXJ0b3IgPSBjb252ZXJ0b3JcbiAgfVxuXG4gIHB1c2goYnVmZmVyOiBVaW50OEFycmF5LCBvbkNvbXBsZXRlOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICBvbkNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnZlcnRvci5mcm9tKGJ1ZmZlcilcbiAgICB0aGlzLnF1ZXVlLnB1c2goeyBpdGVtLCBvbkNvbXBsZXRlIH0pXG4gICAgaWYgKHRoaXMucmVzb2x2ZU5leHQpIHtcbiAgICAgIHRoaXMucmVzb2x2ZU5leHQodW5kZWZpbmVkKVxuICAgICAgdGhpcy5yZXNvbHZlTmV4dCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBjbG9zZShvbkNvbXBsZXRlOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICBvbkNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZVxuICAgIHRoaXMucXVldWUucHVzaCh7IGl0ZW06IHVuZGVmaW5lZCwgb25Db21wbGV0ZSB9KVxuICAgIGlmICh0aGlzLnJlc29sdmVOZXh0KSB7XG4gICAgICB0aGlzLnJlc29sdmVOZXh0KHVuZGVmaW5lZClcbiAgICAgIHRoaXMucmVzb2x2ZU5leHQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcHVzaFN0cmVhbShjaHVua3M6IEFzeW5jSXRlcmFibGU8RGF0YUNodW5rPiwgb25Db21wbGV0ZTogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgb25Db21wbGV0ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IHRyYW5zZm9ybXMgRGF0YUNodW5rcyB0byBCdWZmZXJzXG4gICAgY29uc3Qgc3RyZWFtID0gKGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgICAgICB5aWVsZCBjaHVuay5kYXRhXG4gICAgICB9XG4gICAgfSkoY2h1bmtzKVxuXG4gICAgY29uc3QgaXRlbSA9IGF3YWl0IHRoaXMuY29udmVydG9yLmZyb21TdHJlYW0oc3RyZWFtKVxuICAgIHRoaXMucXVldWUucHVzaCh7IGl0ZW0sIG9uQ29tcGxldGUgfSlcbiAgICBpZiAodGhpcy5yZXNvbHZlTmV4dCkge1xuICAgICAgdGhpcy5yZXNvbHZlTmV4dCh1bmRlZmluZWQpXG4gICAgICB0aGlzLnJlc29sdmVOZXh0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHsgaXRlbSwgb25Db21wbGV0ZSB9ID0gdGhpcy5xdWV1ZS5zaGlmdCgpIVxuICAgICAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb25Db21wbGV0ZSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBpdGVtXG4gICAgICAgIC8vIE5vdGU6IGV4ZWN1dGlvbiBwYXVzZXMgYXQgYHlpZWxkYCB1bnRpbCB0aGUgY29uc3VtZXIgY2FsbHMgYC5uZXh0KClgIGFnYWluLlxuICAgICAgICAvLyBXZSBjYWxsIG9uQ29tcGxldGUgKmFmdGVyKiByZXN1bWluZywgc28gdGhlIHByb2R1Y2VyIGtub3dzIHRoZSBpdGVtIHdhcyBhY3R1YWxseSBjb25zdW1lZC5cbiAgICAgICAgb25Db21wbGV0ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiAodGhpcy5yZXNvbHZlTmV4dCA9IHJlc29sdmUpKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhZGVySW5zdGFuY2UgaW1wbGVtZW50cyBSZWFkZXIge1xuICBwcml2YXRlIGNsaWVudDogUnVubmVyQ2xpZW50XG4gIHJlYWRvbmx5IHVyaTogc3RyaW5nXG4gIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJcbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZnlPcmNoZXN0cmF0b3I6IFdyaXRhYmxlXG5cbiAgcHJpdmF0ZSBjb25zdW1lcnM6IE15SXRlcjx1bmtub3duPltdID0gW11cbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZVxuICBwcml2YXRlIGNhbmNlbGVkID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihcbiAgICB1cmk6IHN0cmluZyxcbiAgICBjbGllbnQ6IFJ1bm5lckNsaWVudCxcbiAgICBub3RpZnlPcmNoZXN0cmF0b3I6IFdyaXRhYmxlLFxuICAgIGxvZ2dlcjogTG9nZ2VyLFxuICApIHtcbiAgICB0aGlzLnVyaSA9IHVyaVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXJcbiAgICB0aGlzLm5vdGlmeU9yY2hlc3RyYXRvciA9IG5vdGlmeU9yY2hlc3RyYXRvclxuICB9XG5cbiAgYW55cygpOiBBc3luY0l0ZXJhYmxlPEFueT4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKEFueUNvbnZlcnRvcilcbiAgICB0aGlzLmNvbnN1bWVycy5wdXNoKGl0ZXIpXG4gICAgcmV0dXJuIGl0ZXJcbiAgfVxuXG4gIHN0cmluZ3MoKTogQXN5bmNJdGVyYWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpdGVyID0gbmV3IE15SXRlcihTdHJpbmdDb252ZXJ0b3IpXG4gICAgdGhpcy5jb25zdW1lcnMucHVzaChpdGVyKVxuICAgIHJldHVybiBpdGVyXG4gIH1cblxuICBidWZmZXJzKCk6IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGl0ZXIgPSBuZXcgTXlJdGVyKE5vQ29udmVydG9yKVxuICAgIHRoaXMuY29uc3VtZXJzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgc3RyZWFtcygpOiBBc3luY0l0ZXJhYmxlPEFzeW5jR2VuZXJhdG9yPFVpbnQ4QXJyYXk+PiB7XG4gICAgY29uc3QgaXRlciA9IG5ldyBNeUl0ZXIoU3RyZWFtQ29udmVydG9yKVxuICAgIHRoaXMuY29uc3VtZXJzLnB1c2goaXRlcilcbiAgICByZXR1cm4gaXRlclxuICB9XG5cbiAgaGFuZGxlTXNnKG1zZzogUmVjZWl2aW5nTWVzc2FnZSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGAke3RoaXMudXJpfSBoYW5kbGluZyBtZXNzYWdlYClcblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3Ioe1xuICAgICAgICBwcm9jZXNzZWQ6IHtcbiAgICAgICAgICBnbG9iYWxTZXF1ZW5jZU51bWJlcjogbXNnLmdsb2JhbFNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgIGNoYW5uZWw6IHRoaXMudXJpLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IGl0ZXIgb2YgdGhpcy5jb25zdW1lcnMpIHtcbiAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlcykgPT4gaXRlci5wdXNoKG1zZy5kYXRhLCAoKSA9PiByZXMobnVsbCkpKSlcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PlxuICAgICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3Ioe1xuICAgICAgICBwcm9jZXNzZWQ6IHtcbiAgICAgICAgICBnbG9iYWxTZXF1ZW5jZU51bWJlcjogbXNnLmdsb2JhbFNlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgIGNoYW5uZWw6IHRoaXMudXJpLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlZCA9IHRydWVcbiAgICBmb3IgKGNvbnN0IGl0ZXIgb2YgdGhpcy5jb25zdW1lcnMpIHtcbiAgICAgIGl0ZXIuY2xvc2UoKCkgPT4ge30pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2FuY2VsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZVxuICAgIHRoaXMuY2xvc2UoKVxuICAgIGF3YWl0IHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yKHtcbiAgICAgIGNsb3NlOiB7IGNoYW5uZWw6IHRoaXMudXJpIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8vIFRoZXJlIGlzIGEgc3RyZWFtIG1lc3NhZ2UgYXZhaWxhYmxlIGZvciB0aGlzIHJlYWRlclxuICBhc3luYyBoYW5kbGVTdHJlYW1pbmdNZXNzYWdlKHtcbiAgICBjaGFubmVsLFxuICAgIGdsb2JhbFNlcXVlbmNlTnVtYmVyLFxuICB9OiBSZWNlaXZpbmdTdHJlYW1NZXNzYWdlKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dGhpcy51cml9IGhhbmRsaW5nIHN0cmVhbWluZyBtZXNzYWdlYClcblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgYXdhaXQgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3Ioe1xuICAgICAgICBwcm9jZXNzZWQ6IHsgZ2xvYmFsU2VxdWVuY2VOdW1iZXIsIGNoYW5uZWwgfSxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjaHVua3MgPSB0aGlzLmNsaWVudC5yZWNlaXZlU3RyZWFtTWVzc2FnZSgpXG4gICAgY29uc3Qgd3JpdGVDb250cm9sTWVzc2FnZSA9IHByb21pc2lmeShjaHVua3Mud3JpdGUuYmluZChjaHVua3MpKVxuICAgIGNvbnN0IGNvbnN1bWVyc0NvbnN1bWVkID0gW11cblxuICAgIC8vIEFmdGVyIGVhY2ggY2h1bmsgaXMgaGFuZGxlZCBieSBhbGwgY29uc3VtZXIsIGVtaXQgYSBwcm9jZXNzZWQgbWVzc2FnZVxuICAgIGxldCBpZHggPSAwXG4gICAgY29uc3QgbWVzc2FnZUl0ZXJhdG9ycyA9IGZhbm91dFN0cmVhbShcbiAgICAgIGNodW5rcyxcbiAgICAgIHRoaXMuY29uc3VtZXJzLmxlbmd0aCxcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgd3JpdGVDb250cm9sTWVzc2FnZSh7IHN0cmVhbVNlcXVlbmNlTnVtYmVyOiBpZHgrKyB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGNvbnN1bWVyIG9mIHRoaXMuY29uc3VtZXJzKSB7XG4gICAgICBjb25zdW1lcnNDb25zdW1lZC5wdXNoKFxuICAgICAgICBuZXcgUHJvbWlzZSgocmVzKSA9PlxuICAgICAgICAgIGNvbnN1bWVyLnB1c2hTdHJlYW0obWVzc2FnZUl0ZXJhdG9ycy5wb3AoKSEsICgpID0+IHJlcyhudWxsKSksXG4gICAgICAgICksXG4gICAgICApXG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVDb250cm9sTWVzc2FnZSh7IGdsb2JhbFNlcXVlbmNlTnVtYmVyIH0pXG5cbiAgICBQcm9taXNlLmFsbChjb25zdW1lcnNDb25zdW1lZCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnV3JpdGluZyBwcm9jZXNzZWQgZm9yIHN0cmVhbWluZyBtZXNzYWdlJylcbiAgICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yKHsgcHJvY2Vzc2VkOiB7IGdsb2JhbFNlcXVlbmNlTnVtYmVyLCBjaGFubmVsIH0gfSlcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHRlZSBhIHN0cmVhbSBgbnVtQ29uc3VtZXJzYCB0aW1lc1xuICogV2hlbiBlYWNoIHRlZSdkIHN0cmVhbSBoYXMgaGFuZGxlZCBhIGNodW5rLCBjYWxsIHtAbGluayBvbkFsbEhhbmRsZWR9XG4gKi9cbmZ1bmN0aW9uIGZhbm91dFN0cmVhbTxUPihcbiAgc3RyZWFtOiBDbGllbnRSZWFkYWJsZVN0cmVhbTxUPixcbiAgbnVtQ29uc3VtZXJzOiBudW1iZXIsXG4gIG9uQWxsSGFuZGxlZDogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4pOiBBc3luY0l0ZXJhYmxlPFQ+W10ge1xuICB0eXBlIFdhaXRlciA9ICh2YWx1ZTogSXRlcmF0b3JSZXN1bHQ8VD4pID0+IHZvaWRcblxuICBsZXQgZW5kZWQgPSBmYWxzZVxuICBjb25zdCBidWZmZXI6IFRbXSA9IFtdXG4gIGNvbnN0IHBlbmRpbmc6IFdhaXRlcltdID0gW11cbiAgbGV0IGFjdGl2ZUNvbnN1bWVycyA9IG51bUNvbnN1bWVyc1xuXG4gIC8vIGNvbnN1bWVyIGJvb2trZWVwaW5nXG4gIGxldCBhd2FpdGluZ0FjayA9IDBcblxuICBmdW5jdGlvbiBwdXNoQ2h1bmsoY2h1bms6IFQpIHtcbiAgICBidWZmZXIucHVzaChjaHVuaylcbiAgICBmbHVzaCgpXG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCA+IDAgJiYgcGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGJ1ZmZlclswXSAvLyBrZWVwIHVudGlsIGFsbCBjb25zdW1lcnMgYWNrXG4gICAgICBjb25zdCB3YWl0ZXIgPSBwZW5kaW5nLnNoaWZ0KCkhXG4gICAgICB3YWl0ZXIoeyB2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlIH0pXG4gICAgICBhd2FpdGluZ0FjaysrXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kKCkge1xuICAgIGVuZGVkID0gdHJ1ZVxuICAgIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHdhaXRlciA9IHBlbmRpbmcuc2hpZnQoKSFcbiAgICAgIHdhaXRlcih7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICB9XG4gIH1cblxuICBzdHJlYW0ub24oJ2RhdGEnLCAoY2h1bms6IFQpID0+IHtcbiAgICBwdXNoQ2h1bmsoY2h1bmspXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgZW5kKClcbiAgfSlcblxuICBzdHJlYW0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHdhaXRlciA9IHBlbmRpbmcuc2hpZnQoKSFcbiAgICAgIHdhaXRlcih7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfSlcbiAgICB9XG4gICAgdGhyb3cgZXJyXG4gIH0pXG5cbiAgZnVuY3Rpb24gbWFrZUl0ZXJhYmxlKCk6IEFzeW5jSXRlcmFibGU8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4ge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gYnVmZmVyWzBdXG4gICAgICAgICAgICAgIGF3YWl0aW5nQWNrKytcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHZhbHVlOiBjaHVuaywgZG9uZTogZmFsc2UgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgIHBlbmRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jIHJldHVybigpIHtcbiAgICAgICAgICAgIGFjdGl2ZUNvbnN1bWVycy0tXG4gICAgICAgICAgICBpZiAoYWN0aXZlQ29uc3VtZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgIGVuZCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGFjaygpIHtcbiAgICBhd2FpdGluZ0Fjay0tXG4gICAgaWYgKGF3YWl0aW5nQWNrID09PSAwKSB7XG4gICAgICAvLyBhbGwgY29uc3VtZXJzIGRvbmUgd2l0aCB0aGUgY3VycmVudCBjaHVua1xuICAgICAgYnVmZmVyLnNoaWZ0KCkgLy8gZHJvcCBpdFxuICAgICAgYXdhaXQgb25BbGxIYW5kbGVkKClcbiAgICAgIGZsdXNoKCkgLy8gY29udGludWUgd2l0aCBuZXh0IGNodW5rXG4gICAgfVxuICB9XG5cbiAgLy8gd3JhcCBjb25zdW1lciBzbyB0aGV5ICptdXN0KiBjYWxsIGFjaygpIGFmdGVyIHByb2Nlc3NpbmdcbiAgZnVuY3Rpb24gd3JhcChpdGVyYWJsZTogQXN5bmNJdGVyYWJsZTxUPik6IEFzeW5jSXRlcmFibGU8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBhc3luYyAqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgeWllbGQgaXRlbVxuICAgICAgICAgIGF3YWl0IGFjaygpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmF3SXRlcmFibGVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogbnVtQ29uc3VtZXJzIH0sIG1ha2VJdGVyYWJsZSlcbiAgcmV0dXJuIHJhd0l0ZXJhYmxlcy5tYXAod3JhcClcbn1cbiJdfQ==
package/lib/runner.js CHANGED
@@ -162,4 +162,4 @@ export class Runner {
162
162
  }
163
163
  }
164
164
  }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2pELE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLFNBQVMsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBUSxLQUFLLEVBQUUsYUFBYSxFQUFVLE1BQU0sVUFBVSxDQUFBO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRy9FLE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUNwQyxxQ0FBcUMsRUFDckMsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUNULGNBQWMsRUFDZCxhQUFhLEVBQ2IsUUFBUSxFQUNSLFlBQVksRUFDWixVQUFVLENBQ1gsQ0FBQTtBQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FDMUIsK0JBQStCLEVBQy9CLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ1IsUUFBUSxFQUNSLFFBQVEsQ0FDVCxDQUFBO0FBV0QsTUFBTSxPQUFPLE1BQU07SUFDQSxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxNQUFNLENBQWM7SUFDcEIsa0JBQWtCLENBQVU7SUFDNUIsTUFBTSxDQUFRO0lBQ3ZCLE1BQU0sQ0FBUTtJQUNkLEtBQUssR0FBVyxFQUFFLENBQUE7SUFFVCxHQUFHLENBQVE7SUFFWCxVQUFVLEdBQW9CLEVBQUUsQ0FBQTtJQUNoQyxtQkFBbUIsR0FBdUIs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QzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwwQ0FBMEMsU0FBUyxDQUFDLE9BQU8sOEJBQThCLENBQzFGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2xvc2UsXG4gIEZyb21SdW5uZXIsXG4gIFByb2Nlc3NvcixcbiAgUnVubmVyQ2xpZW50LFxuICBUb1J1bm5lcixcbiAgTG9jYWxBY2ssXG4gIFJlY2VpdmluZ01lc3NhZ2UsXG4gIFJlY2VpdmluZ1N0cmVhbU1lc3NhZ2UsXG59IGZyb20gJ0ByZGZjL3Byb3RvJ1xuaW1wb3J0IHsgUmVhZGVyLCBSZWFkZXJJbnN0YW5jZSB9IGZyb20gJy4vcmVhZGVyJ1xuaW1wb3J0IHsgV3JpdGVyLCBXcml0ZXJJbnN0YW5jZSB9IGZyb20gJy4vd3JpdGVyJ1xuaW1wb3J0IHsgUHJvY2Vzc29yIGFzIFByb2MgfSBmcm9tICcuL3Byb2Nlc3NvcidcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcblxuaW1wb3J0IHsgUnBjVHJhbnNwb3J0IH0gZnJvbSAnLi9sb2dnZXInXG5pbXBvcnQgeyBDb250LCBlbXB0eSwgZXh0cmFjdFNoYXBlcywgU2hhcGVzIH0gZnJvbSAncmRmLWxlbnMnXG5pbXBvcnQgeyBOYW1lZE5vZGUsIFBhcnNlciB9IGZyb20gJ24zJ1xuaW1wb3J0IHsgY3JlYXRlTmFtZXNwYWNlLCBjcmVhdGVVcmlBbmRUZXJtTmFtZXNwYWNlLCBSREYgfSBmcm9tICdAdHJlZWNnL3R5cGVzJ1xuaW1wb3J0IHsgUXVhZCwgVGVybSB9IGZyb20gJ0ByZGZqcy90eXBlcydcblxuY29uc3QgUkRGTCA9IGNyZWF0ZVVyaUFuZFRlcm1OYW1lc3BhY2UoXG4gICdodHRwczovL3czaWQub3JnL3JkZi1sZW5zL29udG9sb2d5IycsXG4gICdDQkQnLFxuICAnUGF0aCcsXG4gICdQYXRoTGVucycsXG4gICdDb250ZXh0JyxcbiAgJ1R5cGVkRXh0cmFjdCcsXG4gICdFbnZWYXJpYWJsZScsXG4gICdlbnZLZXknLFxuICAnZW52RGVmYXVsdCcsXG4gICdkYXRhdHlwZScsXG4pXG5cbmNvbnN0IFJERkMgPSBjcmVhdGVOYW1lc3BhY2UoXG4gICdodHRwczovL3czaWQub3JnL3JkZi1jb25uZWN0IycsXG4gICh4KSA9PiB4LFxuICAnUmVhZGVyJyxcbiAgJ1dyaXRlcicsXG4pXG5cbmV4cG9ydCB0eXBlIFdyaXRhYmxlID0gKG1zZzogRnJvbVJ1bm5lcikgPT4gUHJvbWlzZTx1bmtub3duPlxuXG50eXBlIFByb2Nlc3NvckNvbmZpZyA9IHtcbiAgbG9jYXRpb246IHN0cmluZ1xuICBmaWxlOiBzdHJpbmdcbiAgY2xheno/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRnVsbFByb2M8Qz4gPSBDIGV4dGVuZHMgUHJvYzxpbmZlciBUPiA/IFQgJiBDIDogbmV2ZXJcbmV4cG9ydCBjbGFzcyBSdW5uZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWRlcnM6IHsgW3VyaTogc3RyaW5nXTogUmVhZGVySW5zdGFuY2UgfSA9IHt9XG4gIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVyczogeyBbdXJpOiBzdHJpbmddOiBXcml0ZXJJbnN0YW5jZSB9ID0ge31cbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IFJ1bm5lckNsaWVudFxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGVcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlclxuICBwcml2YXRlIHNoYXBlczogU2hhcGVzXG4gIHByaXZhdGUgcXVhZHM6IFF1YWRbXSA9IFtdXG5cbiAgcHJpdmF0ZSByZWFkb25seSB1cmk6IHN0cmluZ1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc29yczogUHJvYzx1bmtub3duPltdID0gW11cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzb3JUcmFuc2Zvcm1zOiBQcm9taXNlPHVua25vd24+W10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogUnVubmVyQ2xpZW50LFxuICAgIG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGUsXG4gICAgdXJpOiBzdHJpbmcsXG4gICAgbG9nZ2VyOiBMb2dnZXIsXG4gICkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3IgPSBub3RpZnlPcmNoZXN0cmF0b3JcbiAgICB0aGlzLnVyaSA9IHVyaVxuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyXG4gIH1cblxuICBhc3luYyBjcmVhdGVQcm9jZXNzb3I8UCBleHRlbmRzIFByb2M8dW5rbm93bj4+KFxuICAgIHByb2M6IFByb2Nlc3NvcixcbiAgKTogUHJvbWlzZTxGdWxsUHJvYzxQPj4ge1xuICAgIGNvbnN0IHByb2NMb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgICAgdHJhbnNwb3J0czogW1xuICAgICAgICBuZXcgUnBjVHJhbnNwb3J0KHtcbiAgICAgICAgICBlbnRpdGllczogW3Byb2MudXJpLCB0aGlzLnVyaV0sXG4gICAgICAgICAgc3RyZWFtOiB0aGlzLmNsaWVudC5sb2dTdHJlYW0oKCkgPT4ge30pLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIGNvbnN0IHR5ID0gdGhpcy5xdWFkc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC5zdWJqZWN0LnZhbHVlID09PSBwcm9jLnVyaSAmJiB4LnByZWRpY2F0ZS5lcXVhbHMoUkRGLnRlcm1zLnR5cGUpLFxuICAgICAgKVxuICAgICAgLm1hcCgoeCkgPT4geC5vYmplY3QudmFsdWUpXG5cbiAgICB0aGlzLmxvZ2dlci5pbmZvKGBQYXJzaW5nIHByb2Nlc3NvciAnJHtwcm9jLnVyaX0nIG9mIHR5cGUocykgWyR7dHkuam9pbignLCAnKX1dYClcbiAgICBjb25zdCBhcmdzID0gdGhpcy5zaGFwZXMubGVuc2VzW1JERkwuVHlwZWRFeHRyYWN0XS5leGVjdXRlKHtcbiAgICAgIGlkOiBuZXcgTmFtZWROb2RlKHByb2MudXJpKSxcbiAgICAgIHF1YWRzOiB0aGlzLnF1YWRzLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb25maWc6IFByb2Nlc3NvckNvbmZpZyA9IEpTT04ucGFyc2UocHJvYy5jb25maWcpXG4gICAgY29uc3QganNQcm9ncmFtID0gYXdhaXQgaW1wb3J0KGNvbmZpZy5maWxlKVxuICAgIGNvbnN0IGNsYXp6ID0ganNQcm9ncmFtW2NvbmZpZy5jbGF6eiB8fCAnZGVmYXVsdCddXG4gICAgY29uc3QgaW5zdGFuY2U6IFByb2M8dW5rbm93bj4gPSBuZXcgY2xhenooYXJncywgcHJvY0xvZ2dlcilcblxuICAgIHJldHVybiA8RnVsbFByb2M8UD4+aW5zdGFuY2VcbiAgfVxuXG4gIGFzeW5jIGFkZFByb2Nlc3NvcjxQIGV4dGVuZHMgUHJvYzx1bmtub3duPj4oXG4gICAgcHJvYzogUHJvY2Vzc29yLFxuICApOiBQcm9taXNlPEZ1bGxQcm9jPFA+PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCB0aGlzLmNyZWF0ZVByb2Nlc3NvcjxQPihwcm9jKVxuXG4gICAgYXdhaXQgaW5zdGFuY2UuaW5pdCgpXG5cbiAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbml0aWF0ZWQgcHJvY2Vzc29yICcke3Byb2MudXJpfSdgKVxuXG4gICAgdGhpcy5wcm9jZXNzb3JzLnB1c2goaW5zdGFuY2UpXG4gICAgdGhpcy5wcm9jZXNzb3JUcmFuc2Zvcm1zLnB1c2goaW5zdGFuY2UudHJhbnNmb3JtKCkpXG5cbiAgICBhd2FpdCB0aGlzLm5vdGlmeU9yY2hlc3RyYXRvcih7IGluaXRpYWxpemVkOiB7IHVyaTogcHJvYy51cmkgfSB9KVxuXG4gICAgcmV0dXJuIDxGdWxsUHJvYzxQPj5pbnN0YW5jZVxuICB9XG5cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29ycy5tYXAoKHgpID0+IHgucHJvZHVjZSgpKSlcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29yVHJhbnNmb3JtcylcbiAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1N0YXJ0IGZhaWxlZDogJyArIEpTT04uc3RyaW5naWZ5KGV4KSlcbiAgICB9XG4gIH1cblxuICBjcmVhdGVXcml0ZXIodXJpOiBUZXJtKTogV3JpdGVyIHtcbiAgICBjb25zdCBpZCA9IHVyaS52YWx1ZVxuXG4gICAgaWYgKHRoaXMud3JpdGVyc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMud3JpdGVyc1tpZF1cbiAgICB9XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IFdyaXRlckluc3RhbmNlKFxuICAgICAgaWQsXG4gICAgICB0aGlzLmNsaWVudCxcbiAgICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yLFxuICAgICAgdGhpcy51cmksXG4gICAgICB0aGlzLmxvZ2dlcixcbiAgICApXG4gICAgdGhpcy53cml0ZXJzW2lkXSA9IHdyaXRlclxuICAgIHJldHVybiB3cml0ZXJcbiAgfVxuXG4gIGNyZWF0ZVJlYWRlcih1cmk6IFRlcm0pOiBSZWFkZXIge1xuICAgIGNvbnN0IGlkcyA9IHVyaS52YWx1ZVxuXG4gICAgaWYgKHRoaXMucmVhZGVyc1tpZHNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYWRlcnNbaWRzXVxuICAgIH1cbiAgICBjb25zdCByZWFkZXIgPSBuZXcgUmVhZGVySW5zdGFuY2UoXG4gICAgICBpZHMsXG4gICAgICB0aGlzLmNsaWVudCxcbiAgICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yLFxuICAgICAgdGhpcy5sb2dnZXIsXG4gICAgKVxuICAgIHRoaXMucmVhZGVyc1tpZHNdID0gcmVhZGVyXG4gICAgcmV0dXJuIHJlYWRlclxuICB9XG5cbiAgYXN5bmMgaGFuZGxlT3JjaE1lc3NhZ2UobXNnOiBUb1J1bm5lcikge1xuICAgIGlmIChtc2cubXNnKSB7XG4gICAgICB0aGlzLmhhbmRsZU1zZyhtc2cubXNnKVxuICAgIH1cblxuICAgIGlmIChtc2cuc3RyZWFtTXNnKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVN0cmVhbU1zZyhtc2cuc3RyZWFtTXNnKVxuICAgIH1cblxuICAgIGlmIChtc2cuY2xvc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ2xvc2UobXNnLmNsb3NlKVxuICAgIH1cblxuICAgIGlmIChtc2cucGlwZWxpbmUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGlwZWxpbmUobXNnLnBpcGVsaW5lKVxuICAgIH1cblxuICAgIGlmIChtc2cucHJvY2Vzc2VkKSB7XG4gICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZChtc2cucHJvY2Vzc2VkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlQ2xvc2UoY2xvc2U6IENsb3NlKSB7XG4gICAgY29uc3QgdXJpID0gY2xvc2UuY2hhbm5lbFxuICAgIGNvbnN0IHIgPSB0aGlzLnJlYWRlcnNbdXJpXVxuXG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY2xvc2UoKVxuICAgICAgY2xvc2VkID0gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCB3ID0gdGhpcy53cml0ZXJzW3VyaV1cbiAgICBpZiAodykge1xuICAgICAgY2xvc2VkID0gdHJ1ZVxuICAgICAgYXdhaXQgdy5jbG9zZSh0cnVlKVxuICAgIH1cblxuICAgIGlmICghY2xvc2VkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkIGEgY2xvc2UgZXZlbnQgZm9yIGNoYW5uZWwgJHt1cml9LCBidXQgbmVpdGhlciByZWFkZXIgbm9yIHdyaXRlciBpcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQaXBlbGluZShwaXBlbGluZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1YWRzID0gbmV3IFBhcnNlcigpLnBhcnNlKHBpcGVsaW5lKVxuICAgICAgdGhpcy5zaGFwZXMgPSBleHRyYWN0U2hhcGVzKFxuICAgICAgICBxdWFkcyxcbiAgICAgICAge1xuICAgICAgICAgIFtSREZDLlJlYWRlcl06ICh4OiBDb250KSA9PiB0aGlzLmNyZWF0ZVJlYWRlcih4LmlkKSxcbiAgICAgICAgICBbUkRGQy5Xcml0ZXJdOiAoeDogQ29udCkgPT4gdGhpcy5jcmVhdGVXcml0ZXIoeC5pZCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBbUkRGQy5SZWFkZXJdOiBlbXB0eTxDb250PigpLFxuICAgICAgICAgIFtSREZDLldyaXRlcl06IGVtcHR5PENvbnQ+KCksXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICB0aGlzLnF1YWRzID0gcXVhZHNcbiAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1BpcGVsaW5lIGZhaWxlZDogJyArIEpTT04uc3RyaW5naWZ5KGV4KSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1zZyhtc2c6IFJlY2VpdmluZ01lc3NhZ2UpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSGFuZGxpbmcgZGF0YSBtc2cgZm9yICcgKyBtc2cuY2hhbm5lbClcbiAgICBjb25zdCByID0gdGhpcy5yZWFkZXJzW21zZy5jaGFubmVsXVxuXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuaGFuZGxlTXNnKG1zZylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCBtZXNzYWdlIGZvciBjaGFubmVsICR7bXNnLmNoYW5uZWx9LCBidXQgbm8gcmVhZGVyIHdhcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1Nc2coc3RyZWFtTXNnOiBSZWNlaXZpbmdTdHJlYW1NZXNzYWdlKSB7XG4gICAgY29uc3QgciA9IHRoaXMucmVhZGVyc1tzdHJlYW1Nc2cuY2hhbm5lbF1cblxuICAgIGlmIChyKSB7XG4gICAgICBhd2FpdCByLmhhbmRsZVN0cmVhbWluZ01lc3NhZ2Uoc3RyZWFtTXNnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkIHN0cmVhbSBtZXNzYWdlIGZvciBjaGFubmVsICR7c3RyZWFtTXNnLmNoYW5uZWx9LCBidXQgbm8gcmVhZGVyIHdhcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcm9jZXNzZWQocHJvY2Vzc2VkOiBMb2NhbEFjaykge1xuICAgIGNvbnN0IHdyaXRlciA9IHRoaXMud3JpdGVyc1twcm9jZXNzZWQuY2hhbm5lbF1cbiAgICBpZiAod3JpdGVyKSB7XG4gICAgICB3cml0ZXIuaGFuZGxlZCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgUmVjZWl2ZWQgcHJvY2Vzc2VkIG1lc3NhZ2UgZm9yIGNoYW5uZWwgJHtwcm9jZXNzZWQuY2hhbm5lbH0sIGJ1dCBubyB3cml0ZXIgd2FzIHByZXNlbnQuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2pELE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLFNBQVMsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBUSxLQUFLLEVBQUUsYUFBYSxFQUFVLE1BQU0sVUFBVSxDQUFBO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRy9FLE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUNwQyxxQ0FBcUMsRUFDckMsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUNULGNBQWMsRUFDZCxhQUFhLEVBQ2IsUUFBUSxFQUNSLFlBQVksRUFDWixVQUFVLENBQ1gsQ0FBQTtBQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FDMUIsK0JBQStCLEVBQy9CLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ1IsUUFBUSxFQUNSLFFBQVEsQ0FDVCxDQUFBO0FBV0QsTUFBTSxPQUFPLE1BQU07SUFDQSxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxNQUFNLENBQWM7SUFDcEIsa0JBQWtCLENBQVU7SUFDNUIsTUFBTSxDQUFRO0lBQ3ZCLE1BQU0sQ0FBUTtJQUNkLEtBQUssR0FBVyxFQUFFLENBQUE7SUFFVCxHQUFHLENBQVE7SUFFWCxVQUFVLEdBQW9CLEVBQUUsQ0FBQTtJQUNoQyxtQkFBbUIsR0FBdUIs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QzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwwQ0FBMEMsU0FBUyxDQUFDLE9BQU8sOEJBQThCLENBQzFGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2xvc2UsXG4gIEZyb21SdW5uZXIsXG4gIFByb2Nlc3NvcixcbiAgUnVubmVyQ2xpZW50LFxuICBUb1J1bm5lcixcbiAgTG9jYWxBY2ssXG4gIFJlY2VpdmluZ01lc3NhZ2UsXG4gIFJlY2VpdmluZ1N0cmVhbU1lc3NhZ2UsXG59IGZyb20gJ0ByZGZjL3Byb3RvJ1xuaW1wb3J0IHsgUmVhZGVyLCBSZWFkZXJJbnN0YW5jZSB9IGZyb20gJy4vcmVhZGVyJ1xuaW1wb3J0IHsgV3JpdGVyLCBXcml0ZXJJbnN0YW5jZSB9IGZyb20gJy4vd3JpdGVyJ1xuaW1wb3J0IHsgUHJvY2Vzc29yIGFzIFByb2MgfSBmcm9tICcuL3Byb2Nlc3NvcidcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcblxuaW1wb3J0IHsgUnBjVHJhbnNwb3J0IH0gZnJvbSAnLi9sb2dnZXInXG5pbXBvcnQgeyBDb250LCBlbXB0eSwgZXh0cmFjdFNoYXBlcywgU2hhcGVzIH0gZnJvbSAncmRmLWxlbnMnXG5pbXBvcnQgeyBOYW1lZE5vZGUsIFBhcnNlciB9IGZyb20gJ24zJ1xuaW1wb3J0IHsgY3JlYXRlTmFtZXNwYWNlLCBjcmVhdGVVcmlBbmRUZXJtTmFtZXNwYWNlLCBSREYgfSBmcm9tICdAdHJlZWNnL3R5cGVzJ1xuaW1wb3J0IHsgUXVhZCwgVGVybSB9IGZyb20gJ0ByZGZqcy90eXBlcydcblxuY29uc3QgUkRGTCA9IGNyZWF0ZVVyaUFuZFRlcm1OYW1lc3BhY2UoXG4gICdodHRwczovL3czaWQub3JnL3JkZi1sZW5zL29udG9sb2d5IycsXG4gICdDQkQnLFxuICAnUGF0aCcsXG4gICdQYXRoTGVucycsXG4gICdDb250ZXh0JyxcbiAgJ1R5cGVkRXh0cmFjdCcsXG4gICdFbnZWYXJpYWJsZScsXG4gICdlbnZLZXknLFxuICAnZW52RGVmYXVsdCcsXG4gICdkYXRhdHlwZScsXG4pXG5cbmNvbnN0IFJERkMgPSBjcmVhdGVOYW1lc3BhY2UoXG4gICdodHRwczovL3czaWQub3JnL3JkZi1jb25uZWN0IycsXG4gICh4KSA9PiB4LFxuICAnUmVhZGVyJyxcbiAgJ1dyaXRlcicsXG4pXG5cbmV4cG9ydCB0eXBlIFdyaXRhYmxlID0gKG1zZzogRnJvbVJ1bm5lcikgPT4gUHJvbWlzZTx1bmtub3duPlxuXG50eXBlIFByb2Nlc3NvckNvbmZpZyA9IHtcbiAgbG9jYXRpb246IHN0cmluZ1xuICBmaWxlOiBzdHJpbmdcbiAgY2xheno/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRnVsbFByb2M8Qz4gPSBDIGV4dGVuZHMgUHJvYzxpbmZlciBUPiA/IFQgJiBDIDogbmV2ZXJcbmV4cG9ydCBjbGFzcyBSdW5uZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWRlcnM6IHsgW3VyaTogc3RyaW5nXTogUmVhZGVySW5zdGFuY2UgfSA9IHt9XG4gIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVyczogeyBbdXJpOiBzdHJpbmddOiBXcml0ZXJJbnN0YW5jZSB9ID0ge31cbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IFJ1bm5lckNsaWVudFxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGVcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlclxuICBwcml2YXRlIHNoYXBlczogU2hhcGVzXG4gIHByaXZhdGUgcXVhZHM6IFF1YWRbXSA9IFtdXG5cbiAgcHJpdmF0ZSByZWFkb25seSB1cmk6IHN0cmluZ1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc29yczogUHJvYzx1bmtub3duPltdID0gW11cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzb3JUcmFuc2Zvcm1zOiBQcm9taXNlPHVua25vd24+W10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogUnVubmVyQ2xpZW50LFxuICAgIG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGUsXG4gICAgdXJpOiBzdHJpbmcsXG4gICAgbG9nZ2VyOiBMb2dnZXIsXG4gICkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3IgPSBub3RpZnlPcmNoZXN0cmF0b3JcbiAgICB0aGlzLnVyaSA9IHVyaVxuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyXG4gIH1cblxuICBhc3luYyBjcmVhdGVQcm9jZXNzb3I8UCBleHRlbmRzIFByb2M8dW5rbm93bj4+KFxuICAgIHByb2M6IFByb2Nlc3NvcixcbiAgKTogUHJvbWlzZTxGdWxsUHJvYzxQPj4ge1xuICAgIGNvbnN0IHByb2NMb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgICAgdHJhbnNwb3J0czogW1xuICAgICAgICBuZXcgUnBjVHJhbnNwb3J0KHtcbiAgICAgICAgICBlbnRpdGllczogW3Byb2MudXJpLCB0aGlzLnVyaV0sXG4gICAgICAgICAgc3RyZWFtOiB0aGlzLmNsaWVudC5sb2dTdHJlYW0oKCkgPT4ge30pLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIGNvbnN0IHR5ID0gdGhpcy5xdWFkc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC5zdWJqZWN0LnZhbHVlID09PSBwcm9jLnVyaSAmJiB4LnByZWRpY2F0ZS5lcXVhbHMoUkRGLnRlcm1zLnR5cGUpLFxuICAgICAgKVxuICAgICAgLm1hcCgoeCkgPT4geC5vYmplY3QudmFsdWUpXG5cbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYFBhcnNpbmcgcHJvY2Vzc29yICcke3Byb2MudXJpfScgb2YgdHlwZShzKSBbJHt0eS5qb2luKCcsICcpfV1gLFxuICAgIClcbiAgICBjb25zdCBhcmdzID0gdGhpcy5zaGFwZXMubGVuc2VzW1JERkwuVHlwZWRFeHRyYWN0XS5leGVjdXRlKHtcbiAgICAgIGlkOiBuZXcgTmFtZWROb2RlKHByb2MudXJpKSxcbiAgICAgIHF1YWRzOiB0aGlzLnF1YWRzLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb25maWc6IFByb2Nlc3NvckNvbmZpZyA9IEpTT04ucGFyc2UocHJvYy5jb25maWcpXG4gICAgY29uc3QganNQcm9ncmFtID0gYXdhaXQgaW1wb3J0KGNvbmZpZy5maWxlKVxuICAgIGNvbnN0IGNsYXp6ID0ganNQcm9ncmFtW2NvbmZpZy5jbGF6eiB8fCAnZGVmYXVsdCddXG4gICAgY29uc3QgaW5zdGFuY2U6IFByb2M8dW5rbm93bj4gPSBuZXcgY2xhenooYXJncywgcHJvY0xvZ2dlcilcblxuICAgIHJldHVybiA8RnVsbFByb2M8UD4+aW5zdGFuY2VcbiAgfVxuXG4gIGFzeW5jIGFkZFByb2Nlc3NvcjxQIGV4dGVuZHMgUHJvYzx1bmtub3duPj4oXG4gICAgcHJvYzogUHJvY2Vzc29yLFxuICApOiBQcm9taXNlPEZ1bGxQcm9jPFA+PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCB0aGlzLmNyZWF0ZVByb2Nlc3NvcjxQPihwcm9jKVxuXG4gICAgYXdhaXQgaW5zdGFuY2UuaW5pdCgpXG5cbiAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbml0aWF0ZWQgcHJvY2Vzc29yICcke3Byb2MudXJpfSdgKVxuXG4gICAgdGhpcy5wcm9jZXNzb3JzLnB1c2goaW5zdGFuY2UpXG4gICAgdGhpcy5wcm9jZXNzb3JUcmFuc2Zvcm1zLnB1c2goaW5zdGFuY2UudHJhbnNmb3JtKCkpXG5cbiAgICBhd2FpdCB0aGlzLm5vdGlmeU9yY2hlc3RyYXRvcih7IGluaXRpYWxpemVkOiB7IHVyaTogcHJvYy51cmkgfSB9KVxuXG4gICAgcmV0dXJuIDxGdWxsUHJvYzxQPj5pbnN0YW5jZVxuICB9XG5cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29ycy5tYXAoKHgpID0+IHgucHJvZHVjZSgpKSlcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29yVHJhbnNmb3JtcylcbiAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1N0YXJ0IGZhaWxlZDogJyArIEpTT04uc3RyaW5naWZ5KGV4KSlcbiAgICB9XG4gIH1cblxuICBjcmVhdGVXcml0ZXIodXJpOiBUZXJtKTogV3JpdGVyIHtcbiAgICBjb25zdCBpZCA9IHVyaS52YWx1ZVxuXG4gICAgaWYgKHRoaXMud3JpdGVyc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMud3JpdGVyc1tpZF1cbiAgICB9XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IFdyaXRlckluc3RhbmNlKFxuICAgICAgaWQsXG4gICAgICB0aGlzLmNsaWVudCxcbiAgICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yLFxuICAgICAgdGhpcy51cmksXG4gICAgICB0aGlzLmxvZ2dlcixcbiAgICApXG4gICAgdGhpcy53cml0ZXJzW2lkXSA9IHdyaXRlclxuICAgIHJldHVybiB3cml0ZXJcbiAgfVxuXG4gIGNyZWF0ZVJlYWRlcih1cmk6IFRlcm0pOiBSZWFkZXIge1xuICAgIGNvbnN0IGlkcyA9IHVyaS52YWx1ZVxuXG4gICAgaWYgKHRoaXMucmVhZGVyc1tpZHNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYWRlcnNbaWRzXVxuICAgIH1cbiAgICBjb25zdCByZWFkZXIgPSBuZXcgUmVhZGVySW5zdGFuY2UoXG4gICAgICBpZHMsXG4gICAgICB0aGlzLmNsaWVudCxcbiAgICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yLFxuICAgICAgdGhpcy5sb2dnZXIsXG4gICAgKVxuICAgIHRoaXMucmVhZGVyc1tpZHNdID0gcmVhZGVyXG4gICAgcmV0dXJuIHJlYWRlclxuICB9XG5cbiAgYXN5bmMgaGFuZGxlT3JjaE1lc3NhZ2UobXNnOiBUb1J1bm5lcikge1xuICAgIGlmIChtc2cubXNnKSB7XG4gICAgICB0aGlzLmhhbmRsZU1zZyhtc2cubXNnKVxuICAgIH1cblxuICAgIGlmIChtc2cuc3RyZWFtTXNnKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVN0cmVhbU1zZyhtc2cuc3RyZWFtTXNnKVxuICAgIH1cblxuICAgIGlmIChtc2cuY2xvc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ2xvc2UobXNnLmNsb3NlKVxuICAgIH1cblxuICAgIGlmIChtc2cucGlwZWxpbmUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGlwZWxpbmUobXNnLnBpcGVsaW5lKVxuICAgIH1cblxuICAgIGlmIChtc2cucHJvY2Vzc2VkKSB7XG4gICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZChtc2cucHJvY2Vzc2VkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlQ2xvc2UoY2xvc2U6IENsb3NlKSB7XG4gICAgY29uc3QgdXJpID0gY2xvc2UuY2hhbm5lbFxuICAgIGNvbnN0IHIgPSB0aGlzLnJlYWRlcnNbdXJpXVxuXG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY2xvc2UoKVxuICAgICAgY2xvc2VkID0gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCB3ID0gdGhpcy53cml0ZXJzW3VyaV1cbiAgICBpZiAodykge1xuICAgICAgY2xvc2VkID0gdHJ1ZVxuICAgICAgYXdhaXQgdy5jbG9zZSh0cnVlKVxuICAgIH1cblxuICAgIGlmICghY2xvc2VkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkIGEgY2xvc2UgZXZlbnQgZm9yIGNoYW5uZWwgJHt1cml9LCBidXQgbmVpdGhlciByZWFkZXIgbm9yIHdyaXRlciBpcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQaXBlbGluZShwaXBlbGluZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1YWRzID0gbmV3IFBhcnNlcigpLnBhcnNlKHBpcGVsaW5lKVxuICAgICAgdGhpcy5zaGFwZXMgPSBleHRyYWN0U2hhcGVzKFxuICAgICAgICBxdWFkcyxcbiAgICAgICAge1xuICAgICAgICAgIFtSREZDLlJlYWRlcl06ICh4OiBDb250KSA9PiB0aGlzLmNyZWF0ZVJlYWRlcih4LmlkKSxcbiAgICAgICAgICBbUkRGQy5Xcml0ZXJdOiAoeDogQ29udCkgPT4gdGhpcy5jcmVhdGVXcml0ZXIoeC5pZCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBbUkRGQy5SZWFkZXJdOiBlbXB0eTxDb250PigpLFxuICAgICAgICAgIFtSREZDLldyaXRlcl06IGVtcHR5PENvbnQ+KCksXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICB0aGlzLnF1YWRzID0gcXVhZHNcbiAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1BpcGVsaW5lIGZhaWxlZDogJyArIEpTT04uc3RyaW5naWZ5KGV4KSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1zZyhtc2c6IFJlY2VpdmluZ01lc3NhZ2UpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSGFuZGxpbmcgZGF0YSBtc2cgZm9yICcgKyBtc2cuY2hhbm5lbClcbiAgICBjb25zdCByID0gdGhpcy5yZWFkZXJzW21zZy5jaGFubmVsXVxuXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuaGFuZGxlTXNnKG1zZylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCBtZXNzYWdlIGZvciBjaGFubmVsICR7bXNnLmNoYW5uZWx9LCBidXQgbm8gcmVhZGVyIHdhcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1Nc2coc3RyZWFtTXNnOiBSZWNlaXZpbmdTdHJlYW1NZXNzYWdlKSB7XG4gICAgY29uc3QgciA9IHRoaXMucmVhZGVyc1tzdHJlYW1Nc2cuY2hhbm5lbF1cblxuICAgIGlmIChyKSB7XG4gICAgICBhd2FpdCByLmhhbmRsZVN0cmVhbWluZ01lc3NhZ2Uoc3RyZWFtTXNnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkIHN0cmVhbSBtZXNzYWdlIGZvciBjaGFubmVsICR7c3RyZWFtTXNnLmNoYW5uZWx9LCBidXQgbm8gcmVhZGVyIHdhcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcm9jZXNzZWQocHJvY2Vzc2VkOiBMb2NhbEFjaykge1xuICAgIGNvbnN0IHdyaXRlciA9IHRoaXMud3JpdGVyc1twcm9jZXNzZWQuY2hhbm5lbF1cbiAgICBpZiAod3JpdGVyKSB7XG4gICAgICB3cml0ZXIuaGFuZGxlZCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgUmVjZWl2ZWQgcHJvY2Vzc2VkIG1lc3NhZ2UgZm9yIGNoYW5uZWwgJHtwcm9jZXNzZWQuY2hhbm5lbH0sIGJ1dCBubyB3cml0ZXIgd2FzIHByZXNlbnQuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -67,4 +67,4 @@ export class MockClientDuplexStream extends Duplex {
67
67
  return new Promise((res) => this.registerOnce(matcher, res));
68
68
  }
69
69
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RVdGlscy9kdXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQWUvQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7QUFDYixNQUFNLE9BQU8sc0JBQ1gsU0FBUSxNQUFNO0lBR04sWUFBWSxHQUEwQyxFQUFFLENBQUE7SUFDeEQsZ0JBQWdCLEdBQTBDLEVBQUUsQ0FBQTtJQUVwRCxFQUFFLENBQVE7SUFFMUIsSUFBSSxDQUErQjtJQUNuQztRQUNFLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxNQUFNLEtBQVUsQ0FBQztJQUNqQixPQUFPO1FBQ0wsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUdELE1BQU0sQ0FDSixLQUFVLEVBQ1YsU0FBeUIsRUFDekIsUUFBd0M7UUFFeEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBRW5CLEtBQUssTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3hCLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNkLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFpQyxFQUFFLENBQUE7UUFDaEQsS0FBSyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN4QixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDZCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUE7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFFRCxRQUFRLEVBQUUsQ0FBQTtJQUNaLENBQUM7SUFHRCxLQUFLO0lBRUwsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWE7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyQixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxRQUFRLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxZQUFZLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELFFBQVEsQ0FBSSxPQUF3QjtRQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cGxleCB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB0eXBlIHtcbiAgQ2xpZW50RHVwbGV4U3RyZWFtLFxuICBJbnRlcmNlcHRpbmdDYWxsLFxufSBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgQXV0aENvbnRleHQgfSBmcm9tICdAZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9hdXRoLWNvbnRleHQnXG5cbnR5cGUgTWF0Y2hlcjxSZXEsIFQ+ID0gKHJlcTogUmVxKSA9PiBUIHwgdW5kZWZpbmVkXG50eXBlIEhhbmRsZXI8UmVxLCBSZXM+ID0gKHJlcTogUmVxLCBzZW5kOiAocmVzOiBSZXMpID0+IHZvaWQpID0+IHZvaWRcblxudHlwZSBNYXRjaE9iamVjdDxSZXEsIFJlcywgVD4gPSB7XG4gIG1hdGNoZXI6IE1hdGNoZXI8UmVxLCBUPlxuICBoYW5kbGVyOiBIYW5kbGVyPFQsIFJlcz5cbn1cblxubGV0IGNvdW50ID0gMFxuZXhwb3J0IGNsYXNzIE1vY2tDbGllbnREdXBsZXhTdHJlYW08UmVxLCBSZXM+XG4gIGV4dGVuZHMgRHVwbGV4XG4gIGltcGxlbWVudHMgQ2xpZW50RHVwbGV4U3RyZWFtPFJlcSwgUmVzPlxue1xuICBwcml2YXRlIGNhcGFiaWxpdGllczogQXJyYXk8TWF0Y2hPYmplY3Q8UmVxLCBSZXMsIHVua25vd24+PiA9IFtdXG4gIHByaXZhdGUgb25jZUNhcGFiaWxpdGllczogQXJyYXk8TWF0Y2hPYmplY3Q8UmVxLCBSZXMsIHVua25vd24+PiA9IFtdXG5cbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXJcblxuICBjYWxsPzogSW50ZXJjZXB0aW5nQ2FsbCB8IHVuZGVmaW5lZFxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7IG9iamVjdE1vZGU6IHRydWUgfSlcbiAgICB0aGlzLmlkID0gY291bnQrK1xuICB9XG5cbiAgZ2V0QXV0aENvbnRleHQoKTogQXV0aENvbnRleHQgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gLS0tLSBTdXJmYWNlQ2FsbCBzdHVicyAtLS0tXG4gIGNhbmNlbCgpOiB2b2lkIHt9XG4gIGdldFBlZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ21vY2stcGVlcidcbiAgfVxuXG4gIC8vIC0tLS0gT2JqZWN0V3JpdGFibGU8UmVxPiAtLS0tXG4gIF93cml0ZShcbiAgICBjaHVuazogUmVxLFxuICAgIF9lbmNvZGluZzogQnVmZmVyRW5jb2RpbmcsXG4gICAgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZVxuICAgIC8vIGNoZWNrIHJlZ2lzdGVyZWQgY2FwYWJpbGl0aWVzXG4gICAgZm9yIChjb25zdCB7IG1hdGNoZXIsIGhhbmRsZXIgfSBvZiB0aGlzLmNhcGFiaWxpdGllcykge1xuICAgICAgY29uc3QgbyA9IG1hdGNoZXIoY2h1bmspXG4gICAgICBpZiAobyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhhbmRsZWQgPSB0cnVlXG4gICAgICAgIGhhbmRsZXIobywgKHJlcykgPT4gdGhpcy5zZW5kKHJlcykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3T25jZTogdHlwZW9mIHRoaXMub25jZUNhcGFiaWxpdGllcyA9IFtdXG4gICAgZm9yIChjb25zdCB7IG1hdGNoZXIsIGhhbmRsZXIgfSBvZiB0aGlzLm9uY2VDYXBhYmlsaXRpZXMpIHtcbiAgICAgIGNvbnN0IG8gPSBtYXRjaGVyKGNodW5rKVxuICAgICAgaWYgKG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYW5kbGVkID0gdHJ1ZVxuICAgICAgICBoYW5kbGVyKG8sIChyZXMpID0+IHRoaXMuc2VuZChyZXMpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T25jZS5wdXNoKHsgbWF0Y2hlciwgaGFuZGxlciB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25jZUNhcGFiaWxpdGllcyA9IG5ld09uY2VcbiAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCEnLCBPYmplY3Qua2V5cyhjaHVuayBhcyBvYmplY3QpKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8vIC0tLS0gT2JqZWN0UmVhZGFibGU8UmVzPiAtLS0tXG4gIF9yZWFkKCk6IHZvaWQge1xuICAgIC8vIG5vLW9wOiB3ZSBwdXNoIG1hbnVhbGx5IHdpdGggc2VuZCgpXG4gIH1cblxuICAvLyAtLS0tIGdSUEMtc3R5bGUgaGVscGVycyAtLS0tXG4gIHNlcmlhbGl6ZSh2YWx1ZTogUmVxKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG5cbiAgZGVzZXJpYWxpemUoY2h1bms6IEJ1ZmZlcik6IFJlcyB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY2h1bmsudG9TdHJpbmcoKSlcbiAgfVxuXG4gIHNlbmQocmVzcG9uc2U6IFJlcyk6IHZvaWQge1xuICAgIHRoaXMucHVzaChyZXNwb25zZSlcbiAgfVxuXG4gIGVuZCgpOiB0aGlzIHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gLS0tLSBDYXBhYmlsaXR5IHJlZ2lzdHJhdGlvbiAtLS0tXG4gIHJlZ2lzdGVyPFQ+KG1hdGNoZXI6IE1hdGNoZXI8UmVxLCBUPiwgaGFuZGxlcjogSGFuZGxlcjxULCBSZXM+KTogdm9pZCB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMucHVzaCh7IG1hdGNoZXIsIGhhbmRsZXIgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyT25jZTxUPihtYXRjaGVyOiBNYXRjaGVyPFJlcSwgVD4sIGhhbmRsZXI6IEhhbmRsZXI8VCwgUmVzPik6IHZvaWQge1xuICAgIHRoaXMub25jZUNhcGFiaWxpdGllcy5wdXNoKHsgbWF0Y2hlciwgaGFuZGxlciB9KVxuICB9XG5cbiAgYXdhaXRNc2c8VD4obWF0Y2hlcjogTWF0Y2hlcjxSZXEsIFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMpID0+IHRoaXMucmVnaXN0ZXJPbmNlKG1hdGNoZXIsIHJlcykpXG4gIH1cbn1cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RVdGlscy9kdXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQVkvQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7QUFDYixNQUFNLE9BQU8sc0JBQ1gsU0FBUSxNQUFNO0lBR04sWUFBWSxHQUEwQyxFQUFFLENBQUE7SUFDeEQsZ0JBQWdCLEdBQTBDLEVBQUUsQ0FBQTtJQUVwRCxFQUFFLENBQVE7SUFFMUIsSUFBSSxDQUErQjtJQUNuQztRQUNFLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxNQUFNLEtBQVUsQ0FBQztJQUNqQixPQUFPO1FBQ0wsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUdELE1BQU0sQ0FDSixLQUFVLEVBQ1YsU0FBeUIsRUFDekIsUUFBd0M7UUFFeEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBRW5CLEtBQUssTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3hCLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNkLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFpQyxFQUFFLENBQUE7UUFDaEQsS0FBSyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN4QixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDZCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUE7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFFRCxRQUFRLEVBQUUsQ0FBQTtJQUNaLENBQUM7SUFHRCxLQUFLO0lBRUwsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWE7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyQixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxRQUFRLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxZQUFZLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELFFBQVEsQ0FBSSxPQUF3QjtRQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cGxleCB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHVwbGV4U3RyZWFtLCBJbnRlcmNlcHRpbmdDYWxsIH0gZnJvbSAnQGdycGMvZ3JwYy1qcydcbmltcG9ydCB7IEF1dGhDb250ZXh0IH0gZnJvbSAnQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvYXV0aC1jb250ZXh0J1xuXG50eXBlIE1hdGNoZXI8UmVxLCBUPiA9IChyZXE6IFJlcSkgPT4gVCB8IHVuZGVmaW5lZFxudHlwZSBIYW5kbGVyPFJlcSwgUmVzPiA9IChyZXE6IFJlcSwgc2VuZDogKHJlczogUmVzKSA9PiB2b2lkKSA9PiB2b2lkXG5cbnR5cGUgTWF0Y2hPYmplY3Q8UmVxLCBSZXMsIFQ+ID0ge1xuICBtYXRjaGVyOiBNYXRjaGVyPFJlcSwgVD5cbiAgaGFuZGxlcjogSGFuZGxlcjxULCBSZXM+XG59XG5cbmxldCBjb3VudCA9IDBcbmV4cG9ydCBjbGFzcyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFJlcSwgUmVzPlxuICBleHRlbmRzIER1cGxleFxuICBpbXBsZW1lbnRzIENsaWVudER1cGxleFN0cmVhbTxSZXEsIFJlcz5cbntcbiAgcHJpdmF0ZSBjYXBhYmlsaXRpZXM6IEFycmF5PE1hdGNoT2JqZWN0PFJlcSwgUmVzLCB1bmtub3duPj4gPSBbXVxuICBwcml2YXRlIG9uY2VDYXBhYmlsaXRpZXM6IEFycmF5PE1hdGNoT2JqZWN0PFJlcSwgUmVzLCB1bmtub3duPj4gPSBbXVxuXG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyXG5cbiAgY2FsbD86IEludGVyY2VwdGluZ0NhbGwgfCB1bmRlZmluZWRcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoeyBvYmplY3RNb2RlOiB0cnVlIH0pXG4gICAgdGhpcy5pZCA9IGNvdW50KytcbiAgfVxuXG4gIGdldEF1dGhDb250ZXh0KCk6IEF1dGhDb250ZXh0IHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIC0tLS0gU3VyZmFjZUNhbGwgc3R1YnMgLS0tLVxuICBjYW5jZWwoKTogdm9pZCB7fVxuICBnZXRQZWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdtb2NrLXBlZXInXG4gIH1cblxuICAvLyAtLS0tIE9iamVjdFdyaXRhYmxlPFJlcT4gLS0tLVxuICBfd3JpdGUoXG4gICAgY2h1bms6IFJlcSxcbiAgICBfZW5jb2Rpbmc6IEJ1ZmZlckVuY29kaW5nLFxuICAgIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGxldCBoYW5kbGVkID0gZmFsc2VcbiAgICAvLyBjaGVjayByZWdpc3RlcmVkIGNhcGFiaWxpdGllc1xuICAgIGZvciAoY29uc3QgeyBtYXRjaGVyLCBoYW5kbGVyIH0gb2YgdGhpcy5jYXBhYmlsaXRpZXMpIHtcbiAgICAgIGNvbnN0IG8gPSBtYXRjaGVyKGNodW5rKVxuICAgICAgaWYgKG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYW5kbGVkID0gdHJ1ZVxuICAgICAgICBoYW5kbGVyKG8sIChyZXMpID0+IHRoaXMuc2VuZChyZXMpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld09uY2U6IHR5cGVvZiB0aGlzLm9uY2VDYXBhYmlsaXRpZXMgPSBbXVxuICAgIGZvciAoY29uc3QgeyBtYXRjaGVyLCBoYW5kbGVyIH0gb2YgdGhpcy5vbmNlQ2FwYWJpbGl0aWVzKSB7XG4gICAgICBjb25zdCBvID0gbWF0Y2hlcihjaHVuaylcbiAgICAgIGlmIChvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGFuZGxlZCA9IHRydWVcbiAgICAgICAgaGFuZGxlcihvLCAocmVzKSA9PiB0aGlzLnNlbmQocmVzKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld09uY2UucHVzaCh7IG1hdGNoZXIsIGhhbmRsZXIgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9uY2VDYXBhYmlsaXRpZXMgPSBuZXdPbmNlXG4gICAgaWYgKCFoYW5kbGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQhJywgT2JqZWN0LmtleXMoY2h1bmsgYXMgb2JqZWN0KSlcbiAgICB9XG5cbiAgICBjYWxsYmFjaygpXG4gIH1cblxuICAvLyAtLS0tIE9iamVjdFJlYWRhYmxlPFJlcz4gLS0tLVxuICBfcmVhZCgpOiB2b2lkIHtcbiAgICAvLyBuby1vcDogd2UgcHVzaCBtYW51YWxseSB3aXRoIHNlbmQoKVxuICB9XG5cbiAgLy8gLS0tLSBnUlBDLXN0eWxlIGhlbHBlcnMgLS0tLVxuICBzZXJpYWxpemUodmFsdWU6IFJlcSk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcbiAgfVxuXG4gIGRlc2VyaWFsaXplKGNodW5rOiBCdWZmZXIpOiBSZXMge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGNodW5rLnRvU3RyaW5nKCkpXG4gIH1cblxuICBzZW5kKHJlc3BvbnNlOiBSZXMpOiB2b2lkIHtcbiAgICB0aGlzLnB1c2gocmVzcG9uc2UpXG4gIH1cblxuICBlbmQoKTogdGhpcyB7XG4gICAgdGhpcy5wdXNoKG51bGwpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIC0tLS0gQ2FwYWJpbGl0eSByZWdpc3RyYXRpb24gLS0tLVxuICByZWdpc3RlcjxUPihtYXRjaGVyOiBNYXRjaGVyPFJlcSwgVD4sIGhhbmRsZXI6IEhhbmRsZXI8VCwgUmVzPik6IHZvaWQge1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzLnB1c2goeyBtYXRjaGVyLCBoYW5kbGVyIH0pXG4gIH1cblxuICByZWdpc3Rlck9uY2U8VD4obWF0Y2hlcjogTWF0Y2hlcjxSZXEsIFQ+LCBoYW5kbGVyOiBIYW5kbGVyPFQsIFJlcz4pOiB2b2lkIHtcbiAgICB0aGlzLm9uY2VDYXBhYmlsaXRpZXMucHVzaCh7IG1hdGNoZXIsIGhhbmRsZXIgfSlcbiAgfVxuXG4gIGF3YWl0TXNnPFQ+KG1hdGNoZXI6IE1hdGNoZXI8UmVxLCBUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzKSA9PiB0aGlzLnJlZ2lzdGVyT25jZShtYXRjaGVyLCByZXMpKVxuICB9XG59XG4iXX0=
@@ -1,12 +1,12 @@
1
- import { DataChunk, FromRunner, LogMessage, ToRunner } from "@rdfc/proto";
2
- import { NamedNode } from "n3";
3
- import { Processor } from "../processor.js";
4
- import { FullProc, Runner } from "../runner.js";
5
- import { Quad } from "@rdfjs/types";
6
- import { ReceivingStreamControl, SendingStreamControl, StreamChunk, StreamIdentify } from "@rdfc/proto/lib/generated/common";
7
- import { MockClientDuplexStream } from "./duplex.js";
8
- import { Reader } from "../reader.js";
9
- import { Writer } from "../writer.js";
1
+ import { DataChunk, FromRunner, LogMessage, ToRunner } from '@rdfc/proto';
2
+ import { NamedNode } from 'n3';
3
+ import { Processor } from '../processor.js';
4
+ import { FullProc, Runner } from '../runner.js';
5
+ import { Quad } from '@rdfjs/types';
6
+ import { ReceivingStreamControl, SendingStreamControl, StreamChunk, StreamIdentify } from '@rdfc/proto/lib/generated/common';
7
+ import { MockClientDuplexStream } from './duplex.js';
8
+ import { Reader } from '../reader.js';
9
+ import { Writer } from '../writer.js';
10
10
  export declare function channel(runner: Runner, name: string): [Writer, Reader];
11
11
  export declare class StreamMsgMock {
12
12
  data: DataChunk[];
@@ -1,11 +1,11 @@
1
- import { extractShapes } from "rdf-lens";
2
- import { NamedNode, Parser, Writer as N3Writer } from "n3";
3
- import { readFile } from "fs/promises";
4
- import winston, { createLogger } from "winston";
5
- import { Runner } from "../runner.js";
6
- import { createTermNamespace } from "@treecg/types";
7
- import { MockClientDuplexStream } from "./duplex.js";
8
- import { promisify } from "util";
1
+ import { extractShapes } from 'rdf-lens';
2
+ import { NamedNode, Parser, Writer as N3Writer } from 'n3';
3
+ import { readFile } from 'fs/promises';
4
+ import winston, { createLogger } from 'winston';
5
+ import { Runner } from '../runner.js';
6
+ import { createTermNamespace } from '@treecg/types';
7
+ import { MockClientDuplexStream } from './duplex.js';
8
+ import { promisify } from 'util';
9
9
  export function channel(runner, name) {
10
10
  const n = new NamedNode(name);
11
11
  const reader = runner.createReader(n);
@@ -239,4 +239,4 @@ export async function getProc(config, ty, runner, configLocation, uri = 'http://
239
239
  });
240
240
  return proc;
241
241
  }
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdFV0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhELE9BQU8sRUFBWSxNQUFNLEVBQVksTUFBTSxXQUFXLENBQUM7QUFFdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWpDLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBYyxFQUFFLElBQVk7SUFDbEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXJDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDekIsQ0FBQztBQUVELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLElBQUksR0FBZ0IsRUFBRSxDQUFBO0lBRUwsU0FBUyxDQUFnQztJQUUxRCxZQUFZLFNBQXlDO1FBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRCxpQkFBaUI7UUFJZixNQUFNLGFBQWEsR0FBRyxJQUFJLHNCQUFzQixFQUc3QyxDQUFBO1FBRUgsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ1YsYUFBYSxDQUFDLFFBQVEsQ0FDcEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ2IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDVixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ25CLENBQUMsQ0FDRixDQUFBO1FBQ0QsYUFBYSxDQUFDLFFBQVEsQ0FDcEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ1gsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDL0QsQ0FBQTtRQUNELE9BQU8sYUFBYSxDQUFBO0lBQ3RCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsYUFBYSxDQUE4QztJQUUzRCxVQUFVLEdBS04sRUFBRSxDQUFBO0lBRU4sY0FBYyxHQUFHLENBQUMsQ0FBQTtJQUVsQixPQUFPO1FBQ0wsTUFBTSxhQUFhLEdBQUcsSUFBSSxzQkFBc0IsRUFBd0IsQ0FBQTtRQUV4RSxhQUFhLENBQUMsUUFBUSxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFDdEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQztnQkFDSCxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUU7YUFDbEUsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUNGLENBQUE7UUFHRCxhQUFhLENBQUMsUUFBUSxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFDaEIsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUM7Z0JBQ0gsR0FBRyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTthQUNsRSxDQUFDLENBQUE7UUFDSixDQUFDLENBQ0YsQ0FBQTtRQUdELGFBQWEsQ0FBQyxRQUFRLENBQ3BCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUNsQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDakIsQ0FBQyxDQUNGLENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBRUQsaUJBQWlCO1FBSWYsTUFBTSxHQUFHLEdBQUcsSUFBSSxzQkFBc0IsRUFHbkMsQ0FBQTtRQUNILE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDOUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRXJCLEdBQUcsQ0FBQyxZQUFZLENBQ2QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ1gsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUE7WUFHM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUU7YUFDakQsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUNGLENBQUE7UUFFRCxHQUFHLENBQUMsUUFBUSxDQUNWLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUNiLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFFUCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pELENBQUMsQ0FDRixDQUFBO1FBRUQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBRWpCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUM1QyxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVELG9CQUFvQjtRQUlsQixNQUFNLGVBQWUsR0FBRyxJQUFJLHNCQUFzQixFQUcvQyxDQUFBO1FBQ0gsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO1FBRWhCLGVBQWUsQ0FBQyxZQUFZLENBQzFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQzdCLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDTCxRQUFRLEdBQUcsRUFBRSxDQUFBO1lBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFBO1lBQ3JELElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3BFLENBQUMsQ0FDRixDQUFBO1FBRUQsZUFBZSxDQUFDLFFBQVEsQ0FDdEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFDN0IsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO1lBRXZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUE7UUFDdkUsQ0FBQyxDQUNGLENBQUE7UUFFRCxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sU0FBUyxHQUFHLElBQUksc0JBQXNCLEVBQW9CLENBQUE7UUFDaEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQUcsR0FBRyx3QkFBd0I7SUFDekQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO1FBQzFCLFVBQVUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3pDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU07U0FDdEMsQ0FBQztLQUNILENBQUMsQ0FBQTtJQUdGLE1BQU0sTUFBTSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtJQUdyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDL0IsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBRXZCLE1BQWEsRUFDYixRQUFvQixFQUNwQixHQUFHLEVBQ0gsTUFBTSxDQUNQLENBQUE7SUFFRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFFbkUsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxHQUFHLENBQUksSUFBc0I7SUFDakQsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3QmxCLENBQUE7QUFPRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxnQ0FBZ0MsRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUM1RSxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtBQUNyRSxNQUFNLElBQUksR0FBRywrQkFBK0IsQ0FBQTtBQUU1QyxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FDOUIsSUFBWSxFQUNaLE9BQWdCO0lBRWhCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7SUFFOUIsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFBO0lBQ3hCLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQTtJQUV0QixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxPQUFZLEVBQUUsRUFBRTtRQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBRTVCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXpFLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTTthQUNuQixNQUFNLENBQ0wsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRSxRQUFRLEVBQUU7WUFDdkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUNsQzthQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QixDQUFDO1FBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZCLENBQUMsQ0FBQTtJQUVELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzNDLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE9BQU8sSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDakIsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDOUIsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQ2hELENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDL0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVoQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFZRCxNQUFNLE9BQU8sVUFBVTtJQUNyQixNQUFNLENBQVE7SUFDZCxLQUFLLEdBQVcsRUFBRSxDQUFBO0lBQ2xCLE1BQU0sQ0FBWTtJQUNsQixJQUFJLENBQWE7SUFFakIsWUFBWSxHQUFZO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQWUsRUFBRSxNQUFjO1FBQ2hELE1BQU0sV0FBVyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDM0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQXNCO1FBQzlCLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDakUsTUFBTSxVQUFVLEdBQWUsZUFBZSxDQUFDLE1BQU0sQ0FDbkQsa0JBQWtCLENBQ25CLENBQUMsT0FBTyxDQUFDO1lBQ1IsRUFBRTtZQUNGLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQTtRQUN4QixPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FDaEIsTUFBYyxpQ0FBaUM7UUFFL0MsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25ELENBQUMsQ0FBQTtRQUVGLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FDdEM7WUFDRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ25DLFNBQVMsRUFBRSxFQUFFO1lBQ2IsR0FBRztTQUNKLENBQ0YsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQUtELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUNqQyxNQUFjLEVBQ2QsRUFBVSxFQUNWLE1BQWMsRUFDZCxPQUFlLEVBQ2YsR0FBRyxHQUFHLGlDQUFpQztJQUV2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDckQsTUFBTSxVQUFVLEdBQWUsZUFBZSxDQUFDLE1BQU0sQ0FDbkQsa0JBQWtCLENBQ25CLENBQUMsT0FBTyxDQUFDO1FBQ1IsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUIsS0FBSyxFQUFFLFdBQVc7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsUUFBUSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUNwRCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUk7UUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ2xDLFNBQVMsRUFBRSxFQUFFO1FBQ2IsR0FBRztLQUNKLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUtELE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUMzQixNQUFjLEVBQ2QsRUFBVSxFQUNWLE1BQWMsRUFDZCxjQUFzQixFQUN0QixHQUFHLEdBQUcsaUNBQWlDO0lBRXZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDcEUsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUIsS0FBSyxFQUFFLFdBQVc7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDL0MsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsUUFBUSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUNwRCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUk7UUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ2xDLFNBQVMsRUFBRSxFQUFFO1FBQ2IsR0FBRztLQUNKLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFDaHVuaywgRnJvbVJ1bm5lciwgTG9nTWVzc2FnZSwgUHJvY2Vzc29yIGFzIFByb2NDb25maWcsIFRvUnVubmVyIH0gZnJvbSBcIkByZGZjL3Byb3RvXCI7XG5pbXBvcnQgeyBleHRyYWN0U2hhcGVzIH0gZnJvbSBcInJkZi1sZW5zXCI7XG5pbXBvcnQgeyBOYW1lZE5vZGUsIFBhcnNlciwgV3JpdGVyIGFzIE4zV3JpdGVyIH0gZnJvbSBcIm4zXCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHdpbnN0b24sIHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIndpbnN0b25cIjtcbmltcG9ydCB7IFByb2Nlc3NvciB9IGZyb20gXCIuLi9wcm9jZXNzb3JcIjtcbmltcG9ydCB7IEZ1bGxQcm9jLCBSdW5uZXIsIFdyaXRhYmxlIH0gZnJvbSBcIi4uL3J1bm5lclwiO1xuaW1wb3J0IHsgUXVhZCB9IGZyb20gXCJAcmRmanMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVRlcm1OYW1lc3BhY2UgfSBmcm9tIFwiQHRyZWVjZy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgUmVjZWl2aW5nU3RyZWFtQ29udHJvbCxcbiAgU2VuZGluZ1N0cmVhbUNvbnRyb2wsXG4gIFN0cmVhbUNodW5rLFxuICBTdHJlYW1JZGVudGlmeSxcbn0gZnJvbSBcIkByZGZjL3Byb3RvL2xpYi9nZW5lcmF0ZWQvY29tbW9uXCI7XG5pbXBvcnQgeyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtIH0gZnJvbSBcIi4vZHVwbGV4XCI7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tIFwidXRpbFwiO1xuaW1wb3J0IHsgUmVhZGVyIH0gZnJvbSBcIi4uL3JlYWRlclwiO1xuaW1wb3J0IHsgV3JpdGVyIH0gZnJvbSBcIi4uL3dyaXRlclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbm5lbChydW5uZXI6IFJ1bm5lciwgbmFtZTogc3RyaW5nKTogW1dyaXRlciwgUmVhZGVyXSB7XG4gIGNvbnN0IG4gPSBuZXcgTmFtZWROb2RlKG5hbWUpXG4gIGNvbnN0IHJlYWRlciA9IHJ1bm5lci5jcmVhdGVSZWFkZXIobilcbiAgY29uc3Qgd3JpdGVyID0gcnVubmVyLmNyZWF0ZVdyaXRlcihuKVxuXG4gIHJldHVybiBbd3JpdGVyLCByZWFkZXJdXG59XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1Nc2dNb2NrIHtcbiAgZGF0YTogRGF0YUNodW5rW10gPSBbXVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZUlkOiAoaWQ6IFN0cmVhbUlkZW50aWZ5KSA9PiBudW1iZXJcblxuICBjb25zdHJ1Y3RvcihyZXNvbHZlSWQ6IChpZDogU3RyZWFtSWRlbnRpZnkpID0+IG51bWJlcikge1xuICAgIHRoaXMucmVzb2x2ZUlkID0gcmVzb2x2ZUlkXG4gIH1cblxuICBzZW5kU3RyZWFtTWVzc2FnZSgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgIFN0cmVhbUNodW5rLFxuICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgPiB7XG4gICAgY29uc3Qgc2VuZGluZ1N0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgICAgU3RyZWFtQ2h1bmssXG4gICAgICBSZWNlaXZpbmdTdHJlYW1Db250cm9sXG4gICAgPigpXG5cbiAgICBsZXQgYXQgPSAwXG4gICAgc2VuZGluZ1N0cmVhbS5yZWdpc3RlcihcbiAgICAgICh4KSA9PiB4LmRhdGEsXG4gICAgICAoZCwgc2VuZCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNlbmQoeyBzdHJlYW1TZXF1ZW5jZU51bWJlcjogKythdCB9KSwgMjApXG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKGQpXG4gICAgICB9LFxuICAgIClcbiAgICBzZW5kaW5nU3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKHgpID0+IHguaWQsXG4gICAgICAoZCwgc2VuZCkgPT4gc2VuZCh7IHN0cmVhbVNlcXVlbmNlTnVtYmVyOiB0aGlzLnJlc29sdmVJZChkKSB9KSxcbiAgICApXG4gICAgcmV0dXJuIHNlbmRpbmdTdHJlYW1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3JjaGVzdHJhdG9yTW9jayB7XG4gIGNvbm5lY3RTdHJlYW06IE1vY2tDbGllbnREdXBsZXhTdHJlYW08RnJvbVJ1bm5lciwgVG9SdW5uZXI+XG5cbiAgc3RyZWFtTXNnczoge1xuICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgdG9Qcm9kdWNpbmdTdHJlYW06IChpZDogUmVjZWl2aW5nU3RyZWFtQ29udHJvbCkgPT4gdm9pZFxuICAgICAgcmVjZWl2aW5nU3RyZWFtPzogTW9ja0NsaWVudER1cGxleFN0cmVhbTxTZW5kaW5nU3RyZWFtQ29udHJvbCwgRGF0YUNodW5rPlxuICAgIH1cbiAgfSA9IHt9XG5cbiAgc3RyZWFtTXNnQ291bnQgPSAwXG5cbiAgY29ubmVjdCgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPEZyb21SdW5uZXIsIFRvUnVubmVyPiB7XG4gICAgY29uc3QgY29ubmVjdFN0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPEZyb21SdW5uZXIsIFRvUnVubmVyPigpXG4gICAgLy8gQWx3YXlzIGJvdW5jZSBwcm9jZXNzZWQgbXNncyBiYWNrIHRvIHRoZSBydW5uZXJcbiAgICBjb25uZWN0U3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKG1zZykgPT4gbXNnLnByb2Nlc3NlZCxcbiAgICAgICh7IGNoYW5uZWwsIGdsb2JhbFNlcXVlbmNlTnVtYmVyIH0sIHNlbmQpID0+IHtcbiAgICAgICAgc2VuZCh7XG4gICAgICAgICAgcHJvY2Vzc2VkOiB7IGNoYW5uZWwsIGxvY2FsU2VxdWVuY2VOdW1iZXI6IGdsb2JhbFNlcXVlbmNlTnVtYmVyIH0sXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIC8vIEFsd2F5cyBib3VuY2UgZGF0YSBtc2dzIGJhY2sgdG8gdGhlIHJ1bm5lclxuICAgIGNvbm5lY3RTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAobXNnKSA9PiBtc2cubXNnLFxuICAgICAgKHsgbG9jYWxTZXF1ZW5jZU51bWJlciwgZGF0YSwgY2hhbm5lbCB9LCBzZW5kKSA9PiB7XG4gICAgICAgIHNlbmQoe1xuICAgICAgICAgIG1zZzogeyBnbG9iYWxTZXF1ZW5jZU51bWJlcjogbG9jYWxTZXF1ZW5jZU51bWJlciwgY2hhbm5lbCwgZGF0YSB9LFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICAvLyBBbHdheXMgYm91bmNlIGNsb3NlIG1zZ3MgYmFjayB0byB0aGUgcnVubmVyXG4gICAgY29ubmVjdFN0cmVhbS5yZWdpc3RlcihcbiAgICAgIChtc2cpID0+IG1zZy5jbG9zZSxcbiAgICAgIChjbG9zZSwgc2VuZCkgPT4ge1xuICAgICAgICBzZW5kKHsgY2xvc2UgfSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgdGhpcy5jb25uZWN0U3RyZWFtID0gY29ubmVjdFN0cmVhbVxuICAgIHJldHVybiBjb25uZWN0U3RyZWFtXG4gIH1cblxuICBzZW5kU3RyZWFtTWVzc2FnZSgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgIFN0cmVhbUNodW5rLFxuICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgPiB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgICBTdHJlYW1DaHVuayxcbiAgICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgICA+KClcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RyZWFtTXNnQ291bnRcbiAgICB0aGlzLnN0cmVhbU1zZ0NvdW50KytcblxuICAgIG91dC5yZWdpc3Rlck9uY2UoXG4gICAgICAoeCkgPT4geC5pZCxcbiAgICAgICh7IGNoYW5uZWwgfSwgdG9Qcm9kdWNpbmdTdHJlYW0pID0+IHtcbiAgICAgICAgdGhpcy5zdHJlYW1Nc2dzW2lkXSA9IHsgdG9Qcm9kdWNpbmdTdHJlYW0gfVxuXG4gICAgICAgIC8vIE5vdGlmeSBzdHJlYW0gbWVzc2FnZVxuICAgICAgICB0aGlzLmNvbm5lY3RTdHJlYW0uc2VuZCh7XG4gICAgICAgICAgc3RyZWFtTXNnOiB7IGNoYW5uZWwsIGdsb2JhbFNlcXVlbmNlTnVtYmVyOiBpZCB9LFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICBvdXQucmVnaXN0ZXIoXG4gICAgICAoeCkgPT4geC5kYXRhLFxuICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgLy8gYm91bmNlIGRhdGEgdG8gcmVjZWl2aW5nIHN0cmVhbVxuICAgICAgICB0aGlzLnN0cmVhbU1zZ3NbaWRdLnJlY2VpdmluZ1N0cmVhbSEuc2VuZChkYXRhKVxuICAgICAgfSxcbiAgICApXG5cbiAgICBvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIC8vIGVuZCByZWNlaXZpbmcgc3RyZWFtXG4gICAgICB0aGlzLnN0cmVhbU1zZ3NbaWRdLnJlY2VpdmluZ1N0cmVhbSEuZW5kKClcbiAgICB9KVxuXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgcmVjZWl2ZVN0cmVhbU1lc3NhZ2UoKTogTW9ja0NsaWVudER1cGxleFN0cmVhbTxcbiAgICBTZW5kaW5nU3RyZWFtQ29udHJvbCxcbiAgICBEYXRhQ2h1bmtcbiAgPiB7XG4gICAgY29uc3QgcmVjZWl2aW5nU3RyZWFtID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgICBTZW5kaW5nU3RyZWFtQ29udHJvbCxcbiAgICAgIERhdGFDaHVua1xuICAgID4oKVxuICAgIGxldCBzdHJlYW1JZCA9IDBcblxuICAgIHJlY2VpdmluZ1N0cmVhbS5yZWdpc3Rlck9uY2UoXG4gICAgICAoeCkgPT4geC5nbG9iYWxTZXF1ZW5jZU51bWJlcixcbiAgICAgIChpZCkgPT4ge1xuICAgICAgICBzdHJlYW1JZCA9IGlkXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0ucmVjZWl2aW5nU3RyZWFtID0gcmVjZWl2aW5nU3RyZWFtXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0udG9Qcm9kdWNpbmdTdHJlYW0oeyBzdHJlYW1TZXF1ZW5jZU51bWJlcjogMCB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICByZWNlaXZpbmdTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAoeCkgPT4geC5zdHJlYW1TZXF1ZW5jZU51bWJlcixcbiAgICAgIChzdHJlYW1TZXF1ZW5jZU51bWJlcikgPT4ge1xuICAgICAgICAvLyBCb3VuY2UgcHJvY2Vzc2VkIG1lc3NhZ2UgdG8gcHJvZHVjaW5nIHN0cmVhbVxuICAgICAgICB0aGlzLnN0cmVhbU1zZ3Nbc3RyZWFtSWRdLnRvUHJvZHVjaW5nU3RyZWFtKHsgc3RyZWFtU2VxdWVuY2VOdW1iZXIgfSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgcmV0dXJuIHJlY2VpdmluZ1N0cmVhbVxuICB9XG5cbiAgbG9nU3RyZWFtKCk6IE1vY2tDbGllbnREdXBsZXhTdHJlYW08TG9nTWVzc2FnZSwgbnVsbD4ge1xuICAgIGNvbnN0IGxvZ1N0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPExvZ01lc3NhZ2UsIG51bGw+KClcbiAgICBsb2dTdHJlYW0ucmVnaXN0ZXIoKHgpID0+IHgsIGNvbnNvbGUubG9nKVxuICAgIHJldHVybiBsb2dTdHJlYW1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVubmVyKHVyaSA9ICdodHRwOi8vZXhhbXBsZS5jb20vbnMjJykge1xuICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgIHRyYW5zcG9ydHM6IG5ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSh7XG4gICAgICBsZXZlbDogcHJvY2Vzcy5lbnZbJ0RFQlVHJ10gfHwgJ2luZm8nLFxuICAgIH0pLFxuICB9KVxuXG4gIC8vIE1vY2sgdGhlIEdSUENcbiAgY29uc3QgY2xpZW50ID0gbmV3IE9yY2hlc3RyYXRvck1vY2soKVxuXG4gIC8vIENvbm5lY3QganVzdCBsaWtlIGNsaWVudC50czpzdGFydCgpXG4gIGNvbnN0IHN0cmVhbSA9IGNsaWVudC5jb25uZWN0KClcbiAgY29uc3Qgd3JpdGFibGUgPSBwcm9taXNpZnkoc3RyZWFtLndyaXRlLmJpbmQoc3RyZWFtKSlcblxuICBjb25zdCBydW5uZXIgPSBuZXcgUnVubmVyKFxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgICBjbGllbnQgYXMgYW55LCAvLyBUeXBlIGFzc2VydGlvbiBmb3IgdGVzdGluZ1xuICAgIHdyaXRhYmxlIGFzIFdyaXRhYmxlLFxuICAgIHVyaSxcbiAgICBsb2dnZXIsXG4gIClcblxuICBzdHJlYW0ub24oJ2RhdGEnLCAobXNnOiBUb1J1bm5lcikgPT4gcnVubmVyLmhhbmRsZU9yY2hNZXNzYWdlKG1zZykpXG5cbiAgcmV0dXJuIHJ1bm5lclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lPFQ+KGl0ZXI6IEFzeW5jSXRlcmFibGU8VD4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXIpIHtcbiAgICByZXR1cm4gaXRlbVxuICB9XG59XG5cbmNvbnN0IHNoYXBlUXVhZHMgPSBgXG5AcHJlZml4IHJkZmM6IDxodHRwczovL3czaWQub3JnL3JkZi1jb25uZWN0Iz4uXG5AcHJlZml4IHhzZDogPGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIz4uXG5AcHJlZml4IHNoOiA8aHR0cDovL3d3dy53My5vcmcvbnMvc2hhY2wjPi5cblsgXSBhIHNoOk5vZGVTaGFwZTtcbiAgc2g6dGFyZ2V0Q2xhc3MgPEpzUHJvY2Vzc29yU2hhcGU+O1xuICBzaDpwcm9wZXJ0eSBbXG4gICAgc2g6cGF0aCByZGZjOmVudHJ5cG9pbnQ7XG4gICAgc2g6bmFtZSBcImxvY2F0aW9uXCI7XG4gICAgc2g6bWluQ291bnQgMTtcbiAgICBzaDptYXhDb3VudCAxO1xuICAgIHNoOmRhdGF0eXBlIHhzZDpzdHJpbmc7XG4gIF0sIFtcbiAgICBzaDpwYXRoIHJkZmM6ZmlsZTtcbiAgICBzaDpuYW1lIFwiZmlsZVwiO1xuICAgIHNoOm1pbkNvdW50IDE7XG4gICAgc2g6bWF4Q291bnQgMTtcbiAgICBzaDpkYXRhdHlwZSB4c2Q6c3RyaW5nO1xuICBdLCBbXG4gICAgc2g6cGF0aCByZGZjOmNsYXNzO1xuICAgIHNoOm5hbWUgXCJjbGF6elwiO1xuICAgIHNoOm1heENvdW50IDE7XG4gICAgc2g6ZGF0YXR5cGUgeHNkOnN0cmluZztcbiAgXS5cbmBcbmV4cG9ydCB0eXBlIENvbmZpZ1R5cGUgPSB7XG4gIGxvY2F0aW9uOiBzdHJpbmdcbiAgZmlsZTogc3RyaW5nXG4gIGNsYXp6OiBzdHJpbmdcbn1cblxuY29uc3QgT1dMID0gY3JlYXRlVGVybU5hbWVzcGFjZSgnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjJywgJ2ltcG9ydHMnKVxuY29uc3QgcHJvY2Vzc29yU2hhcGVzID0gZXh0cmFjdFNoYXBlcyhuZXcgUGFyc2VyKCkucGFyc2Uoc2hhcGVRdWFkcykpXG5jb25zdCBiYXNlID0gJ2h0dHBzOi8vdzNpZC5vcmcvcmRmLWNvbm5lY3QjJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RmlsZShcbiAgZmlsZTogc3RyaW5nLFxuICBjb250ZW50Pzogc3RyaW5nLFxuKTogUHJvbWlzZTxRdWFkW10+IHtcbiAgY29uc3QgZG9uZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgY29uc3QgcXVhZHM6IFF1YWRbXSA9IFtdXG4gIGNvbnN0IHRvZG86IFVSTFtdID0gW11cblxuICBjb25zdCBwYXJzZSA9IChjb250ZW50OiBzdHJpbmcsIGJhc2VJUkk6IFVSTCkgPT4ge1xuICAgIGRvbmUuYWRkKGJhc2VJUkkudG9TdHJpbmcoKSlcblxuICAgIGNvbnN0IGV4dHJhcyA9IG5ldyBQYXJzZXIoeyBiYXNlSVJJOiBiYXNlSVJJLnRvU3RyaW5nKCkgfSkucGFyc2UoY29udGVudClcblxuICAgIGZvciAoY29uc3QgbyBvZiBleHRyYXNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHguc3ViamVjdC52YWx1ZSA9PT0gYmFzZUlSST8udG9TdHJpbmcoKSAmJlxuICAgICAgICAgIHgucHJlZGljYXRlLmVxdWFscyhPV0wuaW1wb3J0cyksXG4gICAgICApXG4gICAgICAubWFwKCh4KSA9PiB4Lm9iamVjdC52YWx1ZSkpIHtcbiAgICAgIHRvZG8ucHVzaChuZXcgVVJMKG8pKVxuICAgIH1cblxuICAgIHF1YWRzLnB1c2goLi4uZXh0cmFzKVxuICB9XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBwYXJzZShjb250ZW50LCBuZXcgVVJMKCdmaWxlOi8vJyArIGZpbGUpKVxuICB9IGVsc2Uge1xuICAgIHRvZG8ucHVzaChuZXcgVVJMKCdmaWxlOi8vJyArIGZpbGUpKVxuICB9XG5cbiAgbGV0IGl0ZW0gPSB0b2RvLnBvcCgpXG4gIHdoaWxlIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoZG9uZS5oYXMoaXRlbS50b1N0cmluZygpKSkge1xuICAgICAgaXRlbSA9IHRvZG8ucG9wKClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvdG9jb2wgIT09ICdmaWxlOicpIHtcbiAgICAgIHRocm93ICdObyBzdXBwb3J0ZWQgcHJvdG9jb2wgJyArIGl0ZW0ucHJvdG9jb2xcbiAgICB9XG4gICAgY29uc3QgdHh0ID0gYXdhaXQgcmVhZEZpbGUoaXRlbS5wYXRobmFtZSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pXG4gICAgcGFyc2UodHh0LCBpdGVtKVxuXG4gICAgaXRlbSA9IHRvZG8ucG9wKClcbiAgfVxuXG4gIHJldHVybiBxdWFkc1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBncmFkdWFsbHkgdGVzdCB5b3VyIHByb2Nlc3NvcnMuXG4gKiBQb3NzaWJsZSBmbG93OlxuICogLSBpbXBvcnQgdGhlIEpzUnVubmVyIGluZGV4IGZpbGVcbiAqIC0gaW1wb3J0IHlvdXIgcHJvY2Vzc29yIGNvbmZpZyBmaWxlXG4gKiAtIHRlc3QgaWYgdGhlIGNvbmZpZyBpcyBhcyB5b3Ugd291bGQgZXhwZWN0IChmcm9tIGdldENvbmZpZygpKVxuICogLSBpbXBvcnQgeW91ciBwcm9jZXNzb3IgZGVmaW5pdGlvbiAoaW5saW5lKVxuICogLSBidWlsZCB5b3VyIHByb2Nlc3NvclxuICogLSB0ZXN0IHlvdXIgcHJvY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9jSGVscGVyPFQgZXh0ZW5kcyBQcm9jZXNzb3I8dW5rbm93bj4+IHtcbiAgcnVubmVyOiBSdW5uZXJcbiAgcXVhZHM6IFF1YWRbXSA9IFtdXG4gIGNvbmZpZzogQ29uZmlnVHlwZVxuICBwcm9jOiBGdWxsUHJvYzxUPlxuXG4gIGNvbnN0cnVjdG9yKHVyaT86IHN0cmluZykge1xuICAgIHRoaXMucnVubmVyID0gY3JlYXRlUnVubmVyKHVyaSlcbiAgfVxuXG4gIGFzeW5jIGltcG9ydElubGluZShiYXNlSVJJOiBzdHJpbmcsIGNvbmZpZzogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnUXVhZHMgPSBhd2FpdCBpbXBvcnRGaWxlKGJhc2VJUkksIGNvbmZpZylcbiAgICB0aGlzLnF1YWRzLnB1c2goLi4uY29uZmlnUXVhZHMpXG4gIH1cblxuICBhc3luYyBpbXBvcnRGaWxlKGZpbGU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShmaWxlKVxuICAgIHRoaXMucXVhZHMucHVzaCguLi5jb25maWdRdWFkcylcbiAgfVxuXG4gIGdldENvbmZpZyh0eTogc3RyaW5nIHwgTmFtZWROb2RlKTogQ29uZmlnVHlwZSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2YgdHkgPT09ICdzdHJpbmcnID8gbmV3IE5hbWVkTm9kZShiYXNlICsgdHkpIDogdHlcbiAgICBjb25zdCBwcm9jQ29uZmlnID0gPENvbmZpZ1R5cGU+cHJvY2Vzc29yU2hhcGVzLmxlbnNlc1tcbiAgICAgICdKc1Byb2Nlc3NvclNoYXBlJ1xuICAgIF0uZXhlY3V0ZSh7XG4gICAgICBpZCxcbiAgICAgIHF1YWRzOiB0aGlzLnF1YWRzLFxuICAgIH0pXG5cbiAgICB0aGlzLmNvbmZpZyA9IHByb2NDb25maWdcbiAgICByZXR1cm4gcHJvY0NvbmZpZ1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvY2Vzc29yKFxuICAgIHVyaTogc3RyaW5nID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNwcm9jZXNzb3InLFxuICApOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gICAgYXdhaXQgdGhpcy5ydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2Uoe1xuICAgICAgcGlwZWxpbmU6IG5ldyBOM1dyaXRlcigpLnF1YWRzVG9TdHJpbmcodGhpcy5xdWFkcyksXG4gICAgfSlcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bm5lci5jcmVhdGVQcm9jZXNzb3I8VD4oXG4gICAgICB7XG4gICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpLFxuICAgICAgICBhcmd1bWVudHM6ICcnLFxuICAgICAgICB1cmksXG4gICAgICB9LFxuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgUHJvY0hlbHBlcn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2NJbmxpbmU8VCBleHRlbmRzIFByb2Nlc3Nvcjx1bmtub3duPj4oXG4gIGNvbmZpZzogc3RyaW5nLFxuICB0eTogc3RyaW5nLFxuICBydW5uZXI6IFJ1bm5lcixcbiAgYmFzZUlSSTogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShiYXNlSVJJLCBjb25maWcpXG4gIGNvbnN0IHByb2NDb25maWcgPSA8UHJvY0NvbmZpZz5wcm9jZXNzb3JTaGFwZXMubGVuc2VzW1xuICAgICdKc1Byb2Nlc3NvclNoYXBlJ1xuICBdLmV4ZWN1dGUoe1xuICAgIGlkOiBuZXcgTmFtZWROb2RlKGJhc2UgKyB0eSksXG4gICAgcXVhZHM6IGNvbmZpZ1F1YWRzLFxuICB9KVxuXG4gIGF3YWl0IHJ1bm5lci5oYW5kbGVPcmNoTWVzc2FnZSh7XG4gICAgcGlwZWxpbmU6IG5ldyBOM1dyaXRlcigpLnF1YWRzVG9TdHJpbmcoY29uZmlnUXVhZHMpLFxuICB9KVxuXG4gIGNvbnN0IHByb2MgPSBhd2FpdCBydW5uZXIuYWRkUHJvY2Vzc29yPFQ+KHtcbiAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KHByb2NDb25maWcpLFxuICAgIGFyZ3VtZW50czogJycsXG4gICAgdXJpLFxuICB9KVxuXG4gIHJldHVybiBwcm9jXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBQcm9jSGVscGVyfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJvYzxUIGV4dGVuZHMgUHJvY2Vzc29yPHVua25vd24+PihcbiAgY29uZmlnOiBzdHJpbmcsXG4gIHR5OiBzdHJpbmcsXG4gIHJ1bm5lcjogUnVubmVyLFxuICBjb25maWdMb2NhdGlvbjogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShjb25maWdMb2NhdGlvbilcbiAgY29uc3QgcHJvY0NvbmZpZyA9IHByb2Nlc3NvclNoYXBlcy5sZW5zZXNbJ0pzUHJvY2Vzc29yU2hhcGUnXS5leGVjdXRlKHtcbiAgICBpZDogbmV3IE5hbWVkTm9kZShiYXNlICsgdHkpLFxuICAgIHF1YWRzOiBjb25maWdRdWFkcyxcbiAgfSlcblxuICBjb25maWdRdWFkcy5wdXNoKC4uLm5ldyBQYXJzZXIoKS5wYXJzZShjb25maWcpKVxuICBhd2FpdCBydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2Uoe1xuICAgIHBpcGVsaW5lOiBuZXcgTjNXcml0ZXIoKS5xdWFkc1RvU3RyaW5nKGNvbmZpZ1F1YWRzKSxcbiAgfSlcblxuICBjb25zdCBwcm9jID0gYXdhaXQgcnVubmVyLmFkZFByb2Nlc3NvcjxUPih7XG4gICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShwcm9jQ29uZmlnKSxcbiAgICBhcmd1bWVudHM6ICcnLFxuICAgIHVyaSxcbiAgfSlcblxuICByZXR1cm4gcHJvY1xufVxuIl19
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdFV0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQTtBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRS9DLE9BQU8sRUFBWSxNQUFNLEVBQVksTUFBTSxXQUFXLENBQUE7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBT25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBSWhDLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBYyxFQUFFLElBQVk7SUFDbEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXJDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDekIsQ0FBQztBQUVELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLElBQUksR0FBZ0IsRUFBRSxDQUFBO0lBRUwsU0FBUyxDQUFnQztJQUUxRCxZQUFZLFNBQXlDO1FBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRCxpQkFBaUI7UUFJZixNQUFNLGFBQWEsR0FBRyxJQUFJLHNCQUFzQixFQUc3QyxDQUFBO1FBRUgsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ1YsYUFBYSxDQUFDLFFBQVEsQ0FDcEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ2IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDVixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ25CLENBQUMsQ0FDRixDQUFBO1FBQ0QsYUFBYSxDQUFDLFFBQVEsQ0FDcEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ1gsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDL0QsQ0FBQTtRQUNELE9BQU8sYUFBYSxDQUFBO0lBQ3RCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsYUFBYSxDQUE4QztJQUUzRCxVQUFVLEdBS04sRUFBRSxDQUFBO0lBRU4sY0FBYyxHQUFHLENBQUMsQ0FBQTtJQUVsQixPQUFPO1FBQ0wsTUFBTSxhQUFhLEdBQUcsSUFBSSxzQkFBc0IsRUFBd0IsQ0FBQTtRQUV4RSxhQUFhLENBQUMsUUFBUSxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFDdEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQztnQkFDSCxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUU7YUFDbEUsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUNGLENBQUE7UUFHRCxhQUFhLENBQUMsUUFBUSxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFDaEIsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUM7Z0JBQ0gsR0FBRyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTthQUNsRSxDQUFDLENBQUE7UUFDSixDQUFDLENBQ0YsQ0FBQTtRQUdELGFBQWEsQ0FBQyxRQUFRLENBQ3BCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUNsQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDakIsQ0FBQyxDQUNGLENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBRUQsaUJBQWlCO1FBSWYsTUFBTSxHQUFHLEdBQUcsSUFBSSxzQkFBc0IsRUFHbkMsQ0FBQTtRQUNILE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDOUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRXJCLEdBQUcsQ0FBQyxZQUFZLENBQ2QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ1gsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUE7WUFHM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUU7YUFDakQsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUNGLENBQUE7UUFFRCxHQUFHLENBQUMsUUFBUSxDQUNWLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUNiLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFFUCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pELENBQUMsQ0FDRixDQUFBO1FBRUQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBRWpCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUM1QyxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVELG9CQUFvQjtRQUlsQixNQUFNLGVBQWUsR0FBRyxJQUFJLHNCQUFzQixFQUcvQyxDQUFBO1FBQ0gsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO1FBRWhCLGVBQWUsQ0FBQyxZQUFZLENBQzFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQzdCLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDTCxRQUFRLEdBQUcsRUFBRSxDQUFBO1lBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFBO1lBQ3JELElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3BFLENBQUMsQ0FDRixDQUFBO1FBRUQsZUFBZSxDQUFDLFFBQVEsQ0FDdEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFDN0IsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO1lBRXZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUE7UUFDdkUsQ0FBQyxDQUNGLENBQUE7UUFFRCxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sU0FBUyxHQUFHLElBQUksc0JBQXNCLEVBQW9CLENBQUE7UUFDaEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQUcsR0FBRyx3QkFBd0I7SUFDekQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO1FBQzFCLFVBQVUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3pDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU07U0FDdEMsQ0FBQztLQUNILENBQUMsQ0FBQTtJQUdGLE1BQU0sTUFBTSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtJQUdyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDL0IsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBRXZCLE1BQWEsRUFDYixRQUFvQixFQUNwQixHQUFHLEVBQ0gsTUFBTSxDQUNQLENBQUE7SUFFRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFFbkUsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxHQUFHLENBQUksSUFBc0I7SUFDakQsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3QmxCLENBQUE7QUFPRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxnQ0FBZ0MsRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUM1RSxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtBQUNyRSxNQUFNLElBQUksR0FBRywrQkFBK0IsQ0FBQTtBQUU1QyxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FDOUIsSUFBWSxFQUNaLE9BQWdCO0lBRWhCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7SUFFOUIsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFBO0lBQ3hCLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQTtJQUV0QixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxPQUFZLEVBQUUsRUFBRTtRQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBRTVCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXpFLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTTthQUNuQixNQUFNLENBQ0wsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRSxRQUFRLEVBQUU7WUFDdkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUNsQzthQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QixDQUFDO1FBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZCLENBQUMsQ0FBQTtJQUVELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzNDLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE9BQU8sSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDakIsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDOUIsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQ2hELENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDL0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVoQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFZRCxNQUFNLE9BQU8sVUFBVTtJQUNyQixNQUFNLENBQVE7SUFDZCxLQUFLLEdBQVcsRUFBRSxDQUFBO0lBQ2xCLE1BQU0sQ0FBWTtJQUNsQixJQUFJLENBQWE7SUFFakIsWUFBWSxHQUFZO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQWUsRUFBRSxNQUFjO1FBQ2hELE1BQU0sV0FBVyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDM0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQXNCO1FBQzlCLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDakUsTUFBTSxVQUFVLEdBQWUsZUFBZSxDQUFDLE1BQU0sQ0FDbkQsa0JBQWtCLENBQ25CLENBQUMsT0FBTyxDQUFDO1lBQ1IsRUFBRTtZQUNGLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQTtRQUN4QixPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FDaEIsTUFBYyxpQ0FBaUM7UUFFL0MsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25ELENBQUMsQ0FBQTtRQUVGLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBSTtZQUMxQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ25DLFNBQVMsRUFBRSxFQUFFO1lBQ2IsR0FBRztTQUNKLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQUtELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUNqQyxNQUFjLEVBQ2QsRUFBVSxFQUNWLE1BQWMsRUFDZCxPQUFlLEVBQ2YsR0FBRyxHQUFHLGlDQUFpQztJQUV2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDckQsTUFBTSxVQUFVLEdBQWUsZUFBZSxDQUFDLE1BQU0sQ0FDbkQsa0JBQWtCLENBQ25CLENBQUMsT0FBTyxDQUFDO1FBQ1IsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUIsS0FBSyxFQUFFLFdBQVc7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsUUFBUSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUNwRCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUk7UUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ2xDLFNBQVMsRUFBRSxFQUFFO1FBQ2IsR0FBRztLQUNKLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUtELE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUMzQixNQUFjLEVBQ2QsRUFBVSxFQUNWLE1BQWMsRUFDZCxjQUFzQixFQUN0QixHQUFHLEdBQUcsaUNBQWlDO0lBRXZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDcEUsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUIsS0FBSyxFQUFFLFdBQVc7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDL0MsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsUUFBUSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUNwRCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUk7UUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ2xDLFNBQVMsRUFBRSxFQUFFO1FBQ2IsR0FBRztLQUNKLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhdGFDaHVuayxcbiAgRnJvbVJ1bm5lcixcbiAgTG9nTWVzc2FnZSxcbiAgUHJvY2Vzc29yIGFzIFByb2NDb25maWcsXG4gIFRvUnVubmVyLFxufSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB7IGV4dHJhY3RTaGFwZXMgfSBmcm9tICdyZGYtbGVucydcbmltcG9ydCB7IE5hbWVkTm9kZSwgUGFyc2VyLCBXcml0ZXIgYXMgTjNXcml0ZXIgfSBmcm9tICduMydcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnZnMvcHJvbWlzZXMnXG5pbXBvcnQgd2luc3RvbiwgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IHsgUHJvY2Vzc29yIH0gZnJvbSAnLi4vcHJvY2Vzc29yJ1xuaW1wb3J0IHsgRnVsbFByb2MsIFJ1bm5lciwgV3JpdGFibGUgfSBmcm9tICcuLi9ydW5uZXInXG5pbXBvcnQgeyBRdWFkIH0gZnJvbSAnQHJkZmpzL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlVGVybU5hbWVzcGFjZSB9IGZyb20gJ0B0cmVlY2cvdHlwZXMnXG5pbXBvcnQge1xuICBSZWNlaXZpbmdTdHJlYW1Db250cm9sLFxuICBTZW5kaW5nU3RyZWFtQ29udHJvbCxcbiAgU3RyZWFtQ2h1bmssXG4gIFN0cmVhbUlkZW50aWZ5LFxufSBmcm9tICdAcmRmYy9wcm90by9saWIvZ2VuZXJhdGVkL2NvbW1vbidcbmltcG9ydCB7IE1vY2tDbGllbnREdXBsZXhTdHJlYW0gfSBmcm9tICcuL2R1cGxleCdcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnXG5pbXBvcnQgeyBSZWFkZXIgfSBmcm9tICcuLi9yZWFkZXInXG5pbXBvcnQgeyBXcml0ZXIgfSBmcm9tICcuLi93cml0ZXInXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFubmVsKHJ1bm5lcjogUnVubmVyLCBuYW1lOiBzdHJpbmcpOiBbV3JpdGVyLCBSZWFkZXJdIHtcbiAgY29uc3QgbiA9IG5ldyBOYW1lZE5vZGUobmFtZSlcbiAgY29uc3QgcmVhZGVyID0gcnVubmVyLmNyZWF0ZVJlYWRlcihuKVxuICBjb25zdCB3cml0ZXIgPSBydW5uZXIuY3JlYXRlV3JpdGVyKG4pXG5cbiAgcmV0dXJuIFt3cml0ZXIsIHJlYWRlcl1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmVhbU1zZ01vY2sge1xuICBkYXRhOiBEYXRhQ2h1bmtbXSA9IFtdXG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlSWQ6IChpZDogU3RyZWFtSWRlbnRpZnkpID0+IG51bWJlclxuXG4gIGNvbnN0cnVjdG9yKHJlc29sdmVJZDogKGlkOiBTdHJlYW1JZGVudGlmeSkgPT4gbnVtYmVyKSB7XG4gICAgdGhpcy5yZXNvbHZlSWQgPSByZXNvbHZlSWRcbiAgfVxuXG4gIHNlbmRTdHJlYW1NZXNzYWdlKCk6IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgU3RyZWFtQ2h1bmssXG4gICAgUmVjZWl2aW5nU3RyZWFtQ29udHJvbFxuICA+IHtcbiAgICBjb25zdCBzZW5kaW5nU3RyZWFtID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgICBTdHJlYW1DaHVuayxcbiAgICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgICA+KClcblxuICAgIGxldCBhdCA9IDBcbiAgICBzZW5kaW5nU3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKHgpID0+IHguZGF0YSxcbiAgICAgIChkLCBzZW5kKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2VuZCh7IHN0cmVhbVNlcXVlbmNlTnVtYmVyOiArK2F0IH0pLCAyMClcbiAgICAgICAgdGhpcy5kYXRhLnB1c2goZClcbiAgICAgIH0sXG4gICAgKVxuICAgIHNlbmRpbmdTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAoeCkgPT4geC5pZCxcbiAgICAgIChkLCBzZW5kKSA9PiBzZW5kKHsgc3RyZWFtU2VxdWVuY2VOdW1iZXI6IHRoaXMucmVzb2x2ZUlkKGQpIH0pLFxuICAgIClcbiAgICByZXR1cm4gc2VuZGluZ1N0cmVhbVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcmNoZXN0cmF0b3JNb2NrIHtcbiAgY29ubmVjdFN0cmVhbTogTW9ja0NsaWVudER1cGxleFN0cmVhbTxGcm9tUnVubmVyLCBUb1J1bm5lcj5cblxuICBzdHJlYW1Nc2dzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICB0b1Byb2R1Y2luZ1N0cmVhbTogKGlkOiBSZWNlaXZpbmdTdHJlYW1Db250cm9sKSA9PiB2b2lkXG4gICAgICByZWNlaXZpbmdTdHJlYW0/OiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFNlbmRpbmdTdHJlYW1Db250cm9sLCBEYXRhQ2h1bms+XG4gICAgfVxuICB9ID0ge31cblxuICBzdHJlYW1Nc2dDb3VudCA9IDBcblxuICBjb25uZWN0KCk6IE1vY2tDbGllbnREdXBsZXhTdHJlYW08RnJvbVJ1bm5lciwgVG9SdW5uZXI+IHtcbiAgICBjb25zdCBjb25uZWN0U3RyZWFtID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08RnJvbVJ1bm5lciwgVG9SdW5uZXI+KClcbiAgICAvLyBBbHdheXMgYm91bmNlIHByb2Nlc3NlZCBtc2dzIGJhY2sgdG8gdGhlIHJ1bm5lclxuICAgIGNvbm5lY3RTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAobXNnKSA9PiBtc2cucHJvY2Vzc2VkLFxuICAgICAgKHsgY2hhbm5lbCwgZ2xvYmFsU2VxdWVuY2VOdW1iZXIgfSwgc2VuZCkgPT4ge1xuICAgICAgICBzZW5kKHtcbiAgICAgICAgICBwcm9jZXNzZWQ6IHsgY2hhbm5lbCwgbG9jYWxTZXF1ZW5jZU51bWJlcjogZ2xvYmFsU2VxdWVuY2VOdW1iZXIgfSxcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgLy8gQWx3YXlzIGJvdW5jZSBkYXRhIG1zZ3MgYmFjayB0byB0aGUgcnVubmVyXG4gICAgY29ubmVjdFN0cmVhbS5yZWdpc3RlcihcbiAgICAgIChtc2cpID0+IG1zZy5tc2csXG4gICAgICAoeyBsb2NhbFNlcXVlbmNlTnVtYmVyLCBkYXRhLCBjaGFubmVsIH0sIHNlbmQpID0+IHtcbiAgICAgICAgc2VuZCh7XG4gICAgICAgICAgbXNnOiB7IGdsb2JhbFNlcXVlbmNlTnVtYmVyOiBsb2NhbFNlcXVlbmNlTnVtYmVyLCBjaGFubmVsLCBkYXRhIH0sXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIC8vIEFsd2F5cyBib3VuY2UgY2xvc2UgbXNncyBiYWNrIHRvIHRoZSBydW5uZXJcbiAgICBjb25uZWN0U3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKG1zZykgPT4gbXNnLmNsb3NlLFxuICAgICAgKGNsb3NlLCBzZW5kKSA9PiB7XG4gICAgICAgIHNlbmQoeyBjbG9zZSB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICB0aGlzLmNvbm5lY3RTdHJlYW0gPSBjb25uZWN0U3RyZWFtXG4gICAgcmV0dXJuIGNvbm5lY3RTdHJlYW1cbiAgfVxuXG4gIHNlbmRTdHJlYW1NZXNzYWdlKCk6IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgU3RyZWFtQ2h1bmssXG4gICAgUmVjZWl2aW5nU3RyZWFtQ29udHJvbFxuICA+IHtcbiAgICBjb25zdCBvdXQgPSBuZXcgTW9ja0NsaWVudER1cGxleFN0cmVhbTxcbiAgICAgIFN0cmVhbUNodW5rLFxuICAgICAgUmVjZWl2aW5nU3RyZWFtQ29udHJvbFxuICAgID4oKVxuICAgIGNvbnN0IGlkID0gdGhpcy5zdHJlYW1Nc2dDb3VudFxuICAgIHRoaXMuc3RyZWFtTXNnQ291bnQrK1xuXG4gICAgb3V0LnJlZ2lzdGVyT25jZShcbiAgICAgICh4KSA9PiB4LmlkLFxuICAgICAgKHsgY2hhbm5lbCB9LCB0b1Byb2R1Y2luZ1N0cmVhbSkgPT4ge1xuICAgICAgICB0aGlzLnN0cmVhbU1zZ3NbaWRdID0geyB0b1Byb2R1Y2luZ1N0cmVhbSB9XG5cbiAgICAgICAgLy8gTm90aWZ5IHN0cmVhbSBtZXNzYWdlXG4gICAgICAgIHRoaXMuY29ubmVjdFN0cmVhbS5zZW5kKHtcbiAgICAgICAgICBzdHJlYW1Nc2c6IHsgY2hhbm5lbCwgZ2xvYmFsU2VxdWVuY2VOdW1iZXI6IGlkIH0sXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIG91dC5yZWdpc3RlcihcbiAgICAgICh4KSA9PiB4LmRhdGEsXG4gICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAvLyBib3VuY2UgZGF0YSB0byByZWNlaXZpbmcgc3RyZWFtXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0ucmVjZWl2aW5nU3RyZWFtIS5zZW5kKGRhdGEpXG4gICAgICB9LFxuICAgIClcblxuICAgIG91dC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgLy8gZW5kIHJlY2VpdmluZyBzdHJlYW1cbiAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0ucmVjZWl2aW5nU3RyZWFtIS5lbmQoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICByZWNlaXZlU3RyZWFtTWVzc2FnZSgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgIFNlbmRpbmdTdHJlYW1Db250cm9sLFxuICAgIERhdGFDaHVua1xuICA+IHtcbiAgICBjb25zdCByZWNlaXZpbmdTdHJlYW0gPSBuZXcgTW9ja0NsaWVudER1cGxleFN0cmVhbTxcbiAgICAgIFNlbmRpbmdTdHJlYW1Db250cm9sLFxuICAgICAgRGF0YUNodW5rXG4gICAgPigpXG4gICAgbGV0IHN0cmVhbUlkID0gMFxuXG4gICAgcmVjZWl2aW5nU3RyZWFtLnJlZ2lzdGVyT25jZShcbiAgICAgICh4KSA9PiB4Lmdsb2JhbFNlcXVlbmNlTnVtYmVyLFxuICAgICAgKGlkKSA9PiB7XG4gICAgICAgIHN0cmVhbUlkID0gaWRcbiAgICAgICAgdGhpcy5zdHJlYW1Nc2dzW2lkXS5yZWNlaXZpbmdTdHJlYW0gPSByZWNlaXZpbmdTdHJlYW1cbiAgICAgICAgdGhpcy5zdHJlYW1Nc2dzW2lkXS50b1Byb2R1Y2luZ1N0cmVhbSh7IHN0cmVhbVNlcXVlbmNlTnVtYmVyOiAwIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIHJlY2VpdmluZ1N0cmVhbS5yZWdpc3RlcihcbiAgICAgICh4KSA9PiB4LnN0cmVhbVNlcXVlbmNlTnVtYmVyLFxuICAgICAgKHN0cmVhbVNlcXVlbmNlTnVtYmVyKSA9PiB7XG4gICAgICAgIC8vIEJvdW5jZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBwcm9kdWNpbmcgc3RyZWFtXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tzdHJlYW1JZF0udG9Qcm9kdWNpbmdTdHJlYW0oeyBzdHJlYW1TZXF1ZW5jZU51bWJlciB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICByZXR1cm4gcmVjZWl2aW5nU3RyZWFtXG4gIH1cblxuICBsb2dTdHJlYW0oKTogTW9ja0NsaWVudER1cGxleFN0cmVhbTxMb2dNZXNzYWdlLCBudWxsPiB7XG4gICAgY29uc3QgbG9nU3RyZWFtID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08TG9nTWVzc2FnZSwgbnVsbD4oKVxuICAgIGxvZ1N0cmVhbS5yZWdpc3RlcigoeCkgPT4geCwgY29uc29sZS5sb2cpXG4gICAgcmV0dXJuIGxvZ1N0cmVhbVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW5uZXIodXJpID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyMnKSB7XG4gIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgdHJhbnNwb3J0czogbmV3IHdpbnN0b24udHJhbnNwb3J0cy5Db25zb2xlKHtcbiAgICAgIGxldmVsOiBwcm9jZXNzLmVudlsnREVCVUcnXSB8fCAnaW5mbycsXG4gICAgfSksXG4gIH0pXG5cbiAgLy8gTW9jayB0aGUgR1JQQ1xuICBjb25zdCBjbGllbnQgPSBuZXcgT3JjaGVzdHJhdG9yTW9jaygpXG5cbiAgLy8gQ29ubmVjdCBqdXN0IGxpa2UgY2xpZW50LnRzOnN0YXJ0KClcbiAgY29uc3Qgc3RyZWFtID0gY2xpZW50LmNvbm5lY3QoKVxuICBjb25zdCB3cml0YWJsZSA9IHByb21pc2lmeShzdHJlYW0ud3JpdGUuYmluZChzdHJlYW0pKVxuXG4gIGNvbnN0IHJ1bm5lciA9IG5ldyBSdW5uZXIoXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICAgIGNsaWVudCBhcyBhbnksIC8vIFR5cGUgYXNzZXJ0aW9uIGZvciB0ZXN0aW5nXG4gICAgd3JpdGFibGUgYXMgV3JpdGFibGUsXG4gICAgdXJpLFxuICAgIGxvZ2dlcixcbiAgKVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChtc2c6IFRvUnVubmVyKSA9PiBydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2UobXNnKSlcblxuICByZXR1cm4gcnVubmVyXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvbmU8VD4oaXRlcjogQXN5bmNJdGVyYWJsZTxUPik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIHJldHVybiBpdGVtXG4gIH1cbn1cblxuY29uc3Qgc2hhcGVRdWFkcyA9IGBcbkBwcmVmaXggcmRmYzogPGh0dHBzOi8vdzNpZC5vcmcvcmRmLWNvbm5lY3QjPi5cbkBwcmVmaXggeHNkOiA8aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjPi5cbkBwcmVmaXggc2g6IDxodHRwOi8vd3d3LnczLm9yZy9ucy9zaGFjbCM+LlxuWyBdIGEgc2g6Tm9kZVNoYXBlO1xuICBzaDp0YXJnZXRDbGFzcyA8SnNQcm9jZXNzb3JTaGFwZT47XG4gIHNoOnByb3BlcnR5IFtcbiAgICBzaDpwYXRoIHJkZmM6ZW50cnlwb2ludDtcbiAgICBzaDpuYW1lIFwibG9jYXRpb25cIjtcbiAgICBzaDptaW5Db3VudCAxO1xuICAgIHNoOm1heENvdW50IDE7XG4gICAgc2g6ZGF0YXR5cGUgeHNkOnN0cmluZztcbiAgXSwgW1xuICAgIHNoOnBhdGggcmRmYzpmaWxlO1xuICAgIHNoOm5hbWUgXCJmaWxlXCI7XG4gICAgc2g6bWluQ291bnQgMTtcbiAgICBzaDptYXhDb3VudCAxO1xuICAgIHNoOmRhdGF0eXBlIHhzZDpzdHJpbmc7XG4gIF0sIFtcbiAgICBzaDpwYXRoIHJkZmM6Y2xhc3M7XG4gICAgc2g6bmFtZSBcImNsYXp6XCI7XG4gICAgc2g6bWF4Q291bnQgMTtcbiAgICBzaDpkYXRhdHlwZSB4c2Q6c3RyaW5nO1xuICBdLlxuYFxuZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IHtcbiAgbG9jYXRpb246IHN0cmluZ1xuICBmaWxlOiBzdHJpbmdcbiAgY2xheno6IHN0cmluZ1xufVxuXG5jb25zdCBPV0wgPSBjcmVhdGVUZXJtTmFtZXNwYWNlKCdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCMnLCAnaW1wb3J0cycpXG5jb25zdCBwcm9jZXNzb3JTaGFwZXMgPSBleHRyYWN0U2hhcGVzKG5ldyBQYXJzZXIoKS5wYXJzZShzaGFwZVF1YWRzKSlcbmNvbnN0IGJhc2UgPSAnaHR0cHM6Ly93M2lkLm9yZy9yZGYtY29ubmVjdCMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBvcnRGaWxlKFxuICBmaWxlOiBzdHJpbmcsXG4gIGNvbnRlbnQ/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFF1YWRbXT4ge1xuICBjb25zdCBkb25lID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBxdWFkczogUXVhZFtdID0gW11cbiAgY29uc3QgdG9kbzogVVJMW10gPSBbXVxuXG4gIGNvbnN0IHBhcnNlID0gKGNvbnRlbnQ6IHN0cmluZywgYmFzZUlSSTogVVJMKSA9PiB7XG4gICAgZG9uZS5hZGQoYmFzZUlSSS50b1N0cmluZygpKVxuXG4gICAgY29uc3QgZXh0cmFzID0gbmV3IFBhcnNlcih7IGJhc2VJUkk6IGJhc2VJUkkudG9TdHJpbmcoKSB9KS5wYXJzZShjb250ZW50KVxuXG4gICAgZm9yIChjb25zdCBvIG9mIGV4dHJhc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC5zdWJqZWN0LnZhbHVlID09PSBiYXNlSVJJPy50b1N0cmluZygpICYmXG4gICAgICAgICAgeC5wcmVkaWNhdGUuZXF1YWxzKE9XTC5pbXBvcnRzKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHgpID0+IHgub2JqZWN0LnZhbHVlKSkge1xuICAgICAgdG9kby5wdXNoKG5ldyBVUkwobykpXG4gICAgfVxuXG4gICAgcXVhZHMucHVzaCguLi5leHRyYXMpXG4gIH1cblxuICBpZiAoY29udGVudCkge1xuICAgIHBhcnNlKGNvbnRlbnQsIG5ldyBVUkwoJ2ZpbGU6Ly8nICsgZmlsZSkpXG4gIH0gZWxzZSB7XG4gICAgdG9kby5wdXNoKG5ldyBVUkwoJ2ZpbGU6Ly8nICsgZmlsZSkpXG4gIH1cblxuICBsZXQgaXRlbSA9IHRvZG8ucG9wKClcbiAgd2hpbGUgKGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChkb25lLmhhcyhpdGVtLnRvU3RyaW5nKCkpKSB7XG4gICAgICBpdGVtID0gdG9kby5wb3AoKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm90b2NvbCAhPT0gJ2ZpbGU6Jykge1xuICAgICAgdGhyb3cgJ05vIHN1cHBvcnRlZCBwcm90b2NvbCAnICsgaXRlbS5wcm90b2NvbFxuICAgIH1cbiAgICBjb25zdCB0eHQgPSBhd2FpdCByZWFkRmlsZShpdGVtLnBhdGhuYW1lLCB7IGVuY29kaW5nOiAndXRmOCcgfSlcbiAgICBwYXJzZSh0eHQsIGl0ZW0pXG5cbiAgICBpdGVtID0gdG9kby5wb3AoKVxuICB9XG5cbiAgcmV0dXJuIHF1YWRzXG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGdyYWR1YWxseSB0ZXN0IHlvdXIgcHJvY2Vzc29ycy5cbiAqIFBvc3NpYmxlIGZsb3c6XG4gKiAtIGltcG9ydCB0aGUgSnNSdW5uZXIgaW5kZXggZmlsZVxuICogLSBpbXBvcnQgeW91ciBwcm9jZXNzb3IgY29uZmlnIGZpbGVcbiAqIC0gdGVzdCBpZiB0aGUgY29uZmlnIGlzIGFzIHlvdSB3b3VsZCBleHBlY3QgKGZyb20gZ2V0Q29uZmlnKCkpXG4gKiAtIGltcG9ydCB5b3VyIHByb2Nlc3NvciBkZWZpbml0aW9uIChpbmxpbmUpXG4gKiAtIGJ1aWxkIHlvdXIgcHJvY2Vzc29yXG4gKiAtIHRlc3QgeW91ciBwcm9jZXNzb3JcbiAqL1xuZXhwb3J0IGNsYXNzIFByb2NIZWxwZXI8VCBleHRlbmRzIFByb2Nlc3Nvcjx1bmtub3duPj4ge1xuICBydW5uZXI6IFJ1bm5lclxuICBxdWFkczogUXVhZFtdID0gW11cbiAgY29uZmlnOiBDb25maWdUeXBlXG4gIHByb2M6IEZ1bGxQcm9jPFQ+XG5cbiAgY29uc3RydWN0b3IodXJpPzogc3RyaW5nKSB7XG4gICAgdGhpcy5ydW5uZXIgPSBjcmVhdGVSdW5uZXIodXJpKVxuICB9XG5cbiAgYXN5bmMgaW1wb3J0SW5saW5lKGJhc2VJUkk6IHN0cmluZywgY29uZmlnOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb25maWdRdWFkcyA9IGF3YWl0IGltcG9ydEZpbGUoYmFzZUlSSSwgY29uZmlnKVxuICAgIHRoaXMucXVhZHMucHVzaCguLi5jb25maWdRdWFkcylcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEZpbGUoZmlsZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnUXVhZHMgPSBhd2FpdCBpbXBvcnRGaWxlKGZpbGUpXG4gICAgdGhpcy5xdWFkcy5wdXNoKC4uLmNvbmZpZ1F1YWRzKVxuICB9XG5cbiAgZ2V0Q29uZmlnKHR5OiBzdHJpbmcgfCBOYW1lZE5vZGUpOiBDb25maWdUeXBlIHtcbiAgICBjb25zdCBpZCA9IHR5cGVvZiB0eSA9PT0gJ3N0cmluZycgPyBuZXcgTmFtZWROb2RlKGJhc2UgKyB0eSkgOiB0eVxuICAgIGNvbnN0IHByb2NDb25maWcgPSA8Q29uZmlnVHlwZT5wcm9jZXNzb3JTaGFwZXMubGVuc2VzW1xuICAgICAgJ0pzUHJvY2Vzc29yU2hhcGUnXG4gICAgXS5leGVjdXRlKHtcbiAgICAgIGlkLFxuICAgICAgcXVhZHM6IHRoaXMucXVhZHMsXG4gICAgfSlcblxuICAgIHRoaXMuY29uZmlnID0gcHJvY0NvbmZpZ1xuICAgIHJldHVybiBwcm9jQ29uZmlnXG4gIH1cblxuICBhc3luYyBnZXRQcm9jZXNzb3IoXG4gICAgdXJpOiBzdHJpbmcgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4gICk6IFByb21pc2U8RnVsbFByb2M8VD4+IHtcbiAgICBhd2FpdCB0aGlzLnJ1bm5lci5oYW5kbGVPcmNoTWVzc2FnZSh7XG4gICAgICBwaXBlbGluZTogbmV3IE4zV3JpdGVyKCkucXVhZHNUb1N0cmluZyh0aGlzLnF1YWRzKSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucnVubmVyLmNyZWF0ZVByb2Nlc3NvcjxUPih7XG4gICAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKSxcbiAgICAgIGFyZ3VtZW50czogJycsXG4gICAgICB1cmksXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgUHJvY0hlbHBlcn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2NJbmxpbmU8VCBleHRlbmRzIFByb2Nlc3Nvcjx1bmtub3duPj4oXG4gIGNvbmZpZzogc3RyaW5nLFxuICB0eTogc3RyaW5nLFxuICBydW5uZXI6IFJ1bm5lcixcbiAgYmFzZUlSSTogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShiYXNlSVJJLCBjb25maWcpXG4gIGNvbnN0IHByb2NDb25maWcgPSA8UHJvY0NvbmZpZz5wcm9jZXNzb3JTaGFwZXMubGVuc2VzW1xuICAgICdKc1Byb2Nlc3NvclNoYXBlJ1xuICBdLmV4ZWN1dGUoe1xuICAgIGlkOiBuZXcgTmFtZWROb2RlKGJhc2UgKyB0eSksXG4gICAgcXVhZHM6IGNvbmZpZ1F1YWRzLFxuICB9KVxuXG4gIGF3YWl0IHJ1bm5lci5oYW5kbGVPcmNoTWVzc2FnZSh7XG4gICAgcGlwZWxpbmU6IG5ldyBOM1dyaXRlcigpLnF1YWRzVG9TdHJpbmcoY29uZmlnUXVhZHMpLFxuICB9KVxuXG4gIGNvbnN0IHByb2MgPSBhd2FpdCBydW5uZXIuYWRkUHJvY2Vzc29yPFQ+KHtcbiAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KHByb2NDb25maWcpLFxuICAgIGFyZ3VtZW50czogJycsXG4gICAgdXJpLFxuICB9KVxuXG4gIHJldHVybiBwcm9jXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBQcm9jSGVscGVyfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJvYzxUIGV4dGVuZHMgUHJvY2Vzc29yPHVua25vd24+PihcbiAgY29uZmlnOiBzdHJpbmcsXG4gIHR5OiBzdHJpbmcsXG4gIHJ1bm5lcjogUnVubmVyLFxuICBjb25maWdMb2NhdGlvbjogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShjb25maWdMb2NhdGlvbilcbiAgY29uc3QgcHJvY0NvbmZpZyA9IHByb2Nlc3NvclNoYXBlcy5sZW5zZXNbJ0pzUHJvY2Vzc29yU2hhcGUnXS5leGVjdXRlKHtcbiAgICBpZDogbmV3IE5hbWVkTm9kZShiYXNlICsgdHkpLFxuICAgIHF1YWRzOiBjb25maWdRdWFkcyxcbiAgfSlcblxuICBjb25maWdRdWFkcy5wdXNoKC4uLm5ldyBQYXJzZXIoKS5wYXJzZShjb25maWcpKVxuICBhd2FpdCBydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2Uoe1xuICAgIHBpcGVsaW5lOiBuZXcgTjNXcml0ZXIoKS5xdWFkc1RvU3RyaW5nKGNvbmZpZ1F1YWRzKSxcbiAgfSlcblxuICBjb25zdCBwcm9jID0gYXdhaXQgcnVubmVyLmFkZFByb2Nlc3NvcjxUPih7XG4gICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShwcm9jQ29uZmlnKSxcbiAgICBhcmd1bWVudHM6ICcnLFxuICAgIHVyaSxcbiAgfSlcblxuICByZXR1cm4gcHJvY1xufVxuIl19