@rdfc/js-runner 3.0.1 → 3.0.2

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.
@@ -0,0 +1,24 @@
1
+ name: Build and tests with Node.js
2
+
3
+ on:
4
+ push:
5
+ branches: [main, renovate/**]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build-and-test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout
14
+ uses: actions/checkout@v5
15
+
16
+ - name: Setup Node.js
17
+ uses: actions/setup-node@v6
18
+ with:
19
+ node-version: 24.x
20
+ cache: 'npm'
21
+
22
+ - run: npm i
23
+ - run: npm run build
24
+ - run: npm run test
package/lib/runner.d.ts CHANGED
@@ -18,6 +18,7 @@ export declare class Runner {
18
18
  private readonly processors;
19
19
  private readonly processorTransforms;
20
20
  constructor(client: RunnerClient, notifyOrchestrator: Writable, uri: string, logger: Logger);
21
+ createProcessor<P extends Proc<unknown>>(proc: Processor): Promise<FullProc<P>>;
21
22
  addProcessor<P extends Proc<unknown>>(proc: Processor): Promise<FullProc<P>>;
22
23
  start(): Promise<void>;
23
24
  createWriter(uri: Term): Writer;
package/lib/runner.js CHANGED
@@ -24,7 +24,7 @@ export class Runner {
24
24
  this.uri = uri;
25
25
  this.logger = logger;
26
26
  }
27
- async addProcessor(proc) {
27
+ async createProcessor(proc) {
28
28
  const procLogger = createLogger({
29
29
  transports: [
30
30
  new RpcTransport({
@@ -36,7 +36,7 @@ export class Runner {
36
36
  const ty = this.quads
37
37
  .filter((x) => x.subject.value === proc.uri && x.predicate.equals(RDF.terms.type))
38
38
  .map((x) => x.object.value);
39
- this.logger.info('parsing ' + proc.uri + ' type ' + ty);
39
+ this.logger.info(`Parsing processor '${proc.uri}' of type(s) [${ty.join(', ')}]`);
40
40
  const args = this.shapes.lenses[RDFL.TypedExtract].execute({
41
41
  id: new NamedNode(proc.uri),
42
42
  quads: this.quads,
@@ -45,8 +45,12 @@ export class Runner {
45
45
  const jsProgram = await import(config.file);
46
46
  const clazz = jsProgram[config.clazz || 'default'];
47
47
  const instance = new clazz(args, procLogger);
48
+ return instance;
49
+ }
50
+ async addProcessor(proc) {
51
+ const instance = await this.createProcessor(proc);
48
52
  await instance.init();
49
- this.logger.info('inited ' + proc.uri + ' type ' + ty);
53
+ this.logger.info(`Initiated processor '${proc.uri}'`);
50
54
  this.processors.push(instance);
51
55
  this.processorTransforms.push(instance.transform());
52
56
  await this.notifyOrchestrator({ initialized: { uri: proc.uri } });
@@ -158,4 +162,4 @@ export class Runner {
158
162
  }
159
163
  }
160
164
  }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2pELE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLFNBQVMsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBUSxLQUFLLEVBQUUsYUFBYSxFQUFVLE1BQU0sVUFBVSxDQUFBO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRy9FLE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUNwQyxxQ0FBcUMsRUFDckMsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUNULGNBQWMsRUFDZCxhQUFhLEVBQ2IsUUFBUSxFQUNSLFlBQVksRUFDWixVQUFVLENBQ1gsQ0FBQTtBQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FDMUIsK0JBQStCLEVBQy9CLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ1IsUUFBUSxFQUNSLFFBQVEsQ0FDVCxDQUFBO0FBV0QsTUFBTSxPQUFPLE1BQU07SUFDQSxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxNQUFNLENBQWM7SUFDcEIsa0JBQWtCLENBQVU7SUFDNUIsTUFBTSxDQUFRO0lBQ3ZCLE1BQU0sQ0FBUTtJQUNkLEtBQUssR0FBVyxFQUFFLENBQUE7SUFFVCxHQUFHLENBQVE7SUFFWCxVQUFVLEdBQW9CLEVBQUUsQ0FBQTtJQUNoQyxtQkFBbUIsR0FBdUIs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ZW50IjpbImltcG9ydCB7XG4gIENsb3NlLFxuICBGcm9tUnVubmVyLFxuICBQcm9jZXNzb3IsXG4gIFJ1bm5lckNsaWVudCxcbiAgVG9SdW5uZXIsXG4gIExvY2FsQWNrLFxuICBSZWNlaXZpbmdNZXNzYWdlLFxuICBSZWNlaXZpbmdTdHJlYW1NZXNzYWdlLFxufSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB7IFJlYWRlciwgUmVhZGVySW5zdGFuY2UgfSBmcm9tICcuL3JlYWRlcidcbmltcG9ydCB7IFdyaXRlciwgV3JpdGVySW5zdGFuY2UgfSBmcm9tICcuL3dyaXRlcidcbmltcG9ydCB7IFByb2Nlc3NvciBhcyBQcm9jIH0gZnJvbSAnLi9wcm9jZXNzb3InXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIExvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5cbmltcG9ydCB7IFJwY1RyYW5zcG9ydCB9IGZyb20gJy4vbG9nZ2VyJ1xuaW1wb3J0IHsgQ29udCwgZW1wdHksIGV4dHJhY3RTaGFwZXMsIFNoYXBlcyB9IGZyb20gJ3JkZi1sZW5zJ1xuaW1wb3J0IHsgTmFtZWROb2RlLCBQYXJzZXIgfSBmcm9tICduMydcbmltcG9ydCB7IGNyZWF0ZU5hbWVzcGFjZSwgY3JlYXRlVXJpQW5kVGVybU5hbWVzcGFjZSwgUkRGIH0gZnJvbSAnQHRyZWVjZy90eXBlcydcbmltcG9ydCB7IFF1YWQsIFRlcm0gfSBmcm9tICdAcmRmanMvdHlwZXMnXG5cbmNvbnN0IFJERkwgPSBjcmVhdGVVcmlBbmRUZXJtTmFtZXNwYWNlKFxuICAnaHR0cHM6Ly93M2lkLm9yZy9yZGYtbGVucy9vbnRvbG9neSMnLFxuICAnQ0JEJyxcbiAgJ1BhdGgnLFxuICAnUGF0aExlbnMnLFxuICAnQ29udGV4dCcsXG4gICdUeXBlZEV4dHJhY3QnLFxuICAnRW52VmFyaWFibGUnLFxuICAnZW52S2V5JyxcbiAgJ2VudkRlZmF1bHQnLFxuICAnZGF0YXR5cGUnLFxuKVxuXG5jb25zdCBSREZDID0gY3JlYXRlTmFtZXNwYWNlKFxuICAnaHR0cHM6Ly93M2lkLm9yZy9yZGYtY29ubmVjdCMnLFxuICAoeCkgPT4geCxcbiAgJ1JlYWRlcicsXG4gICdXcml0ZXInLFxuKVxuXG5leHBvcnQgdHlwZSBXcml0YWJsZSA9IChtc2c6IEZyb21SdW5uZXIpID0+IFByb21pc2U8dW5rbm93bj5cblxudHlwZSBQcm9jZXNzb3JDb25maWcgPSB7XG4gIGxvY2F0aW9uOiBzdHJpbmdcbiAgZmlsZTogc3RyaW5nXG4gIGNsYXp6Pzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEZ1bGxQcm9jPEM+ID0gQyBleHRlbmRzIFByb2M8aW5mZXIgVD4gPyBUICYgQyA6IG5ldmVyXG5leHBvcnQgY2xhc3MgUnVubmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZWFkZXJzOiB7IFt1cmk6IHN0cmluZ106IFJlYWRlckluc3RhbmNlIH0gPSB7fVxuICBwcml2YXRlIHJlYWRvbmx5IHdyaXRlcnM6IHsgW3VyaTogc3RyaW5nXTogV3JpdGVySW5zdGFuY2UgfSA9IHt9XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBSdW5uZXJDbGllbnRcbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZnlPcmNoZXN0cmF0b3I6IFdyaXRhYmxlXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXJcbiAgcHJpdmF0ZSBzaGFwZXM6IFNoYXBlc1xuICBwcml2YXRlIHF1YWRzOiBRdWFkW10gPSBbXVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXJpOiBzdHJpbmdcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NvcnM6IFByb2M8dW5rbm93bj5bXSA9IFtdXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc29yVHJhbnNmb3JtczogUHJvbWlzZTx1bmtub3duPltdID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IFJ1bm5lckNsaWVudCxcbiAgICBub3RpZnlPcmNoZXN0cmF0b3I6IFdyaXRhYmxlLFxuICAgIHVyaTogc3RyaW5nLFxuICAgIGxvZ2dlcjogTG9nZ2VyLFxuICApIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yID0gbm90aWZ5T3JjaGVzdHJhdG9yXG4gICAgdGhpcy51cmkgPSB1cmlcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlclxuICB9XG5cbiAgYXN5bmMgYWRkUHJvY2Vzc29yPFAgZXh0ZW5kcyBQcm9jPHVua25vd24+PihcbiAgICBwcm9jOiBQcm9jZXNzb3IsXG4gICk6IFByb21pc2U8RnVsbFByb2M8UD4+IHtcbiAgICBjb25zdCBwcm9jTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHtcbiAgICAgIHRyYW5zcG9ydHM6IFtcbiAgICAgICAgbmV3IFJwY1RyYW5zcG9ydCh7XG4gICAgICAgICAgZW50aXRpZXM6IFtwcm9jLnVyaSwgdGhpcy51cmldLFxuICAgICAgICAgIHN0cmVhbTogdGhpcy5jbGllbnQubG9nU3RyZWFtKCgpID0+IHt9KSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pXG5cbiAgICBjb25zdCB0eSA9IHRoaXMucXVhZHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHguc3ViamVjdC52YWx1ZSA9PT0gcHJvYy51cmkgJiYgeC5wcmVkaWNhdGUuZXF1YWxzKFJERi50ZXJtcy50eXBlKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHgpID0+IHgub2JqZWN0LnZhbHVlKVxuXG4gICAgdGhpcy5sb2dnZXIuaW5mbygncGFyc2luZyAnICsgcHJvYy51cmkgKyAnIHR5cGUgJyArIHR5KVxuICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnNoYXBlcy5sZW5zZXNbUkRGTC5UeXBlZEV4dHJhY3RdLmV4ZWN1dGUoe1xuICAgICAgaWQ6IG5ldyBOYW1lZE5vZGUocHJvYy51cmkpLFxuICAgICAgcXVhZHM6IHRoaXMucXVhZHMsXG4gICAgfSlcblxuICAgIGNvbnN0IGNvbmZpZzogUHJvY2Vzc29yQ29uZmlnID0gSlNPTi5wYXJzZShwcm9jLmNvbmZpZylcbiAgICBjb25zdCBqc1Byb2dyYW0gPSBhd2FpdCBpbXBvcnQoY29uZmlnLmZpbGUpXG4gICAgY29uc3QgY2xhenogPSBqc1Byb2dyYW1bY29uZmlnLmNsYXp6IHx8ICdkZWZhdWx0J11cbiAgICBjb25zdCBpbnN0YW5jZTogUHJvYzx1bmtub3duPiA9IG5ldyBjbGF6eihhcmdzLCBwcm9jTG9nZ2VyKVxuICAgIGF3YWl0IGluc3RhbmNlLmluaXQoKVxuXG4gICAgdGhpcy5sb2dnZXIuaW5mbygnaW5pdGVkICcgKyBwcm9jLnVyaSArICcgdHlwZSAnICsgdHkpXG5cbiAgICB0aGlzLnByb2Nlc3NvcnMucHVzaChpbnN0YW5jZSlcbiAgICB0aGlzLnByb2Nlc3NvclRyYW5zZm9ybXMucHVzaChpbnN0YW5jZS50cmFuc2Zvcm0oKSlcblxuICAgIGF3YWl0IHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yKHsgaW5pdGlhbGl6ZWQ6IHsgdXJpOiBwcm9jLnVyaSB9IH0pXG5cbiAgICByZXR1cm4gPEZ1bGxQcm9jPFA+Pmluc3RhbmNlXG4gIH1cblxuICBhc3luYyBzdGFydCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wcm9jZXNzb3JzLm1hcCgoeCkgPT4geC5wcm9kdWNlKCkpKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wcm9jZXNzb3JUcmFuc2Zvcm1zKVxuICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignU3RhcnQgZmFpbGVkOiAnICsgSlNPTi5zdHJpbmdpZnkoZXgpKVxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZVdyaXRlcih1cmk6IFRlcm0pOiBXcml0ZXIge1xuICAgIGNvbnN0IGlkID0gdXJpLnZhbHVlXG5cbiAgICBpZiAodGhpcy53cml0ZXJzW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy53cml0ZXJzW2lkXVxuICAgIH1cbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgV3JpdGVySW5zdGFuY2UoXG4gICAgICBpZCxcbiAgICAgIHRoaXMuY2xpZW50LFxuICAgICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3IsXG4gICAgICB0aGlzLnVyaSxcbiAgICAgIHRoaXMubG9nZ2VyLFxuICAgIClcbiAgICB0aGlzLndyaXRlcnNbaWRdID0gd3JpdGVyXG4gICAgcmV0dXJuIHdyaXRlclxuICB9XG5cbiAgY3JlYXRlUmVhZGVyKHVyaTogVGVybSk6IFJlYWRlciB7XG4gICAgY29uc3QgaWRzID0gdXJpLnZhbHVlXG5cbiAgICBpZiAodGhpcy5yZWFkZXJzW2lkc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVhZGVyc1tpZHNdXG4gICAgfVxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBSZWFkZXJJbnN0YW5jZShcbiAgICAgIGlkcyxcbiAgICAgIHRoaXMuY2xpZW50LFxuICAgICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3IsXG4gICAgICB0aGlzLmxvZ2dlcixcbiAgICApXG4gICAgdGhpcy5yZWFkZXJzW2lkc10gPSByZWFkZXJcbiAgICByZXR1cm4gcmVhZGVyXG4gIH1cblxuICBhc3luYyBoYW5kbGVPcmNoTWVzc2FnZShtc2c6IFRvUnVubmVyKSB7XG4gICAgaWYgKG1zZy5tc2cpIHtcbiAgICAgIHRoaXMuaGFuZGxlTXNnKG1zZy5tc2cpXG4gICAgfVxuXG4gICAgaWYgKG1zZy5zdHJlYW1Nc2cpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlU3RyZWFtTXNnKG1zZy5zdHJlYW1Nc2cpXG4gICAgfVxuXG4gICAgaWYgKG1zZy5jbG9zZSkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDbG9zZShtc2cuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKG1zZy5waXBlbGluZSkge1xuICAgICAgdGhpcy5oYW5kbGVQaXBlbGluZShtc2cucGlwZWxpbmUpXG4gICAgfVxuXG4gICAgaWYgKG1zZy5wcm9jZXNzZWQpIHtcbiAgICAgIHRoaXMuaGFuZGxlUHJvY2Vzc2VkKG1zZy5wcm9jZXNzZWQpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDbG9zZShjbG9zZTogQ2xvc2UpIHtcbiAgICBjb25zdCB1cmkgPSBjbG9zZS5jaGFubmVsXG4gICAgY29uc3QgciA9IHRoaXMucmVhZGVyc1t1cmldXG5cbiAgICBsZXQgY2xvc2VkID0gZmFsc2VcbiAgICBpZiAocikge1xuICAgICAgci5jbG9zZSgpXG4gICAgICBjbG9zZWQgPSB0cnVlXG4gICAgfVxuICAgIGNvbnN0IHcgPSB0aGlzLndyaXRlcnNbdXJpXVxuICAgIGlmICh3KSB7XG4gICAgICBjbG9zZWQgPSB0cnVlXG4gICAgICBhd2FpdCB3LmNsb3NlKHRydWUpXG4gICAgfVxuXG4gICAgaWYgKCFjbG9zZWQpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgUmVjZWl2ZWQgYSBjbG9zZSBldmVudCBmb3IgY2hhbm5lbCAke3VyaX0sIGJ1dCBuZWl0aGVyIHJlYWRlciBub3Igd3JpdGVyIGlzIHByZXNlbnQuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBpcGVsaW5lKHBpcGVsaW5lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVhZHMgPSBuZXcgUGFyc2VyKCkucGFyc2UocGlwZWxpbmUpXG4gICAgICB0aGlzLnNoYXBlcyA9IGV4dHJhY3RTaGFwZXMoXG4gICAgICAgIHF1YWRzLFxuICAgICAgICB7XG4gICAgICAgICAgW1JERkMuUmVhZGVyXTogKHg6IENvbnQpID0+IHRoaXMuY3JlYXRlUmVhZGVyKHguaWQpLFxuICAgICAgICAgIFtSREZDLldyaXRlcl06ICh4OiBDb250KSA9PiB0aGlzLmNyZWF0ZVdyaXRlcih4LmlkKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFtSREZDLlJlYWRlcl06IGVtcHR5PENvbnQ+KCksXG4gICAgICAgICAgW1JERkMuV3JpdGVyXTogZW1wdHk8Q29udD4oKSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIHRoaXMucXVhZHMgPSBxdWFkc1xuICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignUGlwZWxpbmUgZmFpbGVkOiAnICsgSlNPTi5zdHJpbmdpZnkoZXgpKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXNnKG1zZzogUmVjZWl2aW5nTWVzc2FnZSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdIYW5kbGluZyBkYXRhIG1zZyBmb3IgJyArIG1zZy5jaGFubmVsKVxuICAgIGNvbnN0IHIgPSB0aGlzLnJlYWRlcnNbbXNnLmNoYW5uZWxdXG5cbiAgICBpZiAocikge1xuICAgICAgci5oYW5kbGVNc2cobXNnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkIG1lc3NhZ2UgZm9yIGNoYW5uZWwgJHttc2cuY2hhbm5lbH0sIGJ1dCBubyByZWFkZXIgd2FzIHByZXNlbnQuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbU1zZyhzdHJlYW1Nc2c6IFJlY2VpdmluZ1N0cmVhbU1lc3NhZ2UpIHtcbiAgICBjb25zdCByID0gdGhpcy5yZWFkZXJzW3N0cmVhbU1zZy5jaGFubmVsXVxuXG4gICAgaWYgKHIpIHtcbiAgICAgIGF3YWl0IHIuaGFuZGxlU3RyZWFtaW5nTWVzc2FnZShzdHJlYW1Nc2cpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgUmVjZWl2ZWQgc3RyZWFtIG1lc3NhZ2UgZm9yIGNoYW5uZWwgJHtzdHJlYW1Nc2cuY2hhbm5lbH0sIGJ1dCBubyByZWFkZXIgd2FzIHByZXNlbnQuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVByb2Nlc3NlZChwcm9jZXNzZWQ6IExvY2FsQWNrKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gdGhpcy53cml0ZXJzW3Byb2Nlc3NlZC5jaGFubmVsXVxuICAgIGlmICh3cml0ZXIpIHtcbiAgICAgIHdyaXRlci5oYW5kbGVkKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCBwcm9jZXNzZWQgbWVzc2FnZSBmb3IgY2hhbm5lbCAke3Byb2Nlc3NlZC5jaGFubmVsfSwgYnV0IG5vIHdyaXRlciB3YXMgcHJlc2VudC5gLFxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIl19
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2pELE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLFNBQVMsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBUSxLQUFLLEVBQUUsYUFBYSxFQUFVLE1BQU0sVUFBVSxDQUFBO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRy9FLE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUNwQyxxQ0FBcUMsRUFDckMsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsU0FBUyxFQUNULGNBQWMsRUFDZCxhQUFhLEVBQ2IsUUFBUSxFQUNSLFlBQVksRUFDWixVQUFVLENBQ1gsQ0FBQTtBQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FDMUIsK0JBQStCLEVBQy9CLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ1IsUUFBUSxFQUNSLFFBQVEsQ0FDVCxDQUFBO0FBV0QsTUFBTSxPQUFPLE1BQU07SUFDQSxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxPQUFPLEdBQXNDLEVBQUUsQ0FBQTtJQUMvQyxNQUFNLENBQWM7SUFDcEIsa0JBQWtCLENBQVU7SUFDNUIsTUFBTSxDQUFRO0lBQ3ZCLE1BQU0sQ0FBUTtJQUNkLEtBQUssR0FBVyxFQUFFLENBQUE7SUFFVCxHQUFHLENBQVE7SUFFWCxVQUFVLEdBQW9CLEVBQUUsQ0FBQTtJQUNoQyxtQkFBbUIsR0FBdUIs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QzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwwQ0FBMEMsU0FBUyxDQUFDLE9BQU8sOEJBQThCLENBQzFGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2xvc2UsXG4gIEZyb21SdW5uZXIsXG4gIFByb2Nlc3NvcixcbiAgUnVubmVyQ2xpZW50LFxuICBUb1J1bm5lcixcbiAgTG9jYWxBY2ssXG4gIFJlY2VpdmluZ01lc3NhZ2UsXG4gIFJlY2VpdmluZ1N0cmVhbU1lc3NhZ2UsXG59IGZyb20gJ0ByZGZjL3Byb3RvJ1xuaW1wb3J0IHsgUmVhZGVyLCBSZWFkZXJJbnN0YW5jZSB9IGZyb20gJy4vcmVhZGVyJ1xuaW1wb3J0IHsgV3JpdGVyLCBXcml0ZXJJbnN0YW5jZSB9IGZyb20gJy4vd3JpdGVyJ1xuaW1wb3J0IHsgUHJvY2Vzc29yIGFzIFByb2MgfSBmcm9tICcuL3Byb2Nlc3NvcidcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcblxuaW1wb3J0IHsgUnBjVHJhbnNwb3J0IH0gZnJvbSAnLi9sb2dnZXInXG5pbXBvcnQgeyBDb250LCBlbXB0eSwgZXh0cmFjdFNoYXBlcywgU2hhcGVzIH0gZnJvbSAncmRmLWxlbnMnXG5pbXBvcnQgeyBOYW1lZE5vZGUsIFBhcnNlciB9IGZyb20gJ24zJ1xuaW1wb3J0IHsgY3JlYXRlTmFtZXNwYWNlLCBjcmVhdGVVcmlBbmRUZXJtTmFtZXNwYWNlLCBSREYgfSBmcm9tICdAdHJlZWNnL3R5cGVzJ1xuaW1wb3J0IHsgUXVhZCwgVGVybSB9IGZyb20gJ0ByZGZqcy90eXBlcydcblxuY29uc3QgUkRGTCA9IGNyZWF0ZVVyaUFuZFRlcm1OYW1lc3BhY2UoXG4gICdodHRwczovL3czaWQub3JnL3JkZi1sZW5zL29udG9sb2d5IycsXG4gICdDQkQnLFxuICAnUGF0aCcsXG4gICdQYXRoTGVucycsXG4gICdDb250ZXh0JyxcbiAgJ1R5cGVkRXh0cmFjdCcsXG4gICdFbnZWYXJpYWJsZScsXG4gICdlbnZLZXknLFxuICAnZW52RGVmYXVsdCcsXG4gICdkYXRhdHlwZScsXG4pXG5cbmNvbnN0IFJERkMgPSBjcmVhdGVOYW1lc3BhY2UoXG4gICdodHRwczovL3czaWQub3JnL3JkZi1jb25uZWN0IycsXG4gICh4KSA9PiB4LFxuICAnUmVhZGVyJyxcbiAgJ1dyaXRlcicsXG4pXG5cbmV4cG9ydCB0eXBlIFdyaXRhYmxlID0gKG1zZzogRnJvbVJ1bm5lcikgPT4gUHJvbWlzZTx1bmtub3duPlxuXG50eXBlIFByb2Nlc3NvckNvbmZpZyA9IHtcbiAgbG9jYXRpb246IHN0cmluZ1xuICBmaWxlOiBzdHJpbmdcbiAgY2xheno/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRnVsbFByb2M8Qz4gPSBDIGV4dGVuZHMgUHJvYzxpbmZlciBUPiA/IFQgJiBDIDogbmV2ZXJcbmV4cG9ydCBjbGFzcyBSdW5uZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWRlcnM6IHsgW3VyaTogc3RyaW5nXTogUmVhZGVySW5zdGFuY2UgfSA9IHt9XG4gIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVyczogeyBbdXJpOiBzdHJpbmddOiBXcml0ZXJJbnN0YW5jZSB9ID0ge31cbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IFJ1bm5lckNsaWVudFxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGVcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlclxuICBwcml2YXRlIHNoYXBlczogU2hhcGVzXG4gIHByaXZhdGUgcXVhZHM6IFF1YWRbXSA9IFtdXG5cbiAgcHJpdmF0ZSByZWFkb25seSB1cmk6IHN0cmluZ1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc29yczogUHJvYzx1bmtub3duPltdID0gW11cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzb3JUcmFuc2Zvcm1zOiBQcm9taXNlPHVua25vd24+W10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogUnVubmVyQ2xpZW50LFxuICAgIG5vdGlmeU9yY2hlc3RyYXRvcjogV3JpdGFibGUsXG4gICAgdXJpOiBzdHJpbmcsXG4gICAgbG9nZ2VyOiBMb2dnZXIsXG4gICkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ub3RpZnlPcmNoZXN0cmF0b3IgPSBub3RpZnlPcmNoZXN0cmF0b3JcbiAgICB0aGlzLnVyaSA9IHVyaVxuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyXG4gIH1cblxuICBhc3luYyBjcmVhdGVQcm9jZXNzb3I8UCBleHRlbmRzIFByb2M8dW5rbm93bj4+KFxuICAgIHByb2M6IFByb2Nlc3NvcixcbiAgKTogUHJvbWlzZTxGdWxsUHJvYzxQPj4ge1xuICAgIGNvbnN0IHByb2NMb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgICAgdHJhbnNwb3J0czogW1xuICAgICAgICBuZXcgUnBjVHJhbnNwb3J0KHtcbiAgICAgICAgICBlbnRpdGllczogW3Byb2MudXJpLCB0aGlzLnVyaV0sXG4gICAgICAgICAgc3RyZWFtOiB0aGlzLmNsaWVudC5sb2dTdHJlYW0oKCkgPT4ge30pLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIGNvbnN0IHR5ID0gdGhpcy5xdWFkc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC5zdWJqZWN0LnZhbHVlID09PSBwcm9jLnVyaSAmJiB4LnByZWRpY2F0ZS5lcXVhbHMoUkRGLnRlcm1zLnR5cGUpLFxuICAgICAgKVxuICAgICAgLm1hcCgoeCkgPT4geC5vYmplY3QudmFsdWUpXG5cbiAgICB0aGlzLmxvZ2dlci5pbmZvKGBQYXJzaW5nIHByb2Nlc3NvciAnJHtwcm9jLnVyaX0nIG9mIHR5cGUocykgWyR7dHkuam9pbignLCAnKX1dYClcbiAgICBjb25zdCBhcmdzID0gdGhpcy5zaGFwZXMubGVuc2VzW1JERkwuVHlwZWRFeHRyYWN0XS5leGVjdXRlKHtcbiAgICAgIGlkOiBuZXcgTmFtZWROb2RlKHByb2MudXJpKSxcbiAgICAgIHF1YWRzOiB0aGlzLnF1YWRzLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb25maWc6IFByb2Nlc3NvckNvbmZpZyA9IEpTT04ucGFyc2UocHJvYy5jb25maWcpXG4gICAgY29uc3QganNQcm9ncmFtID0gYXdhaXQgaW1wb3J0KGNvbmZpZy5maWxlKVxuICAgIGNvbnN0IGNsYXp6ID0ganNQcm9ncmFtW2NvbmZpZy5jbGF6eiB8fCAnZGVmYXVsdCddXG4gICAgY29uc3QgaW5zdGFuY2U6IFByb2M8dW5rbm93bj4gPSBuZXcgY2xhenooYXJncywgcHJvY0xvZ2dlcilcblxuICAgIHJldHVybiA8RnVsbFByb2M8UD4+aW5zdGFuY2VcbiAgfVxuXG4gIGFzeW5jIGFkZFByb2Nlc3NvcjxQIGV4dGVuZHMgUHJvYzx1bmtub3duPj4oXG4gICAgcHJvYzogUHJvY2Vzc29yLFxuICApOiBQcm9taXNlPEZ1bGxQcm9jPFA+PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCB0aGlzLmNyZWF0ZVByb2Nlc3NvcjxQPihwcm9jKVxuXG4gICAgYXdhaXQgaW5zdGFuY2UuaW5pdCgpXG5cbiAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbml0aWF0ZWQgcHJvY2Vzc29yICcke3Byb2MudXJpfSdgKVxuXG4gICAgdGhpcy5wcm9jZXNzb3JzLnB1c2goaW5zdGFuY2UpXG4gICAgdGhpcy5wcm9jZXNzb3JUcmFuc2Zvcm1zLnB1c2goaW5zdGFuY2UudHJhbnNmb3JtKCkpXG5cbiAgICBhd2FpdCB0aGlzLm5vdGlmeU9yY2hlc3RyYXRvcih7IGluaXRpYWxpemVkOiB7IHVyaTogcHJvYy51cmkgfSB9KVxuXG4gICAgcmV0dXJuIDxGdWxsUHJvYzxQPj5pbnN0YW5jZVxuICB9XG5cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29ycy5tYXAoKHgpID0+IHgucHJvZHVjZSgpKSlcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29yVHJhbnNmb3JtcylcbiAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1N0YXJ0IGZhaWxlZDogJyArIEpTT04uc3RyaW5naWZ5KGV4KSlcbiAgICB9XG4gIH1cblxuICBjcmVhdGVXcml0ZXIodXJpOiBUZXJtKTogV3JpdGVyIHtcbiAgICBjb25zdCBpZCA9IHVyaS52YWx1ZVxuXG4gICAgaWYgKHRoaXMud3JpdGVyc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMud3JpdGVyc1tpZF1cbiAgICB9XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IFdyaXRlckluc3RhbmNlKFxuICAgICAgaWQsXG4gICAgICB0aGlzLmNsaWVudCxcbiAgICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yLFxuICAgICAgdGhpcy51cmksXG4gICAgICB0aGlzLmxvZ2dlcixcbiAgICApXG4gICAgdGhpcy53cml0ZXJzW2lkXSA9IHdyaXRlclxuICAgIHJldHVybiB3cml0ZXJcbiAgfVxuXG4gIGNyZWF0ZVJlYWRlcih1cmk6IFRlcm0pOiBSZWFkZXIge1xuICAgIGNvbnN0IGlkcyA9IHVyaS52YWx1ZVxuXG4gICAgaWYgKHRoaXMucmVhZGVyc1tpZHNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYWRlcnNbaWRzXVxuICAgIH1cbiAgICBjb25zdCByZWFkZXIgPSBuZXcgUmVhZGVySW5zdGFuY2UoXG4gICAgICBpZHMsXG4gICAgICB0aGlzLmNsaWVudCxcbiAgICAgIHRoaXMubm90aWZ5T3JjaGVzdHJhdG9yLFxuICAgICAgdGhpcy5sb2dnZXIsXG4gICAgKVxuICAgIHRoaXMucmVhZGVyc1tpZHNdID0gcmVhZGVyXG4gICAgcmV0dXJuIHJlYWRlclxuICB9XG5cbiAgYXN5bmMgaGFuZGxlT3JjaE1lc3NhZ2UobXNnOiBUb1J1bm5lcikge1xuICAgIGlmIChtc2cubXNnKSB7XG4gICAgICB0aGlzLmhhbmRsZU1zZyhtc2cubXNnKVxuICAgIH1cblxuICAgIGlmIChtc2cuc3RyZWFtTXNnKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVN0cmVhbU1zZyhtc2cuc3RyZWFtTXNnKVxuICAgIH1cblxuICAgIGlmIChtc2cuY2xvc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ2xvc2UobXNnLmNsb3NlKVxuICAgIH1cblxuICAgIGlmIChtc2cucGlwZWxpbmUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGlwZWxpbmUobXNnLnBpcGVsaW5lKVxuICAgIH1cblxuICAgIGlmIChtc2cucHJvY2Vzc2VkKSB7XG4gICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZChtc2cucHJvY2Vzc2VkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlQ2xvc2UoY2xvc2U6IENsb3NlKSB7XG4gICAgY29uc3QgdXJpID0gY2xvc2UuY2hhbm5lbFxuICAgIGNvbnN0IHIgPSB0aGlzLnJlYWRlcnNbdXJpXVxuXG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuY2xvc2UoKVxuICAgICAgY2xvc2VkID0gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCB3ID0gdGhpcy53cml0ZXJzW3VyaV1cbiAgICBpZiAodykge1xuICAgICAgY2xvc2VkID0gdHJ1ZVxuICAgICAgYXdhaXQgdy5jbG9zZSh0cnVlKVxuICAgIH1cblxuICAgIGlmICghY2xvc2VkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkIGEgY2xvc2UgZXZlbnQgZm9yIGNoYW5uZWwgJHt1cml9LCBidXQgbmVpdGhlciByZWFkZXIgbm9yIHdyaXRlciBpcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQaXBlbGluZShwaXBlbGluZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1YWRzID0gbmV3IFBhcnNlcigpLnBhcnNlKHBpcGVsaW5lKVxuICAgICAgdGhpcy5zaGFwZXMgPSBleHRyYWN0U2hhcGVzKFxuICAgICAgICBxdWFkcyxcbiAgICAgICAge1xuICAgICAgICAgIFtSREZDLlJlYWRlcl06ICh4OiBDb250KSA9PiB0aGlzLmNyZWF0ZVJlYWRlcih4LmlkKSxcbiAgICAgICAgICBbUkRGQy5Xcml0ZXJdOiAoeDogQ29udCkgPT4gdGhpcy5jcmVhdGVXcml0ZXIoeC5pZCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBbUkRGQy5SZWFkZXJdOiBlbXB0eTxDb250PigpLFxuICAgICAgICAgIFtSREZDLldyaXRlcl06IGVtcHR5PENvbnQ+KCksXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICB0aGlzLnF1YWRzID0gcXVhZHNcbiAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1BpcGVsaW5lIGZhaWxlZDogJyArIEpTT04uc3RyaW5naWZ5KGV4KSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1zZyhtc2c6IFJlY2VpdmluZ01lc3NhZ2UpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSGFuZGxpbmcgZGF0YSBtc2cgZm9yICcgKyBtc2cuY2hhbm5lbClcbiAgICBjb25zdCByID0gdGhpcy5yZWFkZXJzW21zZy5jaGFubmVsXVxuXG4gICAgaWYgKHIpIHtcbiAgICAgIHIuaGFuZGxlTXNnKG1zZylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCBtZXNzYWdlIGZvciBjaGFubmVsICR7bXNnLmNoYW5uZWx9LCBidXQgbm8gcmVhZGVyIHdhcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1Nc2coc3RyZWFtTXNnOiBSZWNlaXZpbmdTdHJlYW1NZXNzYWdlKSB7XG4gICAgY29uc3QgciA9IHRoaXMucmVhZGVyc1tzdHJlYW1Nc2cuY2hhbm5lbF1cblxuICAgIGlmIChyKSB7XG4gICAgICBhd2FpdCByLmhhbmRsZVN0cmVhbWluZ01lc3NhZ2Uoc3RyZWFtTXNnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFJlY2VpdmVkIHN0cmVhbSBtZXNzYWdlIGZvciBjaGFubmVsICR7c3RyZWFtTXNnLmNoYW5uZWx9LCBidXQgbm8gcmVhZGVyIHdhcyBwcmVzZW50LmAsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcm9jZXNzZWQocHJvY2Vzc2VkOiBMb2NhbEFjaykge1xuICAgIGNvbnN0IHdyaXRlciA9IHRoaXMud3JpdGVyc1twcm9jZXNzZWQuY2hhbm5lbF1cbiAgICBpZiAod3JpdGVyKSB7XG4gICAgICB3cml0ZXIuaGFuZGxlZCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgUmVjZWl2ZWQgcHJvY2Vzc2VkIG1lc3NhZ2UgZm9yIGNoYW5uZWwgJHtwcm9jZXNzZWQuY2hhbm5lbH0sIGJ1dCBubyB3cml0ZXIgd2FzIHByZXNlbnQuYCxcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Duplex } from 'stream';
2
- import type { ClientDuplexStream, InterceptingCallInterface } from '@grpc/grpc-js';
2
+ import type { ClientDuplexStream, InterceptingCall } from '@grpc/grpc-js';
3
3
  import { AuthContext } from '@grpc/grpc-js/build/src/auth-context';
4
4
  type Matcher<Req, T> = (req: Req) => T | undefined;
5
5
  type Handler<Req, Res> = (req: Req, send: (res: Res) => void) => void;
@@ -7,7 +7,7 @@ export declare class MockClientDuplexStream<Req, Res> extends Duplex implements
7
7
  private capabilities;
8
8
  private onceCapabilities;
9
9
  readonly id: number;
10
- call?: InterceptingCallInterface | undefined;
10
+ call?: InterceptingCall | undefined;
11
11
  constructor();
12
12
  getAuthContext(): AuthContext | null;
13
13
  cancel(): void;
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RVdGlscy9kdXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQWUvQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7QUFDYixNQUFNLE9BQU8sc0JBQ1gsU0FBUSxNQUFNO0lBR04sWUFBWSxHQUEwQyxFQUFFLENBQUE7SUFDeEQsZ0JBQWdCLEdBQTBDLEVBQUUsQ0FBQTtJQUVwRCxFQUFFLENBQVE7SUFFMUIsSUFBSSxDQUF3QztJQUM1QztRQUNFLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxNQUFNLEtBQVUsQ0FBQztJQUNqQixPQUFPO1FBQ0wsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUdELE1BQU0sQ0FDSixLQUFVLEVBQ1YsU0FBeUIsRUFDekIsUUFBd0M7UUFFeEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBRW5CLEtBQUssTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3hCLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNkLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFpQyxFQUFFLENBQUE7UUFDaEQsS0FBSyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN4QixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDZCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUE7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFFRCxRQUFRLEVBQUUsQ0FBQTtJQUNaLENBQUM7SUFHRCxLQUFLO0lBRUwsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWE7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyQixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxRQUFRLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxZQUFZLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELFFBQVEsQ0FBSSxPQUF3QjtRQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cGxleCB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB0eXBlIHtcbiAgQ2xpZW50RHVwbGV4U3RyZWFtLFxuICBJbnRlcmNlcHRpbmdDYWxsSW50ZXJmYWNlLFxufSBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgQXV0aENvbnRleHQgfSBmcm9tICdAZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9hdXRoLWNvbnRleHQnXG5cbnR5cGUgTWF0Y2hlcjxSZXEsIFQ+ID0gKHJlcTogUmVxKSA9PiBUIHwgdW5kZWZpbmVkXG50eXBlIEhhbmRsZXI8UmVxLCBSZXM+ID0gKHJlcTogUmVxLCBzZW5kOiAocmVzOiBSZXMpID0+IHZvaWQpID0+IHZvaWRcblxudHlwZSBNYXRjaE9iamVjdDxSZXEsIFJlcywgVD4gPSB7XG4gIG1hdGNoZXI6IE1hdGNoZXI8UmVxLCBUPlxuICBoYW5kbGVyOiBIYW5kbGVyPFQsIFJlcz5cbn1cblxubGV0IGNvdW50ID0gMFxuZXhwb3J0IGNsYXNzIE1vY2tDbGllbnREdXBsZXhTdHJlYW08UmVxLCBSZXM+XG4gIGV4dGVuZHMgRHVwbGV4XG4gIGltcGxlbWVudHMgQ2xpZW50RHVwbGV4U3RyZWFtPFJlcSwgUmVzPlxue1xuICBwcml2YXRlIGNhcGFiaWxpdGllczogQXJyYXk8TWF0Y2hPYmplY3Q8UmVxLCBSZXMsIHVua25vd24+PiA9IFtdXG4gIHByaXZhdGUgb25jZUNhcGFiaWxpdGllczogQXJyYXk8TWF0Y2hPYmplY3Q8UmVxLCBSZXMsIHVua25vd24+PiA9IFtdXG5cbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXJcblxuICBjYWxsPzogSW50ZXJjZXB0aW5nQ2FsbEludGVyZmFjZSB8IHVuZGVmaW5lZFxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7IG9iamVjdE1vZGU6IHRydWUgfSlcbiAgICB0aGlzLmlkID0gY291bnQrK1xuICB9XG5cbiAgZ2V0QXV0aENvbnRleHQoKTogQXV0aENvbnRleHQgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gLS0tLSBTdXJmYWNlQ2FsbCBzdHVicyAtLS0tXG4gIGNhbmNlbCgpOiB2b2lkIHt9XG4gIGdldFBlZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ21vY2stcGVlcidcbiAgfVxuXG4gIC8vIC0tLS0gT2JqZWN0V3JpdGFibGU8UmVxPiAtLS0tXG4gIF93cml0ZShcbiAgICBjaHVuazogUmVxLFxuICAgIF9lbmNvZGluZzogQnVmZmVyRW5jb2RpbmcsXG4gICAgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZVxuICAgIC8vIGNoZWNrIHJlZ2lzdGVyZWQgY2FwYWJpbGl0aWVzXG4gICAgZm9yIChjb25zdCB7IG1hdGNoZXIsIGhhbmRsZXIgfSBvZiB0aGlzLmNhcGFiaWxpdGllcykge1xuICAgICAgY29uc3QgbyA9IG1hdGNoZXIoY2h1bmspXG4gICAgICBpZiAobyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhhbmRsZWQgPSB0cnVlXG4gICAgICAgIGhhbmRsZXIobywgKHJlcykgPT4gdGhpcy5zZW5kKHJlcykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3T25jZTogdHlwZW9mIHRoaXMub25jZUNhcGFiaWxpdGllcyA9IFtdXG4gICAgZm9yIChjb25zdCB7IG1hdGNoZXIsIGhhbmRsZXIgfSBvZiB0aGlzLm9uY2VDYXBhYmlsaXRpZXMpIHtcbiAgICAgIGNvbnN0IG8gPSBtYXRjaGVyKGNodW5rKVxuICAgICAgaWYgKG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYW5kbGVkID0gdHJ1ZVxuICAgICAgICBoYW5kbGVyKG8sIChyZXMpID0+IHRoaXMuc2VuZChyZXMpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T25jZS5wdXNoKHsgbWF0Y2hlciwgaGFuZGxlciB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25jZUNhcGFiaWxpdGllcyA9IG5ld09uY2VcbiAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCEnLCBPYmplY3Qua2V5cyhjaHVuayBhcyBvYmplY3QpKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8vIC0tLS0gT2JqZWN0UmVhZGFibGU8UmVzPiAtLS0tXG4gIF9yZWFkKCk6IHZvaWQge1xuICAgIC8vIG5vLW9wOiB3ZSBwdXNoIG1hbnVhbGx5IHdpdGggc2VuZCgpXG4gIH1cblxuICAvLyAtLS0tIGdSUEMtc3R5bGUgaGVscGVycyAtLS0tXG4gIHNlcmlhbGl6ZSh2YWx1ZTogUmVxKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG5cbiAgZGVzZXJpYWxpemUoY2h1bms6IEJ1ZmZlcik6IFJlcyB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY2h1bmsudG9TdHJpbmcoKSlcbiAgfVxuXG4gIHNlbmQocmVzcG9uc2U6IFJlcyk6IHZvaWQge1xuICAgIHRoaXMucHVzaChyZXNwb25zZSlcbiAgfVxuXG4gIGVuZCgpOiB0aGlzIHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gLS0tLSBDYXBhYmlsaXR5IHJlZ2lzdHJhdGlvbiAtLS0tXG4gIHJlZ2lzdGVyPFQ+KG1hdGNoZXI6IE1hdGNoZXI8UmVxLCBUPiwgaGFuZGxlcjogSGFuZGxlcjxULCBSZXM+KTogdm9pZCB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMucHVzaCh7IG1hdGNoZXIsIGhhbmRsZXIgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyT25jZTxUPihtYXRjaGVyOiBNYXRjaGVyPFJlcSwgVD4sIGhhbmRsZXI6IEhhbmRsZXI8VCwgUmVzPik6IHZvaWQge1xuICAgIHRoaXMub25jZUNhcGFiaWxpdGllcy5wdXNoKHsgbWF0Y2hlciwgaGFuZGxlciB9KVxuICB9XG5cbiAgYXdhaXRNc2c8VD4obWF0Y2hlcjogTWF0Y2hlcjxSZXEsIFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMpID0+IHRoaXMucmVnaXN0ZXJPbmNlKG1hdGNoZXIsIHJlcykpXG4gIH1cbn1cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RVdGlscy9kdXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQWUvQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7QUFDYixNQUFNLE9BQU8sc0JBQ1gsU0FBUSxNQUFNO0lBR04sWUFBWSxHQUEwQyxFQUFFLENBQUE7SUFDeEQsZ0JBQWdCLEdBQTBDLEVBQUUsQ0FBQTtJQUVwRCxFQUFFLENBQVE7SUFFMUIsSUFBSSxDQUErQjtJQUNuQztRQUNFLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxNQUFNLEtBQVUsQ0FBQztJQUNqQixPQUFPO1FBQ0wsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUdELE1BQU0sQ0FDSixLQUFVLEVBQ1YsU0FBeUIsRUFDekIsUUFBd0M7UUFFeEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBRW5CLEtBQUssTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3hCLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNkLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFpQyxFQUFFLENBQUE7UUFDaEQsS0FBSyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN4QixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDZCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUE7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFFRCxRQUFRLEVBQUUsQ0FBQTtJQUNaLENBQUM7SUFHRCxLQUFLO0lBRUwsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWE7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyQixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFHRCxRQUFRLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxZQUFZLENBQUksT0FBd0IsRUFBRSxPQUF3QjtRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELFFBQVEsQ0FBSSxPQUF3QjtRQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cGxleCB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB0eXBlIHtcbiAgQ2xpZW50RHVwbGV4U3RyZWFtLFxuICBJbnRlcmNlcHRpbmdDYWxsLFxufSBmcm9tICdAZ3JwYy9ncnBjLWpzJ1xuaW1wb3J0IHsgQXV0aENvbnRleHQgfSBmcm9tICdAZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9hdXRoLWNvbnRleHQnXG5cbnR5cGUgTWF0Y2hlcjxSZXEsIFQ+ID0gKHJlcTogUmVxKSA9PiBUIHwgdW5kZWZpbmVkXG50eXBlIEhhbmRsZXI8UmVxLCBSZXM+ID0gKHJlcTogUmVxLCBzZW5kOiAocmVzOiBSZXMpID0+IHZvaWQpID0+IHZvaWRcblxudHlwZSBNYXRjaE9iamVjdDxSZXEsIFJlcywgVD4gPSB7XG4gIG1hdGNoZXI6IE1hdGNoZXI8UmVxLCBUPlxuICBoYW5kbGVyOiBIYW5kbGVyPFQsIFJlcz5cbn1cblxubGV0IGNvdW50ID0gMFxuZXhwb3J0IGNsYXNzIE1vY2tDbGllbnREdXBsZXhTdHJlYW08UmVxLCBSZXM+XG4gIGV4dGVuZHMgRHVwbGV4XG4gIGltcGxlbWVudHMgQ2xpZW50RHVwbGV4U3RyZWFtPFJlcSwgUmVzPlxue1xuICBwcml2YXRlIGNhcGFiaWxpdGllczogQXJyYXk8TWF0Y2hPYmplY3Q8UmVxLCBSZXMsIHVua25vd24+PiA9IFtdXG4gIHByaXZhdGUgb25jZUNhcGFiaWxpdGllczogQXJyYXk8TWF0Y2hPYmplY3Q8UmVxLCBSZXMsIHVua25vd24+PiA9IFtdXG5cbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXJcblxuICBjYWxsPzogSW50ZXJjZXB0aW5nQ2FsbCB8IHVuZGVmaW5lZFxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7IG9iamVjdE1vZGU6IHRydWUgfSlcbiAgICB0aGlzLmlkID0gY291bnQrK1xuICB9XG5cbiAgZ2V0QXV0aENvbnRleHQoKTogQXV0aENvbnRleHQgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gLS0tLSBTdXJmYWNlQ2FsbCBzdHVicyAtLS0tXG4gIGNhbmNlbCgpOiB2b2lkIHt9XG4gIGdldFBlZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ21vY2stcGVlcidcbiAgfVxuXG4gIC8vIC0tLS0gT2JqZWN0V3JpdGFibGU8UmVxPiAtLS0tXG4gIF93cml0ZShcbiAgICBjaHVuazogUmVxLFxuICAgIF9lbmNvZGluZzogQnVmZmVyRW5jb2RpbmcsXG4gICAgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZVxuICAgIC8vIGNoZWNrIHJlZ2lzdGVyZWQgY2FwYWJpbGl0aWVzXG4gICAgZm9yIChjb25zdCB7IG1hdGNoZXIsIGhhbmRsZXIgfSBvZiB0aGlzLmNhcGFiaWxpdGllcykge1xuICAgICAgY29uc3QgbyA9IG1hdGNoZXIoY2h1bmspXG4gICAgICBpZiAobyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhhbmRsZWQgPSB0cnVlXG4gICAgICAgIGhhbmRsZXIobywgKHJlcykgPT4gdGhpcy5zZW5kKHJlcykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3T25jZTogdHlwZW9mIHRoaXMub25jZUNhcGFiaWxpdGllcyA9IFtdXG4gICAgZm9yIChjb25zdCB7IG1hdGNoZXIsIGhhbmRsZXIgfSBvZiB0aGlzLm9uY2VDYXBhYmlsaXRpZXMpIHtcbiAgICAgIGNvbnN0IG8gPSBtYXRjaGVyKGNodW5rKVxuICAgICAgaWYgKG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYW5kbGVkID0gdHJ1ZVxuICAgICAgICBoYW5kbGVyKG8sIChyZXMpID0+IHRoaXMuc2VuZChyZXMpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T25jZS5wdXNoKHsgbWF0Y2hlciwgaGFuZGxlciB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25jZUNhcGFiaWxpdGllcyA9IG5ld09uY2VcbiAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCEnLCBPYmplY3Qua2V5cyhjaHVuayBhcyBvYmplY3QpKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8vIC0tLS0gT2JqZWN0UmVhZGFibGU8UmVzPiAtLS0tXG4gIF9yZWFkKCk6IHZvaWQge1xuICAgIC8vIG5vLW9wOiB3ZSBwdXNoIG1hbnVhbGx5IHdpdGggc2VuZCgpXG4gIH1cblxuICAvLyAtLS0tIGdSUEMtc3R5bGUgaGVscGVycyAtLS0tXG4gIHNlcmlhbGl6ZSh2YWx1ZTogUmVxKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG5cbiAgZGVzZXJpYWxpemUoY2h1bms6IEJ1ZmZlcik6IFJlcyB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY2h1bmsudG9TdHJpbmcoKSlcbiAgfVxuXG4gIHNlbmQocmVzcG9uc2U6IFJlcyk6IHZvaWQge1xuICAgIHRoaXMucHVzaChyZXNwb25zZSlcbiAgfVxuXG4gIGVuZCgpOiB0aGlzIHtcbiAgICB0aGlzLnB1c2gobnVsbClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gLS0tLSBDYXBhYmlsaXR5IHJlZ2lzdHJhdGlvbiAtLS0tXG4gIHJlZ2lzdGVyPFQ+KG1hdGNoZXI6IE1hdGNoZXI8UmVxLCBUPiwgaGFuZGxlcjogSGFuZGxlcjxULCBSZXM+KTogdm9pZCB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMucHVzaCh7IG1hdGNoZXIsIGhhbmRsZXIgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyT25jZTxUPihtYXRjaGVyOiBNYXRjaGVyPFJlcSwgVD4sIGhhbmRsZXI6IEhhbmRsZXI8VCwgUmVzPik6IHZvaWQge1xuICAgIHRoaXMub25jZUNhcGFiaWxpdGllcy5wdXNoKHsgbWF0Y2hlciwgaGFuZGxlciB9KVxuICB9XG5cbiAgYXdhaXRNc2c8VD4obWF0Y2hlcjogTWF0Y2hlcjxSZXEsIFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMpID0+IHRoaXMucmVnaXN0ZXJPbmNlKG1hdGNoZXIsIHJlcykpXG4gIH1cbn1cbiJdfQ==
@@ -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);
@@ -199,12 +199,11 @@ export class ProcHelper {
199
199
  await this.runner.handleOrchMessage({
200
200
  pipeline: new N3Writer().quadsToString(this.quads),
201
201
  });
202
- const proc = await this.runner.addProcessor({
202
+ return await this.runner.createProcessor({
203
203
  config: JSON.stringify(this.config),
204
204
  arguments: '',
205
205
  uri,
206
206
  });
207
- return proc;
208
207
  }
209
208
  }
210
209
  export async function getProcInline(config, ty, runner, baseIRI, uri = 'http://example.com/ns#processor') {
@@ -240,4 +239,4 @@ export async function getProc(config, ty, runner, configLocation, uri = 'http://
240
239
  });
241
240
  return proc;
242
241
  }
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdFV0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQTtBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRS9DLE9BQU8sRUFBWSxNQUFNLEVBQVksTUFBTSxXQUFXLENBQUE7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBT25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBSWhDLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBYyxFQUFFLElBQVk7SUFDbEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXJDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDekIsQ0FBQztBQUVELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLElBQUksR0FBZ0IsRUFBRSxDQUFBO0lBRUwsU0FBUyxDQUFnQztJQUUxRCxZQUFZLFNBQXlDO1FBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRCxpQkFBaUI7UUFJZixNQUFNLGFBQWEsR0FBRyxJ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RUFBVSxFQUNWLE1BQWMsRUFDZCxjQUFzQixFQUN0QixHQUFHLEdBQUcsaUNBQWlDO0lBRXZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDcEUsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUIsS0FBSyxFQUFFLFdBQVc7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDL0MsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsUUFBUSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUNwRCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUk7UUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ2xDLFNBQVMsRUFBRSxFQUFFO1FBQ2IsR0FBRztLQUNKLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhdGFDaHVuayxcbiAgRnJvbVJ1bm5lcixcbiAgTG9nTWVzc2FnZSxcbiAgUHJvY2Vzc29yIGFzIFByb2NDb25maWcsXG4gIFRvUnVubmVyLFxufSBmcm9tICdAcmRmYy9wcm90bydcbmltcG9ydCB7fSBmcm9tICcuLi9yZWV4cG9ydHMnXG5pbXBvcnQgeyBleHRyYWN0U2hhcGVzIH0gZnJvbSAncmRmLWxlbnMnXG5pbXBvcnQgeyBOYW1lZE5vZGUsIFBhcnNlciwgV3JpdGVyIGFzIE4zV3JpdGVyIH0gZnJvbSAnbjMnXG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ2ZzL3Byb21pc2VzJ1xuaW1wb3J0IHdpbnN0b24sIHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnd2luc3RvbidcbmltcG9ydCB7IFByb2Nlc3NvciB9IGZyb20gJy4uL3Byb2Nlc3NvcidcbmltcG9ydCB7IEZ1bGxQcm9jLCBSdW5uZXIsIFdyaXRhYmxlIH0gZnJvbSAnLi4vcnVubmVyJ1xuaW1wb3J0IHsgUXVhZCB9IGZyb20gJ0ByZGZqcy90eXBlcydcbmltcG9ydCB7IGNyZWF0ZVRlcm1OYW1lc3BhY2UgfSBmcm9tICdAdHJlZWNnL3R5cGVzJ1xuaW1wb3J0IHtcbiAgUmVjZWl2aW5nU3RyZWFtQ29udHJvbCxcbiAgU2VuZGluZ1N0cmVhbUNvbnRyb2wsXG4gIFN0cmVhbUNodW5rLFxuICBTdHJlYW1JZGVudGlmeSxcbn0gZnJvbSAnQHJkZmMvcHJvdG8vbGliL2dlbmVyYXRlZC9jb21tb24nXG5pbXBvcnQgeyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtIH0gZnJvbSAnLi9kdXBsZXgnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgUmVhZGVyIH0gZnJvbSAnLi4vcmVhZGVyJ1xuaW1wb3J0IHsgV3JpdGVyIH0gZnJvbSAnLi4vd3JpdGVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbm5lbChydW5uZXI6IFJ1bm5lciwgbmFtZTogc3RyaW5nKTogW1dyaXRlciwgUmVhZGVyXSB7XG4gIGNvbnN0IG4gPSBuZXcgTmFtZWROb2RlKG5hbWUpXG4gIGNvbnN0IHJlYWRlciA9IHJ1bm5lci5jcmVhdGVSZWFkZXIobilcbiAgY29uc3Qgd3JpdGVyID0gcnVubmVyLmNyZWF0ZVdyaXRlcihuKVxuXG4gIHJldHVybiBbd3JpdGVyLCByZWFkZXJdXG59XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1Nc2dNb2NrIHtcbiAgZGF0YTogRGF0YUNodW5rW10gPSBbXVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZUlkOiAoaWQ6IFN0cmVhbUlkZW50aWZ5KSA9PiBudW1iZXJcblxuICBjb25zdHJ1Y3RvcihyZXNvbHZlSWQ6IChpZDogU3RyZWFtSWRlbnRpZnkpID0+IG51bWJlcikge1xuICAgIHRoaXMucmVzb2x2ZUlkID0gcmVzb2x2ZUlkXG4gIH1cblxuICBzZW5kU3RyZWFtTWVzc2FnZSgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgIFN0cmVhbUNodW5rLFxuICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgPiB7XG4gICAgY29uc3Qgc2VuZGluZ1N0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgICAgU3RyZWFtQ2h1bmssXG4gICAgICBSZWNlaXZpbmdTdHJlYW1Db250cm9sXG4gICAgPigpXG5cbiAgICBsZXQgYXQgPSAwXG4gICAgc2VuZGluZ1N0cmVhbS5yZWdpc3RlcihcbiAgICAgICh4KSA9PiB4LmRhdGEsXG4gICAgICAoZCwgc2VuZCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNlbmQoeyBzdHJlYW1TZXF1ZW5jZU51bWJlcjogKythdCB9KSwgMjApXG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKGQpXG4gICAgICB9LFxuICAgIClcbiAgICBzZW5kaW5nU3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKHgpID0+IHguaWQsXG4gICAgICAoZCwgc2VuZCkgPT4gc2VuZCh7IHN0cmVhbVNlcXVlbmNlTnVtYmVyOiB0aGlzLnJlc29sdmVJZChkKSB9KSxcbiAgICApXG4gICAgcmV0dXJuIHNlbmRpbmdTdHJlYW1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3JjaGVzdHJhdG9yTW9jayB7XG4gIGNvbm5lY3RTdHJlYW06IE1vY2tDbGllbnREdXBsZXhTdHJlYW08RnJvbVJ1bm5lciwgVG9SdW5uZXI+XG5cbiAgc3RyZWFtTXNnczoge1xuICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgdG9Qcm9kdWNpbmdTdHJlYW06IChpZDogUmVjZWl2aW5nU3RyZWFtQ29udHJvbCkgPT4gdm9pZFxuICAgICAgcmVjZWl2aW5nU3RyZWFtPzogTW9ja0NsaWVudER1cGxleFN0cmVhbTxTZW5kaW5nU3RyZWFtQ29udHJvbCwgRGF0YUNodW5rPlxuICAgIH1cbiAgfSA9IHt9XG5cbiAgc3RyZWFtTXNnQ291bnQgPSAwXG5cbiAgY29ubmVjdCgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPEZyb21SdW5uZXIsIFRvUnVubmVyPiB7XG4gICAgY29uc3QgY29ubmVjdFN0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPEZyb21SdW5uZXIsIFRvUnVubmVyPigpXG4gICAgLy8gQWx3YXlzIGJvdW5jZSBwcm9jZXNzZWQgbXNncyBiYWNrIHRvIHRoZSBydW5uZXJcbiAgICBjb25uZWN0U3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKG1zZykgPT4gbXNnLnByb2Nlc3NlZCxcbiAgICAgICh7IGNoYW5uZWwsIGdsb2JhbFNlcXVlbmNlTnVtYmVyIH0sIHNlbmQpID0+IHtcbiAgICAgICAgc2VuZCh7XG4gICAgICAgICAgcHJvY2Vzc2VkOiB7IGNoYW5uZWwsIGxvY2FsU2VxdWVuY2VOdW1iZXI6IGdsb2JhbFNlcXVlbmNlTnVtYmVyIH0sXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIC8vIEFsd2F5cyBib3VuY2UgZGF0YSBtc2dzIGJhY2sgdG8gdGhlIHJ1bm5lclxuICAgIGNvbm5lY3RTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAobXNnKSA9PiBtc2cubXNnLFxuICAgICAgKHsgbG9jYWxTZXF1ZW5jZU51bWJlciwgZGF0YSwgY2hhbm5lbCB9LCBzZW5kKSA9PiB7XG4gICAgICAgIHNlbmQoe1xuICAgICAgICAgIG1zZzogeyBnbG9iYWxTZXF1ZW5jZU51bWJlcjogbG9jYWxTZXF1ZW5jZU51bWJlciwgY2hhbm5lbCwgZGF0YSB9LFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICAvLyBBbHdheXMgYm91bmNlIGNsb3NlIG1zZ3MgYmFjayB0byB0aGUgcnVubmVyXG4gICAgY29ubmVjdFN0cmVhbS5yZWdpc3RlcihcbiAgICAgIChtc2cpID0+IG1zZy5jbG9zZSxcbiAgICAgIChjbG9zZSwgc2VuZCkgPT4ge1xuICAgICAgICBzZW5kKHsgY2xvc2UgfSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgdGhpcy5jb25uZWN0U3RyZWFtID0gY29ubmVjdFN0cmVhbVxuICAgIHJldHVybiBjb25uZWN0U3RyZWFtXG4gIH1cblxuICBzZW5kU3RyZWFtTWVzc2FnZSgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgIFN0cmVhbUNodW5rLFxuICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgPiB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgICBTdHJlYW1DaHVuayxcbiAgICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgICA+KClcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RyZWFtTXNnQ291bnRcbiAgICB0aGlzLnN0cmVhbU1zZ0NvdW50KytcblxuICAgIG91dC5yZWdpc3Rlck9uY2UoXG4gICAgICAoeCkgPT4geC5pZCxcbiAgICAgICh7IGNoYW5uZWwgfSwgdG9Qcm9kdWNpbmdTdHJlYW0pID0+IHtcbiAgICAgICAgdGhpcy5zdHJlYW1Nc2dzW2lkXSA9IHsgdG9Qcm9kdWNpbmdTdHJlYW0gfVxuXG4gICAgICAgIC8vIE5vdGlmeSBzdHJlYW0gbWVzc2FnZVxuICAgICAgICB0aGlzLmNvbm5lY3RTdHJlYW0uc2VuZCh7XG4gICAgICAgICAgc3RyZWFtTXNnOiB7IGNoYW5uZWwsIGdsb2JhbFNlcXVlbmNlTnVtYmVyOiBpZCB9LFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICBvdXQucmVnaXN0ZXIoXG4gICAgICAoeCkgPT4geC5kYXRhLFxuICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgLy8gYm91bmNlIGRhdGEgdG8gcmVjZWl2aW5nIHN0cmVhbVxuICAgICAgICB0aGlzLnN0cmVhbU1zZ3NbaWRdLnJlY2VpdmluZ1N0cmVhbSEuc2VuZChkYXRhKVxuICAgICAgfSxcbiAgICApXG5cbiAgICBvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIC8vIGVuZCByZWNlaXZpbmcgc3RyZWFtXG4gICAgICB0aGlzLnN0cmVhbU1zZ3NbaWRdLnJlY2VpdmluZ1N0cmVhbSEuZW5kKClcbiAgICB9KVxuXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgcmVjZWl2ZVN0cmVhbU1lc3NhZ2UoKTogTW9ja0NsaWVudER1cGxleFN0cmVhbTxcbiAgICBTZW5kaW5nU3RyZWFtQ29udHJvbCxcbiAgICBEYXRhQ2h1bmtcbiAgPiB7XG4gICAgY29uc3QgcmVjZWl2aW5nU3RyZWFtID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgICBTZW5kaW5nU3RyZWFtQ29udHJvbCxcbiAgICAgIERhdGFDaHVua1xuICAgID4oKVxuICAgIGxldCBzdHJlYW1JZCA9IDBcblxuICAgIHJlY2VpdmluZ1N0cmVhbS5yZWdpc3Rlck9uY2UoXG4gICAgICAoeCkgPT4geC5nbG9iYWxTZXF1ZW5jZU51bWJlcixcbiAgICAgIChpZCkgPT4ge1xuICAgICAgICBzdHJlYW1JZCA9IGlkXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0ucmVjZWl2aW5nU3RyZWFtID0gcmVjZWl2aW5nU3RyZWFtXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0udG9Qcm9kdWNpbmdTdHJlYW0oeyBzdHJlYW1TZXF1ZW5jZU51bWJlcjogMCB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICByZWNlaXZpbmdTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAoeCkgPT4geC5zdHJlYW1TZXF1ZW5jZU51bWJlcixcbiAgICAgIChzdHJlYW1TZXF1ZW5jZU51bWJlcikgPT4ge1xuICAgICAgICAvLyBCb3VuY2UgcHJvY2Vzc2VkIG1lc3NhZ2UgdG8gcHJvZHVjaW5nIHN0cmVhbVxuICAgICAgICB0aGlzLnN0cmVhbU1zZ3Nbc3RyZWFtSWRdLnRvUHJvZHVjaW5nU3RyZWFtKHsgc3RyZWFtU2VxdWVuY2VOdW1iZXIgfSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgcmV0dXJuIHJlY2VpdmluZ1N0cmVhbVxuICB9XG5cbiAgbG9nU3RyZWFtKCk6IE1vY2tDbGllbnREdXBsZXhTdHJlYW08TG9nTWVzc2FnZSwgbnVsbD4ge1xuICAgIGNvbnN0IGxvZ1N0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPExvZ01lc3NhZ2UsIG51bGw+KClcbiAgICBsb2dTdHJlYW0ucmVnaXN0ZXIoKHgpID0+IHgsIGNvbnNvbGUubG9nKVxuICAgIHJldHVybiBsb2dTdHJlYW1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVubmVyKHVyaSA9ICdodHRwOi8vZXhhbXBsZS5jb20vbnMjJykge1xuICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgIHRyYW5zcG9ydHM6IG5ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSh7XG4gICAgICBsZXZlbDogcHJvY2Vzcy5lbnZbJ0RFQlVHJ10gfHwgJ2luZm8nLFxuICAgIH0pLFxuICB9KVxuXG4gIC8vIE1vY2sgdGhlIEdSUENcbiAgY29uc3QgY2xpZW50ID0gbmV3IE9yY2hlc3RyYXRvck1vY2soKVxuXG4gIC8vIENvbm5lY3QganVzdCBsaWtlIGNsaWVudC50czpzdGFydCgpXG4gIGNvbnN0IHN0cmVhbSA9IGNsaWVudC5jb25uZWN0KClcbiAgY29uc3Qgd3JpdGFibGUgPSBwcm9taXNpZnkoc3RyZWFtLndyaXRlLmJpbmQoc3RyZWFtKSlcblxuICBjb25zdCBydW5uZXIgPSBuZXcgUnVubmVyKFxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgICBjbGllbnQgYXMgYW55LCAvLyBUeXBlIGFzc2VydGlvbiBmb3IgdGVzdGluZ1xuICAgIHdyaXRhYmxlIGFzIFdyaXRhYmxlLFxuICAgIHVyaSxcbiAgICBsb2dnZXIsXG4gIClcblxuICBzdHJlYW0ub24oJ2RhdGEnLCAobXNnOiBUb1J1bm5lcikgPT4gcnVubmVyLmhhbmRsZU9yY2hNZXNzYWdlKG1zZykpXG5cbiAgcmV0dXJuIHJ1bm5lclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lPFQ+KGl0ZXI6IEFzeW5jSXRlcmFibGU8VD4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXIpIHtcbiAgICByZXR1cm4gaXRlbVxuICB9XG59XG5cbmNvbnN0IHNoYXBlUXVhZHMgPSBgXG5AcHJlZml4IHJkZmM6IDxodHRwczovL3czaWQub3JnL3JkZi1jb25uZWN0Iz4uXG5AcHJlZml4IHhzZDogPGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIz4uXG5AcHJlZml4IHNoOiA8aHR0cDovL3d3dy53My5vcmcvbnMvc2hhY2wjPi5cblsgXSBhIHNoOk5vZGVTaGFwZTtcbiAgc2g6dGFyZ2V0Q2xhc3MgPEpzUHJvY2Vzc29yU2hhcGU+O1xuICBzaDpwcm9wZXJ0eSBbXG4gICAgc2g6cGF0aCByZGZjOmVudHJ5cG9pbnQ7XG4gICAgc2g6bmFtZSBcImxvY2F0aW9uXCI7XG4gICAgc2g6bWluQ291bnQgMTtcbiAgICBzaDptYXhDb3VudCAxO1xuICAgIHNoOmRhdGF0eXBlIHhzZDpzdHJpbmc7XG4gIF0sIFtcbiAgICBzaDpwYXRoIHJkZmM6ZmlsZTtcbiAgICBzaDpuYW1lIFwiZmlsZVwiO1xuICAgIHNoOm1pbkNvdW50IDE7XG4gICAgc2g6bWF4Q291bnQgMTtcbiAgICBzaDpkYXRhdHlwZSB4c2Q6c3RyaW5nO1xuICBdLCBbXG4gICAgc2g6cGF0aCByZGZjOmNsYXNzO1xuICAgIHNoOm5hbWUgXCJjbGF6elwiO1xuICAgIHNoOm1heENvdW50IDE7XG4gICAgc2g6ZGF0YXR5cGUgeHNkOnN0cmluZztcbiAgXS5cbmBcbmV4cG9ydCB0eXBlIENvbmZpZ1R5cGUgPSB7XG4gIGxvY2F0aW9uOiBzdHJpbmdcbiAgZmlsZTogc3RyaW5nXG4gIGNsYXp6OiBzdHJpbmdcbn1cblxuY29uc3QgT1dMID0gY3JlYXRlVGVybU5hbWVzcGFjZSgnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjJywgJ2ltcG9ydHMnKVxuY29uc3QgcHJvY2Vzc29yU2hhcGVzID0gZXh0cmFjdFNoYXBlcyhuZXcgUGFyc2VyKCkucGFyc2Uoc2hhcGVRdWFkcykpXG5jb25zdCBiYXNlID0gJ2h0dHBzOi8vdzNpZC5vcmcvcmRmLWNvbm5lY3QjJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RmlsZShcbiAgZmlsZTogc3RyaW5nLFxuICBjb250ZW50Pzogc3RyaW5nLFxuKTogUHJvbWlzZTxRdWFkW10+IHtcbiAgY29uc3QgZG9uZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgY29uc3QgcXVhZHM6IFF1YWRbXSA9IFtdXG4gIGNvbnN0IHRvZG86IFVSTFtdID0gW11cblxuICBjb25zdCBwYXJzZSA9IChjb250ZW50OiBzdHJpbmcsIGJhc2VJUkk6IFVSTCkgPT4ge1xuICAgIGRvbmUuYWRkKGJhc2VJUkkudG9TdHJpbmcoKSlcblxuICAgIGNvbnN0IGV4dHJhcyA9IG5ldyBQYXJzZXIoeyBiYXNlSVJJOiBiYXNlSVJJLnRvU3RyaW5nKCkgfSkucGFyc2UoY29udGVudClcblxuICAgIGZvciAoY29uc3QgbyBvZiBleHRyYXNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHguc3ViamVjdC52YWx1ZSA9PT0gYmFzZUlSST8udG9TdHJpbmcoKSAmJlxuICAgICAgICAgIHgucHJlZGljYXRlLmVxdWFscyhPV0wuaW1wb3J0cyksXG4gICAgICApXG4gICAgICAubWFwKCh4KSA9PiB4Lm9iamVjdC52YWx1ZSkpIHtcbiAgICAgIHRvZG8ucHVzaChuZXcgVVJMKG8pKVxuICAgIH1cblxuICAgIHF1YWRzLnB1c2goLi4uZXh0cmFzKVxuICB9XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBwYXJzZShjb250ZW50LCBuZXcgVVJMKCdmaWxlOi8vJyArIGZpbGUpKVxuICB9IGVsc2Uge1xuICAgIHRvZG8ucHVzaChuZXcgVVJMKCdmaWxlOi8vJyArIGZpbGUpKVxuICB9XG5cbiAgbGV0IGl0ZW0gPSB0b2RvLnBvcCgpXG4gIHdoaWxlIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoZG9uZS5oYXMoaXRlbS50b1N0cmluZygpKSkge1xuICAgICAgaXRlbSA9IHRvZG8ucG9wKClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvdG9jb2wgIT09ICdmaWxlOicpIHtcbiAgICAgIHRocm93ICdObyBzdXBwb3J0ZWQgcHJvdG9jb2wgJyArIGl0ZW0ucHJvdG9jb2xcbiAgICB9XG4gICAgY29uc3QgdHh0ID0gYXdhaXQgcmVhZEZpbGUoaXRlbS5wYXRobmFtZSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pXG4gICAgcGFyc2UodHh0LCBpdGVtKVxuXG4gICAgaXRlbSA9IHRvZG8ucG9wKClcbiAgfVxuXG4gIHJldHVybiBxdWFkc1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBncmFkdWFsbHkgdGVzdCB5b3VyIHByb2Nlc3NvcnMuXG4gKiBQb3NzaWJsZSBmbG93OlxuICogLSBpbXBvcnQgdGhlIEpzUnVubmVyIGluZGV4IGZpbGVcbiAqIC0gaW1wb3J0IHlvdXIgcHJvY2Vzc29yIGNvbmZpZyBmaWxlXG4gKiAtIHRlc3QgaWYgdGhlIGNvbmZpZyBpcyBhcyB5b3Ugd291bGQgZXhwZWN0IChmcm9tIGdldENvbmZpZygpKVxuICogLSBpbXBvcnQgeW91ciBwcm9jZXNzb3IgZGVmaW5pdGlvbiAoaW5saW5lKVxuICogLSBidWlsZCB5b3VyIHByb2Nlc3NvclxuICogLSB0ZXN0IHlvdXIgcHJvY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9jSGVscGVyPFQgZXh0ZW5kcyBQcm9jZXNzb3I8dW5rbm93bj4+IHtcbiAgcnVubmVyOiBSdW5uZXJcbiAgcXVhZHM6IFF1YWRbXSA9IFtdXG4gIGNvbmZpZzogQ29uZmlnVHlwZVxuICBwcm9jOiBGdWxsUHJvYzxUPlxuXG4gIGNvbnN0cnVjdG9yKHVyaT86IHN0cmluZykge1xuICAgIHRoaXMucnVubmVyID0gY3JlYXRlUnVubmVyKHVyaSlcbiAgfVxuXG4gIGFzeW5jIGltcG9ydElubGluZShiYXNlSVJJOiBzdHJpbmcsIGNvbmZpZzogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnUXVhZHMgPSBhd2FpdCBpbXBvcnRGaWxlKGJhc2VJUkksIGNvbmZpZylcbiAgICB0aGlzLnF1YWRzLnB1c2goLi4uY29uZmlnUXVhZHMpXG4gIH1cblxuICBhc3luYyBpbXBvcnRGaWxlKGZpbGU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShmaWxlKVxuICAgIHRoaXMucXVhZHMucHVzaCguLi5jb25maWdRdWFkcylcbiAgfVxuXG4gIGdldENvbmZpZyh0eTogc3RyaW5nIHwgTmFtZWROb2RlKTogQ29uZmlnVHlwZSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2YgdHkgPT09ICdzdHJpbmcnID8gbmV3IE5hbWVkTm9kZShiYXNlICsgdHkpIDogdHlcbiAgICBjb25zdCBwcm9jQ29uZmlnID0gPENvbmZpZ1R5cGU+cHJvY2Vzc29yU2hhcGVzLmxlbnNlc1tcbiAgICAgICdKc1Byb2Nlc3NvclNoYXBlJ1xuICAgIF0uZXhlY3V0ZSh7XG4gICAgICBpZCxcbiAgICAgIHF1YWRzOiB0aGlzLnF1YWRzLFxuICAgIH0pXG5cbiAgICB0aGlzLmNvbmZpZyA9IHByb2NDb25maWdcbiAgICByZXR1cm4gcHJvY0NvbmZpZ1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvY2Vzc29yKFxuICAgIHVyaTogc3RyaW5nID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNwcm9jZXNzb3InLFxuICApOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gICAgYXdhaXQgdGhpcy5ydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2Uoe1xuICAgICAgcGlwZWxpbmU6IG5ldyBOM1dyaXRlcigpLnF1YWRzVG9TdHJpbmcodGhpcy5xdWFkcyksXG4gICAgfSlcblxuICAgIGNvbnN0IHByb2MgPSBhd2FpdCB0aGlzLnJ1bm5lci5hZGRQcm9jZXNzb3I8VD4oe1xuICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyksXG4gICAgICBhcmd1bWVudHM6ICcnLFxuICAgICAgdXJpLFxuICAgIH0pXG4gICAgcmV0dXJuIHByb2NcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgUHJvY0hlbHBlcn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2NJbmxpbmU8VCBleHRlbmRzIFByb2Nlc3Nvcjx1bmtub3duPj4oXG4gIGNvbmZpZzogc3RyaW5nLFxuICB0eTogc3RyaW5nLFxuICBydW5uZXI6IFJ1bm5lcixcbiAgYmFzZUlSSTogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShiYXNlSVJJLCBjb25maWcpXG4gIGNvbnN0IHByb2NDb25maWcgPSA8UHJvY0NvbmZpZz5wcm9jZXNzb3JTaGFwZXMubGVuc2VzW1xuICAgICdKc1Byb2Nlc3NvclNoYXBlJ1xuICBdLmV4ZWN1dGUoe1xuICAgIGlkOiBuZXcgTmFtZWROb2RlKGJhc2UgKyB0eSksXG4gICAgcXVhZHM6IGNvbmZpZ1F1YWRzLFxuICB9KVxuXG4gIGF3YWl0IHJ1bm5lci5oYW5kbGVPcmNoTWVzc2FnZSh7XG4gICAgcGlwZWxpbmU6IG5ldyBOM1dyaXRlcigpLnF1YWRzVG9TdHJpbmcoY29uZmlnUXVhZHMpLFxuICB9KVxuXG4gIGNvbnN0IHByb2MgPSBhd2FpdCBydW5uZXIuYWRkUHJvY2Vzc29yPFQ+KHtcbiAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KHByb2NDb25maWcpLFxuICAgIGFyZ3VtZW50czogJycsXG4gICAgdXJpLFxuICB9KVxuXG4gIHJldHVybiBwcm9jXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBQcm9jSGVscGVyfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJvYzxUIGV4dGVuZHMgUHJvY2Vzc29yPHVua25vd24+PihcbiAgY29uZmlnOiBzdHJpbmcsXG4gIHR5OiBzdHJpbmcsXG4gIHJ1bm5lcjogUnVubmVyLFxuICBjb25maWdMb2NhdGlvbjogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShjb25maWdMb2NhdGlvbilcbiAgY29uc3QgcHJvY0NvbmZpZyA9IHByb2Nlc3NvclNoYXBlcy5sZW5zZXNbJ0pzUHJvY2Vzc29yU2hhcGUnXS5leGVjdXRlKHtcbiAgICBpZDogbmV3IE5hbWVkTm9kZShiYXNlICsgdHkpLFxuICAgIHF1YWRzOiBjb25maWdRdWFkcyxcbiAgfSlcblxuICBjb25maWdRdWFkcy5wdXNoKC4uLm5ldyBQYXJzZXIoKS5wYXJzZShjb25maWcpKVxuICBhd2FpdCBydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2Uoe1xuICAgIHBpcGVsaW5lOiBuZXcgTjNXcml0ZXIoKS5xdWFkc1RvU3RyaW5nKGNvbmZpZ1F1YWRzKSxcbiAgfSlcblxuICBjb25zdCBwcm9jID0gYXdhaXQgcnVubmVyLmFkZFByb2Nlc3NvcjxUPih7XG4gICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShwcm9jQ29uZmlnKSxcbiAgICBhcmd1bWVudHM6ICcnLFxuICAgIHVyaSxcbiAgfSlcblxuICByZXR1cm4gcHJvY1xufVxuIl19
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdFV0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhELE9BQU8sRUFBWSxNQUFNLEVBQVksTUFBTSxXQUFXLENBQUM7QUFFdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWpDLE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBYyxFQUFFLElBQVk7SUFDbEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXJDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDekIsQ0FBQztBQUVELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLElBQUksR0FBZ0IsRUFBRSxDQUFBO0lBRUwsU0FBUyxDQUFnQztJQUUxRCxZQUFZLFNBQXlDO1FBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRCxpQkFBaUI7UUFJZixNQUFNLGFBQWEsR0FBRyxJ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QixHQUFHLEdBQUcsaUNBQWlDO0lBRXZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDcEUsRUFBRSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUIsS0FBSyxFQUFFLFdBQVc7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDL0MsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsUUFBUSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztLQUNwRCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUk7UUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ2xDLFNBQVMsRUFBRSxFQUFFO1FBQ2IsR0FBRztLQUNKLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFDaHVuaywgRnJvbVJ1bm5lciwgTG9nTWVzc2FnZSwgUHJvY2Vzc29yIGFzIFByb2NDb25maWcsIFRvUnVubmVyIH0gZnJvbSBcIkByZGZjL3Byb3RvXCI7XG5pbXBvcnQgeyBleHRyYWN0U2hhcGVzIH0gZnJvbSBcInJkZi1sZW5zXCI7XG5pbXBvcnQgeyBOYW1lZE5vZGUsIFBhcnNlciwgV3JpdGVyIGFzIE4zV3JpdGVyIH0gZnJvbSBcIm4zXCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHdpbnN0b24sIHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIndpbnN0b25cIjtcbmltcG9ydCB7IFByb2Nlc3NvciB9IGZyb20gXCIuLi9wcm9jZXNzb3JcIjtcbmltcG9ydCB7IEZ1bGxQcm9jLCBSdW5uZXIsIFdyaXRhYmxlIH0gZnJvbSBcIi4uL3J1bm5lclwiO1xuaW1wb3J0IHsgUXVhZCB9IGZyb20gXCJAcmRmanMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVRlcm1OYW1lc3BhY2UgfSBmcm9tIFwiQHRyZWVjZy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgUmVjZWl2aW5nU3RyZWFtQ29udHJvbCxcbiAgU2VuZGluZ1N0cmVhbUNvbnRyb2wsXG4gIFN0cmVhbUNodW5rLFxuICBTdHJlYW1JZGVudGlmeSxcbn0gZnJvbSBcIkByZGZjL3Byb3RvL2xpYi9nZW5lcmF0ZWQvY29tbW9uXCI7XG5pbXBvcnQgeyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtIH0gZnJvbSBcIi4vZHVwbGV4XCI7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tIFwidXRpbFwiO1xuaW1wb3J0IHsgUmVhZGVyIH0gZnJvbSBcIi4uL3JlYWRlclwiO1xuaW1wb3J0IHsgV3JpdGVyIH0gZnJvbSBcIi4uL3dyaXRlclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbm5lbChydW5uZXI6IFJ1bm5lciwgbmFtZTogc3RyaW5nKTogW1dyaXRlciwgUmVhZGVyXSB7XG4gIGNvbnN0IG4gPSBuZXcgTmFtZWROb2RlKG5hbWUpXG4gIGNvbnN0IHJlYWRlciA9IHJ1bm5lci5jcmVhdGVSZWFkZXIobilcbiAgY29uc3Qgd3JpdGVyID0gcnVubmVyLmNyZWF0ZVdyaXRlcihuKVxuXG4gIHJldHVybiBbd3JpdGVyLCByZWFkZXJdXG59XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1Nc2dNb2NrIHtcbiAgZGF0YTogRGF0YUNodW5rW10gPSBbXVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZUlkOiAoaWQ6IFN0cmVhbUlkZW50aWZ5KSA9PiBudW1iZXJcblxuICBjb25zdHJ1Y3RvcihyZXNvbHZlSWQ6IChpZDogU3RyZWFtSWRlbnRpZnkpID0+IG51bWJlcikge1xuICAgIHRoaXMucmVzb2x2ZUlkID0gcmVzb2x2ZUlkXG4gIH1cblxuICBzZW5kU3RyZWFtTWVzc2FnZSgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgIFN0cmVhbUNodW5rLFxuICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgPiB7XG4gICAgY29uc3Qgc2VuZGluZ1N0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgICAgU3RyZWFtQ2h1bmssXG4gICAgICBSZWNlaXZpbmdTdHJlYW1Db250cm9sXG4gICAgPigpXG5cbiAgICBsZXQgYXQgPSAwXG4gICAgc2VuZGluZ1N0cmVhbS5yZWdpc3RlcihcbiAgICAgICh4KSA9PiB4LmRhdGEsXG4gICAgICAoZCwgc2VuZCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNlbmQoeyBzdHJlYW1TZXF1ZW5jZU51bWJlcjogKythdCB9KSwgMjApXG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKGQpXG4gICAgICB9LFxuICAgIClcbiAgICBzZW5kaW5nU3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKHgpID0+IHguaWQsXG4gICAgICAoZCwgc2VuZCkgPT4gc2VuZCh7IHN0cmVhbVNlcXVlbmNlTnVtYmVyOiB0aGlzLnJlc29sdmVJZChkKSB9KSxcbiAgICApXG4gICAgcmV0dXJuIHNlbmRpbmdTdHJlYW1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3JjaGVzdHJhdG9yTW9jayB7XG4gIGNvbm5lY3RTdHJlYW06IE1vY2tDbGllbnREdXBsZXhTdHJlYW08RnJvbVJ1bm5lciwgVG9SdW5uZXI+XG5cbiAgc3RyZWFtTXNnczoge1xuICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgdG9Qcm9kdWNpbmdTdHJlYW06IChpZDogUmVjZWl2aW5nU3RyZWFtQ29udHJvbCkgPT4gdm9pZFxuICAgICAgcmVjZWl2aW5nU3RyZWFtPzogTW9ja0NsaWVudER1cGxleFN0cmVhbTxTZW5kaW5nU3RyZWFtQ29udHJvbCwgRGF0YUNodW5rPlxuICAgIH1cbiAgfSA9IHt9XG5cbiAgc3RyZWFtTXNnQ291bnQgPSAwXG5cbiAgY29ubmVjdCgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPEZyb21SdW5uZXIsIFRvUnVubmVyPiB7XG4gICAgY29uc3QgY29ubmVjdFN0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPEZyb21SdW5uZXIsIFRvUnVubmVyPigpXG4gICAgLy8gQWx3YXlzIGJvdW5jZSBwcm9jZXNzZWQgbXNncyBiYWNrIHRvIHRoZSBydW5uZXJcbiAgICBjb25uZWN0U3RyZWFtLnJlZ2lzdGVyKFxuICAgICAgKG1zZykgPT4gbXNnLnByb2Nlc3NlZCxcbiAgICAgICh7IGNoYW5uZWwsIGdsb2JhbFNlcXVlbmNlTnVtYmVyIH0sIHNlbmQpID0+IHtcbiAgICAgICAgc2VuZCh7XG4gICAgICAgICAgcHJvY2Vzc2VkOiB7IGNoYW5uZWwsIGxvY2FsU2VxdWVuY2VOdW1iZXI6IGdsb2JhbFNlcXVlbmNlTnVtYmVyIH0sXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgIClcblxuICAgIC8vIEFsd2F5cyBib3VuY2UgZGF0YSBtc2dzIGJhY2sgdG8gdGhlIHJ1bm5lclxuICAgIGNvbm5lY3RTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAobXNnKSA9PiBtc2cubXNnLFxuICAgICAgKHsgbG9jYWxTZXF1ZW5jZU51bWJlciwgZGF0YSwgY2hhbm5lbCB9LCBzZW5kKSA9PiB7XG4gICAgICAgIHNlbmQoe1xuICAgICAgICAgIG1zZzogeyBnbG9iYWxTZXF1ZW5jZU51bWJlcjogbG9jYWxTZXF1ZW5jZU51bWJlciwgY2hhbm5lbCwgZGF0YSB9LFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICAvLyBBbHdheXMgYm91bmNlIGNsb3NlIG1zZ3MgYmFjayB0byB0aGUgcnVubmVyXG4gICAgY29ubmVjdFN0cmVhbS5yZWdpc3RlcihcbiAgICAgIChtc2cpID0+IG1zZy5jbG9zZSxcbiAgICAgIChjbG9zZSwgc2VuZCkgPT4ge1xuICAgICAgICBzZW5kKHsgY2xvc2UgfSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgdGhpcy5jb25uZWN0U3RyZWFtID0gY29ubmVjdFN0cmVhbVxuICAgIHJldHVybiBjb25uZWN0U3RyZWFtXG4gIH1cblxuICBzZW5kU3RyZWFtTWVzc2FnZSgpOiBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPFxuICAgIFN0cmVhbUNodW5rLFxuICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgPiB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgICBTdHJlYW1DaHVuayxcbiAgICAgIFJlY2VpdmluZ1N0cmVhbUNvbnRyb2xcbiAgICA+KClcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RyZWFtTXNnQ291bnRcbiAgICB0aGlzLnN0cmVhbU1zZ0NvdW50KytcblxuICAgIG91dC5yZWdpc3Rlck9uY2UoXG4gICAgICAoeCkgPT4geC5pZCxcbiAgICAgICh7IGNoYW5uZWwgfSwgdG9Qcm9kdWNpbmdTdHJlYW0pID0+IHtcbiAgICAgICAgdGhpcy5zdHJlYW1Nc2dzW2lkXSA9IHsgdG9Qcm9kdWNpbmdTdHJlYW0gfVxuXG4gICAgICAgIC8vIE5vdGlmeSBzdHJlYW0gbWVzc2FnZVxuICAgICAgICB0aGlzLmNvbm5lY3RTdHJlYW0uc2VuZCh7XG4gICAgICAgICAgc3RyZWFtTXNnOiB7IGNoYW5uZWwsIGdsb2JhbFNlcXVlbmNlTnVtYmVyOiBpZCB9LFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICBvdXQucmVnaXN0ZXIoXG4gICAgICAoeCkgPT4geC5kYXRhLFxuICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgLy8gYm91bmNlIGRhdGEgdG8gcmVjZWl2aW5nIHN0cmVhbVxuICAgICAgICB0aGlzLnN0cmVhbU1zZ3NbaWRdLnJlY2VpdmluZ1N0cmVhbSEuc2VuZChkYXRhKVxuICAgICAgfSxcbiAgICApXG5cbiAgICBvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIC8vIGVuZCByZWNlaXZpbmcgc3RyZWFtXG4gICAgICB0aGlzLnN0cmVhbU1zZ3NbaWRdLnJlY2VpdmluZ1N0cmVhbSEuZW5kKClcbiAgICB9KVxuXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgcmVjZWl2ZVN0cmVhbU1lc3NhZ2UoKTogTW9ja0NsaWVudER1cGxleFN0cmVhbTxcbiAgICBTZW5kaW5nU3RyZWFtQ29udHJvbCxcbiAgICBEYXRhQ2h1bmtcbiAgPiB7XG4gICAgY29uc3QgcmVjZWl2aW5nU3RyZWFtID0gbmV3IE1vY2tDbGllbnREdXBsZXhTdHJlYW08XG4gICAgICBTZW5kaW5nU3RyZWFtQ29udHJvbCxcbiAgICAgIERhdGFDaHVua1xuICAgID4oKVxuICAgIGxldCBzdHJlYW1JZCA9IDBcblxuICAgIHJlY2VpdmluZ1N0cmVhbS5yZWdpc3Rlck9uY2UoXG4gICAgICAoeCkgPT4geC5nbG9iYWxTZXF1ZW5jZU51bWJlcixcbiAgICAgIChpZCkgPT4ge1xuICAgICAgICBzdHJlYW1JZCA9IGlkXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0ucmVjZWl2aW5nU3RyZWFtID0gcmVjZWl2aW5nU3RyZWFtXG4gICAgICAgIHRoaXMuc3RyZWFtTXNnc1tpZF0udG9Qcm9kdWNpbmdTdHJlYW0oeyBzdHJlYW1TZXF1ZW5jZU51bWJlcjogMCB9KVxuICAgICAgfSxcbiAgICApXG5cbiAgICByZWNlaXZpbmdTdHJlYW0ucmVnaXN0ZXIoXG4gICAgICAoeCkgPT4geC5zdHJlYW1TZXF1ZW5jZU51bWJlcixcbiAgICAgIChzdHJlYW1TZXF1ZW5jZU51bWJlcikgPT4ge1xuICAgICAgICAvLyBCb3VuY2UgcHJvY2Vzc2VkIG1lc3NhZ2UgdG8gcHJvZHVjaW5nIHN0cmVhbVxuICAgICAgICB0aGlzLnN0cmVhbU1zZ3Nbc3RyZWFtSWRdLnRvUHJvZHVjaW5nU3RyZWFtKHsgc3RyZWFtU2VxdWVuY2VOdW1iZXIgfSlcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgcmV0dXJuIHJlY2VpdmluZ1N0cmVhbVxuICB9XG5cbiAgbG9nU3RyZWFtKCk6IE1vY2tDbGllbnREdXBsZXhTdHJlYW08TG9nTWVzc2FnZSwgbnVsbD4ge1xuICAgIGNvbnN0IGxvZ1N0cmVhbSA9IG5ldyBNb2NrQ2xpZW50RHVwbGV4U3RyZWFtPExvZ01lc3NhZ2UsIG51bGw+KClcbiAgICBsb2dTdHJlYW0ucmVnaXN0ZXIoKHgpID0+IHgsIGNvbnNvbGUubG9nKVxuICAgIHJldHVybiBsb2dTdHJlYW1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVubmVyKHVyaSA9ICdodHRwOi8vZXhhbXBsZS5jb20vbnMjJykge1xuICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgIHRyYW5zcG9ydHM6IG5ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSh7XG4gICAgICBsZXZlbDogcHJvY2Vzcy5lbnZbJ0RFQlVHJ10gfHwgJ2luZm8nLFxuICAgIH0pLFxuICB9KVxuXG4gIC8vIE1vY2sgdGhlIEdSUENcbiAgY29uc3QgY2xpZW50ID0gbmV3IE9yY2hlc3RyYXRvck1vY2soKVxuXG4gIC8vIENvbm5lY3QganVzdCBsaWtlIGNsaWVudC50czpzdGFydCgpXG4gIGNvbnN0IHN0cmVhbSA9IGNsaWVudC5jb25uZWN0KClcbiAgY29uc3Qgd3JpdGFibGUgPSBwcm9taXNpZnkoc3RyZWFtLndyaXRlLmJpbmQoc3RyZWFtKSlcblxuICBjb25zdCBydW5uZXIgPSBuZXcgUnVubmVyKFxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgICBjbGllbnQgYXMgYW55LCAvLyBUeXBlIGFzc2VydGlvbiBmb3IgdGVzdGluZ1xuICAgIHdyaXRhYmxlIGFzIFdyaXRhYmxlLFxuICAgIHVyaSxcbiAgICBsb2dnZXIsXG4gIClcblxuICBzdHJlYW0ub24oJ2RhdGEnLCAobXNnOiBUb1J1bm5lcikgPT4gcnVubmVyLmhhbmRsZU9yY2hNZXNzYWdlKG1zZykpXG5cbiAgcmV0dXJuIHJ1bm5lclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lPFQ+KGl0ZXI6IEFzeW5jSXRlcmFibGU8VD4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXIpIHtcbiAgICByZXR1cm4gaXRlbVxuICB9XG59XG5cbmNvbnN0IHNoYXBlUXVhZHMgPSBgXG5AcHJlZml4IHJkZmM6IDxodHRwczovL3czaWQub3JnL3JkZi1jb25uZWN0Iz4uXG5AcHJlZml4IHhzZDogPGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIz4uXG5AcHJlZml4IHNoOiA8aHR0cDovL3d3dy53My5vcmcvbnMvc2hhY2wjPi5cblsgXSBhIHNoOk5vZGVTaGFwZTtcbiAgc2g6dGFyZ2V0Q2xhc3MgPEpzUHJvY2Vzc29yU2hhcGU+O1xuICBzaDpwcm9wZXJ0eSBbXG4gICAgc2g6cGF0aCByZGZjOmVudHJ5cG9pbnQ7XG4gICAgc2g6bmFtZSBcImxvY2F0aW9uXCI7XG4gICAgc2g6bWluQ291bnQgMTtcbiAgICBzaDptYXhDb3VudCAxO1xuICAgIHNoOmRhdGF0eXBlIHhzZDpzdHJpbmc7XG4gIF0sIFtcbiAgICBzaDpwYXRoIHJkZmM6ZmlsZTtcbiAgICBzaDpuYW1lIFwiZmlsZVwiO1xuICAgIHNoOm1pbkNvdW50IDE7XG4gICAgc2g6bWF4Q291bnQgMTtcbiAgICBzaDpkYXRhdHlwZSB4c2Q6c3RyaW5nO1xuICBdLCBbXG4gICAgc2g6cGF0aCByZGZjOmNsYXNzO1xuICAgIHNoOm5hbWUgXCJjbGF6elwiO1xuICAgIHNoOm1heENvdW50IDE7XG4gICAgc2g6ZGF0YXR5cGUgeHNkOnN0cmluZztcbiAgXS5cbmBcbmV4cG9ydCB0eXBlIENvbmZpZ1R5cGUgPSB7XG4gIGxvY2F0aW9uOiBzdHJpbmdcbiAgZmlsZTogc3RyaW5nXG4gIGNsYXp6OiBzdHJpbmdcbn1cblxuY29uc3QgT1dMID0gY3JlYXRlVGVybU5hbWVzcGFjZSgnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjJywgJ2ltcG9ydHMnKVxuY29uc3QgcHJvY2Vzc29yU2hhcGVzID0gZXh0cmFjdFNoYXBlcyhuZXcgUGFyc2VyKCkucGFyc2Uoc2hhcGVRdWFkcykpXG5jb25zdCBiYXNlID0gJ2h0dHBzOi8vdzNpZC5vcmcvcmRmLWNvbm5lY3QjJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RmlsZShcbiAgZmlsZTogc3RyaW5nLFxuICBjb250ZW50Pzogc3RyaW5nLFxuKTogUHJvbWlzZTxRdWFkW10+IHtcbiAgY29uc3QgZG9uZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgY29uc3QgcXVhZHM6IFF1YWRbXSA9IFtdXG4gIGNvbnN0IHRvZG86IFVSTFtdID0gW11cblxuICBjb25zdCBwYXJzZSA9IChjb250ZW50OiBzdHJpbmcsIGJhc2VJUkk6IFVSTCkgPT4ge1xuICAgIGRvbmUuYWRkKGJhc2VJUkkudG9TdHJpbmcoKSlcblxuICAgIGNvbnN0IGV4dHJhcyA9IG5ldyBQYXJzZXIoeyBiYXNlSVJJOiBiYXNlSVJJLnRvU3RyaW5nKCkgfSkucGFyc2UoY29udGVudClcblxuICAgIGZvciAoY29uc3QgbyBvZiBleHRyYXNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHguc3ViamVjdC52YWx1ZSA9PT0gYmFzZUlSST8udG9TdHJpbmcoKSAmJlxuICAgICAgICAgIHgucHJlZGljYXRlLmVxdWFscyhPV0wuaW1wb3J0cyksXG4gICAgICApXG4gICAgICAubWFwKCh4KSA9PiB4Lm9iamVjdC52YWx1ZSkpIHtcbiAgICAgIHRvZG8ucHVzaChuZXcgVVJMKG8pKVxuICAgIH1cblxuICAgIHF1YWRzLnB1c2goLi4uZXh0cmFzKVxuICB9XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBwYXJzZShjb250ZW50LCBuZXcgVVJMKCdmaWxlOi8vJyArIGZpbGUpKVxuICB9IGVsc2Uge1xuICAgIHRvZG8ucHVzaChuZXcgVVJMKCdmaWxlOi8vJyArIGZpbGUpKVxuICB9XG5cbiAgbGV0IGl0ZW0gPSB0b2RvLnBvcCgpXG4gIHdoaWxlIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoZG9uZS5oYXMoaXRlbS50b1N0cmluZygpKSkge1xuICAgICAgaXRlbSA9IHRvZG8ucG9wKClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvdG9jb2wgIT09ICdmaWxlOicpIHtcbiAgICAgIHRocm93ICdObyBzdXBwb3J0ZWQgcHJvdG9jb2wgJyArIGl0ZW0ucHJvdG9jb2xcbiAgICB9XG4gICAgY29uc3QgdHh0ID0gYXdhaXQgcmVhZEZpbGUoaXRlbS5wYXRobmFtZSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pXG4gICAgcGFyc2UodHh0LCBpdGVtKVxuXG4gICAgaXRlbSA9IHRvZG8ucG9wKClcbiAgfVxuXG4gIHJldHVybiBxdWFkc1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBncmFkdWFsbHkgdGVzdCB5b3VyIHByb2Nlc3NvcnMuXG4gKiBQb3NzaWJsZSBmbG93OlxuICogLSBpbXBvcnQgdGhlIEpzUnVubmVyIGluZGV4IGZpbGVcbiAqIC0gaW1wb3J0IHlvdXIgcHJvY2Vzc29yIGNvbmZpZyBmaWxlXG4gKiAtIHRlc3QgaWYgdGhlIGNvbmZpZyBpcyBhcyB5b3Ugd291bGQgZXhwZWN0IChmcm9tIGdldENvbmZpZygpKVxuICogLSBpbXBvcnQgeW91ciBwcm9jZXNzb3IgZGVmaW5pdGlvbiAoaW5saW5lKVxuICogLSBidWlsZCB5b3VyIHByb2Nlc3NvclxuICogLSB0ZXN0IHlvdXIgcHJvY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9jSGVscGVyPFQgZXh0ZW5kcyBQcm9jZXNzb3I8dW5rbm93bj4+IHtcbiAgcnVubmVyOiBSdW5uZXJcbiAgcXVhZHM6IFF1YWRbXSA9IFtdXG4gIGNvbmZpZzogQ29uZmlnVHlwZVxuICBwcm9jOiBGdWxsUHJvYzxUPlxuXG4gIGNvbnN0cnVjdG9yKHVyaT86IHN0cmluZykge1xuICAgIHRoaXMucnVubmVyID0gY3JlYXRlUnVubmVyKHVyaSlcbiAgfVxuXG4gIGFzeW5jIGltcG9ydElubGluZShiYXNlSVJJOiBzdHJpbmcsIGNvbmZpZzogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnUXVhZHMgPSBhd2FpdCBpbXBvcnRGaWxlKGJhc2VJUkksIGNvbmZpZylcbiAgICB0aGlzLnF1YWRzLnB1c2goLi4uY29uZmlnUXVhZHMpXG4gIH1cblxuICBhc3luYyBpbXBvcnRGaWxlKGZpbGU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShmaWxlKVxuICAgIHRoaXMucXVhZHMucHVzaCguLi5jb25maWdRdWFkcylcbiAgfVxuXG4gIGdldENvbmZpZyh0eTogc3RyaW5nIHwgTmFtZWROb2RlKTogQ29uZmlnVHlwZSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2YgdHkgPT09ICdzdHJpbmcnID8gbmV3IE5hbWVkTm9kZShiYXNlICsgdHkpIDogdHlcbiAgICBjb25zdCBwcm9jQ29uZmlnID0gPENvbmZpZ1R5cGU+cHJvY2Vzc29yU2hhcGVzLmxlbnNlc1tcbiAgICAgICdKc1Byb2Nlc3NvclNoYXBlJ1xuICAgIF0uZXhlY3V0ZSh7XG4gICAgICBpZCxcbiAgICAgIHF1YWRzOiB0aGlzLnF1YWRzLFxuICAgIH0pXG5cbiAgICB0aGlzLmNvbmZpZyA9IHByb2NDb25maWdcbiAgICByZXR1cm4gcHJvY0NvbmZpZ1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvY2Vzc29yKFxuICAgIHVyaTogc3RyaW5nID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucyNwcm9jZXNzb3InLFxuICApOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gICAgYXdhaXQgdGhpcy5ydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2Uoe1xuICAgICAgcGlwZWxpbmU6IG5ldyBOM1dyaXRlcigpLnF1YWRzVG9TdHJpbmcodGhpcy5xdWFkcyksXG4gICAgfSlcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bm5lci5jcmVhdGVQcm9jZXNzb3I8VD4oXG4gICAgICB7XG4gICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpLFxuICAgICAgICBhcmd1bWVudHM6ICcnLFxuICAgICAgICB1cmksXG4gICAgICB9LFxuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgUHJvY0hlbHBlcn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2NJbmxpbmU8VCBleHRlbmRzIFByb2Nlc3Nvcjx1bmtub3duPj4oXG4gIGNvbmZpZzogc3RyaW5nLFxuICB0eTogc3RyaW5nLFxuICBydW5uZXI6IFJ1bm5lcixcbiAgYmFzZUlSSTogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShiYXNlSVJJLCBjb25maWcpXG4gIGNvbnN0IHByb2NDb25maWcgPSA8UHJvY0NvbmZpZz5wcm9jZXNzb3JTaGFwZXMubGVuc2VzW1xuICAgICdKc1Byb2Nlc3NvclNoYXBlJ1xuICBdLmV4ZWN1dGUoe1xuICAgIGlkOiBuZXcgTmFtZWROb2RlKGJhc2UgKyB0eSksXG4gICAgcXVhZHM6IGNvbmZpZ1F1YWRzLFxuICB9KVxuXG4gIGF3YWl0IHJ1bm5lci5oYW5kbGVPcmNoTWVzc2FnZSh7XG4gICAgcGlwZWxpbmU6IG5ldyBOM1dyaXRlcigpLnF1YWRzVG9TdHJpbmcoY29uZmlnUXVhZHMpLFxuICB9KVxuXG4gIGNvbnN0IHByb2MgPSBhd2FpdCBydW5uZXIuYWRkUHJvY2Vzc29yPFQ+KHtcbiAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KHByb2NDb25maWcpLFxuICAgIGFyZ3VtZW50czogJycsXG4gICAgdXJpLFxuICB9KVxuXG4gIHJldHVybiBwcm9jXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBQcm9jSGVscGVyfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJvYzxUIGV4dGVuZHMgUHJvY2Vzc29yPHVua25vd24+PihcbiAgY29uZmlnOiBzdHJpbmcsXG4gIHR5OiBzdHJpbmcsXG4gIHJ1bm5lcjogUnVubmVyLFxuICBjb25maWdMb2NhdGlvbjogc3RyaW5nLFxuICB1cmkgPSAnaHR0cDovL2V4YW1wbGUuY29tL25zI3Byb2Nlc3NvcicsXG4pOiBQcm9taXNlPEZ1bGxQcm9jPFQ+PiB7XG4gIGNvbnN0IGNvbmZpZ1F1YWRzID0gYXdhaXQgaW1wb3J0RmlsZShjb25maWdMb2NhdGlvbilcbiAgY29uc3QgcHJvY0NvbmZpZyA9IHByb2Nlc3NvclNoYXBlcy5sZW5zZXNbJ0pzUHJvY2Vzc29yU2hhcGUnXS5leGVjdXRlKHtcbiAgICBpZDogbmV3IE5hbWVkTm9kZShiYXNlICsgdHkpLFxuICAgIHF1YWRzOiBjb25maWdRdWFkcyxcbiAgfSlcblxuICBjb25maWdRdWFkcy5wdXNoKC4uLm5ldyBQYXJzZXIoKS5wYXJzZShjb25maWcpKVxuICBhd2FpdCBydW5uZXIuaGFuZGxlT3JjaE1lc3NhZ2Uoe1xuICAgIHBpcGVsaW5lOiBuZXcgTjNXcml0ZXIoKS5xdWFkc1RvU3RyaW5nKGNvbmZpZ1F1YWRzKSxcbiAgfSlcblxuICBjb25zdCBwcm9jID0gYXdhaXQgcnVubmVyLmFkZFByb2Nlc3NvcjxUPih7XG4gICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShwcm9jQ29uZmlnKSxcbiAgICBhcmd1bWVudHM6ICcnLFxuICAgIHVyaSxcbiAgfSlcblxuICByZXR1cm4gcHJvY1xufVxuIl19