@dollhousemcp/mcp-server 2.0.6 → 2.0.8

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/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.0.7] - 2026-04-02
4
+
5
+ ### Clean terminal output for `--web` mode
6
+
7
+ Running `npx @dollhousemcp/mcp-server --web` now shows only the console URL:
8
+
9
+ ```
10
+ DollhouseMCP Management Console
11
+ http://dollhouse.localhost:3939
12
+ http://127.0.0.1:3939 (fallback)
13
+ ```
14
+
15
+ Previously, startup dumped ~80 lines of internal log output (dotenv injection, persona loading, memory seeding, cache stats, leader election, etc.) that looked like errors to new users. All of that output is still captured and visible in the management console's **Logs** tab — it's just no longer printed to the terminal.
16
+
17
+ Set `DOLLHOUSE_DEBUG=1` to restore verbose terminal output for troubleshooting.
18
+
19
+ ## [2.0.6] - 2026-04-02
20
+
21
+ ### Web console logs & metrics fix + operation aliases
22
+
23
+ - **Fix**: Standalone `--web` mode now starts with log and metrics sinks — Logs and Metrics tabs work on first use
24
+ - **Fix**: Port 3939 conflicts handled gracefully (opens existing console instead of crashing)
25
+ - **Feature**: Operation aliases — `open_console`, `open_dollhouse_mcp`, `open_logs`, `open_metrics`, `open_setup`, and 15+ more
26
+ - **Feature**: Console tab deep-linking via URL hash (`/#logs`, `/#metrics`, etc.)
27
+ - **Feature**: Aliases surfaced in `introspect` responses for LLM discovery
28
+
3
29
  ## [2.0.5] - 2026-04-02
4
30
 
5
31
  ### Hotfix: `--web` mode UX improvements
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB;;GAEG;AACH,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsKb,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA+B,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,MAAM,SAA0B,CAAC;AAC9C,eAAO,MAAM,aAAa,SAAiC,CAAC;AAC5D,eAAO,MAAM,YAAY,SAAgC,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB;;GAEG;AACH,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsKb,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA+B,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,MAAM,SAA0B,CAAC;AAC9C,eAAO,MAAM,aAAa,SAAiC,CAAC;AAC5D,eAAO,MAAM,YAAY,SAAgC,CAAC"}
@@ -21,10 +21,19 @@ import { logger } from '../utils/logger.js';
21
21
  // The MCP protocol requires that ONLY JSON-RPC messages go to stdout.
22
22
  // dotenv may output version info to stdout, which breaks Claude Desktop connection.
23
23
  // Solution: Temporarily redirect stdout to stderr during dotenv initialization.
24
+ // In --web mode, suppress both stdout AND stderr — the user only needs the
25
+ // console URL banner, not dotenv's injection summary. Logs go to the web viewer.
26
+ const isWebSilent = process.argv.includes('--web')
27
+ && !process.env.DOLLHOUSE_DEBUG && !process.env.ENABLE_DEBUG;
24
28
  const originalStdoutWrite = process.stdout.write.bind(process.stdout);
25
- process.stdout.write = process.stderr.write.bind(process.stderr);
29
+ const originalStderrWrite = process.stderr.write.bind(process.stderr);
30
+ process.stdout.write = (isWebSilent ? (() => true) : process.stderr.write.bind(process.stderr));
31
+ if (isWebSilent)
32
+ process.stderr.write = (() => true);
26
33
  dotenv.config({ path: ['.env.local', '.env'] });
27
34
  process.stdout.write = originalStdoutWrite;
35
+ if (isWebSilent)
36
+ process.stderr.write = originalStderrWrite;
28
37
  /**
29
38
  * Environment variable schema with validation
30
39
  */
@@ -198,4 +207,4 @@ if (isDevelopment || isTest) {
198
207
  HAS_GITHUB_TEST_TOKEN: !!env.GITHUB_TEST_TOKEN,
199
208
  });
200
209
  }
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLGdGQUFnRjtBQUNoRiw2REFBNkQ7QUFDN0QsRUFBRTtBQUNGLDJEQUEyRDtBQUMzRCxzRUFBc0U7QUFDdEUsb0ZBQW9GO0FBQ3BGLGdGQUFnRjtBQUNoRixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVEsQ0FBQztBQUN4RSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekIsK0VBQStFO0lBQy9FLGNBQWM7SUFDZCwrRUFBK0U7SUFDL0UsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUU5RSwrRUFBK0U7SUFDL0UsZ0NBQWdDO0lBQ2hDLCtFQUErRTtJQUMvRSw0REFBNEQ7SUFDNUQsc0VBQXNF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LENBQUMsU0FBUztRQUN4QixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVk7UUFDcEMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7S0FDL0MsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2VudHJhbGl6ZWQgRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggdmFsaWRhdGlvbi5cbiAqIEFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhpcyBtb2R1bGUgcmF0aGVyIHRoYW5cbiAqIGRpcmVjdGx5IHZpYSBwcm9jZXNzLmVudiB0byBlbnN1cmUgdHlwZSBzYWZldHkgYW5kIHZhbGlkYXRpb24uXG4gKlxuICogVXNhZ2U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBlbnYgfSBmcm9tICcuL2NvbmZpZy9lbnYnO1xuICogY29uc3QgdG9rZW4gPSBlbnYuR0lUSFVCX1RPS0VOOyAgLy8gVHlwZTogc3RyaW5nXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8vIExvYWQgLmVudiBmaWxlcyB3aXRoIHByaW9yaXR5OiAuZW52LmxvY2FsIChwZXJzb25hbCkgPiAuZW52IChzaGFyZWQgZGVmYXVsdHMpXG4vLyBCb3RoIGZpbGVzIGFyZSBvcHRpb25hbCAtIG5vIGVycm9yIGlmIGVpdGhlciBkb2Vzbid0IGV4aXN0XG4vL1xuLy8gTUNQIFByb3RvY29sIENvbXBsaWFuY2U6IFN1cHByZXNzIGRvdGVudidzIHN0ZG91dCBvdXRwdXRcbi8vIFRoZSBNQ1AgcHJvdG9jb2wgcmVxdWlyZXMgdGhhdCBPTkxZIEpTT04tUlBDIG1lc3NhZ2VzIGdvIHRvIHN0ZG91dC5cbi8vIGRvdGVudiBtYXkgb3V0cHV0IHZlcnNpb24gaW5mbyB0byBzdGRvdXQsIHdoaWNoIGJyZWFrcyBDbGF1ZGUgRGVza3RvcCBjb25uZWN0aW9uLlxuLy8gU29sdXRpb246IFRlbXBvcmFyaWx5IHJlZGlyZWN0IHN0ZG91dCB0byBzdGRlcnIgZHVyaW5nIGRvdGVudiBpbml0aWFsaXphdGlvbi5cbmNvbnN0IG9yaWdpbmFsU3Rkb3V0V3JpdGUgPSBwcm9jZXNzLnN0ZG91dC53cml0ZS5iaW5kKHByb2Nlc3Muc3Rkb3V0KTtcbnByb2Nlc3Muc3Rkb3V0LndyaXRlID0gcHJvY2Vzcy5zdGRlcnIud3JpdGUuYmluZChwcm9jZXNzLnN0ZGVycikgYXMgYW55O1xuZG90ZW52LmNvbmZpZyh7IHBhdGg6IFsnLmVudi5sb2NhbCcsICcuZW52J10gfSk7XG5wcm9jZXNzLnN0ZG91dC53cml0ZSA9IG9yaWdpbmFsU3Rkb3V0V3JpdGU7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGUgc2NoZW1hIHdpdGggdmFsaWRhdGlvblxuICovXG5jb25zdCBlbnZTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRW52aXJvbm1lbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBOT0RFX0VOVjogei5lbnVtKFsnZGV2ZWxvcG1lbnQnLCAndGVzdCcsICdwcm9kdWN0aW9uJ10pLmRlZmF1bHQoJ2RldmVsb3BtZW50JyksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQcm9kdWN0aW9uIEdpdEh1YiBDcmVkZW50aWFsc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVzZWQgYnkgcHJvZHVjdGlvbiBjb2RlIChzcmMvKSBmb3IgcmVhbCBHaXRIdWIgb3BlcmF0aW9uc1xuICAvLyBPcHRpb25hbDogRmVhdHVyZXMgcmVxdWlyaW5nIEdpdEh1YiB3aWxsIGZhaWwgZ3JhY2VmdWxseSBpZiBub3Qgc2V0XG4gIEdJVEhVQl9UT0tFTjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfVVNFUk5BTUU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgR0lUSFVCX1JFUE9TSVRPUlk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRlc3QgR2l0SHViIENyZWRlbnRpYWxzIChTRVBBUkFURSBhY2NvdW50ISlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VkIGJ5IHRlc3QgY29kZSAodGVzdHMvKSAtIHRlc3RzIHdpbGwgc2tpcCBpZiBub3QgcHJvdmlkZWRcbiAgLy8gSU1QT1JUQU5UOiBVc2UgYSBkaWZmZXJlbnQgR2l0SHViIGFjY291bnQgZm9yIHRlc3RpbmchXG4gIEdJVEhVQl9URVNUX1RPS0VOOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9URVNUX1VTRVJOQU1FOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9URVNUX1JFUE9TSVRPUlk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlcnZlciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUE9SVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMDAwKSxcbiAgTE9HX0xFVkVMOiB6LmVudW0oWydlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnXSkuZGVmYXVsdCgnaW5mbycpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVGVzdCBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgVEVTVF9CQVNFX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX1BFUlNPTkFTX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX0NBQ0hFX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX0NPTkZJR19ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZlYXR1cmUgRmxhZ3NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBFTkFCTEVfREVCVUc6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgVEVTVF9WRVJCT1NFX0xPR0dJTkc6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1DUCBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiAoSXNzdWUgIzIzNylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogTUNQIGludGVyZmFjZSBtb2RlIC0gY29udHJvbHMgd2hpY2ggdG9vbCBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byBMTE1zOlxuICAgKiAtICdkaXNjcmV0ZSc6IH40MCBpbmRpdmlkdWFsIHRvb2xzIChsaXN0X2VsZW1lbnRzLCBjcmVhdGVfZWxlbWVudCwgZXRjLikgLSB+MywwMDAgdG9rZW5zXG4gICAqIC0gJ21jcGFxbCc6IENvbnNvbGlkYXRlZCBNQ1AtQVFMIGludGVyZmFjZSAtIHVzZXMgTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGZvciBzdHlsZVxuICAgKlxuICAgKiBEZWZhdWx0OiAnbWNwYXFsJyAtIHJlY29tbWVuZGVkIGZvciB0b2tlbiBlZmZpY2llbmN5IGFuZCBjbGVhbmVyIHRvb2wgZGlzY292ZXJ5XG4gICAqL1xuICBNQ1BfSU5URVJGQUNFX01PREU6IHouZW51bShbJ2Rpc2NyZXRlJywgJ21jcGFxbCddKS5kZWZhdWx0KCdtY3BhcWwnKSxcblxuICAvKipcbiAgICogTUNQLUFRTCBlbmRwb2ludCBtb2RlIChvbmx5IGFwcGxpZXMgd2hlbiBNQ1BfSU5URVJGQUNFX01PREU9J21jcGFxbCcpOlxuICAgKiAtICdjcnVkZSc6IDUgQ1JVREUgdG9vbHMgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpIC0gfjQsMzAwIHRva2Vuc1xuICAgKiAtICdzaW5nbGUnOiAxIHRvb2wgKG1jcF9hcWwpIC0gfjM1MCB0b2tlbnMsIGlkZWFsIGZvciBtdWx0aS1zZXJ2ZXIgZGVwbG95bWVudHNcbiAgICovXG4gIE1DUF9BUUxfRU5EUE9JTlRfTU9ERTogei5lbnVtKFsnY3J1ZGUnLCAnc2luZ2xlJ10pLmRlZmF1bHQoJ2NydWRlJyksXG5cbiAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbGlhcyBmb3IgTUNQX0FRTF9NT0RFIChkZXByZWNhdGVkLCB1c2UgTUNQX0FRTF9FTkRQT0lOVF9NT0RFKVxuICBNQ1BfQVFMX01PREU6IHouZW51bShbJ2NydWRlJywgJ3NpbmdsZSddKS5vcHRpb25hbCgpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVW5pZmllZCBMb2dnaW5nIENvbmZpZ3VyYXRpb24gKGRvY3MvTE9HR0lORy1ERVNJR04ubWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX0xPR19ESVI6IHouc3RyaW5nKCkuZGVmYXVsdCgnfi8uZG9sbGhvdXNlL2xvZ3MvJyksXG4gIERPTExIT1VTRV9MT0dfRk9STUFUOiB6LmVudW0oWyd0ZXh0JywgJ2pzb25sJ10pLmRlZmF1bHQoJ3RleHQnKSxcbiAgRE9MTEhPVVNFX0xPR19SRVRFTlRJT05fREFZUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMCksXG4gIERPTExIT1VTRV9MT0dfU0VDVVJJVFlfUkVURU5USU9OX0RBWVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNyksXG4gIERPTExIT1VTRV9MT0dfRkxVU0hfSU5URVJWQUxfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTAwMCksXG4gIC8vIEJ1ZmZlciByYWlzZWQgdG8gMjAwMCB0byBzdXBwb3J0IHRoZSB3ZWIgY29uc29sZSBsb2cgdmlld2VyIOKAlCB0aGUgaGlnaGVyIGNhcGFjaXR5XG4gIC8vIHJlZHVjZXMgZmx1c2ggZnJlcXVlbmN5IGFuZCBrZWVwcyBtb3JlIGVudHJpZXMgYXZhaWxhYmxlIGZvciBTU0UgYmFja2ZpbGwgb24gY29ubmVjdC5cbiAgRE9MTEhPVVNFX0xPR19CVUZGRVJfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX0FQUF9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX1NFQ1VSSVRZX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9QRVJGX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDIwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9URUxFTUVUUllfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMCksXG4gIERPTExIT1VTRV9MT0dfTUFYX0VOVFJZX1NJWkU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTYzODQpLFxuICBET0xMSE9VU0VfTE9HX0lNTUVESUFURV9GTFVTSF9SQVRFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwKSxcbiAgRE9MTEhPVVNFX0xPR19GSUxFX01BWF9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwNDg1NzYwMCksXG4gIERPTExIT1VTRV9MT0dfTUFYX0RJUl9TSVpFX0JZVEVTOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICBET0xMSE9VU0VfTE9HX01BWF9GSUxFU19QRVJfQ0FURUdPUlk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFdlYiBDb25zb2xlIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKiogRW5hYmxlIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlIChsb2dzICsgbWV0cmljcyB0YWJzIG9uIHBvcnQgMzkzOSkgKi9cbiAgRE9MTEhPVVNFX1dFQl9DT05TT0xFOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlY3VyaXR5IENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogSXNzdWUgIzQ1MjogR2F0ZWtlZXBlciBwb2xpY3kgZW5mb3JjZW1lbnQuXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFsbCBNQ1AtQVFMIG9wZXJhdGlvbnMgZ28gdGhyb3VnaCB0aGUgNC1sYXllciBHYXRla2VlcGVyXG4gICAqIGVuZm9yY2UoKSBwaXBlbGluZS4gV2hlbiBmYWxzZSwgZmFsbHMgYmFjayB0byByb3V0ZSB2YWxpZGF0aW9uIG9ubHkuXG4gICAqIFRoaXMgaXMgYSB1c2VyL29wZXJhdG9yIHNldHRpbmcg4oCUIHRoZSBMTE0gY2Fubm90IGJ5cGFzcyBpdC5cbiAgICovXG4gIERPTExIT1VTRV9HQVRFS0VFUEVSX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAvKipcbiAgICogSXNzdWUgIzY3OTogRWxlbWVudCBwb2xpY3kgbGF5ZXIga2lsbCBzd2l0Y2guXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMgKGFsbG93L2NvbmZpcm0vZGVueS9zY29wZVJlc3RyaWN0aW9ucylcbiAgICogY2FuIG92ZXJyaWRlIGRlZmF1bHQgb3BlcmF0aW9uIHBlcm1pc3Npb24gbGV2ZWxzLiBXaGVuIGZhbHNlLCBMYXllciAyIG9mIEdhdGVrZWVwZXIuZW5mb3JjZSgpXG4gICAqIGlzIGJ5cGFzc2VkIGVudGlyZWx5IOKAlCBvbmx5IHJvdXRlIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgcGVybWlzc2lvbiBsZXZlbHMgYXBwbHkuXG4gICAqIFVzZSBmb3IgZW1lcmdlbmN5IGxvY2tkb3duLCBoYXJkZW5lZCBkZXBsb3ltZW50cywgb3IgcG9saWN5IGRlYnVnZ2luZy5cbiAgICogVGhpcyBpcyBhbiBvcGVyYXRvci9pbmZyYXN0cnVjdHVyZSBzZXR0aW5nIOKAlCB0aGUgTExNIGNhbm5vdCBieXBhc3MgaXQuXG4gICAqL1xuICBET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVM6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAvKipcbiAgICogSXNzdWUgIzc5OTogUG9saWN5IGV4cG9ydCBvcHQtaW4gZmxhZy5cbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgUG9saWN5RXhwb3J0U2VydmljZSB3cml0ZXMgdGhlIHNlY3VyaXR5IHBvbGljeSBibHVlcHJpbnQgdG9cbiAgICogfi8uZG9sbGhvdXNlL2JyaWRnZS9pbXBvcnRzL3BvbGljaWVzLyBvbiBhY3RpdmF0aW9uIGNoYW5nZXMuIFRoZSBEb2xsaG91c2VCcmlkZ2VcbiAgICogcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIHdhdGNoZXMgdGhpcyBmaWxlIHRvIGV2YWx1YXRlIHBlcm1pc3Npb25zIGxvY2FsbHkuXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHBvbGljeSBmaWxlIGV4cG9ydCBlbnRpcmVseS5cbiAgICovXG4gIERPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU3RvcmFnZSBMYXllciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX1NDQU5fQ09PTERPV05fTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMCksXG4gIERPTExIT1VTRV9JTkRFWF9ERUJPVU5DRV9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0VMRU1FTlRfQ0FDSEVfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDM2MDAwMDApLFxuICBET0xMSE9VU0VfUEFUSF9DQUNIRV9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzYwMDAwMCksXG4gIERPTExIT1VTRV9UT09MX0NBQ0hFX1RUTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg2MDAwMCksXG4gIERPTExIT1VTRV9HTE9CQUxfQ0FDSEVfTUVNT1JZX01COiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDE1MCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQZXJtaXNzaW9uIFByb21wdCBDb25maWd1cmF0aW9uIChJc3N1ZSAjNjI1KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIE1heGltdW0gQ0xJIGFwcHJvdmFsIHJlY29yZHMgYmVmb3JlIExSVSBldmljdGlvbiAoZGVmYXVsdDogNTApICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfTUFYOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwKSxcblxuICAvKiogRGVmYXVsdCBUVEwgZm9yIENMSSBhcHByb3ZhbCByZWNvcmRzIGluIG1zIChkZWZhdWx0OiAzMDAwMDAgPSA1IG1pbikgKi9cbiAgRE9MTEhPVVNFX0NMSV9BUFBST1ZBTF9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzAwXzAwMCksXG5cbiAgLyoqIFBlcm1pc3Npb24gcHJvbXB0IHJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IChkZWZhdWx0OiAxMDApICovXG4gIERPTExIT1VTRV9QRVJNSVNTSU9OX1BST01QVF9SQVRFX0xJTUlUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMCksXG5cbiAgLyoqIENMSSBhcHByb3ZhbCBjcmVhdGlvbiByYXRlIGxpbWl0OiBtYXggcmVxdWVzdHMgcGVyIHdpbmRvdyAoZGVmYXVsdDogMjApICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfUkFURV9MSU1JVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMCksXG5cbiAgLyoqIFJhdGUgbGltaXQgd2luZG93IGluIG1zIGZvciBwZXJtaXNzaW9uIHByb21wdCBhbmQgQ0xJIGFwcHJvdmFscyAoZGVmYXVsdDogNjAwMDAgPSA2MHMpICovXG4gIERPTExIT1VTRV9QRVJNSVNTSU9OX1JBVEVfV0lORE9XX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDYwXzAwMCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNZXRyaWNzIENvbGxlY3Rpb24gQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9NRVRSSUNTX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUSU9OX0lOVEVSVkFMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTAwMCkubWF4KDMwMDAwMCkuZGVmYXVsdCgxNTAwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX01BWF9TTkFQU0hPVF9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMjQwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX0NPTExFQ1RPUl9GQUlMVVJFX1RIUkVTSE9MRDogei5jb2VyY2UubnVtYmVyKCkubWluKDEpLm1heCgxMDApLmRlZmF1bHQoMTApLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUSU9OX0RVUkFUSU9OX1dBUk5fTVM6IHouY29lcmNlLm51bWJlcigpLm1pbigxMDApLm1heCg2MDAwMCkuZGVmYXVsdCg1MDAwKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfTUVNT1JZX1NOQVBTSE9UX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTApLm1heCgxMDAwMCkuZGVmYXVsdCgyNDApLFxuXG4gIC8vIFBhdHRlcm4gZW5jcnlwdGlvbiBzZXR0aW5ncyBmb3IgTWVtb3J5IFNlY3VyaXR5IChJc3N1ZSAjMTMyMSlcbiAgRE9MTEhPVVNFX0RJU0FCTEVfRU5DUllQVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBET0xMSE9VU0VfRU5DUllQVElPTl9TRUNSRVQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgRE9MTEhPVVNFX0VOQ1JZUFRJT05fU0FMVDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogVHlwZSBpcyBhdXRvbWF0aWNhbGx5IGluZmVycmVkIGZyb20gdGhlIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgZW52ID0gZW52U2NoZW1hLnBhcnNlKHByb2Nlc3MuZW52KTtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB0eXBlIChpbmZlcnJlZCBmcm9tIHNjaGVtYSlcbiAqL1xuZXhwb3J0IHR5cGUgRW52ID0gei5pbmZlcjx0eXBlb2YgZW52U2NoZW1hPjtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBoZWxwZXJzIGZvciBlbnZpcm9ubWVudCBkZXRlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVGVzdCA9IGVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnO1xuZXhwb3J0IGNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBlbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG5leHBvcnQgY29uc3QgaXNQcm9kdWN0aW9uID0gZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG5cbi8qKlxuICogTG9nIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gKHdpdGhvdXQgc2VjcmV0cylcbiAqL1xuaWYgKGlzRGV2ZWxvcG1lbnQgfHwgaXNUZXN0KSB7XG4gIGxvZ2dlci5kZWJ1ZygnRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBsb2FkZWQ6Jywge1xuICAgIE5PREVfRU5WOiBlbnYuTk9ERV9FTlYsXG4gICAgUE9SVDogZW52LlBPUlQsXG4gICAgTE9HX0xFVkVMOiBlbnYuTE9HX0xFVkVMLFxuICAgIEhBU19HSVRIVUJfVE9LRU46ICEhZW52LkdJVEhVQl9UT0tFTixcbiAgICBIQVNfR0lUSFVCX1RFU1RfVE9LRU46ICEhZW52LkdJVEhVQl9URVNUX1RPS0VOLFxuICB9KTtcbn1cbiJdfQ==
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLGdGQUFnRjtBQUNoRiw2REFBNkQ7QUFDN0QsRUFBRTtBQUNGLDJEQUEyRDtBQUMzRCxzRUFBc0U7QUFDdEUsb0ZBQW9GO0FBQ3BGLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsaUZBQWlGO0FBQ2pGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztPQUM3QyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDL0QsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBUSxDQUFDO0FBQ3ZHLElBQUksV0FBVztJQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMs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QyxRQUFRLEVBQUU7Q0FDakQsQ0FBQyxDQUFDO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBT2hEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUM7QUFFMUQ7O0dBRUc7QUFDSCxJQUFJLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFO1FBQ2hELFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7UUFDeEIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZO1FBQ3BDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCO0tBQy9DLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENlbnRyYWxpemVkIEVudmlyb25tZW50IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHZhbGlkYXRpb24uXG4gKiBBbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoaXMgbW9kdWxlIHJhdGhlciB0aGFuXG4gKiBkaXJlY3RseSB2aWEgcHJvY2Vzcy5lbnYgdG8gZW5zdXJlIHR5cGUgc2FmZXR5IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIFVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZW52IH0gZnJvbSAnLi9jb25maWcvZW52JztcbiAqIGNvbnN0IHRva2VuID0gZW52LkdJVEhVQl9UT0tFTjsgIC8vIFR5cGU6IHN0cmluZ1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgZG90ZW52IGZyb20gJ2RvdGVudic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG4vLyBMb2FkIC5lbnYgZmlsZXMgd2l0aCBwcmlvcml0eTogLmVudi5sb2NhbCAocGVyc29uYWwpID4gLmVudiAoc2hhcmVkIGRlZmF1bHRzKVxuLy8gQm90aCBmaWxlcyBhcmUgb3B0aW9uYWwgLSBubyBlcnJvciBpZiBlaXRoZXIgZG9lc24ndCBleGlzdFxuLy9cbi8vIE1DUCBQcm90b2NvbCBDb21wbGlhbmNlOiBTdXBwcmVzcyBkb3RlbnYncyBzdGRvdXQgb3V0cHV0XG4vLyBUaGUgTUNQIHByb3RvY29sIHJlcXVpcmVzIHRoYXQgT05MWSBKU09OLVJQQyBtZXNzYWdlcyBnbyB0byBzdGRvdXQuXG4vLyBkb3RlbnYgbWF5IG91dHB1dCB2ZXJzaW9uIGluZm8gdG8gc3Rkb3V0LCB3aGljaCBicmVha3MgQ2xhdWRlIERlc2t0b3AgY29ubmVjdGlvbi5cbi8vIFNvbHV0aW9uOiBUZW1wb3JhcmlseSByZWRpcmVjdCBzdGRvdXQgdG8gc3RkZXJyIGR1cmluZyBkb3RlbnYgaW5pdGlhbGl6YXRpb24uXG4vLyBJbiAtLXdlYiBtb2RlLCBzdXBwcmVzcyBib3RoIHN0ZG91dCBBTkQgc3RkZXJyIOKAlCB0aGUgdXNlciBvbmx5IG5lZWRzIHRoZVxuLy8gY29uc29sZSBVUkwgYmFubmVyLCBub3QgZG90ZW52J3MgaW5qZWN0aW9uIHN1bW1hcnkuIExvZ3MgZ28gdG8gdGhlIHdlYiB2aWV3ZXIuXG5jb25zdCBpc1dlYlNpbGVudCA9IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS13ZWInKVxuICAmJiAhcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHICYmICFwcm9jZXNzLmVudi5FTkFCTEVfREVCVUc7XG5jb25zdCBvcmlnaW5hbFN0ZG91dFdyaXRlID0gcHJvY2Vzcy5zdGRvdXQud3JpdGUuYmluZChwcm9jZXNzLnN0ZG91dCk7XG5jb25zdCBvcmlnaW5hbFN0ZGVycldyaXRlID0gcHJvY2Vzcy5zdGRlcnIud3JpdGUuYmluZChwcm9jZXNzLnN0ZGVycik7XG5wcm9jZXNzLnN0ZG91dC53cml0ZSA9IChpc1dlYlNpbGVudCA/ICgoKSA9PiB0cnVlKSA6IHByb2Nlc3Muc3RkZXJyLndyaXRlLmJpbmQocHJvY2Vzcy5zdGRlcnIpKSBhcyBhbnk7XG5pZiAoaXNXZWJTaWxlbnQpIHByb2Nlc3Muc3RkZXJyLndyaXRlID0gKCgpID0+IHRydWUpIGFzIGFueTtcbmRvdGVudi5jb25maWcoeyBwYXRoOiBbJy5lbnYubG9jYWwnLCAnLmVudiddIH0pO1xucHJvY2Vzcy5zdGRvdXQud3JpdGUgPSBvcmlnaW5hbFN0ZG91dFdyaXRlO1xuaWYgKGlzV2ViU2lsZW50KSBwcm9jZXNzLnN0ZGVyci53cml0ZSA9IG9yaWdpbmFsU3RkZXJyV3JpdGU7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGUgc2NoZW1hIHdpdGggdmFsaWRhdGlvblxuICovXG5jb25zdCBlbnZTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRW52aXJvbm1lbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBOT0RFX0VOVjogei5lbnVtKFsnZGV2ZWxvcG1lbnQnLCAndGVzdCcsICdwcm9kdWN0aW9uJ10pLmRlZmF1bHQoJ2RldmVsb3BtZW50JyksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQcm9kdWN0aW9uIEdpdEh1YiBDcmVkZW50aWFsc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVzZWQgYnkgcHJvZHVjdGlvbiBjb2RlIChzcmMvKSBmb3IgcmVhbCBHaXRIdWIgb3BlcmF0aW9uc1xuICAvLyBPcHRpb25hbDogRmVhdHVyZXMgcmVxdWlyaW5nIEdpdEh1YiB3aWxsIGZhaWwgZ3JhY2VmdWxseSBpZiBub3Qgc2V0XG4gIEdJVEhVQl9UT0tFTjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfVVNFUk5BTUU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgR0lUSFVCX1JFUE9TSVRPUlk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRlc3QgR2l0SHViIENyZWRlbnRpYWxzIChTRVBBUkFURSBhY2NvdW50ISlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VkIGJ5IHRlc3QgY29kZSAodGVzdHMvKSAtIHRlc3RzIHdpbGwgc2tpcCBpZiBub3QgcHJvdmlkZWRcbiAgLy8gSU1QT1JUQU5UOiBVc2UgYSBkaWZmZXJlbnQgR2l0SHViIGFjY291bnQgZm9yIHRlc3RpbmchXG4gIEdJVEhVQl9URVNUX1RPS0VOOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9URVNUX1VTRVJOQU1FOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9URVNUX1JFUE9TSVRPUlk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlcnZlciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgUE9SVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMDAwKSxcbiAgTE9HX0xFVkVMOiB6LmVudW0oWydlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnXSkuZGVmYXVsdCgnaW5mbycpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVGVzdCBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgVEVTVF9CQVNFX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX1BFUlNPTkFTX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX0NBQ0hFX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBURVNUX0NPTkZJR19ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZlYXR1cmUgRmxhZ3NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBFTkFCTEVfREVCVUc6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgVEVTVF9WRVJCT1NFX0xPR0dJTkc6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1DUCBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiAoSXNzdWUgIzIzNylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogTUNQIGludGVyZmFjZSBtb2RlIC0gY29udHJvbHMgd2hpY2ggdG9vbCBpbnRlcmZhY2UgaXMgZXhwb3NlZCB0byBMTE1zOlxuICAgKiAtICdkaXNjcmV0ZSc6IH40MCBpbmRpdmlkdWFsIHRvb2xzIChsaXN0X2VsZW1lbnRzLCBjcmVhdGVfZWxlbWVudCwgZXRjLikgLSB+MywwMDAgdG9rZW5zXG4gICAqIC0gJ21jcGFxbCc6IENvbnNvbGlkYXRlZCBNQ1AtQVFMIGludGVyZmFjZSAtIHVzZXMgTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGZvciBzdHlsZVxuICAgKlxuICAgKiBEZWZhdWx0OiAnbWNwYXFsJyAtIHJlY29tbWVuZGVkIGZvciB0b2tlbiBlZmZpY2llbmN5IGFuZCBjbGVhbmVyIHRvb2wgZGlzY292ZXJ5XG4gICAqL1xuICBNQ1BfSU5URVJGQUNFX01PREU6IHouZW51bShbJ2Rpc2NyZXRlJywgJ21jcGFxbCddKS5kZWZhdWx0KCdtY3BhcWwnKSxcblxuICAvKipcbiAgICogTUNQLUFRTCBlbmRwb2ludCBtb2RlIChvbmx5IGFwcGxpZXMgd2hlbiBNQ1BfSU5URVJGQUNFX01PREU9J21jcGFxbCcpOlxuICAgKiAtICdjcnVkZSc6IDUgQ1JVREUgdG9vbHMgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpIC0gfjQsMzAwIHRva2Vuc1xuICAgKiAtICdzaW5nbGUnOiAxIHRvb2wgKG1jcF9hcWwpIC0gfjM1MCB0b2tlbnMsIGlkZWFsIGZvciBtdWx0aS1zZXJ2ZXIgZGVwbG95bWVudHNcbiAgICovXG4gIE1DUF9BUUxfRU5EUE9JTlRfTU9ERTogei5lbnVtKFsnY3J1ZGUnLCAnc2luZ2xlJ10pLmRlZmF1bHQoJ2NydWRlJyksXG5cbiAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbGlhcyBmb3IgTUNQX0FRTF9NT0RFIChkZXByZWNhdGVkLCB1c2UgTUNQX0FRTF9FTkRQT0lOVF9NT0RFKVxuICBNQ1BfQVFMX01PREU6IHouZW51bShbJ2NydWRlJywgJ3NpbmdsZSddKS5vcHRpb25hbCgpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVW5pZmllZCBMb2dnaW5nIENvbmZpZ3VyYXRpb24gKGRvY3MvTE9HR0lORy1ERVNJR04ubWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX0xPR19ESVI6IHouc3RyaW5nKCkuZGVmYXVsdCgnfi8uZG9sbGhvdXNlL2xvZ3MvJyksXG4gIERPTExIT1VTRV9MT0dfRk9STUFUOiB6LmVudW0oWyd0ZXh0JywgJ2pzb25sJ10pLmRlZmF1bHQoJ3RleHQnKSxcbiAgRE9MTEhPVVNFX0xPR19SRVRFTlRJT05fREFZUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMCksXG4gIERPTExIT1VTRV9MT0dfU0VDVVJJVFlfUkVURU5USU9OX0RBWVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNyksXG4gIERPTExIT1VTRV9MT0dfRkxVU0hfSU5URVJWQUxfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTAwMCksXG4gIC8vIEJ1ZmZlciByYWlzZWQgdG8gMjAwMCB0byBzdXBwb3J0IHRoZSB3ZWIgY29uc29sZSBsb2cgdmlld2VyIOKAlCB0aGUgaGlnaGVyIGNhcGFjaXR5XG4gIC8vIHJlZHVjZXMgZmx1c2ggZnJlcXVlbmN5IGFuZCBrZWVwcyBtb3JlIGVudHJpZXMgYXZhaWxhYmxlIGZvciBTU0UgYmFja2ZpbGwgb24gY29ubmVjdC5cbiAgRE9MTEhPVVNFX0xPR19CVUZGRVJfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX0FQUF9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX1NFQ1VSSVRZX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9QRVJGX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDIwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9URUxFTUVUUllfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMCksXG4gIERPTExIT1VTRV9MT0dfTUFYX0VOVFJZX1NJWkU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTYzODQpLFxuICBET0xMSE9VU0VfTE9HX0lNTUVESUFURV9GTFVTSF9SQVRFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwKSxcbiAgRE9MTEhPVVNFX0xPR19GSUxFX01BWF9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwNDg1NzYwMCksXG4gIERPTExIT1VTRV9MT0dfTUFYX0RJUl9TSVpFX0JZVEVTOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICBET0xMSE9VU0VfTE9HX01BWF9GSUxFU19QRVJfQ0FURUdPUlk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFdlYiBDb25zb2xlIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKiogRW5hYmxlIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlIChsb2dzICsgbWV0cmljcyB0YWJzIG9uIHBvcnQgMzkzOSkgKi9cbiAgRE9MTEhPVVNFX1dFQl9DT05TT0xFOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlY3VyaXR5IENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogSXNzdWUgIzQ1MjogR2F0ZWtlZXBlciBwb2xpY3kgZW5mb3JjZW1lbnQuXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFsbCBNQ1AtQVFMIG9wZXJhdGlvbnMgZ28gdGhyb3VnaCB0aGUgNC1sYXllciBHYXRla2VlcGVyXG4gICAqIGVuZm9yY2UoKSBwaXBlbGluZS4gV2hlbiBmYWxzZSwgZmFsbHMgYmFjayB0byByb3V0ZSB2YWxpZGF0aW9uIG9ubHkuXG4gICAqIFRoaXMgaXMgYSB1c2VyL29wZXJhdG9yIHNldHRpbmcg4oCUIHRoZSBMTE0gY2Fubm90IGJ5cGFzcyBpdC5cbiAgICovXG4gIERPTExIT1VTRV9HQVRFS0VFUEVSX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAvKipcbiAgICogSXNzdWUgIzY3OTogRWxlbWVudCBwb2xpY3kgbGF5ZXIga2lsbCBzd2l0Y2guXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMgKGFsbG93L2NvbmZpcm0vZGVueS9zY29wZVJlc3RyaWN0aW9ucylcbiAgICogY2FuIG92ZXJyaWRlIGRlZmF1bHQgb3BlcmF0aW9uIHBlcm1pc3Npb24gbGV2ZWxzLiBXaGVuIGZhbHNlLCBMYXllciAyIG9mIEdhdGVrZWVwZXIuZW5mb3JjZSgpXG4gICAqIGlzIGJ5cGFzc2VkIGVudGlyZWx5IOKAlCBvbmx5IHJvdXRlIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgcGVybWlzc2lvbiBsZXZlbHMgYXBwbHkuXG4gICAqIFVzZSBmb3IgZW1lcmdlbmN5IGxvY2tkb3duLCBoYXJkZW5lZCBkZXBsb3ltZW50cywgb3IgcG9saWN5IGRlYnVnZ2luZy5cbiAgICogVGhpcyBpcyBhbiBvcGVyYXRvci9pbmZyYXN0cnVjdHVyZSBzZXR0aW5nIOKAlCB0aGUgTExNIGNhbm5vdCBieXBhc3MgaXQuXG4gICAqL1xuICBET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVM6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAvKipcbiAgICogSXNzdWUgIzc5OTogUG9saWN5IGV4cG9ydCBvcHQtaW4gZmxhZy5cbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgUG9saWN5RXhwb3J0U2VydmljZSB3cml0ZXMgdGhlIHNlY3VyaXR5IHBvbGljeSBibHVlcHJpbnQgdG9cbiAgICogfi8uZG9sbGhvdXNlL2JyaWRnZS9pbXBvcnRzL3BvbGljaWVzLyBvbiBhY3RpdmF0aW9uIGNoYW5nZXMuIFRoZSBEb2xsaG91c2VCcmlkZ2VcbiAgICogcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIHdhdGNoZXMgdGhpcyBmaWxlIHRvIGV2YWx1YXRlIHBlcm1pc3Npb25zIGxvY2FsbHkuXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHBvbGljeSBmaWxlIGV4cG9ydCBlbnRpcmVseS5cbiAgICovXG4gIERPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU3RvcmFnZSBMYXllciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX1NDQU5fQ09PTERPV05fTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMCksXG4gIERPTExIT1VTRV9JTkRFWF9ERUJPVU5DRV9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0VMRU1FTlRfQ0FDSEVfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDM2MDAwMDApLFxuICBET0xMSE9VU0VfUEFUSF9DQUNIRV9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzYwMDAwMCksXG4gIERPTExIT1VTRV9UT09MX0NBQ0hFX1RUTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg2MDAwMCksXG4gIERPTExIT1VTRV9HTE9CQUxfQ0FDSEVfTUVNT1JZX01COiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDE1MCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQZXJtaXNzaW9uIFByb21wdCBDb25maWd1cmF0aW9uIChJc3N1ZSAjNjI1KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIE1heGltdW0gQ0xJIGFwcHJvdmFsIHJlY29yZHMgYmVmb3JlIExSVSBldmljdGlvbiAoZGVmYXVsdDogNTApICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfTUFYOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwKSxcblxuICAvKiogRGVmYXVsdCBUVEwgZm9yIENMSSBhcHByb3ZhbCByZWNvcmRzIGluIG1zIChkZWZhdWx0OiAzMDAwMDAgPSA1IG1pbikgKi9cbiAgRE9MTEhPVVNFX0NMSV9BUFBST1ZBTF9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzAwXzAwMCksXG5cbiAgLyoqIFBlcm1pc3Npb24gcHJvbXB0IHJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IChkZWZhdWx0OiAxMDApICovXG4gIERPTExIT1VTRV9QRVJNSVNTSU9OX1BST01QVF9SQVRFX0xJTUlUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMCksXG5cbiAgLyoqIENMSSBhcHByb3ZhbCBjcmVhdGlvbiByYXRlIGxpbWl0OiBtYXggcmVxdWVzdHMgcGVyIHdpbmRvdyAoZGVmYXVsdDogMjApICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfUkFURV9MSU1JVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMCksXG5cbiAgLyoqIFJhdGUgbGltaXQgd2luZG93IGluIG1zIGZvciBwZXJtaXNzaW9uIHByb21wdCBhbmQgQ0xJIGFwcHJvdmFscyAoZGVmYXVsdDogNjAwMDAgPSA2MHMpICovXG4gIERPTExIT1VTRV9QRVJNSVNTSU9OX1JBVEVfV0lORE9XX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDYwXzAwMCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNZXRyaWNzIENvbGxlY3Rpb24gQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9NRVRSSUNTX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUSU9OX0lOVEVSVkFMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTAwMCkubWF4KDMwMDAwMCkuZGVmYXVsdCgxNTAwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX01BWF9TTkFQU0hPVF9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMjQwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX0NPTExFQ1RPUl9GQUlMVVJFX1RIUkVTSE9MRDogei5jb2VyY2UubnVtYmVyKCkubWluKDEpLm1heCgxMDApLmRlZmF1bHQoMTApLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUSU9OX0RVUkFUSU9OX1dBUk5fTVM6IHouY29lcmNlLm51bWJlcigpLm1pbigxMDApLm1heCg2MDAwMCkuZGVmYXVsdCg1MDAwKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfTUVNT1JZX1NOQVBTSE9UX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTApLm1heCgxMDAwMCkuZGVmYXVsdCgyNDApLFxuXG4gIC8vIFBhdHRlcm4gZW5jcnlwdGlvbiBzZXR0aW5ncyBmb3IgTWVtb3J5IFNlY3VyaXR5IChJc3N1ZSAjMTMyMSlcbiAgRE9MTEhPVVNFX0RJU0FCTEVfRU5DUllQVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBET0xMSE9VU0VfRU5DUllQVElPTl9TRUNSRVQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgRE9MTEhPVVNFX0VOQ1JZUFRJT05fU0FMVDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogVHlwZSBpcyBhdXRvbWF0aWNhbGx5IGluZmVycmVkIGZyb20gdGhlIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgZW52ID0gZW52U2NoZW1hLnBhcnNlKHByb2Nlc3MuZW52KTtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB0eXBlIChpbmZlcnJlZCBmcm9tIHNjaGVtYSlcbiAqL1xuZXhwb3J0IHR5cGUgRW52ID0gei5pbmZlcjx0eXBlb2YgZW52U2NoZW1hPjtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBoZWxwZXJzIGZvciBlbnZpcm9ubWVudCBkZXRlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVGVzdCA9IGVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnO1xuZXhwb3J0IGNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBlbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG5leHBvcnQgY29uc3QgaXNQcm9kdWN0aW9uID0gZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbic7XG5cbi8qKlxuICogTG9nIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gKHdpdGhvdXQgc2VjcmV0cylcbiAqL1xuaWYgKGlzRGV2ZWxvcG1lbnQgfHwgaXNUZXN0KSB7XG4gIGxvZ2dlci5kZWJ1ZygnRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBsb2FkZWQ6Jywge1xuICAgIE5PREVfRU5WOiBlbnYuTk9ERV9FTlYsXG4gICAgUE9SVDogZW52LlBPUlQsXG4gICAgTE9HX0xFVkVMOiBlbnYuTE9HX0xFVkVMLFxuICAgIEhBU19HSVRIVUJfVE9LRU46ICEhZW52LkdJVEhVQl9UT0tFTixcbiAgICBIQVNfR0lUSFVCX1RFU1RfVE9LRU46ICEhZW52LkdJVEhVQl9URVNUX1RPS0VOLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export declare const VERSION = "1.6.5";
2
+ export declare const BUILD_DATE = "2025-08-26T15:30:22.187Z";
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/constants/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,UAAU,6BAA6B,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Auto-generated version constant
2
+ export const VERSION = "1.6.5";
3
+ export const BUILD_DATE = "2025-08-26T15:30:22.187Z";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBdXRvLWdlbmVyYXRlZCB2ZXJzaW9uIGNvbnN0YW50XG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS42LjVcIjtcbmV4cG9ydCBjb25zdCBCVUlMRF9EQVRFID0gXCIyMDI1LTA4LTI2VDE1OjMwOjIyLjE4N1pcIjtcbiJdfQ==
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.6";
6
- export declare const BUILD_TIMESTAMP = "2026-04-02T20:49:12.821Z";
5
+ export declare const PACKAGE_VERSION = "2.0.8";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-02T23:02:41.967Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.6';
6
- export const BUILD_TIMESTAMP = '2026-04-02T20:49:12.821Z';
5
+ export const PACKAGE_VERSION = '2.0.8';
6
+ export const BUILD_TIMESTAMP = '2026-04-02T23:02:41.967Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuNic7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMDJUMjA6NDk6MTIuODIxWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuOCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMDJUMjM6MDI6NDEuOTY3Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
package/dist/index.js CHANGED
@@ -629,10 +629,11 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && (!isTest || isTes
629
629
  // Issue #796: Bootstrap DI container for web-only mode so API routes
630
630
  // go through MCPAQLHandler (validated, cached, gatekeeper-checked)
631
631
  //
632
- // Suppress debug output in --web mode unless DOLLHOUSE_DEBUG is set.
633
- // The web console captures all logs in memory no need to flood the terminal.
632
+ // Suppress terminal output in --web mode unless DOLLHOUSE_DEBUG is set.
633
+ // All logs are still captured in MemoryLogSink and visible in the Logs tab
634
+ // the terminal only needs the console URL banner, not a wall of startup noise.
634
635
  if (!process.env.DOLLHOUSE_DEBUG && !process.env.ENABLE_DEBUG) {
635
- logger.setMinLevel('info');
636
+ logger.setMinLevel('error');
636
637
  }
637
638
  (async () => {
638
639
  const portfolioDir = path.join(os.homedir(), '.dollhouse', 'portfolio');
@@ -657,7 +658,6 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && (!isTest || isTes
657
658
  metricsSink = container.resolve('MemoryMetricsSink');
658
659
  }
659
660
  catch { /* not registered */ }
660
- console.error("[DollhouseMCP] Container bootstrapped — web routes using MCP-AQL Gateway");
661
661
  }
662
662
  catch (err) {
663
663
  console.error("[DollhouseMCP] Container bootstrap failed — web routes will use direct filesystem access.");
@@ -697,4 +697,4 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && (!isTest || isTes
697
697
  });
698
698
  }
699
699
  }
700
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGtFQUFrRTtBQUNsRSw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixpREFBaUQ7QUFDakQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUU7UUFDM0MsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0QsS0FBSyxFQUFFLEtB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LENBQUMsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0Qsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLG9GQUFvRjtZQUNwRixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vLyBMb2FkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIC5lbnYgZmlsZXMgQkVGT1JFIGFueXRoaW5nIGVsc2Vcbi8vIFRoaXMgZW5zdXJlcyAuZW52LmxvY2FsIGFuZCAuZW52IGFyZSBsb2FkZWQgZm9yIGFsbCBtb2R1bGVzXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuL2NvbmZpZy9lbnYuanMnO1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qc1wiO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyIH0gZnJvbSBcIi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi91dGlscy9sb2dnZXIuanNcIjtcbmltcG9ydCB7IERvbGxob3VzZUNvbnRhaW5lciB9IGZyb20gXCIuL2RpL0NvbnRhaW5lci5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tIFwiLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uYWxUZWxlbWV0cnksIFN0YXJ0dXBUaW1lciB9IGZyb20gXCIuL3RlbGVtZXRyeS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgSW5kaWNhdG9yQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnL2luZGljYXRvci1jb25maWcuanNcIjtcbmltcG9ydCB0eXBlIHsgSVRvb2xIYW5kbGVyIH0gZnJvbSBcIi4vc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRvb2xSZWdpc3RyeSB9IGZyb20gXCIuL2hhbmRsZXJzL1Rvb2xSZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQZXJzb25hSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL1BlcnNvbmFIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnRDUlVESGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0VsZW1lbnRDUlVESGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0NvbGxlY3Rpb25IYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvcnRmb2xpb0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9Qb3J0Zm9saW9IYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdpdEh1YkF1dGhIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvR2l0SHViQXV0aEhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheUNvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9EaXNwbGF5Q29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJZGVudGl0eUhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9JZGVudGl0eUhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgU3luY0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9TeW5jSGFuZGxlclYyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkSW5kZXhIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi9jb25maWcvQ29uZmlnTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tIFwiLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanNcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnNlbWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9lbnNlbWJsZXMvdHlwZXMuanNcIjtcblxuLy8gRGVmZW5zaXZlIGVycm9yIGhhbmRsaW5nIGZvciBucHgvQ0xJIGV4ZWN1dGlvblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyb3IpID0+IHtcbiAgbG9nZ2VyLmVycm9yKCdVbmhhbmRsZWQgZXhjZXB0aW9uIGRldGVjdGVkJywge1xuICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgc3RhY2s6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZFxuICB9KTtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uLCBwcm9taXNlKSA9PiB7XG4gIGxvZ2dlci5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIGRldGVjdGVkJywge1xuICAgIHJlYXNvbjogcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24ubWVzc2FnZSA6IFN0cmluZyhyZWFzb24pLFxuICAgIHN0YWNrOiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5zdGFjayA6IHVuZGVmaW5lZCxcbiAgICBwcm9taXNlXG4gIH0pO1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbi8vIE9ubHkgbG9nIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbiBkZWJ1ZyBtb2RlXG5pZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIERlYnVnIG1vZGUgZW5hYmxlZCcpO1xufVxuXG5leHBvcnQgY2xhc3MgRG9sbGhvdXNlTUNQU2VydmVyIGltcGxlbWVudHMgSVRvb2xIYW5kbGVyIHtcbiAgcHJpdmF0ZSBzZXJ2ZXI6IFNlcnZlcjtcbiAgcHVibGljIHBlcnNvbmFzRGlyOiBzdHJpbmcgfCBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRVc2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbGl6YXRpb25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29udGFpbmVyOiBEb2xsaG91c2VDb250YWluZXI7XG4gIHByaXZhdGUgdG9vbFJlZ2lzdHJ5PzogVG9vbFJlZ2lzdHJ5O1xuICBwcml2YXRlIGVuaGFuY2VkSW5kZXhIYW5kbGVyPzogRW5oYW5jZWRJbmRleEhhbmRsZXI7XG4gIHByaXZhdGUgcGVyc29uYUhhbmRsZXI/OiBQZXJzb25hSGFuZGxlcjtcbiAgcHJpdmF0ZSBlbGVtZW50Q1JVREhhbmRsZXI/OiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI/OiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgcHJpdmF0ZSBwb3J0Zm9saW9IYW5kbGVyPzogUG9ydGZvbGlvSGFuZGxlcjtcbiAgcHJpdmF0ZSBnaXRodWJBdXRoSGFuZGxlcj86IEdpdEh1YkF1dGhIYW5kbGVyO1xuICBwcml2YXRlIGRpc3BsYXlDb25maWdIYW5kbGVyPzogRGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gIHByaXZhdGUgaWRlbnRpdHlIYW5kbGVyPzogSWRlbnRpdHlIYW5kbGVyO1xuICBwcml2YXRlIGNvbmZpZ0hhbmRsZXI/OiBDb25maWdIYW5kbGVyO1xuICBwcml2YXRlIHN5bmNIYW5kbGVyPzogU3luY0hhbmRsZXI7XG4gIHByaXZhdGUgcmVzb3VyY2VIYW5kbGVyPzogaW1wb3J0KCcuL2hhbmRsZXJzL1Jlc291cmNlSGFuZGxlci5qcycpLlJlc291cmNlSGFuZGxlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERvbGxob3VzZU1DUFNlcnZlciBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyIERvbGxob3VzZUNvbnRhaW5lciBpbnN0YW5jZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqICAgICAgICAgICAgICAgICAgVXNlIGBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKClgIGZvciBwcm9kdWN0aW9uIG9yXG4gICAqICAgICAgICAgICAgICAgICAgYGNyZWF0ZUludGVncmF0aW9uQ29udGFpbmVyKCkuY29udGFpbmVyYCBmb3IgdGVzdHMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IERvbGxob3VzZUNvbnRhaW5lcikge1xuICAgIC8vIEJ1aWxkIGNhcGFiaWxpdGllcyBvYmplY3QgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAgLy8gUmVzb3VyY2VzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IChhZHZlcnRpc2VfcmVzb3VyY2VzOiBmYWxzZSlcbiAgICBjb25zdCBjYXBhYmlsaXRpZXM6IGFueSA9IHtcbiAgICAgIHRvb2xzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgaWYgcmVzb3VyY2VzIHNob3VsZCBiZSBhZHZlcnRpc2VkXG4gICAgLy8gVGhpcyBpcyBhIGZ1dHVyZS1wcm9vZiBpbXBsZW1lbnRhdGlvbiAtIHJlc291cmNlcyBhcmUgb3B0LWluXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluaXRpYWxpemUgQ29uZmlnTWFuYWdlciB0byBjaGVjayByZXNvdXJjZSBzZXR0aW5nc1xuICAgICAgLy8gTm90ZTogQ29uZmlnIG1heSBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgeWV0LCBzbyB3ZSBjaGVjayBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBJZiBjb25maWcgaXMgbm90IGluaXRpYWxpemVkLCBkZWZhdWx0cyAoYWR2ZXJ0aXNlX3Jlc291cmNlczogZmFsc2UpIGFwcGx5XG4gICAgICBjb25zdCBmaWxlTG9ja01hbmFnZXIgPSBuZXcgRmlsZUxvY2tNYW5hZ2VyKCk7XG4gICAgICBjb25zdCBmaWxlT3BlcmF0aW9ucyA9IG5ldyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UoZmlsZUxvY2tNYW5hZ2VyKTtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcihmaWxlT3BlcmF0aW9ucywgb3MpO1xuICAgICAgY29uc3QgcmVzb3VyY2VzQ29uZmlnID0gY29uZmlnTWFuYWdlci5nZXRTZXR0aW5nPGFueT4oJ2VsZW1lbnRzLmVuaGFuY2VkX2luZGV4LnJlc291cmNlcycpO1xuXG4gICAgICBpZiAocmVzb3VyY2VzQ29uZmlnPy5hZHZlcnRpc2VfcmVzb3VyY2VzID09PSB0cnVlKSB7XG4gICAgICAgIGNhcGFiaWxpdGllcy5yZXNvdXJjZXMgPSB7fTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tEb2xsaG91c2VNQ1BdIE1DUCBSZXNvdXJjZXMgY2FwYWJpbGl0eSBhZHZlcnRpc2VkIChlbmFibGVkIHZpYSBjb25maWcpJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gTUNQIFJlc291cmNlcyBjYXBhYmlsaXR5IE5PVCBhZHZlcnRpc2VkIChkaXNhYmxlZCBieSBkZWZhdWx0KScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDb25maWcgbm90IGluaXRpYWxpemVkIHlldCAtIHVzZSBzYWZlIGRlZmF1bHQgKG5vIHJlc291cmNlcylcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0RvbGxob3VzZU1DUF0gQ29uZmlnIG5vdCBpbml0aWFsaXplZCB5ZXQsIHJlc291cmNlcyBjYXBhYmlsaXR5IGRpc2FibGVkIGJ5IGRlZmF1bHQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHRoaXMuc2VydmVyID0gbmV3IFNlcnZlcihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJkb2xsaG91c2VtY3BcIixcbiAgICAgICAgdmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVIgfHwgbnVsbDtcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplUG9ydGZvbGlvKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLnByZXBhcmVQb3J0Zm9saW8oKTtcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gdGhpcy5jb250YWluZXIuZ2V0UGVyc29uYXNEaXIoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvcnRmb2xpbyBpcyByZWFkeVxuICAgKiBGSVggIzYxMDogVGhpcyB3YXMgcHJldmlvdXNseSBpbiBhIC50aGVuKCkgY2FsbGJhY2sgaW4gdGhlIGNvbnN0cnVjdG9yXG4gICAqIE5vdyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHJ1bigpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29tcGxldGVJbml0aWFsaXphdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgaGFuZGxlcnMgd2l0aCBzZXJ2ZXIgaW5zdGFuY2UgLSBhbGwgc3RhdGUgbWFuYWdlZCBieSBzZXJ2aWNlc1xuICAgIGNvbnN0IGhhbmRsZXJzID0gYXdhaXQgdGhpcy5jb250YWluZXIuY3JlYXRlSGFuZGxlcnModGhpcy5zZXJ2ZXIpO1xuXG4gICAgdGhpcy5wZXJzb25hSGFuZGxlciA9IGhhbmRsZXJzLnBlcnNvbmFIYW5kbGVyO1xuICAgIHRoaXMuZWxlbWVudENSVURIYW5kbGVyID0gaGFuZGxlcnMuZWxlbWVudENydWRIYW5kbGVyO1xuICAgIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBoYW5kbGVycy5jb2xsZWN0aW9uSGFuZGxlcjtcbiAgICB0aGlzLnBvcnRmb2xpb0hhbmRsZXIgPSBoYW5kbGVycy5wb3J0Zm9saW9IYW5kbGVyO1xuICAgIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIgPSBoYW5kbGVycy5naXRodWJBdXRoSGFuZGxlcjtcbiAgICB0aGlzLmRpc3BsYXlDb25maWdIYW5kbGVyID0gaGFuZGxlcnMuZGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gICAgdGhpcy5pZGVudGl0eUhhbmRsZXIgPSBoYW5kbGVycy5pZGVudGl0eUhhbmRsZXI7XG4gICAgdGhpcy5jb25maWdIYW5kbGVyID0gaGFuZGxlcnMuY29uZmlnSGFuZGxlcjtcbiAgICB0aGlzLnN5bmNIYW5kbGVyID0gaGFuZGxlcnMuc3luY0hhbmRsZXI7XG4gICAgdGhpcy50b29sUmVnaXN0cnkgPSBoYW5kbGVycy50b29sUmVnaXN0cnk7XG4gICAgdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciA9IGhhbmRsZXJzLmVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgcmVzb3VyY2UgaGFuZGxlcnNcbiAgICAvLyBSZXNvdXJjZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHJlcXVpcmUgZXhwbGljaXQgY29uZmlndXJhdGlvblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlc291cmNlSGFuZGxlcnMoKTtcblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBNQ1AgUmVzb3VyY2VzIGhhbmRsZXJzIGlmIGVuYWJsZWQgaW4gY29uZmlndXJhdGlvblxuICAgKiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gb3RoZXIgaGFuZGxlcnMgYmVjYXVzZSBpdCByZXF1aXJlcyBkeW5hbWljIGltcG9ydFxuICAgKiBhbmQgY29uZGl0aW9uYWwgcmVnaXN0cmF0aW9uIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVJlc291cmNlSGFuZGxlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgUmVzb3VyY2VIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGFuZGxlcnMvUmVzb3VyY2VIYW5kbGVyLmpzJyk7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuXG4gICAgICB0aGlzLnJlc291cmNlSGFuZGxlciA9IG5ldyBSZXNvdXJjZUhhbmRsZXIoY29uZmlnTWFuYWdlcik7XG4gICAgICBhd2FpdCB0aGlzLnJlc291cmNlSGFuZGxlci5pbml0aWFsaXplKHRoaXMuc2VydmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gUmVzb3VyY2VzIGFyZSBvcHRpb25hbCAtIGRvbid0IGZhaWwgc2VydmVyIHN0YXJ0dXAgaWYgdGhleSBjYW4ndCBiZSBpbml0aWFsaXplZFxuICAgICAgbG9nZ2VyLndhcm4oJ1tEb2xsaG91c2VNQ1BdIEZhaWxlZCB0byBpbml0aWFsaXplIHJlc291cmNlIGhhbmRsZXJzLCBjb250aW51aW5nIHdpdGhvdXQgcmVzb3VyY2VzJyk7XG4gICAgICBsb2dnZXIuZGVidWcoYFJlc291cmNlIGluaXRpYWxpemF0aW9uIGVycm9yOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEVuc3VyZSBzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBvcGVyYXRpb25cbiAgICogRklYICM2MTA6IEFkZGVkIGZvciB0ZXN0IGNvbXBhdGliaWxpdHkgLSB0ZXN0cyBkb24ndCBjYWxsIHJ1bigpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXRcbiAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdGFydCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAobGF6eSlcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5lbnN1cmVJbml0aWFsaXplZCcsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgfVxuICBcbiAgLy8gVG9vbCBoYW5kbGVyIG1ldGhvZHMgLSBub3cgcHVibGljIGZvciBhY2Nlc3MgZnJvbSB0b29sIG1vZHVsZXNcbiAgXG4gIGFzeW5jIGxpc3RQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmxpc3RQZXJzb25hcygpO1xuICB9XG5cbiAgLy8gVXNlIGFjdGl2YXRlRWxlbWVudChuYW1lLCAncGVyc29uYScpLCBkZWFjdGl2YXRlRWxlbWVudChuYW1lLCAncGVyc29uYScpLFxuICAvLyBnZXRBY3RpdmVFbGVtZW50cygncGVyc29uYScpLCBhbmQgZ2V0RWxlbWVudERldGFpbHMobmFtZSwgJ3BlcnNvbmEnKSBpbnN0ZWFkLlxuICAvLyBUaGVzZSB3ZXJlIHJlbW92ZWQgdG8gbm9ybWFsaXplIHBlcnNvbmEgaGFuZGxpbmcgdGhyb3VnaCB0aGUgZ2VuZXJpYyBlbGVtZW50IEFQSS5cblxuICBhc3luYyByZWxvYWRQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLnJlbG9hZFBlcnNvbmFzKCk7XG4gIH1cblxuICAvLyA9PT09PSBFbGVtZW50IE1ldGhvZHMgKEdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKSA9PT09PVxuICBcbiAgYXN5bmMgbGlzdEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0UGVyc29uYXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubGlzdEVsZW1lbnRzKG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgdHlwZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gbGlzdCAke3R5cGV9OiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmFjdGl2YXRlUGVyc29uYSBpcyBkZXByZWNhdGVkOyBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5IGhhbmRsZXMgcGVyc29uYXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5hY3RpdmF0ZUVsZW1lbnQobmFtZSwgbm9ybWFsaXplZFR5cGUsIGNvbnRleHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5hY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmdldEFjdGl2ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZ2V0QWN0aXZlRWxlbWVudHMobm9ybWFsaXplZFR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5nZXRBY3RpdmVFbGVtZW50cycsIGVycm9yLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGdldCBhY3RpdmUgJHt0eXBlfTogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyODEgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlclxuICAgICAgLy8gUGVyc29uYUhhbmRsZXIuZGVhY3RpdmF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZGVhY3RpdmF0ZUVsZW1lbnQobmFtZSwgbm9ybWFsaXplZFR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5kZWFjdGl2YXRlRWxlbWVudCcsIGVycm9yLCB7IHR5cGUsIG5hbWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZ2V0RWxlbWVudERldGFpbHMobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmdldFBlcnNvbmFEZXRhaWxzIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZ2V0RWxlbWVudERldGFpbHMobmFtZSwgbm9ybWFsaXplZFR5cGUpO1xuICB9XG4gIFxuICBhc3luYyByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5yZWxvYWRFbGVtZW50cyh0eXBlKTtcbiAgfVxuXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLnJlbmRlclRlbXBsYXRlKG5hbWUsIHZhcmlhYmxlcyk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQWdlbnQobmFtZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZXhlY3V0ZUFnZW50KG5hbWUsIHBhcmFtZXRlcnMpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgaW4gdGhlIHBvcnRmb2xpby5cbiAgICogQHBhcmFtIGFyZ3MuZWxlbWVudHMgLSBGb3IgZW5zZW1ibGVzOiBhcnJheSBvZiBlbGVtZW50IHJlZmVyZW5jZXMgKElzc3VlICMyNzgpXG4gICAqL1xuICBhc3luYyBjcmVhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZzsgY29udGVudD86IHN0cmluZzsgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBlbGVtZW50cz86IEVuc2VtYmxlRWxlbWVudFtdfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyMCAtIFJlbW92ZSBwZXJzb25hIHNwZWNpYWwgY2FzZSwgcm91dGUgYWxsIGVsZW1lbnQgY3JlYXRpb24gdGhyb3VnaCBFbGVtZW50Q1JVREhhbmRsZXJcbiAgICAvLyBUaGlzIGVuc3VyZXMgY29uc2lzdGVudCBkdXBsaWNhdGUgY2hlY2tpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBhbGwgZWxlbWVudCB0eXBlc1xuICAgIC8vIEZJWDogSXNzdWUgIzI3OCAtIFN1cHBvcnQgZWxlbWVudHMgcGFyYW1ldGVyIGZvciBlbnNlbWJsZXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuY3JlYXRlRWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIGVkaXRFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmVkaXRQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IGVsZW1lbnRDUlVESGFuZGxlciBoYW5kbGVzIHBlcnNvbmFzIHZpYSBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5XG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmVkaXRFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgc3RyaWN0PzogYm9vbGVhbn0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci52YWxpZGF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgZWxlbWVudENSVURIYW5kbGVyIGhhbmRsZXMgcGVyc29uYXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEudmFsaWRhdGVFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmRlbGV0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgZWxlbWVudENSVURIYW5kbGVyIGhhbmRsZXMgcGVyc29uYXMgdmlhIGRlZGljYXRlZCBkZWxldGUgcGF0aFxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKGFyZ3MudHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5kZWxldGVFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5icm93c2VDb2xsZWN0aW9uKHNlY3Rpb24sIHR5cGUpO1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoQ29sbGVjdGlvbihxdWVyeTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5zZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb25FbmhhbmNlZChxdWVyeTogc3RyaW5nLCBvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc2VhcmNoQ29sbGVjdGlvbkVuaGFuY2VkKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuZ2V0Q29sbGVjdGlvbkNvbnRlbnQocGF0aCk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQ29udGVudChpbnB1dFBhdGg6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdENvbnRlbnQoY29udGVudElkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc3VibWl0Q29udGVudChjb250ZW50SWRlbnRpZmllcik7XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5nZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKTtcbiAgfVxuXG4gIC8vIFVzZXIgaWRlbnRpdHkgbWFuYWdlbWVudCAtIGRlbGVnYXRlZCB0byBJZGVudGl0eUhhbmRsZXJcbiAgYXN5bmMgc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lLCBlbWFpbCk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VySWRlbnRpdHkoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuZ2V0VXNlcklkZW50aXR5KCk7XG4gIH1cblxuICBhc3luYyBjbGVhclVzZXJJZGVudGl0eSgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5jbGVhclVzZXJJZGVudGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gIH1cblxuICAvLyBHaXRIdWIgYXV0aGVudGljYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBzZXR1cEdpdEh1YkF1dGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5zZXR1cEdpdEh1YkF1dGgoKTtcbiAgfVxuICBcbiAgYXN5bmMgY2hlY2tHaXRIdWJBdXRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuY2hlY2tHaXRIdWJBdXRoKCk7XG4gIH1cbiAgXG4gIGFzeW5jIGdldE9BdXRoSGVscGVyU3RhdHVzKHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuZ2V0T0F1dGhIZWxwZXJTdGF0dXModmVyYm9zZSk7XG4gIH1cbiAgXG5cbiAgXG4gIGFzeW5jIGNsZWFyR2l0SHViQXV0aCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmNsZWFyR2l0SHViQXV0aCgpO1xuICB9XG5cbiAgLy8gT0F1dGggY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIGNvbmZpZ3VyZU9BdXRoKGNsaWVudF9pZD86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuY29uZmlndXJlT0F1dGgoY2xpZW50X2lkKTtcbiAgfVxuXG5cblxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgaW5kaWNhdG9yIHNldHRpbmdzIChkZWxlZ2F0ZWQgdG8gRGlzcGxheUNvbmZpZ0hhbmRsZXIpXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVJbmRpY2F0b3IoY29uZmlnOiBQYXJ0aWFsPEluZGljYXRvckNvbmZpZz4pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbmZpZ0hhbmRsZXIhLmNvbmZpZ3VyZUluZGljYXRvcihjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGluZGljYXRvciBjb25maWd1cmF0aW9uIChkZWxlZ2F0ZWQgdG8gRGlzcGxheUNvbmZpZ0hhbmRsZXIpXG4gICAqL1xuICBhc3luYyBnZXRJbmRpY2F0b3JDb25maWcoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlDb25maWdIYW5kbGVyIS5nZXRJbmRpY2F0b3JDb25maWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgY29sbGVjdGlvbiBzdWJtaXNzaW9uIHNldHRpbmdzIChkZWxlZ2F0ZWQgdG8gQ29sbGVjdGlvbkhhbmRsZXIpXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0OiBib29sZWFuKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5jb25maWd1cmVDb2xsZWN0aW9uU3VibWlzc2lvbihhdXRvU3VibWl0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29sbGVjdGlvbiBzdWJtaXNzaW9uIGNvbmZpZ3VyYXRpb24gKGRlbGVnYXRlZCB0byBDb2xsZWN0aW9uSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGdldENvbGxlY3Rpb25TdWJtaXNzaW9uQ29uZmlnKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuZ2V0Q29sbGVjdGlvblN1Ym1pc3Npb25Db25maWcoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHNpbmdsZSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBleHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmV4cG9ydFBlcnNvbmEocGVyc29uYU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGV4cG9ydEFsbFBlcnNvbmFzKGluY2x1ZGVEZWZhdWx0cyA9IHRydWUpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmV4cG9ydEFsbFBlcnNvbmFzKGluY2x1ZGVEZWZhdWx0cyk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgcGVyc29uYVxuICAgKi9cbiAgYXN5bmMgaW1wb3J0UGVyc29uYShzb3VyY2U6IHN0cmluZywgb3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmltcG9ydFBlcnNvbmEoc291cmNlLCBvdmVyd3JpdGUpO1xuICB9XG5cblxuICAvKipcbiAgICogUG9ydGZvbGlvIG1hbmFnZW1lbnQgbWV0aG9kc1xuICAgKi9cblxuICAvKipcbiAgICogQ2hlY2sgcG9ydGZvbGlvIHN0YXR1cyBpbmNsdWRpbmcgcmVwb3NpdG9yeSBleGlzdGVuY2UgYW5kIHN5bmMgaW5mb3JtYXRpb25cbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb1N0YXR1cyh1c2VybmFtZT86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5wb3J0Zm9saW9TdGF0dXModXNlcm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgR2l0SHViIHBvcnRmb2xpbyByZXBvc2l0b3J5XG4gICAqL1xuICBhc3luYyBpbml0UG9ydGZvbGlvKG9wdGlvbnM6IHtyZXBvc2l0b3J5TmFtZT86IHN0cmluZzsgcHJpdmF0ZT86IGJvb2xlYW47IGRlc2NyaXB0aW9uPzogc3RyaW5nfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5pbml0UG9ydGZvbGlvKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBwb3J0Zm9saW8gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5wb3J0Zm9saW9Db25maWcob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3luYyBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcbiAgICovXG4gIGFzeW5jIHN5bmNQb3J0Zm9saW8ob3B0aW9uczoge1xuICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgZm9yY2U6IGJvb2xlYW47XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGNvbmZpcm1EZWxldGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnN5bmNQb3J0Zm9saW8ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBDb25maWdIYW5kbGVyXG4gICovXG4gIGFzeW5jIGhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zOiBhbnkpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnSGFuZGxlciEuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzeW5jIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gU3luY0hhbmRsZXJcbiAgICovXG4gIGFzeW5jIGhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnN5bmNIYW5kbGVyIS5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGxvY2FsIHBvcnRmb2xpbyB1c2luZyB0aGUgbWV0YWRhdGEgaW5kZXggc3lzdGVtXG4gICAqIFRoaXMgcHJvdmlkZXMgZmFzdCwgY29tcHJlaGVuc2l2ZSBzZWFyY2ggYWNyb3NzIGFsbCBlbGVtZW50IHR5cGVzXG4gICAqL1xuICBhc3luYyBzZWFyY2hQb3J0Zm9saW8ob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7IFxuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nOyBcbiAgICBmdXp6eU1hdGNoPzogYm9vbGVhbjsgXG4gICAgbWF4UmVzdWx0cz86IG51bWJlcjsgXG4gICAgaW5jbHVkZUtleXdvcmRzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRhZ3M/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVHJpZ2dlcnM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlRGVzY3JpcHRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5zZWFyY2hQb3J0Zm9saW8ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGFjcm9zcyBhbGwgc291cmNlcyAobG9jYWwsIEdpdEh1YiwgY29sbGVjdGlvbikgdXNpbmcgVW5pZmllZEluZGV4TWFuYWdlclxuICAgKiBUaGlzIHByb3ZpZGVzIGNvbXByZWhlbnNpdmUgc2VhcmNoIHdpdGggZHVwbGljYXRlIGRldGVjdGlvbiBhbmQgdmVyc2lvbiBjb21wYXJpc29uXG4gICAqL1xuICBhc3luYyBzZWFyY2hBbGwob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7XG4gICAgc291cmNlcz86IHN0cmluZ1tdO1xuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgcGFnZVNpemU/OiBudW1iZXI7XG4gICAgc29ydEJ5Pzogc3RyaW5nO1xuICB9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnNlYXJjaEFsbChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHNlbWFudGljYWxseSBzaW1pbGFyIGVsZW1lbnRzIHVzaW5nIEVuaGFuY2VkIEluZGV4XG4gICAqL1xuICBhc3luYyBmaW5kU2ltaWxhckVsZW1lbnRzKG9wdGlvbnM6IHtcbiAgICBlbGVtZW50TmFtZTogc3RyaW5nO1xuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgdGhyZXNob2xkOiBudW1iZXI7XG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuZmluZFNpbWlsYXJFbGVtZW50cyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHJlbGF0aW9uc2hpcHMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudFxuICAgKi9cbiAgYXN5bmMgZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcmVsYXRpb25zaGlwVHlwZXM/OiBzdHJpbmdbXTtcbiAgfSkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5nZXRFbGVtZW50UmVsYXRpb25zaGlwcyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIGVsZW1lbnRzIGJ5IGFjdGlvbiB2ZXJiXG4gICAqL1xuICBhc3luYyBzZWFyY2hCeVZlcmIob3B0aW9uczoge1xuICAgIHZlcmI6IHN0cmluZztcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLnNlYXJjaEJ5VmVyYihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhdGlzdGljcyBhYm91dCBFbmhhbmNlZCBJbmRleCByZWxhdGlvbnNoaXBzXG4gICAqL1xuICBhc3luYyBnZXRSZWxhdGlvbnNoaXBTdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuZ2V0UmVsYXRpb25zaGlwU3RhdHMoKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJEb2xsaG91c2VNQ1BTZXJ2ZXIucnVuKCkgc3RhcnRlZFwiKTtcbiAgICBsb2dnZXIuaW5mbyhcIlN0YXJ0aW5nIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG5cbiAgICBjb25zdCB0aW1lciA9IHRoaXMuY29udGFpbmVyLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJyk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBDcml0aWNhbCBwYXRoIG9ubHkg4oCUIGdldCB0byBjb25uZWN0KCkgYXMgZmFzdCBhcyBwb3NzaWJsZVxuICAgIC8vIE5vbi1jcml0aWNhbCB3b3JrIChtZW1vcnkgYXV0by1sb2FkLCBhY3RpdmF0aW9uIHJlc3RvcmUsIGV0Yy4pIGlzXG4gICAgLy8gZGVmZXJyZWQgdG8gY29tcGxldGVEZWZlcnJlZFNldHVwKCkgd2hpY2ggcnVucyBwb3N0LWNvbm5lY3QuXG4gICAgdHJ5IHtcbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ3BvcnRmb2xpb19wcmVwYXJlJywgdHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdwb3J0Zm9saW9fcHJlcGFyZScpO1xuXG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdoYW5kbGVyX2NyZWF0aW9uJywgdHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdoYW5kbGVyX2NyZWF0aW9uJyk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgb3BlcmF0aW9uYWwgdGVsZW1ldHJ5IChhc3luYywgbm9uLWJsb2NraW5nLCBuZXZlciB0aHJvd3MpXG4gICAgICBjb25zdCBvcGVyYXRpb25hbFRlbGVtZXRyeSA9IHRoaXMuY29udGFpbmVyLnJlc29sdmU8T3BlcmF0aW9uYWxUZWxlbWV0cnk+KCdPcGVyYXRpb25hbFRlbGVtZXRyeScpO1xuICAgICAgb3BlcmF0aW9uYWxUZWxlbWV0cnkuaW5pdGlhbGl6ZSgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gVGVsZW1ldHJ5IGVycm9ycyBhcmUgbG9nZ2VkIGludGVybmFsbHksIHNhZmUgdG8gaWdub3JlIGhlcmVcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuXG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfR0FURUtFRVBFUl9FTkFCTEVEKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwi4pqg77iPICBHYXRla2VlcGVyIGlzIERJU0FCTEVEIChET0xMSE9VU0VfR0FURUtFRVBFUl9FTkFCTEVEPWZhbHNlKS4gQWxsIHBlcm1pc3Npb24gY2hlY2tzIGFyZSBieXBhc3NlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciByZWFkeSAtIHdhaXRpbmcgZm9yIE1DUCBjb25uZWN0aW9uIG9uIHN0ZGlvXCIpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRG9sbGhvdXNlTUNQU2VydmVyLnJ1bigpIGNvbXBsZXRlZCBpbml0aWFsaXphdGlvblwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIucnVuLmluaXRpYWxpemF0aW9uJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHRvIHByZXZlbnQgc2VydmVyIGZyb20gc3RhcnRpbmcgd2l0aCBpbmNvbXBsZXRlIGluaXRpYWxpemF0aW9uXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG5cbiAgICAvLyBTZXQgdXAgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXCJTaHV0dGluZyBkb3duIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmRpc3Bvc2UoKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJDbGVhbnVwIGNvbXBsZXRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuXG4gICAgLy8gUmVnaXN0ZXIgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdURVJNJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHSFVQJywgY2xlYW51cCk7XG5cbiAgICAvLyBDb25uZWN0IEFTQVAg4oCUIHRvb2xzIGFyZSByZWdpc3RlcmVkLCBzZXJ2ZXIgY2FuIGFjY2VwdCByZXF1ZXN0c1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21jcF9jb25uZWN0JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5zZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuICAgIHRpbWVyLmVuZFBoYXNlKCdtY3BfY29ubmVjdCcpO1xuICAgIHRpbWVyLm1hcmtDb25uZWN0KCk7XG5cbiAgICAvLyBNYXJrIHRoYXQgTUNQIGlzIG5vdyBjb25uZWN0ZWQgLSBubyBtb3JlIGNvbnNvbGUgb3V0cHV0IGFsbG93ZWRcbiAgICBsb2dnZXIuc2V0TUNQQ29ubmVjdGVkKCk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDM6IEVtaXQgUkVBRFkgc2VudGluZWwgZm9yIGJyaWRnZSBjbGllbnRzXG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ0RPTExIT1VTRU1DUF9SRUFEWVxcbicpO1xuXG4gICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW9cIik7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDI6IERlZmVycmVkIHNldHVwIOKAlCBydW5zIHBvc3QtY29ubmVjdCwgbm9uLWJsb2NraW5nXG4gICAgLy8gUGF0dGVybiBlbmNyeXB0aW9uLCBiYWNrZ3JvdW5kIHZhbGlkYXRvciwgbWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvblxuICAgIC8vIHJlc3RvcmUsIGxvZyBob29rcywgZGFuZ2VyIHpvbmUgaW5pdCBhbGwgbW92ZSBoZXJlLlxuICAgIGNvbnN0IGRlZmVycmVkUHJvbWlzZSA9IHRoaXMuY29udGFpbmVyLmNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpO1xuICAgIGRlZmVycmVkUHJvbWlzZS5jYXRjaChlcnIgPT4gbG9nZ2VyLndhcm4oJ1tTdGFydHVwXSBEZWZlcnJlZCBzZXR1cCBlcnJvcjonLCBlcnIpKTtcblxuICAgIC8vIElzc3VlICM3MDYgUGhhc2UgNDogV2lyZSBkZWZlcnJlZCBwcm9taXNlIGludG8gU2VydmVyU2V0dXAgZm9yIHJlcXVlc3QgYnVmZmVyaW5nXG4gICAgY29uc3Qgc2VydmVyU2V0dXAgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPGltcG9ydCgnLi9zZXJ2ZXIvU2VydmVyU2V0dXAuanMnKS5TZXJ2ZXJTZXR1cD4oJ1NlcnZlclNldHVwJyk7XG4gICAgc2VydmVyU2V0dXAuc2V0RGVmZXJyZWRTZXR1cFByb21pc2UoZGVmZXJyZWRQcm9taXNlKTtcblxuICAgIC8vIExvZyBzdGFydHVwIHRpbWluZyBhZnRlciBkZWZlcnJlZCBzZXR1cCBjb21wbGV0ZXNcbiAgICBkZWZlcnJlZFByb21pc2UudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXBvcnQgPSB0aW1lci5nZXRSZXBvcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gRnVsbCByZXBvcnQ6IGNvbm5lY3QgYXQgJHtyZXBvcnQuY29ubmVjdEF0TXN9bXMsIGAgK1xuICAgICAgICBgY3JpdGljYWwgJHtyZXBvcnQuY3JpdGljYWxQYXRoTXN9bXMsIGRlZmVycmVkICR7cmVwb3J0LmRlZmVycmVkTXN9bXMsIGAgK1xuICAgICAgICBgdG90YWwgJHtyZXBvcnQudG90YWxNc31tc2ApO1xuICAgIH0pLmNhdGNoKCgpID0+IHsgLyogYWxyZWFkeSBsb2dnZWQgKi8gfSk7XG5cbiAgfVxufVxuXG4vLyBFeHBvcnQgaXMgYWxyZWFkeSBhdCBjbGFzcyBkZWNsYXJhdGlvblxuXG4vLyBPbmx5IHN0YXJ0IHRoZSBzZXJ2ZXIgaWYgdGhpcyBmaWxlIGlzIGJlaW5nIHJ1biBkaXJlY3RseSAobm90IGltcG9ydGVkIGJ5IHRlc3RzKVxuLy8gSGFuZGxlIGRpZmZlcmVudCBleGVjdXRpb24gbWV0aG9kcyAoZGlyZWN0LCBucHgsIENMSSlcbmNvbnN0IHNjcmlwdFBhdGggPSBwcm9jZXNzLmFyZ3Y/LlsxXSA/IHBhdGgubm9ybWFsaXplKHByb2Nlc3MuYXJndlsxXSkgOiAnJztcbmNvbnN0IGlzRGlyZWN0RXhlY3V0aW9uID1cbiAgc2NyaXB0UGF0aC5lbmRzV2l0aChgJHtwYXRoLnNlcH1kaXN0JHtwYXRoLnNlcH1pbmRleC5qc2ApIHx8XG4gIHNjcmlwdFBhdGguZW5kc1dpdGgoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1pbmRleC50c2ApO1xuY29uc3QgaXNOcHhFeGVjdXRpb24gPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKTtcbmNvbnN0IGlzQ2xpRXhlY3V0aW9uID0gcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJ1xcXFxkb2xsaG91c2VtY3AnKTtcbmNvbnN0IGlzVGVzdCA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEOyAvLyBUaGlzIGlzIHNldCB3aGVuIEplc3QgcnVucyB0ZXN0c1xuY29uc3QgaXNUZXN0TW9kZSA9IHByb2Nlc3MuZW52LlRFU1RfTU9ERSA9PT0gJ3RydWUnOyAvLyBDaGVjayBmb3IgVEVTVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlXG5jb25zdCBkb2xsaG91c2VEZWJ1Z0ZsYWcgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUc/LnRvTG93ZXJDYXNlKCk7XG5jb25zdCBpc0RlYnVnU3RhcnR1cExvZ2dpbmcgPSBkb2xsaG91c2VEZWJ1Z0ZsYWcgPT09ICd0cnVlJyB8fCBkb2xsaG91c2VEZWJ1Z0ZsYWcgPT09ICcxJztcblxuLy8gUHJvZ3Jlc3NpdmUgc3RhcnR1cCB3aXRoIHJldHJpZXMgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5jb25zdCBTVEFSVFVQX0RFTEFZUyA9IFsxMCwgNTAsIDEwMCwgMjAwXTsgLy8gUHJvZ3Jlc3NpdmUgZGVsYXlzIGluIG1zXG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyV2l0aFJldHJ5KHJldHJpZXNMZWZ0ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0RlYnVnU3RhcnR1cExvZ2dpbmcpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiREVCVUc6IHN0YXJ0U2VydmVyV2l0aFJldHJ5IGNhbGxlZC5cIik7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKCk7XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IERvbGxob3VzZU1DUFNlcnZlcihjb250YWluZXIpO1xuICAgIGF3YWl0IHNlcnZlci5ydW4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAocmV0cmllc0xlZnQgPiAwICYmIChpc05weEV4ZWN1dGlvbiB8fCBpc0NsaUV4ZWN1dGlvbikpIHtcbiAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgbG9uZ2VyIGRlbGF5XG4gICAgICBjb25zdCBkZWxheUluZGV4ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoIC0gcmV0cmllc0xlZnQ7XG4gICAgICBjb25zdCBkZWxheSA9IFNUQVJUVVBfREVMQVlTW2RlbGF5SW5kZXhdO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICByZXR1cm4gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgLSAxKTtcbiAgICB9XG4gICAgLy8gRmluYWwgZmFpbHVyZSAtIG1pbmltYWwgZXJyb3IgbWVzc2FnZSBmb3Igc2VjdXJpdHlcbiAgICAvLyBOb3RlOiBVc2luZyBjb25zb2xlLmVycm9yIGhlcmUgaXMgaW50ZW50aW9uYWwgYXMgaXQncyB0aGUgZmluYWwgZXJyb3IgYmVmb3JlIGV4aXRcbiAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkXCIsIGVycm9yKTsgLy8gQWRkZWQgZXJyb3Igb2JqZWN0XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmlmICgoaXNEaXJlY3RFeGVjdXRpb24gfHwgaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pICYmICghaXNUZXN0IHx8IGlzVGVzdE1vZGUpKSB7XG4gIC8vIElzc3VlICM3MDQ6IC0td2ViIGZsYWcgc3RhcnRzIHRoZSBwb3J0Zm9saW8gd2ViIFVJIGluc3RlYWQgb2YgTUNQIHNlcnZlclxuICBjb25zdCBpc1dlYk1vZGUgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0td2ViJyk7XG4gIGlmIChpc1dlYk1vZGUpIHtcbiAgICAvLyBJc3N1ZSAjNzk2OiBCb290c3RyYXAgREkgY29udGFpbmVyIGZvciB3ZWItb25seSBtb2RlIHNvIEFQSSByb3V0ZXNcbiAgICAvLyBnbyB0aHJvdWdoIE1DUEFRTEhhbmRsZXIgKHZhbGlkYXRlZCwgY2FjaGVkLCBnYXRla2VlcGVyLWNoZWNrZWQpXG4gICAgLy9cbiAgICAvLyBTdXBwcmVzcyBkZWJ1ZyBvdXRwdXQgaW4gLS13ZWIgbW9kZSB1bmxlc3MgRE9MTEhPVVNFX0RFQlVHIGlzIHNldC5cbiAgICAvLyBUaGUgd2ViIGNvbnNvbGUgY2FwdHVyZXMgYWxsIGxvZ3MgaW4gbWVtb3J5IOKAlCBubyBuZWVkIHRvIGZsb29kIHRoZSB0ZXJtaW5hbC5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRyAmJiAhcHJvY2Vzcy5lbnYuRU5BQkxFX0RFQlVHKSB7XG4gICAgICBsb2dnZXIuc2V0TWluTGV2ZWwoJ2luZm8nKTtcbiAgICB9XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcG9ydGZvbGlvRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAncG9ydGZvbGlvJyk7XG4gICAgICBjb25zdCBwb3J0QXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoYSA9PiBhLnN0YXJ0c1dpdGgoJy0tcG9ydD0nKSk7XG4gICAgICBjb25zdCBwb3J0ID0gcG9ydEFyZyA/IHBhcnNlSW50KHBvcnRBcmcuc3BsaXQoJz0nKVsxXSwgMTApIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgbm9Ccm93c2VyID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLW5vLW9wZW4nKTtcblxuICAgICAgbGV0IG1jcEFxbEhhbmRsZXI7XG4gICAgICBsZXQgbWVtb3J5U2luazogaW1wb3J0KCcuL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcycpLk1lbW9yeUxvZ1NpbmsgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgbWV0cmljc1Npbms6IGltcG9ydCgnLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJykuTWVtb3J5TWV0cmljc1NpbmsgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKCk7XG4gICAgICAgIGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlUG9ydGZvbGlvKCk7XG4gICAgICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IGNvbnRhaW5lci5ib290c3RyYXBIYW5kbGVycygpO1xuICAgICAgICBhd2FpdCBjb250YWluZXIuY29tcGxldGVEZWZlcnJlZFNldHVwKCk7XG4gICAgICAgIG1jcEFxbEhhbmRsZXIgPSBidW5kbGUubWNwQXFsSGFuZGxlcjtcbiAgICAgICAgLy8gRXh0cmFjdCBzaW5rcyBmcm9tIGNvbnRhaW5lciDigJQgZGVmZXJyZWQgc2V0dXAgbWF5IGhhdmUgYWxyZWFkeSB3aXJlZCB0aGVtXG4gICAgICAgIHRyeSB7IG1lbW9yeVNpbmsgPSBjb250YWluZXIucmVzb2x2ZTxpbXBvcnQoJy4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJykuTWVtb3J5TG9nU2luaz4oJ01lbW9yeUxvZ1NpbmsnKTsgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgdHJ5IHsgbWV0cmljc1NpbmsgPSBjb250YWluZXIucmVzb2x2ZTxpbXBvcnQoJy4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcycpLk1lbW9yeU1ldHJpY3NTaW5rPignTWVtb3J5TWV0cmljc1NpbmsnKTsgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIENvbnRhaW5lciBib290c3RyYXBwZWQg4oCUIHdlYiByb3V0ZXMgdXNpbmcgTUNQLUFRTCBHYXRld2F5XCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBDb250YWluZXIgYm9vdHN0cmFwIGZhaWxlZCDigJQgd2ViIHJvdXRlcyB3aWxsIHVzZSBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MuXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gUmVhc29uOlwiLCAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBUaGlzIG1heSBpbmRpY2F0ZSBhIGNvcnJ1cHQgcG9ydGZvbGlvIG9yIG1pc3NpbmcgZGVwZW5kZW5jaWVzLlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIHNpbmtzIGV4aXN0IGV2ZW4gaWYgY29udGFpbmVyIGJvb3RzdHJhcCBmYWlsZWQg4oCUXG4gICAgICAvLyBzdGFuZGFsb25lIC0td2ViIG1vZGUgc3RpbGwgbmVlZHMgd29ya2luZyBsb2dzIGFuZCBtZXRyaWNzIHRhYnNcbiAgICAgIGlmICghbWVtb3J5U2luaykge1xuICAgICAgICBjb25zdCB7IE1lbW9yeUxvZ1NpbmsgfSA9IGF3YWl0IGltcG9ydCgnLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnKTtcbiAgICAgICAgbWVtb3J5U2luayA9IG5ldyBNZW1vcnlMb2dTaW5rKHtcbiAgICAgICAgICBhcHBDYXBhY2l0eTogMTAwMDAsXG4gICAgICAgICAgc2VjdXJpdHlDYXBhY2l0eTogNTAwMCxcbiAgICAgICAgICBwZXJmQ2FwYWNpdHk6IDIwMDAsXG4gICAgICAgICAgdGVsZW1ldHJ5Q2FwYWNpdHk6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFtZXRyaWNzU2luaykge1xuICAgICAgICBjb25zdCB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gPSBhd2FpdCBpbXBvcnQoJy4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcycpO1xuICAgICAgICBtZXRyaWNzU2luayA9IG5ldyBNZW1vcnlNZXRyaWNzU2luaygyNDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vd2ViL3NlcnZlci5qcycpO1xuICAgICAgYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoeyBwb3J0Zm9saW9EaXIsIHBvcnQsIG9wZW5Ccm93c2VyOiAhbm9Ccm93c2VyLCBtY3BBcWxIYW5kbGVyLCBtZW1vcnlTaW5rLCBtZXRyaWNzU2luayB9KTtcbiAgICB9KSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gV2ViIFVJIGZhaWxlZCB0byBzdGFydDpcIiwgZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWJ1Z1N0YXJ0dXBMb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiREVCVUc6IFNlcnZlciBzdGFydHVwIGNvbmRpdGlvbiBtZXQuIENhbGxpbmcgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkuXCIpO1xuICAgIH1cbiAgICBzdGFydFNlcnZlcldpdGhSZXRyeSgpLmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
700
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGtFQUFrRTtBQUNsRSw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixpREFBaUQ7QUFDakQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUU7UUFDM0MsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0QsS0FBSyxFQUFFLEtB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Q0FBQyx3Q0FBd0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM3RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxvQkFBb0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDaEMsb0ZBQW9GO1lBQ3BGLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8vIExvYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gLmVudiBmaWxlcyBCRUZPUkUgYW55dGhpbmcgZWxzZVxuLy8gVGhpcyBlbnN1cmVzIC5lbnYubG9jYWwgYW5kIC5lbnYgYXJlIGxvYWRlZCBmb3IgYWxsIG1vZHVsZXNcbmltcG9ydCB7IGVudiB9IGZyb20gJy4vY29uZmlnL2Vudi5qcyc7XG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IFN0ZGlvU2VydmVyVHJhbnNwb3J0IH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIgfSBmcm9tIFwiLi91dGlscy9FcnJvckhhbmRsZXIuanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL3V0aWxzL2xvZ2dlci5qc1wiO1xuaW1wb3J0IHsgRG9sbGhvdXNlQ29udGFpbmVyIH0gZnJvbSBcIi4vZGkvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gXCIuL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25hbFRlbGVtZXRyeSwgU3RhcnR1cFRpbWVyIH0gZnJvbSBcIi4vdGVsZW1ldHJ5L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBQQUNLQUdFX1ZFUlNJT04gfSBmcm9tIFwiLi9nZW5lcmF0ZWQvdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmRpY2F0b3JDb25maWcgfSBmcm9tIFwiLi9jb25maWcvaW5kaWNhdG9yLWNvbmZpZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJVG9vbEhhbmRsZXIgfSBmcm9tIFwiLi9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vaGFuZGxlcnMvVG9vbFJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBlcnNvbmFIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvUGVyc29uYUhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRWxlbWVudENSVURIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvRWxlbWVudENSVURIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25IYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvQ29sbGVjdGlvbkhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9ydGZvbGlvSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL1BvcnRmb2xpb0hhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgR2l0SHViQXV0aEhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9HaXRIdWJBdXRoSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5Q29uZmlnSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0Rpc3BsYXlDb25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IElkZW50aXR5SGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0lkZW50aXR5SGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTeW5jSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRJbmRleEhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9FbmhhbmNlZEluZGV4SGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanNcIjtcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gXCIuL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgdHlwZSB7IEVuc2VtYmxlRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2Vuc2VtYmxlcy90eXBlcy5qc1wiO1xuXG4vLyBEZWZlbnNpdmUgZXJyb3IgaGFuZGxpbmcgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5wcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnJvcikgPT4ge1xuICBsb2dnZXIuZXJyb3IoJ1VuaGFuZGxlZCBleGNlcHRpb24gZGV0ZWN0ZWQnLCB7XG4gICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkXG4gIH0pO1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbnByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChyZWFzb24sIHByb21pc2UpID0+IHtcbiAgbG9nZ2VyLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gZGV0ZWN0ZWQnLCB7XG4gICAgcmVhc29uOiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5tZXNzYWdlIDogU3RyaW5nKHJlYXNvbiksXG4gICAgc3RhY2s6IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgIHByb21pc2VcbiAgfSk7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxuLy8gT25seSBsb2cgZXhlY3V0aW9uIGVudmlyb25tZW50IGluIGRlYnVnIG1vZGVcbmlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcpIHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gRGVidWcgbW9kZSBlbmFibGVkJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBEb2xsaG91c2VNQ1BTZXJ2ZXIgaW1wbGVtZW50cyBJVG9vbEhhbmRsZXIge1xuICBwcml2YXRlIHNlcnZlcjogU2VydmVyO1xuICBwdWJsaWMgcGVyc29uYXNEaXI6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFVzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0aWFsaXphdGlvblByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb250YWluZXI6IERvbGxob3VzZUNvbnRhaW5lcjtcbiAgcHJpdmF0ZSB0b29sUmVnaXN0cnk/OiBUb29sUmVnaXN0cnk7XG4gIHByaXZhdGUgZW5oYW5jZWRJbmRleEhhbmRsZXI/OiBFbmhhbmNlZEluZGV4SGFuZGxlcjtcbiAgcHJpdmF0ZSBwZXJzb25hSGFuZGxlcj86IFBlcnNvbmFIYW5kbGVyO1xuICBwcml2YXRlIGVsZW1lbnRDUlVESGFuZGxlcj86IEVsZW1lbnRDUlVESGFuZGxlcjtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcj86IENvbGxlY3Rpb25IYW5kbGVyO1xuICBwcml2YXRlIHBvcnRmb2xpb0hhbmRsZXI/OiBQb3J0Zm9saW9IYW5kbGVyO1xuICBwcml2YXRlIGdpdGh1YkF1dGhIYW5kbGVyPzogR2l0SHViQXV0aEhhbmRsZXI7XG4gIHByaXZhdGUgZGlzcGxheUNvbmZpZ0hhbmRsZXI/OiBEaXNwbGF5Q29uZmlnSGFuZGxlcjtcbiAgcHJpdmF0ZSBpZGVudGl0eUhhbmRsZXI/OiBJZGVudGl0eUhhbmRsZXI7XG4gIHByaXZhdGUgY29uZmlnSGFuZGxlcj86IENvbmZpZ0hhbmRsZXI7XG4gIHByaXZhdGUgc3luY0hhbmRsZXI/OiBTeW5jSGFuZGxlcjtcbiAgcHJpdmF0ZSByZXNvdXJjZUhhbmRsZXI/OiBpbXBvcnQoJy4vaGFuZGxlcnMvUmVzb3VyY2VIYW5kbGVyLmpzJykuUmVzb3VyY2VIYW5kbGVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyIGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXIgRG9sbGhvdXNlQ29udGFpbmVyIGluc3RhbmNlIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAgICogICAgICAgICAgICAgICAgICBVc2UgYG5ldyBEb2xsaG91c2VDb250YWluZXIoKWAgZm9yIHByb2R1Y3Rpb24gb3JcbiAgICogICAgICAgICAgICAgICAgICBgY3JlYXRlSW50ZWdyYXRpb25Db250YWluZXIoKS5jb250YWluZXJgIGZvciB0ZXN0cy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lcjogRG9sbGhvdXNlQ29udGFpbmVyKSB7XG4gICAgLy8gQnVpbGQgY2FwYWJpbGl0aWVzIG9iamVjdCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICAvLyBSZXNvdXJjZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgKGFkdmVydGlzZV9yZXNvdXJjZXM6IGZhbHNlKVxuICAgIGNvbnN0IGNhcGFiaWxpdGllczogYW55ID0ge1xuICAgICAgdG9vbHM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBpZiByZXNvdXJjZXMgc2hvdWxkIGJlIGFkdmVydGlzZWRcbiAgICAvLyBUaGlzIGlzIGEgZnV0dXJlLXByb29mIGltcGxlbWVudGF0aW9uIC0gcmVzb3VyY2VzIGFyZSBvcHQtaW5cbiAgICB0cnkge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBDb25maWdNYW5hZ2VyIHRvIGNoZWNrIHJlc291cmNlIHNldHRpbmdzXG4gICAgICAvLyBOb3RlOiBDb25maWcgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZCB5ZXQsIHNvIHdlIGNoZWNrIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIElmIGNvbmZpZyBpcyBub3QgaW5pdGlhbGl6ZWQsIGRlZmF1bHRzIChhZHZlcnRpc2VfcmVzb3VyY2VzOiBmYWxzZSkgYXBwbHlcbiAgICAgIGNvbnN0IGZpbGVMb2NrTWFuYWdlciA9IG5ldyBGaWxlTG9ja01hbmFnZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVPcGVyYXRpb25zID0gbmV3IEZpbGVPcGVyYXRpb25zU2VydmljZShmaWxlTG9ja01hbmFnZXIpO1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IG5ldyBDb25maWdNYW5hZ2VyKGZpbGVPcGVyYXRpb25zLCBvcyk7XG4gICAgICBjb25zdCByZXNvdXJjZXNDb25maWcgPSBjb25maWdNYW5hZ2VyLmdldFNldHRpbmc8YW55PignZWxlbWVudHMuZW5oYW5jZWRfaW5kZXgucmVzb3VyY2VzJyk7XG5cbiAgICAgIGlmIChyZXNvdXJjZXNDb25maWc/LmFkdmVydGlzZV9yZXNvdXJjZXMgPT09IHRydWUpIHtcbiAgICAgICAgY2FwYWJpbGl0aWVzLnJlc291cmNlcyA9IHt9O1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gTUNQIFJlc291cmNlcyBjYXBhYmlsaXR5IGFkdmVydGlzZWQgKGVuYWJsZWQgdmlhIGNvbmZpZyknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBNQ1AgUmVzb3VyY2VzIGNhcGFiaWxpdHkgTk9UIGFkdmVydGlzZWQgKGRpc2FibGVkIGJ5IGRlZmF1bHQpJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIENvbmZpZyBub3QgaW5pdGlhbGl6ZWQgeWV0IC0gdXNlIHNhZmUgZGVmYXVsdCAobm8gcmVzb3VyY2VzKVxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbRG9sbGhvdXNlTUNQXSBDb25maWcgbm90IGluaXRpYWxpemVkIHlldCwgcmVzb3VyY2VzIGNhcGFiaWxpdHkgZGlzYWJsZWQgYnkgZGVmYXVsdDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2ZXIgPSBuZXcgU2VydmVyKFxuICAgICAge1xuICAgICAgICBuYW1lOiBcImRvbGxob3VzZW1jcFwiLFxuICAgICAgICB2ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGVyc29uYXNEaXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiB8fCBudWxsO1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVQb3J0Zm9saW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb250YWluZXIucHJlcGFyZVBvcnRmb2xpbygpO1xuICAgIHRoaXMucGVyc29uYXNEaXIgPSB0aGlzLmNvbnRhaW5lci5nZXRQZXJzb25hc0RpcigpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29tcGxldGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgcG9ydGZvbGlvIGlzIHJlYWR5XG4gICAqIEZJWCAjNjEwOiBUaGlzIHdhcyBwcmV2aW91c2x5IGluIGEgLnRoZW4oKSBjYWxsYmFjayBpbiB0aGUgY29uc3RydWN0b3JcbiAgICogTm93IGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20gcnVuKCkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb21wbGV0ZUluaXRpYWxpemF0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENyZWF0ZSBoYW5kbGVycyB3aXRoIHNlcnZlciBpbnN0YW5jZSAtIGFsbCBzdGF0ZSBtYW5hZ2VkIGJ5IHNlcnZpY2VzXG4gICAgY29uc3QgaGFuZGxlcnMgPSBhd2FpdCB0aGlzLmNvbnRhaW5lci5jcmVhdGVIYW5kbGVycyh0aGlzLnNlcnZlcik7XG5cbiAgICB0aGlzLnBlcnNvbmFIYW5kbGVyID0gaGFuZGxlcnMucGVyc29uYUhhbmRsZXI7XG4gICAgdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIgPSBoYW5kbGVycy5lbGVtZW50Q3J1ZEhhbmRsZXI7XG4gICAgdGhpcy5jb2xsZWN0aW9uSGFuZGxlciA9IGhhbmRsZXJzLmNvbGxlY3Rpb25IYW5kbGVyO1xuICAgIHRoaXMucG9ydGZvbGlvSGFuZGxlciA9IGhhbmRsZXJzLnBvcnRmb2xpb0hhbmRsZXI7XG4gICAgdGhpcy5naXRodWJBdXRoSGFuZGxlciA9IGhhbmRsZXJzLmdpdGh1YkF1dGhIYW5kbGVyO1xuICAgIHRoaXMuZGlzcGxheUNvbmZpZ0hhbmRsZXIgPSBoYW5kbGVycy5kaXNwbGF5Q29uZmlnSGFuZGxlcjtcbiAgICB0aGlzLmlkZW50aXR5SGFuZGxlciA9IGhhbmRsZXJzLmlkZW50aXR5SGFuZGxlcjtcbiAgICB0aGlzLmNvbmZpZ0hhbmRsZXIgPSBoYW5kbGVycy5jb25maWdIYW5kbGVyO1xuICAgIHRoaXMuc3luY0hhbmRsZXIgPSBoYW5kbGVycy5zeW5jSGFuZGxlcjtcbiAgICB0aGlzLnRvb2xSZWdpc3RyeSA9IGhhbmRsZXJzLnRvb2xSZWdpc3RyeTtcbiAgICB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyID0gaGFuZGxlcnMuZW5oYW5jZWRJbmRleEhhbmRsZXI7XG5cbiAgICAvLyBJbml0aWFsaXplIGFuZCByZWdpc3RlciByZXNvdXJjZSBoYW5kbGVyc1xuICAgIC8vIFJlc291cmNlcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgcmVxdWlyZSBleHBsaWNpdCBjb25maWd1cmF0aW9uXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUmVzb3VyY2VIYW5kbGVycygpO1xuXG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIE1DUCBSZXNvdXJjZXMgaGFuZGxlcnMgaWYgZW5hYmxlZCBpbiBjb25maWd1cmF0aW9uXG4gICAqIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBvdGhlciBoYW5kbGVycyBiZWNhdXNlIGl0IHJlcXVpcmVzIGR5bmFtaWMgaW1wb3J0XG4gICAqIGFuZCBjb25kaXRpb25hbCByZWdpc3RyYXRpb24gYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplUmVzb3VyY2VIYW5kbGVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBSZXNvdXJjZUhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9oYW5kbGVycy9SZXNvdXJjZUhhbmRsZXIuanMnKTtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG5cbiAgICAgIHRoaXMucmVzb3VyY2VIYW5kbGVyID0gbmV3IFJlc291cmNlSGFuZGxlcihjb25maWdNYW5hZ2VyKTtcbiAgICAgIGF3YWl0IHRoaXMucmVzb3VyY2VIYW5kbGVyLmluaXRpYWxpemUodGhpcy5zZXJ2ZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBSZXNvdXJjZXMgYXJlIG9wdGlvbmFsIC0gZG9uJ3QgZmFpbCBzZXJ2ZXIgc3RhcnR1cCBpZiB0aGV5IGNhbid0IGJlIGluaXRpYWxpemVkXG4gICAgICBsb2dnZXIud2FybignW0RvbGxob3VzZU1DUF0gRmFpbGVkIHRvIGluaXRpYWxpemUgcmVzb3VyY2UgaGFuZGxlcnMsIGNvbnRpbnVpbmcgd2l0aG91dCByZXNvdXJjZXMnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVzb3VyY2UgaW5pdGlhbGl6YXRpb24gZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRW5zdXJlIHNlcnZlciBpcyBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9wZXJhdGlvblxuICAgKiBGSVggIzYxMDogQWRkZWQgZm9yIHRlc3QgY29tcGF0aWJpbGl0eSAtIHRlc3RzIGRvbid0IGNhbGwgcnVuKClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3YWl0IGZvciBpdFxuICAgIGlmICh0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFN0YXJ0IGluaXRpYWxpemF0aW9uXG4gICAgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUG9ydGZvbGlvKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tcGxldGVJbml0aWFsaXphdGlvbigpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5IChsYXp5KVwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmVuc3VyZUluaXRpYWxpemVkJywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIFxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICB9XG4gIFxuICAvLyBUb29sIGhhbmRsZXIgbWV0aG9kcyAtIG5vdyBwdWJsaWMgZm9yIGFjY2VzcyBmcm9tIHRvb2wgbW9kdWxlc1xuICBcbiAgYXN5bmMgbGlzdFBlcnNvbmFzKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEubGlzdFBlcnNvbmFzKCk7XG4gIH1cblxuICAvLyBVc2UgYWN0aXZhdGVFbGVtZW50KG5hbWUsICdwZXJzb25hJyksIGRlYWN0aXZhdGVFbGVtZW50KG5hbWUsICdwZXJzb25hJyksXG4gIC8vIGdldEFjdGl2ZUVsZW1lbnRzKCdwZXJzb25hJyksIGFuZCBnZXRFbGVtZW50RGV0YWlscyhuYW1lLCAncGVyc29uYScpIGluc3RlYWQuXG4gIC8vIFRoZXNlIHdlcmUgcmVtb3ZlZCB0byBub3JtYWxpemUgcGVyc29uYSBoYW5kbGluZyB0aHJvdWdoIHRoZSBnZW5lcmljIGVsZW1lbnQgQVBJLlxuXG4gIGFzeW5jIHJlbG9hZFBlcnNvbmFzKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEucmVsb2FkUGVyc29uYXMoKTtcbiAgfVxuXG4gIC8vID09PT09IEVsZW1lbnQgTWV0aG9kcyAoR2VuZXJpYyBmb3IgYWxsIGVsZW1lbnQgdHlwZXMpID09PT09XG4gIFxuICBhc3luYyBsaXN0RWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3RQZXJzb25hcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5saXN0RWxlbWVudHMobm9ybWFsaXplZFR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5saXN0RWxlbWVudHMnLCBlcnJvciwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBsaXN0ICR7dHlwZX06ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyODEgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlclxuICAgICAgLy8gUGVyc29uYUhhbmRsZXIuYWN0aXZhdGVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmFjdGl2YXRlRWxlbWVudChuYW1lLCBub3JtYWxpemVkVHlwZSwgY29udGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmFjdGl2YXRlRWxlbWVudCcsIGVycm9yLCB7IHR5cGUsIG5hbWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyODEgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlclxuICAgICAgLy8gUGVyc29uYUhhbmRsZXIuZ2V0QWN0aXZlUGVyc29uYSBpcyBkZXByZWNhdGVkOyBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5IGhhbmRsZXMgcGVyc29uYXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5nZXRBY3RpdmVFbGVtZW50cyhub3JtYWxpemVkVHlwZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmdldEFjdGl2ZUVsZW1lbnRzJywgZXJyb3IsIHsgdHlwZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGV9OiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGRlYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI4MSAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyXG4gICAgICAvLyBQZXJzb25hSGFuZGxlci5kZWFjdGl2YXRlUGVyc29uYSBpcyBkZXByZWNhdGVkOyBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5IGhhbmRsZXMgcGVyc29uYXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5kZWFjdGl2YXRlRWxlbWVudChuYW1lLCBub3JtYWxpemVkVHlwZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmRlYWN0aXZhdGVFbGVtZW50JywgZXJyb3IsIHsgdHlwZSwgbmFtZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZGVhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRFbGVtZW50RGV0YWlscyhuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIC8vIEZJWDogSXNzdWUgIzI3NiAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgLy8gUGVyc29uYUhhbmRsZXIuZ2V0UGVyc29uYURldGFpbHMgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5nZXRFbGVtZW50RGV0YWlscyhuYW1lLCBub3JtYWxpemVkVHlwZSk7XG4gIH1cbiAgXG4gIGFzeW5jIHJlbG9hZEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLnJlbG9hZEVsZW1lbnRzKHR5cGUpO1xuICB9XG5cbiAgLy8gRWxlbWVudC1zcGVjaWZpYyBtZXRob2RzXG4gIGFzeW5jIHJlbmRlclRlbXBsYXRlKG5hbWU6IHN0cmluZywgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEucmVuZGVyVGVtcGxhdGUobmFtZSwgdmFyaWFibGVzKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5leGVjdXRlQWdlbnQobmFtZSwgcGFyYW1ldGVycyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZWxlbWVudCBpbiB0aGUgcG9ydGZvbGlvLlxuICAgKiBAcGFyYW0gYXJncy5lbGVtZW50cyAtIEZvciBlbnNlbWJsZXM6IGFycmF5IG9mIGVsZW1lbnQgcmVmZXJlbmNlcyAoSXNzdWUgIzI3OClcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGVsZW1lbnRzPzogRW5zZW1ibGVFbGVtZW50W119KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gUmVtb3ZlIHBlcnNvbmEgc3BlY2lhbCBjYXNlLCByb3V0ZSBhbGwgZWxlbWVudCBjcmVhdGlvbiB0aHJvdWdoIEVsZW1lbnRDUlVESGFuZGxlclxuICAgIC8vIFRoaXMgZW5zdXJlcyBjb25zaXN0ZW50IGR1cGxpY2F0ZSBjaGVja2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgZm9yIGFsbCBlbGVtZW50IHR5cGVzXG4gICAgLy8gRklYOiBJc3N1ZSAjMjc4IC0gU3VwcG9ydCBlbGVtZW50cyBwYXJhbWV0ZXIgZm9yIGVuc2VtYmxlc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKGFyZ3MudHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5jcmVhdGVFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgZWRpdEVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj59KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIC8vIEZJWDogSXNzdWUgIzI3NiAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgLy8gUGVyc29uYUhhbmRsZXIuZWRpdFBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgZWxlbWVudENSVURIYW5kbGVyIGhhbmRsZXMgcGVyc29uYXMgdmlhIFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3lcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZWRpdEVsZW1lbnQoey4uLmFyZ3MsIHR5cGU6IG5vcm1hbGl6ZWRUeXBlfSk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBzdHJpY3Q/OiBib29sZWFufSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLnZhbGlkYXRlUGVyc29uYSBpcyBkZXByZWNhdGVkOyBlbGVtZW50Q1JVREhhbmRsZXIgaGFuZGxlcyBwZXJzb25hc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKGFyZ3MudHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS52YWxpZGF0ZUVsZW1lbnQoey4uLmFyZ3MsIHR5cGU6IG5vcm1hbGl6ZWRUeXBlfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVsZXRlRGF0YT86IGJvb2xlYW59KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIC8vIEZJWDogSXNzdWUgIzI3NiAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgLy8gUGVyc29uYUhhbmRsZXIuZGVsZXRlUGVyc29uYSBpcyBkZXByZWNhdGVkOyBlbGVtZW50Q1JVREhhbmRsZXIgaGFuZGxlcyBwZXJzb25hcyB2aWEgZGVkaWNhdGVkIGRlbGV0ZSBwYXRoXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmRlbGV0ZUVsZW1lbnQoey4uLmFyZ3MsIHR5cGU6IG5vcm1hbGl6ZWRUeXBlfSk7XG4gIH1cblxuICBhc3luYyBicm93c2VDb2xsZWN0aW9uKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmJyb3dzZUNvbGxlY3Rpb24oc2VjdGlvbiwgdHlwZSk7XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLnNlYXJjaENvbGxlY3Rpb24ocXVlcnkpO1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoQ29sbGVjdGlvbkVuaGFuY2VkKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM6IGFueSA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5zZWFyY2hDb2xsZWN0aW9uRW5oYW5jZWQocXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvbkNvbnRlbnQocGF0aDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5nZXRDb2xsZWN0aW9uQ29udGVudChwYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxDb250ZW50KGlucHV0UGF0aDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5pbnN0YWxsQ29udGVudChpbnB1dFBhdGgpO1xuICB9XG5cbiAgYXN5bmMgc3VibWl0Q29udGVudChjb250ZW50SWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5zdWJtaXRDb250ZW50KGNvbnRlbnRJZGVudGlmaWVyKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25DYWNoZUhlYWx0aCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmdldENvbGxlY3Rpb25DYWNoZUhlYWx0aCgpO1xuICB9XG5cbiAgLy8gVXNlciBpZGVudGl0eSBtYW5hZ2VtZW50IC0gZGVsZWdhdGVkIHRvIElkZW50aXR5SGFuZGxlclxuICBhc3luYyBzZXRVc2VySWRlbnRpdHkodXNlcm5hbWU6IHN0cmluZywgZW1haWw/OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5zZXRVc2VySWRlbnRpdHkodXNlcm5hbWUsIGVtYWlsKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJJZGVudGl0eSgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5nZXRVc2VySWRlbnRpdHkoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyVXNlcklkZW50aXR5KCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0eUhhbmRsZXIhLmNsZWFyVXNlcklkZW50aXR5KCk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0eUhhbmRsZXIhLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgfVxuXG4gIC8vIEdpdEh1YiBhdXRoZW50aWNhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIHNldHVwR2l0SHViQXV0aCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLnNldHVwR2l0SHViQXV0aCgpO1xuICB9XG4gIFxuICBhc3luYyBjaGVja0dpdEh1YkF1dGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5jaGVja0dpdEh1YkF1dGgoKTtcbiAgfVxuICBcbiAgYXN5bmMgZ2V0T0F1dGhIZWxwZXJTdGF0dXModmVyYm9zZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5nZXRPQXV0aEhlbHBlclN0YXR1cyh2ZXJib3NlKTtcbiAgfVxuICBcblxuICBcbiAgYXN5bmMgY2xlYXJHaXRIdWJBdXRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuY2xlYXJHaXRIdWJBdXRoKCk7XG4gIH1cblxuICAvLyBPQXV0aCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnRcbiAgYXN5bmMgY29uZmlndXJlT0F1dGgoY2xpZW50X2lkPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5jb25maWd1cmVPQXV0aChjbGllbnRfaWQpO1xuICB9XG5cblxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBpbmRpY2F0b3Igc2V0dGluZ3MgKGRlbGVnYXRlZCB0byBEaXNwbGF5Q29uZmlnSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUluZGljYXRvcihjb25maWc6IFBhcnRpYWw8SW5kaWNhdG9yQ29uZmlnPikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5Q29uZmlnSGFuZGxlciEuY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb24gKGRlbGVnYXRlZCB0byBEaXNwbGF5Q29uZmlnSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGdldEluZGljYXRvckNvbmZpZygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbmZpZ0hhbmRsZXIhLmdldEluZGljYXRvckNvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBjb2xsZWN0aW9uIHN1Ym1pc3Npb24gc2V0dGluZ3MgKGRlbGVnYXRlZCB0byBDb2xsZWN0aW9uSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUNvbGxlY3Rpb25TdWJtaXNzaW9uKGF1dG9TdWJtaXQ6IGJvb2xlYW4pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmNvbmZpZ3VyZUNvbGxlY3Rpb25TdWJtaXNzaW9uKGF1dG9TdWJtaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2xsZWN0aW9uIHN1Ym1pc3Npb24gY29uZmlndXJhdGlvbiAoZGVsZWdhdGVkIHRvIENvbGxlY3Rpb25IYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvblN1Ym1pc3Npb25Db25maWcoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5nZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpO1xuICB9XG5cblxuICAvKipcbiAgICogRXhwb3J0IGEgc2luZ2xlIHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGV4cG9ydFBlcnNvbmEocGVyc29uYU5hbWU6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEuZXhwb3J0UGVyc29uYShwZXJzb25hTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFsbCBwZXJzb25hc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzID0gdHJ1ZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEuZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEuaW1wb3J0UGVyc29uYShzb3VyY2UsIG92ZXJ3cml0ZSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBQb3J0Zm9saW8gbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDaGVjayBwb3J0Zm9saW8gc3RhdHVzIGluY2x1ZGluZyByZXBvc2l0b3J5IGV4aXN0ZW5jZSBhbmQgc3luYyBpbmZvcm1hdGlvblxuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnBvcnRmb2xpb1N0YXR1cyh1c2VybmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICovXG4gIGFzeW5jIGluaXRQb3J0Zm9saW8ob3B0aW9uczoge3JlcG9zaXRvcnlOYW1lPzogc3RyaW5nOyBwcml2YXRlPzogYm9vbGVhbjsgZGVzY3JpcHRpb24/OiBzdHJpbmd9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLmluaXRQb3J0Zm9saW8ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHBvcnRmb2xpbyBzZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvQ29uZmlnKG9wdGlvbnM6IHthdXRvU3luYz86IGJvb2xlYW47IGRlZmF1bHRWaXNpYmlsaXR5Pzogc3RyaW5nOyBhdXRvU3VibWl0PzogYm9vbGVhbjsgcmVwb3NpdG9yeU5hbWU/OiBzdHJpbmd9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnBvcnRmb2xpb0NvbmZpZyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIHBvcnRmb2xpbyB3aXRoIEdpdEh1YlxuICAgKi9cbiAgYXN5bmMgc3luY1BvcnRmb2xpbyhvcHRpb25zOiB7XG4gICAgZGlyZWN0aW9uOiBzdHJpbmc7XG4gICAgbW9kZT86IHN0cmluZztcbiAgICBmb3JjZTogYm9vbGVhbjtcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgY29uZmlybURlbGV0aW9ucz86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuc3luY1BvcnRmb2xpbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zIC0gZGVsZWdhdGVzIHRvIENvbmZpZ0hhbmRsZXJcbiAgKi9cbiAgYXN5bmMgaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnM6IGFueSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb25maWdIYW5kbGVyIS5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN5bmMgb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBTeW5jSGFuZGxlclxuICAgKi9cbiAgYXN5bmMgaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zOiBhbnkpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuc3luY0hhbmRsZXIhLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggbG9jYWwgcG9ydGZvbGlvIHVzaW5nIHRoZSBtZXRhZGF0YSBpbmRleCBzeXN0ZW1cbiAgICogVGhpcyBwcm92aWRlcyBmYXN0LCBjb21wcmVoZW5zaXZlIHNlYXJjaCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICovXG4gIGFzeW5jIHNlYXJjaFBvcnRmb2xpbyhvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZzsgXG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7IFxuICAgIGZ1enp5TWF0Y2g/OiBib29sZWFuOyBcbiAgICBtYXhSZXN1bHRzPzogbnVtYmVyOyBcbiAgICBpbmNsdWRlS2V5d29yZHM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVGFncz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVUcmlnZ2Vycz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnNlYXJjaFBvcnRmb2xpbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYWNyb3NzIGFsbCBzb3VyY2VzIChsb2NhbCwgR2l0SHViLCBjb2xsZWN0aW9uKSB1c2luZyBVbmlmaWVkSW5kZXhNYW5hZ2VyXG4gICAqIFRoaXMgcHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggd2l0aCBkdXBsaWNhdGUgZGV0ZWN0aW9uIGFuZCB2ZXJzaW9uIGNvbXBhcmlzb25cbiAgICovXG4gIGFzeW5jIHNlYXJjaEFsbChvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBzb3VyY2VzPzogc3RyaW5nW107XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuc2VhcmNoQWxsKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgc2VtYW50aWNhbGx5IHNpbWlsYXIgZWxlbWVudHMgdXNpbmcgRW5oYW5jZWQgSW5kZXhcbiAgICovXG4gIGFzeW5jIGZpbmRTaW1pbGFyRWxlbWVudHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB0aHJlc2hvbGQ6IG51bWJlcjtcbiAgfSkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5maW5kU2ltaWxhckVsZW1lbnRzKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcmVsYXRpb25zaGlwcyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50XG4gICAqL1xuICBhc3luYyBnZXRFbGVtZW50UmVsYXRpb25zaGlwcyhvcHRpb25zOiB7XG4gICAgZWxlbWVudE5hbWU6IHN0cmluZztcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICByZWxhdGlvbnNoaXBUeXBlcz86IHN0cmluZ1tdO1xuICB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLmdldEVsZW1lbnRSZWxhdGlvbnNoaXBzKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgZWxlbWVudHMgYnkgYWN0aW9uIHZlcmJcbiAgICovXG4gIGFzeW5jIHNlYXJjaEJ5VmVyYihvcHRpb25zOiB7XG4gICAgdmVyYjogc3RyaW5nO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuc2VhcmNoQnlWZXJiKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGF0aXN0aWNzIGFib3V0IEVuaGFuY2VkIEluZGV4IHJlbGF0aW9uc2hpcHNcbiAgICovXG4gIGFzeW5jIGdldFJlbGF0aW9uc2hpcFN0YXRzKCkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5nZXRSZWxhdGlvbnNoaXBTdGF0cygpO1xuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkRvbGxob3VzZU1DUFNlcnZlci5ydW4oKSBzdGFydGVkXCIpO1xuICAgIGxvZ2dlci5pbmZvKFwiU3RhcnRpbmcgRG9sbGhvdXNlTUNQIHNlcnZlci4uLlwiKTtcblxuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKTtcblxuICAgIC8vIElzc3VlICM3MDY6IENyaXRpY2FsIHBhdGggb25seSDigJQgZ2V0IHRvIGNvbm5lY3QoKSBhcyBmYXN0IGFzIHBvc3NpYmxlXG4gICAgLy8gTm9uLWNyaXRpY2FsIHdvcmsgKG1lbW9yeSBhdXRvLWxvYWQsIGFjdGl2YXRpb24gcmVzdG9yZSwgZXRjLikgaXNcbiAgICAvLyBkZWZlcnJlZCB0byBjb21wbGV0ZURlZmVycmVkU2V0dXAoKSB3aGljaCBydW5zIHBvc3QtY29ubmVjdC5cbiAgICB0cnkge1xuICAgICAgdGltZXIuc3RhcnRQaGFzZSgncG9ydGZvbGlvX3ByZXBhcmUnLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgdGltZXIuZW5kUGhhc2UoJ3BvcnRmb2xpb19wcmVwYXJlJyk7XG5cbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2hhbmRsZXJfY3JlYXRpb24nLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMuY29tcGxldGVJbml0aWFsaXphdGlvbigpO1xuICAgICAgdGltZXIuZW5kUGhhc2UoJ2hhbmRsZXJfY3JlYXRpb24nKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBvcGVyYXRpb25hbCB0ZWxlbWV0cnkgKGFzeW5jLCBub24tYmxvY2tpbmcsIG5ldmVyIHRocm93cylcbiAgICAgIGNvbnN0IG9wZXJhdGlvbmFsVGVsZW1ldHJ5ID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxPcGVyYXRpb25hbFRlbGVtZXRyeT4oJ09wZXJhdGlvbmFsVGVsZW1ldHJ5Jyk7XG4gICAgICBvcGVyYXRpb25hbFRlbGVtZXRyeS5pbml0aWFsaXplKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAvLyBUZWxlbWV0cnkgZXJyb3JzIGFyZSBsb2dnZWQgaW50ZXJuYWxseSwgc2FmZSB0byBpZ25vcmUgaGVyZVxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKFwiUG9ydGZvbGlvIGFuZCBwZXJzb25hcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcIik7XG5cbiAgICAgIGlmICghZW52LkRPTExIT1VTRV9HQVRFS0VFUEVSX0VOQUJMRUQpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCLimqDvuI8gIEdhdGVrZWVwZXIgaXMgRElTQUJMRUQgKERPTExIT1VTRV9HQVRFS0VFUEVSX0VOQUJMRUQ9ZmFsc2UpLiBBbGwgcGVybWlzc2lvbiBjaGVja3MgYXJlIGJ5cGFzc2VkLlwiKTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJlYWR5IC0gd2FpdGluZyBmb3IgTUNQIGNvbm5lY3Rpb24gb24gc3RkaW9cIik7XG4gICAgICBsb2dnZXIuZGVidWcoXCJEb2xsaG91c2VNQ1BTZXJ2ZXIucnVuKCkgY29tcGxldGVkIGluaXRpYWxpemF0aW9uXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5ydW4uaW5pdGlhbGl6YXRpb24nLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdG8gcHJldmVudCBzZXJ2ZXIgZnJvbSBzdGFydGluZyB3aXRoIGluY29tcGxldGUgaW5pdGlhbGl6YXRpb25cbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQoKTtcblxuICAgIC8vIFNldCB1cCBncmFjZWZ1bCBzaHV0ZG93biBoYW5kbGVyc1xuICAgIGNvbnN0IGNsZWFudXAgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhcIlNodXR0aW5nIGRvd24gRG9sbGhvdXNlTUNQIHNlcnZlci4uLlwiKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZGlzcG9zZSgpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIkNsZWFudXAgY29tcGxldGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgZHVyaW5nIGNsZWFudXBcIiwgeyBlcnJvciB9KTtcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH07XG5cbiAgICAvLyBSZWdpc3RlciBzaHV0ZG93biBoYW5kbGVyc1xuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdIVVAnLCBjbGVhbnVwKTtcblxuICAgIC8vIENvbm5lY3QgQVNBUCDigJQgdG9vbHMgYXJlIHJlZ2lzdGVyZWQsIHNlcnZlciBjYW4gYWNjZXB0IHJlcXVlc3RzXG4gICAgdGltZXIuc3RhcnRQaGFzZSgnbWNwX2Nvbm5lY3QnLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLnNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gICAgdGltZXIuZW5kUGhhc2UoJ21jcF9jb25uZWN0Jyk7XG4gICAgdGltZXIubWFya0Nvbm5lY3QoKTtcblxuICAgIC8vIE1hcmsgdGhhdCBNQ1AgaXMgbm93IGNvbm5lY3RlZCAtIG5vIG1vcmUgY29uc29sZSBvdXRwdXQgYWxsb3dlZFxuICAgIGxvZ2dlci5zZXRNQ1BDb25uZWN0ZWQoKTtcblxuICAgIC8vIElzc3VlICM3MDYgUGhhc2UgMzogRW1pdCBSRUFEWSBzZW50aW5lbCBmb3IgYnJpZGdlIGNsaWVudHNcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgnRE9MTEhPVVNFTUNQX1JFQURZXFxuJyk7XG5cbiAgICBsb2dnZXIuaW5mbyhcIkRvbGxob3VzZU1DUCBzZXJ2ZXIgcnVubmluZyBvbiBzdGRpb1wiKTtcblxuICAgIC8vIElzc3VlICM3MDYgUGhhc2UgMjogRGVmZXJyZWQgc2V0dXAg4oCUIHJ1bnMgcG9zdC1jb25uZWN0LCBub24tYmxvY2tpbmdcbiAgICAvLyBQYXR0ZXJuIGVuY3J5cHRpb24sIGJhY2tncm91bmQgdmFsaWRhdG9yLCBtZW1vcnkgYXV0by1sb2FkLCBhY3RpdmF0aW9uXG4gICAgLy8gcmVzdG9yZSwgbG9nIGhvb2tzLCBkYW5nZXIgem9uZSBpbml0IGFsbCBtb3ZlIGhlcmUuXG4gICAgY29uc3QgZGVmZXJyZWRQcm9taXNlID0gdGhpcy5jb250YWluZXIuY29tcGxldGVEZWZlcnJlZFNldHVwKCk7XG4gICAgZGVmZXJyZWRQcm9taXNlLmNhdGNoKGVyciA9PiBsb2dnZXIud2FybignW1N0YXJ0dXBdIERlZmVycmVkIHNldHVwIGVycm9yOicsIGVycikpO1xuXG4gICAgLy8gSXNzdWUgIzcwNiBQaGFzZSA0OiBXaXJlIGRlZmVycmVkIHByb21pc2UgaW50byBTZXJ2ZXJTZXR1cCBmb3IgcmVxdWVzdCBidWZmZXJpbmdcbiAgICBjb25zdCBzZXJ2ZXJTZXR1cCA9IHRoaXMuY29udGFpbmVyLnJlc29sdmU8aW1wb3J0KCcuL3NlcnZlci9TZXJ2ZXJTZXR1cC5qcycpLlNlcnZlclNldHVwPignU2VydmVyU2V0dXAnKTtcbiAgICBzZXJ2ZXJTZXR1cC5zZXREZWZlcnJlZFNldHVwUHJvbWlzZShkZWZlcnJlZFByb21pc2UpO1xuXG4gICAgLy8gTG9nIHN0YXJ0dXAgdGltaW5nIGFmdGVyIGRlZmVycmVkIHNldHVwIGNvbXBsZXRlc1xuICAgIGRlZmVycmVkUHJvbWlzZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcG9ydCA9IHRpbWVyLmdldFJlcG9ydCgpO1xuICAgICAgbG9nZ2VyLmluZm8oYFtTdGFydHVwXSBGdWxsIHJlcG9ydDogY29ubmVjdCBhdCAke3JlcG9ydC5jb25uZWN0QXRNc31tcywgYCArXG4gICAgICAgIGBjcml0aWNhbCAke3JlcG9ydC5jcml0aWNhbFBhdGhNc31tcywgZGVmZXJyZWQgJHtyZXBvcnQuZGVmZXJyZWRNc31tcywgYCArXG4gICAgICAgIGB0b3RhbCAke3JlcG9ydC50b3RhbE1zfW1zYCk7XG4gICAgfSkuY2F0Y2goKCkgPT4geyAvKiBhbHJlYWR5IGxvZ2dlZCAqLyB9KTtcblxuICB9XG59XG5cbi8vIEV4cG9ydCBpcyBhbHJlYWR5IGF0IGNsYXNzIGRlY2xhcmF0aW9uXG5cbi8vIE9ubHkgc3RhcnQgdGhlIHNlcnZlciBpZiB0aGlzIGZpbGUgaXMgYmVpbmcgcnVuIGRpcmVjdGx5IChub3QgaW1wb3J0ZWQgYnkgdGVzdHMpXG4vLyBIYW5kbGUgZGlmZmVyZW50IGV4ZWN1dGlvbiBtZXRob2RzIChkaXJlY3QsIG5weCwgQ0xJKVxuY29uc3Qgc2NyaXB0UGF0aCA9IHByb2Nlc3MuYXJndj8uWzFdID8gcGF0aC5ub3JtYWxpemUocHJvY2Vzcy5hcmd2WzFdKSA6ICcnO1xuY29uc3QgaXNEaXJlY3RFeGVjdXRpb24gPVxuICBzY3JpcHRQYXRoLmVuZHNXaXRoKGAke3BhdGguc2VwfWRpc3Qke3BhdGguc2VwfWluZGV4LmpzYCkgfHxcbiAgc2NyaXB0UGF0aC5lbmRzV2l0aChgJHtwYXRoLnNlcH1zcmMke3BhdGguc2VwfWluZGV4LnRzYCk7XG5jb25zdCBpc05weEV4ZWN1dGlvbiA9IHByb2Nlc3MuZW52Lm5wbV9leGVjcGF0aD8uaW5jbHVkZXMoJ25weCcpO1xuY29uc3QgaXNDbGlFeGVjdXRpb24gPSBwcm9jZXNzLmFyZ3ZbMV0/LmVuZHNXaXRoKCcvZG9sbGhvdXNlbWNwJykgfHwgcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnXFxcXGRvbGxob3VzZW1jcCcpO1xuY29uc3QgaXNUZXN0ID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQ7IC8vIFRoaXMgaXMgc2V0IHdoZW4gSmVzdCBydW5zIHRlc3RzXG5jb25zdCBpc1Rlc3RNb2RlID0gcHJvY2Vzcy5lbnYuVEVTVF9NT0RFID09PSAndHJ1ZSc7IC8vIENoZWNrIGZvciBURVNUX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGVcbmNvbnN0IGRvbGxob3VzZURlYnVnRmxhZyA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRz8udG9Mb3dlckNhc2UoKTtcbmNvbnN0IGlzRGVidWdTdGFydHVwTG9nZ2luZyA9IGRvbGxob3VzZURlYnVnRmxhZyA9PT0gJ3RydWUnIHx8IGRvbGxob3VzZURlYnVnRmxhZyA9PT0gJzEnO1xuXG4vLyBQcm9ncmVzc2l2ZSBzdGFydHVwIHdpdGggcmV0cmllcyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbmNvbnN0IFNUQVJUVVBfREVMQVlTID0gWzEwLCA1MCwgMTAwLCAyMDBdOyAvLyBQcm9ncmVzc2l2ZSBkZWxheXMgaW4gbXNcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGlzRGVidWdTdGFydHVwTG9nZ2luZykge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJERUJVRzogc3RhcnRTZXJ2ZXJXaXRoUmV0cnkgY2FsbGVkLlwiKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBEb2xsaG91c2VDb250YWluZXIoKTtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyKGNvbnRhaW5lcik7XG4gICAgYXdhaXQgc2VydmVyLnJ1bigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChyZXRyaWVzTGVmdCA+IDAgJiYgKGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSkge1xuICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBsb25nZXIgZGVsYXlcbiAgICAgIGNvbnN0IGRlbGF5SW5kZXggPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGggLSByZXRyaWVzTGVmdDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gU1RBUlRVUF9ERUxBWVNbZGVsYXlJbmRleF07XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgIHJldHVybiBzdGFydFNlcnZlcldpdGhSZXRyeShyZXRyaWVzTGVmdCAtIDEpO1xuICAgIH1cbiAgICAvLyBGaW5hbCBmYWlsdXJlIC0gbWluaW1hbCBlcnJvciBtZXNzYWdlIGZvciBzZWN1cml0eVxuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIiwgZXJyb3IpOyAvLyBBZGRlZCBlcnJvciBvYmplY3RcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuaWYgKChpc0RpcmVjdEV4ZWN1dGlvbiB8fCBpc05weEV4ZWN1dGlvbiB8fCBpc0NsaUV4ZWN1dGlvbikgJiYgKCFpc1Rlc3QgfHwgaXNUZXN0TW9kZSkpIHtcbiAgLy8gSXNzdWUgIzcwNDogLS13ZWIgZmxhZyBzdGFydHMgdGhlIHBvcnRmb2xpbyB3ZWIgVUkgaW5zdGVhZCBvZiBNQ1Agc2VydmVyXG4gIGNvbnN0IGlzV2ViTW9kZSA9IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS13ZWInKTtcbiAgaWYgKGlzV2ViTW9kZSkge1xuICAgIC8vIElzc3VlICM3OTY6IEJvb3RzdHJhcCBESSBjb250YWluZXIgZm9yIHdlYi1vbmx5IG1vZGUgc28gQVBJIHJvdXRlc1xuICAgIC8vIGdvIHRocm91Z2ggTUNQQVFMSGFuZGxlciAodmFsaWRhdGVkLCBjYWNoZWQsIGdhdGVrZWVwZXItY2hlY2tlZClcbiAgICAvL1xuICAgIC8vIFN1cHByZXNzIHRlcm1pbmFsIG91dHB1dCBpbiAtLXdlYiBtb2RlIHVubGVzcyBET0xMSE9VU0VfREVCVUcgaXMgc2V0LlxuICAgIC8vIEFsbCBsb2dzIGFyZSBzdGlsbCBjYXB0dXJlZCBpbiBNZW1vcnlMb2dTaW5rIGFuZCB2aXNpYmxlIGluIHRoZSBMb2dzIHRhYiDigJRcbiAgICAvLyB0aGUgdGVybWluYWwgb25seSBuZWVkcyB0aGUgY29uc29sZSBVUkwgYmFubmVyLCBub3QgYSB3YWxsIG9mIHN0YXJ0dXAgbm9pc2UuXG4gICAgaWYgKCFwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcgJiYgIXByb2Nlc3MuZW52LkVOQUJMRV9ERUJVRykge1xuICAgICAgbG9nZ2VyLnNldE1pbkxldmVsKCdlcnJvcicpO1xuICAgIH1cblxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwb3J0Zm9saW9EaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdwb3J0Zm9saW8nKTtcbiAgICAgIGNvbnN0IHBvcnRBcmcgPSBwcm9jZXNzLmFyZ3YuZmluZChhID0+IGEuc3RhcnRzV2l0aCgnLS1wb3J0PScpKTtcbiAgICAgIGNvbnN0IHBvcnQgPSBwb3J0QXJnID8gcGFyc2VJbnQocG9ydEFyZy5zcGxpdCgnPScpWzFdLCAxMCkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBub0Jyb3dzZXIgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tbm8tb3BlbicpO1xuXG4gICAgICBsZXQgbWNwQXFsSGFuZGxlcjtcbiAgICAgIGxldCBtZW1vcnlTaW5rOiBpbXBvcnQoJy4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJykuTWVtb3J5TG9nU2luayB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBtZXRyaWNzU2luazogaW1wb3J0KCcuL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnKS5NZW1vcnlNZXRyaWNzU2luayB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBEb2xsaG91c2VDb250YWluZXIoKTtcbiAgICAgICAgYXdhaXQgY29udGFpbmVyLnByZXBhcmVQb3J0Zm9saW8oKTtcbiAgICAgICAgY29uc3QgYnVuZGxlID0gYXdhaXQgY29udGFpbmVyLmJvb3RzdHJhcEhhbmRsZXJzKCk7XG4gICAgICAgIGF3YWl0IGNvbnRhaW5lci5jb21wbGV0ZURlZmVycmVkU2V0dXAoKTtcbiAgICAgICAgbWNwQXFsSGFuZGxlciA9IGJ1bmRsZS5tY3BBcWxIYW5kbGVyO1xuICAgICAgICAvLyBFeHRyYWN0IHNpbmtzIGZyb20gY29udGFpbmVyIOKAlCBkZWZlcnJlZCBzZXR1cCBtYXkgaGF2ZSBhbHJlYWR5IHdpcmVkIHRoZW1cbiAgICAgICAgdHJ5IHsgbWVtb3J5U2luayA9IGNvbnRhaW5lci5yZXNvbHZlPGltcG9ydCgnLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnKS5NZW1vcnlMb2dTaW5rPignTWVtb3J5TG9nU2luaycpOyB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuICAgICAgICB0cnkgeyBtZXRyaWNzU2luayA9IGNvbnRhaW5lci5yZXNvbHZlPGltcG9ydCgnLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJykuTWVtb3J5TWV0cmljc1Npbms+KCdNZW1vcnlNZXRyaWNzU2luaycpOyB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBDb250YWluZXIgYm9vdHN0cmFwIGZhaWxlZCDigJQgd2ViIHJvdXRlcyB3aWxsIHVzZSBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MuXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gUmVhc29uOlwiLCAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBUaGlzIG1heSBpbmRpY2F0ZSBhIGNvcnJ1cHQgcG9ydGZvbGlvIG9yIG1pc3NpbmcgZGVwZW5kZW5jaWVzLlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIHNpbmtzIGV4aXN0IGV2ZW4gaWYgY29udGFpbmVyIGJvb3RzdHJhcCBmYWlsZWQg4oCUXG4gICAgICAvLyBzdGFuZGFsb25lIC0td2ViIG1vZGUgc3RpbGwgbmVlZHMgd29ya2luZyBsb2dzIGFuZCBtZXRyaWNzIHRhYnNcbiAgICAgIGlmICghbWVtb3J5U2luaykge1xuICAgICAgICBjb25zdCB7IE1lbW9yeUxvZ1NpbmsgfSA9IGF3YWl0IGltcG9ydCgnLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnKTtcbiAgICAgICAgbWVtb3J5U2luayA9IG5ldyBNZW1vcnlMb2dTaW5rKHtcbiAgICAgICAgICBhcHBDYXBhY2l0eTogMTAwMDAsXG4gICAgICAgICAgc2VjdXJpdHlDYXBhY2l0eTogNTAwMCxcbiAgICAgICAgICBwZXJmQ2FwYWNpdHk6IDIwMDAsXG4gICAgICAgICAgdGVsZW1ldHJ5Q2FwYWNpdHk6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFtZXRyaWNzU2luaykge1xuICAgICAgICBjb25zdCB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gPSBhd2FpdCBpbXBvcnQoJy4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcycpO1xuICAgICAgICBtZXRyaWNzU2luayA9IG5ldyBNZW1vcnlNZXRyaWNzU2luaygyNDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vd2ViL3NlcnZlci5qcycpO1xuICAgICAgYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoeyBwb3J0Zm9saW9EaXIsIHBvcnQsIG9wZW5Ccm93c2VyOiAhbm9Ccm93c2VyLCBtY3BBcWxIYW5kbGVyLCBtZW1vcnlTaW5rLCBtZXRyaWNzU2luayB9KTtcbiAgICB9KSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gV2ViIFVJIGZhaWxlZCB0byBzdGFydDpcIiwgZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWJ1Z1N0YXJ0dXBMb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiREVCVUc6IFNlcnZlciBzdGFydHVwIGNvbmRpdGlvbiBtZXQuIENhbGxpbmcgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkuXCIpO1xuICAgIH1cbiAgICBzdGFydFNlcnZlcldpdGhSZXRyeSgpLmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfVxufVxuIl19