@mnaoumov/typescript-dev-toolkit 3.0.0 → 3.2.0
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/assets/biome.json +49 -0
- package/assets/prettier.json +13 -0
- package/dist/lib/cjs/docs-site/docs-links.cjs +6 -3
- package/dist/lib/cjs/docs-site/docs-site-commands.cjs +24 -5
- package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +8 -3
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +4 -1
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +17 -0
- package/dist/lib/cjs/docs-site/index.cjs +4 -1
- package/dist/lib/cjs/docs-site/index.d.cts +1 -0
- package/dist/lib/cjs/docs-site/link-check.cjs +88 -11
- package/dist/lib/cjs/docs-site/link-check.d.cts +91 -2
- package/dist/lib/cjs/docs-site/repo-homepage.cjs +108 -0
- package/dist/lib/cjs/docs-site/repo-homepage.d.cts +50 -0
- package/dist/lib/cjs/formatters/auto.cjs +59 -0
- package/dist/lib/cjs/formatters/auto.d.cts +51 -0
- package/dist/lib/cjs/formatters/biome.cjs +121 -0
- package/dist/lib/cjs/formatters/biome.d.cts +69 -0
- package/dist/lib/cjs/formatters/index.cjs +12 -3
- package/dist/lib/cjs/formatters/index.d.cts +3 -0
- package/dist/lib/cjs/formatters/prettier.cjs +93 -0
- package/dist/lib/cjs/formatters/prettier.d.cts +56 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/linters/auto.cjs +52 -0
- package/dist/lib/cjs/linters/auto.d.cts +49 -0
- package/dist/lib/cjs/linters/biome.cjs +50 -0
- package/dist/lib/cjs/linters/biome.d.cts +36 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +1 -1
- package/dist/lib/cjs/linters/eslint.cjs +15 -14
- package/dist/lib/cjs/linters/eslint.d.cts +6 -0
- package/dist/lib/cjs/linters/index.cjs +7 -1
- package/dist/lib/cjs/linters/index.d.cts +2 -0
- package/dist/lib/cjs/nano-staged-config.cjs +33 -16
- package/dist/lib/cjs/nano-staged-config.d.cts +6 -0
- package/dist/lib/cjs/repo-paths.cjs +3 -1
- package/dist/lib/cjs/repo-paths.d.cts +8 -0
- package/dist/lib/cjs/shared-config-files.cjs +68 -0
- package/dist/lib/cjs/shared-config-files.d.cts +29 -0
- package/dist/lib/cjs/test-runners/auto.cjs +83 -0
- package/dist/lib/cjs/test-runners/auto.d.cts +82 -0
- package/dist/lib/cjs/test-runners/index.cjs +10 -1
- package/dist/lib/cjs/test-runners/index.d.cts +3 -0
- package/dist/lib/cjs/test-runners/jest-config.cjs +86 -0
- package/dist/lib/cjs/test-runners/jest-config.d.cts +71 -0
- package/dist/lib/cjs/test-runners/jest.cjs +111 -0
- package/dist/lib/cjs/test-runners/jest.d.cts +77 -0
- package/dist/lib/esm/docs-site/docs-links.mjs +7 -3
- package/dist/lib/esm/docs-site/docs-site-commands.d.mts +8 -3
- package/dist/lib/esm/docs-site/docs-site-commands.mjs +14 -5
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +17 -0
- package/dist/lib/esm/docs-site/docs-site-config.mjs +4 -1
- package/dist/lib/esm/docs-site/index.d.mts +1 -0
- package/dist/lib/esm/docs-site/index.mjs +3 -1
- package/dist/lib/esm/docs-site/link-check.d.mts +91 -2
- package/dist/lib/esm/docs-site/link-check.mjs +83 -11
- package/dist/lib/esm/docs-site/repo-homepage.d.mts +50 -0
- package/dist/lib/esm/docs-site/repo-homepage.mjs +84 -0
- package/dist/lib/esm/formatters/auto.d.mts +51 -0
- package/dist/lib/esm/formatters/auto.mjs +40 -0
- package/dist/lib/esm/formatters/biome.d.mts +69 -0
- package/dist/lib/esm/formatters/biome.mjs +107 -0
- package/dist/lib/esm/formatters/index.d.mts +3 -0
- package/dist/lib/esm/formatters/index.mjs +8 -2
- package/dist/lib/esm/formatters/prettier.d.mts +56 -0
- package/dist/lib/esm/formatters/prettier.mjs +75 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/linters/auto.d.mts +49 -0
- package/dist/lib/esm/linters/auto.mjs +30 -0
- package/dist/lib/esm/linters/biome.d.mts +36 -0
- package/dist/lib/esm/linters/biome.mjs +29 -0
- package/dist/lib/esm/linters/eslint-config.mjs +1 -1
- package/dist/lib/esm/linters/eslint.d.mts +6 -0
- package/dist/lib/esm/linters/eslint.mjs +14 -14
- package/dist/lib/esm/linters/index.d.mts +2 -0
- package/dist/lib/esm/linters/index.mjs +5 -1
- package/dist/lib/esm/nano-staged-config.d.mts +6 -0
- package/dist/lib/esm/nano-staged-config.mjs +33 -16
- package/dist/lib/esm/repo-paths.d.mts +8 -0
- package/dist/lib/esm/repo-paths.mjs +3 -1
- package/dist/lib/esm/shared-config-files.d.mts +29 -0
- package/dist/lib/esm/shared-config-files.mjs +36 -0
- package/dist/lib/esm/test-runners/auto.d.mts +82 -0
- package/dist/lib/esm/test-runners/auto.mjs +64 -0
- package/dist/lib/esm/test-runners/index.d.mts +3 -0
- package/dist/lib/esm/test-runners/index.mjs +7 -1
- package/dist/lib/esm/test-runners/jest-config.d.mts +71 -0
- package/dist/lib/esm/test-runners/jest-config.mjs +58 -0
- package/dist/lib/esm/test-runners/jest.d.mts +77 -0
- package/dist/lib/esm/test-runners/jest.mjs +75 -0
- package/docs-site/repo-homepage/package.json +6 -0
- package/formatters/auto/package.json +6 -0
- package/formatters/biome/package.json +6 -0
- package/formatters/prettier/package.json +6 -0
- package/linters/auto/package.json +6 -0
- package/linters/biome/package.json +6 -0
- package/package.json +21 -1
- package/test-runners/auto/package.json +6 -0
- package/test-runners/jest/package.json +6 -0
- package/test-runners/jest-config/package.json +6 -0
|
@@ -1040,4 +1040,4 @@ export {
|
|
|
1040
1040
|
getGlobalIgnoreConfigs,
|
|
1041
1041
|
getTypeScriptEslintConfigs
|
|
1042
1042
|
};
|
|
1043
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGhhbGYgb2YgdGhlIHNoYXJlZCBFU0xpbnQgY29uZmlndXJhdGlvbiwgZm9yIGFueSBUeXBlU2NyaXB0IHByb2plY3QuXG4gKlxuICogSXQgaW50ZWdyYXRlcyBFU0xpbnQncyBvd24gcmVjb21tZW5kZWQgcnVsZXMsIGB0eXBlc2NyaXB0LWVzbGludGAsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4taW1wb3J0LXhgIHdpdGggaXRzIFR5cGVTY3JpcHQgcmVzb2x2ZXIsIGBlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3RgLCBgZXNsaW50LXBsdWdpbi11bmljb3JuYCxcbiAqIGBlc2xpbnQtcGx1Z2luLW5gIGFuZCB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gb25lIGxpdmVzIGluXG4gKiBgQG1uYW91bW92L29ic2lkaWFuLWRldi10b29sa2l0YCkgYnVpbGRzIG9uIHtAbGluayBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc30gYW5kIGFkZHMgb25seSB3aGF0IGlzIHNwZWNpZmljIHRvIGl0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWNsYXJhdGl2ZSBFU0xpbnQgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBFU0xpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gJ2VzbGludCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5pbXBvcnQgY29tbWVudHNDb25maWdzIGZyb20gJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1wbHVnaW4tZXNsaW50LWNvbW1lbnRzL2NvbmZpZ3MnO1xuaW1wb3J0IHsgaW5jbHVkZUlnbm9yZUZpbGUgfSBmcm9tICdAZXNsaW50L2NvbmZpZy1oZWxwZXJzJztcbmltcG9ydCBlc2xpbnQgZnJvbSAnQGVzbGludC9qcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgc3R5bGlzdGljIGZyb20gJ0BzdHlsaXN0aWMvZXNsaW50LXBsdWdpbic7XG5pbXBvcnQgeyBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIgfSBmcm9tICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZmxhdENvbmZpZ3MgYXMgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1pbXBvcnQteCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IG5vZGVQbHVnaW4gZnJvbSAnZXNsaW50LXBsdWdpbi1uJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQge1xuICBkZWZpbmVDb25maWcsXG4gIGdsb2JhbElnbm9yZXNcbn0gZnJvbSAnZXNsaW50L2NvbmZpZyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHRzZXNsaW50IGZyb20gJ3R5cGVzY3JpcHQtZXNsaW50JztcblxuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7XG4gIElOX0hPVVNFX0VTTElOVF9QTFVHSU5fTkFNRSxcbiAgaW5Ib3VzZUVzbGludFBsdWdpblxufSBmcm9tICcuL2VzbGludC1ydWxlcy9pbi1ob3VzZS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgQ0xBVURFX1dPUktUUkVFU19JR05PUkVfR0xPQiB9IGZyb20gJy4vbGludC1pZ25vcmVzLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db25maWdzPzogKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpID0+IExpbnRlci5Db25maWdbXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdENvbnRleHQ/OiAoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9sZGVzdCBOb2RlIHZlcnNpb24gc2hpcHBlZCBzb3VyY2UgaGFzIHRvIHJ1biBvbiwgYXMgYSBzZW12ZXIgcmFuZ2U6IGEgbGlicmFyeSB0aGF0IGFsc28gcnVucyBpbnNpZGUgYW5cbiAgICogb2xkZXIgcnVudGltZSB0aGFuIGl0cyBvd24gdG9vbGluZyAoYW4gT2JzaWRpYW4gcmVuZGVyZXIsIHNheSkgbmFtZXMgdGhhdCBydW50aW1lJ3MgTm9kZSBoZXJlLiBXaGVuIG9taXR0ZWQsXG4gICAqIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgTm9kZSB2ZXJzaW9uIHNoaXBwZWQgc291cmNlIGhhcyB0byBydW4gb24sIGFzIGEgc2VtdmVyIHJhbmdlLiBXaGVuIG9taXR0ZWQsIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzXG4gICAqIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdldE5vZGVDb21wYXRDb25maWdzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dDtcbiAgcmVhZG9ubHkgbWluaW11bU5vZGVWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXJzIGhvbGRpbmcgdGhlIHByb2plY3QncyBzb3VyY2VzLCBieSBkZWZhdWx0IGBzcmNgIGFsb25lLiBBIHdvcmtzcGFjZSB3aG9zZSBwYWNrYWdlcyBlYWNoIGhhdmUgdGhlaXIgb3duXG4gICAqIGBzcmNgIGFkZHMgdGhlbSBoZXJlLCBzbyB0aGUgcnVsZXMga2V5ZWQgb24gYSBmaWxlJ3MgbmFtZSBpbnNpZGUgYSBzb3VyY2UgZm9sZGVyIHJlYWNoIHRob3NlIHBhY2thZ2VzIHRvby5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VGb2xkZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGwgZmlsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbGwgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWxsRmlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50ZXN0RmlsZXMsIC4uLnRoaXMuc2NyaXB0RmlsZXMsIC4uLnRoaXMucm9vdENvbmZpZ0ZpbGVzLCAuLi50aGlzLnNvdXJjZUZpbGVzXTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbnRleHQgb2YgYSBwcm9qZWN0IGxhaWQgb3V0IHRoZSBjb252ZW50aW9uYWwgd2F5OiBzb3VyY2VzIHVuZGVyIGBzcmNgLCBzY3JpcHRzIHVuZGVyIGBzY3JpcHRzYCwgdGVzdHNcbiAqIGJlc2lkZSB0aGUgc291cmNlcyBvciB1bmRlciBgX190ZXN0c19fYCwgYW5kIHRoZSBjb21taXRsaW50LCBFU0xpbnQgYW5kIFZpdGVzdCBjb25maWd1cmF0aW9ucyBhdCB0aGUgcm9vdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk6IEVzbGludENvbmZpZ0NvbnRleHQge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEVzbGludENvbmZpZ0NvbnRleHQoKTtcbiAgY29udGV4dC5zb3VyY2VGb2xkZXJzLnB1c2goUmVwb1BhdGhzLlNyYyk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgUmVwb1BhdGhzLkNvbW1pdGxpbnRDb25maWdUcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzLFxuICAgIFJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihSZXBvUGF0aHMuU2NyaXB0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuU3JjLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKFJlcG9QYXRocy5UZXN0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuTW9ja3MsIFJlcG9QYXRocy5BbnlQYXRoLCBSZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUZXN0VHMpLFxuICAgIC8qXG4gICAgICogQSBidWlsZC1zY3JpcHQgdGVzdCBpcyBhIFRFU1QsIGFuZCB0aGlzIGNvbnZlbnRpb24gcHV0cyBpdCBpbiBhIGAqLnRlc3QudHNgIHVuZGVyIGBzY3JpcHRzL2AgLS0gYmVzaWRlIHRoZVxuICAgICAqIHNjcmlwdCBpdCBjb3ZlcnMgcmF0aGVyIHRoYW4gdW5kZXIgYHNyYy9gLiBXaXRob3V0IHRoaXMgZ2xvYiBpdCBtYXRjaGVkIGBzY3JpcHRGaWxlc2AgYWxvbmUsIHNvIGV2ZXJ5IHJlbGF4YXRpb25cbiAgICAgKiB0aGF0IGtleXMgb24gYGNvbnRleHQudGVzdEZpbGVzYCBtaXNzZWQgaXQ6IGBuby1tYWdpYy1udW1iZXJzYCBmaXJlZCBvbiBhIHN1aXRlIHdob3NlIHdob2xlIHN1YmplY3QgaXMgcmVjb3JkZWRcbiAgICAgKiBudW1iZXJzLCBhbmQgYHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nYCBvbiB0aGUgcGVyLXN1aXRlIGZpeHR1cmUgZmFjdG9yaWVzIHRoZSBibG9jayBhdCB0aGUgYm90dG9tXG4gICAgICogb2YgYGdldFVuaWNvcm5Db25maWdzYCBzYXlzIHRlc3RzIGV4aXN0IHRvIGFsbG93LlxuICAgICAqXG4gICAgICogVGhlIGZpbGUgbm93IG1hdGNoZXMgQk9USCBsaXN0cywgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvdmVybGFwIHRvIHJlc29sdmU6IGV2ZXJ5dGhpbmcgc2NvcGVkIHRvXG4gICAgICogYGNvbnRleHQuc2NyaXB0RmlsZXNgIG9ubHkgdHVybnMgcnVsZXMgT0ZGIChgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgLCBgdW5pY29ybi9uby1wcm9jZXNzLWV4aXRgKSwgYm90aCBvZlxuICAgICAqIHdoaWNoIGEgc2NyaXB0IHRlc3Qgd2FudHMgYXMgbXVjaCBhcyB0aGUgc2NyaXB0IGRvZXMsIHNvIHRoZSB0d28gc2V0cyBjb21wb3NlIGluc3RlYWQgb2YgY29tcGV0aW5nLiBLZWVwIGl0IHRoYXRcbiAgICAgKiB3YXkgLS0gYSBydWxlIHR1cm5lZCBPTiBmb3IgYHNjcmlwdEZpbGVzYCB3b3VsZCBsYW5kIG9uIHRoZXNlIGZpbGVzIHRvbywgYW5kIGZsYXQtY29uZmlnIG9yZGVyLCBub3QgaW50ZW50LFxuICAgICAqIHdvdWxkIGRlY2lkZSB3aGljaCBzaWRlIHdvbi5cbiAgICAgKi9cbiAgICBqb2luKFJlcG9QYXRocy5TY3JpcHRzLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRlc3RUcylcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbnMgb2YgYSBnZW5lcmljIFR5cGVTY3JpcHQgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIG9wdGlvbnMuZWRpdENvbnRleHQ/Lihjb250ZXh0KTtcbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpLFxuICAgIC4uLmdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICAuLi4ob3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW1Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gfSlcbiAgICB9KSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb25zIG9mIEVTTGludCdzIG93biBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgcmVhZHMgaXQgdG8gbGVhcm4gd2hpY2ggY29yZSBydWxlcyB0aGlzXG4gKiBjb25maWd1cmF0aW9uIHNldHMgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW2VzbGludC5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnYWNjZXNzb3ItcGFpcnMnOiAnZXJyb3InLFxuICAgICAgICAnYXJyYXktY2FsbGJhY2stcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhbWVsY2FzZSc6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJlcG9ydHMgcGVyIGNvbW1lbnQgVE9LRU4sIHNvIGV2ZXJ5IGNvbnRpbnVhdGlvbiBsaW5lIG9mIGEgd3JhcHBlZCBgLy9gIGNvbW1lbnQgaXMgaXRzIG93biB0b2tlblxuICAgICAgICAgKiB0aGF0IHdvdWxkIGhhdmUgdG8gc3RhcnQgd2l0aCBhIGNhcGl0YWwg4oCUIHdoaWNoIGlzIGhvdyBwcm9zZSBlbmRzIHVwIHdpdGggY2FwaXRhbHMgbWlkLXNlbnRlbmNlLlxuICAgICAgICAgKiBgaWdub3JlQ29uc2VjdXRpdmVDb21tZW50c2AgZXhlbXB0cyBhIGxpbmUgY29tbWVudCB0aGF0IGRpcmVjdGx5IGZvbGxvd3MgYW5vdGhlciBvbmUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlXG4gICAgICAgICAqIHNoYXBlIG9mIGEgd3JhcHBlZCBibG9jaywgd2hpbGUgc3RpbGwgaG9sZGluZyBpdHMgRklSU1QgbGluZSB0byBhIGNhcGl0YWwuIEJsb2NrIGNvbW1lbnRzIG5lZWQgbm8gc3VjaFxuICAgICAgICAgKiBvcHRpb246IGEgYmxvY2sgY29tbWVudCBpcyBhIHNpbmdsZSB0b2tlbiBob3dldmVyIG1hbnkgbGluZXMgaXQgc3BhbnMuXG4gICAgICAgICAqIGBpZ25vcmVQYXR0ZXJuYCBjb3ZlcnMgdGhlIGhhbGYgdGhhdCBsZWF2ZXMgYmVoaW5kOiBhIGNvbW1lbnQgd2hvc2UgRklSU1Qgd29yZCBpcyBhIGNhbWVsQ2FzZSBpZGVudGlmaWVyIGlzXG4gICAgICAgICAqIGV4ZW1wdCwgc28gYSBjb21tZW50IHRoYXQgb3BlbnMgYnkgbmFtaW5nIGEgc3ltYm9sIGtlZXBzIHRoZSBuYW1lIGEgcmVhZGVyIGNhbiBncmVwIGluc3RlYWQgb2YgYSBQYXNjYWxDYXNlXG4gICAgICAgICAqIG9uZSB0aGF0IGV4aXN0cyBub3doZXJlLiBUaGUgcnVsZSBhbmNob3JzIHRoZSBwYXR0ZXJuIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCBhbmQgYFthLXpBLVowLTldYCBtYXRjaGVzXG4gICAgICAgICAqIG5vIHdoaXRlc3BhY2UsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggdGhhdCBmaXJzdCB3b3JkIOKAlCBvcmRpbmFyeSBsb3dlcmNhc2UgcHJvc2Ugc3RheXMgcmVwb3J0ZWQuIEJvdGhcbiAgICAgICAgICogb3B0aW9uIGJhZ3MgbmVlZCBpdCwgYW5kIGBibG9ja2Aga2VlcHMgaXRzIGB2OGAgZXhlbXB0aW9uIGJ5IGFsdGVybmF0aW9uIHJhdGhlciB0aGFuIGxvc2luZyBpdC5cbiAgICAgICAgICovXG4gICAgICAgICdjYXBpdGFsaXplZC1jb21tZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OHxbYS16XVthLXpBLVowLTldKltBLVpdJyB9LFxuICAgICAgICAgICAgbGluZTogeyBpZ25vcmVDb25zZWN1dGl2ZUNvbW1lbnRzOiB0cnVlLCBpZ25vcmVQYXR0ZXJuOiAnW2Etel1bYS16QS1aMC05XSpbQS1aXScgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgaWdub3JlczogZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgbmFtZXMsIHBsdXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdpdElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvKlxuICAgICAqIE9uIHRvcCBvZiBgLmdpdGlnbm9yZWAsIG5vdCBpbnN0ZWFkIG9mIGl0OiBnaXQgZXhjbHVkZXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIgdGhyb3VnaFxuICAgICAqIGAuZ2l0L2luZm8vZXhjbHVkZWAsIHdoaWNoIGBpbmNsdWRlSWdub3JlRmlsZWAgYWJvdmUgZG9lcyBub3QgcmVhZC4gU2VlIGBsaW50LWlnbm9yZXMudHNgLlxuICAgICAqL1xuICAgIGdsb2JhbElnbm9yZXMoW0NMQVVERV9XT1JLVFJFRVNfSUdOT1JFX0dMT0JdLCAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9jbGF1ZGUtd29ya3RyZWVzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2VuZXJpYyBsYXllcnMgb2YgdGhlIHNoYXJlZCBjb25maWd1cmF0aW9uLCB3aXRob3V0IHRoZSBnbG9iYWwgaWdub3Jlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyhwYXJhbXM6IEdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzUGFyYW1zKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgeyBjb250ZXh0IH0gPSBwYXJhbXM7XG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0RXNsaW50Q29yZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbkhvdXNlUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyh7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbjogcGFyYW1zLm1pbmltdW1Ob2RlVmVyc2lvbiB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb21tZW50c0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcmVjb21tZW5kZWRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICBleHRlbmRzOiBbY29tbWVudHNDb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LWNvbW1lbnRzL3JlcXVpcmUtZGVzY3JpcHRpb24nOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0LXgvcmVzb2x2ZXItbmV4dCc6IFtcbiAgICAgICAgICBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIoe1xuICAgICAgICAgICAgYWx3YXlzVHJ5VHlwZXM6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0SWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihnZXRSb290Rm9sZGVyKCkgPz8gJycsICcuZ2l0aWdub3JlJyk7XG4gIHJldHVybiBleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpID8gW2luY2x1ZGVJZ25vcmVGaWxlKGdpdGlnbm9yZVBhdGgpXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQSB0ZXN0IHJ1bnMgdW5kZXIgdGhlIHRlc3QgcnVubmVyIGluIE5vZGUgYW5kIGlzIG5ldmVyIGJ1bmRsZWQgaW50byBhbnl0aGluZyB0aGF0IHNoaXBzLlxuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1kZWZhdWx0LWV4cG9ydCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5Ib3VzZVBsdWdpbkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIFtJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUVdOiBpbkhvdXNlRXNsaW50UGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIE1lYXN1cmVkIG92ZXIgMzIgcGx1Z2lucyBidWlsdCBvbiB0aGlzIGNvbmZpZyBiZWZvcmUgaXQgd2FzIHR1cm5lZCBvbiAoMjAyNi0wOS0yNCk6IDI5IGhhZCBubyBmaW5kaW5nLFxuICAgICAgICAgKiB0aGUgb3RoZXIgdGhyZWUgaGFkIDggYmV0d2VlbiB0aGVtLCBldmVyeSBvbmUgYSBnZW51aW5lbHkgZGVhZCBsaW5rLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbm9vcC1hc3luYyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZXF1aXJlLXN1cGVyLWNhbGwnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb21wYXRDb25maWdzKHBhcmFtczogR2V0Tm9kZUNvbXBhdENvbmZpZ3NQYXJhbXMpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCB7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbiB9ID0gcGFyYW1zO1xuICBjb25zdCB2ZXJzaW9uT3B0aW9ucyA9IG1pbmltdW1Ob2RlVmVyc2lvbiA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZlcnNpb246IG1pbmltdW1Ob2RlVmVyc2lvbiB9O1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzLFxuICAgICAgaWdub3JlczogW1xuICAgICAgICAuLi5jb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgICAgLy8gRGV2LW9ubHkgdG9vbGluZyAoYnVpbGQsIGxpbnQsIHZlcnNpb24pIHJ1bnMgdmlhIGBqaXRpYCBpbiB0aGUgZGV2ZWxvcGVyJ3MgTm9kZSBlbnZpcm9ubWVudCBhbmQgbmV2ZXIgc2hpcHMsIHNvIHRoZSBzaGlwcGVkIHNvdXJjZSdzIE5vZGUgZmxvb3IgZG9lcyBub3QgYXBwbHkgdG8gaXQuXG4gICAgICAgIC4uLmNvbnRleHQuc2NyaXB0RmlsZXNcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG46IG5vZGVQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHZlcnNpb25PcHRpb25zXG4gICAgICAgIF0sXG4gICAgICAgICduL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBgQmxvYmAgYW5kIGBGaWxlYCBhcmUgRE9NIHdlYiBnbG9iYWxzIHByZXNlbnQgaW4gZXZlcnkgc3VwcG9ydGVkIGJyb3dzZXIgZW5naW5lLCBidXQgdGhlIHJ1bGUgYWxzbyBrbm93cyB0aGVtIGFzIE5vZGUncyBleHBlcmltZW50YWwgYnVpbHRpbnMgYW5kIGNhbm5vdCB0ZWxsIHdoaWNoIGlzIG1lYW50LiBJZ25vcmUgdGhlbSBnbG9iYWxseTsgZ2VudWluZWx5IG5ld2VyIEFQSXMgKGUuZy4gYEFib3J0U2lnbmFsLmFueWApIHN0YXkgZmxhZ2dlZC5cbiAgICAgICAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAnRmlsZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAuLi52ZXJzaW9uT3B0aW9uc1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFt7XG4gICAgZXh0ZW5kczogW3BlcmZlY3Rpb25pc3RDb25maWdzWydyZWNvbW1lbmRlZC1hbHBoYWJldGljYWwnXV0sXG4gICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKVxuICB9XSk7XG59XG5cbi8qKlxuICogTGF5b3V0IGJlbG9uZ3MgdG8gZHByaW50LiBPbmx5IHRoZSBgQHN0eWxpc3RpY2AgcnVsZXMgZHByaW50IGNhbm5vdCBleHByZXNzIGFyZSBrZXB0LCBlYWNoIHZlcmlmaWVkIGJ5IGZvcm1hdHRpbmcgYVxuICogdmlvbGF0aW5nIHByb2JlIHdpdGggdGhlIHNoYXJlZCBgZHByaW50Lmpzb25gIGFuZCBsaW50aW5nIHRoZSByZXN1bHQ6IHRoZSBydWxlIHN0aWxsIHJlcG9ydHMgdGhlcmUuIEV2ZXJ5IG90aGVyXG4gKiBydWxlIG9mIGBzdHlsaXN0aWMuY29uZmlncy5yZWNvbW1lbmRlZGAgd2FzIGRyb3BwZWQsIGJlY2F1c2UgZHByaW50IGZpeGVzIGl0IGFscmVhZHksIG9yIGJlY2F1c2UgaXQgZm91Z2h0IGRwcmludFxuICogKGB3cmFwLWlpZmVgLCB3aG9zZSBwYXJlbnRoZXNlcyBkcHJpbnQgc3RyaXBzLCBganN4LXF1b3Rlc2AgYWdhaW5zdCBgcXVvdGVTdHlsZWAsIGBvcGVyYXRvci1saW5lYnJlYWtgLCBgaW5kZW50YCkuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUge0BsaW5rIEVzbGludENvbmZpZ0NvbnRleHR9LlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3MuXG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdAc3R5bGlzdGljJzogc3R5bGlzdGljXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLy8gVGhlIGRwcmludCBgYXJyb3dGdW5jdGlvbi51c2VQYXJlbnRoZXNlc2AgZGVmYXVsdCwgYG1haW50YWluYCwga2VlcHMgYHggPT4geGAuXG4gICAgICAgICdAc3R5bGlzdGljL2Fycm93LXBhcmVucyc6IFsnZXJyb3InLCAnYWx3YXlzJ10sXG4gICAgICAgIC8vIE5vdCBsYXlvdXQ6IGl0IHJlbW92ZXMgb3IgYWRkcyB0aGUgYnJhY2VzIHRoZW1zZWx2ZXMsIHdoaWNoIGRwcmludCBuZXZlciBkb2VzLlxuICAgICAgICAnQHN0eWxpc3RpYy9qc3gtY3VybHktYnJhY2UtcHJlc2VuY2UnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbjogJ25ldmVyJyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBwcm9wRWxlbWVudFZhbHVlc2AgaXMgdGhlIHJ1bGUncyBvd24gb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBwcm9wRWxlbWVudFZhbHVlczogJ2Fsd2F5cycsXG4gICAgICAgICAgICBwcm9wczogJ25ldmVyJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIga2VlcHMgYmxhbmsgbGluZXMgYXMgd3JpdHRlbiBhbmQgbmV2ZXIgaW5zZXJ0cyBvbmUuXG4gICAgICAgICdAc3R5bGlzdGljL2xpbmVzLWJldHdlZW4tY2xhc3MtbWVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4Y2VwdEFmdGVyT3ZlcmxvYWQ6IHRydWUsXG4gICAgICAgICAgICBleGNlcHRBZnRlclNpbmdsZUxpbmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgZm9ybWF0dGVyIGtlZXBzIGEgbnVtZXJpYyBsaXRlcmFsJ3MgdGV4dCwgc28gYC41YCBhbmQgYDIuYCBzdGF5LlxuICAgICAgICAnQHN0eWxpc3RpYy9uby1mbG9hdGluZy1kZWNpbWFsJzogJ2Vycm9yJyxcbiAgICAgICAgLy8gTm90IGxheW91dDogaXQgYXNrcyBmb3IgcGFyZW50aGVzZXMgdGhhdCBjaGFuZ2UgaG93IHRoZSBleHByZXNzaW9uIHJlYWRzLCB3aGljaCBkcHJpbnQgbmV2ZXIgYWRkcy5cbiAgICAgICAgJ0BzdHlsaXN0aWMvbm8tbWl4ZWQtb3BlcmF0b3JzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dTYW1lUHJlY2VkZW5jZTogdHJ1ZSxcbiAgICAgICAgICAgIGdyb3VwczogW1xuICAgICAgICAgICAgICBbJz09JywgJyE9JywgJz09PScsICchPT0nLCAnPicsICc+PScsICc8JywgJzw9J10sXG4gICAgICAgICAgICAgIFsnJiYnLCAnfHwnXSxcbiAgICAgICAgICAgICAgWydpbicsICdpbnN0YW5jZW9mJ11cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgZm9ybWF0dGVyIHJlcGxhY2VzIHRhYiBpbmRlbnRhdGlvbiBidXQgbGVhdmVzIGEgdGFiIGluc2lkZSBhIGNvbW1lbnQuXG4gICAgICAgICdAc3R5bGlzdGljL25vLXRhYnMnOiAnZXJyb3InLFxuICAgICAgICAvLyBUaGUgZHByaW50IGBxdW90ZVByb3BzYCBkZWZhdWx0IGlzIGBwcmVzZXJ2ZWAuXG4gICAgICAgICdAc3R5bGlzdGljL3F1b3RlLXByb3BzJzogWydlcnJvcicsICdjb25zaXN0ZW50LWFzLW5lZWRlZCddLFxuICAgICAgICAvLyBUaGUgZHByaW50IGBxdW90ZVN0eWxlYCBjb3ZlcnMgc3RyaW5nIGxpdGVyYWxzIG9ubHksIGFuZCBsZWF2ZXMgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggbm8gc3Vic3RpdHV0aW9uLlxuICAgICAgICAnQHN0eWxpc3RpYy9xdW90ZXMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd1RlbXBsYXRlTGl0ZXJhbHM6ICduZXZlcidcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgZm9ybWF0dGVyIGFkZHMgdGhlIHNwYWNlIGFmdGVyIGAvL2AgYnV0IG5vdCBhZnRlciBgLypgIG9yIGJlZm9yZSBgKi9gLlxuICAgICAgICAnQHN0eWxpc3RpYy9zcGFjZWQtY29tbWVudCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgIGJhbGFuY2VkOiB0cnVlLFxuICAgICAgICAgICAgICBleGNlcHRpb25zOiBbJyonXSxcbiAgICAgICAgICAgICAgbWFya2VyczogWychJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgIGV4Y2VwdGlvbnM6IFsnLycsICcjJ10sXG4gICAgICAgICAgICAgIG1hcmtlcnM6IFsnLyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3RyaWN0VHlwZUNoZWNrZWQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWRcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIGpzeDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvamVjdFNlcnZpY2U6IHRydWUsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHRzY29uZmlnUm9vdERpcmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHBhcnNlciBvcHRpb24uXG4gICAgICAgICAgdHNjb25maWdSb290RGlyOiBnZXRSb290Rm9sZGVyKCkgPz8gJydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5JzogJ2Vycm9yJyxcbiAgICAgICAgLy8gVGhlIHJ1bGUncyBvd24gYHByb3BlcnR5YCBkZWZhdWx0LCBzcGVsbGVkIGFzIGEgYmFyZSBzZXZlcml0eSBzbyBpdCBzdGF5cyB0aGUgcnVsZSdzIGRlZmF1bHQgcmF0aGVyIHRoYW4gYSBjb3B5IG9mIGl0LlxuICAgICAgICAvLyBEbyBOT1QgcGFzcyBgJ21ldGhvZCdgIGZvciB0aWRpbmVzczogdGhlIG1ldGhvZCBmb3JtIGtlZXBzIHBhcmFtZXRlcnMgYml2YXJpYW50LCBkcm9wcyBgcmVhZG9ubHlgICh0aGUgcnVsZSdzIG93biBmaXhlclxuICAgICAgICAvLyBtZXNzYWdlIHNheXMgc28pLCBhbmQgbWFrZXMgYEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZGAgZmlyZSBvbiBldmVyeSBmb3J3YXJkZWQgYmFnIG1lbWJlciwgd2hpY2ggaXMgd2hhdCB0aGVcbiAgICAgICAgLy8gYHRoaXM6IHZvaWRgIGJvaWxlcnBsYXRlIHVzZWQgdG8gcGF5IGZvci4gRG8gTk9UIGRlbGV0ZSB0aGUgbGluZSBlaXRoZXIgLSB0aGUgcnVsZSBpcyBpbiBubyBwcmVzZXQsIHNvIHRoYXQgdHVybnMgaXQgb2ZmLlxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L21ldGhvZC1zaWduYXR1cmUtc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzJzogWydlcnJvcicsIHtcbiAgICAgICAgICBjaGVja1RoZW5hYmxlczogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dBc1RoaXNQYXJhbWV0ZXI6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dlZE5hbWVzOiBbXG4gICAgICAgICAgICAndGhhdCdcbiAgICAgICAgICBdXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGFyZ3NgIGlzIGFuIEVTTGludCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnczogJ2FsbCcsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc0lnbm9yZVBhdHRlcm5gIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnM6ICdhbGwnLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGRlc3RydWN0dXJlZEFycmF5SWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGlnbm9yZVJlc3RTaWJsaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGB2YXJzSWdub3JlUGF0dGVybmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICB2YXJzSWdub3JlUGF0dGVybjogJ15fJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItcmVhZG9ubHknOiAnZXJyb3InXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2RvdC1ub3RhdGlvbic6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dQcml2YXRlQ2xhc3NQcm9wZXJ0eUFjY2VzczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1Byb3RlY3RlZENsYXNzUHJvcGVydHlBY2Nlc3M6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICB2ZXJzaW9uOiAnZGV0ZWN0J1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFt1bmljb3JuLmNvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZXNlIGVudHJpZXMgYXJlIG5vdCBhYmJyZXZpYXRpb25zIHRvIGJlIGV4cGFuZGVkIOKAlCB0aGV5IGFyZSBlc3RhYmxpc2hlZCB2b2NhYnVsYXJ5IGhlcmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJyYW5kOiBgZGV2YCwgYGxpYmAsIGB1dGlsYC9gdXRpbHNgIHNwZWxsIHRoZSBwcm9kdWN0J3Mgb3duIG5hbWUuIExlZnQgb24sIHRoZSBydWxlIHJld3JpdGVzXG4gICAgICAgICAqIGBSZXBvUGF0aHNgIHRvIGBPYnNpZGlhbkRldmVsb3BtZW50VXRpbGl0aWVzUmVwb1BhdGhzYCBhbmQgYGdldExpYkRlYnVnZ2VyYCB0b1xuICAgICAgICAgKiBgZ2V0TGlicmFyeURlYnVnZ2VyYCwgcmVuYW1pbmcgZXhwb3J0ZWQgQVBJIGFmdGVyIHRoZSBwYWNrYWdlIGl0IGJlbG9uZ3MgdG8uXG4gICAgICAgICAqXG4gICAgICAgICAqIENvbnZlbnRpb246IGBwYXJhbXNgIGlzIHRoZSBwYXJhbWV0ZXItYmFnIGNvbnZlbnRpb24sIGVuZm9yY2VkIGJ5XG4gICAgICAgICAqIGB0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2hgLCB3aGljaCByZXF1aXJlcyBiYWcgdHlwZXMgdG8gYmUgbmFtZWRcbiAgICAgICAgICogYDxPd25lcj5QYXJhbXNgIC8gYDxPd25lcj5PcHRpb25zYC4gRXhwYW5kaW5nIGl0IHRvIGBQYXJhbWV0ZXJzYCB3b3VsZCBwdXQgdGhlIHR3byBydWxlcyBpbiBkaXJlY3RcbiAgICAgICAgICogY29udHJhZGljdGlvbiBhbmQgYnJlYWsgMzAwKyBleHBvcnRlZCB0eXBlIG5hbWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZXNlcnZlZCB3b3JkczogYSBiYXJlIGBhcmdzYCwgYGZuYCwgYHN0cmAsIGBtb2RgIG9yIGBldnRgIGV4cGFuZHMgdG8gYW4gaWRlbnRpZmllciB0aGF0IGlzIGFscmVhZHlcbiAgICAgICAgICogdGFrZW4sIHNvIHRoZSBydWxlIHN1Z2dlc3RzIGAkYXJndW1lbnRzYCwgYCRmdW5jdGlvbmAsIGFuZCBzbyBvbi4gU3BlbGwgdGhvc2UgYCRhcmd1bWVudHNgIC9cbiAgICAgICAgICogYCRmdW5jdGlvbmAgaW5zdGVhZCDigJQgYSBgJGAgcHJlZml4IHJlYWRzIGJldHRlciB0aGFuIGEgdHJhaWxpbmcgdW5kZXJzY29yZS4gVGhpcyBpcyBkZWxpYmVyYXRlbHkgTk9UXG4gICAgICAgICAqIGNvbmZpZ3VyZWQgYXMgYSBjdXN0b20gcmVwbGFjZW1lbnQ6IHVuaWNvcm4gc3Vic3RpdHV0ZXMgYXQgdGhlIHdvcmQgbGV2ZWwgaW5zaWRlIGNvbXBvdW5kIG5hbWVzLCBzb1xuICAgICAgICAgKiByZWRpcmVjdGluZyB0aGUgd2hvbGUgZW50cnkgdHVybnMgYGFzeW5jRm5gIGludG8gYGFzeW5jJGZ1bmN0aW9uYC4gQ29tcG91bmRzIHdhbnQgdGhlIHBsYWluIGV4cGFuc2lvblxuICAgICAgICAgKiAoYGFzeW5jRnVuY3Rpb25gKTsgb25seSB0aGUgYmFyZSwgZ2VudWluZWx5LWNvbGxpZGluZyBpZGVudGlmaWVycyB0YWtlIHRoZSBgJGAgZm9ybS5cbiAgICAgICAgICpcbiAgICAgICAgICogRG9tYWluIHdvcmRzOiBgZG9jYC9gZG9jc2AsIGBlbnZgLCBgZGlzdGAgYW5kIGBzcmNgIGFyZSB0aGUgY2xlYXJlciBzcGVsbGluZyBpbiB0aGlzIGNvZGViYXNlLlxuICAgICAgICAgKiBFeHBhbmRpbmcgYGRvY2AgYWxzbyBwaWNrcyB0aGUgd3Jvbmcgd29yZCDigJQgdGhlIGBhcGktZG9jLSpgIG1vZHVsZXMgZ2VuZXJhdGUgQVBJICpkb2N1bWVudGF0aW9uKiwgbm90XG4gICAgICAgICAqIGRvY3VtZW50cy4gYHNyY2AgYWRkaXRpb25hbGx5IGNvcnJ1cHRzIGNvZGU6IHRoZSBmaXhlciByZW5hbWVzIHRoZSBgU3JjYCBtZW1iZXIgb2YgdGhlIGV4cG9ydGVkXG4gICAgICAgICAqIGBPYnNpZGlhblBsdWdpblJlcG9QYXRoc2AgLyBgUmVwb1BhdGhzYCBlbnVtcyB3aGlsZSBsZWF2aW5nIGV2ZXJ5IGAuU3JjYCByZWZlcmVuY2VcbiAgICAgICAgICogZGFuZ2xpbmcsIGJlY2F1c2UgYGNoZWNrUHJvcGVydGllc2AgZXhlbXB0cyBwcm9wZXJ0eSBhY2Nlc3NlcyBidXQgbm90IHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwb2ludCBhdC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBlbnRyaWVzIHByb3RlY3RzIHRoZXNlIHBlcm1hbmVudGx5OyBhbiBgYWxsb3dMaXN0YCB3b3VsZCBpbnN0ZWFkIG5lZWQgZXZlcnlcbiAgICAgICAgICogYWZmZWN0ZWQgaWRlbnRpZmllciBlbnVtZXJhdGVkIGJ5IGhhbmQgYW5kIHJlLWVudW1lcmF0ZWQgZm9yIGV2ZXJ5IG5ldyBvbmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5PVEU6IHRoaXMgcnVsZSdzIGF1dG9maXggaXMgTk9UIHJlZmVyZW5jZS1hd2FyZSBmb3IgZGVjbGFyYXRpb25zIHRoYXQgcGFydGljaXBhdGUgaW4gYSBjb250cmFjdCDigJRcbiAgICAgICAgICogZW51bSBtZW1iZXJzLCBpbnRlcmZhY2UgbWVtYmVycywgYW5kIFR5cGVTY3JpcHQgcGFyYW1ldGVyIHByb3BlcnRpZXMgKGBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5XG4gICAgICAgICAqIGVsOiBIVE1MRWxlbWVudClgKSBhcmUgcmVuYW1lZCB3aGlsZSBgdGhpcy5lbGAgYW5kIGBFbnVtLk1lbWJlcmAgcmVmZXJlbmNlcyBhcmUgbGVmdCBkYW5nbGluZy4gQXBwbHlcbiAgICAgICAgICogaXRzIHJlcG9ydHMgYnkgaGFuZDsgbmV2ZXIgcnVuIGAtLWZpeGAgb3ZlciBpdC5cbiAgICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgZ29vZCBydWxlLCBidXQgaXRzIGRlZmF1bHQgcHJlZml4ZXMgZm9yY2UgdW5ncmFtbWF0aWNhbCBuYW1lczogYG1lbWJlclBhZ2VFeGlzdHNgIHdvdWxkIGJlY29tZVxuICAgICAgICAgKiBgaXNNZW1iZXJQYWdlRXhpc3RzYCByYXRoZXIgdGhhbiBgZG9lc01lbWJlclBhZ2VFeGlzdGAuIFRoZXNlIGVudHJpZXMgRVhURU5EIHRoZSBkZWZhdWx0cyAoYGlzYCxcbiAgICAgICAgICogYGhhc2AsIGBjYW5gLCBgc2hvdWxkYCwgLi4uKSByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbSwgc28gYSBib29sZWFuIHdpdGggbm8gYm9vbGVhbi1yZWFkaW5nIHByZWZpeFxuICAgICAgICAgKiBhdCBhbGwgaXMgc3RpbGwgcmVqZWN0ZWQgLS0gdGhlIHJ1bGUganVzdCBzdG9wcyBpbnNpc3RpbmcgdGhlIHByZWZpeCBjb21lIGZyb20gYSBzaG9ydGVyIGxpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBsaXN0IGlzIGJpZGlyZWN0aW9uYWw6IGFkZGluZyBhIHByZWZpeCBhbHNvIGFzc2VydHMgdGhhdCBldmVyeXRoaW5nIG5hbWVkIHdpdGggaXQgSVMgYSBib29sZWFuLlxuICAgICAgICAgKiBgY2hlY2tgIGVhcm5zIGl0cyBwbGFjZSBvbiBib3RoIGNvdW50cywgc2luY2UgdGhlIGhhbmRmdWwgb2Ygbm9uLWJvb2xlYW4gYGNoZWNrKmAgbmFtZXMgaXQgc3VyZmFjZWRcbiAgICAgICAgICogd2VyZSBnZW51aW5lbHkgbWlzLW5hbWVkICh2b2lkIGZ1bmN0aW9ucyB0aGF0IHRocm93LCBhIHByb2JlIHJldHVybmluZyBhbiBIVFRQIHN0YXR1cykuIGB0ZXN0YCB3YXNcbiAgICAgICAgICogbWVhc3VyZWQgYW5kIHJlamVjdGVkOiBpdCB3b3VsZCB2YWxpZGF0ZSBmaXZlIGB0ZXN0KmAgbGluayBwcmVkaWNhdGVzIHRoYXQgcmVhZCBiZXR0ZXIgYXMgYGlzKmBcbiAgICAgICAgICogYW55d2F5LCBhdCB0aGUgY29zdCBvZiByZW5hbWluZyBTQ1JFQU1JTkdfQ0FTRSB0ZXN0IGZpeHR1cmVzIGFuZCB0aGUgYHRlc3RDb3ZlcmFnZWAvYHRlc3RXYXRjaGBcbiAgICAgICAgICogcnVubmVycyB0aGF0IGRlbGliZXJhdGVseSBtaXJyb3IgdGhlIGB0ZXN0OmNvdmVyYWdlYC9gdGVzdDp3YXRjaGAgbnBtIHNjcmlwdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZWZpeGVzOiB7XG4gICAgICAgICAgICAgIGFsbG93czogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hlY2s6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiB0cnVlLFxuICAgICAgICAgICAgICBkb2VzOiB0cnVlLFxuICAgICAgICAgICAgICBpbmNsdWRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgbXVzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbmVlZHM6IHRydWUsXG4gICAgICAgICAgICAgIHN1cHBvcnRzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBVbnNhdGlzZmlhYmxlIGFsb25nc2lkZSBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgLCB3aGljaCBpcyBjb25maWd1cmVkIGhlcmUgYXMgYSBwbGFpblxuICAgICAgICAgKiBhbHBoYWJldGljYWwgc29ydC4gVGhpcyBydWxlIHdhbnRzIGEgY2F0ZWdvcnkgb3JkZXIgKGFsbCBmaWVsZHMsIHRoZW4gdGhlIGNvbnN0cnVjdG9yLCB0aGVuIGFsbFxuICAgICAgICAgKiBtZXRob2RzKSwgc28gdGhlIGV4dHJlbWVseSBjb21tb24gYHByaXZhdGUgX3hgIGZpZWxkIHBhaXJlZCB3aXRoIGEgYHB1YmxpYyBnZXQgeCgpYCBhY2Nlc3NvciBpc1xuICAgICAgICAgKiByZWplY3RlZCBieSB3aGljaGV2ZXIgcnVsZSBsb3NlczogYWxwaGFiZXRpY2FsbHkgdGhlIGFjY2Vzc29yIHByZWNlZGVzIHRoZSBmaWVsZCwgYnkgY2F0ZWdvcnkgdGhlXG4gICAgICAgICAqIGZpZWxkIHByZWNlZGVzIHRoZSBhY2Nlc3Nvci4gVW5saWtlIGBwcmVmZXItZ2xvYmFsLXRoaXNgIHRoZSBjbGFzaCBwcm9kdWNlcyBub1xuICAgICAgICAgKiBgRVNMaW50Q2lyY3VsYXJGaXhlc1dhcm5pbmdgLCBvbmx5IGJlY2F1c2UgdGhpcyBydWxlIHNoaXBzIG5vIGZpeGVyIC0tIGJvdGggcnVsZXMgYXJlIGBlcnJvcmAsIHNvIG5vXG4gICAgICAgICAqIGFycmFuZ2VtZW50IG9mIG1lbWJlcnMgc2F0aXNmaWVzIHRoZW0gYm90aC4gVGhlIGFscGhhYmV0aWNhbCBzb3J0IGlzIHRoZSBvbmUgYWxyZWFkeSByb2xsZWQgb3V0XG4gICAgICAgICAqIGFjcm9zcyB0aGUgcGx1Z2lucyBjb25zdW1pbmcgdGhpcyBjb25maWcsIHNvIGl0IGtlZXBzIHByZWNlZGVuY2UuIFJlLWVuYWJsaW5nIHRoaXMgcnVsZSB3b3VsZCBtZWFuXG4gICAgICAgICAqIGdpdmluZyBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgIGEgbWF0Y2hpbmcgYGdyb3Vwc2Agb3B0aW9uIGFuZCByZW9yZGVyaW5nIGV2ZXJ5IGNsYXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vY29uc2lzdGVudC1jbGFzcy1tZW1iZXItb3JkZXInOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgcmVwb3J0IGlzIGBuZXcgRXJyb3IoKS5zdGFja2AsIHdoaWNoIGNhcHR1cmVzIGEgc3RhY2sgdHJhY2UgYW5kIG5ldmVyIHN1cmZhY2VzIGl0cyBtZXNzYWdlLlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3QgdGVsbCB0aGF0IGZyb20gYW4gZXJyb3IgdGhhdCBpcyBhY3R1YWxseSB0aHJvd24gYXQgYSB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBObyBiYXJlIGBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKWAgaXMgbGVmdCBmb3IgaXQgdG8gY2F0Y2g6IGV2ZXJ5IHNpdGUgbm93IGJ1aWxkcyBpdHMgYWdncmVnYXRlXG4gICAgICAgICAqIHRocm91Z2ggYGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yYCwgd2hpY2ggZ2l2ZXMgaXQgYSBtZXNzYWdlIHRoYXQgbmFtZXMgdGhlIGZhaWx1cmUuIEFuIGVtcHR5IG9uZSBpc1xuICAgICAgICAgKiBsb3NzeSBpbiBhIHdheSB0aGF0IG9ubHkgc2hvd3MgdXAgb3V0c2lkZSB0aGlzIGxpYnJhcnkg4oCUIGBlcnJvclRvU3RyaW5nYCB3YWxrcyBgZXJyb3JzYCBhbmQgcHJpbnRzXG4gICAgICAgICAqIHRoZSB3aG9sZSB0cmVlLCB3aGlsZSBldmVyeXRoaW5nIHJlYWRpbmcgYG1lc3NhZ2VgIHNlZXMgYW4gZW1wdHkgc2VudGVuY2UuIFRoZSBoZWxwZXIgbGl2ZXMgaW4gaXRzXG4gICAgICAgICAqIG93biBsZWFmIGBhZ2dyZWdhdGUtZXJyb3IudHNgIHJhdGhlciB0aGFuIGluIGBlcnJvci50c2AgcHJlY2lzZWx5IHNvIHRoYXQgYGRpc3Bvc2FibGUudHNgIGNhbiByZWFjaFxuICAgICAgICAgKiBpdCwgd2hpY2ggaXQgY291bGQgbm90IHdoaWxlIHRoZSBvbmx5IGNvcHkgc2F0IGluIGEgbW9kdWxlIGltcG9ydGluZyBpdCBiYWNrLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vZXJyb3ItbWVzc2FnZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmb3IgYG5vZGU6cGF0aGAgaXMgYSBkZWZhdWx0IGltcG9ydCwgYnV0IHRoaXMgY29kZWJhc2UgaW1wb3J0cyBpdHMgbWVtYmVycyBieSBuYW1lXG4gICAgICAgICAqIHRocm91Z2hvdXQsIGNvbnNpc3RlbnRseSB3aXRoIGV2ZXJ5IG90aGVyIGBub2RlOmAgbW9kdWxlIGl0IHVzZXMuIENvbmZpZ3VyZSB0aGUgcnVsZSB0byBlbmZvcmNlIHRoZVxuICAgICAgICAgKiBzdHlsZSBhY3R1YWxseSBpbiB1c2UgcmF0aGVyIHRoYW4gYW5ub3RhdGUgMTcgc2l0ZXMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIGNoYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2ltcG9ydC1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAvLyBLZXllZCBieSB0aGUgVU5QUkVGSVhFRCBtb2R1bGUgbmFtZTogdGhlIHJ1bGUncyBvd24gdGFibGUgdXNlcyBgcGF0aGAsIHNvIGEgYG5vZGU6cGF0aGAga2V5IG5ldmVyIG1hdGNoZXMuXG4gICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICBuYW1lZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjb3VudHMgY29uc3RydWN0b3IgY2FsbHMgYW5kIGNvdW50cyB0aHJvdWdoIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIHNvIGl0cyBkZWZhdWx0IG9mIDNcbiAgICAgICAgICogcmVwb3J0cyBvcmRpbmFyeSBjb21wb3NpdGlvbjogYFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignYm9vbScpKWAgaW5zaWRlIGFuIGFzc2VydGlvbiwgYSB0ZXN0IGZpeHR1cmVcbiAgICAgICAgICogYnVpbHQgYXMgYGNyZWF0ZVR5cGVJbmZvKHsgbWV0aG9kczogW2NyZWF0ZU1lbWJlckluZm8oeyAuLi4gfSldIH0pYCwgYHRoaXMuYWRkQ2hpbGQobmV3IEModGhpcy5hcHApKWBcbiAgICAgICAgICogaW5zaWRlIGEgcGFyYW1zIGJhZy4gUmFpc2luZyB0aGUgbGltaXQgYnkgb25lIGNsZWFycyBldmVyeSByZXBvcnQgaGVyZSB3aGlsZSBzdGlsbCBjYXRjaGluZyB0aGVcbiAgICAgICAgICogZ2VudWluZWx5IHVucmVhZGFibGUgbmVzdGluZyB0aGUgcnVsZSBpcyBmb3IuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9tYXgtbmVzdGVkLWNhbGxzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4OiA0XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAndW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBQcm9wZXJ0eSBhbmQgbWVtYmVyIG5hbWVzIGFyZSBjaGVja2VkIHRvbywgc28gYW4gYWJicmV2aWF0aW9uIGNhbm5vdCBzdXJ2aXZlIGJ5IGxpdmluZyBvbiBhblxuICAgICAgICAgICAgICogb2JqZWN0IHJhdGhlciB0aGFuIGluIGEgdmFyaWFibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIHJ1bGUgaXMgcHVyZWx5IHN5bnRhY3RpYzogaXQgY2Fubm90IHRlbGwgYSBtZW1iZXIgd2UgZGVjbGFyZSBmcm9tIG9uZSBiZWxvbmdpbmcgdG8gYVxuICAgICAgICAgICAgICogZGVwZW5kZW5jeSwgYW5kIGl0IG9mZmVycyBubyBhdXRvZml4IGZvciBwcm9wZXJ0aWVzIChtZWFzdXJlZDogNjgxIGhpdHMsIDAgd2l0aCBhIGZpeGVyKS4gU2l0ZXNcbiAgICAgICAgICAgICAqIG5hbWluZyBhIGZvcmVpZ24gbWVtYmVyIC0tIGBEb21FbGVtZW50SW5mby5hdHRyYCwgYEV2YWxJbk9ic2lkaWFuUGFyYW1zLmZuYCwgYW5kIHRoZSBsaWtlIC0tIGFyZVxuICAgICAgICAgICAgICogdGhlcmVmb3JlIGltcG9zc2libGUgdG8gc2F0aXNmeSBhbmQgY2FycnkgYW4gaW5saW5lIGRpc2FibGUsIHNvIGV2ZXJ5dGhpbmcgc3RpbGwgcmVwb3J0ZWQgaXMgb3Vyc1xuICAgICAgICAgICAgICogdG8gcmVuYW1lLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFdoZW4gcmVuYW1pbmcgdGhlIHJlc3QsIG5vdGUgdGhhdCBgdHNjYCBhbG9uZSBpcyBOT1QgYSBzdWZmaWNpZW50IGdhdGU6IG9iamVjdC1saXRlcmFsIGtleXMgaW5cbiAgICAgICAgICAgICAqIGxvb3NlbHkgdHlwZWQgcG9zaXRpb25zIChgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBiYXRjaGVkQXJndW1lbnRzOiAuLi4gfV0pYCkgYXJlIG5vdCBjb250ZXh0dWFsbHlcbiAgICAgICAgICAgICAqIHR5cGVkLCBzbyBhIHJlbmFtZSBsZWF2ZXMgdGhlbSBiZWhpbmQgYW5kIGJyZWFrcyB0aGUgc3VpdGUgd2hlcmUgdGhlIHR5cGUgY2hlY2tlciBzZWVzIG5vdGhpbmcuXG4gICAgICAgICAgICAgKiBSZW5hbWUgaW4gc21hbGwgYmF0Y2hlcyB3aXRoIHRoZSBmdWxsIHRlc3QgcnVuIGluIHRoZSBsb29wLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBkaXNhYmxlZCByZXBsYWNlbWVudHMgYmVsb3cgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW9ucyB0byBiZVxuICAgICAgICAgICAgICogZXhwYW5kZWQuIGBlbGAgaXMgZXhlbXB0IGJlY2F1c2UgT2JzaWRpYW4gbmFtZXMgZXZlcnkgZWxlbWVudCBtZW1iZXIgdGhhdCB3YXkgLS0gYGNvbnRhaW5lckVsYCxcbiAgICAgICAgICAgICAqIGBjb250ZW50RWxgLCBgaW5wdXRFbGAsIGBzZWxlY3RFbGAgLS0gc28gZXhwYW5kaW5nIG91cnMgdG8gYCpFbGVtZW50YCB3b3VsZCBsZWF2ZSBvdXIgY29tcG9uZW50c1xuICAgICAgICAgICAgICogcmVhZGluZyBpbmNvbnNpc3RlbnRseSBiZXNpZGUgdGhlIE9ic2lkaWFuIG9uZXMgdGhleSBzaXQgbmV4dCB0by4gRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBhbHNvXG4gICAgICAgICAgICAgKiBjb3ZlcnMgY29tcG91bmQgbmFtZXMsIHdoaWNoIGlzIDcyIHNpdGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGVhY2ggbmVlZCBhbiBpbmxpbmUgZGlzYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBgcmVmYCBpcyBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYEFzeW5jRXZlbnRSZWZgIGlzIHRoZSBhc3luYyBjb3VudGVycGFydCBvZiBPYnNpZGlhbidzXG4gICAgICAgICAgICAgKiBgRXZlbnRSZWZgLCBoYW5kZWQgdG8gdGhlIHNhbWUgYG9mZnJlZmAgLyBgcmVnaXN0ZXJFdmVudGAgc2hhcGVzLCBzbyB0aGUgdHdvIG5hbWVzIGhhdmUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAqIHRvIHJlYWQgYXMgYSBwYWlyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICByZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogYGF0dHJgIC8gYGF0dHJzYCBhcmUgT2JzaWRpYW4ncyBvd246IGBjcmVhdGVFbCgnYScsIHsgYXR0cjogeyAuLi4gfSB9KWAgdGFrZXMgdGhlbSBieSB0aG9zZVxuICAgICAgICAgICAgICAgKiBuYW1lcyBvbiBgRG9tRWxlbWVudEluZm9gLCBzbyBvdXJzIGhhdmUgdG8gbWF0Y2ggdG8gYmUgcGFzc2VkIHRocm91Z2guIGBwcm9wc2AgaXMgdGhlXG4gICAgICAgICAgICAgICAqIHVuaXZlcnNhbCBjb21wb25lbnQgdm9jYWJ1bGFyeSwgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb24gYHBhcmFtc2AgaXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRyOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXR0cnM6IGZhbHNlLFxuICAgICAgICAgICAgICBkZXY6IGZhbHNlLFxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBFdmVyeSBgZGlyYCBoZXJlIGlzIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnksIG5ldmVyIGEgZGlyZWN0aW9uLCBzbyB0aGUgcnVsZSBpcyBuYXJyb3dlZCB0byB0aGVcbiAgICAgICAgICAgICAgICogb25lIGV4cGFuc2lvbiByYXRoZXIgdGhhbiBsZWZ0IG9mZmVyaW5nIGEgY2hvaWNlIGl0IGNhbm5vdCBtYWtlLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gVGhpcyBpcyB0aGUgcnVsZSdzIG93biByZXBsYWNlbWVudCBrZXksIHdoaWNoIGhhcyB0byBiZSBzcGVsbGVkIHRoZSB3YXkgdGhlIHJ1bGUgcmVhZHMgaXQuXG4gICAgICAgICAgICAgIGRpcjoge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2M6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2NzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZWw6IGZhbHNlLFxuICAgICAgICAgICAgICBlbnY6IGZhbHNlLFxuICAgICAgICAgICAgICBsaWI6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZjogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZnM6IGZhbHNlLFxuICAgICAgICAgICAgICBzcmM6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbHM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmV4dCBzaXggcnVsZXMgYWxsIHN1Z2dlc3QgYW4gQVBJIG5ld2VyIHRoYW4gdGhpcyBwcm9qZWN0J3MgYGxpYmAgKGBFUzIwMjJgKSwgc28gZm9sbG93aW5nIGFueSBvZlxuICAgICAgICAgKiB0aGVtIGZhaWxzIHRvIGNvbXBpbGUuIFRoZSBPYnNpZGlhbiBwbHVnaW4gbGF5ZXIgdGFrZXMgdGhlIGZsb29yIGZyb20gdGhlIG9sZGVzdCBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdFxuICAgICAgICAgKiBjYW4gc3RpbGwgcnVuIGN1cnJlbnQgT2JzaWRpYW4sIHdoaWNoIHJlY29yZHMgYGVjbWFTY3JpcHRWZXJzaW9uOiBcIkVTMjAyMlwiYC4gRWFjaCBpcyBvZmYgYXQgdGhlIGNvbmZpZ1xuICAgICAgICAgKiBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgcGVyIHNpdGUsIGJlY2F1c2Ugbm9uZSBjYW4gZXZlciBiZSBzYXRpc2ZpZWQgd2hpbGUgdGhhdCBmbG9vciBob2xkcy4gUmV2aXNpdFxuICAgICAgICAgKiB0aGVtIHRvZ2V0aGVyIGlmIHRoZSBmbG9vciBtb3Zlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogYEFycmF5I3RvUmV2ZXJzZWRgIGFuZCBgQXJyYXkjdG9Tb3J0ZWRgIGFyZSBFUzIwMjMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1hcnJheS1yZXZlcnNlJzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLWFycmF5LXNvcnQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNvbnRpbnVlYCBpbnNpZGUgYSBuZXN0ZWQgbG9vcCBpcyBvcmRpbmFyeSwgcmVhZGFibGUgY29udHJvbCBmbG93IGhlcmUuIFRoZSBydWxlJ3MgcmVtZWR5IGlzIHRvXG4gICAgICAgICAqIGV4dHJhY3QgZXZlcnkgc3VjaCBsb29wIGludG8gaXRzIG93biBmdW5jdGlvbiwgd2hpY2ggc3ByZWFkcyBvbmUgY29oZXJlbnQgdHJhdmVyc2FsIGFjcm9zcyB0d29cbiAgICAgICAgICogZGVjbGFyYXRpb25zIHdpdGhvdXQgbWFraW5nIGFueXRoaW5nIGNsZWFyZXIuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1icmVhay1pbi1uZXN0ZWQtbG9vcCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3Qgc2VlIHRocm91Z2ggYSBob2lzdGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBzbyBpdCB0cmVhdHMgYSBiaW5kaW5nIHRoYXQgYSBuZXN0ZWRcbiAgICAgICAgICogZnVuY3Rpb24gYWxyZWFkeSByZWFkIGFzIHVudXNlZCBiZWZvcmUgdGhlIGV4aXQuIEluIGBydW5XaXRoVGltZW91dGAgdGhhdCBpcyBgbGV0IGlzQ29tcGxldGVkYCwgd2hpY2hcbiAgICAgICAgICogYHJ1bigpYCBhbmQgYGlubmVyVGltZW91dCgpYCBib3RoIHRvdWNoIHdoaWxlIHRoZSBgUHJvbWlzZS5yYWNlYCBhYm92ZSB0aGUgZXhpdCBpcyBzdGlsbCBydW5uaW5nIC0tXG4gICAgICAgICAqIG1vdmluZyB0aGUgZGVjbGFyYXRpb24gcGFzdCB0aGUgZXhpdCwgYXMgdGhlIHJ1bGUgYXNrcywgd291bGQgbGVhdmUgdGhvc2UgcmVhZHMgaW4gdGhlIHRlbXBvcmFsIGRlYWRcbiAgICAgICAgICogem9uZS4gSXRzIG93biBmaXhlciBkZWNsaW5lcyBhbGwgMTUgc2l0ZXMgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBjYW5ub3QgcHJvdmUgdGhlbSBzYWZlLCBzbyBmb2xsb3dpbmdcbiAgICAgICAgICogdGhlIHJ1bGUgaXMgZW50aXJlbHkgbWFudWFsLiBXaGF0IGlzIGxlZnQgYWZ0ZXIgdGhhdCBpcyBwbGFjZW1lbnQgc3R5bGU6IHRoZSByZW1haW5pbmcgcmVwb3J0cyBhcmVcbiAgICAgICAgICogbmFtZWQgY29uc3RhbnRzIGFuZCBkZXJpdmVkIHBhdGhzIGRlbGliZXJhdGVseSBncm91cGVkIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlvbiwgYW5kIHB1c2hpbmcgZWFjaCBvbmVcbiAgICAgICAgICogYmVsb3cgdGhlIGZpcnN0IGd1YXJkIHNwbGl0cyBhIGNvaGVzaXZlIGJsb2NrIHRvIG5vIGJlbmVmaXQuIFRoZSB0aHJlZSBzaXRlcyB3aGVyZSBkZWZlcnJpbmcgc2tpcHBlZFxuICAgICAgICAgKiByZWFsIHdvcmsgKGEgc2Vjb25kIGBjb21wdXRlTmVlZGVkRXhwb3N1cmVgIHdhbGssIGEgYHRvSnNvbmAgc2VyaWFsaXphdGlvbiwgYW4gYGVuc3VyZUxmRW5kaW5nc2AgcGFzcylcbiAgICAgICAgICogd2VyZSBhcHBsaWVkIGJ5IGhhbmQgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWRlY2xhcmF0aW9ucy1iZWZvcmUtZWFybHktZXhpdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBc3NpZ25pbmcgb250byB0aGUgZ2xvYmFsIG9iamVjdCBpcyBob3cgdGhpcyBsaWJyYXJ5IGluc3RhbGxzIGFuZCByZXN0b3JlcyB0ZXN0IGRvdWJsZXMsIGFuZCBob3cgYVxuICAgICAgICAgKiBmZXcgT2JzaWRpYW4tcnVudGltZSBnbG9iYWxzIGFyZSByZWFjaGVkIGF0IGFsbC4gVGhlIHJ1bGUgY2Fubm90IHNlcGFyYXRlIHRoYXQgZnJvbSBhbiBhY2NpZGVudGFsXG4gICAgICAgICAqIGdsb2JhbCB3cml0ZSwgYW5kIGl0IGhhcyBubyBmaXhlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWdsb2JhbC1vYmplY3QtcHJvcGVydHktYXNzaWdubWVudCc6ICdvZmYnLFxuICAgICAgICAvLyBgbnVsbGAgaXMgbG9hZC1iZWFyaW5nIGhlcmU6IGFuIG9wdGlvbmFsIGNvbGxhYm9yYXRvciBpcyBtb2RlbGxlZCBhcyBhIHJlcXVpcmVkIGBudWxsIHwgWGAgZmllbGQgcmF0aGVyIHRoYW4gYW4gb3B0aW9uYWwgYFhgLCBzbyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLlxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSdzIGxpc3Qgb2Ygc3RhbmRhcmQgYFN5bWJvbGAgcHJvcGVydGllcyBwcmVkYXRlcyBleHBsaWNpdCByZXNvdXJjZSBtYW5hZ2VtZW50LCBzbyBpdCByZXBvcnRzXG4gICAgICAgICAqIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBhcyBub24tc3RhbmRhcmQuIEJvdGggYXJlIHBhcnQgb2YgdGhlIGxhbmd1YWdlIHRoYXQgdGhpc1xuICAgICAgICAgKiBsaWJyYXJ5IGlzIGJ1aWx0IG9uIC0tIDExNCBmaWxlcyBoZXJlIHVzZSBgdXNpbmdgIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBkaXNwb3NhYmxlIHR5cGVzIGFyZSBhXG4gICAgICAgICAqIHB1YmxpYyBwYXJ0IG9mIGl0cyBzdXJmYWNlIC0tIHNvIGFsbCA1OSByZXBvcnRzIGFyZSB0aGUgcnVsZSBiZWluZyBvdXQgb2YgZGF0ZSByYXRoZXIgdGhhbiBhIGZpbmRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub25zdGFuZGFyZC1idWlsdGluLXByb3BlcnRpZXMnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tbnVsbCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUeXBlU2NyaXB0J3MgZXhwbGljaXQgYHRoaXNgIHBhcmFtZXRlciAoYGZ1bmN0aW9uIGdldCh0aGlzOiBIb2xkZXIpIHsgcmV0dXJuIHRoaXMudmFsdWU7IH1gKSBtYWtlc1xuICAgICAgICAgKiBgdGhpc2Agb3V0c2lkZSBhIGNsYXNzIGJvdGggbGVnYWwgYW5kIHR5cGUtY2hlY2tlZCwgYnV0IHRoZSBydWxlIGlzIHN5bnRhY3RpYyBhbmQgZmxhZ3MgaXQgaWRlbnRpY2FsbHlcbiAgICAgICAgICogdG8gYSBnZW51aW5lbHkgdW5ib3VuZCBgdGhpc2AuIEl0IGhhcyBubyBvcHRpb25zIChgc2NoZW1hOiBbXWApIGFuZCBubyBmaXhlciwgc28gdGhlcmUgaXMgbm8gd2F5IHRvXG4gICAgICAgICAqIHNlcGFyYXRlIHRoZSBpZGlvbSBmcm9tIHRoZSBidWcgaXQgdGFyZ2V0cy4gTW9zdCBoaXRzIGhlcmUgd2VyZSB0eXBlZCBgdGhpc2AgcGFyYW1ldGVycyBhbmQgdGVzdHMgdGhhdFxuICAgICAgICAgKiBkZWxpYmVyYXRlbHkgYXNzZXJ0IGB0aGlzYCBiaW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdGhpcy1vdXRzaWRlLW9mLWNsYXNzJzogJ29mZicsXG4gICAgICAgIC8vIFNhbWUgY2FsbCBhcyBpdHMgb2JqZWN0IGNvdW50ZXJwYXJ0IGFib3ZlOiB0aGUgZGVzdHJ1Y3R1cmluZyBkZXB0aCBmbGFnZ2VkIGhlcmUgaXMgZGVsaWJlcmF0ZSBhbmQgcmVhZHMgd2VsbC5cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1hcnJheS1kZXN0cnVjdHVyaW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSByZXBvcnRzIGFyZSBhbGwgYGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoLi4uKSlgLCB3aGljaCByZWFkcyBleGFjdGx5IGFzIGludGVuZGVkLlxuICAgICAgICAgKiBIb2lzdGluZyB0aGUgYXdhaXRlZCBjYWxsIGludG8gYSB2YXJpYWJsZSBuYW1lZCBhZnRlciB0aGUgbG9vcCdzIG93biBpdGVyYWJsZSBhZGRzIGEgbGluZSBhbmQgYSBuYW1lXG4gICAgICAgICAqIHdpdGhvdXQgYWRkaW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1mb3Itb2YtZXhwcmVzc2lvbic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmVzdGVkIGRlc3RydWN0dXJpbmcgdGhpcyBmbGFncyBpcyBkZWxpYmVyYXRlIGhlcmUgYW5kIHJlYWRzIHdlbGw6IHB1bGxpbmcgYSBtZW1iZXIgb3V0IG9mIGFcbiAgICAgICAgICogcGFyYW1zIGJhZyBpbiBvbmUgc3RlcCBzdGF0ZXMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzIGZyb20sIHdoaWNoIGEgc2Vjb25kIGludGVybWVkaWF0ZSBiaW5kaW5nIG9ubHlcbiAgICAgICAgICogb2JzY3VyZXMuIFRoZSBydWxlIHRha2VzIG5vIG9wdGlvbnMsIHNvIHRoZXJlIGlzIG5vIHdheSB0byBrZWVwIHRoZSBkZXB0aCBsaW1pdCBpdCBpcyByZWFsbHkgYWZ0ZXJcbiAgICAgICAgICogd2hpbGUgYWxsb3dpbmcgdGhlIHNoYXBlIGluIHVzZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtb2JqZWN0LWRlc3RydWN0dXJpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNoZWNrQXJndW1lbnRzYCBzdHJpcHMgYHVuZGVmaW5lZGAgYXJndW1lbnRzLCB3aGljaCBzaGlmdHMgdGhlIHJlbWFpbmluZyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbnRvXG4gICAgICAgICAqIHRoZSB3cm9uZyBzbG90czsgYGNoZWNrQXJyb3dGdW5jdGlvbkJvZHlgIHJlbW92ZXMgYHJldHVybiB1bmRlZmluZWQ7YCBmcm9tIGFycm93IGJvZGllcyB3aG9zZSBvdGhlclxuICAgICAgICAgKiBicmFuY2hlcyBkbyByZXR1cm4gYSB2YWx1ZSwgd2hpY2ggdmlvbGF0ZXMgdGhlIGBub0ltcGxpY2l0UmV0dXJuc2Agc2V0dGluZyB0aGlzIHByb2plY3QgY29tcGlsZXMgd2l0aC5cbiAgICAgICAgICogVGhlIHJ1bGUncyByZW1haW5pbmcgY2FzZXMgKGEgYmFyZSBgdW5kZWZpbmVkYCBpbml0aWFsaXplciwgYHJldHVybiB1bmRlZmluZWQ7YCBpbiBhIHZvaWQgZnVuY3Rpb24pXG4gICAgICAgICAqIGFyZSBzdGlsbCB3b3J0aCBoYXZpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrQXJndW1lbnRzOiBmYWxzZSxcbiAgICAgICAgICAgIGNoZWNrQXJyb3dGdW5jdGlvbkJvZHk6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBgQXJyYXkuZnJvbUFzeW5jYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1hcnJheS1mcm9tLWFzeW5jJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGhpdCBoZXJlIGlzIGEgcHJvbWlzZSBkZWxpYmVyYXRlbHkgTk9UIGF3YWl0ZWQsIGFuZCBgYXdhaXRgIHdvdWxkIGNoYW5nZSB3aGF0IHRoZSBjb2RlIGRvZXMuXG4gICAgICAgICAqIGByZXN1bHQuY2F0Y2godGhyb3dEZWxheWVkKWAgaW4gYGFzeW5jLWV2ZW50cy50c2AgaXMgdGhlIGZpcmUtYW5kLWZvcmdldCBlcnJvciBwYXRoIHRoZSBtb2R1bGUgaXNcbiAgICAgICAgICogYnVpbHQgb247IHRoZSByZXN0IGhvbGQgYW4gdW5yZXNvbHZlZCBwcm9taXNlIGFuZCBhc3NlcnQgdGhlIGNhbGxiYWNrIGhhcyBub3QgZmlyZWQgeWV0LCBzbyBhd2FpdGluZ1xuICAgICAgICAgKiB3b3VsZCBoYW5nIHRoZSB0ZXN0IG9yIGludmVydCB3aGF0IGl0IHByb3Zlcy4gVGhlIHJ1bGUgY2Fubm90IHRlbGwgYSBmb3Jnb3R0ZW4gYGF3YWl0YCBmcm9tIGFuXG4gICAgICAgICAqIGludGVudGlvbmFsIG9uZSwgYW5kIHRoaXMgY29kZWJhc2Ugc2NoZWR1bGVzIGZpcmUtYW5kLWZvcmdldCB3b3JrIGFzIGEgY29yZSBwYXR0ZXJuLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWF3YWl0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEFsbCB0aHJlZSByZXBvcnRzIHJlYWQgSFRNTCBvdXQgKGBjb25zdCBodG1sID0gZWwuaW5uZXJIVE1MYCksIG5ldmVyIHdyaXRlIGl0LCBhbmQgZm9yIGEgcmVhZFxuICAgICAgICAgKiBgZ2V0SFRNTCgpYCByZXR1cm5zIHRoZSBzYW1lIHN0cmluZy4gV2hhdCBpdCBhZGRzIGlzIHNoYWRvdy1yb290IHNlcmlhbGl6YXRpb24gb3B0aW9ucyB0aGF0IG5vdGhpbmdcbiAgICAgICAgICogaGVyZSBhc2tzIGZvciwgaW4gZXhjaGFuZ2UgZm9yIGEgbXVjaCBuZXdlciBwbGF0Zm9ybSBmbG9vciB0aGFuIGBpbm5lckhUTUxgIC0tIGEgYmFkIHRyYWRlIGZvciBhXG4gICAgICAgICAqIGxpYnJhcnkgdGhhdCBoYXMgdG8gcnVuIG9uIHdoYXRldmVyIENocm9taXVtIHRoZSBpbnN0YWxsZWQgT2JzaWRpYW4gc2hpcHMuIFRoZSBydWxlJ3Mgb3RoZXIgaGFsZixcbiAgICAgICAgICogcmV3cml0aW5nIHdyaXRlcyB0byB0aGUgc2FuaXRpemluZyBgc2V0SFRNTCgpYCwgd291bGQgYmUgd29ydGggaGF2aW5nOyBpdCBqdXN0IG5ldmVyIGZpcmVzIGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtaHRtbC1tZXRob2RzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEl0ZXJhdG9yIGhlbHBlcnMgKGBJdGVyYXRvciNzb21lYCBhbmQgZnJpZW5kcykgYXJlIEVTMjAyNSwgc28gdGhpcyBiZWxvbmdzIHdpdGggYG5vLWFycmF5LXJldmVyc2VgIGFuZFxuICAgICAgICAgKiBgbm8tYXJyYXktc29ydGAgYWJvdmU6IHRoZSBzYW1lIEVTMjAyMiBmbG9vciBydWxlcyBpdCBvdXQsIGFuZCB0aGUgc2FtZSBub3RlIGFwcGxpZXMgLS0gcmV2aXNpdCB0aGVtXG4gICAgICAgICAqIHRvZ2V0aGVyIGlmIHRoYXQgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItaGVscGVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgSXRlcmF0b3IjdG9BcnJheWAgaXMgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItdG8tYXJyYXknOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogUmVwbGFjZWQgYnkgYHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5YCwgd2hpY2ggcmVwb3J0cyB0aGUgc2FtZSBhbmRcbiAgICAgICAgICogYWxzbyBmaXhlcyBhIGJvb2xlYW4gbGl0ZXJhbCBicmFuY2ggaW4gVHlwZVNjcmlwdC4gVW5pY29ybiB3aXRoaG9sZHMgdGhhdCBmaXggdGhlcmUsIHdoaWxlXG4gICAgICAgICAqIGB1bmljb3JuL3ByZWZlci10ZXJuYXJ5YCBrZWVwcyBwcm9kdWNpbmcgdGhlIHNoYXBlLCBzbyBgbGludDpmaXhgIGxlZnQgYW4gZXJyb3IgaXQgaGFkIGp1c3QgY3JlYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgc3VnZ2VzdGVkIHJlcGxhY2VtZW50IGlzIGBNYXRoLnRydW5jKE51bWJlcih4KSlgLCB3aGljaCBpcyBsb25nZXIgdGhhbiBgcGFyc2VJbnQoeCwgMTApYCBhbmQgbm9cbiAgICAgICAgICogY2xlYXJlciwgYW5kIGl0IGlzIG5vdCB0aGUgc2FtZSBmdW5jdGlvbjogYHBhcnNlSW50YCBzdG9wcyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgY2Fubm90IGJlIHBhcnRcbiAgICAgICAgICogb2YgdGhlIG51bWJlciwgc28gYCcxMmFiYydgIHBhcnNlcyB0byAxMiB3aGVyZSBgTnVtYmVyYCB5aWVsZHMgYE5hTmAuIFR3byBvZiB0aGUgcmVwb3J0cyByZWFkIHVzZXJcbiAgICAgICAgICogaW5wdXQgdGhyb3VnaCB0aGF0IGRpZmZlcmVuY2UgLS0gdGhlIHBhZ2UtanVtcCBib3ggaW4gdGhlIGBEYXRhdmlld2AgaGVscGVyLCBhbmRcbiAgICAgICAgICogYE51bWJlckNvbXBvbmVudC52YWx1ZUZyb21TdHJpbmdgLCB3aG9zZSBsZW5pZW50IHBhcnNlIGlzIHBhcnQgb2YgYSBwdWJsaXNoZWQgY29tcG9uZW50J3MgYmVoYXZpb3IuXG4gICAgICAgICAqIFRoZSByZXN0IHBhcnNlIG1hY2hpbmUtZ2VuZXJhdGVkIHN0cmluZ3MsIHdoZXJlIHRoZSB0d28gYWdyZWUgYnV0IHRoZSBzaG9ydGVyIHNwZWxsaW5nIHN0aWxsIHdpbnMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItbnVtYmVyLWNvZXJjaW9uJzogJ29mZicsXG4gICAgICAgIC8vIGBQcm9taXNlLndpdGhSZXNvbHZlcnNgIGlzIEVTMjAyNC4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXByb21pc2Utd2l0aC1yZXNvbHZlcnMnOiAnb2ZmJyxcbiAgICAgICAgLy8gYFNldCN1bmlvbmAgYW5kIGZyaWVuZHMgYXJlIEVTMjAyNS4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXNldC1tZXRob2RzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJhbmtzIG9wZXJhbmRzIGJ5IHN5bnRhY3RpYyBzaGFwZSwgbm90IGNvc3QsIHNvIGV2ZXJ5IHJlcG9ydCBoZXJlIHN3YXBzIG9uZSBwcm9wZXJ0eSByZWFkXG4gICAgICAgICAqIGFoZWFkIG9mIGFub3RoZXIgYW5kIGJ1eXMgbm90aGluZy4gSXRzIG93biBtZXNzYWdlIGNvbmNlZGVzIGl0IGNhbm5vdCBjaGVjayB0aGUgcGFydCB0aGF0IG1hdHRlcnMgLS1cbiAgICAgICAgICogXCJhZnRlciB2ZXJpZnlpbmcgc2hvcnQtY2lyY3VpdCBiZWhhdmlvclwiIC0tIGFuZCBvbmUgcmVwb3J0IHNpdHMgZGlyZWN0bHkgdW5kZXIgYSBjb21tZW50IHJlY29yZGluZ1xuICAgICAgICAgKiB0aGF0IHRoZSBvcGVyYW5kcyBjaGFuZ2UgaW5zaWRlIGEgYHJlbmFtZWAgZXZlbnQgaGFuZGxlciwgd2hpY2ggaXMgd2hlcmUgb3JkZXIgc3RvcHMgYmVpbmcgZnJlZS5cbiAgICAgICAgICogVGhlIGN1cnJlbnQgb3JkZXJzIGFsc28gY2FycnkgaW50ZW50OiBhIG51bGwgZ3VhcmQgYmVmb3JlIHRoZSB1c2UgaXQgZ3VhcmRzLCBhbmQgdGhlIGNvbmRpdGlvbiBiZWluZ1xuICAgICAgICAgKiByZXBvcnRlZCBiZWZvcmUgdGhlIHN0YXRlIGl0IGNvbnRyYWRpY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXNpbXBsZS1jb25kaXRpb24tZmlyc3QnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYFVSTC5jYW5QYXJzZWAgcmVxdWlyZXMgTm9kZSAxOC4xNywgd2VsbCBhYm92ZSB0aGUgTm9kZSAxNi4xNi4wIGZsb29yIHRoYXQgc2hpcHBlZCBzb3VyY2UgdGFyZ2V0c1xuICAgICAgICAgKiAoc2VlIHRoZSBPYnNpZGlhbiBwbHVnaW4gbGF5ZXIncyBgbWluaW11bU5vZGVWZXJzaW9uYCkuIFRoZSBydWxlIGNhbiB0aGVyZWZvcmUgbmV2ZXIgYmUgc2F0aXNmaWVkIHRoZXJlLCBzbyBpdCBpcyBvZmYgYXQgdGhlXG4gICAgICAgICAqIGNvbmZpZyBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgYXQgZWFjaCBjYWxsIHNpdGUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItdXJsLWNhbi1wYXJzZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSBhcnJheSByZXBvcnRlZCBoZXJlIGhvbGRzIHN0cmluZ3MsIHdoZXJlIHRoZSBkZWZhdWx0IHNvcnQgaXMgYWxyZWFkeSB3ZWxsIGRlZmluZWQgYW5kIGNvcnJlY3QuXG4gICAgICAgICAqIEFkZGluZyB0aGUgY29tcGFyYXRvciB0aGUgcnVsZSBhc2tzIGZvciB3b3VsZCBtZWFuIGNob29zaW5nIGJldHdlZW4gY29kZS11bml0IGFuZCBsb2NhbGUgb3JkZXJpbmcsXG4gICAgICAgICAqIHNvIGZvbGxvd2luZyBpdCB3b3VsZCBDSEFOR0UgdGhlIHNvcnQgcmF0aGVyIHRoYW4gZG9jdW1lbnQgaXQuIFRoZSBydWxlIGVhcm5zIGl0cyBwbGFjZSBvbiBudW1lcmljXG4gICAgICAgICAqIGFycmF5czsgaXQgZG9lcyBub3QgaGF2ZSBhbnkgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3JlcXVpcmUtYXJyYXktc29ydC1jb21wYXJlJzogJ29mZicsXG4gICAgICAgIC8vIFRoZSBjb2RlYmFzZSBhbHJlYWR5IHNwZWxscyBlbmNvZGluZ3MgdGhlIHdheSB0aGUgRW5jb2RpbmcgU3RhbmRhcmQgZG9lcyAoYHV0Zi04YCksIHdoaWNoIGlzIGFsc28gd2hhdCBgVGV4dERlY29kZXJgIHJlcG9ydHMuIEtlZXAgdGhlIHJ1bGUgZW5mb3JjaW5nIGNvbnNpc3RlbmN5LCBqdXN0IGluIHRoZSBkaXJlY3Rpb24gYWxyZWFkeSBpbiB1c2UuXG4gICAgICAgICd1bmljb3JuL3RleHQtZW5jb2RpbmctaWRlbnRpZmllci1jYXNlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2l0aERhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1aWxkL2xpbnQvdmVyc2lvbiBzY3JpcHRzIGFyZSBDTEkgZW50cnkgcG9pbnRzLCB3aGVyZSBleGl0aW5nIHdpdGggYSBzdGF0dXMgY29kZSBpcyB0aGUgaW50ZXJmYWNlLlxuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAndW5pY29ybi9uby1wcm9jZXNzLWV4aXQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEEgbW9kdWxlLWxldmVsIGZpeHR1cmUgYXNzaWduZWQgZnJvbSBgYmVmb3JlRWFjaGAgaXMgdGhlIHN0YW5kYXJkIHRlc3Qgc2hhcGU6XG4gICAgICAgKlxuICAgICAgICogICBsZXQgYXBwOiBBcHA7XG4gICAgICAgKiAgIGJlZm9yZUVhY2goKCkgPT4geyBhcHAgPSBBcHAuY3JlYXRlQ29uZmlndXJlZF9fKCk7IH0pO1xuICAgICAgICpcbiAgICAgICAqIFRoZSBydWxlIGlzIHJpZ2h0IGFib3V0IHByb2R1Y3Rpb24gY29kZSAtLSBtb2R1bGUgc3RhdGUgcmVhc3NpZ25lZCBmcm9tIGluc2lkZSBhIGZ1bmN0aW9uIGlzIHdvcnRoXG4gICAgICAgKiBmbGFnZ2luZywgYW5kIHRoZSBmaXggaXMgdG8gaG9sZCBpdCBpbiBhIGBjb25zdGAgb2JqZWN0IGluc3RlYWQuIEluIHRlc3RzIHRoYXQgd291bGQgcmVwbGFjZSBldmVyeVxuICAgICAgICogYGFwcGAgd2l0aCBgU1RBVEUuYXBwYCBhbmQgbWFrZSBlYWNoIGZpbGUgcmVhZCB3b3JzZSBmb3Igbm8gZ2Fpbiwgc2luY2UgdGhlIGZpeHR1cmUgaXMgcmVzZXQgcGVyIHRlc3RcbiAgICAgICAqIGJ5IGRlc2lnbi4gU2NvcGVkIG9mZiBoZXJlIHJhdGhlciB0aGFuIGRpc2FibGVkIG91dHJpZ2h0LCBzbyBwcm9kdWN0aW9uIGNvZGUga2VlcHMgdGhlIGNoZWNrLlxuICAgICAgICovXG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBUd28gc2hhcGVzIGhlcmUgY2Fubm90IGZvbGxvdyB0aGUgYWR2aWNlLiBBIGhlbHBlciBkZWZpbmVkIGluc2lkZSBhbiBgZXZhbEluT2JzaWRpYW5gIGNhbGxiYWNrXG4gICAgICAgICAqIGNhbm5vdCBiZSBob2lzdGVkIGF0IGFsbDogdGhlIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgd2l0aCBgdG9TdHJpbmcoKWAgYW5kIHJ1bnMgaW5zaWRlIE9ic2lkaWFuLCBzb1xuICAgICAgICAgKiBhbnl0aGluZyBsZWZ0IGJlaGluZCBpbiB0aGUgbW9kdWxlIHNjb3BlIGlzIHNpbXBseSBub3QgdGhlcmUuIEFuZCBhIHBlci1zdWl0ZSBmYWN0b3J5XG4gICAgICAgICAqIChgY3JlYXRlQ29tcG9uZW50YCwgYGNyZWF0ZU1vY2tQbHVnaW5gKSBpcyBkZWxpYmVyYXRlbHkgbG9jYWwsIGtlZXBpbmcgZWFjaCBzdWl0ZSdzIGZpeHR1cmUgbmV4dCB0b1xuICAgICAgICAgKiB0aGUgYXNzZXJ0aW9ucyB0aGF0IHJlYWQgaXQuIFByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQSB0ZXN0IGJpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIgdGhlIHRoaW5nIGl0IGNhcHR1cmVzLCBub3QgYWZ0ZXIgd2hhdCBpdCBkb2VzOiBgY3JlYXRlRWxlbWVudFNweWBcbiAgICAgICAgICogaG9sZHMgdGhlIHNweSBvbiBgY3JlYXRlRWxlbWVudGAsIGFuZCBgY3JlYXRlUHJvZ3JhbU9wdGlvbnNgIGhvbGRzIHRoZSBvcHRpb25zIGBjcmVhdGVQcm9ncmFtYCB3YXNcbiAgICAgICAgICogY2FsbGVkIHdpdGguIFRoZSB2ZXJiIGJlbG9uZ3MgdG8gdGhlIG5hbWUgYmVpbmcgcmVmZXJlbmNlZCwgc28gdGhlIHJ1bGUgcmVhZHMgaXQgYXMgYSBmdW5jdGlvbiBuYW1lXG4gICAgICAgICAqIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uIExlZnQgb24gZm9yIHByb2R1Y3Rpb24gY29kZSwgd2hlcmUgdGhlIGNvbXBsYWludCBpcyB0aGUgcmlnaHQgb25lLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tbm9uLWZ1bmN0aW9uLXZlcmItcHJlZml4JzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLXRvcC1sZXZlbC1hc3NpZ25tZW50LWluLWZ1bmN0aW9uJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLE9BQU8scUJBQXFCO0FBQzVCLFNBQVMseUJBQXlCO0FBQ2xDLE9BQU8sWUFBWTtBQUNuQixTQUFTLFlBQVk7QUFFckIsT0FBTyxlQUFlO0FBQ3RCLFNBQVMsc0NBQXNDO0FBQy9DLFNBQVMsZUFBZSxzQ0FBc0M7QUFFOUQsT0FBTyxnQkFBZ0I7QUFDdkIsU0FBUyxXQUFXLDRCQUE0QjtB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
|
|
1043
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGhhbGYgb2YgdGhlIHNoYXJlZCBFU0xpbnQgY29uZmlndXJhdGlvbiwgZm9yIGFueSBUeXBlU2NyaXB0IHByb2plY3QuXG4gKlxuICogSXQgaW50ZWdyYXRlcyBFU0xpbnQncyBvd24gcmVjb21tZW5kZWQgcnVsZXMsIGB0eXBlc2NyaXB0LWVzbGludGAsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4taW1wb3J0LXhgIHdpdGggaXRzIFR5cGVTY3JpcHQgcmVzb2x2ZXIsIGBlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3RgLCBgZXNsaW50LXBsdWdpbi11bmljb3JuYCxcbiAqIGBlc2xpbnQtcGx1Z2luLW5gIGFuZCB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gb25lIGxpdmVzIGluXG4gKiBgQG1uYW91bW92L29ic2lkaWFuLWRldi10b29sa2l0YCkgYnVpbGRzIG9uIHtAbGluayBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc30gYW5kIGFkZHMgb25seSB3aGF0IGlzIHNwZWNpZmljIHRvIGl0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWNsYXJhdGl2ZSBFU0xpbnQgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBFU0xpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gJ2VzbGludCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5pbXBvcnQgY29tbWVudHNDb25maWdzIGZyb20gJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1wbHVnaW4tZXNsaW50LWNvbW1lbnRzL2NvbmZpZ3MnO1xuaW1wb3J0IHsgaW5jbHVkZUlnbm9yZUZpbGUgfSBmcm9tICdAZXNsaW50L2NvbmZpZy1oZWxwZXJzJztcbmltcG9ydCBlc2xpbnQgZnJvbSAnQGVzbGludC9qcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgc3R5bGlzdGljIGZyb20gJ0BzdHlsaXN0aWMvZXNsaW50LXBsdWdpbic7XG5pbXBvcnQgeyBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIgfSBmcm9tICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZmxhdENvbmZpZ3MgYXMgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1pbXBvcnQteCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IG5vZGVQbHVnaW4gZnJvbSAnZXNsaW50LXBsdWdpbi1uJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQge1xuICBkZWZpbmVDb25maWcsXG4gIGdsb2JhbElnbm9yZXNcbn0gZnJvbSAnZXNsaW50L2NvbmZpZyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHRzZXNsaW50IGZyb20gJ3R5cGVzY3JpcHQtZXNsaW50JztcblxuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7XG4gIElOX0hPVVNFX0VTTElOVF9QTFVHSU5fTkFNRSxcbiAgaW5Ib3VzZUVzbGludFBsdWdpblxufSBmcm9tICcuL2VzbGludC1ydWxlcy9pbi1ob3VzZS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgQ0xBVURFX1dPUktUUkVFU19JR05PUkVfR0xPQiB9IGZyb20gJy4vbGludC1pZ25vcmVzLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db25maWdzPzogKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpID0+IExpbnRlci5Db25maWdbXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdENvbnRleHQ/OiAoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9sZGVzdCBOb2RlIHZlcnNpb24gc2hpcHBlZCBzb3VyY2UgaGFzIHRvIHJ1biBvbiwgYXMgYSBzZW12ZXIgcmFuZ2U6IGEgbGlicmFyeSB0aGF0IGFsc28gcnVucyBpbnNpZGUgYW5cbiAgICogb2xkZXIgcnVudGltZSB0aGFuIGl0cyBvd24gdG9vbGluZyAoYW4gT2JzaWRpYW4gcmVuZGVyZXIsIHNheSkgbmFtZXMgdGhhdCBydW50aW1lJ3MgTm9kZSBoZXJlLiBXaGVuIG9taXR0ZWQsXG4gICAqIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgTm9kZSB2ZXJzaW9uIHNoaXBwZWQgc291cmNlIGhhcyB0byBydW4gb24sIGFzIGEgc2VtdmVyIHJhbmdlLiBXaGVuIG9taXR0ZWQsIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzXG4gICAqIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdldE5vZGVDb21wYXRDb25maWdzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dDtcbiAgcmVhZG9ubHkgbWluaW11bU5vZGVWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXJzIGhvbGRpbmcgdGhlIHByb2plY3QncyBzb3VyY2VzLCBieSBkZWZhdWx0IGBzcmNgIGFsb25lLiBBIHdvcmtzcGFjZSB3aG9zZSBwYWNrYWdlcyBlYWNoIGhhdmUgdGhlaXIgb3duXG4gICAqIGBzcmNgIGFkZHMgdGhlbSBoZXJlLCBzbyB0aGUgcnVsZXMga2V5ZWQgb24gYSBmaWxlJ3MgbmFtZSBpbnNpZGUgYSBzb3VyY2UgZm9sZGVyIHJlYWNoIHRob3NlIHBhY2thZ2VzIHRvby5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VGb2xkZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGwgZmlsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbGwgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWxsRmlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50ZXN0RmlsZXMsIC4uLnRoaXMuc2NyaXB0RmlsZXMsIC4uLnRoaXMucm9vdENvbmZpZ0ZpbGVzLCAuLi50aGlzLnNvdXJjZUZpbGVzXTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbnRleHQgb2YgYSBwcm9qZWN0IGxhaWQgb3V0IHRoZSBjb252ZW50aW9uYWwgd2F5OiBzb3VyY2VzIHVuZGVyIGBzcmNgLCBzY3JpcHRzIHVuZGVyIGBzY3JpcHRzYCwgdGVzdHNcbiAqIGJlc2lkZSB0aGUgc291cmNlcyBvciB1bmRlciBgX190ZXN0c19fYCwgYW5kIHRoZSBjb21taXRsaW50LCBFU0xpbnQgYW5kIFZpdGVzdCBjb25maWd1cmF0aW9ucyBhdCB0aGUgcm9vdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk6IEVzbGludENvbmZpZ0NvbnRleHQge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEVzbGludENvbmZpZ0NvbnRleHQoKTtcbiAgY29udGV4dC5zb3VyY2VGb2xkZXJzLnB1c2goUmVwb1BhdGhzLlNyYyk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgUmVwb1BhdGhzLkNvbW1pdGxpbnRDb25maWdUcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzLFxuICAgIFJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihSZXBvUGF0aHMuU2NyaXB0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuU3JjLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKFJlcG9QYXRocy5UZXN0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuTW9ja3MsIFJlcG9QYXRocy5BbnlQYXRoLCBSZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUZXN0VHMpLFxuICAgIC8qXG4gICAgICogQSBidWlsZC1zY3JpcHQgdGVzdCBpcyBhIFRFU1QsIGFuZCB0aGlzIGNvbnZlbnRpb24gcHV0cyBpdCBpbiBhIGAqLnRlc3QudHNgIHVuZGVyIGBzY3JpcHRzL2AgLS0gYmVzaWRlIHRoZVxuICAgICAqIHNjcmlwdCBpdCBjb3ZlcnMgcmF0aGVyIHRoYW4gdW5kZXIgYHNyYy9gLiBXaXRob3V0IHRoaXMgZ2xvYiBpdCBtYXRjaGVkIGBzY3JpcHRGaWxlc2AgYWxvbmUsIHNvIGV2ZXJ5IHJlbGF4YXRpb25cbiAgICAgKiB0aGF0IGtleXMgb24gYGNvbnRleHQudGVzdEZpbGVzYCBtaXNzZWQgaXQ6IGBuby1tYWdpYy1udW1iZXJzYCBmaXJlZCBvbiBhIHN1aXRlIHdob3NlIHdob2xlIHN1YmplY3QgaXMgcmVjb3JkZWRcbiAgICAgKiBudW1iZXJzLCBhbmQgYHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nYCBvbiB0aGUgcGVyLXN1aXRlIGZpeHR1cmUgZmFjdG9yaWVzIHRoZSBibG9jayBhdCB0aGUgYm90dG9tXG4gICAgICogb2YgYGdldFVuaWNvcm5Db25maWdzYCBzYXlzIHRlc3RzIGV4aXN0IHRvIGFsbG93LlxuICAgICAqXG4gICAgICogVGhlIGZpbGUgbm93IG1hdGNoZXMgQk9USCBsaXN0cywgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvdmVybGFwIHRvIHJlc29sdmU6IGV2ZXJ5dGhpbmcgc2NvcGVkIHRvXG4gICAgICogYGNvbnRleHQuc2NyaXB0RmlsZXNgIG9ubHkgdHVybnMgcnVsZXMgT0ZGIChgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgLCBgdW5pY29ybi9uby1wcm9jZXNzLWV4aXRgKSwgYm90aCBvZlxuICAgICAqIHdoaWNoIGEgc2NyaXB0IHRlc3Qgd2FudHMgYXMgbXVjaCBhcyB0aGUgc2NyaXB0IGRvZXMsIHNvIHRoZSB0d28gc2V0cyBjb21wb3NlIGluc3RlYWQgb2YgY29tcGV0aW5nLiBLZWVwIGl0IHRoYXRcbiAgICAgKiB3YXkgLS0gYSBydWxlIHR1cm5lZCBPTiBmb3IgYHNjcmlwdEZpbGVzYCB3b3VsZCBsYW5kIG9uIHRoZXNlIGZpbGVzIHRvbywgYW5kIGZsYXQtY29uZmlnIG9yZGVyLCBub3QgaW50ZW50LFxuICAgICAqIHdvdWxkIGRlY2lkZSB3aGljaCBzaWRlIHdvbi5cbiAgICAgKi9cbiAgICBqb2luKFJlcG9QYXRocy5TY3JpcHRzLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRlc3RUcylcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbnMgb2YgYSBnZW5lcmljIFR5cGVTY3JpcHQgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIG9wdGlvbnMuZWRpdENvbnRleHQ/Lihjb250ZXh0KTtcbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpLFxuICAgIC4uLmdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICAuLi4ob3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW1Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gfSlcbiAgICB9KSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb25zIG9mIEVTTGludCdzIG93biBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgcmVhZHMgaXQgdG8gbGVhcm4gd2hpY2ggY29yZSBydWxlcyB0aGlzXG4gKiBjb25maWd1cmF0aW9uIHNldHMgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW2VzbGludC5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnYWNjZXNzb3ItcGFpcnMnOiAnZXJyb3InLFxuICAgICAgICAnYXJyYXktY2FsbGJhY2stcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhbWVsY2FzZSc6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJlcG9ydHMgcGVyIGNvbW1lbnQgVE9LRU4sIHNvIGV2ZXJ5IGNvbnRpbnVhdGlvbiBsaW5lIG9mIGEgd3JhcHBlZCBgLy9gIGNvbW1lbnQgaXMgaXRzIG93biB0b2tlblxuICAgICAgICAgKiB0aGF0IHdvdWxkIGhhdmUgdG8gc3RhcnQgd2l0aCBhIGNhcGl0YWwg4oCUIHdoaWNoIGlzIGhvdyBwcm9zZSBlbmRzIHVwIHdpdGggY2FwaXRhbHMgbWlkLXNlbnRlbmNlLlxuICAgICAgICAgKiBgaWdub3JlQ29uc2VjdXRpdmVDb21tZW50c2AgZXhlbXB0cyBhIGxpbmUgY29tbWVudCB0aGF0IGRpcmVjdGx5IGZvbGxvd3MgYW5vdGhlciBvbmUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlXG4gICAgICAgICAqIHNoYXBlIG9mIGEgd3JhcHBlZCBibG9jaywgd2hpbGUgc3RpbGwgaG9sZGluZyBpdHMgRklSU1QgbGluZSB0byBhIGNhcGl0YWwuIEJsb2NrIGNvbW1lbnRzIG5lZWQgbm8gc3VjaFxuICAgICAgICAgKiBvcHRpb246IGEgYmxvY2sgY29tbWVudCBpcyBhIHNpbmdsZSB0b2tlbiBob3dldmVyIG1hbnkgbGluZXMgaXQgc3BhbnMuXG4gICAgICAgICAqIGBpZ25vcmVQYXR0ZXJuYCBjb3ZlcnMgdGhlIGhhbGYgdGhhdCBsZWF2ZXMgYmVoaW5kOiBhIGNvbW1lbnQgd2hvc2UgRklSU1Qgd29yZCBpcyBhIGNhbWVsQ2FzZSBpZGVudGlmaWVyIGlzXG4gICAgICAgICAqIGV4ZW1wdCwgc28gYSBjb21tZW50IHRoYXQgb3BlbnMgYnkgbmFtaW5nIGEgc3ltYm9sIGtlZXBzIHRoZSBuYW1lIGEgcmVhZGVyIGNhbiBncmVwIGluc3RlYWQgb2YgYSBQYXNjYWxDYXNlXG4gICAgICAgICAqIG9uZSB0aGF0IGV4aXN0cyBub3doZXJlLiBUaGUgcnVsZSBhbmNob3JzIHRoZSBwYXR0ZXJuIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCBhbmQgYFthLXpBLVowLTldYCBtYXRjaGVzXG4gICAgICAgICAqIG5vIHdoaXRlc3BhY2UsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggdGhhdCBmaXJzdCB3b3JkIOKAlCBvcmRpbmFyeSBsb3dlcmNhc2UgcHJvc2Ugc3RheXMgcmVwb3J0ZWQuIEJvdGhcbiAgICAgICAgICogb3B0aW9uIGJhZ3MgbmVlZCBpdCwgYW5kIGBibG9ja2Aga2VlcHMgaXRzIGB2OGAgZXhlbXB0aW9uIGJ5IGFsdGVybmF0aW9uIHJhdGhlciB0aGFuIGxvc2luZyBpdC5cbiAgICAgICAgICovXG4gICAgICAgICdjYXBpdGFsaXplZC1jb21tZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OHxbYS16XVthLXpBLVowLTldKltBLVpdJyB9LFxuICAgICAgICAgICAgbGluZTogeyBpZ25vcmVDb25zZWN1dGl2ZUNvbW1lbnRzOiB0cnVlLCBpZ25vcmVQYXR0ZXJuOiAnW2Etel1bYS16QS1aMC05XSpbQS1aXScgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgaWdub3JlczogZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgbmFtZXMsIHBsdXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdpdElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvKlxuICAgICAqIE9uIHRvcCBvZiBgLmdpdGlnbm9yZWAsIG5vdCBpbnN0ZWFkIG9mIGl0OiBnaXQgZXhjbHVkZXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIgdGhyb3VnaFxuICAgICAqIGAuZ2l0L2luZm8vZXhjbHVkZWAsIHdoaWNoIGBpbmNsdWRlSWdub3JlRmlsZWAgYWJvdmUgZG9lcyBub3QgcmVhZC4gU2VlIGBsaW50LWlnbm9yZXMudHNgLlxuICAgICAqL1xuICAgIGdsb2JhbElnbm9yZXMoW0NMQVVERV9XT1JLVFJFRVNfSUdOT1JFX0dMT0JdLCAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9jbGF1ZGUtd29ya3RyZWVzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2VuZXJpYyBsYXllcnMgb2YgdGhlIHNoYXJlZCBjb25maWd1cmF0aW9uLCB3aXRob3V0IHRoZSBnbG9iYWwgaWdub3Jlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyhwYXJhbXM6IEdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzUGFyYW1zKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgeyBjb250ZXh0IH0gPSBwYXJhbXM7XG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0RXNsaW50Q29yZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbkhvdXNlUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyh7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbjogcGFyYW1zLm1pbmltdW1Ob2RlVmVyc2lvbiB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb21tZW50c0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcmVjb21tZW5kZWRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICBleHRlbmRzOiBbY29tbWVudHNDb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LWNvbW1lbnRzL3JlcXVpcmUtZGVzY3JpcHRpb24nOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0LXgvcmVzb2x2ZXItbmV4dCc6IFtcbiAgICAgICAgICBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIoe1xuICAgICAgICAgICAgYWx3YXlzVHJ5VHlwZXM6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0SWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihnZXRSb290Rm9sZGVyKCkgPz8gJycsICcuZ2l0aWdub3JlJyk7XG4gIHJldHVybiBleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpID8gW2luY2x1ZGVJZ25vcmVGaWxlKGdpdGlnbm9yZVBhdGgpXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQSB0ZXN0IHJ1bnMgdW5kZXIgdGhlIHRlc3QgcnVubmVyIGluIE5vZGUgYW5kIGlzIG5ldmVyIGJ1bmRsZWQgaW50byBhbnl0aGluZyB0aGF0IHNoaXBzLlxuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1kZWZhdWx0LWV4cG9ydCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5Ib3VzZVBsdWdpbkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIFtJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUVdOiBpbkhvdXNlRXNsaW50UGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIE1lYXN1cmVkIG92ZXIgMzIgcGx1Z2lucyBidWlsdCBvbiB0aGlzIGNvbmZpZyBiZWZvcmUgaXQgd2FzIHR1cm5lZCBvbiAoMjAyNi0wOS0yNCk6IDI5IGhhZCBubyBmaW5kaW5nLFxuICAgICAgICAgKiB0aGUgb3RoZXIgdGhyZWUgaGFkIDggYmV0d2VlbiB0aGVtLCBldmVyeSBvbmUgYSBnZW51aW5lbHkgZGVhZCBsaW5rLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbm9vcC1hc3luYyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZXF1aXJlLXN1cGVyLWNhbGwnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb21wYXRDb25maWdzKHBhcmFtczogR2V0Tm9kZUNvbXBhdENvbmZpZ3NQYXJhbXMpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCB7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbiB9ID0gcGFyYW1zO1xuICBjb25zdCB2ZXJzaW9uT3B0aW9ucyA9IG1pbmltdW1Ob2RlVmVyc2lvbiA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZlcnNpb246IG1pbmltdW1Ob2RlVmVyc2lvbiB9O1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzLFxuICAgICAgaWdub3JlczogW1xuICAgICAgICAuLi5jb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgICAgLy8gRGV2LW9ubHkgdG9vbGluZyAoYnVpbGQsIGxpbnQsIHZlcnNpb24pIHJ1bnMgdmlhIGBqaXRpYCBpbiB0aGUgZGV2ZWxvcGVyJ3MgTm9kZSBlbnZpcm9ubWVudCBhbmQgbmV2ZXIgc2hpcHMsIHNvIHRoZSBzaGlwcGVkIHNvdXJjZSdzIE5vZGUgZmxvb3IgZG9lcyBub3QgYXBwbHkgdG8gaXQuXG4gICAgICAgIC4uLmNvbnRleHQuc2NyaXB0RmlsZXNcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG46IG5vZGVQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHZlcnNpb25PcHRpb25zXG4gICAgICAgIF0sXG4gICAgICAgICduL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBgQmxvYmAgYW5kIGBGaWxlYCBhcmUgRE9NIHdlYiBnbG9iYWxzIHByZXNlbnQgaW4gZXZlcnkgc3VwcG9ydGVkIGJyb3dzZXIgZW5naW5lLCBidXQgdGhlIHJ1bGUgYWxzbyBrbm93cyB0aGVtIGFzIE5vZGUncyBleHBlcmltZW50YWwgYnVpbHRpbnMgYW5kIGNhbm5vdCB0ZWxsIHdoaWNoIGlzIG1lYW50LiBJZ25vcmUgdGhlbSBnbG9iYWxseTsgZ2VudWluZWx5IG5ld2VyIEFQSXMgKGUuZy4gYEFib3J0U2lnbmFsLmFueWApIHN0YXkgZmxhZ2dlZC5cbiAgICAgICAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAnRmlsZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAuLi52ZXJzaW9uT3B0aW9uc1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFt7XG4gICAgZXh0ZW5kczogW3BlcmZlY3Rpb25pc3RDb25maWdzWydyZWNvbW1lbmRlZC1hbHBoYWJldGljYWwnXV0sXG4gICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKVxuICB9XSk7XG59XG5cbi8qKlxuICogTGF5b3V0IGJlbG9uZ3MgdG8gZHByaW50LiBPbmx5IHRoZSBgQHN0eWxpc3RpY2AgcnVsZXMgZHByaW50IGNhbm5vdCBleHByZXNzIGFyZSBrZXB0LCBlYWNoIHZlcmlmaWVkIGJ5IGZvcm1hdHRpbmcgYVxuICogdmlvbGF0aW5nIHByb2JlIHdpdGggdGhlIHNoYXJlZCBgZHByaW50Lmpzb25gIGFuZCBsaW50aW5nIHRoZSByZXN1bHQ6IHRoZSBydWxlIHN0aWxsIHJlcG9ydHMgdGhlcmUuIEV2ZXJ5IG90aGVyXG4gKiBydWxlIG9mIGBzdHlsaXN0aWMuY29uZmlncy5yZWNvbW1lbmRlZGAgd2FzIGRyb3BwZWQsIGJlY2F1c2UgZHByaW50IGZpeGVzIGl0IGFscmVhZHksIG9yIGJlY2F1c2UgaXQgZm91Z2h0IGRwcmludFxuICogKGB3cmFwLWlpZmVgLCB3aG9zZSBwYXJlbnRoZXNlcyBkcHJpbnQgc3RyaXBzLCBganN4LXF1b3Rlc2AgYWdhaW5zdCBgcXVvdGVTdHlsZWAsIGBvcGVyYXRvci1saW5lYnJlYWtgLCBgaW5kZW50YCkuXG4gKiBUaGUga2VwdCBydWxlcyBhZ3JlZSB3aXRoIHRoZSBzaGFyZWQgUHJldHRpZXIgYW5kIEJpb21lIGNvbmZpZ3VyYXRpb25zIHRvbywgc28gZWl0aGVyIGNhbiBvd24gbGF5b3V0IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUge0BsaW5rIEVzbGludENvbmZpZ0NvbnRleHR9LlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3MuXG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgICdAc3R5bGlzdGljJzogc3R5bGlzdGljXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLy8gVGhlIGRwcmludCBgYXJyb3dGdW5jdGlvbi51c2VQYXJlbnRoZXNlc2AgZGVmYXVsdCwgYG1haW50YWluYCwga2VlcHMgYHggPT4geGAuXG4gICAgICAgICdAc3R5bGlzdGljL2Fycm93LXBhcmVucyc6IFsnZXJyb3InLCAnYWx3YXlzJ10sXG4gICAgICAgIC8vIE5vdCBsYXlvdXQ6IGl0IHJlbW92ZXMgb3IgYWRkcyB0aGUgYnJhY2VzIHRoZW1zZWx2ZXMsIHdoaWNoIGRwcmludCBuZXZlciBkb2VzLlxuICAgICAgICAnQHN0eWxpc3RpYy9qc3gtY3VybHktYnJhY2UtcHJlc2VuY2UnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbjogJ25ldmVyJyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBwcm9wRWxlbWVudFZhbHVlc2AgaXMgdGhlIHJ1bGUncyBvd24gb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICBwcm9wRWxlbWVudFZhbHVlczogJ2Fsd2F5cycsXG4gICAgICAgICAgICBwcm9wczogJ25ldmVyJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIGRwcmludCBmb3JtYXR0ZXIga2VlcHMgYmxhbmsgbGluZXMgYXMgd3JpdHRlbiBhbmQgbmV2ZXIgaW5zZXJ0cyBvbmUuXG4gICAgICAgICdAc3R5bGlzdGljL2xpbmVzLWJldHdlZW4tY2xhc3MtbWVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4Y2VwdEFmdGVyT3ZlcmxvYWQ6IHRydWUsXG4gICAgICAgICAgICBleGNlcHRBZnRlclNpbmdsZUxpbmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgZm9ybWF0dGVyIGtlZXBzIGEgbnVtZXJpYyBsaXRlcmFsJ3MgdGV4dCwgc28gYC41YCBhbmQgYDIuYCBzdGF5LlxuICAgICAgICAnQHN0eWxpc3RpYy9uby1mbG9hdGluZy1kZWNpbWFsJzogJ2Vycm9yJyxcbiAgICAgICAgLy8gTm90IGxheW91dDogaXQgYXNrcyBmb3IgcGFyZW50aGVzZXMgdGhhdCBjaGFuZ2UgaG93IHRoZSBleHByZXNzaW9uIHJlYWRzLCB3aGljaCBkcHJpbnQgbmV2ZXIgYWRkcy5cbiAgICAgICAgJ0BzdHlsaXN0aWMvbm8tbWl4ZWQtb3BlcmF0b3JzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dTYW1lUHJlY2VkZW5jZTogdHJ1ZSxcbiAgICAgICAgICAgIGdyb3VwczogW1xuICAgICAgICAgICAgICBbJz09JywgJyE9JywgJz09PScsICchPT0nLCAnPicsICc+PScsICc8JywgJzw9J10sXG4gICAgICAgICAgICAgIFsnJiYnLCAnfHwnXSxcbiAgICAgICAgICAgICAgWydpbicsICdpbnN0YW5jZW9mJ11cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgZm9ybWF0dGVyIHJlcGxhY2VzIHRhYiBpbmRlbnRhdGlvbiBidXQgbGVhdmVzIGEgdGFiIGluc2lkZSBhIGNvbW1lbnQuXG4gICAgICAgICdAc3R5bGlzdGljL25vLXRhYnMnOiAnZXJyb3InLFxuICAgICAgICAvLyBUaGUgZHByaW50IGBxdW90ZVByb3BzYCBkZWZhdWx0IGlzIGBwcmVzZXJ2ZWAuXG4gICAgICAgICdAc3R5bGlzdGljL3F1b3RlLXByb3BzJzogWydlcnJvcicsICdjb25zaXN0ZW50LWFzLW5lZWRlZCddLFxuICAgICAgICAvLyBUaGUgZHByaW50IGBxdW90ZVN0eWxlYCBjb3ZlcnMgc3RyaW5nIGxpdGVyYWxzIG9ubHksIGFuZCBsZWF2ZXMgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggbm8gc3Vic3RpdHV0aW9uLlxuICAgICAgICAnQHN0eWxpc3RpYy9xdW90ZXMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd1RlbXBsYXRlTGl0ZXJhbHM6ICduZXZlcidcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBkcHJpbnQgZm9ybWF0dGVyIGFkZHMgdGhlIHNwYWNlIGFmdGVyIGAvL2AgYnV0IG5vdCBhZnRlciBgLypgIG9yIGJlZm9yZSBgKi9gLlxuICAgICAgICAnQHN0eWxpc3RpYy9zcGFjZWQtY29tbWVudCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgIGJhbGFuY2VkOiB0cnVlLFxuICAgICAgICAgICAgICBleGNlcHRpb25zOiBbJyonXSxcbiAgICAgICAgICAgICAgbWFya2VyczogWychJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgIGV4Y2VwdGlvbnM6IFsnLycsICcjJ10sXG4gICAgICAgICAgICAgIG1hcmtlcnM6IFsnLyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3RyaWN0VHlwZUNoZWNrZWQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWRcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIGpzeDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvamVjdFNlcnZpY2U6IHRydWUsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHRzY29uZmlnUm9vdERpcmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHBhcnNlciBvcHRpb24uXG4gICAgICAgICAgdHNjb25maWdSb290RGlyOiBnZXRSb290Rm9sZGVyKCkgPz8gJydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5JzogJ2Vycm9yJyxcbiAgICAgICAgLy8gVGhlIHJ1bGUncyBvd24gYHByb3BlcnR5YCBkZWZhdWx0LCBzcGVsbGVkIGFzIGEgYmFyZSBzZXZlcml0eSBzbyBpdCBzdGF5cyB0aGUgcnVsZSdzIGRlZmF1bHQgcmF0aGVyIHRoYW4gYSBjb3B5IG9mIGl0LlxuICAgICAgICAvLyBEbyBOT1QgcGFzcyBgJ21ldGhvZCdgIGZvciB0aWRpbmVzczogdGhlIG1ldGhvZCBmb3JtIGtlZXBzIHBhcmFtZXRlcnMgYml2YXJpYW50LCBkcm9wcyBgcmVhZG9ubHlgICh0aGUgcnVsZSdzIG93biBmaXhlclxuICAgICAgICAvLyBtZXNzYWdlIHNheXMgc28pLCBhbmQgbWFrZXMgYEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZGAgZmlyZSBvbiBldmVyeSBmb3J3YXJkZWQgYmFnIG1lbWJlciwgd2hpY2ggaXMgd2hhdCB0aGVcbiAgICAgICAgLy8gYHRoaXM6IHZvaWRgIGJvaWxlcnBsYXRlIHVzZWQgdG8gcGF5IGZvci4gRG8gTk9UIGRlbGV0ZSB0aGUgbGluZSBlaXRoZXIgLSB0aGUgcnVsZSBpcyBpbiBubyBwcmVzZXQsIHNvIHRoYXQgdHVybnMgaXQgb2ZmLlxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L21ldGhvZC1zaWduYXR1cmUtc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzJzogWydlcnJvcicsIHtcbiAgICAgICAgICBjaGVja1RoZW5hYmxlczogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dBc1RoaXNQYXJhbWV0ZXI6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dlZE5hbWVzOiBbXG4gICAgICAgICAgICAndGhhdCdcbiAgICAgICAgICBdXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGFyZ3NgIGlzIGFuIEVTTGludCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnczogJ2FsbCcsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc0lnbm9yZVBhdHRlcm5gIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnM6ICdhbGwnLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGRlc3RydWN0dXJlZEFycmF5SWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGlnbm9yZVJlc3RTaWJsaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGB2YXJzSWdub3JlUGF0dGVybmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICB2YXJzSWdub3JlUGF0dGVybjogJ15fJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItcmVhZG9ubHknOiAnZXJyb3InXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2RvdC1ub3RhdGlvbic6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dQcml2YXRlQ2xhc3NQcm9wZXJ0eUFjY2VzczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1Byb3RlY3RlZENsYXNzUHJvcGVydHlBY2Nlc3M6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICB2ZXJzaW9uOiAnZGV0ZWN0J1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFt1bmljb3JuLmNvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZXNlIGVudHJpZXMgYXJlIG5vdCBhYmJyZXZpYXRpb25zIHRvIGJlIGV4cGFuZGVkIOKAlCB0aGV5IGFyZSBlc3RhYmxpc2hlZCB2b2NhYnVsYXJ5IGhlcmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJyYW5kOiBgZGV2YCwgYGxpYmAsIGB1dGlsYC9gdXRpbHNgIHNwZWxsIHRoZSBwcm9kdWN0J3Mgb3duIG5hbWUuIExlZnQgb24sIHRoZSBydWxlIHJld3JpdGVzXG4gICAgICAgICAqIGBSZXBvUGF0aHNgIHRvIGBPYnNpZGlhbkRldmVsb3BtZW50VXRpbGl0aWVzUmVwb1BhdGhzYCBhbmQgYGdldExpYkRlYnVnZ2VyYCB0b1xuICAgICAgICAgKiBgZ2V0TGlicmFyeURlYnVnZ2VyYCwgcmVuYW1pbmcgZXhwb3J0ZWQgQVBJIGFmdGVyIHRoZSBwYWNrYWdlIGl0IGJlbG9uZ3MgdG8uXG4gICAgICAgICAqXG4gICAgICAgICAqIENvbnZlbnRpb246IGBwYXJhbXNgIGlzIHRoZSBwYXJhbWV0ZXItYmFnIGNvbnZlbnRpb24sIGVuZm9yY2VkIGJ5XG4gICAgICAgICAqIGB0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2hgLCB3aGljaCByZXF1aXJlcyBiYWcgdHlwZXMgdG8gYmUgbmFtZWRcbiAgICAgICAgICogYDxPd25lcj5QYXJhbXNgIC8gYDxPd25lcj5PcHRpb25zYC4gRXhwYW5kaW5nIGl0IHRvIGBQYXJhbWV0ZXJzYCB3b3VsZCBwdXQgdGhlIHR3byBydWxlcyBpbiBkaXJlY3RcbiAgICAgICAgICogY29udHJhZGljdGlvbiBhbmQgYnJlYWsgMzAwKyBleHBvcnRlZCB0eXBlIG5hbWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZXNlcnZlZCB3b3JkczogYSBiYXJlIGBhcmdzYCwgYGZuYCwgYHN0cmAsIGBtb2RgIG9yIGBldnRgIGV4cGFuZHMgdG8gYW4gaWRlbnRpZmllciB0aGF0IGlzIGFscmVhZHlcbiAgICAgICAgICogdGFrZW4sIHNvIHRoZSBydWxlIHN1Z2dlc3RzIGAkYXJndW1lbnRzYCwgYCRmdW5jdGlvbmAsIGFuZCBzbyBvbi4gU3BlbGwgdGhvc2UgYCRhcmd1bWVudHNgIC9cbiAgICAgICAgICogYCRmdW5jdGlvbmAgaW5zdGVhZCDigJQgYSBgJGAgcHJlZml4IHJlYWRzIGJldHRlciB0aGFuIGEgdHJhaWxpbmcgdW5kZXJzY29yZS4gVGhpcyBpcyBkZWxpYmVyYXRlbHkgTk9UXG4gICAgICAgICAqIGNvbmZpZ3VyZWQgYXMgYSBjdXN0b20gcmVwbGFjZW1lbnQ6IHVuaWNvcm4gc3Vic3RpdHV0ZXMgYXQgdGhlIHdvcmQgbGV2ZWwgaW5zaWRlIGNvbXBvdW5kIG5hbWVzLCBzb1xuICAgICAgICAgKiByZWRpcmVjdGluZyB0aGUgd2hvbGUgZW50cnkgdHVybnMgYGFzeW5jRm5gIGludG8gYGFzeW5jJGZ1bmN0aW9uYC4gQ29tcG91bmRzIHdhbnQgdGhlIHBsYWluIGV4cGFuc2lvblxuICAgICAgICAgKiAoYGFzeW5jRnVuY3Rpb25gKTsgb25seSB0aGUgYmFyZSwgZ2VudWluZWx5LWNvbGxpZGluZyBpZGVudGlmaWVycyB0YWtlIHRoZSBgJGAgZm9ybS5cbiAgICAgICAgICpcbiAgICAgICAgICogRG9tYWluIHdvcmRzOiBgZG9jYC9gZG9jc2AsIGBlbnZgLCBgZGlzdGAgYW5kIGBzcmNgIGFyZSB0aGUgY2xlYXJlciBzcGVsbGluZyBpbiB0aGlzIGNvZGViYXNlLlxuICAgICAgICAgKiBFeHBhbmRpbmcgYGRvY2AgYWxzbyBwaWNrcyB0aGUgd3Jvbmcgd29yZCDigJQgdGhlIGBhcGktZG9jLSpgIG1vZHVsZXMgZ2VuZXJhdGUgQVBJICpkb2N1bWVudGF0aW9uKiwgbm90XG4gICAgICAgICAqIGRvY3VtZW50cy4gYHNyY2AgYWRkaXRpb25hbGx5IGNvcnJ1cHRzIGNvZGU6IHRoZSBmaXhlciByZW5hbWVzIHRoZSBgU3JjYCBtZW1iZXIgb2YgdGhlIGV4cG9ydGVkXG4gICAgICAgICAqIGBPYnNpZGlhblBsdWdpblJlcG9QYXRoc2AgLyBgUmVwb1BhdGhzYCBlbnVtcyB3aGlsZSBsZWF2aW5nIGV2ZXJ5IGAuU3JjYCByZWZlcmVuY2VcbiAgICAgICAgICogZGFuZ2xpbmcsIGJlY2F1c2UgYGNoZWNrUHJvcGVydGllc2AgZXhlbXB0cyBwcm9wZXJ0eSBhY2Nlc3NlcyBidXQgbm90IHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwb2ludCBhdC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBlbnRyaWVzIHByb3RlY3RzIHRoZXNlIHBlcm1hbmVudGx5OyBhbiBgYWxsb3dMaXN0YCB3b3VsZCBpbnN0ZWFkIG5lZWQgZXZlcnlcbiAgICAgICAgICogYWZmZWN0ZWQgaWRlbnRpZmllciBlbnVtZXJhdGVkIGJ5IGhhbmQgYW5kIHJlLWVudW1lcmF0ZWQgZm9yIGV2ZXJ5IG5ldyBvbmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5PVEU6IHRoaXMgcnVsZSdzIGF1dG9maXggaXMgTk9UIHJlZmVyZW5jZS1hd2FyZSBmb3IgZGVjbGFyYXRpb25zIHRoYXQgcGFydGljaXBhdGUgaW4gYSBjb250cmFjdCDigJRcbiAgICAgICAgICogZW51bSBtZW1iZXJzLCBpbnRlcmZhY2UgbWVtYmVycywgYW5kIFR5cGVTY3JpcHQgcGFyYW1ldGVyIHByb3BlcnRpZXMgKGBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5XG4gICAgICAgICAqIGVsOiBIVE1MRWxlbWVudClgKSBhcmUgcmVuYW1lZCB3aGlsZSBgdGhpcy5lbGAgYW5kIGBFbnVtLk1lbWJlcmAgcmVmZXJlbmNlcyBhcmUgbGVmdCBkYW5nbGluZy4gQXBwbHlcbiAgICAgICAgICogaXRzIHJlcG9ydHMgYnkgaGFuZDsgbmV2ZXIgcnVuIGAtLWZpeGAgb3ZlciBpdC5cbiAgICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgZ29vZCBydWxlLCBidXQgaXRzIGRlZmF1bHQgcHJlZml4ZXMgZm9yY2UgdW5ncmFtbWF0aWNhbCBuYW1lczogYG1lbWJlclBhZ2VFeGlzdHNgIHdvdWxkIGJlY29tZVxuICAgICAgICAgKiBgaXNNZW1iZXJQYWdlRXhpc3RzYCByYXRoZXIgdGhhbiBgZG9lc01lbWJlclBhZ2VFeGlzdGAuIFRoZXNlIGVudHJpZXMgRVhURU5EIHRoZSBkZWZhdWx0cyAoYGlzYCxcbiAgICAgICAgICogYGhhc2AsIGBjYW5gLCBgc2hvdWxkYCwgLi4uKSByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbSwgc28gYSBib29sZWFuIHdpdGggbm8gYm9vbGVhbi1yZWFkaW5nIHByZWZpeFxuICAgICAgICAgKiBhdCBhbGwgaXMgc3RpbGwgcmVqZWN0ZWQgLS0gdGhlIHJ1bGUganVzdCBzdG9wcyBpbnNpc3RpbmcgdGhlIHByZWZpeCBjb21lIGZyb20gYSBzaG9ydGVyIGxpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBsaXN0IGlzIGJpZGlyZWN0aW9uYWw6IGFkZGluZyBhIHByZWZpeCBhbHNvIGFzc2VydHMgdGhhdCBldmVyeXRoaW5nIG5hbWVkIHdpdGggaXQgSVMgYSBib29sZWFuLlxuICAgICAgICAgKiBgY2hlY2tgIGVhcm5zIGl0cyBwbGFjZSBvbiBib3RoIGNvdW50cywgc2luY2UgdGhlIGhhbmRmdWwgb2Ygbm9uLWJvb2xlYW4gYGNoZWNrKmAgbmFtZXMgaXQgc3VyZmFjZWRcbiAgICAgICAgICogd2VyZSBnZW51aW5lbHkgbWlzLW5hbWVkICh2b2lkIGZ1bmN0aW9ucyB0aGF0IHRocm93LCBhIHByb2JlIHJldHVybmluZyBhbiBIVFRQIHN0YXR1cykuIGB0ZXN0YCB3YXNcbiAgICAgICAgICogbWVhc3VyZWQgYW5kIHJlamVjdGVkOiBpdCB3b3VsZCB2YWxpZGF0ZSBmaXZlIGB0ZXN0KmAgbGluayBwcmVkaWNhdGVzIHRoYXQgcmVhZCBiZXR0ZXIgYXMgYGlzKmBcbiAgICAgICAgICogYW55d2F5LCBhdCB0aGUgY29zdCBvZiByZW5hbWluZyBTQ1JFQU1JTkdfQ0FTRSB0ZXN0IGZpeHR1cmVzIGFuZCB0aGUgYHRlc3RDb3ZlcmFnZWAvYHRlc3RXYXRjaGBcbiAgICAgICAgICogcnVubmVycyB0aGF0IGRlbGliZXJhdGVseSBtaXJyb3IgdGhlIGB0ZXN0OmNvdmVyYWdlYC9gdGVzdDp3YXRjaGAgbnBtIHNjcmlwdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZWZpeGVzOiB7XG4gICAgICAgICAgICAgIGFsbG93czogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hlY2s6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiB0cnVlLFxuICAgICAgICAgICAgICBkb2VzOiB0cnVlLFxuICAgICAgICAgICAgICBpbmNsdWRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgbXVzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbmVlZHM6IHRydWUsXG4gICAgICAgICAgICAgIHN1cHBvcnRzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBVbnNhdGlzZmlhYmxlIGFsb25nc2lkZSBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgLCB3aGljaCBpcyBjb25maWd1cmVkIGhlcmUgYXMgYSBwbGFpblxuICAgICAgICAgKiBhbHBoYWJldGljYWwgc29ydC4gVGhpcyBydWxlIHdhbnRzIGEgY2F0ZWdvcnkgb3JkZXIgKGFsbCBmaWVsZHMsIHRoZW4gdGhlIGNvbnN0cnVjdG9yLCB0aGVuIGFsbFxuICAgICAgICAgKiBtZXRob2RzKSwgc28gdGhlIGV4dHJlbWVseSBjb21tb24gYHByaXZhdGUgX3hgIGZpZWxkIHBhaXJlZCB3aXRoIGEgYHB1YmxpYyBnZXQgeCgpYCBhY2Nlc3NvciBpc1xuICAgICAgICAgKiByZWplY3RlZCBieSB3aGljaGV2ZXIgcnVsZSBsb3NlczogYWxwaGFiZXRpY2FsbHkgdGhlIGFjY2Vzc29yIHByZWNlZGVzIHRoZSBmaWVsZCwgYnkgY2F0ZWdvcnkgdGhlXG4gICAgICAgICAqIGZpZWxkIHByZWNlZGVzIHRoZSBhY2Nlc3Nvci4gVW5saWtlIGBwcmVmZXItZ2xvYmFsLXRoaXNgIHRoZSBjbGFzaCBwcm9kdWNlcyBub1xuICAgICAgICAgKiBgRVNMaW50Q2lyY3VsYXJGaXhlc1dhcm5pbmdgLCBvbmx5IGJlY2F1c2UgdGhpcyBydWxlIHNoaXBzIG5vIGZpeGVyIC0tIGJvdGggcnVsZXMgYXJlIGBlcnJvcmAsIHNvIG5vXG4gICAgICAgICAqIGFycmFuZ2VtZW50IG9mIG1lbWJlcnMgc2F0aXNmaWVzIHRoZW0gYm90aC4gVGhlIGFscGhhYmV0aWNhbCBzb3J0IGlzIHRoZSBvbmUgYWxyZWFkeSByb2xsZWQgb3V0XG4gICAgICAgICAqIGFjcm9zcyB0aGUgcGx1Z2lucyBjb25zdW1pbmcgdGhpcyBjb25maWcsIHNvIGl0IGtlZXBzIHByZWNlZGVuY2UuIFJlLWVuYWJsaW5nIHRoaXMgcnVsZSB3b3VsZCBtZWFuXG4gICAgICAgICAqIGdpdmluZyBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgIGEgbWF0Y2hpbmcgYGdyb3Vwc2Agb3B0aW9uIGFuZCByZW9yZGVyaW5nIGV2ZXJ5IGNsYXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vY29uc2lzdGVudC1jbGFzcy1tZW1iZXItb3JkZXInOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgcmVwb3J0IGlzIGBuZXcgRXJyb3IoKS5zdGFja2AsIHdoaWNoIGNhcHR1cmVzIGEgc3RhY2sgdHJhY2UgYW5kIG5ldmVyIHN1cmZhY2VzIGl0cyBtZXNzYWdlLlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3QgdGVsbCB0aGF0IGZyb20gYW4gZXJyb3IgdGhhdCBpcyBhY3R1YWxseSB0aHJvd24gYXQgYSB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBObyBiYXJlIGBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKWAgaXMgbGVmdCBmb3IgaXQgdG8gY2F0Y2g6IGV2ZXJ5IHNpdGUgbm93IGJ1aWxkcyBpdHMgYWdncmVnYXRlXG4gICAgICAgICAqIHRocm91Z2ggYGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yYCwgd2hpY2ggZ2l2ZXMgaXQgYSBtZXNzYWdlIHRoYXQgbmFtZXMgdGhlIGZhaWx1cmUuIEFuIGVtcHR5IG9uZSBpc1xuICAgICAgICAgKiBsb3NzeSBpbiBhIHdheSB0aGF0IG9ubHkgc2hvd3MgdXAgb3V0c2lkZSB0aGlzIGxpYnJhcnkg4oCUIGBlcnJvclRvU3RyaW5nYCB3YWxrcyBgZXJyb3JzYCBhbmQgcHJpbnRzXG4gICAgICAgICAqIHRoZSB3aG9sZSB0cmVlLCB3aGlsZSBldmVyeXRoaW5nIHJlYWRpbmcgYG1lc3NhZ2VgIHNlZXMgYW4gZW1wdHkgc2VudGVuY2UuIFRoZSBoZWxwZXIgbGl2ZXMgaW4gaXRzXG4gICAgICAgICAqIG93biBsZWFmIGBhZ2dyZWdhdGUtZXJyb3IudHNgIHJhdGhlciB0aGFuIGluIGBlcnJvci50c2AgcHJlY2lzZWx5IHNvIHRoYXQgYGRpc3Bvc2FibGUudHNgIGNhbiByZWFjaFxuICAgICAgICAgKiBpdCwgd2hpY2ggaXQgY291bGQgbm90IHdoaWxlIHRoZSBvbmx5IGNvcHkgc2F0IGluIGEgbW9kdWxlIGltcG9ydGluZyBpdCBiYWNrLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vZXJyb3ItbWVzc2FnZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmb3IgYG5vZGU6cGF0aGAgaXMgYSBkZWZhdWx0IGltcG9ydCwgYnV0IHRoaXMgY29kZWJhc2UgaW1wb3J0cyBpdHMgbWVtYmVycyBieSBuYW1lXG4gICAgICAgICAqIHRocm91Z2hvdXQsIGNvbnNpc3RlbnRseSB3aXRoIGV2ZXJ5IG90aGVyIGBub2RlOmAgbW9kdWxlIGl0IHVzZXMuIENvbmZpZ3VyZSB0aGUgcnVsZSB0byBlbmZvcmNlIHRoZVxuICAgICAgICAgKiBzdHlsZSBhY3R1YWxseSBpbiB1c2UgcmF0aGVyIHRoYW4gYW5ub3RhdGUgMTcgc2l0ZXMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIGNoYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2ltcG9ydC1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAvLyBLZXllZCBieSB0aGUgVU5QUkVGSVhFRCBtb2R1bGUgbmFtZTogdGhlIHJ1bGUncyBvd24gdGFibGUgdXNlcyBgcGF0aGAsIHNvIGEgYG5vZGU6cGF0aGAga2V5IG5ldmVyIG1hdGNoZXMuXG4gICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICBuYW1lZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjb3VudHMgY29uc3RydWN0b3IgY2FsbHMgYW5kIGNvdW50cyB0aHJvdWdoIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIHNvIGl0cyBkZWZhdWx0IG9mIDNcbiAgICAgICAgICogcmVwb3J0cyBvcmRpbmFyeSBjb21wb3NpdGlvbjogYFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignYm9vbScpKWAgaW5zaWRlIGFuIGFzc2VydGlvbiwgYSB0ZXN0IGZpeHR1cmVcbiAgICAgICAgICogYnVpbHQgYXMgYGNyZWF0ZVR5cGVJbmZvKHsgbWV0aG9kczogW2NyZWF0ZU1lbWJlckluZm8oeyAuLi4gfSldIH0pYCwgYHRoaXMuYWRkQ2hpbGQobmV3IEModGhpcy5hcHApKWBcbiAgICAgICAgICogaW5zaWRlIGEgcGFyYW1zIGJhZy4gUmFpc2luZyB0aGUgbGltaXQgYnkgb25lIGNsZWFycyBldmVyeSByZXBvcnQgaGVyZSB3aGlsZSBzdGlsbCBjYXRjaGluZyB0aGVcbiAgICAgICAgICogZ2VudWluZWx5IHVucmVhZGFibGUgbmVzdGluZyB0aGUgcnVsZSBpcyBmb3IuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9tYXgtbmVzdGVkLWNhbGxzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4OiA0XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAndW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBQcm9wZXJ0eSBhbmQgbWVtYmVyIG5hbWVzIGFyZSBjaGVja2VkIHRvbywgc28gYW4gYWJicmV2aWF0aW9uIGNhbm5vdCBzdXJ2aXZlIGJ5IGxpdmluZyBvbiBhblxuICAgICAgICAgICAgICogb2JqZWN0IHJhdGhlciB0aGFuIGluIGEgdmFyaWFibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIHJ1bGUgaXMgcHVyZWx5IHN5bnRhY3RpYzogaXQgY2Fubm90IHRlbGwgYSBtZW1iZXIgd2UgZGVjbGFyZSBmcm9tIG9uZSBiZWxvbmdpbmcgdG8gYVxuICAgICAgICAgICAgICogZGVwZW5kZW5jeSwgYW5kIGl0IG9mZmVycyBubyBhdXRvZml4IGZvciBwcm9wZXJ0aWVzIChtZWFzdXJlZDogNjgxIGhpdHMsIDAgd2l0aCBhIGZpeGVyKS4gU2l0ZXNcbiAgICAgICAgICAgICAqIG5hbWluZyBhIGZvcmVpZ24gbWVtYmVyIC0tIGBEb21FbGVtZW50SW5mby5hdHRyYCwgYEV2YWxJbk9ic2lkaWFuUGFyYW1zLmZuYCwgYW5kIHRoZSBsaWtlIC0tIGFyZVxuICAgICAgICAgICAgICogdGhlcmVmb3JlIGltcG9zc2libGUgdG8gc2F0aXNmeSBhbmQgY2FycnkgYW4gaW5saW5lIGRpc2FibGUsIHNvIGV2ZXJ5dGhpbmcgc3RpbGwgcmVwb3J0ZWQgaXMgb3Vyc1xuICAgICAgICAgICAgICogdG8gcmVuYW1lLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFdoZW4gcmVuYW1pbmcgdGhlIHJlc3QsIG5vdGUgdGhhdCBgdHNjYCBhbG9uZSBpcyBOT1QgYSBzdWZmaWNpZW50IGdhdGU6IG9iamVjdC1saXRlcmFsIGtleXMgaW5cbiAgICAgICAgICAgICAqIGxvb3NlbHkgdHlwZWQgcG9zaXRpb25zIChgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBiYXRjaGVkQXJndW1lbnRzOiAuLi4gfV0pYCkgYXJlIG5vdCBjb250ZXh0dWFsbHlcbiAgICAgICAgICAgICAqIHR5cGVkLCBzbyBhIHJlbmFtZSBsZWF2ZXMgdGhlbSBiZWhpbmQgYW5kIGJyZWFrcyB0aGUgc3VpdGUgd2hlcmUgdGhlIHR5cGUgY2hlY2tlciBzZWVzIG5vdGhpbmcuXG4gICAgICAgICAgICAgKiBSZW5hbWUgaW4gc21hbGwgYmF0Y2hlcyB3aXRoIHRoZSBmdWxsIHRlc3QgcnVuIGluIHRoZSBsb29wLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBkaXNhYmxlZCByZXBsYWNlbWVudHMgYmVsb3cgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW9ucyB0byBiZVxuICAgICAgICAgICAgICogZXhwYW5kZWQuIGBlbGAgaXMgZXhlbXB0IGJlY2F1c2UgT2JzaWRpYW4gbmFtZXMgZXZlcnkgZWxlbWVudCBtZW1iZXIgdGhhdCB3YXkgLS0gYGNvbnRhaW5lckVsYCxcbiAgICAgICAgICAgICAqIGBjb250ZW50RWxgLCBgaW5wdXRFbGAsIGBzZWxlY3RFbGAgLS0gc28gZXhwYW5kaW5nIG91cnMgdG8gYCpFbGVtZW50YCB3b3VsZCBsZWF2ZSBvdXIgY29tcG9uZW50c1xuICAgICAgICAgICAgICogcmVhZGluZyBpbmNvbnNpc3RlbnRseSBiZXNpZGUgdGhlIE9ic2lkaWFuIG9uZXMgdGhleSBzaXQgbmV4dCB0by4gRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBhbHNvXG4gICAgICAgICAgICAgKiBjb3ZlcnMgY29tcG91bmQgbmFtZXMsIHdoaWNoIGlzIDcyIHNpdGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGVhY2ggbmVlZCBhbiBpbmxpbmUgZGlzYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBgcmVmYCBpcyBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYEFzeW5jRXZlbnRSZWZgIGlzIHRoZSBhc3luYyBjb3VudGVycGFydCBvZiBPYnNpZGlhbidzXG4gICAgICAgICAgICAgKiBgRXZlbnRSZWZgLCBoYW5kZWQgdG8gdGhlIHNhbWUgYG9mZnJlZmAgLyBgcmVnaXN0ZXJFdmVudGAgc2hhcGVzLCBzbyB0aGUgdHdvIG5hbWVzIGhhdmUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAqIHRvIHJlYWQgYXMgYSBwYWlyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICByZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogYGF0dHJgIC8gYGF0dHJzYCBhcmUgT2JzaWRpYW4ncyBvd246IGBjcmVhdGVFbCgnYScsIHsgYXR0cjogeyAuLi4gfSB9KWAgdGFrZXMgdGhlbSBieSB0aG9zZVxuICAgICAgICAgICAgICAgKiBuYW1lcyBvbiBgRG9tRWxlbWVudEluZm9gLCBzbyBvdXJzIGhhdmUgdG8gbWF0Y2ggdG8gYmUgcGFzc2VkIHRocm91Z2guIGBwcm9wc2AgaXMgdGhlXG4gICAgICAgICAgICAgICAqIHVuaXZlcnNhbCBjb21wb25lbnQgdm9jYWJ1bGFyeSwgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb24gYHBhcmFtc2AgaXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRyOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXR0cnM6IGZhbHNlLFxuICAgICAgICAgICAgICBkZXY6IGZhbHNlLFxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBFdmVyeSBgZGlyYCBoZXJlIGlzIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnksIG5ldmVyIGEgZGlyZWN0aW9uLCBzbyB0aGUgcnVsZSBpcyBuYXJyb3dlZCB0byB0aGVcbiAgICAgICAgICAgICAgICogb25lIGV4cGFuc2lvbiByYXRoZXIgdGhhbiBsZWZ0IG9mZmVyaW5nIGEgY2hvaWNlIGl0IGNhbm5vdCBtYWtlLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gVGhpcyBpcyB0aGUgcnVsZSdzIG93biByZXBsYWNlbWVudCBrZXksIHdoaWNoIGhhcyB0byBiZSBzcGVsbGVkIHRoZSB3YXkgdGhlIHJ1bGUgcmVhZHMgaXQuXG4gICAgICAgICAgICAgIGRpcjoge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2M6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2NzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZWw6IGZhbHNlLFxuICAgICAgICAgICAgICBlbnY6IGZhbHNlLFxuICAgICAgICAgICAgICBsaWI6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZjogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZnM6IGZhbHNlLFxuICAgICAgICAgICAgICBzcmM6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbHM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmV4dCBzaXggcnVsZXMgYWxsIHN1Z2dlc3QgYW4gQVBJIG5ld2VyIHRoYW4gdGhpcyBwcm9qZWN0J3MgYGxpYmAgKGBFUzIwMjJgKSwgc28gZm9sbG93aW5nIGFueSBvZlxuICAgICAgICAgKiB0aGVtIGZhaWxzIHRvIGNvbXBpbGUuIFRoZSBPYnNpZGlhbiBwbHVnaW4gbGF5ZXIgdGFrZXMgdGhlIGZsb29yIGZyb20gdGhlIG9sZGVzdCBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdFxuICAgICAgICAgKiBjYW4gc3RpbGwgcnVuIGN1cnJlbnQgT2JzaWRpYW4sIHdoaWNoIHJlY29yZHMgYGVjbWFTY3JpcHRWZXJzaW9uOiBcIkVTMjAyMlwiYC4gRWFjaCBpcyBvZmYgYXQgdGhlIGNvbmZpZ1xuICAgICAgICAgKiBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgcGVyIHNpdGUsIGJlY2F1c2Ugbm9uZSBjYW4gZXZlciBiZSBzYXRpc2ZpZWQgd2hpbGUgdGhhdCBmbG9vciBob2xkcy4gUmV2aXNpdFxuICAgICAgICAgKiB0aGVtIHRvZ2V0aGVyIGlmIHRoZSBmbG9vciBtb3Zlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogYEFycmF5I3RvUmV2ZXJzZWRgIGFuZCBgQXJyYXkjdG9Tb3J0ZWRgIGFyZSBFUzIwMjMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1hcnJheS1yZXZlcnNlJzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLWFycmF5LXNvcnQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNvbnRpbnVlYCBpbnNpZGUgYSBuZXN0ZWQgbG9vcCBpcyBvcmRpbmFyeSwgcmVhZGFibGUgY29udHJvbCBmbG93IGhlcmUuIFRoZSBydWxlJ3MgcmVtZWR5IGlzIHRvXG4gICAgICAgICAqIGV4dHJhY3QgZXZlcnkgc3VjaCBsb29wIGludG8gaXRzIG93biBmdW5jdGlvbiwgd2hpY2ggc3ByZWFkcyBvbmUgY29oZXJlbnQgdHJhdmVyc2FsIGFjcm9zcyB0d29cbiAgICAgICAgICogZGVjbGFyYXRpb25zIHdpdGhvdXQgbWFraW5nIGFueXRoaW5nIGNsZWFyZXIuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1icmVhay1pbi1uZXN0ZWQtbG9vcCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3Qgc2VlIHRocm91Z2ggYSBob2lzdGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBzbyBpdCB0cmVhdHMgYSBiaW5kaW5nIHRoYXQgYSBuZXN0ZWRcbiAgICAgICAgICogZnVuY3Rpb24gYWxyZWFkeSByZWFkIGFzIHVudXNlZCBiZWZvcmUgdGhlIGV4aXQuIEluIGBydW5XaXRoVGltZW91dGAgdGhhdCBpcyBgbGV0IGlzQ29tcGxldGVkYCwgd2hpY2hcbiAgICAgICAgICogYHJ1bigpYCBhbmQgYGlubmVyVGltZW91dCgpYCBib3RoIHRvdWNoIHdoaWxlIHRoZSBgUHJvbWlzZS5yYWNlYCBhYm92ZSB0aGUgZXhpdCBpcyBzdGlsbCBydW5uaW5nIC0tXG4gICAgICAgICAqIG1vdmluZyB0aGUgZGVjbGFyYXRpb24gcGFzdCB0aGUgZXhpdCwgYXMgdGhlIHJ1bGUgYXNrcywgd291bGQgbGVhdmUgdGhvc2UgcmVhZHMgaW4gdGhlIHRlbXBvcmFsIGRlYWRcbiAgICAgICAgICogem9uZS4gSXRzIG93biBmaXhlciBkZWNsaW5lcyBhbGwgMTUgc2l0ZXMgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBjYW5ub3QgcHJvdmUgdGhlbSBzYWZlLCBzbyBmb2xsb3dpbmdcbiAgICAgICAgICogdGhlIHJ1bGUgaXMgZW50aXJlbHkgbWFudWFsLiBXaGF0IGlzIGxlZnQgYWZ0ZXIgdGhhdCBpcyBwbGFjZW1lbnQgc3R5bGU6IHRoZSByZW1haW5pbmcgcmVwb3J0cyBhcmVcbiAgICAgICAgICogbmFtZWQgY29uc3RhbnRzIGFuZCBkZXJpdmVkIHBhdGhzIGRlbGliZXJhdGVseSBncm91cGVkIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlvbiwgYW5kIHB1c2hpbmcgZWFjaCBvbmVcbiAgICAgICAgICogYmVsb3cgdGhlIGZpcnN0IGd1YXJkIHNwbGl0cyBhIGNvaGVzaXZlIGJsb2NrIHRvIG5vIGJlbmVmaXQuIFRoZSB0aHJlZSBzaXRlcyB3aGVyZSBkZWZlcnJpbmcgc2tpcHBlZFxuICAgICAgICAgKiByZWFsIHdvcmsgKGEgc2Vjb25kIGBjb21wdXRlTmVlZGVkRXhwb3N1cmVgIHdhbGssIGEgYHRvSnNvbmAgc2VyaWFsaXphdGlvbiwgYW4gYGVuc3VyZUxmRW5kaW5nc2AgcGFzcylcbiAgICAgICAgICogd2VyZSBhcHBsaWVkIGJ5IGhhbmQgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWRlY2xhcmF0aW9ucy1iZWZvcmUtZWFybHktZXhpdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBc3NpZ25pbmcgb250byB0aGUgZ2xvYmFsIG9iamVjdCBpcyBob3cgdGhpcyBsaWJyYXJ5IGluc3RhbGxzIGFuZCByZXN0b3JlcyB0ZXN0IGRvdWJsZXMsIGFuZCBob3cgYVxuICAgICAgICAgKiBmZXcgT2JzaWRpYW4tcnVudGltZSBnbG9iYWxzIGFyZSByZWFjaGVkIGF0IGFsbC4gVGhlIHJ1bGUgY2Fubm90IHNlcGFyYXRlIHRoYXQgZnJvbSBhbiBhY2NpZGVudGFsXG4gICAgICAgICAqIGdsb2JhbCB3cml0ZSwgYW5kIGl0IGhhcyBubyBmaXhlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWdsb2JhbC1vYmplY3QtcHJvcGVydHktYXNzaWdubWVudCc6ICdvZmYnLFxuICAgICAgICAvLyBgbnVsbGAgaXMgbG9hZC1iZWFyaW5nIGhlcmU6IGFuIG9wdGlvbmFsIGNvbGxhYm9yYXRvciBpcyBtb2RlbGxlZCBhcyBhIHJlcXVpcmVkIGBudWxsIHwgWGAgZmllbGQgcmF0aGVyIHRoYW4gYW4gb3B0aW9uYWwgYFhgLCBzbyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLlxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSdzIGxpc3Qgb2Ygc3RhbmRhcmQgYFN5bWJvbGAgcHJvcGVydGllcyBwcmVkYXRlcyBleHBsaWNpdCByZXNvdXJjZSBtYW5hZ2VtZW50LCBzbyBpdCByZXBvcnRzXG4gICAgICAgICAqIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBhcyBub24tc3RhbmRhcmQuIEJvdGggYXJlIHBhcnQgb2YgdGhlIGxhbmd1YWdlIHRoYXQgdGhpc1xuICAgICAgICAgKiBsaWJyYXJ5IGlzIGJ1aWx0IG9uIC0tIDExNCBmaWxlcyBoZXJlIHVzZSBgdXNpbmdgIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBkaXNwb3NhYmxlIHR5cGVzIGFyZSBhXG4gICAgICAgICAqIHB1YmxpYyBwYXJ0IG9mIGl0cyBzdXJmYWNlIC0tIHNvIGFsbCA1OSByZXBvcnRzIGFyZSB0aGUgcnVsZSBiZWluZyBvdXQgb2YgZGF0ZSByYXRoZXIgdGhhbiBhIGZpbmRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub25zdGFuZGFyZC1idWlsdGluLXByb3BlcnRpZXMnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tbnVsbCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUeXBlU2NyaXB0J3MgZXhwbGljaXQgYHRoaXNgIHBhcmFtZXRlciAoYGZ1bmN0aW9uIGdldCh0aGlzOiBIb2xkZXIpIHsgcmV0dXJuIHRoaXMudmFsdWU7IH1gKSBtYWtlc1xuICAgICAgICAgKiBgdGhpc2Agb3V0c2lkZSBhIGNsYXNzIGJvdGggbGVnYWwgYW5kIHR5cGUtY2hlY2tlZCwgYnV0IHRoZSBydWxlIGlzIHN5bnRhY3RpYyBhbmQgZmxhZ3MgaXQgaWRlbnRpY2FsbHlcbiAgICAgICAgICogdG8gYSBnZW51aW5lbHkgdW5ib3VuZCBgdGhpc2AuIEl0IGhhcyBubyBvcHRpb25zIChgc2NoZW1hOiBbXWApIGFuZCBubyBmaXhlciwgc28gdGhlcmUgaXMgbm8gd2F5IHRvXG4gICAgICAgICAqIHNlcGFyYXRlIHRoZSBpZGlvbSBmcm9tIHRoZSBidWcgaXQgdGFyZ2V0cy4gTW9zdCBoaXRzIGhlcmUgd2VyZSB0eXBlZCBgdGhpc2AgcGFyYW1ldGVycyBhbmQgdGVzdHMgdGhhdFxuICAgICAgICAgKiBkZWxpYmVyYXRlbHkgYXNzZXJ0IGB0aGlzYCBiaW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdGhpcy1vdXRzaWRlLW9mLWNsYXNzJzogJ29mZicsXG4gICAgICAgIC8vIFNhbWUgY2FsbCBhcyBpdHMgb2JqZWN0IGNvdW50ZXJwYXJ0IGFib3ZlOiB0aGUgZGVzdHJ1Y3R1cmluZyBkZXB0aCBmbGFnZ2VkIGhlcmUgaXMgZGVsaWJlcmF0ZSBhbmQgcmVhZHMgd2VsbC5cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1hcnJheS1kZXN0cnVjdHVyaW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSByZXBvcnRzIGFyZSBhbGwgYGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoLi4uKSlgLCB3aGljaCByZWFkcyBleGFjdGx5IGFzIGludGVuZGVkLlxuICAgICAgICAgKiBIb2lzdGluZyB0aGUgYXdhaXRlZCBjYWxsIGludG8gYSB2YXJpYWJsZSBuYW1lZCBhZnRlciB0aGUgbG9vcCdzIG93biBpdGVyYWJsZSBhZGRzIGEgbGluZSBhbmQgYSBuYW1lXG4gICAgICAgICAqIHdpdGhvdXQgYWRkaW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1mb3Itb2YtZXhwcmVzc2lvbic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmVzdGVkIGRlc3RydWN0dXJpbmcgdGhpcyBmbGFncyBpcyBkZWxpYmVyYXRlIGhlcmUgYW5kIHJlYWRzIHdlbGw6IHB1bGxpbmcgYSBtZW1iZXIgb3V0IG9mIGFcbiAgICAgICAgICogcGFyYW1zIGJhZyBpbiBvbmUgc3RlcCBzdGF0ZXMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzIGZyb20sIHdoaWNoIGEgc2Vjb25kIGludGVybWVkaWF0ZSBiaW5kaW5nIG9ubHlcbiAgICAgICAgICogb2JzY3VyZXMuIFRoZSBydWxlIHRha2VzIG5vIG9wdGlvbnMsIHNvIHRoZXJlIGlzIG5vIHdheSB0byBrZWVwIHRoZSBkZXB0aCBsaW1pdCBpdCBpcyByZWFsbHkgYWZ0ZXJcbiAgICAgICAgICogd2hpbGUgYWxsb3dpbmcgdGhlIHNoYXBlIGluIHVzZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtb2JqZWN0LWRlc3RydWN0dXJpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNoZWNrQXJndW1lbnRzYCBzdHJpcHMgYHVuZGVmaW5lZGAgYXJndW1lbnRzLCB3aGljaCBzaGlmdHMgdGhlIHJlbWFpbmluZyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbnRvXG4gICAgICAgICAqIHRoZSB3cm9uZyBzbG90czsgYGNoZWNrQXJyb3dGdW5jdGlvbkJvZHlgIHJlbW92ZXMgYHJldHVybiB1bmRlZmluZWQ7YCBmcm9tIGFycm93IGJvZGllcyB3aG9zZSBvdGhlclxuICAgICAgICAgKiBicmFuY2hlcyBkbyByZXR1cm4gYSB2YWx1ZSwgd2hpY2ggdmlvbGF0ZXMgdGhlIGBub0ltcGxpY2l0UmV0dXJuc2Agc2V0dGluZyB0aGlzIHByb2plY3QgY29tcGlsZXMgd2l0aC5cbiAgICAgICAgICogVGhlIHJ1bGUncyByZW1haW5pbmcgY2FzZXMgKGEgYmFyZSBgdW5kZWZpbmVkYCBpbml0aWFsaXplciwgYHJldHVybiB1bmRlZmluZWQ7YCBpbiBhIHZvaWQgZnVuY3Rpb24pXG4gICAgICAgICAqIGFyZSBzdGlsbCB3b3J0aCBoYXZpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrQXJndW1lbnRzOiBmYWxzZSxcbiAgICAgICAgICAgIGNoZWNrQXJyb3dGdW5jdGlvbkJvZHk6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBgQXJyYXkuZnJvbUFzeW5jYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1hcnJheS1mcm9tLWFzeW5jJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGhpdCBoZXJlIGlzIGEgcHJvbWlzZSBkZWxpYmVyYXRlbHkgTk9UIGF3YWl0ZWQsIGFuZCBgYXdhaXRgIHdvdWxkIGNoYW5nZSB3aGF0IHRoZSBjb2RlIGRvZXMuXG4gICAgICAgICAqIGByZXN1bHQuY2F0Y2godGhyb3dEZWxheWVkKWAgaW4gYGFzeW5jLWV2ZW50cy50c2AgaXMgdGhlIGZpcmUtYW5kLWZvcmdldCBlcnJvciBwYXRoIHRoZSBtb2R1bGUgaXNcbiAgICAgICAgICogYnVpbHQgb247IHRoZSByZXN0IGhvbGQgYW4gdW5yZXNvbHZlZCBwcm9taXNlIGFuZCBhc3NlcnQgdGhlIGNhbGxiYWNrIGhhcyBub3QgZmlyZWQgeWV0LCBzbyBhd2FpdGluZ1xuICAgICAgICAgKiB3b3VsZCBoYW5nIHRoZSB0ZXN0IG9yIGludmVydCB3aGF0IGl0IHByb3Zlcy4gVGhlIHJ1bGUgY2Fubm90IHRlbGwgYSBmb3Jnb3R0ZW4gYGF3YWl0YCBmcm9tIGFuXG4gICAgICAgICAqIGludGVudGlvbmFsIG9uZSwgYW5kIHRoaXMgY29kZWJhc2Ugc2NoZWR1bGVzIGZpcmUtYW5kLWZvcmdldCB3b3JrIGFzIGEgY29yZSBwYXR0ZXJuLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWF3YWl0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEFsbCB0aHJlZSByZXBvcnRzIHJlYWQgSFRNTCBvdXQgKGBjb25zdCBodG1sID0gZWwuaW5uZXJIVE1MYCksIG5ldmVyIHdyaXRlIGl0LCBhbmQgZm9yIGEgcmVhZFxuICAgICAgICAgKiBgZ2V0SFRNTCgpYCByZXR1cm5zIHRoZSBzYW1lIHN0cmluZy4gV2hhdCBpdCBhZGRzIGlzIHNoYWRvdy1yb290IHNlcmlhbGl6YXRpb24gb3B0aW9ucyB0aGF0IG5vdGhpbmdcbiAgICAgICAgICogaGVyZSBhc2tzIGZvciwgaW4gZXhjaGFuZ2UgZm9yIGEgbXVjaCBuZXdlciBwbGF0Zm9ybSBmbG9vciB0aGFuIGBpbm5lckhUTUxgIC0tIGEgYmFkIHRyYWRlIGZvciBhXG4gICAgICAgICAqIGxpYnJhcnkgdGhhdCBoYXMgdG8gcnVuIG9uIHdoYXRldmVyIENocm9taXVtIHRoZSBpbnN0YWxsZWQgT2JzaWRpYW4gc2hpcHMuIFRoZSBydWxlJ3Mgb3RoZXIgaGFsZixcbiAgICAgICAgICogcmV3cml0aW5nIHdyaXRlcyB0byB0aGUgc2FuaXRpemluZyBgc2V0SFRNTCgpYCwgd291bGQgYmUgd29ydGggaGF2aW5nOyBpdCBqdXN0IG5ldmVyIGZpcmVzIGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtaHRtbC1tZXRob2RzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEl0ZXJhdG9yIGhlbHBlcnMgKGBJdGVyYXRvciNzb21lYCBhbmQgZnJpZW5kcykgYXJlIEVTMjAyNSwgc28gdGhpcyBiZWxvbmdzIHdpdGggYG5vLWFycmF5LXJldmVyc2VgIGFuZFxuICAgICAgICAgKiBgbm8tYXJyYXktc29ydGAgYWJvdmU6IHRoZSBzYW1lIEVTMjAyMiBmbG9vciBydWxlcyBpdCBvdXQsIGFuZCB0aGUgc2FtZSBub3RlIGFwcGxpZXMgLS0gcmV2aXNpdCB0aGVtXG4gICAgICAgICAqIHRvZ2V0aGVyIGlmIHRoYXQgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItaGVscGVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgSXRlcmF0b3IjdG9BcnJheWAgaXMgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItdG8tYXJyYXknOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogUmVwbGFjZWQgYnkgYHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5YCwgd2hpY2ggcmVwb3J0cyB0aGUgc2FtZSBhbmRcbiAgICAgICAgICogYWxzbyBmaXhlcyBhIGJvb2xlYW4gbGl0ZXJhbCBicmFuY2ggaW4gVHlwZVNjcmlwdC4gVW5pY29ybiB3aXRoaG9sZHMgdGhhdCBmaXggdGhlcmUsIHdoaWxlXG4gICAgICAgICAqIGB1bmljb3JuL3ByZWZlci10ZXJuYXJ5YCBrZWVwcyBwcm9kdWNpbmcgdGhlIHNoYXBlLCBzbyBgbGludDpmaXhgIGxlZnQgYW4gZXJyb3IgaXQgaGFkIGp1c3QgY3JlYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgc3VnZ2VzdGVkIHJlcGxhY2VtZW50IGlzIGBNYXRoLnRydW5jKE51bWJlcih4KSlgLCB3aGljaCBpcyBsb25nZXIgdGhhbiBgcGFyc2VJbnQoeCwgMTApYCBhbmQgbm9cbiAgICAgICAgICogY2xlYXJlciwgYW5kIGl0IGlzIG5vdCB0aGUgc2FtZSBmdW5jdGlvbjogYHBhcnNlSW50YCBzdG9wcyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgY2Fubm90IGJlIHBhcnRcbiAgICAgICAgICogb2YgdGhlIG51bWJlciwgc28gYCcxMmFiYydgIHBhcnNlcyB0byAxMiB3aGVyZSBgTnVtYmVyYCB5aWVsZHMgYE5hTmAuIFR3byBvZiB0aGUgcmVwb3J0cyByZWFkIHVzZXJcbiAgICAgICAgICogaW5wdXQgdGhyb3VnaCB0aGF0IGRpZmZlcmVuY2UgLS0gdGhlIHBhZ2UtanVtcCBib3ggaW4gdGhlIGBEYXRhdmlld2AgaGVscGVyLCBhbmRcbiAgICAgICAgICogYE51bWJlckNvbXBvbmVudC52YWx1ZUZyb21TdHJpbmdgLCB3aG9zZSBsZW5pZW50IHBhcnNlIGlzIHBhcnQgb2YgYSBwdWJsaXNoZWQgY29tcG9uZW50J3MgYmVoYXZpb3IuXG4gICAgICAgICAqIFRoZSByZXN0IHBhcnNlIG1hY2hpbmUtZ2VuZXJhdGVkIHN0cmluZ3MsIHdoZXJlIHRoZSB0d28gYWdyZWUgYnV0IHRoZSBzaG9ydGVyIHNwZWxsaW5nIHN0aWxsIHdpbnMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItbnVtYmVyLWNvZXJjaW9uJzogJ29mZicsXG4gICAgICAgIC8vIGBQcm9taXNlLndpdGhSZXNvbHZlcnNgIGlzIEVTMjAyNC4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXByb21pc2Utd2l0aC1yZXNvbHZlcnMnOiAnb2ZmJyxcbiAgICAgICAgLy8gYFNldCN1bmlvbmAgYW5kIGZyaWVuZHMgYXJlIEVTMjAyNS4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXNldC1tZXRob2RzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJhbmtzIG9wZXJhbmRzIGJ5IHN5bnRhY3RpYyBzaGFwZSwgbm90IGNvc3QsIHNvIGV2ZXJ5IHJlcG9ydCBoZXJlIHN3YXBzIG9uZSBwcm9wZXJ0eSByZWFkXG4gICAgICAgICAqIGFoZWFkIG9mIGFub3RoZXIgYW5kIGJ1eXMgbm90aGluZy4gSXRzIG93biBtZXNzYWdlIGNvbmNlZGVzIGl0IGNhbm5vdCBjaGVjayB0aGUgcGFydCB0aGF0IG1hdHRlcnMgLS1cbiAgICAgICAgICogXCJhZnRlciB2ZXJpZnlpbmcgc2hvcnQtY2lyY3VpdCBiZWhhdmlvclwiIC0tIGFuZCBvbmUgcmVwb3J0IHNpdHMgZGlyZWN0bHkgdW5kZXIgYSBjb21tZW50IHJlY29yZGluZ1xuICAgICAgICAgKiB0aGF0IHRoZSBvcGVyYW5kcyBjaGFuZ2UgaW5zaWRlIGEgYHJlbmFtZWAgZXZlbnQgaGFuZGxlciwgd2hpY2ggaXMgd2hlcmUgb3JkZXIgc3RvcHMgYmVpbmcgZnJlZS5cbiAgICAgICAgICogVGhlIGN1cnJlbnQgb3JkZXJzIGFsc28gY2FycnkgaW50ZW50OiBhIG51bGwgZ3VhcmQgYmVmb3JlIHRoZSB1c2UgaXQgZ3VhcmRzLCBhbmQgdGhlIGNvbmRpdGlvbiBiZWluZ1xuICAgICAgICAgKiByZXBvcnRlZCBiZWZvcmUgdGhlIHN0YXRlIGl0IGNvbnRyYWRpY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXNpbXBsZS1jb25kaXRpb24tZmlyc3QnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYFVSTC5jYW5QYXJzZWAgcmVxdWlyZXMgTm9kZSAxOC4xNywgd2VsbCBhYm92ZSB0aGUgTm9kZSAxNi4xNi4wIGZsb29yIHRoYXQgc2hpcHBlZCBzb3VyY2UgdGFyZ2V0c1xuICAgICAgICAgKiAoc2VlIHRoZSBPYnNpZGlhbiBwbHVnaW4gbGF5ZXIncyBgbWluaW11bU5vZGVWZXJzaW9uYCkuIFRoZSBydWxlIGNhbiB0aGVyZWZvcmUgbmV2ZXIgYmUgc2F0aXNmaWVkIHRoZXJlLCBzbyBpdCBpcyBvZmYgYXQgdGhlXG4gICAgICAgICAqIGNvbmZpZyBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgYXQgZWFjaCBjYWxsIHNpdGUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItdXJsLWNhbi1wYXJzZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSBhcnJheSByZXBvcnRlZCBoZXJlIGhvbGRzIHN0cmluZ3MsIHdoZXJlIHRoZSBkZWZhdWx0IHNvcnQgaXMgYWxyZWFkeSB3ZWxsIGRlZmluZWQgYW5kIGNvcnJlY3QuXG4gICAgICAgICAqIEFkZGluZyB0aGUgY29tcGFyYXRvciB0aGUgcnVsZSBhc2tzIGZvciB3b3VsZCBtZWFuIGNob29zaW5nIGJldHdlZW4gY29kZS11bml0IGFuZCBsb2NhbGUgb3JkZXJpbmcsXG4gICAgICAgICAqIHNvIGZvbGxvd2luZyBpdCB3b3VsZCBDSEFOR0UgdGhlIHNvcnQgcmF0aGVyIHRoYW4gZG9jdW1lbnQgaXQuIFRoZSBydWxlIGVhcm5zIGl0cyBwbGFjZSBvbiBudW1lcmljXG4gICAgICAgICAqIGFycmF5czsgaXQgZG9lcyBub3QgaGF2ZSBhbnkgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3JlcXVpcmUtYXJyYXktc29ydC1jb21wYXJlJzogJ29mZicsXG4gICAgICAgIC8vIFRoZSBjb2RlYmFzZSBhbHJlYWR5IHNwZWxscyBlbmNvZGluZ3MgdGhlIHdheSB0aGUgRW5jb2RpbmcgU3RhbmRhcmQgZG9lcyAoYHV0Zi04YCksIHdoaWNoIGlzIGFsc28gd2hhdCBgVGV4dERlY29kZXJgIHJlcG9ydHMuIEtlZXAgdGhlIHJ1bGUgZW5mb3JjaW5nIGNvbnNpc3RlbmN5LCBqdXN0IGluIHRoZSBkaXJlY3Rpb24gYWxyZWFkeSBpbiB1c2UuXG4gICAgICAgICd1bmljb3JuL3RleHQtZW5jb2RpbmctaWRlbnRpZmllci1jYXNlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2l0aERhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1aWxkL2xpbnQvdmVyc2lvbiBzY3JpcHRzIGFyZSBDTEkgZW50cnkgcG9pbnRzLCB3aGVyZSBleGl0aW5nIHdpdGggYSBzdGF0dXMgY29kZSBpcyB0aGUgaW50ZXJmYWNlLlxuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAndW5pY29ybi9uby1wcm9jZXNzLWV4aXQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEEgbW9kdWxlLWxldmVsIGZpeHR1cmUgYXNzaWduZWQgZnJvbSBgYmVmb3JlRWFjaGAgaXMgdGhlIHN0YW5kYXJkIHRlc3Qgc2hhcGU6XG4gICAgICAgKlxuICAgICAgICogICBsZXQgYXBwOiBBcHA7XG4gICAgICAgKiAgIGJlZm9yZUVhY2goKCkgPT4geyBhcHAgPSBBcHAuY3JlYXRlQ29uZmlndXJlZF9fKCk7IH0pO1xuICAgICAgICpcbiAgICAgICAqIFRoZSBydWxlIGlzIHJpZ2h0IGFib3V0IHByb2R1Y3Rpb24gY29kZSAtLSBtb2R1bGUgc3RhdGUgcmVhc3NpZ25lZCBmcm9tIGluc2lkZSBhIGZ1bmN0aW9uIGlzIHdvcnRoXG4gICAgICAgKiBmbGFnZ2luZywgYW5kIHRoZSBmaXggaXMgdG8gaG9sZCBpdCBpbiBhIGBjb25zdGAgb2JqZWN0IGluc3RlYWQuIEluIHRlc3RzIHRoYXQgd291bGQgcmVwbGFjZSBldmVyeVxuICAgICAgICogYGFwcGAgd2l0aCBgU1RBVEUuYXBwYCBhbmQgbWFrZSBlYWNoIGZpbGUgcmVhZCB3b3JzZSBmb3Igbm8gZ2Fpbiwgc2luY2UgdGhlIGZpeHR1cmUgaXMgcmVzZXQgcGVyIHRlc3RcbiAgICAgICAqIGJ5IGRlc2lnbi4gU2NvcGVkIG9mZiBoZXJlIHJhdGhlciB0aGFuIGRpc2FibGVkIG91dHJpZ2h0LCBzbyBwcm9kdWN0aW9uIGNvZGUga2VlcHMgdGhlIGNoZWNrLlxuICAgICAgICovXG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBUd28gc2hhcGVzIGhlcmUgY2Fubm90IGZvbGxvdyB0aGUgYWR2aWNlLiBBIGhlbHBlciBkZWZpbmVkIGluc2lkZSBhbiBgZXZhbEluT2JzaWRpYW5gIGNhbGxiYWNrXG4gICAgICAgICAqIGNhbm5vdCBiZSBob2lzdGVkIGF0IGFsbDogdGhlIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgd2l0aCBgdG9TdHJpbmcoKWAgYW5kIHJ1bnMgaW5zaWRlIE9ic2lkaWFuLCBzb1xuICAgICAgICAgKiBhbnl0aGluZyBsZWZ0IGJlaGluZCBpbiB0aGUgbW9kdWxlIHNjb3BlIGlzIHNpbXBseSBub3QgdGhlcmUuIEFuZCBhIHBlci1zdWl0ZSBmYWN0b3J5XG4gICAgICAgICAqIChgY3JlYXRlQ29tcG9uZW50YCwgYGNyZWF0ZU1vY2tQbHVnaW5gKSBpcyBkZWxpYmVyYXRlbHkgbG9jYWwsIGtlZXBpbmcgZWFjaCBzdWl0ZSdzIGZpeHR1cmUgbmV4dCB0b1xuICAgICAgICAgKiB0aGUgYXNzZXJ0aW9ucyB0aGF0IHJlYWQgaXQuIFByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQSB0ZXN0IGJpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIgdGhlIHRoaW5nIGl0IGNhcHR1cmVzLCBub3QgYWZ0ZXIgd2hhdCBpdCBkb2VzOiBgY3JlYXRlRWxlbWVudFNweWBcbiAgICAgICAgICogaG9sZHMgdGhlIHNweSBvbiBgY3JlYXRlRWxlbWVudGAsIGFuZCBgY3JlYXRlUHJvZ3JhbU9wdGlvbnNgIGhvbGRzIHRoZSBvcHRpb25zIGBjcmVhdGVQcm9ncmFtYCB3YXNcbiAgICAgICAgICogY2FsbGVkIHdpdGguIFRoZSB2ZXJiIGJlbG9uZ3MgdG8gdGhlIG5hbWUgYmVpbmcgcmVmZXJlbmNlZCwgc28gdGhlIHJ1bGUgcmVhZHMgaXQgYXMgYSBmdW5jdGlvbiBuYW1lXG4gICAgICAgICAqIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uIExlZnQgb24gZm9yIHByb2R1Y3Rpb24gY29kZSwgd2hlcmUgdGhlIGNvbXBsYWludCBpcyB0aGUgcmlnaHQgb25lLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tbm9uLWZ1bmN0aW9uLXZlcmItcHJlZml4JzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLXRvcC1sZXZlbC1hc3NpZ25tZW50LWluLWZ1bmN0aW9uJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLE9BQU8scUJBQXFCO0FBQzVCLFNBQVMseUJBQXlCO0FBQ2xDLE9BQU8sWUFBWTtBQUNuQixTQUFTLFlBQVk7QUFFckIsT0FBTyxlQUFlO0FBQ3RCLFNBQVMsc0NBQXNDO0FBQy9DLFNBQVMsZUFBZSxzQ0FBc0M7QUFFOUQsT0FBTyxnQkFBZ0I7QUFDdkIsU0FBUyxXQUFXLDRCQUE0QjtBQUVoRCxPQUFPLGFBQWE7QUFDcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGtCQUFrQjtBQUUzQixPQUFPLGNBQWM7QUFFckIsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxxQ0FBcUM7QUFDOUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9DQUFvQztBQXFEdEMsTUFBTSxvQkFBb0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlmLGtCQUE0QixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLN0IsY0FBd0IsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS3pCLGNBQXdCLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTXpCLGdCQUEwQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLM0IsWUFBc0IsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9oQyxXQUFxQjtBQUMxQixXQUFPLENBQUMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGFBQWEsR0FBRyxLQUFLLGlCQUFpQixHQUFHLEtBQUssV0FBVztBQUFBLEVBQzlGO0FBQ0Y7QUFRTyxTQUFTLG1DQUF3RDtBQUN0RSxRQUFNLFVBQVUsSUFBSSxvQkFBb0I7QUFDeEMsVUFBUSxjQUFjLEtBQUssVUFBVSxHQUFHO0FBQ3hDLFVBQVEsZ0JBQWdCO0FBQUEsSUFDdEIsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLEVBQ1o7QUFDQSxVQUFRLFlBQVk7QUFBQSxJQUNsQixLQUFLLFVBQVUsU0FBUyxVQUFVLFNBQVMsVUFBVSxLQUFLO0FBQUEsRUFDNUQ7QUFDQSxVQUFRLFlBQVk7QUFBQSxJQUNsQixLQUFLLFVBQVUsS0FBSyxVQUFVLFNBQVMsVUFBVSxLQUFLO0FBQUEsSUFDdEQsS0FBSyxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsTUFBTTtBQUFBLEVBQ3pEO0FBQ0EsVUFBUSxVQUFVO0FBQUEsSUFDaEIsS0FBSyxVQUFVLE9BQU8sVUFBVSxTQUFTLFVBQVUsS0FBSztBQUFBLElBQ3hELEtBQUssVUFBVSxPQUFPLFVBQVUsU0FBUyxVQUFVLEtBQUs7QUFBQSxJQUN4RCxLQUFLLFVBQVUsS0FBSyxVQUFVLFNBQVMsVUFBVSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWMxRCxLQUFLLFVBQVUsU0FBUyxVQUFVLFNBQVMsVUFBVSxTQUFTO0FBQUEsRUFDaEU7QUFDQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLG9CQUFvQixVQUFzQyxDQUFDLEdBQW9CO0FBQzdGLFFBQU0sVUFBVSxpQ0FBaUM7QUFDakQsVUFBUSxjQUFjLE9BQU87QUFDN0IsUUFBTSxnQkFBZ0IsUUFBUSxnQkFBZ0IsT0FBTyxLQUFLLENBQUM7QUFFM0QsU0FBTztBQUFBLElBQ0wsR0FBRyx1QkFBdUI7QUFBQSxJQUMxQixHQUFHLDJCQUEyQjtBQUFBLE1BQzVCO0FBQUEsTUFDQSxHQUFJLFFBQVEsdUJBQXVCLFVBQWEsRUFBRSxvQkFBb0IsUUFBUSxtQkFBbUI7QUFBQSxJQUNuRyxDQUFDO0FBQUEsSUFDRCxHQUFHO0FBQUEsRUFDTDtBQUNGO0FBU08sU0FBUyxxQkFBcUIsU0FBK0M7QUFDbEYsU0FBTyxhQUFhO0FBQUEsSUFDbEI7QUFBQSxNQUNFLFNBQVMsQ0FBQyxPQUFPLFFBQVEsV0FBVztBQUFBLE1BQ3BDLE9BQU8sUUFBUSxTQUFTO0FBQUEsTUFDeEIsT0FBTztBQUFBLFFBQ0wsa0JBQWtCO0FBQUEsUUFDbEIseUJBQXlCO0FBQUEsUUFDekIsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYWIsd0JBQXdCO0FBQUEsVUFDdEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFlBQ0UsT0FBTyxFQUFFLGVBQWUsNEJBQTRCO0FBQUEsWUFDcEQsTUFBTSxFQUFFLDJCQUEyQixNQUFNLGVBQWUseUJBQXlCO0FBQUEsVUFDbkY7QUFBQSxRQUNGO0FBQUEsUUFDQSxjQUFjO0FBQUEsUUFDZCxtQkFBbUI7QUFBQSxRQUNuQixTQUFTO0FBQUEsUUFDVCxnQkFBZ0I7QUFBQSxRQUNoQixxQkFBcUI7QUFBQSxRQUNyQixzQkFBc0I7QUFBQSxRQUN0QixVQUFVO0FBQUEsUUFDVixzQkFBc0I7QUFBQSxRQUN0QixjQUFjO0FBQUEsUUFDZCxjQUFjO0FBQUEsVUFDWjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsWUFDRSxxQkFBcUI7QUFBQSxVQUN2QjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLDBCQUEwQjtBQUFBLFVBQ3hCO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFFBQ2hCLFlBQVk7QUFBQSxRQUNaLHdCQUF3QjtBQUFBLFFBQ3hCLGNBQWM7QUFBQSxRQUNkLGFBQWE7QUFBQSxRQUNiLGNBQWM7QUFBQSxVQUNaO0FBQUEsVUFDQTtBQUFBLFlBQ0UsT0FBTztBQUFBLGNBQ0w7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsUUFDQSx5QkFBeUI7QUFBQSxRQUN6QixnQkFBZ0I7QUFBQSxRQUNoQixrQkFBa0I7QUFBQSxVQUNoQjtBQUFBLFVBQ0E7QUFBQSxZQUNFLGFBQWE7QUFBQSxVQUNmO0FBQUEsUUFDRjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsUUFDckIsb0JBQW9CO0FBQUEsUUFDcEIsaUJBQWlCO0FBQUEsUUFDakIsa0JBQWtCO0FBQUEsUUFDbEIsd0JBQXdCO0FBQUEsVUFDdEI7QUFBQSxVQUNBO0FBQUEsWUFDRSxPQUFPO0FBQUEsY0FDTDtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsUUFDekIsZUFBZTtBQUFBLFFBQ2YsZ0JBQWdCO0FBQUEsUUFDaEIsYUFBYTtBQUFBLFFBQ2Isa0JBQWtCO0FBQUEsUUFDbEIsZ0JBQWdCO0FBQUEsUUFDaEIsZ0JBQWdCO0FBQUEsUUFDaEIsb0JBQW9CO0FBQUEsVUFDbEI7QUFBQSxVQUNBO0FBQUEsWUFDRSxlQUFlO0FBQUEsWUFDZixjQUFjO0FBQUEsWUFDZCxRQUFRO0FBQUEsY0FDTjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsUUFDQSxtQkFBbUI7QUFBQSxRQUNuQixnQkFBZ0I7QUFBQSxRQUNoQix3QkFBd0I7QUFBQSxRQUN4QixxQkFBcUI7QUFBQSxRQUNyQixlQUFlO0FBQUEsUUFDZixtQkFBbUI7QUFBQSxRQUNuQix5QkFBeUI7QUFBQSxRQUN6QixtQkFBbUI7QUFBQSxRQUNuQiw4QkFBOEI7QUFBQSxRQUM5QixZQUFZO0FBQUEsUUFDWix3QkFBd0I7QUFBQSxVQUN0QjtBQUFBLFVBQ0EsR0FBRztBQUFBLFFBQ0w7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFFBQ3BCLGlCQUFpQjtBQUFBLFFBQ2pCLG1CQUFtQjtBQUFBLFFBQ25CLGdCQUFnQjtBQUFBLFFBQ2hCLGFBQWE7QUFBQSxRQUNiLCtCQUErQjtBQUFBLFFBQy9CLG9CQUFvQjtBQUFBLFFBQ3BCLGdDQUFnQztBQUFBLFFBQ2hDLHVCQUF1QjtBQUFBLFFBQ3ZCLHVCQUF1QjtBQUFBLFFBQ3ZCLHlCQUF5QjtBQUFBLFFBQ3pCLHlCQUF5QjtBQUFBLFFBQ3pCLG1CQUFtQjtBQUFBLFFBQ25CLDJCQUEyQjtBQUFBLFFBQzNCLHFCQUFxQjtBQUFBLFFBQ3JCLDBCQUEwQjtBQUFBLFFBQzFCLHFCQUFxQjtBQUFBLFFBQ3JCLHFCQUFxQjtBQUFBLFFBQ3JCLFVBQVU7QUFBQSxRQUNWLFdBQVc7QUFBQSxRQUNYLG9CQUFvQjtBQUFBLFFBQ3BCLHVCQUF1QjtBQUFBLFFBQ3ZCLHlCQUF5QjtBQUFBLFFBQ3pCLGdCQUFnQjtBQUFBLFFBQ2hCLGtDQUFrQztBQUFBLFFBQ2xDLDhCQUE4QjtBQUFBLFFBQzlCLDJCQUEyQjtBQUFBLFFBQzNCLHlCQUF5QjtBQUFBLFFBQ3pCLHdCQUF3QjtBQUFBLFFBQ3hCLGdDQUFnQztBQUFBLFFBQ2hDLHlCQUF5QjtBQUFBLFFBQ3pCLHNCQUFzQjtBQUFBLFFBQ3RCLGlCQUFpQjtBQUFBLFFBQ2pCLG1CQUFtQjtBQUFBLFFBQ25CLFNBQVM7QUFBQSxRQUNULDBCQUEwQjtBQUFBLFFBQzFCLGlCQUFpQjtBQUFBLFFBQ2pCLHNCQUFzQjtBQUFBLFFBQ3RCLGVBQWU7QUFBQSxRQUNmLGVBQWU7QUFBQSxRQUNmLFFBQVE7QUFBQSxNQUNWO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQSxNQUNFLE9BQU8sUUFBUTtBQUFBLE1BQ2YsT0FBTztBQUFBLFFBQ0wsb0JBQW9CO0FBQUEsTUFDdEI7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFPTyxTQUFTLHlCQUEwQztBQUN4RCxTQUFPO0FBQUEsSUFDTCxHQUFHLG9CQUFvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdkIsY0FBYyxDQUFDLDRCQUE0QixHQUFHLHlDQUF5QztBQUFBLEVBQ3pGO0FBQ0Y7QUFRTyxTQUFTLDJCQUEyQixRQUEyRDtBQUNwRyxRQUFNLEVBQUUsUUFBUSxJQUFJO0FBQ3BCLFNBQU87QUFBQSxJQUNMLEdBQUcscUJBQXFCLE9BQU87QUFBQSxJQUMvQixHQUFHLG1CQUFtQixPQUFPO0FBQUEsSUFDN0IsR0FBRyxvQkFBb0IsT0FBTztBQUFBLElBQzlCLEdBQUcsa0JBQWtCLE9BQU87QUFBQSxJQUM1QixHQUFHLHdCQUF3QixPQUFPO0FBQUEsSUFDbEMsR0FBRyxrQkFBa0IsT0FBTztBQUFBLElBQzVCLEdBQUcseUNBQXlDO0FBQUEsSUFDNUMsR0FBRyx5QkFBeUIsT0FBTztBQUFBLElBQ25DLEdBQUcsd0JBQXdCLE9BQU87QUFBQSxJQUNsQyxHQUFHLHFCQUFxQixFQUFFLFNBQVMsb0JBQW9CLE9BQU8sbUJBQW1CLENBQUM7QUFBQSxFQUNwRjtBQUNGO0FBRUEsU0FBUyx5QkFBeUIsU0FBK0M7QUFDL0UsU0FBTyxhQUFhO0FBQUEsSUFDbEI7QUFBQTtBQUFBLE1BRUUsU0FBUyxDQUFDLGdCQUFnQixXQUFXO0FBQUEsTUFDckMsT0FBTyxRQUFRLFNBQVM7QUFBQSxNQUN4QixPQUFPO0FBQUEsUUFDTCx5REFBeUQ7QUFBQSxNQUMzRDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMsMkNBQTREO0FBQ25FLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUEsTUFDRSxVQUFVO0FBQUEsUUFDUiwwQkFBMEI7QUFBQSxVQUN4QiwrQkFBK0I7QUFBQSxZQUM3QixnQkFBZ0I7QUFBQSxVQUNsQixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTLHNCQUF1QztBQUM5QyxRQUFNLGdCQUFnQixLQUFLLGNBQWMsS0FBSyxJQUFJLFlBQVk7QUFDOUQsU0FBTyxXQUFXLGFBQWEsSUFBSSxDQUFDLGtCQUFrQixhQUFhLENBQUMsSUFBSSxDQUFDO0FBQzNFO0FBRUEsU0FBUyxrQkFBa0IsU0FBK0M7QUFDeEUsU0FBTyxhQUFhO0FBQUEsSUFDbEI7QUFBQSxNQUNFLFNBQVM7QUFBQSxRQUNQLCtCQUErQjtBQUFBLFFBQy9CLCtCQUErQjtBQUFBLFFBQy9CLCtCQUErQjtBQUFBLFFBQy9CLCtCQUErQjtBQUFBLE1BQ2pDO0FBQUEsTUFDQSxPQUFPLFFBQVEsU0FBUztBQUFBLE1BQ3hCLE9BQU87QUFBQSxRQUNMLDRDQUE0QztBQUFBLFFBQzVDLHVCQUF1QixDQUFDLFNBQVMsZ0JBQWdCO0FBQUEsUUFDakQsa0JBQWtCO0FBQUEsUUFDbEIsMEJBQTBCO0FBQUEsUUFDMUIsaUNBQWlDO0FBQUEsUUFDakMsNkJBQTZCO0FBQUEsUUFDN0IsbUJBQW1CO0FBQUEsUUFDbkIsd0NBQXdDO0FBQUEsUUFDeEMsd0JBQXdCO0FBQUEsUUFDeEIscUJBQXFCO0FBQUEsUUFDckIsOEJBQThCO0FBQUEsUUFDOUIsMEJBQTBCO0FBQUEsUUFDMUIsMEJBQTBCO0FBQUEsUUFDMUIsK0JBQStCO0FBQUEsUUFDL0Isa0NBQWtDO0FBQUEsUUFDbEMsdUNBQXVDO0FBQUEsUUFDdkMscUNBQXFDO0FBQUEsUUFDckMsK0JBQStCO0FBQUEsUUFDL0IsNkJBQTZCO0FBQUEsUUFDN0IseUJBQXlCO0FBQUEsUUFDekIsOEJBQThCO0FBQUEsUUFDOUIsaUNBQWlDO0FBQUEsUUFDakMsZ0NBQWdDO0FBQUEsUUFDaEMsMkJBQTJCO0FBQUEsUUFDM0IsaUNBQWlDO0FBQUEsVUFDL0I7QUFBQSxVQUNBO0FBQUEsWUFDRSxPQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsUUFDQSw4QkFBOEI7QUFBQSxRQUM5QixxQ0FBcUM7QUFBQSxRQUNyQyxxQ0FBcUM7QUFBQSxNQUN2QztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsTUFDRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQSxRQUNMLDhCQUE4QjtBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQTtBQUFBLE1BRUUsT0FBTyxRQUFRO0FBQUEsTUFDZixPQUFPO0FBQUEsUUFDTCw4QkFBOEI7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsTUFDRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQSxRQUNMLDhCQUE4QjtBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUyx3QkFBd0IsU0FBK0M7QUFDOUUsU0FBTyxhQUFhO0FBQUEsSUFDbEI7QUFBQSxNQUNFLE9BQU8sUUFBUSxTQUFTO0FBQUEsTUFDeEIsU0FBUztBQUFBLFFBQ1AsQ0FBQywyQkFBMkIsR0FBRztBQUFBLE1BQ2pDO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCw2REFBNkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzdELG1EQUFtRDtBQUFBLFFBQ25ELG1EQUFtRDtBQUFBLFFBQ25ELHVEQUF1RDtBQUFBLFFBQ3ZELG9EQUFvRDtBQUFBLFFBQ3BELCtEQUErRDtBQUFBLFFBQy9ELDRDQUE0QztBQUFBLFFBQzVDLGlFQUFpRTtBQUFBLFFBQ2pFLGtEQUFrRDtBQUFBLFFBQ2xELDZDQUE2QztBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUyxxQkFBcUIsUUFBcUQ7QUFDakYsUUFBTSxFQUFFLFNBQVMsbUJBQW1CLElBQUk7QUFDeEMsUUFBTSxpQkFBaUIsdUJBQXVCLFNBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxtQkFBbUI7QUFFN0YsU0FBTyxhQUFhO0FBQUEsSUFDbEI7QUFBQSxNQUNFLE9BQU8sUUFBUTtBQUFBLE1BQ2YsU0FBUztBQUFBLFFBQ1AsR0FBRyxRQUFRO0FBQUE7QUFBQSxRQUVYLEdBQUcsUUFBUTtBQUFBLE1BQ2I7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLEdBQUc7QUFBQSxNQUNMO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCx5Q0FBeUM7QUFBQSxVQUN2QztBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsUUFDQSwyQ0FBMkM7QUFBQSxVQUN6QztBQUFBLFVBQ0E7QUFBQTtBQUFBLFlBRUUsU0FBUztBQUFBLGNBQ1A7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFlBQ0EsR0FBRztBQUFBLFVBQ0w7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMsd0JBQXdCLFNBQStDO0FBQzlFLFNBQU8sYUFBYSxDQUFDO0FBQUEsSUFDbkIsU0FBUyxDQUFDLHFCQUFxQiwwQkFBMEIsQ0FBQztBQUFBLElBQzFELE9BQU8sUUFBUSxTQUFTO0FBQUEsRUFDMUIsQ0FBQyxDQUFDO0FBQ0o7QUFZQSxTQUFTLG9CQUFvQixTQUErQztBQUMxRSxTQUFPLGFBQWE7QUFBQSxJQUNsQjtBQUFBLE1BQ0UsT0FBTyxRQUFRLFNBQVM7QUFBQSxNQUN4QixTQUFTO0FBQUEsUUFDUCxjQUFjO0FBQUEsTUFDaEI7QUFBQSxNQUNBLE9BQU87QUFBQTtBQUFBLFFBRUwsMkJBQTJCLENBQUMsU0FBUyxRQUFRO0FBQUE7QUFBQSxRQUU3Qyx1Q0FBdUM7QUFBQSxVQUNyQztBQUFBLFVBQ0E7QUFBQSxZQUNFLFVBQVU7QUFBQTtBQUFBLFlBRVYsbUJBQW1CO0FBQUEsWUFDbkIsT0FBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUE7QUFBQSxRQUVBLDBDQUEwQztBQUFBLFVBQ3hDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxZQUNFLHFCQUFxQjtBQUFBLFlBQ3JCLHVCQUF1QjtBQUFBLFVBQ3pCO0FBQUEsUUFDRjtBQUFBO0FBQUEsUUFFQSxrQ0FBa0M7QUFBQTtBQUFBLFFBRWxDLGlDQUFpQztBQUFBLFVBQy9CO0FBQUEsVUFDQTtBQUFBLFlBQ0UscUJBQXFCO0FBQUEsWUFDckIsUUFBUTtBQUFBLGNBQ04sQ0FBQyxNQUFNLE1BQU0sT0FBTyxPQUFPLEtBQUssTUFBTSxLQUFLLElBQUk7QUFBQSxjQUMvQyxDQUFDLE1BQU0sSUFBSTtBQUFBLGNBQ1gsQ0FBQyxNQUFNLFlBQVk7QUFBQSxZQUNyQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUE7QUFBQSxRQUVBLHNCQUFzQjtBQUFBO0FBQUEsUUFFdEIsMEJBQTBCLENBQUMsU0FBUyxzQkFBc0I7QUFBQTtBQUFBLFFBRTFELHFCQUFxQjtBQUFBLFVBQ25CO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxZQUNFLHVCQUF1QjtBQUFBLFVBQ3pCO0FBQUEsUUFDRjtBQUFBO0FBQUEsUUFFQSw2QkFBNkI7QUFBQSxVQUMzQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsWUFDRSxPQUFPO0FBQUEsY0FDTCxVQUFVO0FBQUEsY0FDVixZQUFZLENBQUMsR0FBRztBQUFBLGNBQ2hCLFNBQVMsQ0FBQyxHQUFHO0FBQUEsWUFDZjtBQUFBLFlBQ0EsTUFBTTtBQUFBLGNBQ0osWUFBWSxDQUFDLEtBQUssR0FBRztBQUFBLGNBQ3JCLFNBQVMsQ0FBQyxHQUFHO0FBQUEsWUFDZjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMsbUJBQW1CLFNBQStDO0FBQ3pFLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUEsTUFDRSxTQUFTO0FBQUE7QUFBQSxRQUVQLEdBQUcsU0FBUyxRQUFRO0FBQUE7QUFBQSxRQUVwQixHQUFHLFNBQVMsUUFBUTtBQUFBLE1BQ3RCO0FBQUEsTUFDQSxPQUFPLFFBQVEsU0FBUztBQUFBLE1BQ3hCLGlCQUFpQjtBQUFBLFFBQ2YsZUFBZTtBQUFBLFVBQ2IsY0FBYztBQUFBLFlBQ1osS0FBSztBQUFBLFVBQ1A7QUFBQSxVQUNBLGdCQUFnQjtBQUFBO0FBQUEsVUFFaEIsaUJBQWlCLGNBQWMsS0FBSztBQUFBLFFBQ3RDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsb0RBQW9EO0FBQUEsUUFDcEQsb0RBQW9EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtwRCw2Q0FBNkM7QUFBQSxRQUM3QywyQ0FBMkMsQ0FBQyxTQUFTO0FBQUEsVUFDbkQsZ0JBQWdCO0FBQUEsUUFDbEIsQ0FBQztBQUFBLFFBQ0QsMkNBQTJDLENBQUMsU0FBUztBQUFBLFVBQ25ELHNCQUFzQjtBQUFBLFFBQ3hCLENBQUM7QUFBQSxRQUNELG9DQUFvQyxDQUFDLFNBQVM7QUFBQSxVQUM1QyxjQUFjO0FBQUEsWUFDWjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUFBQSxRQUNELHFDQUFxQztBQUFBLFVBQ25DO0FBQUEsVUFDQTtBQUFBO0FBQUEsWUFFRSxNQUFNO0FBQUE7QUFBQSxZQUVOLG1CQUFtQjtBQUFBLFlBQ25CLGNBQWM7QUFBQSxZQUNkLDJCQUEyQjtBQUFBLFlBQzNCLGdDQUFnQztBQUFBLFlBQ2hDLG9CQUFvQjtBQUFBO0FBQUEsWUFFcEIsbUJBQW1CO0FBQUEsVUFDckI7QUFBQSxRQUNGO0FBQUEsUUFDQSxzQ0FBc0M7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsTUFDRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQSxRQUNMLG1DQUFtQyxDQUFDLFNBQVM7QUFBQSxVQUMzQyxpQ0FBaUM7QUFBQSxVQUNqQyxtQ0FBbUM7QUFBQSxRQUNyQyxDQUFDO0FBQUEsUUFDRCxxQ0FBcUM7QUFBQSxNQUN2QztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsTUFDRSxVQUFVO0FBQUEsUUFDUixPQUFPO0FBQUEsVUFDTCxTQUFTO0FBQUEsUUFDWDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTLGtCQUFrQixTQUErQztBQUN4RSxTQUFPLGFBQWE7QUFBQSxJQUNsQjtBQUFBLE1BQ0UsU0FBUyxDQUFDLFFBQVEsUUFBUSxXQUFXO0FBQUEsTUFDckMsT0FBTyxRQUFRLFNBQVM7QUFBQSxNQUN4QixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQStDTCxtQ0FBbUM7QUFBQSxVQUNqQztBQUFBLFVBQ0E7QUFBQSxZQUNFLFVBQVU7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLE9BQU87QUFBQSxjQUNQLFVBQVU7QUFBQSxjQUNWLE1BQU07QUFBQSxjQUNOLFVBQVU7QUFBQSxjQUNWLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxjQUNQLFVBQVU7QUFBQSxZQUNaO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZQSx5Q0FBeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZekMseUJBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXpCLHdCQUF3QjtBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFlBQ0UsUUFBUTtBQUFBO0FBQUEsY0FFTixNQUFNO0FBQUEsZ0JBQ0osT0FBTztBQUFBLGNBQ1Q7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsNEJBQTRCO0FBQUEsVUFDMUI7QUFBQSxVQUNBO0FBQUEsWUFDRSxLQUFLO0FBQUEsVUFDUDtBQUFBLFFBQ0Y7QUFBQSxRQUNBLDZCQUE2QjtBQUFBLFVBQzNCO0FBQUEsVUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUEwQkUsaUJBQWlCO0FBQUEsWUFDakIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQU1aLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxjQUNQLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FNTCxLQUFLO0FBQUEsZ0JBQ0gsV0FBVztBQUFBLGdCQUNYLFdBQVc7QUFBQSxjQUNiO0FBQUEsY0FDQSxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixJQUFJO0FBQUEsY0FDSixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxRQUFRO0FBQUEsY0FDUixPQUFPO0FBQUEsY0FDUCxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixPQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSw0QkFBNEI7QUFBQSxRQUM1Qix5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNekIsbUNBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhbkMsNkNBQTZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTTdDLGdEQUFnRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRaEQsNkNBQTZDO0FBQUEsUUFDN0MsbUJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFuQixvQ0FBb0M7QUFBQTtBQUFBLFFBRXBDLDZDQUE2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU03QywyQ0FBMkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU8zQyw4Q0FBOEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUTlDLGdDQUFnQztBQUFBLFVBQzlCO0FBQUEsVUFDQTtBQUFBLFlBQ0UsZ0JBQWdCO0FBQUEsWUFDaEIsd0JBQXdCO0FBQUEsVUFDMUI7QUFBQSxRQUNGO0FBQUE7QUFBQSxRQUVBLG1DQUFtQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRbkMsd0JBQXdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVF4Qix3Q0FBd0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNeEMsbUNBQW1DO0FBQUE7QUFBQSxRQUVuQyxvQ0FBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNcEMsZ0RBQWdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU2hELGtDQUFrQztBQUFBO0FBQUEsUUFFbEMseUNBQXlDO0FBQUE7QUFBQSxRQUV6Qyw4QkFBOEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTOUIseUNBQXlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXpDLGdDQUFnQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT2hDLHNDQUFzQztBQUFBO0FBQUEsUUFFdEMseUNBQXlDO0FBQUEsVUFDdkM7QUFBQSxVQUNBO0FBQUEsWUFDRSxVQUFVO0FBQUEsVUFDWjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQTtBQUFBLE1BRUUsT0FBTyxRQUFRO0FBQUEsTUFDZixPQUFPO0FBQUEsUUFDTCwyQkFBMkI7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BWUUsT0FBTyxRQUFRO0FBQUEsTUFDZixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFMLHVDQUF1QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT3ZDLHVDQUF1QztBQUFBLFFBQ3ZDLCtDQUErQztBQUFBLE1BQ2pEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsIm5hbWVzIjpbXX0=
|
|
@@ -64,6 +64,12 @@ export declare function classifyEslintExit(result: ExecResult): EslintExitKind;
|
|
|
64
64
|
* @returns The message to throw, which says outright that it is not a finding about the source.
|
|
65
65
|
*/
|
|
66
66
|
export declare function describeFailureToLint(result: ExecResult): string;
|
|
67
|
+
/**
|
|
68
|
+
* Says whether the project configures ESLint itself.
|
|
69
|
+
*
|
|
70
|
+
* @returns Whether an `eslint.config.*` file exists at the project root.
|
|
71
|
+
*/
|
|
72
|
+
export declare function hasEslintConfig(): boolean;
|
|
67
73
|
/**
|
|
68
74
|
* Lint the project with ESLint.
|
|
69
75
|
*
|
|
@@ -46,6 +46,14 @@ import {
|
|
|
46
46
|
execFromRoot,
|
|
47
47
|
resolvePathFromRootSafe
|
|
48
48
|
} from "../root.mjs";
|
|
49
|
+
const ESLINT_CONFIG_FILE_NAMES = [
|
|
50
|
+
RepoPaths.EslintConfigJs,
|
|
51
|
+
RepoPaths.EslintConfigMjs,
|
|
52
|
+
RepoPaths.EslintConfigCjs,
|
|
53
|
+
RepoPaths.EslintConfigTs,
|
|
54
|
+
RepoPaths.EslintConfigMts,
|
|
55
|
+
RepoPaths.EslintConfigCts
|
|
56
|
+
];
|
|
49
57
|
const ESLINT_WARNINGS_AS_FINDINGS_ARGUMENTS = ["--max-warnings", "0", "--no-warn-ignored"];
|
|
50
58
|
const LINT_PROBLEMS_MESSAGE = "ESLint reported lint problems. The findings are printed above.";
|
|
51
59
|
const ESLINT_EXIT_CODE_CLEAN = 0;
|
|
@@ -75,21 +83,12 @@ function describeFailureToLint(result) {
|
|
|
75
83
|
...details.map((detail) => ` ${detail}`)
|
|
76
84
|
].join("\n");
|
|
77
85
|
}
|
|
86
|
+
function hasEslintConfig() {
|
|
87
|
+
return ESLINT_CONFIG_FILE_NAMES.some((fileName) => existsSync(resolvePathFromRootSafe({ path: fileName })));
|
|
88
|
+
}
|
|
78
89
|
async function lint(options) {
|
|
79
90
|
const { defaultConfigFilePath, paths, shouldFix } = options ?? {};
|
|
80
|
-
|
|
81
|
-
RepoPaths.EslintConfigJs,
|
|
82
|
-
RepoPaths.EslintConfigMjs,
|
|
83
|
-
RepoPaths.EslintConfigCjs,
|
|
84
|
-
RepoPaths.EslintConfigTs,
|
|
85
|
-
RepoPaths.EslintConfigMts,
|
|
86
|
-
RepoPaths.EslintConfigCts
|
|
87
|
-
];
|
|
88
|
-
const doesConfigFileExist = configFiles.some((configFile) => {
|
|
89
|
-
const configFilePath = resolvePathFromRootSafe({ path: configFile });
|
|
90
|
-
return existsSync(configFilePath);
|
|
91
|
-
});
|
|
92
|
-
if (!doesConfigFileExist && defaultConfigFilePath) {
|
|
91
|
+
if (!hasEslintConfig() && defaultConfigFilePath) {
|
|
93
92
|
getLibDebugger("ESLint:lint")("ESLint configuration file not found. Creating default config...");
|
|
94
93
|
await cp(defaultConfigFilePath, resolvePathFromRootSafe({ path: basename(defaultConfigFilePath) }));
|
|
95
94
|
}
|
|
@@ -145,6 +144,7 @@ export {
|
|
|
145
144
|
LINT_PROBLEMS_MESSAGE,
|
|
146
145
|
classifyEslintExit,
|
|
147
146
|
describeFailureToLint,
|
|
147
|
+
hasEslintConfig,
|
|
148
148
|
lint
|
|
149
149
|
};
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludGluZyB1dGlsaXR5IGZvciBFU0xpbnQgY29uZmlndXJhdGlvbiB3aXRoIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBmaXhpbmcuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiB0byBsaW50IGZpbGVzIGJhc2VkIG9uIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIGBlc2xpbnQuY29uZmlnLnRzYC5cbiAqIEl0IGNhbiBhdXRvbWF0aWNhbGx5IGZpeCBsaW50aW5nIGlzc3VlcyBpZiBzcGVjaWZpZWQsIGFuZCBsb2dzIHJlc3VsdHMgdG8gdGhlIGNvbnNvbGUuXG4gKlxuICogSXQgYWxzbyBrZWVwcyBhIGNyYXNoZWQgbGludGVyIGFwYXJ0IGZyb20gYSByZWQgY29kZWJhc2UuIEhhbmRpbmcgRVNMaW50J3MgZXhpdCBjb2RlIHN0cmFpZ2h0IHRvXG4gKiB7QGxpbmsgZXhlY0Zyb21Sb290fSBhbmQgbGV0dGluZyBpdCB0aHJvdyByZXBvcnRzIGV2ZXJ5IG5vbi16ZXJvIGNvZGUgdGhlIHNhbWUgd2F5IC0tIGBDb21tYW5kIGZhaWxlZCB3aXRoXG4gKiBleGl0IGNvZGUgTmAgLS0gd2hpY2ggcHV0cyBhIHJ1bGUgdGhhdCB0aHJldywgYSBicm9rZW4gY29uZmlnIGFuZCBhbiBPUy1sZXZlbCBkZWF0aCBpbiB0aGUgc2FtZSBidWNrZXQgYXNcbiAqIHJlYWwgZmluZGluZ3MuIFRoZSByZWFkZXIgdGhlbiBnb2VzIGh1bnRpbmcgZm9yIGEgZGVmZWN0IGluIHNvdXJjZSBjb2RlIHRoYXQgd2FzIG5ldmVyIGp1ZGdlZCBhdCBhbGwuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQgfSBmcm9tICcuLi9leGVjLnRzJztcblxuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBUaGUgZmxhZ3MgdGhhdCBtYWtlIGEgV0FSTklORyBjb3VudCBhcyBhIGZpbmRpbmcsIHBhc3NlZCBvbiBldmVyeSBydW4uXG4gKlxuICogRVNMaW50IGV4aXRzIGAwYCB3aGVuIGEgcnVuIHJlcG9ydGVkIHdhcm5pbmdzIGFuZCBubyBlcnJvcnMsIHNvIHdpdGhvdXQgYC0tbWF4LXdhcm5pbmdzIDBgIHRoZSBnYXRlIHJlYWRzIGFcbiAqIHdhcm5pbmcgYXMgYSBjbGVhbiB0cmVlOiBgbGludGAgcHJpbnRzIGl0LCByZXR1cm5zIHN1Y2Nlc3MsIGFuZCBDSSwgdGhlIHByZS1jb21taXQgaG9vayBhbmQgZXZlcnkgc3dlZXBcbiAqIGFncmVlIHRoZSB0cmVlIGlzIGNsZWFuLiBBIHdhcm5pbmcgdGhhdCBub3RoaW5nIGV2ZXIgZmFpbHMgb24gaXMgYSB3YXJuaW5nIHRoYXQgc3RhbmRzIGZvciBldmVyLCBhbmQgdGhlXG4gKiBmbGVldCBoYXMgY2FycmllZCBzZXZlcmFsIHRoYXQgZWFjaCBuZWVkZWQgYSBwZXJzb24gcmF0aGVyIHRoYW4gYSBnYXRlIHRvIG5vdGljZSB0aGVtLlxuICpcbiAqIEl0IGlzIHBhc3NlZCB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZXJlIGlzIG5vIG9wdGlvbiB0byByYWlzZSBpdDogYSBjZWlsaW5nIGEgcmVwbyBjYW4gcmFpc2UgaXMgYSBnYXRlXG4gKiBzb21lYm9keSB0dXJucyBvZmYuIEl0IGlzIHBhc3NlZCBvbiB0aGUgYC0tZml4YCBydW5zIHRvbywgYmVjYXVzZSB3aGF0ZXZlciBpcyBsZWZ0IGFmdGVyIGZpeGluZyBpcyBleGFjdGx5XG4gKiB3aGF0IHRoZSBuby1maXggcnVuIHdvdWxkIGhhdmUganVkZ2VkLCBzbyB0aGUgdHdvIGNhbm5vdCBkaXNhZ3JlZSBhYm91dCB3aGF0IGNvdW50cy4gSXQgaXMgYSBzdGF0aWMgY29tbWFuZFxuICogcGFydCByYXRoZXIgdGhhbiBhIGJhdGNoZWQgYXJndW1lbnQsIHNvIGV2ZXJ5IGJhdGNoIG9mIGEgc3BsaXQgY29tbWFuZCBsaW5lIGNhcnJpZXMgaXQuXG4gKlxuICogYC0tbm8td2Fybi1pZ25vcmVkYCBoYXMgdG8gdHJhdmVsIHdpdGggaXQuIFRoZSBwcmUtY29tbWl0IGhvb2sgaGFuZHMgRVNMaW50IGV4cGxpY2l0IGZpbGUgbGlzdHMsIGFuZCBFU0xpbnRcbiAqIHJlcG9ydHMgYW4gZXhwbGljaXRseSBwYXNzZWQsIGdsb2JhbGx5IGlnbm9yZWQgcGF0aCAoYSBgdGVtcGxhdGVzL2AgZmlsZSwgc2F5KSBhcyBhIFdBUk5JTkcgcmF0aGVyIHRoYW5cbiAqIHNraXBwaW5nIGl0LiBVbmRlciBgLS1tYXgtd2FybmluZ3MgMGAgdGhhdCB3YXJuaW5nIGFsb25lIHdvdWxkIGZhaWwgdGhlIGNvbW1pdCwgYWx0aG91Z2ggaXQgc2F5cyBub3RoaW5nXG4gKiBhYm91dCB0aGUgY29kZS5cbiAqL1xuY29uc3QgRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJy0tbWF4LXdhcm5pbmdzJywgJzAnLCAnLS1uby13YXJuLWlnbm9yZWQnXTtcblxuLyoqXG4gKiBXaGF0IGFuIEVTTGludCBydW4gYWN0dWFsbHkgZXN0YWJsaXNoZWQuXG4gKlxuICogLSBgY2xlYW5gIC0tIGl0IGxpbnRlZCBldmVyeXRoaW5nIGFuZCBmb3VuZCBub3RoaW5nLCB3YXJuaW5ncyBpbmNsdWRlZDogc2VlXG4gKiAgIHtAbGluayBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTfSBmb3Igd2hhdCBtYWtlcyB0aGUgXCJpbmNsdWRlZFwiIGhhbGYgdHJ1ZS5cbiAqIC0gYGxpbnQtcHJvYmxlbXNgIC0tIGl0IGxpbnRlZCBldmVyeXRoaW5nIGFuZCB0aGUgU09VUkNFIGlzIHJlZC5cbiAqIC0gYGRpZC1ub3QtbGludGAgLS0gaXQgbmV2ZXIgZ290IHRocm91Z2ggdGhlIGxpbnQsIHNvIHRoZSBzb3VyY2UgaGFzIG5vdCBiZWVuIGp1ZGdlZCBhdCBhbGwuXG4gKi9cbmV4cG9ydCB0eXBlIEVzbGludEV4aXRLaW5kID0gJ2NsZWFuJyB8ICdkaWQtbm90LWxpbnQnIHwgJ2xpbnQtcHJvYmxlbXMnO1xuXG4vKipcbiAqIFRoZSBtZXNzYWdlIHRocm93biBmb3IgcmVhbCBmaW5kaW5ncywga2VwdCBhcGFydCBmcm9tIHtAbGluayBkZXNjcmliZUZhaWx1cmVUb0xpbnR9J3MuXG4gKi9cbmV4cG9ydCBjb25zdCBMSU5UX1BST0JMRU1TX01FU1NBR0UgPSAnRVNMaW50IHJlcG9ydGVkIGxpbnQgcHJvYmxlbXMuIFRoZSBmaW5kaW5ncyBhcmUgcHJpbnRlZCBhYm92ZS4nO1xuXG4vKipcbiAqIEVTTGludCdzIGV4aXQtY29kZSBjb250cmFjdDogYDBgIGlzIGNsZWFuLCBgMWAgbWVhbnMgaXQgZmluaXNoZWQgYW5kIHJlcG9ydGVkIGxpbnQgcHJvYmxlbXMsIGFuZCBldmVyeVxuICogb3RoZXIgY29kZSBtZWFucyBpdCBuZXZlciBmaW5pc2hlZCBsaW50aW5nIGF0IGFsbCAtLSBhIHJ1bGUgdGhyZXcsIHRoZSBjb25maWcgaXMgYnJva2VuLCBvciB0aGUgT1Mga2lsbGVkXG4gKiB0aGUgcHJvY2Vzcy4gT25seSBgMWAgaXMgZXZpZGVuY2UgYWJvdXQgdGhlIHNvdXJjZTsgdGhlIHJlc3QgYXJlIGV2aWRlbmNlIGFib3V0IHRoZSBsaW50ZXIsIGFuZCBhIGNhbGxlclxuICogdGhhdCByZWFkcyB0aGVtIGFzIGZpbmRpbmdzIGdvZXMgaHVudGluZyBmb3IgYSBkZWZlY3QgdGhhdCBpcyBub3QgdGhlcmUuXG4gKlxuICogYDBgIGlzIG9ubHkgYXMgc3Ryb25nIGFzIHtAbGluayBFU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTfSBtYWtlcyBpdDogb24gaXRzIG93biBFU0xpbnQgZXhpdHMgYDBgXG4gKiBmb3IgYSBydW4gdGhhdCByZXBvcnRlZCBXQVJOSU5HUyBhbmQgbm8gZXJyb3JzLCB3aGljaCB0aGlzIHdvdWxkIHJlYWQgYXMgYGNsZWFuYC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2VzbGludC5vcmcvZG9jcy9sYXRlc3QvdXNlL2NvbW1hbmQtbGluZS1pbnRlcmZhY2UjZXhpdC1jb2Rlc31cbiAqL1xuY29uc3QgRVNMSU5UX0VYSVRfQ09ERV9DTEVBTiA9IDA7XG5cbmNvbnN0IEVTTElOVF9FWElUX0NPREVfTElOVF9QUk9CTEVNUyA9IDE7XG5cbi8qKlxuICogVGhlIGJhbm5lciBFU0xpbnQncyBmYXRhbC1lcnJvciBoYW5kbGVyIHdyaXRlcyB0byBzdGRlcnIgYmVmb3JlIGV4aXRpbmcuIEl0IGlzIE5PVCBjcmFzaC1zcGVjaWZpYzogRVNMaW50XG4gKiBwcmludHMgaXQgZm9yIGEgbWlzdHlwZWQgcGF0aCBhbmQgYSBicm9rZW4gY29uZmlnIGp1c3QgYXMgcmVhZGlseSBhcyBmb3IgYSBydWxlIHRoYXQgdGhyZXcsIHNvIGl0IGFuc3dlcnNcbiAqIFwiRVNMaW50IHRocmV3IGluc3RlYWQgb2YgZmluaXNoaW5nXCIgYW5kIG5vdGhpbmcgZmluZXIuIHtAbGluayBSVUxFX0NSQVNIX1JFR19FWFB9IGlzIHdoYXQgc2VwYXJhdGVzIHRoZVxuICogcnVsZSBjcmFzaCBvdXQgb2YgdGhhdCBzZXQuXG4gKi9cbmNvbnN0IEVTTElOVF9BQk9SVF9CQU5ORVIgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmchJztcblxuLyoqXG4gKiBFU0xpbnQgbmFtZXMgdGhlIG9mZmVuZGluZyBydWxlIG9uIGl0cyBvd24gbGluZSwgYW5kIG9ubHkgd2hlbiBhIFJVTEUgaXMgd2hhdCB0aHJldy5cbiAqL1xuY29uc3QgUlVMRV9DUkFTSF9SRUdfRVhQID0gL15SdWxlOiBcIi9tO1xuXG4vKipcbiAqIFRoZSBucG0gY2hhdHRlciB0aGF0IHNoYXJlcyB0aGUgY2hpbGQncyBzdGRlcnIgYW5kIHNheXMgbm90aGluZyBhYm91dCB3aHkgdGhlIGxpbnQgZmFpbGVkLlxuICovXG5jb25zdCBOUE1fTk9USUNFX1BSRUZJWCA9ICducG0gbm90aWNlJztcblxuLyoqXG4gKiBBIHN0YWNrIGZyYW1lIGluIEVTTGludCdzIG93biBvdXRwdXQgLS0gdGhlIGxpbmVzIGFib3ZlIGl0IHNheSB3aGF0IGhhcHBlbmVkLCB0aGVzZSBzYXkgb25seSB3aGVyZS5cbiAqL1xuY29uc3QgU1RBQ0tfRlJBTUVfUkVHX0VYUCA9IC9eYXRcXHMvO1xuXG5jb25zdCBNQVhfRkFJTFVSRV9ERVRBSUxfTElORVMgPSA2O1xuXG4vKipcbiAqIEV4aXQgY29kZXMgYXQgb3IgYWJvdmUgdGhpcyBhcmUgV2luZG93cyBOVCBzdGF0dXMgdmFsdWVzIHJhdGhlciB0aGFuIG9yZGluYXJ5IHByb2Nlc3MgZXhpdCBjb2RlcyAtLVxuICogbm90YWJseSBgMzIyMTIyNTQ3N2AgKGAweEMwMDAwMDA1YCwgYW4gYWNjZXNzIHZpb2xhdGlvbikuIFRoZSBFU0xpbnQgY2hpbGQgcmVhbGx5IGRvZXMgZGllIHRoYXQgd2F5IG9uXG4gKiBXaW5kb3dzIChtZWFzdXJlZCBhdCAxIHJ1biBpbiAzMCBvbiBhbiB1bmNoYW5nZWQsIGxpbnQtY2xlYW4gdHJlZSksIGFuZCBucG0gdGhlbiByZXBvcnRzIGl0IHRvIGl0cyBvd25cbiAqIGNhbGxlciBhcyBhIHBsYWluIGV4aXQgYDFgIC0tIHdoaWNoIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gXCJ0aGUgY29kZSBpcyByZWRcIiB1bmxlc3Mgc29tZXRoaW5nIHNheXNcbiAqIG90aGVyd2lzZS4gVGhhdCBpcyB3aGF0IHtAbGluayBkZXNjcmliZUZhaWx1cmVUb0xpbnR9IGlzIGZvci5cbiAqL1xuY29uc3QgTUlOX05UX1NUQVRVU19FWElUX0NPREUgPSAweDFfMDBfMDA7XG5cbmNvbnN0IEhFWF9SQURJWCA9IDE2O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LCBFU0xpbnQgcnVuc1xuICAgKiBhZ2FpbnN0IHdoYXRldmVyIGl0IGZpbmRzLCBhbmQgcmVwb3J0cyBhIG1pc3NpbmcgY29uZmlndXJhdGlvbiBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gbGludC4gSWYgb21pdHRlZCwgbGludHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmaXggbGludGluZyBpc3N1ZXMgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoaWNoIG9mIHRoZSB0aHJlZSB0aGluZ3MgYW4gRVNMaW50IHJ1biBlc3RhYmxpc2hlZC5cbiAqXG4gKiBBIGtpbGxlZCBwcm9jZXNzIGlzIGBkaWQtbm90LWxpbnRgIHdoYXRldmVyIGl0cyBleGl0IGNvZGUgc2F5cywgYmVjYXVzZSBhIHNpZ25hbCBtZWFucyBpdCB3YXMgc3RvcHBlZFxuICogcmF0aGVyIHRoYW4gdGhhdCBpdCBmaW5pc2hlZC4gQW4gZXhpdCBgMWAgY2FycnlpbmcgRVNMaW50J3MgZmF0YWwtZXJyb3IgYmFubmVyIGlzIGBkaWQtbm90LWxpbnRgIHRvbzogdGhhdFxuICogaXMgYSBjcmFzaCBucG0gcmVsYXllZCBhcyBhIHBsYWluIGAxYCwgbm90IGEgZmluZGluZy5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gV2hhdCB0aGUgRVNMaW50IGNoaWxkIGRpZC5cbiAqIEByZXR1cm5zIFRoZSBraW5kIG9mIGVuZGluZyBpdCB3YXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUVzbGludEV4aXQocmVzdWx0OiBFeGVjUmVzdWx0KTogRXNsaW50RXhpdEtpbmQge1xuICBpZiAocmVzdWx0LmV4aXRDb2RlID09PSBFU0xJTlRfRVhJVF9DT0RFX0NMRUFOICYmIHJlc3VsdC5leGl0U2lnbmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdjbGVhbic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSBFU0xJTlRfRVhJVF9DT0RFX0xJTlRfUFJPQkxFTVMgJiYgIXJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoRVNMSU5UX0FCT1JUX0JBTk5FUilcbiAgICA/ICdsaW50LXByb2JsZW1zJ1xuICAgIDogJ2RpZC1ub3QtbGludCc7XG59XG5cbi8qKlxuICogU2F5cyB3aGljaCBvZiB0aGUgZm91ciBmYWlsdXJlcyB0byBsaW50IGhhcHBlbmVkLCBhbmQgcXVvdGVzIGJhY2sgd2hhdCBFU0xpbnQgc2FpZCBhYm91dCBpdC5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gV2hhdCB0aGUgRVNMaW50IGNoaWxkIGRpZC5cbiAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIHRvIHRocm93LCB3aGljaCBzYXlzIG91dHJpZ2h0IHRoYXQgaXQgaXMgbm90IGEgZmluZGluZyBhYm91dCB0aGUgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVGYWlsdXJlVG9MaW50KHJlc3VsdDogRXhlY1Jlc3VsdCk6IHN0cmluZyB7XG4gIGNvbnN0IGRldGFpbHMgPSBleHRyYWN0RmFpbHVyZURldGFpbHMocmVzdWx0LnN0ZGVycik7XG5cbiAgcmV0dXJuIFtcbiAgICBnZXRGYWlsdXJlSGVhZGxpbmUocmVzdWx0KSxcbiAgICAnVGhpcyBpcyBOT1QgYSBsaW50IGZpbmRpbmc6IHRoZSBzb3VyY2UgY29kZSBoYXMgbm90IGJlZW4ganVkZ2VkLCBzbyBkbyBub3QgZ28gbG9va2luZyBmb3IgYSBkZWZlY3QgaW4gaXQuJyxcbiAgICAnUmUtcnVuIHRoZSBjb21tYW5kLiBPbmx5IGlmIGl0IHJlcHJvZHVjZXMgaXMgdGhlcmUgc29tZXRoaW5nIHRvIGZpeCwgYW5kIHRoZSB0aGluZyB0byBmaXggaXMgdGhlIGxpbnRlci4nLFxuICAgIGAgIGV4aXQgY29kZTogJHtmb3JtYXRFeGl0Q29kZShyZXN1bHQuZXhpdENvZGUpfWAsXG4gICAgLi4ucmVzdWx0LmV4aXRTaWduYWwgPT09IG51bGwgPyBbXSA6IFtgICB0ZXJtaW5hdGVkIGJ5IHNpZ25hbDogJHtyZXN1bHQuZXhpdFNpZ25hbH1gXSxcbiAgICBkZXRhaWxzLmxlbmd0aCA+IDAgPyAnICBFU0xpbnQgc2FpZDonIDogJyAgRVNMaW50IHByaW50ZWQgbm8gZGlhZ25vc3RpYyBhdCBhbGwuJyxcbiAgICAuLi5kZXRhaWxzLm1hcCgoZGV0YWlsKSA9PiBgICAgICR7ZGV0YWlsfWApXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogTGludCB0aGUgcHJvamVjdCB3aXRoIEVTTGludC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICogQHRocm93cyBBbiBgRXJyb3JgIGNhcnJ5aW5nIHtAbGluayBMSU5UX1BST0JMRU1TX01FU1NBR0V9IHdoZW4gdGhlIHNvdXJjZSBpcyByZWQsIGFuZFxuICoge0BsaW5rIGRlc2NyaWJlRmFpbHVyZVRvTGludH0ncyBtZXNzYWdlIHdoZW4gRVNMaW50IG5ldmVyIGZpbmlzaGVkIGxpbnRpbmcgYXQgYWxsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIHBhdGhzLCBzaG91bGRGaXggfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdKcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ1RzLFxuICAgIFJlcG9QYXRocy5Fc2xpbnRDb25maWdNdHMsXG4gICAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0N0c1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0VTTGludDpsaW50JykoJ0VTTGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoIGlzIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2VzbGludCcgfSksXG4gICAgLi4uRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UUyxcbiAgICAuLi4oc2hvdWxkRml4ID8gWyctLWZpeCddIDogW10pLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XG4gIF0sIHtcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogdHJ1ZSxcbiAgICBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZVxuICB9KTtcblxuICBjb25zdCBraW5kID0gY2xhc3NpZnlFc2xpbnRFeGl0KHJlc3VsdCk7XG5cbiAgaWYgKGtpbmQgPT09ICdjbGVhbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3Ioa2luZCA9PT0gJ2xpbnQtcHJvYmxlbXMnID8gTElOVF9QUk9CTEVNU19NRVNTQUdFIDogZGVzY3JpYmVGYWlsdXJlVG9MaW50KHJlc3VsdCkpO1xufVxuXG4vKipcbiAqIFF1b3RlcyBiYWNrIGV2ZXJ5dGhpbmcgRVNMaW50IHNhaWQgdGhhdCBjYXJyaWVzIGluZm9ybWF0aW9uLiBJdCBkcm9wcyBvbmx5IHRoZSBiYW5uZXIgaXRzZWxmLCBucG0ncyBjaGF0dGVyXG4gKiBhbmQgdGhlIHN0YWNrIGZyYW1lcywgYW5kIGtlZXBzIHdoYXRldmVyIGlzIGxlZnQ6IGxpc3Rpbmcga25vd24gcHJlZml4ZXMgaW5zdGVhZCBjb3ZlcmVkIHRoZSBydWxlIGNyYXNoIGFuZFxuICogZHJvcHBlZCB0aGUgb25lIGxpbmUgdGhhdCBtYXR0ZXJlZCBmb3IgYSBtaXN0eXBlZCBwYXRoIChgTm8gZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gLi4uYCkuXG4gKlxuICogQHBhcmFtIHN0ZGVyciAtIEV2ZXJ5dGhpbmcgdGhlIGNoaWxkIHdyb3RlIHRvIHN0ZGVyci5cbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGl2ZSBsaW5lcywgZGUtZHVwbGljYXRlZCBhbmQgY2FwcGVkLlxuICovXG5mdW5jdGlvbiBleHRyYWN0RmFpbHVyZURldGFpbHMoc3RkZXJyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGRldGFpbHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCByYXdMaW5lIG9mIHN0ZGVyci5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoZGV0YWlscy5sZW5ndGggPT09IE1BWF9GQUlMVVJFX0RFVEFJTF9MSU5FUykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IHJhd0xpbmUudHJpbSgpO1xuICAgIGNvbnN0IGlzTm9pc2UgPSBsaW5lID09PSAnJ1xuICAgICAgfHwgbGluZS5zdGFydHNXaXRoKEVTTElOVF9BQk9SVF9CQU5ORVIpXG4gICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoTlBNX05PVElDRV9QUkVGSVgpXG4gICAgICB8fCBTVEFDS19GUkFNRV9SRUdfRVhQLnRlc3QobGluZSk7XG4gICAgaWYgKCFpc05vaXNlICYmICFkZXRhaWxzLmluY2x1ZGVzKGxpbmUpKSB7XG4gICAgICBkZXRhaWxzLnB1c2gobGluZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRldGFpbHM7XG59XG5cbi8qKlxuICogU3BlbGxzIGFuIGV4aXQgY29kZSwgYWRkaW5nIHRoZSBoZXggZm9ybSBmb3IgdGhlIE5UIHN0YXR1cyB2YWx1ZXMgYSByZWFkZXIgY2Fubm90IHJlY29nbml6ZSBpbiBkZWNpbWFsLlxuICpcbiAqIEBwYXJhbSBleGl0Q29kZSAtIFRoZSBjaGlsZCdzIGV4aXQgY29kZSwgb3IgYG51bGxgIHdoZW4gYSBzaWduYWwgZW5kZWQgaXQgZmlyc3QuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBhcyBpdCBzaG91bGQgYmUgcmVhZCBiYWNrLlxuICovXG5mdW5jdGlvbiBmb3JtYXRFeGl0Q29kZShleGl0Q29kZTogbnVsbCB8IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChleGl0Q29kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnKG5vbmUgLSB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBiZWZvcmUgaXQgY291bGQgZXhpdCknO1xuICB9XG5cbiAgcmV0dXJuIGV4aXRDb2RlIDwgTUlOX05UX1NUQVRVU19FWElUX0NPREUgPyBTdHJpbmcoZXhpdENvZGUpIDogYCR7U3RyaW5nKGV4aXRDb2RlKX0gKDB4JHtleGl0Q29kZS50b1N0cmluZyhIRVhfUkFESVgpLnRvVXBwZXJDYXNlKCl9KWA7XG59XG5cbi8qKlxuICogTmFtZXMgd2hpY2ggb2YgdGhlIGZvdXIgd2F5cyBFU0xpbnQgZmFpbGVkIHRvIGxpbnQgdGhpcyB3YXMuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFdoYXQgdGhlIEVTTGludCBjaGlsZCBkaWQuXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgbGluZSBvZiB7QGxpbmsgZGVzY3JpYmVGYWlsdXJlVG9MaW50fSdzIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGdldEZhaWx1cmVIZWFkbGluZShyZXN1bHQ6IEV4ZWNSZXN1bHQpOiBzdHJpbmcge1xuICBpZiAocmVzdWx0LmV4aXRTaWduYWwgIT09IG51bGwpIHtcbiAgICByZXR1cm4gJ0VTTGludCB3YXMgS0lMTEVEIGJlZm9yZSBpdCBmaW5pc2hlZCBsaW50aW5nLic7XG4gIH1cblxuICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSBudWxsICYmIHJlc3VsdC5leGl0Q29kZSA+PSBNSU5fTlRfU1RBVFVTX0VYSVRfQ09ERSkge1xuICAgIHJldHVybiAnRVNMaW50IERJRUQgYXQgdGhlIE9TIGxldmVsIC0gYW4gYWNjZXNzIHZpb2xhdGlvbiBvciBzaW1pbGFyLCB3aXRoIG5vIGRpYWdub3N0aWMgb2YgaXRzIG93bi4nO1xuICB9XG5cbiAgaWYgKFJVTEVfQ1JBU0hfUkVHX0VYUC50ZXN0KHJlc3VsdC5zdGRlcnIpKSB7XG4gICAgcmV0dXJuICdFU0xpbnQgQ1JBU0hFRDogYSBydWxlIHRocmV3IHdoaWxlIGxpbnRpbmcuIFRoZSBydWxlIGFuZCB0aGUgZmlsZSBpdCB3YXMgb24gYXJlIG5hbWVkIGJlbG93Lic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnN0ZGVyci5pbmNsdWRlcyhFU0xJTlRfQUJPUlRfQkFOTkVSKVxuICAgID8gJ0VTTGludCBBQk9SVEVEOiBpdCB0aHJldyBpbnN0ZWFkIG9mIGZpbmlzaGluZyAtIGEgYnJva2VuIGNvbmZpZyBvciBjb21tYW5kIGxpbmUsIG9yIGFuIGludGVybmFsIGVycm9yLidcbiAgICA6ICdFU0xpbnQgZXhpdGVkIG5vbi16ZXJvIHdpdGhvdXQgcmVwb3J0aW5nIGZpbmRpbmdzLCBzbyBpdCBkaWQgbm90IGZpbmlzaCBsaW50aW5nLic7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY0EsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxVQUFVO0FBSW5CLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsaUJBQWlCO0FBQzFCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBb0JQLE1BQU0sd0NBQTJELENBQUMsa0JBQWtCLEtBQUssbUJBQW1CO0FBZXJHLE1BQU0sd0JBQXdCO0FBYXJDLE1BQU0s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
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludGluZyB1dGlsaXR5IGZvciBFU0xpbnQgY29uZmlndXJhdGlvbiB3aXRoIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBmaXhpbmcuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiB0byBsaW50IGZpbGVzIGJhc2VkIG9uIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIGBlc2xpbnQuY29uZmlnLnRzYC5cbiAqIEl0IGNhbiBhdXRvbWF0aWNhbGx5IGZpeCBsaW50aW5nIGlzc3VlcyBpZiBzcGVjaWZpZWQsIGFuZCBsb2dzIHJlc3VsdHMgdG8gdGhlIGNvbnNvbGUuXG4gKlxuICogSXQgYWxzbyBrZWVwcyBhIGNyYXNoZWQgbGludGVyIGFwYXJ0IGZyb20gYSByZWQgY29kZWJhc2UuIEhhbmRpbmcgRVNMaW50J3MgZXhpdCBjb2RlIHN0cmFpZ2h0IHRvXG4gKiB7QGxpbmsgZXhlY0Zyb21Sb290fSBhbmQgbGV0dGluZyBpdCB0aHJvdyByZXBvcnRzIGV2ZXJ5IG5vbi16ZXJvIGNvZGUgdGhlIHNhbWUgd2F5IC0tIGBDb21tYW5kIGZhaWxlZCB3aXRoXG4gKiBleGl0IGNvZGUgTmAgLS0gd2hpY2ggcHV0cyBhIHJ1bGUgdGhhdCB0aHJldywgYSBicm9rZW4gY29uZmlnIGFuZCBhbiBPUy1sZXZlbCBkZWF0aCBpbiB0aGUgc2FtZSBidWNrZXQgYXNcbiAqIHJlYWwgZmluZGluZ3MuIFRoZSByZWFkZXIgdGhlbiBnb2VzIGh1bnRpbmcgZm9yIGEgZGVmZWN0IGluIHNvdXJjZSBjb2RlIHRoYXQgd2FzIG5ldmVyIGp1ZGdlZCBhdCBhbGwuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQgfSBmcm9tICcuLi9leGVjLnRzJztcblxuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBUaGUgZmxhdCBjb25maWd1cmF0aW9uIGZpbGVzIEVTTGludCByZWFkcy5cbiAqL1xuY29uc3QgRVNMSU5UX0NPTkZJR19GSUxFX05BTUVTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgUmVwb1BhdGhzLkVzbGludENvbmZpZ0pzLFxuICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTWpzLFxuICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnQ2pzLFxuICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnVHMsXG4gIFJlcG9QYXRocy5Fc2xpbnRDb25maWdNdHMsXG4gIFJlcG9QYXRocy5Fc2xpbnRDb25maWdDdHNcbl07XG5cbi8qKlxuICogVGhlIGZsYWdzIHRoYXQgbWFrZSBhIFdBUk5JTkcgY291bnQgYXMgYSBmaW5kaW5nLCBwYXNzZWQgb24gZXZlcnkgcnVuLlxuICpcbiAqIEVTTGludCBleGl0cyBgMGAgd2hlbiBhIHJ1biByZXBvcnRlZCB3YXJuaW5ncyBhbmQgbm8gZXJyb3JzLCBzbyB3aXRob3V0IGAtLW1heC13YXJuaW5ncyAwYCB0aGUgZ2F0ZSByZWFkcyBhXG4gKiB3YXJuaW5nIGFzIGEgY2xlYW4gdHJlZTogYGxpbnRgIHByaW50cyBpdCwgcmV0dXJucyBzdWNjZXNzLCBhbmQgQ0ksIHRoZSBwcmUtY29tbWl0IGhvb2sgYW5kIGV2ZXJ5IHN3ZWVwXG4gKiBhZ3JlZSB0aGUgdHJlZSBpcyBjbGVhbi4gQSB3YXJuaW5nIHRoYXQgbm90aGluZyBldmVyIGZhaWxzIG9uIGlzIGEgd2FybmluZyB0aGF0IHN0YW5kcyBmb3IgZXZlciwgYW5kIHRoZVxuICogZmxlZXQgaGFzIGNhcnJpZWQgc2V2ZXJhbCB0aGF0IGVhY2ggbmVlZGVkIGEgcGVyc29uIHJhdGhlciB0aGFuIGEgZ2F0ZSB0byBub3RpY2UgdGhlbS5cbiAqXG4gKiBJdCBpcyBwYXNzZWQgdW5jb25kaXRpb25hbGx5IGFuZCB0aGVyZSBpcyBubyBvcHRpb24gdG8gcmFpc2UgaXQ6IGEgY2VpbGluZyBhIHJlcG8gY2FuIHJhaXNlIGlzIGEgZ2F0ZVxuICogc29tZWJvZHkgdHVybnMgb2ZmLiBJdCBpcyBwYXNzZWQgb24gdGhlIGAtLWZpeGAgcnVucyB0b28sIGJlY2F1c2Ugd2hhdGV2ZXIgaXMgbGVmdCBhZnRlciBmaXhpbmcgaXMgZXhhY3RseVxuICogd2hhdCB0aGUgbm8tZml4IHJ1biB3b3VsZCBoYXZlIGp1ZGdlZCwgc28gdGhlIHR3byBjYW5ub3QgZGlzYWdyZWUgYWJvdXQgd2hhdCBjb3VudHMuIEl0IGlzIGEgc3RhdGljIGNvbW1hbmRcbiAqIHBhcnQgcmF0aGVyIHRoYW4gYSBiYXRjaGVkIGFyZ3VtZW50LCBzbyBldmVyeSBiYXRjaCBvZiBhIHNwbGl0IGNvbW1hbmQgbGluZSBjYXJyaWVzIGl0LlxuICpcbiAqIGAtLW5vLXdhcm4taWdub3JlZGAgaGFzIHRvIHRyYXZlbCB3aXRoIGl0LiBUaGUgcHJlLWNvbW1pdCBob29rIGhhbmRzIEVTTGludCBleHBsaWNpdCBmaWxlIGxpc3RzLCBhbmQgRVNMaW50XG4gKiByZXBvcnRzIGFuIGV4cGxpY2l0bHkgcGFzc2VkLCBnbG9iYWxseSBpZ25vcmVkIHBhdGggKGEgYHRlbXBsYXRlcy9gIGZpbGUsIHNheSkgYXMgYSBXQVJOSU5HIHJhdGhlciB0aGFuXG4gKiBza2lwcGluZyBpdC4gVW5kZXIgYC0tbWF4LXdhcm5pbmdzIDBgIHRoYXQgd2FybmluZyBhbG9uZSB3b3VsZCBmYWlsIHRoZSBjb21taXQsIGFsdGhvdWdoIGl0IHNheXMgbm90aGluZ1xuICogYWJvdXQgdGhlIGNvZGUuXG4gKi9cbmNvbnN0IEVTTElOVF9XQVJOSU5HU19BU19GSU5ESU5HU19BUkdVTUVOVFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWyctLW1heC13YXJuaW5ncycsICcwJywgJy0tbm8td2Fybi1pZ25vcmVkJ107XG5cbi8qKlxuICogV2hhdCBhbiBFU0xpbnQgcnVuIGFjdHVhbGx5IGVzdGFibGlzaGVkLlxuICpcbiAqIC0gYGNsZWFuYCAtLSBpdCBsaW50ZWQgZXZlcnl0aGluZyBhbmQgZm91bmQgbm90aGluZywgd2FybmluZ3MgaW5jbHVkZWQ6IHNlZVxuICogICB7QGxpbmsgRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UU30gZm9yIHdoYXQgbWFrZXMgdGhlIFwiaW5jbHVkZWRcIiBoYWxmIHRydWUuXG4gKiAtIGBsaW50LXByb2JsZW1zYCAtLSBpdCBsaW50ZWQgZXZlcnl0aGluZyBhbmQgdGhlIFNPVVJDRSBpcyByZWQuXG4gKiAtIGBkaWQtbm90LWxpbnRgIC0tIGl0IG5ldmVyIGdvdCB0aHJvdWdoIHRoZSBsaW50LCBzbyB0aGUgc291cmNlIGhhcyBub3QgYmVlbiBqdWRnZWQgYXQgYWxsLlxuICovXG5leHBvcnQgdHlwZSBFc2xpbnRFeGl0S2luZCA9ICdjbGVhbicgfCAnZGlkLW5vdC1saW50JyB8ICdsaW50LXByb2JsZW1zJztcblxuLyoqXG4gKiBUaGUgbWVzc2FnZSB0aHJvd24gZm9yIHJlYWwgZmluZGluZ3MsIGtlcHQgYXBhcnQgZnJvbSB7QGxpbmsgZGVzY3JpYmVGYWlsdXJlVG9MaW50fSdzLlxuICovXG5leHBvcnQgY29uc3QgTElOVF9QUk9CTEVNU19NRVNTQUdFID0gJ0VTTGludCByZXBvcnRlZCBsaW50IHByb2JsZW1zLiBUaGUgZmluZGluZ3MgYXJlIHByaW50ZWQgYWJvdmUuJztcblxuLyoqXG4gKiBFU0xpbnQncyBleGl0LWNvZGUgY29udHJhY3Q6IGAwYCBpcyBjbGVhbiwgYDFgIG1lYW5zIGl0IGZpbmlzaGVkIGFuZCByZXBvcnRlZCBsaW50IHByb2JsZW1zLCBhbmQgZXZlcnlcbiAqIG90aGVyIGNvZGUgbWVhbnMgaXQgbmV2ZXIgZmluaXNoZWQgbGludGluZyBhdCBhbGwgLS0gYSBydWxlIHRocmV3LCB0aGUgY29uZmlnIGlzIGJyb2tlbiwgb3IgdGhlIE9TIGtpbGxlZFxuICogdGhlIHByb2Nlc3MuIE9ubHkgYDFgIGlzIGV2aWRlbmNlIGFib3V0IHRoZSBzb3VyY2U7IHRoZSByZXN0IGFyZSBldmlkZW5jZSBhYm91dCB0aGUgbGludGVyLCBhbmQgYSBjYWxsZXJcbiAqIHRoYXQgcmVhZHMgdGhlbSBhcyBmaW5kaW5ncyBnb2VzIGh1bnRpbmcgZm9yIGEgZGVmZWN0IHRoYXQgaXMgbm90IHRoZXJlLlxuICpcbiAqIGAwYCBpcyBvbmx5IGFzIHN0cm9uZyBhcyB7QGxpbmsgRVNMSU5UX1dBUk5JTkdTX0FTX0ZJTkRJTkdTX0FSR1VNRU5UU30gbWFrZXMgaXQ6IG9uIGl0cyBvd24gRVNMaW50IGV4aXRzIGAwYFxuICogZm9yIGEgcnVuIHRoYXQgcmVwb3J0ZWQgV0FSTklOR1MgYW5kIG5vIGVycm9ycywgd2hpY2ggdGhpcyB3b3VsZCByZWFkIGFzIGBjbGVhbmAuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9lc2xpbnQub3JnL2RvY3MvbGF0ZXN0L3VzZS9jb21tYW5kLWxpbmUtaW50ZXJmYWNlI2V4aXQtY29kZXN9XG4gKi9cbmNvbnN0IEVTTElOVF9FWElUX0NPREVfQ0xFQU4gPSAwO1xuXG5jb25zdCBFU0xJTlRfRVhJVF9DT0RFX0xJTlRfUFJPQkxFTVMgPSAxO1xuXG4vKipcbiAqIFRoZSBiYW5uZXIgRVNMaW50J3MgZmF0YWwtZXJyb3IgaGFuZGxlciB3cml0ZXMgdG8gc3RkZXJyIGJlZm9yZSBleGl0aW5nLiBJdCBpcyBOT1QgY3Jhc2gtc3BlY2lmaWM6IEVTTGludFxuICogcHJpbnRzIGl0IGZvciBhIG1pc3R5cGVkIHBhdGggYW5kIGEgYnJva2VuIGNvbmZpZyBqdXN0IGFzIHJlYWRpbHkgYXMgZm9yIGEgcnVsZSB0aGF0IHRocmV3LCBzbyBpdCBhbnN3ZXJzXG4gKiBcIkVTTGludCB0aHJldyBpbnN0ZWFkIG9mIGZpbmlzaGluZ1wiIGFuZCBub3RoaW5nIGZpbmVyLiB7QGxpbmsgUlVMRV9DUkFTSF9SRUdfRVhQfSBpcyB3aGF0IHNlcGFyYXRlcyB0aGVcbiAqIHJ1bGUgY3Jhc2ggb3V0IG9mIHRoYXQgc2V0LlxuICovXG5jb25zdCBFU0xJTlRfQUJPUlRfQkFOTkVSID0gJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nISc7XG5cbi8qKlxuICogRVNMaW50IG5hbWVzIHRoZSBvZmZlbmRpbmcgcnVsZSBvbiBpdHMgb3duIGxpbmUsIGFuZCBvbmx5IHdoZW4gYSBSVUxFIGlzIHdoYXQgdGhyZXcuXG4gKi9cbmNvbnN0IFJVTEVfQ1JBU0hfUkVHX0VYUCA9IC9eUnVsZTogXCIvbTtcblxuLyoqXG4gKiBUaGUgbnBtIGNoYXR0ZXIgdGhhdCBzaGFyZXMgdGhlIGNoaWxkJ3Mgc3RkZXJyIGFuZCBzYXlzIG5vdGhpbmcgYWJvdXQgd2h5IHRoZSBsaW50IGZhaWxlZC5cbiAqL1xuY29uc3QgTlBNX05PVElDRV9QUkVGSVggPSAnbnBtIG5vdGljZSc7XG5cbi8qKlxuICogQSBzdGFjayBmcmFtZSBpbiBFU0xpbnQncyBvd24gb3V0cHV0IC0tIHRoZSBsaW5lcyBhYm92ZSBpdCBzYXkgd2hhdCBoYXBwZW5lZCwgdGhlc2Ugc2F5IG9ubHkgd2hlcmUuXG4gKi9cbmNvbnN0IFNUQUNLX0ZSQU1FX1JFR19FWFAgPSAvXmF0XFxzLztcblxuY29uc3QgTUFYX0ZBSUxVUkVfREVUQUlMX0xJTkVTID0gNjtcblxuLyoqXG4gKiBFeGl0IGNvZGVzIGF0IG9yIGFib3ZlIHRoaXMgYXJlIFdpbmRvd3MgTlQgc3RhdHVzIHZhbHVlcyByYXRoZXIgdGhhbiBvcmRpbmFyeSBwcm9jZXNzIGV4aXQgY29kZXMgLS1cbiAqIG5vdGFibHkgYDMyMjEyMjU0NzdgIChgMHhDMDAwMDAwNWAsIGFuIGFjY2VzcyB2aW9sYXRpb24pLiBUaGUgRVNMaW50IGNoaWxkIHJlYWxseSBkb2VzIGRpZSB0aGF0IHdheSBvblxuICogV2luZG93cyAobWVhc3VyZWQgYXQgMSBydW4gaW4gMzAgb24gYW4gdW5jaGFuZ2VkLCBsaW50LWNsZWFuIHRyZWUpLCBhbmQgbnBtIHRoZW4gcmVwb3J0cyBpdCB0byBpdHMgb3duXG4gKiBjYWxsZXIgYXMgYSBwbGFpbiBleGl0IGAxYCAtLSB3aGljaCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIFwidGhlIGNvZGUgaXMgcmVkXCIgdW5sZXNzIHNvbWV0aGluZyBzYXlzXG4gKiBvdGhlcndpc2UuIFRoYXQgaXMgd2hhdCB7QGxpbmsgZGVzY3JpYmVGYWlsdXJlVG9MaW50fSBpcyBmb3IuXG4gKi9cbmNvbnN0IE1JTl9OVF9TVEFUVVNfRVhJVF9DT0RFID0gMHgxXzAwXzAwO1xuXG5jb25zdCBIRVhfUkFESVggPSAxNjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIGxpbnR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgY29waWVkIHRvIHRoZSBwcm9qZWN0IHJvb3Qgd2hlbiB0aGUgcHJvamVjdCBoYXMgbm9uZS4gV2l0aG91dCBpdCwgRVNMaW50IHJ1bnNcbiAgICogYWdhaW5zdCB3aGF0ZXZlciBpdCBmaW5kcywgYW5kIHJlcG9ydHMgYSBtaXNzaW5nIGNvbmZpZ3VyYXRpb24gaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGljaCBvZiB0aGUgdGhyZWUgdGhpbmdzIGFuIEVTTGludCBydW4gZXN0YWJsaXNoZWQuXG4gKlxuICogQSBraWxsZWQgcHJvY2VzcyBpcyBgZGlkLW5vdC1saW50YCB3aGF0ZXZlciBpdHMgZXhpdCBjb2RlIHNheXMsIGJlY2F1c2UgYSBzaWduYWwgbWVhbnMgaXQgd2FzIHN0b3BwZWRcbiAqIHJhdGhlciB0aGFuIHRoYXQgaXQgZmluaXNoZWQuIEFuIGV4aXQgYDFgIGNhcnJ5aW5nIEVTTGludCdzIGZhdGFsLWVycm9yIGJhbm5lciBpcyBgZGlkLW5vdC1saW50YCB0b286IHRoYXRcbiAqIGlzIGEgY3Jhc2ggbnBtIHJlbGF5ZWQgYXMgYSBwbGFpbiBgMWAsIG5vdCBhIGZpbmRpbmcuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFdoYXQgdGhlIEVTTGludCBjaGlsZCBkaWQuXG4gKiBAcmV0dXJucyBUaGUga2luZCBvZiBlbmRpbmcgaXQgd2FzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlFc2xpbnRFeGl0KHJlc3VsdDogRXhlY1Jlc3VsdCk6IEVzbGludEV4aXRLaW5kIHtcbiAgaWYgKHJlc3VsdC5leGl0Q29kZSA9PT0gRVNMSU5UX0VYSVRfQ09ERV9DTEVBTiAmJiByZXN1bHQuZXhpdFNpZ25hbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnY2xlYW4nO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gRVNMSU5UX0VYSVRfQ09ERV9MSU5UX1BST0JMRU1TICYmICFyZXN1bHQuc3RkZXJyLmluY2x1ZGVzKEVTTElOVF9BQk9SVF9CQU5ORVIpXG4gICAgPyAnbGludC1wcm9ibGVtcydcbiAgICA6ICdkaWQtbm90LWxpbnQnO1xufVxuXG4vKipcbiAqIFNheXMgd2hpY2ggb2YgdGhlIGZvdXIgZmFpbHVyZXMgdG8gbGludCBoYXBwZW5lZCwgYW5kIHF1b3RlcyBiYWNrIHdoYXQgRVNMaW50IHNhaWQgYWJvdXQgaXQuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFdoYXQgdGhlIEVTTGludCBjaGlsZCBkaWQuXG4gKiBAcmV0dXJucyBUaGUgbWVzc2FnZSB0byB0aHJvdywgd2hpY2ggc2F5cyBvdXRyaWdodCB0aGF0IGl0IGlzIG5vdCBhIGZpbmRpbmcgYWJvdXQgdGhlIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRmFpbHVyZVRvTGludChyZXN1bHQ6IEV4ZWNSZXN1bHQpOiBzdHJpbmcge1xuICBjb25zdCBkZXRhaWxzID0gZXh0cmFjdEZhaWx1cmVEZXRhaWxzKHJlc3VsdC5zdGRlcnIpO1xuXG4gIHJldHVybiBbXG4gICAgZ2V0RmFpbHVyZUhlYWRsaW5lKHJlc3VsdCksXG4gICAgJ1RoaXMgaXMgTk9UIGEgbGludCBmaW5kaW5nOiB0aGUgc291cmNlIGNvZGUgaGFzIG5vdCBiZWVuIGp1ZGdlZCwgc28gZG8gbm90IGdvIGxvb2tpbmcgZm9yIGEgZGVmZWN0IGluIGl0LicsXG4gICAgJ1JlLXJ1biB0aGUgY29tbWFuZC4gT25seSBpZiBpdCByZXByb2R1Y2VzIGlzIHRoZXJlIHNvbWV0aGluZyB0byBmaXgsIGFuZCB0aGUgdGhpbmcgdG8gZml4IGlzIHRoZSBsaW50ZXIuJyxcbiAgICBgICBleGl0IGNvZGU6ICR7Zm9ybWF0RXhpdENvZGUocmVzdWx0LmV4aXRDb2RlKX1gLFxuICAgIC4uLnJlc3VsdC5leGl0U2lnbmFsID09PSBudWxsID8gW10gOiBbYCAgdGVybWluYXRlZCBieSBzaWduYWw6ICR7cmVzdWx0LmV4aXRTaWduYWx9YF0sXG4gICAgZGV0YWlscy5sZW5ndGggPiAwID8gJyAgRVNMaW50IHNhaWQ6JyA6ICcgIEVTTGludCBwcmludGVkIG5vIGRpYWdub3N0aWMgYXQgYWxsLicsXG4gICAgLi4uZGV0YWlscy5tYXAoKGRldGFpbCkgPT4gYCAgICAke2RldGFpbH1gKVxuICBdLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIFNheXMgd2hldGhlciB0aGUgcHJvamVjdCBjb25maWd1cmVzIEVTTGludCBpdHNlbGYuXG4gKlxuICogQHJldHVybnMgV2hldGhlciBhbiBgZXNsaW50LmNvbmZpZy4qYCBmaWxlIGV4aXN0cyBhdCB0aGUgcHJvamVjdCByb290LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRXNsaW50Q29uZmlnKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gRVNMSU5UX0NPTkZJR19GSUxFX05BTUVTLnNvbWUoKGZpbGVOYW1lKSA9PiBleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogZmlsZU5hbWUgfSkpKTtcbn1cblxuLyoqXG4gKiBMaW50IHRoZSBwcm9qZWN0IHdpdGggRVNMaW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBMaW50T3B0aW9uc30uXG4gKiBAdGhyb3dzIEFuIGBFcnJvcmAgY2Fycnlpbmcge0BsaW5rIExJTlRfUFJPQkxFTVNfTUVTU0FHRX0gd2hlbiB0aGUgc291cmNlIGlzIHJlZCwgYW5kXG4gKiB7QGxpbmsgZGVzY3JpYmVGYWlsdXJlVG9MaW50fSdzIG1lc3NhZ2Ugd2hlbiBFU0xpbnQgbmV2ZXIgZmluaXNoZWQgbGludGluZyBhdCBhbGwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW50KG9wdGlvbnM/OiBMaW50T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcGF0aHMsIHNob3VsZEZpeCB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgaWYgKCFoYXNFc2xpbnRDb25maWcoKSAmJiBkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignRVNMaW50OmxpbnQnKSgnRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZSBub3QgZm91bmQuIENyZWF0aW5nIGRlZmF1bHQgY29uZmlnLi4uJyk7XG4gICAgYXdhaXQgY3AoZGVmYXVsdENvbmZpZ0ZpbGVQYXRoLCByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGJhc2VuYW1lKGRlZmF1bHRDb25maWdGaWxlUGF0aCkgfSkpO1xuICB9XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCB0YXJnZXRzID0gcGF0aHM/Lmxlbmd0aCA/IHBhdGhzIDogW1JlcG9QYXRocy5DdXJyZW50Rm9sZGVyXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnZXNsaW50JyB9KSxcbiAgICAuLi5FU0xJTlRfV0FSTklOR1NfQVNfRklORElOR1NfQVJHVU1FTlRTLFxuICAgIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1cbiAgXSwge1xuICAgIHNob3VsZElnbm9yZUV4aXRDb2RlOiB0cnVlLFxuICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0IGtpbmQgPSBjbGFzc2lmeUVzbGludEV4aXQocmVzdWx0KTtcblxuICBpZiAoa2luZCA9PT0gJ2NsZWFuJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihraW5kID09PSAnbGludC1wcm9ibGVtcycgPyBMSU5UX1BST0JMRU1TX01FU1NBR0UgOiBkZXNjcmliZUZhaWx1cmVUb0xpbnQocmVzdWx0KSk7XG59XG5cbi8qKlxuICogUXVvdGVzIGJhY2sgZXZlcnl0aGluZyBFU0xpbnQgc2FpZCB0aGF0IGNhcnJpZXMgaW5mb3JtYXRpb24uIEl0IGRyb3BzIG9ubHkgdGhlIGJhbm5lciBpdHNlbGYsIG5wbSdzIGNoYXR0ZXJcbiAqIGFuZCB0aGUgc3RhY2sgZnJhbWVzLCBhbmQga2VlcHMgd2hhdGV2ZXIgaXMgbGVmdDogbGlzdGluZyBrbm93biBwcmVmaXhlcyBpbnN0ZWFkIGNvdmVyZWQgdGhlIHJ1bGUgY3Jhc2ggYW5kXG4gKiBkcm9wcGVkIHRoZSBvbmUgbGluZSB0aGF0IG1hdHRlcmVkIGZvciBhIG1pc3R5cGVkIHBhdGggKGBObyBmaWxlcyBtYXRjaGluZyB0aGUgcGF0dGVybiAuLi5gKS5cbiAqXG4gKiBAcGFyYW0gc3RkZXJyIC0gRXZlcnl0aGluZyB0aGUgY2hpbGQgd3JvdGUgdG8gc3RkZXJyLlxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aXZlIGxpbmVzLCBkZS1kdXBsaWNhdGVkIGFuZCBjYXBwZWQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RGYWlsdXJlRGV0YWlscyhzdGRlcnI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJhd0xpbmUgb2Ygc3RkZXJyLnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChkZXRhaWxzLmxlbmd0aCA9PT0gTUFYX0ZBSUxVUkVfREVUQUlMX0xJTkVTKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lID0gcmF3TGluZS50cmltKCk7XG4gICAgY29uc3QgaXNOb2lzZSA9IGxpbmUgPT09ICcnXG4gICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoRVNMSU5UX0FCT1JUX0JBTk5FUilcbiAgICAgIHx8IGxpbmUuc3RhcnRzV2l0aChOUE1fTk9USUNFX1BSRUZJWClcbiAgICAgIHx8IFNUQUNLX0ZSQU1FX1JFR19FWFAudGVzdChsaW5lKTtcbiAgICBpZiAoIWlzTm9pc2UgJiYgIWRldGFpbHMuaW5jbHVkZXMobGluZSkpIHtcbiAgICAgIGRldGFpbHMucHVzaChsaW5lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGV0YWlscztcbn1cblxuLyoqXG4gKiBTcGVsbHMgYW4gZXhpdCBjb2RlLCBhZGRpbmcgdGhlIGhleCBmb3JtIGZvciB0aGUgTlQgc3RhdHVzIHZhbHVlcyBhIHJlYWRlciBjYW5ub3QgcmVjb2duaXplIGluIGRlY2ltYWwuXG4gKlxuICogQHBhcmFtIGV4aXRDb2RlIC0gVGhlIGNoaWxkJ3MgZXhpdCBjb2RlLCBvciBgbnVsbGAgd2hlbiBhIHNpZ25hbCBlbmRlZCBpdCBmaXJzdC5cbiAqIEByZXR1cm5zIFRoZSBjb2RlIGFzIGl0IHNob3VsZCBiZSByZWFkIGJhY2suXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEV4aXRDb2RlKGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGV4aXRDb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICcobm9uZSAtIHRoZSBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkIGJlZm9yZSBpdCBjb3VsZCBleGl0KSc7XG4gIH1cblxuICByZXR1cm4gZXhpdENvZGUgPCBNSU5fTlRfU1RBVFVTX0VYSVRfQ09ERSA/IFN0cmluZyhleGl0Q29kZSkgOiBgJHtTdHJpbmcoZXhpdENvZGUpfSAoMHgke2V4aXRDb2RlLnRvU3RyaW5nKEhFWF9SQURJWCkudG9VcHBlckNhc2UoKX0pYDtcbn1cblxuLyoqXG4gKiBOYW1lcyB3aGljaCBvZiB0aGUgZm91ciB3YXlzIEVTTGludCBmYWlsZWQgdG8gbGludCB0aGlzIHdhcy5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gV2hhdCB0aGUgRVNMaW50IGNoaWxkIGRpZC5cbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBsaW5lIG9mIHtAbGluayBkZXNjcmliZUZhaWx1cmVUb0xpbnR9J3MgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RmFpbHVyZUhlYWRsaW5lKHJlc3VsdDogRXhlY1Jlc3VsdCk6IHN0cmluZyB7XG4gIGlmIChyZXN1bHQuZXhpdFNpZ25hbCAhPT0gbnVsbCkge1xuICAgIHJldHVybiAnRVNMaW50IHdhcyBLSUxMRUQgYmVmb3JlIGl0IGZpbmlzaGVkIGxpbnRpbmcuJztcbiAgfVxuXG4gIGlmIChyZXN1bHQuZXhpdENvZGUgIT09IG51bGwgJiYgcmVzdWx0LmV4aXRDb2RlID49IE1JTl9OVF9TVEFUVVNfRVhJVF9DT0RFKSB7XG4gICAgcmV0dXJuICdFU0xpbnQgRElFRCBhdCB0aGUgT1MgbGV2ZWwgLSBhbiBhY2Nlc3MgdmlvbGF0aW9uIG9yIHNpbWlsYXIsIHdpdGggbm8gZGlhZ25vc3RpYyBvZiBpdHMgb3duLic7XG4gIH1cblxuICBpZiAoUlVMRV9DUkFTSF9SRUdfRVhQLnRlc3QocmVzdWx0LnN0ZGVycikpIHtcbiAgICByZXR1cm4gJ0VTTGludCBDUkFTSEVEOiBhIHJ1bGUgdGhyZXcgd2hpbGUgbGludGluZy4gVGhlIHJ1bGUgYW5kIHRoZSBmaWxlIGl0IHdhcyBvbiBhcmUgbmFtZWQgYmVsb3cuJztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKEVTTElOVF9BQk9SVF9CQU5ORVIpXG4gICAgPyAnRVNMaW50IEFCT1JURUQ6IGl0IHRocmV3IGluc3RlYWQgb2YgZmluaXNoaW5nIC0gYSBicm9rZW4gY29uZmlnIG9yIGNvbW1hbmQgbGluZSwgb3IgYW4gaW50ZXJuYWwgZXJyb3IuJ1xuICAgIDogJ0VTTGludCBleGl0ZWQgbm9uLXplcm8gd2l0aG91dCByZXBvcnRpbmcgZmluZGluZ3MsIHNvIGl0IGRpZCBub3QgZmluaXNoIGxpbnRpbmcuJztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGtCQUFrQjtBQUMzQixTQUFTLFVBQVU7QUFJbkIsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxpQkFBaUI7QUFDMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFLUCxNQUFNLDJCQUE4QztBQUFBLEVBQ2xELFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFDWjtBQW9CQSxNQUFNLHdDQUEyRCxDQUFDLGtCQUFrQixLQUFLLG1CQUFtQjtBQWVyRyxNQUFNLHdCQUF3QjtBQWFyQyxNQUFNLHlCQUF5QjtBQUUvQixNQUFNLGlDQUFpQztBQVF2QyxNQUFNLHNCQUFzQjtBQUs1QixNQUFNLHFCQUFxQjtBQUszQixNQUFNLG9CQUFvQjtBQUsxQixNQUFNLHNCQUFzQjtBQUU1QixNQUFNLDJCQUEyQjtBQVNqQyxNQUFNLDBCQUEwQjtBQUVoQyxNQUFNLFlBQVk7QUFtQ1gsU0FBUyxtQkFBbUIsUUFBb0M7QUFDckUsTUFBSSxPQUFPLGFBQWEsMEJBQTBCLE9BQU8sZUFBZSxNQUFNO0FBQzVFLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxPQUFPLGFBQWEsa0NBQWtDLENBQUMsT0FBTyxPQUFPLFNBQVMsbUJBQW1CLElBQ3BHLGtCQUNBO0FBQ047QUFRTyxTQUFTLHNCQUFzQixRQUE0QjtBQUNoRSxRQUFNLFVBQVUsc0JBQXNCLE9BQU8sTUFBTTtBQUVuRCxTQUFPO0FBQUEsSUFDTCxtQkFBbUIsTUFBTTtBQUFBLElBQ3pCO0FBQUEsSUFDQTtBQUFBLElBQ0EsZ0JBQWdCLGVBQWUsT0FBTyxRQUFRLENBQUM7QUFBQSxJQUMvQyxHQUFHLE9BQU8sZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixPQUFPLFVBQVUsRUFBRTtBQUFBLElBQ3BGLFFBQVEsU0FBUyxJQUFJLG1CQUFtQjtBQUFBLElBQ3hDLEdBQUcsUUFBUSxJQUFJLENBQUMsV0FBVyxPQUFPLE1BQU0sRUFBRTtBQUFBLEVBQzVDLEVBQUUsS0FBSyxJQUFJO0FBQ2I7QUFPTyxTQUFTLGtCQUEyQjtBQUN6QyxTQUFPLHlCQUF5QixLQUFLLENBQUMsYUFBYSxXQUFXLHdCQUF3QixFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1RztBQVNBLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxFQUFFLHVCQUF1QixPQUFPLFVBQVUsSUFBSSxXQUFXLENBQUM7QUFDaEUsTUFBSSxDQUFDLGdCQUFnQixLQUFLLHVCQUF1QjtBQUMvQyxtQkFBZSxhQUFhLEVBQUUsaUVBQWlFO0FBQy9GLFVBQU0sR0FBRyx1QkFBdUIsd0JBQXdCLEVBQUUsTUFBTSxTQUFTLHFCQUFxQixFQUFFLENBQUMsQ0FBQztBQUFBLEVBQ3BHO0FBR0EsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsVUFBVSxhQUFhO0FBRWhFLFFBQU0sU0FBUyxNQUFNLGFBQWE7QUFBQSxJQUNoQyxHQUFHLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFDeEMsR0FBRztBQUFBLElBQ0gsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUM7QUFBQSxJQUM3QixFQUFFLGtCQUFrQixRQUFRO0FBQUEsRUFDOUIsR0FBRztBQUFBLElBQ0Qsc0JBQXNCO0FBQUEsSUFDdEIsc0JBQXNCO0FBQUEsRUFDeEIsQ0FBQztBQUVELFFBQU0sT0FBTyxtQkFBbUIsTUFBTTtBQUV0QyxNQUFJLFNBQVMsU0FBUztBQUNwQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLElBQUksTUFBTSxTQUFTLGtCQUFrQix3QkFBd0Isc0JBQXNCLE1BQU0sQ0FBQztBQUNsRztBQVVBLFNBQVMsc0JBQXNCLFFBQTBCO0FBQ3ZELFFBQU0sVUFBb0IsQ0FBQztBQUUzQixhQUFXLFdBQVcsT0FBTyxNQUFNLElBQUksR0FBRztBQUN4QyxRQUFJLFFBQVEsV0FBVywwQkFBMEI7QUFDL0M7QUFBQSxJQUNGO0FBRUEsVUFBTSxPQUFPLFFBQVEsS0FBSztBQUMxQixVQUFNLFVBQVUsU0FBUyxNQUNwQixLQUFLLFdBQVcsbUJBQW1CLEtBQ25DLEtBQUssV0FBVyxpQkFBaUIsS0FDakMsb0JBQW9CLEtBQUssSUFBSTtBQUNsQyxRQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsU0FBUyxJQUFJLEdBQUc7QUFDdkMsY0FBUSxLQUFLLElBQUk7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFRQSxTQUFTLGVBQWUsVUFBaUM7QUFDdkQsTUFBSSxhQUFhLE1BQU07QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFdBQVcsMEJBQTBCLE9BQU8sUUFBUSxJQUFJLEdBQUcsT0FBTyxRQUFRLENBQUMsT0FBTyxTQUFTLFNBQVMsU0FBUyxFQUFFLFlBQVksQ0FBQztBQUNySTtBQVFBLFNBQVMsbUJBQW1CLFFBQTRCO0FBQ3RELE1BQUksT0FBTyxlQUFlLE1BQU07QUFDOUIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLE9BQU8sYUFBYSxRQUFRLE9BQU8sWUFBWSx5QkFBeUI7QUFDMUUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLG1CQUFtQixLQUFLLE9BQU8sTUFBTSxHQUFHO0FBQzFDLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxPQUFPLE9BQU8sU0FBUyxtQkFBbUIsSUFDN0MsMkdBQ0E7QUFDTjsiLCJuYW1lcyI6W119
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
export * as 'auto' from './auto.mjs';
|
|
3
|
+
export * as 'biome' from './biome.mjs';
|
|
2
4
|
export * as 'cspell-content' from './cspell-content.mjs';
|
|
3
5
|
export * as 'cspell' from './cspell.mjs';
|
|
4
6
|
export * as 'eslint-agnostic-core-boundary' from './eslint-agnostic-core-boundary.mjs';
|
|
@@ -3,6 +3,8 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import * as auto from "./auto.mjs";
|
|
7
|
+
import * as biome from "./biome.mjs";
|
|
6
8
|
import * as cspell_content from "./cspell-content.mjs";
|
|
7
9
|
import * as cspell from "./cspell.mjs";
|
|
8
10
|
import * as eslint_agnostic_core_boundary from "./eslint-agnostic-core-boundary.mjs";
|
|
@@ -18,6 +20,8 @@ import * as markdownlint_rules from "./markdownlint-rules/index.mjs";
|
|
|
18
20
|
import * as markdownlint from "./markdownlint.mjs";
|
|
19
21
|
import * as over_exposure from "./over-exposure.mjs";
|
|
20
22
|
export {
|
|
23
|
+
auto,
|
|
24
|
+
biome,
|
|
21
25
|
cspell,
|
|
22
26
|
cspell_content as "cspell-content",
|
|
23
27
|
eslint,
|
|
@@ -33,4 +37,4 @@ export {
|
|
|
33
37
|
markdownlint_rules as "markdownlint-rules",
|
|
34
38
|
over_exposure as "over-exposure"
|
|
35
39
|
};
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYXV0bycgZnJvbSAnLi9hdXRvLnRzJztcbmV4cG9ydCAqIGFzICdiaW9tZScgZnJvbSAnLi9iaW9tZS50cyc7XG5leHBvcnQgKiBhcyAnY3NwZWxsLWNvbnRlbnQnIGZyb20gJy4vY3NwZWxsLWNvbnRlbnQudHMnO1xuZXhwb3J0ICogYXMgJ2NzcGVsbCcgZnJvbSAnLi9jc3BlbGwudHMnO1xuZXhwb3J0ICogYXMgJ2VzbGludC1hZ25vc3RpYy1jb3JlLWJvdW5kYXJ5JyBmcm9tICcuL2VzbGludC1hZ25vc3RpYy1jb3JlLWJvdW5kYXJ5LnRzJztcbmV4cG9ydCAqIGFzICdlc2xpbnQtY29uZmlnJyBmcm9tICcuL2VzbGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2VzbGludC1uby1yZXN0cmljdGVkLXN5bnRheCcgZnJvbSAnLi9lc2xpbnQtbm8tcmVzdHJpY3RlZC1zeW50YXgudHMnO1xuZXhwb3J0ICogYXMgJ2VzbGludC1ydWxlcycgZnJvbSAnLi9lc2xpbnQtcnVsZXMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2VzbGludCcgZnJvbSAnLi9lc2xpbnQudHMnO1xuZXhwb3J0ICogYXMgJ2xpbnQtaWdub3JlcycgZnJvbSAnLi9saW50LWlnbm9yZXMudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3dubGludC1jbGkyLWNvbmZpZycgZnJvbSAnLi9tYXJrZG93bmxpbnQtY2xpMi1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3dubGludC1jb250ZW50JyBmcm9tICcuL21hcmtkb3dubGludC1jb250ZW50LnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bmxpbnQtaWdub3JlcycgZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5leHBvcnQgKiBhcyAnbWFya2Rvd25saW50LXJ1bGVzJyBmcm9tICcuL21hcmtkb3dubGludC1ydWxlcy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbWFya2Rvd25saW50JyBmcm9tICcuL21hcmtkb3dubGludC50cyc7XG5leHBvcnQgKiBhcyAnb3Zlci1leHBvc3VyZScgZnJvbSAnLi9vdmVyLWV4cG9zdXJlLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWSxVQUFZO0FBQ3hCLFlBQVksV0FBYTtBQUN6QixZQUFZQSxvQkFBc0I7QUFDbEMsWUFBWSxZQUFjO0FBQzFCLFlBQVlDLG1DQUFxQztBQUNqRCxZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsaUNBQW1DO0FBQy9DLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZLFlBQWM7QUFDMUIsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLDhCQUFnQztBQUM1QyxZQUFZQywwQkFBNEI7QUFDeEMsWUFBWUMsMEJBQTRCO0FBQ3hDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZLGtCQUFvQjtBQUNoQyxZQUFZQyxtQkFBcUI7IiwKICAibmFtZXMiOiBbImNzcGVsbC1jb250ZW50IiwgImVzbGludC1hZ25vc3RpYy1jb3JlLWJvdW5kYXJ5IiwgImVzbGludC1jb25maWciLCAiZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4IiwgImVzbGludC1ydWxlcyIsICJsaW50LWlnbm9yZXMiLCAibWFya2Rvd25saW50LWNsaTItY29uZmlnIiwgIm1hcmtkb3dubGludC1jb250ZW50IiwgIm1hcmtkb3dubGludC1pZ25vcmVzIiwgIm1hcmtkb3dubGludC1ydWxlcyIsICJvdmVyLWV4cG9zdXJlIl0KfQo=
|