@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.
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGxD,cAAM,SAAU,YAAW,OAAO;IAChC,OAAO,CAAC,IAAI,CAAqC;IACjD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAgD;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA4C;IAC/E,OAAO,CAAC,WAAW,CAAC,CAA4B;IAEhD,cAAc,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI;IAMzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAM;IAIvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAG1C;IAMF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAIxC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAGvC;IAIF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAGrC;IAMF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAuB7C;IAEL;;OAEG;IACI,eAAe,IAAI,IAAI;IAI9B;;;OAGG;IACI,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAIpE;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAgBlB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IA6CtB;;;;;OAKG;IAEH,OAAO,CAAC,YAAY;IAWpB;;;;;OAKG;IAEH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,GAAG;IA2CJ,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAI/C;;OAEG;IACI,OAAO,CAAC,KAAK,SAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,EAAE;IAQlE;;OAEG;IACI,SAAS,IAAI,IAAI;CAGzB;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC;AAGrB,eAAO,MAAM,MAAM,WAAkB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGxD,cAAM,SAAU,YAAW,OAAO;IAChC,OAAO,CAAC,IAAI,CAAqC;IACjD,OAAO,CAAC,cAAc,CAAS;IAG/B,OAAO,CAAC,QAAQ,CAEQ;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA4C;IAC/E,OAAO,CAAC,WAAW,CAAC,CAA4B;IAEhD,cAAc,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI;IAMzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAM;IAIvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAG1C;IAMF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAIxC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAGvC;IAIF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAGrC;IAMF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAuB7C;IAEL;;OAEG;IACI,eAAe,IAAI,IAAI;IAI9B;;;OAGG;IACI,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAIpE;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAgBlB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IA6CtB;;;;;OAKG;IAEH,OAAO,CAAC,YAAY;IAWpB;;;;;OAKG;IAEH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,GAAG;IA2CJ,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAI/C;;OAEG;IACI,OAAO,CAAC,KAAK,SAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,EAAE;IAQlE;;OAEG;IACI,SAAS,IAAI,IAAI;CAGzB;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC;AAGrB,eAAO,MAAM,MAAM,WAAkB,CAAC"}
@@ -13,7 +13,10 @@ import { EvictingQueue } from './EvictingQueue.js';
13
13
  class MCPLogger {
14
14
  logs = new EvictingQueue(1000);
15
15
  isMCPConnected = false;
16
- minLevel = 'debug';
16
+ // In --web mode, default to error-only so bootstrap logs don't flood the terminal.
17
+ // All levels still go to MemoryLogSink (visible in the Logs tab).
18
+ minLevel = (process.argv.includes('--web') && !process.env.DOLLHOUSE_DEBUG && !process.env.ENABLE_DEBUG)
19
+ ? 'error' : 'debug';
17
20
  static LEVEL_ORDER = { debug: 0, info: 1, warn: 2, error: 3 };
18
21
  logListener;
19
22
  addLogListener(fn) {
@@ -296,4 +299,4 @@ class MCPLogger {
296
299
  export { MCPLogger };
297
300
  // Singleton instance for convenience
298
301
  export const logger = new MCPLogger();
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBR0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sU0FBUztJQUNMLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBVyxJQUFJLENBQUMsQ0FBQztJQUN6QyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLFFBQVEsR0FBd0MsT0FBTyxDQUFDO0lBQ3hELE1BQU0sQ0FBVSxXQUFXLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdkUsV0FBVyxDQUE2QjtJQUVoRCxjQUFjLENBQUMsRUFBNkI7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQscURBQXFEO0lBQzdDLE1BQU0sQ0FBVSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXZDLDhEQUE4RDtJQUM5RCwwREFBMEQ7SUFDbEQsTUFBTSxDQUFVLG9CQUFvQixHQUFHO1FBQzdDLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxlQUFlO1FBQ3JELE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRO0tBQ3JELENBQUM7SUFFRiwrREFBK0Q7SUFDL0QscUVBQXFFO0lBQ3JFLGdFQUFnRTtJQUNoRSw4QkFBOEI7SUFDdEIsTUFBTSxDQUFVLGtCQUFrQixHQUFHO1FBQzNDLFNBQVMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWU7UUFDcEQs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QyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUF5QjtRQUNuRCxJQUFJLFFBQVEsR0FBd0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4RCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDOztBQUdILHFDQUFxQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFFckIscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNQ1Atc2FmZSBsb2dnZXIgdGhhdCBhdm9pZHMgd3JpdGluZyB0byBzdGRvdXQvc3RkZXJyIGR1cmluZyBwcm90b2NvbCBjb21tdW5pY2F0aW9uXG4gKlxuICogSW4gTUNQIHNlcnZlcnMsIHN0ZG91dCBhbmQgc3RkZXJyIGFyZSByZXNlcnZlZCBmb3IgSlNPTi1SUEMgcHJvdG9jb2wgbWVzc2FnZXMuXG4gKiBBbnkgbm9uLXByb3RvY29sIG91dHB1dCB3aWxsIGNhdXNlIFwiVW5leHBlY3RlZCB0b2tlblwiIGVycm9ycyBpbiB0aGUgTUNQIGNsaWVudC5cbiAqXG4gKiBUaGlzIGxvZ2dlcjpcbiAqIC0gV3JpdGVzIHRvIHN0ZGVyciBPTkxZIGR1cmluZyBzZXJ2ZXIgaW5pdGlhbGl6YXRpb24gKGJlZm9yZSBNQ1AgY29ubmVjdGlvbilcbiAqIC0gU3RvcmVzIGFsbCBsb2dzIGluIG1lbW9yeSBkdXJpbmcgcnVudGltZVxuICogLSBQcm92aWRlcyBtZXRob2RzIHRvIHJldHJpZXZlIGxvZ3MgdmlhIE1DUCB0b29scyBpZiBuZWVkZWRcbiAqL1xuXG5pbXBvcnQgeyBJTG9nZ2VyLCBMb2dFbnRyeSB9IGZyb20gJy4uL3R5cGVzL0lMb2dnZXIuanMnO1xuaW1wb3J0IHsgRXZpY3RpbmdRdWV1ZSB9IGZyb20gJy4vRXZpY3RpbmdRdWV1ZS5qcyc7XG5cbmNsYXNzIE1DUExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xuICBwcml2YXRlIGxvZ3MgPSBuZXcgRXZpY3RpbmdRdWV1ZTxMb2dFbnRyeT4oMTAwMCk7XG4gIHByaXZhdGUgaXNNQ1BDb25uZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtaW5MZXZlbDogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgPSAnZGVidWcnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMRVZFTF9PUkRFUiA9IHsgZGVidWc6IDAsIGluZm86IDEsIHdhcm46IDIsIGVycm9yOiAzIH07XG4gIHByaXZhdGUgbG9nTGlzdGVuZXI/OiAoZW50cnk6IExvZ0VudHJ5KSA9PiB2b2lkO1xuXG4gIGFkZExvZ0xpc3RlbmVyKGZuOiAoZW50cnk6IExvZ0VudHJ5KSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5sb2dMaXN0ZW5lciA9IGZuO1xuICAgIHJldHVybiAoKSA9PiB7IHRoaXMubG9nTGlzdGVuZXIgPSB1bmRlZmluZWQ7IH07XG4gIH1cbiAgXG4gIC8vIFBlcmZvcm1hbmNlOiBNYXhpbXVtIGRlcHRoIGZvciBvYmplY3Qgc2FuaXRpemF0aW9uXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9ERVBUSCA9IDEwO1xuICBcbiAgLy8gU2Vuc2l0aXZlIGZpZWxkIHBhdHRlcm5zIHdpdGggZGlmZmVyZW50IG1hdGNoaW5nIHN0cmF0ZWdpZXNcbiAgLy8gRXhhY3QgbWF0Y2ggcGF0dGVybnMgLSBtdXN0IG1hdGNoIHRoZSBlbnRpcmUgZmllbGQgbmFtZVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFWEFDVF9NQVRDSF9QQVRURVJOUyA9IFtcbiAgICAncGFzc3dvcmQnLCAndG9rZW4nLCAnc2VjcmV0JywgJ2tleScsICdhdXRob3JpemF0aW9uJyxcbiAgICAnYXV0aCcsICdjcmVkZW50aWFsJywgJ3ByaXZhdGUnLCAnc2Vzc2lvbicsICdjb29raWUnXG4gIF07XG4gIFxuICAvLyBTdWJzdHJpbmcgbWF0Y2ggcGF0dGVybnMgLSBjYW4gYXBwZWFyIGFueXdoZXJlIGluIGZpZWxkIG5hbWVcbiAgLy8gVGhlc2UgYXJlIHBhdHRlcm4gbmFtZXMgZm9yIGRldGVjdGlvbiwgbm90IGFjdHVhbCBzZW5zaXRpdmUgdmFsdWVzXG4gIC8vIEJ1aWxkaW5nIGZyb20gY2hhcmFjdGVyIGNvZGVzIHRvIGF2b2lkIENvZGVRTCBmYWxzZSBwb3NpdGl2ZXNcbiAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNVQlNUUklOR19QQVRURVJOUyA9IFtcbiAgICAnYXBpX2tleScsICdhcGlrZXknLCAnYWNjZXNzX3Rva2VuJywgJ3JlZnJlc2hfdG9rZW4nLFxuICAgICdjbGllbnRfc2VjcmV0JywgJ2NsaWVudF9pZCcsICdiZWFyZXInLFxuICAgIFN0cmluZy5mcm9tQ29kZVBvaW50KDExMSwgOTcsIDExNywgMTE2LCAxMDQpICAvLyAnb2F1dGgnIC0gY2hhciBjb2RlcyBwcmV2ZW50IENvZGVRTCBmYWxzZSBwb3NpdGl2ZVxuICBdO1xuICBcbiAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBQcmUtY29tcGlsZWQgcmVnZXggcGF0dGVybnNcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRVhBQ1RfTUFUQ0hfUkVHRVggPSBuZXcgUmVnRXhwKFxuICAgIGBeKCR7TUNQTG9nZ2VyLkVYQUNUX01BVENIX1BBVFRFUk5TLmpvaW4oJ3wnKX0pJGAsXG4gICAgJ2knXG4gICk7XG4gIFxuICAvLyBVc2UgcGFydGlhbCB3b3JkIGJvdW5kYXJpZXMgLSBzdGFydCBib3VuZGFyeSBidXQgYWxsb3cgc3VmZml4ZXNcbiAgLy8gVGhpcyBjYXRjaGVzIFwib2F1dGhfdG9rZW5cIiBhbmQgXCJhcGlfa2V5c1wiIGJ1dCBub3QgXCJhdXRoZW50aWNhdGlvblwiXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNVQlNUUklOR19SRUdFWCA9IG5ldyBSZWdFeHAoXG4gICAgYChefFteYS16QS1aXSkoJHtNQ1BMb2dnZXIuU1VCU1RSSU5HX1BBVFRFUk5TLmpvaW4oJ3wnKX0pYCxcbiAgICAnaSdcbiAgKTtcbiAgXG4gIC8vIFBhdHRlcm5zIGZvciBkZXRlY3Rpbmcgc2Vuc2l0aXZlIGRhdGEgaW4gbG9nIG1lc3NhZ2VzXG4gIC8vIFRoZXNlIGFyZSBkZXRlY3Rpb24gcGF0dGVybnMgdXNlZCB0byBJREVOVElGWSBhbmQgUkVEQUNUIHNlbnNpdGl2ZSBkYXRhLCBub3QgYWN0dWFsIGNyZWRlbnRpYWxzXG4gIC8vIFVzaW5nIGluZGlyZWN0IGNvbnN0cnVjdGlvbiB0byBhdm9pZCBDb2RlUUwgZmFsc2UgcG9zaXRpdmUgZGV0ZWN0aW9uXG4gIC8vIGxndG1banMvY2xlYXItdGV4dC1sb2dnaW5nXVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNRVNTQUdFX1NFTlNJVElWRV9QQVRURVJOUyA9ICgoKSA9PiB7XG4gICAgLy8gQnVpbGQgcGF0dGVybnMgd2l0aG91dCBsaXRlcmFsIHNlbnNpdGl2ZSBzdHJpbmdzXG4gICAgY29uc3QgcGF0dGVybnM6IFJlZ0V4cFtdID0gW107XG4gICAgXG4gICAgLy8gU3RhbmRhcmQgcGF0dGVybnNcbiAgICBwYXR0ZXJucy5wdXNoKC9cXGIodG9rZW58cGFzc3dvcmR8c2VjcmV0fGtleXxhdXRofGJlYXJlcilcXHMqWzo9XVxccypbXFx3XFwtX1xcLl0rL2dpKTtcbiAgICBwYXR0ZXJucy5wdXNoKC9cXGIoYXBpW18tXT9rZXkpXFxzKls6PV1cXHMqW1xcd1xcLV9cXC5dKy9naSk7XG4gICAgXG4gICAgLy8gUGF0dGVybnMgYnVpbHQgaW5kaXJlY3RseSB0byBhdm9pZCBkZXRlY3Rpb25cbiAgICAvLyBsZ3RtW2pzL2NsZWFyLXRleHQtbG9nZ2luZ11cbiAgICBwYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYFxcXFxiKCR7WydhY2Nlc3MnLCAndG9rZW4nXS5qb2luKCdbXy1dPycpfSlcXFxccypbOj1dXFxcXHMqW1xcXFx3XFxcXC1fXFxcXC5dK2AsICdnaScpKTtcbiAgICBwYXR0ZXJucy5wdXNoKC9cXGIocmVmcmVzaFtfLV0/dG9rZW4pXFxzKls6PV1cXHMqW1xcd1xcLV9cXC5dKy9naSk7XG4gICAgXG4gICAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddXG4gICAgcGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBcXFxcYigke1snY2xpZW50JywgJ3NlY3JldCddLmpvaW4oJ1tfLV0/Jyl9KVxcXFxzKls6PV1cXFxccypbXFxcXHdcXFxcLV9cXFxcLl0rYCwgJ2dpJykpO1xuICAgIHBhdHRlcm5zLnB1c2gobmV3IFJlZ0V4cChgXFxcXGIoJHtbJ2NsaWVudCcsICdpZCddLmpvaW4oJ1tfLV0/Jyl9KVxcXFxzKls6PV1cXFxccypbXFxcXHdcXFxcLV9cXFxcLl0rYCwgJ2dpJykpO1xuICAgIHBhdHRlcm5zLnB1c2goL0JlYXJlclxccytbXFx3XFwtX1xcLl0rL2dpKTtcbiAgICBcbiAgICAvLyBsZ3RtW2pzL2NsZWFyLXRleHQtbG9nZ2luZ11cbiAgICBjb25zdCBhcGlQYXR0ZXJuID0gWydzaycsICdwaycsIFN0cmluZy5mcm9tQ29kZVBvaW50KDk3LCAxMTIsIDEwNSldLmpvaW4oJ3wnKTsgLy8gJ2FwaScgLSBjaGFyIGNvZGVzIHByZXZlbnQgQ29kZVFMIGZhbHNlIHBvc2l0aXZlXG4gICAgcGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBcXFxcYigke2FwaVBhdHRlcm59KVstX11bXFxcXHdcXFxcLV0rYCwgJ2dpJykpO1xuICAgIFxuICAgIHJldHVybiBwYXR0ZXJucztcbiAgfSkoKTtcbiAgXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgYWZ0ZXIgTUNQIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgdG8gc3RvcCBjb25zb2xlIG91dHB1dFxuICAgKi9cbiAgcHVibGljIHNldE1DUENvbm5lY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTUNQQ29ubmVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWluaW11bSBsb2cgbGV2ZWwgZm9yIGNvbnNvbGUgb3V0cHV0LlxuICAgKiBFbnRyaWVzIGJlbG93IHRoaXMgbGV2ZWwgYXJlIHN0aWxsIHN0b3JlZCBpbiBtZW1vcnkgYnV0IG5vdCBwcmludGVkLlxuICAgKi9cbiAgcHVibGljIHNldE1pbkxldmVsKGxldmVsOiAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyk6IHZvaWQge1xuICAgIHRoaXMubWluTGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGZpZWxkIG5hbWUgY29udGFpbnMgc2Vuc2l0aXZlIHBhdHRlcm5zXG4gICAqIFVzZXMgYm90aCBleGFjdCBtYXRjaGluZyBhbmQgc3Vic3RyaW5nIG1hdGNoaW5nIGZvciBiZXR0ZXIgcHJlY2lzaW9uXG4gICAqIEBwYXJhbSBmaWVsZE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0byBjaGVja1xuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBuYW1lIG1hdGNoZXMgc2Vuc2l0aXZlIHBhdHRlcm5zXG4gICAqL1xuICBwcml2YXRlIGlzU2Vuc2l0aXZlRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBGaXJzdCBjaGVjayBleGFjdCBtYXRjaGVzIChlLmcuLCBcInBhc3N3b3JkXCIgYnV0IG5vdCBcInBhc3N3b3JkX2hpbnRcIilcbiAgICBpZiAoTUNQTG9nZ2VyLkVYQUNUX01BVENIX1JFR0VYLnRlc3QoZmllbGROYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIFRoZW4gY2hlY2sgc3Vic3RyaW5nIHBhdHRlcm5zIChlLmcuLCBcImFwaV9rZXlcIiwgXCJhY2Nlc3NfdG9rZW5cIiwgXCJvYXV0aF90b2tlblwiKVxuICAgIC8vIEFsc28gY2hlY2sgaWYgdGhlIGZpZWxkIG5hbWUgaXRzZWxmIGNvbnRhaW5zIHRoZXNlIHBhdHRlcm5zXG4gICAgY29uc3QgbG93ZXJGaWVsZE5hbWUgPSBmaWVsZE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgTUNQTG9nZ2VyLlNVQlNUUklOR19QQVRURVJOUykge1xuICAgICAgaWYgKGxvd2VyRmllbGROYW1lLmluY2x1ZGVzKHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGFzc2lnbiBhIHZhbHVlLCBlbnN1cmluZyBzZW5zaXRpdmUgZGF0YSBpcyBuZXZlciBleHBvc2VkXG4gICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgaXQgZXhwbGljaXQgdG8gQ29kZVFMIHRoYXQgc2Vuc2l0aXZlIHZhbHVlcyBhcmUgcmVwbGFjZWRcbiAgICogQHBhcmFtIGtleSAtIFRoZSBvYmplY3Qga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwb3RlbnRpYWxseSBzYW5pdGl6ZVxuICAgKiBAcGFyYW0gZGVwdGggLSBDdXJyZW50IHJlY3Vyc2lvbiBkZXB0aCBmb3IgcGVyZm9ybWFuY2UgcHJvdGVjdGlvblxuICAgKiBAcGFyYW0gc2VlbiAtIFNldCBvZiBzZWVuIG9iamVjdHMgdG8gcHJldmVudCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAqIEByZXR1cm5zIFNhZmUgdmFsdWUgdGhhdCBjYW4gYmUgbG9nZ2VkXG4gICAqL1xuICBwcml2YXRlIHNhZmVBc3NpZ24oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRlcHRoOiBudW1iZXIsIHNlZW46IFdlYWtTZXQ8YW55Pik6IGFueSB7XG4gICAgLy8gRXhwbGljaXRseSBjaGVjayBpZiB0aGlzIGlzIGEgc2Vuc2l0aXZlIGZpZWxkIEJFRk9SRSBhbnkgYXNzaWdubWVudFxuICAgIGlmICh0aGlzLmlzU2Vuc2l0aXZlRmllbGQoa2V5KSkge1xuICAgICAgLy8gUmV0dXJuIGEgY29uc3RhbnQgcmVkYWN0ZWQgc3RyaW5nIC0gbm8gc2Vuc2l0aXZlIGRhdGEgZmxvd3MgdGhyb3VnaFxuICAgICAgcmV0dXJuICdbUkVEQUNURURdJztcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIG5vbi1zZW5zaXRpdmUgZmllbGRzLCByZWN1cnNpdmVseSBzYW5pdGl6ZSBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVPYmplY3QodmFsdWUsIGRlcHRoLCBzZWVuKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUHJpbWl0aXZlIG5vbi1zZW5zaXRpdmUgdmFsdWVzIGFyZSBzYWZlIHRvIHJldHVyblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBhbiBvYmplY3Qgb3IgYXJyYXkgcmVjdXJzaXZlbHkgd2l0aCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zXG4gICAqIEBwYXJhbSBvYmogLSBPYmplY3Qgb3IgYXJyYXkgdG8gc2FuaXRpemVcbiAgICogQHBhcmFtIGRlcHRoIC0gQ3VycmVudCByZWN1cnNpb24gZGVwdGggKGRlZmF1bHRzIHRvIDApXG4gICAqIEBwYXJhbSBzZWVuIC0gU2V0IG9mIHNlZW4gb2JqZWN0cyB0byBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgKiBAcmV0dXJucyBTYW5pdGl6ZWQgY29weSB3aXRoIHNlbnNpdGl2ZSBmaWVsZHMgcmVkYWN0ZWRcbiAgICovXG4gIHByaXZhdGUgc2FuaXRpemVPYmplY3Qob2JqOiBhbnksIGRlcHRoOiBudW1iZXIgPSAwLCBzZWVuPzogV2Vha1NldDxhbnk+KTogYW55IHtcbiAgICAvLyBIYW5kbGUgbnVsbC91bmRlZmluZWRcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgXG4gICAgLy8gSGFuZGxlIG5vbi1vYmplY3RzIChwcmltaXRpdmVzKVxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JykgcmV0dXJuIG9iajtcbiAgICBcbiAgICAvLyBQZXJmb3JtYW5jZTogRGVwdGggbGltaXRpbmcgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvd1xuICAgIGlmIChkZXB0aCA+PSBNQ1BMb2dnZXIuTUFYX0RFUFRIKSB7XG4gICAgICByZXR1cm4gJ1tERUVQX09CSkVDVF9UUlVOQ0FURURdJztcbiAgICB9XG4gICAgXG4gICAgLy8gUGVyZm9ybWFuY2U6IENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb25cbiAgICBpZiAoIXNlZW4pIHtcbiAgICAgIHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIGlmIChzZWVuLmhhcyhvYmopKSB7XG4gICAgICByZXR1cm4gJ1tDSVJDVUxBUl9SRUZFUkVOQ0VdJztcbiAgICB9XG4gICAgXG4gICAgLy8gTWFyayB0aGlzIG9iamVjdCBhcyBzZWVuXG4gICAgc2Vlbi5hZGQob2JqKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgYXJyYXlzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplT2JqZWN0KGl0ZW0sIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIG9iamVjdHMgLSB1c2Ugc2FmZSBhc3NpZ25tZW50IGZvciBlYWNoIGZpZWxkXG4gICAgY29uc3Qgc2FuaXRpemVkOiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICAvLyBVc2Ugc2FmZSBhc3NpZ25tZW50IHdoaWNoIGNoZWNrcyBzZW5zaXRpdml0eSBhbmQgcmV0dXJucyBzYWZlIHZhbHVlc1xuICAgICAgc2FuaXRpemVkW2tleV0gPSB0aGlzLnNhZmVBc3NpZ24oa2V5LCB2YWx1ZSwgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBzZW5zaXRpdmUgZGF0YSBiZWZvcmUgbG9nZ2luZ1xuICAgKiBTZWN1cml0eSBmaXg6IFByZXZlbnRzIGV4cG9zdXJlIG9mIE9BdXRoIHRva2VucywgQVBJIGtleXMsIHBhc3N3b3JkcywgZXRjLlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdGEgdG8gc2FuaXRpemUgKGNhbiBiZSBhbnkgdHlwZSlcbiAgICogQHJldHVybnMgU2FuaXRpemVkIGNvcHkgd2l0aCBzZW5zaXRpdmUgZmllbGRzIHJlcGxhY2VkIHdpdGggJ1tSRURBQ1RFRF0nXG4gICAqL1xuICAvLyBsZ3RtW2pzL2NsZWFyLXRleHQtbG9nZ2luZ10gLSBUaGlzIG1ldGhvZCBzYW5pdGl6ZXMgc2Vuc2l0aXZlIGRhdGEsIGl0IGRvZXNuJ3QgbG9nIGl0XG4gIHByaXZhdGUgc2FuaXRpemVEYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gICAgLy8gRmFzdCBwYXRoIGZvciBudWxsL3VuZGVmaW5lZFxuICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiBkYXRhO1xuICAgIFxuICAgIC8vIEZhc3QgcGF0aCBmb3IgcHJpbWl0aXZlc1xuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICAgIFxuICAgIC8vIFNhbml0aXplIG9iamVjdHMgYW5kIGFycmF5c1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplT2JqZWN0KGRhdGEpO1xuICB9XG4gIFxuICAvKipcbiAgICogU2FuaXRpemUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGZyb20gbG9nIG1lc3NhZ2VzXG4gICAqIFNlY3VyaXR5IGZpeDogUHJldmVudHMgZXhwb3N1cmUgb2YgY3JlZGVudGlhbHMgdGhhdCBtYXkgYmUgZW1iZWRkZWQgaW4gbWVzc2FnZSBzdHJpbmdzXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGxvZyBtZXNzYWdlIHRvIHNhbml0aXplXG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBtZXNzYWdlIHdpdGggc2Vuc2l0aXZlIGRhdGEgcmVwbGFjZWQgd2l0aCAnW1JFREFDVEVEXSdcbiAgICovXG4gIC8vIGxndG1banMvY2xlYXItdGV4dC1sb2dnaW5nXSAtIFRoaXMgbWV0aG9kIHNhbml0aXplcyBzZW5zaXRpdmUgZGF0YSwgaXQgZG9lc24ndCBsb2cgaXRcbiAgcHJpdmF0ZSBzYW5pdGl6ZU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgXG4gICAgbGV0IHNhbml0aXplZCA9IG1lc3NhZ2U7XG4gICAgXG4gICAgLy8gQXBwbHkgZWFjaCBzZW5zaXRpdmUgcGF0dGVybiB0byBkZXRlY3QgYW5kIHJlZGFjdCBzZW5zaXRpdmUgZGF0YVxuICAgIE1DUExvZ2dlci5NRVNTQUdFX1NFTlNJVElWRV9QQVRURVJOUy5mb3JFYWNoKHBhdHRlcm4gPT4ge1xuICAgICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UocGF0dGVybiwgKG1hdGNoKSA9PiB7XG4gICAgICAgIC8vIEZvciBrZXk9dmFsdWUgcGF0dGVybnMsIHByZXNlcnZlIHRoZSBrZXkgYnV0IHJlZGFjdCB0aGUgdmFsdWVcbiAgICAgICAgaWYgKG1hdGNoLmluY2x1ZGVzKCc9JykgfHwgbWF0Y2guaW5jbHVkZXMoJzonKSkge1xuICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IG1hdGNoLmluY2x1ZGVzKCc9JykgPyAnPScgOiAnOic7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBtYXRjaC5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGAke3BhcnRzWzBdfSR7c2VwYXJhdG9yfVtSRURBQ1RFRF1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgQmVhcmVyIHRva2VucyBvciBzdGFuZGFsb25lIHNlbnNpdGl2ZSB2YWx1ZXNcbiAgICAgICAgaWYgKG1hdGNoLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnYmVhcmVyJykpIHtcbiAgICAgICAgICByZXR1cm4gJ0JlYXJlciBbUkVEQUNURURdJztcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgQVBJIGtleXMgbGlrZSBzay14eHh4eFxuICAgICAgICBpZiAoL14oc2t8cGt8YXBpKVstX10vaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaC5zdWJzdHJpbmcoMCwgMykgKyAnW1JFREFDVEVEXSc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVmYXVsdDogcmVkYWN0IHRoZSBlbnRpcmUgbWF0Y2hcbiAgICAgICAgcmV0dXJuICdbUkVEQUNURURdJztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBsb2dnaW5nIG1ldGhvZFxuICAgKi9cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IExvZ0VudHJ5WydsZXZlbCddLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBTYW5pdGl6ZSBib3RoIG1lc3NhZ2UgYW5kIGRhdGEgdG8gcHJldmVudCBzZW5zaXRpdmUgaW5mbyBleHBvc3VyZVxuICAgIGNvbnN0IHNhbml0aXplZE1lc3NhZ2UgPSB0aGlzLnNhbml0aXplTWVzc2FnZShtZXNzYWdlKTtcbiAgICBjb25zdCBzYW5pdGl6ZWREYXRhID0gdGhpcy5zYW5pdGl6ZURhdGEoZGF0YSk7XG4gICAgXG4gICAgY29uc3QgZW50cnk6IExvZ0VudHJ5ID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgbGV2ZWwsXG4gICAgICBtZXNzYWdlOiBzYW5pdGl6ZWRNZXNzYWdlLCAgLy8gU3RvcmUgc2FuaXRpemVkIG1lc3NhZ2VcbiAgICAgIGRhdGE6IHNhbml0aXplZERhdGFcbiAgICB9O1xuICAgIFxuICAgIC8vIEJvdW5kZWQgRklGTyBldmljdGlvbiDigJQgRXZpY3RpbmdRdWV1ZSBoYW5kbGVzIGNhcGFjaXR5XG4gICAgdGhpcy5sb2dzLnB1c2goZW50cnkpO1xuICAgIHRoaXMubG9nTGlzdGVuZXI/LihlbnRyeSk7XG5cbiAgICAvLyBPbmx5IHdyaXRlIHRvIGNvbnNvbGUgZHVyaW5nIGluaXRpYWxpemF0aW9uLCByZXNwZWN0aW5nIG1pbmltdW0gbGV2ZWxcbiAgICBpZiAoIXRoaXMuaXNNQ1BDb25uZWN0ZWQpIHtcbiAgICAgIC8vIENoZWNrIE5PREVfRU5WIGluc2lkZSB0aGUgbWV0aG9kIHRvIGVuc3VyZSBpdCdzIGV2YWx1YXRlZCBhdCBydW50aW1lXG4gICAgICBjb25zdCBpc1Rlc3QgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnO1xuICAgICAgY29uc3QgbWVldHNMZXZlbCA9IE1DUExvZ2dlci5MRVZFTF9PUkRFUltsZXZlbF0gPj0gTUNQTG9nZ2VyLkxFVkVMX09SREVSW3RoaXMubWluTGV2ZWxdO1xuICAgICAgaWYgKCFpc1Rlc3QgJiYgbWVldHNMZXZlbCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgWyR7ZW50cnkudGltZXN0YW1wLnRvSVNPU3RyaW5nKCl9XSBbJHtsZXZlbC50b1VwcGVyQ2FzZSgpfV1gO1xuICAgICAgICAvLyBTZWN1cml0eSBmaXg6IFVzZSBzYW5pdGl6ZWQgbWVzc2FnZSB0byBwcmV2ZW50IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlXG4gICAgICAgIC8vIEJvdGggbWVzc2FnZSBhbmQgZGF0YSBhcmUgc2FuaXRpemVkIGJlZm9yZSBhbnkgb3V0cHV0XG4gICAgICAgIGNvbnN0IHNhZmVNZXNzYWdlID0gYCR7cHJlZml4fSAke3Nhbml0aXplZE1lc3NhZ2V9YDtcbiAgICAgICAgXG4gICAgICAgIC8vIER1cmluZyBpbml0aWFsaXphdGlvbiwgd2UgY2FuIHVzZSBjb25zb2xlXG4gICAgICAgIGlmIChsZXZlbCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIC8vIGxndG1banMvY2xlYXItdGV4dC1sb2dnaW5nXSAtIHNhZmVNZXNzYWdlIGlzIHByZS1zYW5pdGl6ZWQgYnkgc2FuaXRpemVNZXNzYWdlKClcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHNhZmVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA9PT0gJ3dhcm4nKSB7XG4gICAgICAgICAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddIC0gc2FmZU1lc3NhZ2UgaXMgcHJlLXNhbml0aXplZCBieSBzYW5pdGl6ZU1lc3NhZ2UoKVxuICAgICAgICAgIGNvbnNvbGUud2FybihzYWZlTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIE1DUCwgZXZlbiBkdXJpbmcgaW5pdCwgYXZvaWQgc3Rkb3V0IGZvciBpbmZvL2RlYnVnXG4gICAgICAgICAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddIC0gc2FmZU1lc3NhZ2UgaXMgcHJlLXNhbml0aXplZCBieSBzYW5pdGl6ZU1lc3NhZ2UoKVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3Ioc2FmZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBwdWJsaWMgZGVidWcobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ2RlYnVnJywgbWVzc2FnZSwgZGF0YSk7XG4gIH1cbiAgXG4gIHB1YmxpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgZGF0YSk7XG4gIH1cbiAgXG4gIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCd3YXJuJywgbWVzc2FnZSwgZGF0YSk7XG4gIH1cbiAgXG4gIHB1YmxpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCBkYXRhKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCByZWNlbnQgbG9ncyAoZm9yIE1DUCB0b29scyB0byByZXRyaWV2ZSlcbiAgICovXG4gIHB1YmxpYyBnZXRMb2dzKGNvdW50ID0gMTAwLCBsZXZlbD86IExvZ0VudHJ5WydsZXZlbCddKTogTG9nRW50cnlbXSB7XG4gICAgbGV0IGZpbHRlcmVkOiByZWFkb25seSBMb2dFbnRyeVtdID0gdGhpcy5sb2dzLnRvQXJyYXkoKTtcbiAgICBpZiAobGV2ZWwpIHtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKGxvZyA9PiBsb2cubGV2ZWwgPT09IGxldmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkLnNsaWNlKC1jb3VudCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBsb2dzXG4gICAqL1xuICBwdWJsaWMgY2xlYXJMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMubG9ncy5jbGVhcigpO1xuICB9XG59XG5cbi8vIEV4cG9ydCBjbGFzcyBmb3IgdGVzdGluZy9leHRlbnNpb25cbmV4cG9ydCB7IE1DUExvZ2dlciB9O1xuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2UgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gbmV3IE1DUExvZ2dlcigpOyJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBR0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sU0FBUztJQUNMLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBVyxJQUFJLENBQUMsQ0FBQztJQUN6QyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQy9CLG1GQUFtRjtJQUNuRixrRUFBa0U7SUFDMUQsUUFBUSxHQUNkLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQzNGLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNoQixNQUFNLENBQVUsV0FBVyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3ZFLFdBQVcsQ0FBNkI7SUFFaEQsY0FBYyxDQUFDLEVBQTZCO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHFEQUFxRDtJQUM3QyxNQUFNLENBQVUsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUV2Qyw4REFBOEQ7SUFDOUQsMERBQTBEO0lBQ2xELE1BQU0sQ0FBVSxvQkFBb0IsR0FBRztRQUM3QyxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsZUFBZTtRQUNyRCxN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QUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBeUI7UUFDbkQsSUFBSSxRQUFRLEdBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7QUFHSCxxQ0FBcUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBRXJCLHFDQUFxQztBQUNyQyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTUNQLXNhZmUgbG9nZ2VyIHRoYXQgYXZvaWRzIHdyaXRpbmcgdG8gc3Rkb3V0L3N0ZGVyciBkdXJpbmcgcHJvdG9jb2wgY29tbXVuaWNhdGlvblxuICpcbiAqIEluIE1DUCBzZXJ2ZXJzLCBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgcmVzZXJ2ZWQgZm9yIEpTT04tUlBDIHByb3RvY29sIG1lc3NhZ2VzLlxuICogQW55IG5vbi1wcm90b2NvbCBvdXRwdXQgd2lsbCBjYXVzZSBcIlVuZXhwZWN0ZWQgdG9rZW5cIiBlcnJvcnMgaW4gdGhlIE1DUCBjbGllbnQuXG4gKlxuICogVGhpcyBsb2dnZXI6XG4gKiAtIFdyaXRlcyB0byBzdGRlcnIgT05MWSBkdXJpbmcgc2VydmVyIGluaXRpYWxpemF0aW9uIChiZWZvcmUgTUNQIGNvbm5lY3Rpb24pXG4gKiAtIFN0b3JlcyBhbGwgbG9ncyBpbiBtZW1vcnkgZHVyaW5nIHJ1bnRpbWVcbiAqIC0gUHJvdmlkZXMgbWV0aG9kcyB0byByZXRyaWV2ZSBsb2dzIHZpYSBNQ1AgdG9vbHMgaWYgbmVlZGVkXG4gKi9cblxuaW1wb3J0IHsgSUxvZ2dlciwgTG9nRW50cnkgfSBmcm9tICcuLi90eXBlcy9JTG9nZ2VyLmpzJztcbmltcG9ydCB7IEV2aWN0aW5nUXVldWUgfSBmcm9tICcuL0V2aWN0aW5nUXVldWUuanMnO1xuXG5jbGFzcyBNQ1BMb2dnZXIgaW1wbGVtZW50cyBJTG9nZ2VyIHtcbiAgcHJpdmF0ZSBsb2dzID0gbmV3IEV2aWN0aW5nUXVldWU8TG9nRW50cnk+KDEwMDApO1xuICBwcml2YXRlIGlzTUNQQ29ubmVjdGVkID0gZmFsc2U7XG4gIC8vIEluIC0td2ViIG1vZGUsIGRlZmF1bHQgdG8gZXJyb3Itb25seSBzbyBib290c3RyYXAgbG9ncyBkb24ndCBmbG9vZCB0aGUgdGVybWluYWwuXG4gIC8vIEFsbCBsZXZlbHMgc3RpbGwgZ28gdG8gTWVtb3J5TG9nU2luayAodmlzaWJsZSBpbiB0aGUgTG9ncyB0YWIpLlxuICBwcml2YXRlIG1pbkxldmVsOiAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9XG4gICAgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS13ZWInKSAmJiAhcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RFQlVHICYmICFwcm9jZXNzLmVudi5FTkFCTEVfREVCVUcpXG4gICAgICA/ICdlcnJvcicgOiAnZGVidWcnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMRVZFTF9PUkRFUiA9IHsgZGVidWc6IDAsIGluZm86IDEsIHdhcm46IDIsIGVycm9yOiAzIH07XG4gIHByaXZhdGUgbG9nTGlzdGVuZXI/OiAoZW50cnk6IExvZ0VudHJ5KSA9PiB2b2lkO1xuXG4gIGFkZExvZ0xpc3RlbmVyKGZuOiAoZW50cnk6IExvZ0VudHJ5KSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5sb2dMaXN0ZW5lciA9IGZuO1xuICAgIHJldHVybiAoKSA9PiB7IHRoaXMubG9nTGlzdGVuZXIgPSB1bmRlZmluZWQ7IH07XG4gIH1cbiAgXG4gIC8vIFBlcmZvcm1hbmNlOiBNYXhpbXVtIGRlcHRoIGZvciBvYmplY3Qgc2FuaXRpemF0aW9uXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9ERVBUSCA9IDEwO1xuICBcbiAgLy8gU2Vuc2l0aXZlIGZpZWxkIHBhdHRlcm5zIHdpdGggZGlmZmVyZW50IG1hdGNoaW5nIHN0cmF0ZWdpZXNcbiAgLy8gRXhhY3QgbWF0Y2ggcGF0dGVybnMgLSBtdXN0IG1hdGNoIHRoZSBlbnRpcmUgZmllbGQgbmFtZVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFWEFDVF9NQVRDSF9QQVRURVJOUyA9IFtcbiAgICAncGFzc3dvcmQnLCAndG9rZW4nLCAnc2VjcmV0JywgJ2tleScsICdhdXRob3JpemF0aW9uJyxcbiAgICAnYXV0aCcsICdjcmVkZW50aWFsJywgJ3ByaXZhdGUnLCAnc2Vzc2lvbicsICdjb29raWUnXG4gIF07XG4gIFxuICAvLyBTdWJzdHJpbmcgbWF0Y2ggcGF0dGVybnMgLSBjYW4gYXBwZWFyIGFueXdoZXJlIGluIGZpZWxkIG5hbWVcbiAgLy8gVGhlc2UgYXJlIHBhdHRlcm4gbmFtZXMgZm9yIGRldGVjdGlvbiwgbm90IGFjdHVhbCBzZW5zaXRpdmUgdmFsdWVzXG4gIC8vIEJ1aWxkaW5nIGZyb20gY2hhcmFjdGVyIGNvZGVzIHRvIGF2b2lkIENvZGVRTCBmYWxzZSBwb3NpdGl2ZXNcbiAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNVQlNUUklOR19QQVRURVJOUyA9IFtcbiAgICAnYXBpX2tleScsICdhcGlrZXknLCAnYWNjZXNzX3Rva2VuJywgJ3JlZnJlc2hfdG9rZW4nLFxuICAgICdjbGllbnRfc2VjcmV0JywgJ2NsaWVudF9pZCcsICdiZWFyZXInLFxuICAgIFN0cmluZy5mcm9tQ29kZVBvaW50KDExMSwgOTcsIDExNywgMTE2LCAxMDQpICAvLyAnb2F1dGgnIC0gY2hhciBjb2RlcyBwcmV2ZW50IENvZGVRTCBmYWxzZSBwb3NpdGl2ZVxuICBdO1xuICBcbiAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBQcmUtY29tcGlsZWQgcmVnZXggcGF0dGVybnNcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRVhBQ1RfTUFUQ0hfUkVHRVggPSBuZXcgUmVnRXhwKFxuICAgIGBeKCR7TUNQTG9nZ2VyLkVYQUNUX01BVENIX1BBVFRFUk5TLmpvaW4oJ3wnKX0pJGAsXG4gICAgJ2knXG4gICk7XG4gIFxuICAvLyBVc2UgcGFydGlhbCB3b3JkIGJvdW5kYXJpZXMgLSBzdGFydCBib3VuZGFyeSBidXQgYWxsb3cgc3VmZml4ZXNcbiAgLy8gVGhpcyBjYXRjaGVzIFwib2F1dGhfdG9rZW5cIiBhbmQgXCJhcGlfa2V5c1wiIGJ1dCBub3QgXCJhdXRoZW50aWNhdGlvblwiXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNVQlNUUklOR19SRUdFWCA9IG5ldyBSZWdFeHAoXG4gICAgYChefFteYS16QS1aXSkoJHtNQ1BMb2dnZXIuU1VCU1RSSU5HX1BBVFRFUk5TLmpvaW4oJ3wnKX0pYCxcbiAgICAnaSdcbiAgKTtcbiAgXG4gIC8vIFBhdHRlcm5zIGZvciBkZXRlY3Rpbmcgc2Vuc2l0aXZlIGRhdGEgaW4gbG9nIG1lc3NhZ2VzXG4gIC8vIFRoZXNlIGFyZSBkZXRlY3Rpb24gcGF0dGVybnMgdXNlZCB0byBJREVOVElGWSBhbmQgUkVEQUNUIHNlbnNpdGl2ZSBkYXRhLCBub3QgYWN0dWFsIGNyZWRlbnRpYWxzXG4gIC8vIFVzaW5nIGluZGlyZWN0IGNvbnN0cnVjdGlvbiB0byBhdm9pZCBDb2RlUUwgZmFsc2UgcG9zaXRpdmUgZGV0ZWN0aW9uXG4gIC8vIGxndG1banMvY2xlYXItdGV4dC1sb2dnaW5nXVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNRVNTQUdFX1NFTlNJVElWRV9QQVRURVJOUyA9ICgoKSA9PiB7XG4gICAgLy8gQnVpbGQgcGF0dGVybnMgd2l0aG91dCBsaXRlcmFsIHNlbnNpdGl2ZSBzdHJpbmdzXG4gICAgY29uc3QgcGF0dGVybnM6IFJlZ0V4cFtdID0gW107XG4gICAgXG4gICAgLy8gU3RhbmRhcmQgcGF0dGVybnNcbiAgICBwYXR0ZXJucy5wdXNoKC9cXGIodG9rZW58cGFzc3dvcmR8c2VjcmV0fGtleXxhdXRofGJlYXJlcilcXHMqWzo9XVxccypbXFx3XFwtX1xcLl0rL2dpKTtcbiAgICBwYXR0ZXJucy5wdXNoKC9cXGIoYXBpW18tXT9rZXkpXFxzKls6PV1cXHMqW1xcd1xcLV9cXC5dKy9naSk7XG4gICAgXG4gICAgLy8gUGF0dGVybnMgYnVpbHQgaW5kaXJlY3RseSB0byBhdm9pZCBkZXRlY3Rpb25cbiAgICAvLyBsZ3RtW2pzL2NsZWFyLXRleHQtbG9nZ2luZ11cbiAgICBwYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYFxcXFxiKCR7WydhY2Nlc3MnLCAndG9rZW4nXS5qb2luKCdbXy1dPycpfSlcXFxccypbOj1dXFxcXHMqW1xcXFx3XFxcXC1fXFxcXC5dK2AsICdnaScpKTtcbiAgICBwYXR0ZXJucy5wdXNoKC9cXGIocmVmcmVzaFtfLV0/dG9rZW4pXFxzKls6PV1cXHMqW1xcd1xcLV9cXC5dKy9naSk7XG4gICAgXG4gICAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddXG4gICAgcGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBcXFxcYigke1snY2xpZW50JywgJ3NlY3JldCddLmpvaW4oJ1tfLV0/Jyl9KVxcXFxzKls6PV1cXFxccypbXFxcXHdcXFxcLV9cXFxcLl0rYCwgJ2dpJykpO1xuICAgIHBhdHRlcm5zLnB1c2gobmV3IFJlZ0V4cChgXFxcXGIoJHtbJ2NsaWVudCcsICdpZCddLmpvaW4oJ1tfLV0/Jyl9KVxcXFxzKls6PV1cXFxccypbXFxcXHdcXFxcLV9cXFxcLl0rYCwgJ2dpJykpO1xuICAgIHBhdHRlcm5zLnB1c2goL0JlYXJlclxccytbXFx3XFwtX1xcLl0rL2dpKTtcbiAgICBcbiAgICAvLyBsZ3RtW2pzL2NsZWFyLXRleHQtbG9nZ2luZ11cbiAgICBjb25zdCBhcGlQYXR0ZXJuID0gWydzaycsICdwaycsIFN0cmluZy5mcm9tQ29kZVBvaW50KDk3LCAxMTIsIDEwNSldLmpvaW4oJ3wnKTsgLy8gJ2FwaScgLSBjaGFyIGNvZGVzIHByZXZlbnQgQ29kZVFMIGZhbHNlIHBvc2l0aXZlXG4gICAgcGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBcXFxcYigke2FwaVBhdHRlcm59KVstX11bXFxcXHdcXFxcLV0rYCwgJ2dpJykpO1xuICAgIFxuICAgIHJldHVybiBwYXR0ZXJucztcbiAgfSkoKTtcbiAgXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgYWZ0ZXIgTUNQIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgdG8gc3RvcCBjb25zb2xlIG91dHB1dFxuICAgKi9cbiAgcHVibGljIHNldE1DUENvbm5lY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTUNQQ29ubmVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWluaW11bSBsb2cgbGV2ZWwgZm9yIGNvbnNvbGUgb3V0cHV0LlxuICAgKiBFbnRyaWVzIGJlbG93IHRoaXMgbGV2ZWwgYXJlIHN0aWxsIHN0b3JlZCBpbiBtZW1vcnkgYnV0IG5vdCBwcmludGVkLlxuICAgKi9cbiAgcHVibGljIHNldE1pbkxldmVsKGxldmVsOiAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyk6IHZvaWQge1xuICAgIHRoaXMubWluTGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGZpZWxkIG5hbWUgY29udGFpbnMgc2Vuc2l0aXZlIHBhdHRlcm5zXG4gICAqIFVzZXMgYm90aCBleGFjdCBtYXRjaGluZyBhbmQgc3Vic3RyaW5nIG1hdGNoaW5nIGZvciBiZXR0ZXIgcHJlY2lzaW9uXG4gICAqIEBwYXJhbSBmaWVsZE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0byBjaGVja1xuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBuYW1lIG1hdGNoZXMgc2Vuc2l0aXZlIHBhdHRlcm5zXG4gICAqL1xuICBwcml2YXRlIGlzU2Vuc2l0aXZlRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBGaXJzdCBjaGVjayBleGFjdCBtYXRjaGVzIChlLmcuLCBcInBhc3N3b3JkXCIgYnV0IG5vdCBcInBhc3N3b3JkX2hpbnRcIilcbiAgICBpZiAoTUNQTG9nZ2VyLkVYQUNUX01BVENIX1JFR0VYLnRlc3QoZmllbGROYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIFRoZW4gY2hlY2sgc3Vic3RyaW5nIHBhdHRlcm5zIChlLmcuLCBcImFwaV9rZXlcIiwgXCJhY2Nlc3NfdG9rZW5cIiwgXCJvYXV0aF90b2tlblwiKVxuICAgIC8vIEFsc28gY2hlY2sgaWYgdGhlIGZpZWxkIG5hbWUgaXRzZWxmIGNvbnRhaW5zIHRoZXNlIHBhdHRlcm5zXG4gICAgY29uc3QgbG93ZXJGaWVsZE5hbWUgPSBmaWVsZE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgTUNQTG9nZ2VyLlNVQlNUUklOR19QQVRURVJOUykge1xuICAgICAgaWYgKGxvd2VyRmllbGROYW1lLmluY2x1ZGVzKHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGFzc2lnbiBhIHZhbHVlLCBlbnN1cmluZyBzZW5zaXRpdmUgZGF0YSBpcyBuZXZlciBleHBvc2VkXG4gICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgaXQgZXhwbGljaXQgdG8gQ29kZVFMIHRoYXQgc2Vuc2l0aXZlIHZhbHVlcyBhcmUgcmVwbGFjZWRcbiAgICogQHBhcmFtIGtleSAtIFRoZSBvYmplY3Qga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwb3RlbnRpYWxseSBzYW5pdGl6ZVxuICAgKiBAcGFyYW0gZGVwdGggLSBDdXJyZW50IHJlY3Vyc2lvbiBkZXB0aCBmb3IgcGVyZm9ybWFuY2UgcHJvdGVjdGlvblxuICAgKiBAcGFyYW0gc2VlbiAtIFNldCBvZiBzZWVuIG9iamVjdHMgdG8gcHJldmVudCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAqIEByZXR1cm5zIFNhZmUgdmFsdWUgdGhhdCBjYW4gYmUgbG9nZ2VkXG4gICAqL1xuICBwcml2YXRlIHNhZmVBc3NpZ24oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRlcHRoOiBudW1iZXIsIHNlZW46IFdlYWtTZXQ8YW55Pik6IGFueSB7XG4gICAgLy8gRXhwbGljaXRseSBjaGVjayBpZiB0aGlzIGlzIGEgc2Vuc2l0aXZlIGZpZWxkIEJFRk9SRSBhbnkgYXNzaWdubWVudFxuICAgIGlmICh0aGlzLmlzU2Vuc2l0aXZlRmllbGQoa2V5KSkge1xuICAgICAgLy8gUmV0dXJuIGEgY29uc3RhbnQgcmVkYWN0ZWQgc3RyaW5nIC0gbm8gc2Vuc2l0aXZlIGRhdGEgZmxvd3MgdGhyb3VnaFxuICAgICAgcmV0dXJuICdbUkVEQUNURURdJztcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIG5vbi1zZW5zaXRpdmUgZmllbGRzLCByZWN1cnNpdmVseSBzYW5pdGl6ZSBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVPYmplY3QodmFsdWUsIGRlcHRoLCBzZWVuKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUHJpbWl0aXZlIG5vbi1zZW5zaXRpdmUgdmFsdWVzIGFyZSBzYWZlIHRvIHJldHVyblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBhbiBvYmplY3Qgb3IgYXJyYXkgcmVjdXJzaXZlbHkgd2l0aCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zXG4gICAqIEBwYXJhbSBvYmogLSBPYmplY3Qgb3IgYXJyYXkgdG8gc2FuaXRpemVcbiAgICogQHBhcmFtIGRlcHRoIC0gQ3VycmVudCByZWN1cnNpb24gZGVwdGggKGRlZmF1bHRzIHRvIDApXG4gICAqIEBwYXJhbSBzZWVuIC0gU2V0IG9mIHNlZW4gb2JqZWN0cyB0byBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgKiBAcmV0dXJucyBTYW5pdGl6ZWQgY29weSB3aXRoIHNlbnNpdGl2ZSBmaWVsZHMgcmVkYWN0ZWRcbiAgICovXG4gIHByaXZhdGUgc2FuaXRpemVPYmplY3Qob2JqOiBhbnksIGRlcHRoOiBudW1iZXIgPSAwLCBzZWVuPzogV2Vha1NldDxhbnk+KTogYW55IHtcbiAgICAvLyBIYW5kbGUgbnVsbC91bmRlZmluZWRcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgXG4gICAgLy8gSGFuZGxlIG5vbi1vYmplY3RzIChwcmltaXRpdmVzKVxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JykgcmV0dXJuIG9iajtcbiAgICBcbiAgICAvLyBQZXJmb3JtYW5jZTogRGVwdGggbGltaXRpbmcgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvd1xuICAgIGlmIChkZXB0aCA+PSBNQ1BMb2dnZXIuTUFYX0RFUFRIKSB7XG4gICAgICByZXR1cm4gJ1tERUVQX09CSkVDVF9UUlVOQ0FURURdJztcbiAgICB9XG4gICAgXG4gICAgLy8gUGVyZm9ybWFuY2U6IENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb25cbiAgICBpZiAoIXNlZW4pIHtcbiAgICAgIHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIGlmIChzZWVuLmhhcyhvYmopKSB7XG4gICAgICByZXR1cm4gJ1tDSVJDVUxBUl9SRUZFUkVOQ0VdJztcbiAgICB9XG4gICAgXG4gICAgLy8gTWFyayB0aGlzIG9iamVjdCBhcyBzZWVuXG4gICAgc2Vlbi5hZGQob2JqKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgYXJyYXlzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplT2JqZWN0KGl0ZW0sIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIG9iamVjdHMgLSB1c2Ugc2FmZSBhc3NpZ25tZW50IGZvciBlYWNoIGZpZWxkXG4gICAgY29uc3Qgc2FuaXRpemVkOiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICAvLyBVc2Ugc2FmZSBhc3NpZ25tZW50IHdoaWNoIGNoZWNrcyBzZW5zaXRpdml0eSBhbmQgcmV0dXJucyBzYWZlIHZhbHVlc1xuICAgICAgc2FuaXRpemVkW2tleV0gPSB0aGlzLnNhZmVBc3NpZ24oa2V5LCB2YWx1ZSwgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBzZW5zaXRpdmUgZGF0YSBiZWZvcmUgbG9nZ2luZ1xuICAgKiBTZWN1cml0eSBmaXg6IFByZXZlbnRzIGV4cG9zdXJlIG9mIE9BdXRoIHRva2VucywgQVBJIGtleXMsIHBhc3N3b3JkcywgZXRjLlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdGEgdG8gc2FuaXRpemUgKGNhbiBiZSBhbnkgdHlwZSlcbiAgICogQHJldHVybnMgU2FuaXRpemVkIGNvcHkgd2l0aCBzZW5zaXRpdmUgZmllbGRzIHJlcGxhY2VkIHdpdGggJ1tSRURBQ1RFRF0nXG4gICAqL1xuICAvLyBsZ3RtW2pzL2NsZWFyLXRleHQtbG9nZ2luZ10gLSBUaGlzIG1ldGhvZCBzYW5pdGl6ZXMgc2Vuc2l0aXZlIGRhdGEsIGl0IGRvZXNuJ3QgbG9nIGl0XG4gIHByaXZhdGUgc2FuaXRpemVEYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gICAgLy8gRmFzdCBwYXRoIGZvciBudWxsL3VuZGVmaW5lZFxuICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiBkYXRhO1xuICAgIFxuICAgIC8vIEZhc3QgcGF0aCBmb3IgcHJpbWl0aXZlc1xuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICAgIFxuICAgIC8vIFNhbml0aXplIG9iamVjdHMgYW5kIGFycmF5c1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplT2JqZWN0KGRhdGEpO1xuICB9XG4gIFxuICAvKipcbiAgICogU2FuaXRpemUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGZyb20gbG9nIG1lc3NhZ2VzXG4gICAqIFNlY3VyaXR5IGZpeDogUHJldmVudHMgZXhwb3N1cmUgb2YgY3JlZGVudGlhbHMgdGhhdCBtYXkgYmUgZW1iZWRkZWQgaW4gbWVzc2FnZSBzdHJpbmdzXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGxvZyBtZXNzYWdlIHRvIHNhbml0aXplXG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBtZXNzYWdlIHdpdGggc2Vuc2l0aXZlIGRhdGEgcmVwbGFjZWQgd2l0aCAnW1JFREFDVEVEXSdcbiAgICovXG4gIC8vIGxndG1banMvY2xlYXItdGV4dC1sb2dnaW5nXSAtIFRoaXMgbWV0aG9kIHNhbml0aXplcyBzZW5zaXRpdmUgZGF0YSwgaXQgZG9lc24ndCBsb2cgaXRcbiAgcHJpdmF0ZSBzYW5pdGl6ZU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgXG4gICAgbGV0IHNhbml0aXplZCA9IG1lc3NhZ2U7XG4gICAgXG4gICAgLy8gQXBwbHkgZWFjaCBzZW5zaXRpdmUgcGF0dGVybiB0byBkZXRlY3QgYW5kIHJlZGFjdCBzZW5zaXRpdmUgZGF0YVxuICAgIE1DUExvZ2dlci5NRVNTQUdFX1NFTlNJVElWRV9QQVRURVJOUy5mb3JFYWNoKHBhdHRlcm4gPT4ge1xuICAgICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UocGF0dGVybiwgKG1hdGNoKSA9PiB7XG4gICAgICAgIC8vIEZvciBrZXk9dmFsdWUgcGF0dGVybnMsIHByZXNlcnZlIHRoZSBrZXkgYnV0IHJlZGFjdCB0aGUgdmFsdWVcbiAgICAgICAgaWYgKG1hdGNoLmluY2x1ZGVzKCc9JykgfHwgbWF0Y2guaW5jbHVkZXMoJzonKSkge1xuICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IG1hdGNoLmluY2x1ZGVzKCc9JykgPyAnPScgOiAnOic7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBtYXRjaC5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGAke3BhcnRzWzBdfSR7c2VwYXJhdG9yfVtSRURBQ1RFRF1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgQmVhcmVyIHRva2VucyBvciBzdGFuZGFsb25lIHNlbnNpdGl2ZSB2YWx1ZXNcbiAgICAgICAgaWYgKG1hdGNoLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnYmVhcmVyJykpIHtcbiAgICAgICAgICByZXR1cm4gJ0JlYXJlciBbUkVEQUNURURdJztcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgQVBJIGtleXMgbGlrZSBzay14eHh4eFxuICAgICAgICBpZiAoL14oc2t8cGt8YXBpKVstX10vaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaC5zdWJzdHJpbmcoMCwgMykgKyAnW1JFREFDVEVEXSc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVmYXVsdDogcmVkYWN0IHRoZSBlbnRpcmUgbWF0Y2hcbiAgICAgICAgcmV0dXJuICdbUkVEQUNURURdJztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBsb2dnaW5nIG1ldGhvZFxuICAgKi9cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IExvZ0VudHJ5WydsZXZlbCddLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBTYW5pdGl6ZSBib3RoIG1lc3NhZ2UgYW5kIGRhdGEgdG8gcHJldmVudCBzZW5zaXRpdmUgaW5mbyBleHBvc3VyZVxuICAgIGNvbnN0IHNhbml0aXplZE1lc3NhZ2UgPSB0aGlzLnNhbml0aXplTWVzc2FnZShtZXNzYWdlKTtcbiAgICBjb25zdCBzYW5pdGl6ZWREYXRhID0gdGhpcy5zYW5pdGl6ZURhdGEoZGF0YSk7XG4gICAgXG4gICAgY29uc3QgZW50cnk6IExvZ0VudHJ5ID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgbGV2ZWwsXG4gICAgICBtZXNzYWdlOiBzYW5pdGl6ZWRNZXNzYWdlLCAgLy8gU3RvcmUgc2FuaXRpemVkIG1lc3NhZ2VcbiAgICAgIGRhdGE6IHNhbml0aXplZERhdGFcbiAgICB9O1xuICAgIFxuICAgIC8vIEJvdW5kZWQgRklGTyBldmljdGlvbiDigJQgRXZpY3RpbmdRdWV1ZSBoYW5kbGVzIGNhcGFjaXR5XG4gICAgdGhpcy5sb2dzLnB1c2goZW50cnkpO1xuICAgIHRoaXMubG9nTGlzdGVuZXI/LihlbnRyeSk7XG5cbiAgICAvLyBPbmx5IHdyaXRlIHRvIGNvbnNvbGUgZHVyaW5nIGluaXRpYWxpemF0aW9uLCByZXNwZWN0aW5nIG1pbmltdW0gbGV2ZWxcbiAgICBpZiAoIXRoaXMuaXNNQ1BDb25uZWN0ZWQpIHtcbiAgICAgIC8vIENoZWNrIE5PREVfRU5WIGluc2lkZSB0aGUgbWV0aG9kIHRvIGVuc3VyZSBpdCdzIGV2YWx1YXRlZCBhdCBydW50aW1lXG4gICAgICBjb25zdCBpc1Rlc3QgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnO1xuICAgICAgY29uc3QgbWVldHNMZXZlbCA9IE1DUExvZ2dlci5MRVZFTF9PUkRFUltsZXZlbF0gPj0gTUNQTG9nZ2VyLkxFVkVMX09SREVSW3RoaXMubWluTGV2ZWxdO1xuICAgICAgaWYgKCFpc1Rlc3QgJiYgbWVldHNMZXZlbCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgWyR7ZW50cnkudGltZXN0YW1wLnRvSVNPU3RyaW5nKCl9XSBbJHtsZXZlbC50b1VwcGVyQ2FzZSgpfV1gO1xuICAgICAgICAvLyBTZWN1cml0eSBmaXg6IFVzZSBzYW5pdGl6ZWQgbWVzc2FnZSB0byBwcmV2ZW50IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlXG4gICAgICAgIC8vIEJvdGggbWVzc2FnZSBhbmQgZGF0YSBhcmUgc2FuaXRpemVkIGJlZm9yZSBhbnkgb3V0cHV0XG4gICAgICAgIGNvbnN0IHNhZmVNZXNzYWdlID0gYCR7cHJlZml4fSAke3Nhbml0aXplZE1lc3NhZ2V9YDtcbiAgICAgICAgXG4gICAgICAgIC8vIER1cmluZyBpbml0aWFsaXphdGlvbiwgd2UgY2FuIHVzZSBjb25zb2xlXG4gICAgICAgIGlmIChsZXZlbCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIC8vIGxndG1banMvY2xlYXItdGV4dC1sb2dnaW5nXSAtIHNhZmVNZXNzYWdlIGlzIHByZS1zYW5pdGl6ZWQgYnkgc2FuaXRpemVNZXNzYWdlKClcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHNhZmVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA9PT0gJ3dhcm4nKSB7XG4gICAgICAgICAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddIC0gc2FmZU1lc3NhZ2UgaXMgcHJlLXNhbml0aXplZCBieSBzYW5pdGl6ZU1lc3NhZ2UoKVxuICAgICAgICAgIGNvbnNvbGUud2FybihzYWZlTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIE1DUCwgZXZlbiBkdXJpbmcgaW5pdCwgYXZvaWQgc3Rkb3V0IGZvciBpbmZvL2RlYnVnXG4gICAgICAgICAgLy8gbGd0bVtqcy9jbGVhci10ZXh0LWxvZ2dpbmddIC0gc2FmZU1lc3NhZ2UgaXMgcHJlLXNhbml0aXplZCBieSBzYW5pdGl6ZU1lc3NhZ2UoKVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3Ioc2FmZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBwdWJsaWMgZGVidWcobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ2RlYnVnJywgbWVzc2FnZSwgZGF0YSk7XG4gIH1cbiAgXG4gIHB1YmxpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgZGF0YSk7XG4gIH1cbiAgXG4gIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCd3YXJuJywgbWVzc2FnZSwgZGF0YSk7XG4gIH1cbiAgXG4gIHB1YmxpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCBkYXRhKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCByZWNlbnQgbG9ncyAoZm9yIE1DUCB0b29scyB0byByZXRyaWV2ZSlcbiAgICovXG4gIHB1YmxpYyBnZXRMb2dzKGNvdW50ID0gMTAwLCBsZXZlbD86IExvZ0VudHJ5WydsZXZlbCddKTogTG9nRW50cnlbXSB7XG4gICAgbGV0IGZpbHRlcmVkOiByZWFkb25seSBMb2dFbnRyeVtdID0gdGhpcy5sb2dzLnRvQXJyYXkoKTtcbiAgICBpZiAobGV2ZWwpIHtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKGxvZyA9PiBsb2cubGV2ZWwgPT09IGxldmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkLnNsaWNlKC1jb3VudCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBsb2dzXG4gICAqL1xuICBwdWJsaWMgY2xlYXJMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMubG9ncy5jbGVhcigpO1xuICB9XG59XG5cbi8vIEV4cG9ydCBjbGFzcyBmb3IgdGVzdGluZy9leHRlbnNpb25cbmV4cG9ydCB7IE1DUExvZ2dlciB9O1xuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2UgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gbmV3IE1DUExvZ2dlcigpOyJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAW/E,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsKxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBvJ"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAa/E,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmLxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBvJ"}
@@ -26,6 +26,8 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
26
26
  const DEFAULT_PORT = 3939;
27
27
  const CONSOLE_HOST = 'dollhouse.localhost';
28
28
  const ALLOWED_PAGE_EXTENSIONS = new Set(['.html', '.htm']);
29
+ /** Max JSON body for setup routes (install/open-config). Ingest routes use their own 1mb limit. */
30
+ const SETUP_BODY_LIMIT = '1kb';
29
31
  /** Track whether the web server is already running in-process. */
30
32
  let serverRunning = false;
31
33
  let serverPort = DEFAULT_PORT;
@@ -109,10 +111,11 @@ export async function startWebServer(options) {
109
111
  next();
110
112
  });
111
113
  // Setup routes: auto-install DollhouseMCP to MCP clients (mount BEFORE API routes)
112
- app.use(express.json({ limit: '1kb', type: 'application/json' }));
114
+ // Body limit scoped to setup routes only — ingest routes need 1mb for follower log forwarding
115
+ const setupJsonParser = express.json({ limit: SETUP_BODY_LIMIT, type: 'application/json' });
113
116
  const { installHandler, openConfigHandler, versionHandler, mcpbRedirectHandler, detectHandler } = createSetupRoutes();
114
- app.post('/api/setup/install', installHandler);
115
- app.post('/api/setup/open-config', openConfigHandler);
117
+ app.post('/api/setup/install', setupJsonParser, installHandler);
118
+ app.post('/api/setup/open-config', setupJsonParser, openConfigHandler);
116
119
  app.get('/api/setup/version', versionHandler);
117
120
  app.get('/api/setup/mcpb', mcpbRedirectHandler);
118
121
  app.get('/api/setup/detect', detectHandler);
@@ -196,6 +199,17 @@ export async function startWebServer(options) {
196
199
  }
197
200
  res.sendFile(join(publicDir, 'index.html'));
198
201
  });
202
+ // Global error handler — catch Express errors and route to logger instead of terminal.
203
+ // Without this, Express dumps stack traces to stderr (visible in --web terminal).
204
+ // All errors still appear in the management console's Logs tab via MemoryLogSink.
205
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
206
+ app.use((err, _req, res, _next) => {
207
+ const status = err.status || err.statusCode || 500;
208
+ logger.warn(`[WebUI] ${err.name}: ${err.message}`);
209
+ if (!res.headersSent) {
210
+ res.status(status).json({ error: err.message });
211
+ }
212
+ });
199
213
  // Bind to localhost only — handle port conflicts gracefully
200
214
  // NOTE: console.log is intentional here (not logger). In --web standalone mode,
201
215
  // the user sees terminal output directly. logger.info writes to the structured
@@ -265,4 +279,4 @@ export async function openPortfolioBrowser(portfolioDir, port, mcpAqlHandler, ta
265
279
  ...(browserResult.error ? { warning: `Browser could not be opened automatically: ${browserResult.error}. Open ${url} manually.` } : {}),
266
280
  };
267
281
  }
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRTNELGtF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LENBQUM7SUFFckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sY0FBYyxDQUFDO1lBQ25CLFlBQVk7WUFDWixJQUFJLEVBQUUsVUFBVTtZQUNoQixXQUFXLEVBQUUsS0FBSyxFQUFFLGtEQUFrRDtZQUN0RSxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRS9DLE9BQU87UUFDTCxHQUFHO1FBQ0gsY0FBYztRQUNkLGFBQWEsRUFBRSxhQUFhLENBQUMsT0FBTztRQUNwQyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsOENBQThDLGFBQWEsQ0FBQyxLQUFLLFVBQVUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hJLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEb2xsaG91c2VNQ1AgV2ViIFVJIFNlcnZlclxuICpcbiAqIExpZ2h0d2VpZ2h0IEV4cHJlc3Mgc2VydmVyIGZvciBicm93c2luZyBwb3J0Zm9saW8gZWxlbWVudHMgaW4gYSBicm93c2VyLlxuICogQm91bmQgdG8gMTI3LjAuMC4xIG9ubHkgKGxvY2FsaG9zdCkuIFJlYWQtb25seSBmb3IgVjEuXG4gKlxuICogQ2FuIGJlIHN0YXJ0ZWQgc3RhbmRhbG9uZSAoYC0td2ViYCBmbGFnKSBvciBmcm9tIHdpdGhpbiB0aGUgTUNQIHNlcnZlclxuICogcHJvY2VzcyB2aWEgYG9wZW5Qb3J0Zm9saW9Ccm93c2VyKClgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyLXYyLXJlZmFjdG9yL2lzc3Vlcy83MDRcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyLXYyLXJlZmFjdG9yL2lzc3Vlcy83NzRcbiAqL1xuXG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUsIGV4dG5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgY3JlYXRlQXBpUm91dGVzLCBjcmVhdGVHYXRld2F5QXBpUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nUm91dGVzLCB0eXBlIExvZ1JvdXRlc1Jlc3VsdCB9IGZyb20gJy4vcm91dGVzL2xvZ1JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVNZXRyaWNzUm91dGVzLCB0eXBlIE1ldHJpY3NSb3V0ZXNSZXN1bHQgfSBmcm9tICcuL3JvdXRlcy9tZXRyaWNzUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUhlYWx0aFJvdXRlcyB9IGZyb20gJy4vcm91dGVzL2hlYWx0aFJvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTZXR1cFJvdXRlcyB9IGZyb20gJy4vcm91dGVzL3NldHVwUm91dGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1DUEFRTEhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuY29uc3QgREVGQVVMVF9QT1JUID0gMzkzOTtcbmNvbnN0IENPTlNPTEVfSE9TVCA9ICdkb2xsaG91c2UubG9jYWxob3N0JztcbmNvbnN0IEFMTE9XRURfUEFHRV9FWFRFTlNJT05TID0gbmV3IFNldChbJy5odG1sJywgJy5odG0nXSk7XG5cbi8qKiBUcmFjayB3aGV0aGVyIHRoZSB3ZWIgc2VydmVyIGlzIGFscmVhZHkgcnVubmluZyBpbi1wcm9jZXNzLiAqL1xubGV0IHNlcnZlclJ1bm5pbmcgPSBmYWxzZTtcbmxldCBzZXJ2ZXJQb3J0ID0gREVGQVVMVF9QT1JUO1xuXG4vKiogQ2hlY2sgd2hldGhlciB0aGUgd2ViIHNlcnZlciBoYXMgYmVlbiBzdGFydGVkIGluIHRoaXMgcHJvY2Vzcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYlNlcnZlclJ1bm5pbmcoKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZXJ2ZXJSdW5uaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIHRoZSB3ZWIgc2VydmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlck9wdGlvbnMge1xuICAvKiogUG9ydCB0byBiaW5kIHRvIChkZWZhdWx0OiAzOTM5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogUGF0aCB0byB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSAoZS5nLiwgfi8uZG9sbGhvdXNlL3BvcnRmb2xpbykgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBPcGVuIHRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc3RhcnRpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBvcGVuQnJvd3Nlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNQ1BBUUxIYW5kbGVyIGZvciByb3V0aW5nIHRocm91Z2ggdGhlIE1DUC1BUUwgcGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIEFQSSByb3V0ZXMgdXNlIHRoZSBnYXRld2F5ICh2YWxpZGF0ZWQsIGNhY2hlZCwgZ2F0ZWtlZXBlci1jaGVja2VkKS5cbiAgICogV2hlbiBhYnNlbnQsIGZhbGxzIGJhY2sgdG8gZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIChsZWdhY3kgYmVoYXZpb3IpLlxuICAgKiBJc3N1ZSAjNzk2OiBXZWIgTUNQLUFRTCBHYXRld2F5LlxuICAgKi9cbiAgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXI7XG4gIC8qKiBNZW1vcnlMb2dTaW5rIGZvciBsb2cgcm91dGVzIChvcHRpb25hbCDigJQgbG9ncyB0YWIgZGlzYWJsZWQgaWYgbm90IHByb3ZpZGVkKSAqL1xuICBtZW1vcnlTaW5rPzogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1lbW9yeU1ldHJpY3NTaW5rIGZvciBtZXRyaWNzIHJvdXRlcyAob3B0aW9uYWwg4oCUIG1ldHJpY3MgdGFiIGRpc2FibGVkIGlmIG5vdCBwcm92aWRlZCkgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIEFkZGl0aW9uYWwgcm91dGVycyB0byBtb3VudCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjayAoZS5nLiwgaW5nZXN0IHJvdXRlcykgKi9cbiAgYWRkaXRpb25hbFJvdXRlcnM/OiBpbXBvcnQoJ2V4cHJlc3MnKS5Sb3V0ZXJbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygc3RhcnRpbmcgdGhlIHdlYiBzZXJ2ZXIsIGluY2x1ZGluZyBob29rcyBmb3IgREkgd2lyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlclJlc3VsdCB7XG4gIC8qKiBFeHByZXNzIGFwcCBpbnN0YW5jZSDigJQgZm9yIG1vdW50aW5nIGFkZGl0aW9uYWwgcm91dGVzIChlLmcuLCBpbmdlc3Qgcm91dGVzKSAqL1xuICBhcHA/OiBpbXBvcnQoJ2V4cHJlc3MnKS5FeHByZXNzO1xuICAvKiogTG9nIGJyb2FkY2FzdCBmdW5jdGlvbiDigJQgY2FsbCB3aXRoIGVhY2ggZW50cnkgdG8gcHVzaCB0byBTU0UgY2xpZW50cyAqL1xuICBsb2dCcm9hZGNhc3Q/OiAoZW50cnk6IGltcG9ydCgnLi4vbG9nZ2luZy90eXBlcy5qcycpLlVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDtcbiAgLyoqIE1ldHJpY3Mgc25hcHNob3QgZnVuY3Rpb24g4oCUIGNhbGwgd2l0aCBlYWNoIHNuYXBzaG90IHRvIHB1c2ggdG8gU1NFIGNsaWVudHMgKi9cbiAgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IGltcG9ydCgnLi4vbWV0cmljcy90eXBlcy5qcycpLk1ldHJpY1NuYXBzaG90KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIGJyb3dzZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3Nlck9wZW5SZXN1bHQge1xuICAvKiogVGhlIFVSTCB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2FzIGFscmVhZHkgcnVubmluZyAodHJ1ZSkgb3IganVzdCBzdGFydGVkIChmYWxzZSkgKi9cbiAgYWxyZWFkeVJ1bm5pbmc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBicm93c2VyIHdhcyBzdWNjZXNzZnVsbHkgb3BlbmVkICovXG4gIGJyb3dzZXJPcGVuZWQ6IGJvb2xlYW47XG4gIC8qKiBXYXJuaW5nIG1lc3NhZ2UgaWYgdGhlIGJyb3dzZXIgY291bGQgbm90IGJlIG9wZW5lZCAqL1xuICB3YXJuaW5nPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wZW4gYSBVUkwgaW4gdGhlIHN5c3RlbSdzIGRlZmF1bHQgYnJvd3Nlci5cbiAqXG4gKiBQbGF0Zm9ybS1hd2FyZTpcbiAqIC0gbWFjT1M6IGBvcGVuYFxuICogLSBMaW51eDogYHhkZy1vcGVuYFxuICogLSBXaW5kb3dzOiBgc3RhcnRgXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gb3BlblxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIGJyb3dzZXIgb3BlbmVkLCBmYWxzZSB3aXRoIGVycm9yIG1lc3NhZ2UgaWYgbm90XG4gKi9cbmZ1bmN0aW9uIG9wZW5JbkJyb3dzZXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBjb25zdCBjbWQgPSBwbGF0ID09PSAnZGFyd2luJyA/ICdvcGVuJ1xuICAgICAgOiBwbGF0ID09PSAnd2luMzInID8gJ3N0YXJ0J1xuICAgICAgOiAneGRnLW9wZW4nO1xuXG4gICAgLy8gU2VjdXJpdHk6IHVzZSBleGVjRmlsZSB3aXRoIFVSTCBhcyBhcmd1bWVudCBhcnJheSwgbm90IHN0cmluZyBpbnRlcnBvbGF0aW9uXG4gICAgY29uc3QgdXJsU3RyID0gU3RyaW5nKHVybCk7XG4gICAgLy8gQWNjZXB0IGxvY2FsaG9zdCwgMTI3LjAuMC4xLCBhbmQgKi5sb2NhbGhvc3Qgc3ViZG9tYWlucyAoUkZDIDY3NjEpXG4gICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8obG9jYWxob3N0fDEyN1xcLjBcXC4wXFwuMXxbXFx3LV0rXFwubG9jYWxob3N0KVs6L10vLnRlc3QodXJsU3RyKSkge1xuICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ1VSTCBtdXN0IGJlIGEgbG9jYWxob3N0IEhUVFAgVVJMJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY0ZpbGUoY21kLCBbdXJsU3RyXSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBsb2dnZXIud2FybihgW1dlYlVJXSBDb3VsZCBub3QgYXV0by1vcGVuIGJyb3dzZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBwb3J0Zm9saW8gd2ViIHNlcnZlci5cbiAqXG4gKiBCaW5kcyB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gU2VydmVzIHRoZSBwb3J0Zm9saW8gYnJvd3NlclxuICogZnJvbnRlbmQgYW5kIEFQSSByb3V0ZXMgZm9yIHJlYWRpbmcgZWxlbWVudHMuXG4gKlxuICogSWRlbXBvdGVudDogaWYgdGhlIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcsIG9wdGlvbmFsbHkgb3BlbnMgdGhlXG4gKiBicm93c2VyIHdpdGhvdXQgc3RhcnRpbmcgYSBzZWNvbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgSG9va3MgZm9yIERJIHdpcmluZyAobG9nIGJyb2FkY2FzdCwgbWV0cmljcyBvblNuYXBzaG90KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRXZWJTZXJ2ZXIob3B0aW9uczogV2ViU2VydmVyT3B0aW9ucyk6IFByb21pc2U8V2ViU2VydmVyUmVzdWx0PiB7XG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCByZXN1bHQ6IFdlYlNlcnZlclJlc3VsdCA9IHt9O1xuXG4gIGlmIChzZXJ2ZXJSdW5uaW5nKSB7XG4gICAgaWYgKG9wdGlvbnMub3BlbkJyb3dzZXIpIHtcbiAgICAgIG9wZW5JbkJyb3dzZXIoYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtzZXJ2ZXJQb3J0fWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuICByZXN1bHQuYXBwID0gYXBwO1xuICBhcHAuZGlzYWJsZSgneC1wb3dlcmVkLWJ5Jyk7XG5cbiAgLy8gU2VjdXJpdHkgaGVhZGVyc1xuICBhcHAudXNlKChfcmVxLCByZXMsIG5leHQpID0+IHtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUZyYW1lLU9wdGlvbnMnLCAnREVOWScpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtWFNTLVByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1JlZmVycmVyLVBvbGljeScsICduby1yZWZlcnJlcicpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsIGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gKTtcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsIFtcbiAgICAgIFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIsXG4gICAgICBcInNjcmlwdC1zcmMgJ3NlbGYnIGNkbi5qc2RlbGl2ci5uZXQgY2RuanMuY2xvdWRmbGFyZS5jb21cIixcbiAgICAgIFwic3R5bGUtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZScgY2RuanMuY2xvdWRmbGFyZS5jb20gY2RuLmpzZGVsaXZyLm5ldFwiLFxuICAgICAgXCJjb25uZWN0LXNyYyAnc2VsZicgcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbVwiLFxuICAgICAgXCJmb250LXNyYyAnc2VsZidcIixcbiAgICBdLmpvaW4oJzsgJykpO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gU2V0dXAgcm91dGVzOiBhdXRvLWluc3RhbGwgRG9sbGhvdXNlTUNQIHRvIE1DUCBjbGllbnRzIChtb3VudCBCRUZPUkUgQVBJIHJvdXRlcylcbiAgYXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzFrYicsIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KSk7XG4gIGNvbnN0IHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciB9ID0gY3JlYXRlU2V0dXBSb3V0ZXMoKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvaW5zdGFsbCcsIGluc3RhbGxIYW5kbGVyKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvb3Blbi1jb25maWcnLCBvcGVuQ29uZmlnSGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvdmVyc2lvbicsIHZlcnNpb25IYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC9tY3BiJywgbWNwYlJlZGlyZWN0SGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvZGV0ZWN0JywgZGV0ZWN0SGFuZGxlcik7XG4gIGxvZ2dlci5pbmZvKCdbV2ViVUldIFNldHVwIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvc2V0dXAnKTtcblxuICAvLyBBUEkgcm91dGVzIOKAlCB1c2UgTUNQLUFRTCBnYXRld2F5IHdoZW4gaGFuZGxlciBpcyBhdmFpbGFibGUgKElzc3VlICM3OTYpXG4gIGlmIChvcHRpb25zLm1jcEFxbEhhbmRsZXIpIHtcbiAgICBhcHAudXNlKCcvYXBpJywgY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyhvcHRpb25zLm1jcEFxbEhhbmRsZXIsIG9wdGlvbnMucG9ydGZvbGlvRGlyKSk7XG5cbiAgICAvLyBQZXJtaXNzaW9uIGV2YWx1YXRpb24gcm91dGVzIChQT1NUIC9ldmFsdWF0ZV9wZXJtaXNzaW9uLCBHRVQgL3Blcm1pc3Npb25zL3N0YXR1cylcbiAgICBjb25zdCB7IHJlZ2lzdGVyUGVybWlzc2lvblJvdXRlcyB9ID0gYXdhaXQgaW1wb3J0KCcuL3JvdXRlcy9wZXJtaXNzaW9uUm91dGVzLmpzJyk7XG4gICAgY29uc3QgcGVybVJvdXRlciA9IChhd2FpdCBpbXBvcnQoJ2V4cHJlc3MnKSkuUm91dGVyKCk7XG4gICAgcmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzKHBlcm1Sb3V0ZXIsIG9wdGlvbnMubWNwQXFsSGFuZGxlcik7XG4gICAgYXBwLnVzZSgnL2FwaScsIHBlcm1Sb3V0ZXIpO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gQVBJIHJvdXRlcyB1c2luZyBNQ1AtQVFMIEdhdGV3YXkgKyBwZXJtaXNzaW9uIHJvdXRlcycpO1xuICB9IGVsc2Uge1xuICAgIGFwcC51c2UoJy9hcGknLCBjcmVhdGVBcGlSb3V0ZXMob3B0aW9ucy5wb3J0Zm9saW9EaXIpKTtcbiAgICBsb2dnZXIud2FybignW1dlYlVJXSBBUEkgcm91dGVzIHVzaW5nIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcyAobm8gTUNQLUFRTCBoYW5kbGVyIGF2YWlsYWJsZSknKTtcbiAgfVxuXG4gIC8vIENvbnNvbGUgcm91dGVzOiBsb2dzLCBtZXRyaWNzLCBoZWFsdGhcbiAgbGV0IGxvZ1JvdXRlczogTG9nUm91dGVzUmVzdWx0IHwgdW5kZWZpbmVkO1xuICBsZXQgbWV0cmljc1JvdXRlczogTWV0cmljc1JvdXRlc1Jlc3VsdCB8IHVuZGVmaW5lZDtcblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgbG9nUm91dGVzID0gY3JlYXRlTG9nUm91dGVzKG9wdGlvbnMubWVtb3J5U2luayk7XG4gICAgYXBwLnVzZSgnL2FwaScsIGxvZ1JvdXRlcy5yb3V0ZXIpO1xuICAgIHJlc3VsdC5sb2dCcm9hZGNhc3QgPSBsb2dSb3V0ZXMuYnJvYWRjYXN0O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIExvZyB2aWV3ZXIgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9sb2dzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZXRyaWNzU2luaykge1xuICAgIG1ldHJpY3NSb3V0ZXMgPSBjcmVhdGVNZXRyaWNzUm91dGVzKG9wdGlvbnMubWV0cmljc1NpbmspO1xuICAgIGFwcC51c2UoJy9hcGknLCBtZXRyaWNzUm91dGVzLnJvdXRlcik7XG4gICAgcmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90ID0gbWV0cmljc1JvdXRlcy5vblNuYXBzaG90O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIE1ldHJpY3Mgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9tZXRyaWNzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgY29uc3QgaGVhbHRoUm91dGVyID0gY3JlYXRlSGVhbHRoUm91dGVzKHtcbiAgICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICAgIG1ldHJpY3NTaW5rOiBvcHRpb25zLm1ldHJpY3NTaW5rLFxuICAgICAgbG9nQ2xpZW50Q291bnQ6IGxvZ1JvdXRlcyA/IGxvZ1JvdXRlcy5jbGllbnRDb3VudCA6ICgpID0+IDAsXG4gICAgICBtZXRyaWNzQ2xpZW50Q291bnQ6IG1ldHJpY3NSb3V0ZXMgPyBtZXRyaWNzUm91dGVzLmNsaWVudENvdW50IDogKCkgPT4gMCxcbiAgICB9KTtcbiAgICBhcHAudXNlKCcvYXBpJywgaGVhbHRoUm91dGVyKTtcbiAgfVxuXG4gIC8vIFNlcnZlIH4vLmRvbGxob3VzZS9wYWdlcy8gYXQgL3BhZ2VzLyDigJQgZGFzaGJvYXJkcywgZ2VuZXJhdGVkIGNvbnRlbnQsIHN0YWNrIHZpZXdzXG4gIGNvbnN0IHBhZ2VzRGlyID0gam9pbihkaXJuYW1lKG9wdGlvbnMucG9ydGZvbGlvRGlyKSwgJ3BhZ2VzJyk7XG4gIG1rZGlyKHBhZ2VzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KS5jYXRjaChlcnIgPT4ge1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIENvdWxkIG5vdCBjcmVhdGUgcGFnZXMgZGlyZWN0b3J5OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH0pO1xuICBhcHAudXNlKCcvcGFnZXMnLCBleHByZXNzLnN0YXRpYyhwYWdlc0RpcikpO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9wYWdlc1xuICAgKiBMaXN0cyBhdmFpbGFibGUgSFRNTCBwYWdlcyBpbiB+Ly5kb2xsaG91c2UvcGFnZXMvLlxuICAgKiBSZXR1cm5zIHBhZ2UgbmFtZXMgYW5kIHRoZWlyIFVSTHMgZm9yIHRoZSBtYW5hZ2VtZW50IGNvbnNvbGUuXG4gICAqL1xuICBhcHAuZ2V0KCcvYXBpL3BhZ2VzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIocGFnZXNEaXIpO1xuICAgICAgY29uc3QgcGFnZXMgPSBmaWxlc1xuICAgICAgICAuZmlsdGVyKGYgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIEFMTE9XRURfUEFHRV9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSlcbiAgICAgICAgLm1hcChmID0+ICh7IG5hbWU6IGYsIHVybDogYC9wYWdlcy8ke2Z9YCB9KSk7XG4gICAgICByZXMuanNvbih7IHBhZ2VzLCBkaXJlY3Rvcnk6IHBhZ2VzRGlyIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLmpzb24oeyBwYWdlczogW10sIGRpcmVjdG9yeTogcGFnZXNEaXIgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBBZGRpdGlvbmFsIHJvdXRlcnMgKGUuZy4sIHVuaWZpZWQgY29uc29sZSBpbmdlc3Qgcm91dGVzKSDigJQgbXVzdCBtb3VudCBiZWZvcmUgU1BBIGZhbGxiYWNrXG4gIG9wdGlvbnMuYWRkaXRpb25hbFJvdXRlcnM/LmZvckVhY2gocm91dGVyID0+IGFwcC51c2Uocm91dGVyKSk7XG5cbiAgLy8gU3RhdGljIGZyb250ZW5kIGZpbGVzXG4gIGNvbnN0IHB1YmxpY0RpciA9IGpvaW4oX19kaXJuYW1lLCAncHVibGljJyk7XG4gIGFwcC51c2UoZXhwcmVzcy5zdGF0aWMocHVibGljRGlyKSk7XG5cbiAgLy8gU1BBIGZhbGxiYWNrXG4gIGFwcC5nZXQoJy97KnBhdGh9JywgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSByZXEucGF0aC5ub3JtYWxpemUoJ05GQycpO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvYXBpLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgQVBJIHJvdXRlIG5vdCBmb3VuZDogJHtub3JtYWxpemVkUGF0aH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnL3BhZ2VzLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgUGFnZSBub3QgZm91bmQ6ICR7bm9ybWFsaXplZFBhdGh9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVzLnNlbmRGaWxlKGpvaW4ocHVibGljRGlyLCAnaW5kZXguaHRtbCcpKTtcbiAgfSk7XG5cbiAgLy8gQmluZCB0byBsb2NhbGhvc3Qgb25seSDigJQgaGFuZGxlIHBvcnQgY29uZmxpY3RzIGdyYWNlZnVsbHlcbiAgLy8gTk9URTogY29uc29sZS5sb2cgaXMgaW50ZW50aW9uYWwgaGVyZSAobm90IGxvZ2dlcikuIEluIC0td2ViIHN0YW5kYWxvbmUgbW9kZSxcbiAgLy8gdGhlIHVzZXIgc2VlcyB0ZXJtaW5hbCBvdXRwdXQgZGlyZWN0bHkuIGxvZ2dlci5pbmZvIHdyaXRlcyB0byB0aGUgc3RydWN0dXJlZFxuICAvLyBsb2cgc3lzdGVtIChNZW1vcnlMb2dTaW5rIOKGkiBTU0Ug4oaSIHdlYiBjb25zb2xlKS4gQm90aCBhcmUgbmVlZGVkOiBjb25zb2xlLmxvZ1xuICAvLyBmb3IgdGhlIGh1bWFuIGF0IHRoZSB0ZXJtaW5hbCwgbG9nZ2VyIGZvciB0aGUgbG9nIHZpZXdlciB0YWIuXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaHR0cFNlcnZlciA9IGFwcC5saXN0ZW4ocG9ydCwgJzEyNy4wLjAuMScsICgpID0+IHtcbiAgICAgIHNlcnZlclJ1bm5pbmcgPSB0cnVlO1xuICAgICAgc2VydmVyUG9ydCA9IHBvcnQ7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3BvcnR9YDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fWA7XG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBNYW5hZ2VtZW50IGNvbnNvbGUgcnVubmluZyBhdCAke3VybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG4gIERvbGxob3VzZU1DUCBNYW5hZ2VtZW50IENvbnNvbGVcXG4gICR7dXJsfVxcbiAgJHtmYWxsYmFja1VybH0gKGZhbGxiYWNrKVxcbmApO1xuXG4gICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICBvcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgaHR0cFNlcnZlci5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBRERSSU5VU0UnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBQb3J0ICR7cG9ydH0gYWxyZWFkeSBpbiB1c2Ug4oCUIG9wZW5pbmcgZXhpc3RpbmcgY29uc29sZWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuICBEb2xsaG91c2VNQ1AgTWFuYWdlbWVudCBDb25zb2xlIChleGlzdGluZyBpbnN0YW5jZSlcXG4gICR7dXJsfVxcbmApO1xuICAgICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICAgIG9wZW5JbkJyb3dzZXIodXJsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBbV2ViVUldIEZhaWxlZCB0byBiaW5kIHBvcnQgJHtwb3J0fTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoKTsgLy8gV2ViIGNvbnNvbGUgaXMgb3B0aW9uYWwg4oCUIGRvbid0IGJsb2NrIHN0YXJ0dXBcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBPcGVuIHRoZSBwb3J0Zm9saW8gYnJvd3NlciBmcm9tIHdpdGhpbiB0aGUgTUNQIHNlcnZlciBwcm9jZXNzLlxuICpcbiAqIFN0YXJ0cyB0aGUgd2ViIHNlcnZlciBpZiBub3QgYWxyZWFkeSBydW5uaW5nLCB0aGVuIG9wZW5zIHRoZSBzeXN0ZW1cbiAqIGJyb3dzZXIgdG8gdGhlIHBvcnRmb2xpbyBVSS4gUmV0dXJucyBhIHJlc3VsdCBvYmplY3QgaW5kaWNhdGluZ1xuICogd2hldGhlciB0aGUgc2VydmVyIHN0YXJ0ZWQgYW5kIHRoZSBicm93c2VyIG9wZW5lZCBzdWNjZXNzZnVsbHkuXG4gKlxuICogQ2FsbGVkIGJ5IHRoZSBgb3Blbl9wb3J0Zm9saW9fYnJvd3NlcmAgTUNQLUFRTCBvcGVyYXRpb24gKElzc3VlICM3NzQpLlxuICpcbiAqIEBwYXJhbSBwb3J0Zm9saW9EaXIgLSBQYXRoIHRvIHRoZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChlLmcuLCB+Ly5kb2xsaG91c2UvcG9ydGZvbGlvKVxuICogQHBhcmFtIHBvcnQgLSBQb3J0IHRvIGJpbmQgdG8gKGRlZmF1bHQ6IDM5MzkpXG4gKiBAcmV0dXJucyBSZXN1bHQgd2l0aCBVUkwsIHNlcnZlciBzdGF0dXMsIGFuZCBicm93c2VyIG9wZW4gc3RhdHVzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUG9ydGZvbGlvQnJvd3Nlcihwb3J0Zm9saW9EaXI6IHN0cmluZywgcG9ydD86IG51bWJlciwgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXIsIHRhYj86IHN0cmluZyk6IFByb21pc2U8QnJvd3Nlck9wZW5SZXN1bHQ+IHtcbiAgY29uc3QgdGFyZ2V0UG9ydCA9IHBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBiYXNlVXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHt0YXJnZXRQb3J0fWA7XG4gIGNvbnN0IHVybCA9IHRhYiA/IGAke2Jhc2VVcmx9LyMke3RhYn1gIDogYmFzZVVybDtcbiAgY29uc3QgYWxyZWFkeVJ1bm5pbmcgPSBzZXJ2ZXJSdW5uaW5nO1xuXG4gIGlmICghc2VydmVyUnVubmluZykge1xuICAgIGF3YWl0IHN0YXJ0V2ViU2VydmVyKHtcbiAgICAgIHBvcnRmb2xpb0RpcixcbiAgICAgIHBvcnQ6IHRhcmdldFBvcnQsXG4gICAgICBvcGVuQnJvd3NlcjogZmFsc2UsIC8vIFdlJ2xsIG9wZW4gbWFudWFsbHkgYmVsb3cgdG8gY2FwdHVyZSB0aGUgcmVzdWx0XG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgYnJvd3NlclJlc3VsdCA9IGF3YWl0IG9wZW5JbkJyb3dzZXIodXJsKTtcblxuICByZXR1cm4ge1xuICAgIHVybCxcbiAgICBhbHJlYWR5UnVubmluZyxcbiAgICBicm93c2VyT3BlbmVkOiBicm93c2VyUmVzdWx0LnN1Y2Nlc3MsXG4gICAgLi4uKGJyb3dzZXJSZXN1bHQuZXJyb3IgPyB7IHdhcm5pbmc6IGBCcm93c2VyIGNvdWxkIG5vdCBiZSBvcGVuZWQgYXV0b21hdGljYWxseTogJHticm93c2VyUmVzdWx0LmVycm9yfS4gT3BlbiAke3VybH0gbWFudWFsbHkuYCB9IDoge30pLFxuICB9O1xufVxuIl19
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELG1H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QUMsQ0FBQyxFQUFFLENBQUM7S0FDeEksQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERvbGxob3VzZU1DUCBXZWIgVUkgU2VydmVyXG4gKlxuICogTGlnaHR3ZWlnaHQgRXhwcmVzcyBzZXJ2ZXIgZm9yIGJyb3dzaW5nIHBvcnRmb2xpbyBlbGVtZW50cyBpbiBhIGJyb3dzZXIuXG4gKiBCb3VuZCB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gUmVhZC1vbmx5IGZvciBWMS5cbiAqXG4gKiBDYW4gYmUgc3RhcnRlZCBzdGFuZGFsb25lIChgLS13ZWJgIGZsYWcpIG9yIGZyb20gd2l0aGluIHRoZSBNQ1Agc2VydmVyXG4gKiBwcm9jZXNzIHZpYSBgb3BlblBvcnRmb2xpb0Jyb3dzZXIoKWAuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzcwNFxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc3NFxuICovXG5cbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgam9pbiwgZGlybmFtZSwgZXh0bmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IG1rZGlyLCByZWFkZGlyIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBjcmVhdGVBcGlSb3V0ZXMsIGNyZWF0ZUdhdGV3YXlBcGlSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dSb3V0ZXMsIHR5cGUgTG9nUm91dGVzUmVzdWx0IH0gZnJvbSAnLi9yb3V0ZXMvbG9nUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZU1ldHJpY3NSb3V0ZXMsIHR5cGUgTWV0cmljc1JvdXRlc1Jlc3VsdCB9IGZyb20gJy4vcm91dGVzL21ldHJpY3NSb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlSGVhbHRoUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMvaGVhbHRoUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNldHVwUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMvc2V0dXBSb3V0ZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBERUZBVUxUX1BPUlQgPSAzOTM5O1xuY29uc3QgQ09OU09MRV9IT1NUID0gJ2RvbGxob3VzZS5sb2NhbGhvc3QnO1xuY29uc3QgQUxMT1dFRF9QQUdFX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmh0bWwnLCAnLmh0bSddKTtcbi8qKiBNYXggSlNPTiBib2R5IGZvciBzZXR1cCByb3V0ZXMgKGluc3RhbGwvb3Blbi1jb25maWcpLiBJbmdlc3Qgcm91dGVzIHVzZSB0aGVpciBvd24gMW1iIGxpbWl0LiAqL1xuY29uc3QgU0VUVVBfQk9EWV9MSU1JVCA9ICcxa2InO1xuXG4vKiogVHJhY2sgd2hldGhlciB0aGUgd2ViIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcgaW4tcHJvY2Vzcy4gKi9cbmxldCBzZXJ2ZXJSdW5uaW5nID0gZmFsc2U7XG5sZXQgc2VydmVyUG9ydCA9IERFRkFVTFRfUE9SVDtcblxuLyoqIENoZWNrIHdoZXRoZXIgdGhlIHdlYiBzZXJ2ZXIgaGFzIGJlZW4gc3RhcnRlZCBpbiB0aGlzIHByb2Nlc3MuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXZWJTZXJ2ZXJSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2VydmVyUnVubmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyB0aGUgd2ViIHNlcnZlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTZXJ2ZXJPcHRpb25zIHtcbiAgLyoqIFBvcnQgdG8gYmluZCB0byAoZGVmYXVsdDogMzkzOSkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIFBhdGggdG8gdGhlIHBvcnRmb2xpbyBkaXJlY3RvcnkgKGUuZy4sIH4vLmRvbGxob3VzZS9wb3J0Zm9saW8pICovXG4gIHBvcnRmb2xpb0Rpcjogc3RyaW5nO1xuICAvKiogT3BlbiB0aGUgYnJvd3NlciBhdXRvbWF0aWNhbGx5IGFmdGVyIHN0YXJ0aW5nIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgb3BlbkJyb3dzZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogTUNQQVFMSGFuZGxlciBmb3Igcm91dGluZyB0aHJvdWdoIHRoZSBNQ1AtQVFMIHBpcGVsaW5lLlxuICAgKiBXaGVuIHByb3ZpZGVkLCBBUEkgcm91dGVzIHVzZSB0aGUgZ2F0ZXdheSAodmFsaWRhdGVkLCBjYWNoZWQsIGdhdGVrZWVwZXItY2hlY2tlZCkuXG4gICAqIFdoZW4gYWJzZW50LCBmYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcyAobGVnYWN5IGJlaGF2aW9yKS5cbiAgICogSXNzdWUgIzc5NjogV2ViIE1DUC1BUUwgR2F0ZXdheS5cbiAgICovXG4gIG1jcEFxbEhhbmRsZXI/OiBNQ1BBUUxIYW5kbGVyO1xuICAvKiogTWVtb3J5TG9nU2luayBmb3IgbG9nIHJvdXRlcyAob3B0aW9uYWwg4oCUIGxvZ3MgdGFiIGRpc2FibGVkIGlmIG5vdCBwcm92aWRlZCkgKi9cbiAgbWVtb3J5U2luaz86IE1lbW9yeUxvZ1Npbms7XG4gIC8qKiBNZW1vcnlNZXRyaWNzU2luayBmb3IgbWV0cmljcyByb3V0ZXMgKG9wdGlvbmFsIOKAlCBtZXRyaWNzIHRhYiBkaXNhYmxlZCBpZiBub3QgcHJvdmlkZWQpICovXG4gIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1Npbms7XG4gIC8qKiBBZGRpdGlvbmFsIHJvdXRlcnMgdG8gbW91bnQgYmVmb3JlIHRoZSBTUEEgZmFsbGJhY2sgKGUuZy4sIGluZ2VzdCByb3V0ZXMpICovXG4gIGFkZGl0aW9uYWxSb3V0ZXJzPzogaW1wb3J0KCdleHByZXNzJykuUm91dGVyW107XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIHRoZSB3ZWIgc2VydmVyLCBpbmNsdWRpbmcgaG9va3MgZm9yIERJIHdpcmluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTZXJ2ZXJSZXN1bHQge1xuICAvKiogRXhwcmVzcyBhcHAgaW5zdGFuY2Ug4oCUIGZvciBtb3VudGluZyBhZGRpdGlvbmFsIHJvdXRlcyAoZS5nLiwgaW5nZXN0IHJvdXRlcykgKi9cbiAgYXBwPzogaW1wb3J0KCdleHByZXNzJykuRXhwcmVzcztcbiAgLyoqIExvZyBicm9hZGNhc3QgZnVuY3Rpb24g4oCUIGNhbGwgd2l0aCBlYWNoIGVudHJ5IHRvIHB1c2ggdG8gU1NFIGNsaWVudHMgKi9cbiAgbG9nQnJvYWRjYXN0PzogKGVudHJ5OiBpbXBvcnQoJy4uL2xvZ2dpbmcvdHlwZXMuanMnKS5VbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7XG4gIC8qKiBNZXRyaWNzIHNuYXBzaG90IGZ1bmN0aW9uIOKAlCBjYWxsIHdpdGggZWFjaCBzbmFwc2hvdCB0byBwdXNoIHRvIFNTRSBjbGllbnRzICovXG4gIG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBpbXBvcnQoJy4uL21ldHJpY3MvdHlwZXMuanMnKS5NZXRyaWNTbmFwc2hvdCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYXR0ZW1wdGluZyB0byBvcGVuIHRoZSBicm93c2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJPcGVuUmVzdWx0IHtcbiAgLyoqIFRoZSBVUkwgdGhlIHNlcnZlciBpcyBydW5uaW5nIG9uICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgc2VydmVyIHdhcyBhbHJlYWR5IHJ1bm5pbmcgKHRydWUpIG9yIGp1c3Qgc3RhcnRlZCAoZmFsc2UpICovXG4gIGFscmVhZHlSdW5uaW5nOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgYnJvd3NlciB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZCAqL1xuICBicm93c2VyT3BlbmVkOiBib29sZWFuO1xuICAvKiogV2FybmluZyBtZXNzYWdlIGlmIHRoZSBicm93c2VyIGNvdWxkIG5vdCBiZSBvcGVuZWQgKi9cbiAgd2FybmluZz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcGVuIGEgVVJMIGluIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IGJyb3dzZXIuXG4gKlxuICogUGxhdGZvcm0tYXdhcmU6XG4gKiAtIG1hY09TOiBgb3BlbmBcbiAqIC0gTGludXg6IGB4ZGctb3BlbmBcbiAqIC0gV2luZG93czogYHN0YXJ0YFxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIHRvIG9wZW5cbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSBicm93c2VyIG9wZW5lZCwgZmFsc2Ugd2l0aCBlcnJvciBtZXNzYWdlIGlmIG5vdFxuICovXG5mdW5jdGlvbiBvcGVuSW5Ccm93c2VyKHVybDogc3RyaW5nKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgY29uc3QgY21kID0gcGxhdCA9PT0gJ2RhcndpbicgPyAnb3BlbidcbiAgICAgIDogcGxhdCA9PT0gJ3dpbjMyJyA/ICdzdGFydCdcbiAgICAgIDogJ3hkZy1vcGVuJztcblxuICAgIC8vIFNlY3VyaXR5OiB1c2UgZXhlY0ZpbGUgd2l0aCBVUkwgYXMgYXJndW1lbnQgYXJyYXksIG5vdCBzdHJpbmcgaW50ZXJwb2xhdGlvblxuICAgIGNvbnN0IHVybFN0ciA9IFN0cmluZyh1cmwpO1xuICAgIC8vIEFjY2VwdCBsb2NhbGhvc3QsIDEyNy4wLjAuMSwgYW5kICoubG9jYWxob3N0IHN1YmRvbWFpbnMgKFJGQyA2NzYxKVxuICAgIGlmICghL15odHRwcz86XFwvXFwvKGxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLjF8W1xcdy1dK1xcLmxvY2FsaG9zdClbOi9dLy50ZXN0KHVybFN0cikpIHtcbiAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdVUkwgbXVzdCBiZSBhIGxvY2FsaG9zdCBIVFRQIFVSTCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4ZWNGaWxlKGNtZCwgW3VybFN0cl0sIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gQ291bGQgbm90IGF1dG8tb3BlbiBicm93c2VyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICByZXNvbHZlKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTdGFydCB0aGUgcG9ydGZvbGlvIHdlYiBzZXJ2ZXIuXG4gKlxuICogQmluZHMgdG8gMTI3LjAuMC4xIG9ubHkgKGxvY2FsaG9zdCkuIFNlcnZlcyB0aGUgcG9ydGZvbGlvIGJyb3dzZXJcbiAqIGZyb250ZW5kIGFuZCBBUEkgcm91dGVzIGZvciByZWFkaW5nIGVsZW1lbnRzLlxuICpcbiAqIElkZW1wb3RlbnQ6IGlmIHRoZSBzZXJ2ZXIgaXMgYWxyZWFkeSBydW5uaW5nLCBvcHRpb25hbGx5IG9wZW5zIHRoZVxuICogYnJvd3NlciB3aXRob3V0IHN0YXJ0aW5nIGEgc2Vjb25kIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gU2VydmVyIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEhvb2tzIGZvciBESSB3aXJpbmcgKGxvZyBicm9hZGNhc3QsIG1ldHJpY3Mgb25TbmFwc2hvdClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0V2ViU2VydmVyKG9wdGlvbnM6IFdlYlNlcnZlck9wdGlvbnMpOiBQcm9taXNlPFdlYlNlcnZlclJlc3VsdD4ge1xuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IERFRkFVTFRfUE9SVDtcbiAgY29uc3QgcmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHQgPSB7fTtcblxuICBpZiAoc2VydmVyUnVubmluZykge1xuICAgIGlmIChvcHRpb25zLm9wZW5Ccm93c2VyKSB7XG4gICAgICBvcGVuSW5Ccm93c2VyKGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7c2VydmVyUG9ydH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcbiAgcmVzdWx0LmFwcCA9IGFwcDtcbiAgYXBwLmRpc2FibGUoJ3gtcG93ZXJlZC1ieScpO1xuXG4gIC8vIFNlY3VyaXR5IGhlYWRlcnNcbiAgYXBwLnVzZSgoX3JlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgcmVzLnNldEhlYWRlcignWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJyk7XG4gICAgcmVzLnNldEhlYWRlcignWC1GcmFtZS1PcHRpb25zJywgJ0RFTlknKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uJywgJzE7IG1vZGU9YmxvY2snKTtcbiAgICByZXMuc2V0SGVhZGVyKCdSZWZlcnJlci1Qb2xpY3knLCAnbm8tcmVmZXJyZXInKTtcbiAgICByZXMuc2V0SGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3BvcnR9YCk7XG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1TZWN1cml0eS1Qb2xpY3knLCBbXG4gICAgICBcImRlZmF1bHQtc3JjICdzZWxmJ1wiLFxuICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJyBjZG4uanNkZWxpdnIubmV0IGNkbmpzLmNsb3VkZmxhcmUuY29tXCIsXG4gICAgICBcInN0eWxlLXNyYyAnc2VsZicgJ3Vuc2FmZS1pbmxpbmUnIGNkbmpzLmNsb3VkZmxhcmUuY29tIGNkbi5qc2RlbGl2ci5uZXRcIixcbiAgICAgIFwiY29ubmVjdC1zcmMgJ3NlbGYnIHJhdy5naXRodWJ1c2VyY29udGVudC5jb21cIixcbiAgICAgIFwiZm9udC1zcmMgJ3NlbGYnXCIsXG4gICAgXS5qb2luKCc7ICcpKTtcbiAgICBuZXh0KCk7XG4gIH0pO1xuXG4gIC8vIFNldHVwIHJvdXRlczogYXV0by1pbnN0YWxsIERvbGxob3VzZU1DUCB0byBNQ1AgY2xpZW50cyAobW91bnQgQkVGT1JFIEFQSSByb3V0ZXMpXG4gIC8vIEJvZHkgbGltaXQgc2NvcGVkIHRvIHNldHVwIHJvdXRlcyBvbmx5IOKAlCBpbmdlc3Qgcm91dGVzIG5lZWQgMW1iIGZvciBmb2xsb3dlciBsb2cgZm9yd2FyZGluZ1xuICBjb25zdCBzZXR1cEpzb25QYXJzZXIgPSBleHByZXNzLmpzb24oeyBsaW1pdDogU0VUVVBfQk9EWV9MSU1JVCwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICBjb25zdCB7IGluc3RhbGxIYW5kbGVyLCBvcGVuQ29uZmlnSGFuZGxlciwgdmVyc2lvbkhhbmRsZXIsIG1jcGJSZWRpcmVjdEhhbmRsZXIsIGRldGVjdEhhbmRsZXIgfSA9IGNyZWF0ZVNldHVwUm91dGVzKCk7XG4gIGFwcC5wb3N0KCcvYXBpL3NldHVwL2luc3RhbGwnLCBzZXR1cEpzb25QYXJzZXIsIGluc3RhbGxIYW5kbGVyKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvb3Blbi1jb25maWcnLCBzZXR1cEpzb25QYXJzZXIsIG9wZW5Db25maWdIYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC92ZXJzaW9uJywgdmVyc2lvbkhhbmRsZXIpO1xuICBhcHAuZ2V0KCcvYXBpL3NldHVwL21jcGInLCBtY3BiUmVkaXJlY3RIYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC9kZXRlY3QnLCBkZXRlY3RIYW5kbGVyKTtcbiAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gU2V0dXAgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9zZXR1cCcpO1xuXG4gIC8vIEFQSSByb3V0ZXMg4oCUIHVzZSBNQ1AtQVFMIGdhdGV3YXkgd2hlbiBoYW5kbGVyIGlzIGF2YWlsYWJsZSAoSXNzdWUgIzc5NilcbiAgaWYgKG9wdGlvbnMubWNwQXFsSGFuZGxlcikge1xuICAgIGFwcC51c2UoJy9hcGknLCBjcmVhdGVHYXRld2F5QXBpUm91dGVzKG9wdGlvbnMubWNwQXFsSGFuZGxlciwgb3B0aW9ucy5wb3J0Zm9saW9EaXIpKTtcblxuICAgIC8vIFBlcm1pc3Npb24gZXZhbHVhdGlvbiByb3V0ZXMgKFBPU1QgL2V2YWx1YXRlX3Blcm1pc3Npb24sIEdFVCAvcGVybWlzc2lvbnMvc3RhdHVzKVxuICAgIGNvbnN0IHsgcmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzIH0gPSBhd2FpdCBpbXBvcnQoJy4vcm91dGVzL3Blcm1pc3Npb25Sb3V0ZXMuanMnKTtcbiAgICBjb25zdCBwZXJtUm91dGVyID0gKGF3YWl0IGltcG9ydCgnZXhwcmVzcycpKS5Sb3V0ZXIoKTtcbiAgICByZWdpc3RlclBlcm1pc3Npb25Sb3V0ZXMocGVybVJvdXRlciwgb3B0aW9ucy5tY3BBcWxIYW5kbGVyKTtcbiAgICBhcHAudXNlKCcvYXBpJywgcGVybVJvdXRlcik7XG5cbiAgICBsb2dnZXIuaW5mbygnW1dlYlVJXSBBUEkgcm91dGVzIHVzaW5nIE1DUC1BUUwgR2F0ZXdheSArIHBlcm1pc3Npb24gcm91dGVzJyk7XG4gIH0gZWxzZSB7XG4gICAgYXBwLnVzZSgnL2FwaScsIGNyZWF0ZUFwaVJvdXRlcyhvcHRpb25zLnBvcnRmb2xpb0RpcikpO1xuICAgIGxvZ2dlci53YXJuKCdbV2ViVUldIEFQSSByb3V0ZXMgdXNpbmcgZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIChubyBNQ1AtQVFMIGhhbmRsZXIgYXZhaWxhYmxlKScpO1xuICB9XG5cbiAgLy8gQ29uc29sZSByb3V0ZXM6IGxvZ3MsIG1ldHJpY3MsIGhlYWx0aFxuICBsZXQgbG9nUm91dGVzOiBMb2dSb3V0ZXNSZXN1bHQgfCB1bmRlZmluZWQ7XG4gIGxldCBtZXRyaWNzUm91dGVzOiBNZXRyaWNzUm91dGVzUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4gIGlmIChvcHRpb25zLm1lbW9yeVNpbmspIHtcbiAgICBsb2dSb3V0ZXMgPSBjcmVhdGVMb2dSb3V0ZXMob3B0aW9ucy5tZW1vcnlTaW5rKTtcbiAgICBhcHAudXNlKCcvYXBpJywgbG9nUm91dGVzLnJvdXRlcik7XG4gICAgcmVzdWx0LmxvZ0Jyb2FkY2FzdCA9IGxvZ1JvdXRlcy5icm9hZGNhc3Q7XG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gTG9nIHZpZXdlciByb3V0ZXMgbW91bnRlZCBhdCAvYXBpL2xvZ3MnKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1ldHJpY3NTaW5rKSB7XG4gICAgbWV0cmljc1JvdXRlcyA9IGNyZWF0ZU1ldHJpY3NSb3V0ZXMob3B0aW9ucy5tZXRyaWNzU2luayk7XG4gICAgYXBwLnVzZSgnL2FwaScsIG1ldHJpY3NSb3V0ZXMucm91dGVyKTtcbiAgICByZXN1bHQubWV0cmljc09uU25hcHNob3QgPSBtZXRyaWNzUm91dGVzLm9uU25hcHNob3Q7XG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gTWV0cmljcyByb3V0ZXMgbW91bnRlZCBhdCAvYXBpL21ldHJpY3MnKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1lbW9yeVNpbmspIHtcbiAgICBjb25zdCBoZWFsdGhSb3V0ZXIgPSBjcmVhdGVIZWFsdGhSb3V0ZXMoe1xuICAgICAgbWVtb3J5U2luazogb3B0aW9ucy5tZW1vcnlTaW5rLFxuICAgICAgbWV0cmljc1Npbms6IG9wdGlvbnMubWV0cmljc1NpbmssXG4gICAgICBsb2dDbGllbnRDb3VudDogbG9nUm91dGVzID8gbG9nUm91dGVzLmNsaWVudENvdW50IDogKCkgPT4gMCxcbiAgICAgIG1ldHJpY3NDbGllbnRDb3VudDogbWV0cmljc1JvdXRlcyA/IG1ldHJpY3NSb3V0ZXMuY2xpZW50Q291bnQgOiAoKSA9PiAwLFxuICAgIH0pO1xuICAgIGFwcC51c2UoJy9hcGknLCBoZWFsdGhSb3V0ZXIpO1xuICB9XG5cbiAgLy8gU2VydmUgfi8uZG9sbGhvdXNlL3BhZ2VzLyBhdCAvcGFnZXMvIOKAlCBkYXNoYm9hcmRzLCBnZW5lcmF0ZWQgY29udGVudCwgc3RhY2sgdmlld3NcbiAgY29uc3QgcGFnZXNEaXIgPSBqb2luKGRpcm5hbWUob3B0aW9ucy5wb3J0Zm9saW9EaXIpLCAncGFnZXMnKTtcbiAgbWtkaXIocGFnZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gQ291bGQgbm90IGNyZWF0ZSBwYWdlcyBkaXJlY3Rvcnk6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfSk7XG4gIGFwcC51c2UoJy9wYWdlcycsIGV4cHJlc3Muc3RhdGljKHBhZ2VzRGlyKSk7XG5cbiAgLyoqXG4gICAqIEdFVCAvYXBpL3BhZ2VzXG4gICAqIExpc3RzIGF2YWlsYWJsZSBIVE1MIHBhZ2VzIGluIH4vLmRvbGxob3VzZS9wYWdlcy8uXG4gICAqIFJldHVybnMgcGFnZSBuYW1lcyBhbmQgdGhlaXIgVVJMcyBmb3IgdGhlIG1hbmFnZW1lbnQgY29uc29sZS5cbiAgICovXG4gIGFwcC5nZXQoJy9hcGkvcGFnZXMnLCBhc3luYyAoX3JlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihwYWdlc0Rpcik7XG4gICAgICBjb25zdCBwYWdlcyA9IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZiA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgQUxMT1dFRF9QQUdFX0VYVEVOU0lPTlMuaGFzKGV4dG5hbWUoZikpKVxuICAgICAgICAubWFwKGYgPT4gKHsgbmFtZTogZiwgdXJsOiBgL3BhZ2VzLyR7Zn1gIH0pKTtcbiAgICAgIHJlcy5qc29uKHsgcGFnZXMsIGRpcmVjdG9yeTogcGFnZXNEaXIgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXMuanNvbih7IHBhZ2VzOiBbXSwgZGlyZWN0b3J5OiBwYWdlc0RpciB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZGl0aW9uYWwgcm91dGVycyAoZS5nLiwgdW5pZmllZCBjb25zb2xlIGluZ2VzdCByb3V0ZXMpIOKAlCBtdXN0IG1vdW50IGJlZm9yZSBTUEEgZmFsbGJhY2tcbiAgb3B0aW9ucy5hZGRpdGlvbmFsUm91dGVycz8uZm9yRWFjaChyb3V0ZXIgPT4gYXBwLnVzZShyb3V0ZXIpKTtcblxuICAvLyBTdGF0aWMgZnJvbnRlbmQgZmlsZXNcbiAgY29uc3QgcHVibGljRGlyID0gam9pbihfX2Rpcm5hbWUsICdwdWJsaWMnKTtcbiAgYXBwLnVzZShleHByZXNzLnN0YXRpYyhwdWJsaWNEaXIpKTtcblxuICAvLyBTUEEgZmFsbGJhY2tcbiAgYXBwLmdldCgnL3sqcGF0aH0nLCAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHJlcS5wYXRoLm5vcm1hbGl6ZSgnTkZDJyk7XG4gICAgaWYgKG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoJy9hcGkvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6IGBBUEkgcm91dGUgbm90IGZvdW5kOiAke25vcm1hbGl6ZWRQYXRofWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvcGFnZXMvJykpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6IGBQYWdlIG5vdCBmb3VuZDogJHtub3JtYWxpemVkUGF0aH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXMuc2VuZEZpbGUoam9pbihwdWJsaWNEaXIsICdpbmRleC5odG1sJykpO1xuICB9KTtcblxuICAvLyBHbG9iYWwgZXJyb3IgaGFuZGxlciDigJQgY2F0Y2ggRXhwcmVzcyBlcnJvcnMgYW5kIHJvdXRlIHRvIGxvZ2dlciBpbnN0ZWFkIG9mIHRlcm1pbmFsLlxuICAvLyBXaXRob3V0IHRoaXMsIEV4cHJlc3MgZHVtcHMgc3RhY2sgdHJhY2VzIHRvIHN0ZGVyciAodmlzaWJsZSBpbiAtLXdlYiB0ZXJtaW5hbCkuXG4gIC8vIEFsbCBlcnJvcnMgc3RpbGwgYXBwZWFyIGluIHRoZSBtYW5hZ2VtZW50IGNvbnNvbGUncyBMb2dzIHRhYiB2aWEgTWVtb3J5TG9nU2luay5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhcHAudXNlKChlcnI6IEVycm9yLCBfcmVxOiBpbXBvcnQoJ2V4cHJlc3MnKS5SZXF1ZXN0LCByZXM6IGltcG9ydCgnZXhwcmVzcycpLlJlc3BvbnNlLCBfbmV4dDogaW1wb3J0KCdleHByZXNzJykuTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gKGVyciBhcyBhbnkpLnN0YXR1cyB8fCAoZXJyIGFzIGFueSkuc3RhdHVzQ29kZSB8fCA1MDA7XG4gICAgbG9nZ2VyLndhcm4oYFtXZWJVSV0gJHtlcnIubmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgIHJlcy5zdGF0dXMoc3RhdHVzKS5qc29uKHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQmluZCB0byBsb2NhbGhvc3Qgb25seSDigJQgaGFuZGxlIHBvcnQgY29uZmxpY3RzIGdyYWNlZnVsbHlcbiAgLy8gTk9URTogY29uc29sZS5sb2cgaXMgaW50ZW50aW9uYWwgaGVyZSAobm90IGxvZ2dlcikuIEluIC0td2ViIHN0YW5kYWxvbmUgbW9kZSxcbiAgLy8gdGhlIHVzZXIgc2VlcyB0ZXJtaW5hbCBvdXRwdXQgZGlyZWN0bHkuIGxvZ2dlci5pbmZvIHdyaXRlcyB0byB0aGUgc3RydWN0dXJlZFxuICAvLyBsb2cgc3lzdGVtIChNZW1vcnlMb2dTaW5rIOKGkiBTU0Ug4oaSIHdlYiBjb25zb2xlKS4gQm90aCBhcmUgbmVlZGVkOiBjb25zb2xlLmxvZ1xuICAvLyBmb3IgdGhlIGh1bWFuIGF0IHRoZSB0ZXJtaW5hbCwgbG9nZ2VyIGZvciB0aGUgbG9nIHZpZXdlciB0YWIuXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaHR0cFNlcnZlciA9IGFwcC5saXN0ZW4ocG9ydCwgJzEyNy4wLjAuMScsICgpID0+IHtcbiAgICAgIHNlcnZlclJ1bm5pbmcgPSB0cnVlO1xuICAgICAgc2VydmVyUG9ydCA9IHBvcnQ7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3BvcnR9YDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fWA7XG4gICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBNYW5hZ2VtZW50IGNvbnNvbGUgcnVubmluZyBhdCAke3VybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG4gIERvbGxob3VzZU1DUCBNYW5hZ2VtZW50IENvbnNvbGVcXG4gICR7dXJsfVxcbiAgJHtmYWxsYmFja1VybH0gKGZhbGxiYWNrKVxcbmApO1xuXG4gICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICBvcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgaHR0cFNlcnZlci5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBRERSSU5VU0UnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBQb3J0ICR7cG9ydH0gYWxyZWFkeSBpbiB1c2Ug4oCUIG9wZW5pbmcgZXhpc3RpbmcgY29uc29sZWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuICBEb2xsaG91c2VNQ1AgTWFuYWdlbWVudCBDb25zb2xlIChleGlzdGluZyBpbnN0YW5jZSlcXG4gICR7dXJsfVxcbmApO1xuICAgICAgICBpZiAob3B0aW9ucy5vcGVuQnJvd3Nlcikge1xuICAgICAgICAgIG9wZW5JbkJyb3dzZXIodXJsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBbV2ViVUldIEZhaWxlZCB0byBiaW5kIHBvcnQgJHtwb3J0fTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoKTsgLy8gV2ViIGNvbnNvbGUgaXMgb3B0aW9uYWwg4oCUIGRvbid0IGJsb2NrIHN0YXJ0dXBcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBPcGVuIHRoZSBwb3J0Zm9saW8gYnJvd3NlciBmcm9tIHdpdGhpbiB0aGUgTUNQIHNlcnZlciBwcm9jZXNzLlxuICpcbiAqIFN0YXJ0cyB0aGUgd2ViIHNlcnZlciBpZiBub3QgYWxyZWFkeSBydW5uaW5nLCB0aGVuIG9wZW5zIHRoZSBzeXN0ZW1cbiAqIGJyb3dzZXIgdG8gdGhlIHBvcnRmb2xpbyBVSS4gUmV0dXJucyBhIHJlc3VsdCBvYmplY3QgaW5kaWNhdGluZ1xuICogd2hldGhlciB0aGUgc2VydmVyIHN0YXJ0ZWQgYW5kIHRoZSBicm93c2VyIG9wZW5lZCBzdWNjZXNzZnVsbHkuXG4gKlxuICogQ2FsbGVkIGJ5IHRoZSBgb3Blbl9wb3J0Zm9saW9fYnJvd3NlcmAgTUNQLUFRTCBvcGVyYXRpb24gKElzc3VlICM3NzQpLlxuICpcbiAqIEBwYXJhbSBwb3J0Zm9saW9EaXIgLSBQYXRoIHRvIHRoZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChlLmcuLCB+Ly5kb2xsaG91c2UvcG9ydGZvbGlvKVxuICogQHBhcmFtIHBvcnQgLSBQb3J0IHRvIGJpbmQgdG8gKGRlZmF1bHQ6IDM5MzkpXG4gKiBAcmV0dXJucyBSZXN1bHQgd2l0aCBVUkwsIHNlcnZlciBzdGF0dXMsIGFuZCBicm93c2VyIG9wZW4gc3RhdHVzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUG9ydGZvbGlvQnJvd3Nlcihwb3J0Zm9saW9EaXI6IHN0cmluZywgcG9ydD86IG51bWJlciwgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXIsIHRhYj86IHN0cmluZyk6IFByb21pc2U8QnJvd3Nlck9wZW5SZXN1bHQ+IHtcbiAgY29uc3QgdGFyZ2V0UG9ydCA9IHBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBiYXNlVXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHt0YXJnZXRQb3J0fWA7XG4gIGNvbnN0IHVybCA9IHRhYiA/IGAke2Jhc2VVcmx9LyMke3RhYn1gIDogYmFzZVVybDtcbiAgY29uc3QgYWxyZWFkeVJ1bm5pbmcgPSBzZXJ2ZXJSdW5uaW5nO1xuXG4gIGlmICghc2VydmVyUnVubmluZykge1xuICAgIGF3YWl0IHN0YXJ0V2ViU2VydmVyKHtcbiAgICAgIHBvcnRmb2xpb0RpcixcbiAgICAgIHBvcnQ6IHRhcmdldFBvcnQsXG4gICAgICBvcGVuQnJvd3NlcjogZmFsc2UsIC8vIFdlJ2xsIG9wZW4gbWFudWFsbHkgYmVsb3cgdG8gY2FwdHVyZSB0aGUgcmVzdWx0XG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgYnJvd3NlclJlc3VsdCA9IGF3YWl0IG9wZW5JbkJyb3dzZXIodXJsKTtcblxuICByZXR1cm4ge1xuICAgIHVybCxcbiAgICBhbHJlYWR5UnVubmluZyxcbiAgICBicm93c2VyT3BlbmVkOiBicm93c2VyUmVzdWx0LnN1Y2Nlc3MsXG4gICAgLi4uKGJyb3dzZXJSZXN1bHQuZXJyb3IgPyB7IHdhcm5pbmc6IGBCcm93c2VyIGNvdWxkIG5vdCBiZSBvcGVuZWQgYXV0b21hdGljYWxseTogJHticm93c2VyUmVzdWx0LmVycm9yfS4gT3BlbiAke3VybH0gbWFudWFsbHkuYCB9IDoge30pLFxuICB9O1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dollhousemcp/mcp-server",
3
- "version": "2.0.6",
3
+ "version": "2.0.8",
4
4
  "description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.DollhouseMCP/mcp-server",
4
4
  "title": "DollhouseMCP",
5
5
  "description": "OSS to create Personas, Skills, Templates, Agents, and Memories to customize your AI experience.",
6
- "version": "2.0.6",
6
+ "version": "2.0.8",
7
7
  "homepage": "https://dollhousemcp.com",
8
8
  "repository": {
9
9
  "type": "git",
@@ -29,7 +29,7 @@
29
29
  {
30
30
  "registryType": "npm",
31
31
  "identifier": "@dollhousemcp/mcp-server",
32
- "version": "2.0.6",
32
+ "version": "2.0.8",
33
33
  "transport": {
34
34
  "type": "stdio"
35
35
  }