@dollhousemcp/mcp-server 1.6.10 → 1.7.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/CHANGELOG.md +8 -0
- package/README.github.md +1036 -0
- package/README.md +165 -1668
- package/README.md.backup +298 -0
- package/README.npm.md +298 -0
- package/dist/cache/CollectionIndexCache.d.ts.map +1 -1
- package/dist/cache/CollectionIndexCache.js +2 -2
- package/dist/collection/CollectionBrowser.d.ts.map +1 -1
- package/dist/collection/CollectionBrowser.js +6 -3
- package/dist/collection/CollectionIndexManager.d.ts.map +1 -1
- package/dist/collection/CollectionIndexManager.js +4 -2
- package/dist/collection/GitHubClient.d.ts.map +1 -1
- package/dist/collection/GitHubClient.js +5 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +3 -3
- package/dist/index.d.ts +0 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +87 -98
- package/dist/persona/export-import/index.d.ts +1 -3
- package/dist/persona/export-import/index.d.ts.map +1 -1
- package/dist/persona/export-import/index.js +2 -3
- package/dist/portfolio/PortfolioRepoManager.d.ts +1 -1
- package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioRepoManager.js +118 -33
- package/dist/security/contentValidator.js +8 -8
- package/dist/server/tools/PersonaTools.d.ts.map +1 -1
- package/dist/server/tools/PersonaTools.js +36 -76
- package/dist/server/types.d.ts +0 -2
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/tools/portfolio/PortfolioElementAdapter.d.ts.map +1 -1
- package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -1
- package/package.json +9 -3
- package/dist/persona/export-import/PersonaSharer.d.ts +0 -81
- package/dist/persona/export-import/PersonaSharer.d.ts.map +0 -1
- package/dist/persona/export-import/PersonaSharer.js +0 -678
|
@@ -14,7 +14,9 @@ import * as path from 'path';
|
|
|
14
14
|
import * as os from 'os';
|
|
15
15
|
import { logger } from '../utils/logger.js';
|
|
16
16
|
export class CollectionIndexManager {
|
|
17
|
-
|
|
17
|
+
// Use GitHub Pages index which is automatically updated by workflow
|
|
18
|
+
// Old URL was stale: https://raw.githubusercontent.com/DollhouseMCP/collection/main/public/collection-index.json
|
|
19
|
+
INDEX_URL = 'https://dollhousemcp.github.io/collection/collection-index.json';
|
|
18
20
|
TTL_MS;
|
|
19
21
|
FETCH_TIMEOUT_MS;
|
|
20
22
|
MAX_RETRIES;
|
|
@@ -496,4 +498,4 @@ export class CollectionIndexManager {
|
|
|
496
498
|
}
|
|
497
499
|
}
|
|
498
500
|
}
|
|
499
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25JbmRleE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9CNUMsTUFBTSxPQUFPLHNCQUFzQjtJQUNoQixTQUFTLEdBQUcsNkZBQTZGLENBQUM7SUFDMUcsTUFBTSxDQUFTO0lBQ2YsZ0JBQWdCLENBQVM7SUFDekIsV0FBVyxDQUFTO0lBQ3BCLG1CQUFtQixDQUFTO0lBQzVCLGtCQUFrQixDQUFTO0lBQzNCLFVBQVUsQ0FBUztJQUU1QixXQUFXLEdBQXFDLElBQUksQ0FBQztJQUNyRCx3QkFBd0IsR0FBeUIsSUFBSSxDQUFDO0lBQ3RELFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLHlCQUF5QixHQUFHLENBQUMsQ0FBQztJQUNyQix5QkFBeUIsR0FBRyxDQUFDLENBQUM7SUFDOUIsMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZO0lBQ3hELGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxDQUFDLHFDQUFxQztJQUM5RCxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsNkJBQTZCO0lBRXBFLGtDQUFrQztJQUNqQixjQUFjLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxTQUFTO0lBQzFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztJQUN4QiwyQkFBMkIsR0FBRyxJQUFJLENBQUM7SUFD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O0lBQ0gsS0FBSyxDQUFDLHdCQUF3QjtRQUM1QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3Rpb24gSW5kZXggTWFuYWdlciB3aXRoIEJhY2tncm91bmQgUmVmcmVzaCBhbmQgUm9idXN0IENhY2hpbmdcbiAqIFxuICogVGhpcyBtYW5hZ2VyIGltcGxlbWVudHM6XG4gKiAtIDEtaG91ciBUVEwgd2l0aCBsb2NhbCBmaWxlIGNhY2hpbmdcbiAqIC0gQmFja2dyb3VuZCByZWZyZXNoIHdpdGhvdXQgYmxvY2tpbmcgb3BlcmF0aW9uc1xuICogLSBFeHBvbmVudGlhbCBiYWNrb2ZmIHJldHJ5IGxvZ2ljXG4gKiAtIENvbmZpZ3VyYWJsZSB0aW1lb3V0cyB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiAtIFJldHVybiBzdGFsZSBjYWNoZSB3aGlsZSByZWZyZXNoaW5nIGluIGJhY2tncm91bmRcbiAqIC0gQ29tcHJlaGVuc2l2ZSBlcnJvciBoYW5kbGluZyBmb3IgcHJvZHVjdGlvbiB1c2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkluZGV4IH0gZnJvbSAnLi4vdHlwZXMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JbmRleENhY2hlRW50cnkge1xuICBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBldGFnPzogc3RyaW5nO1xuICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgY2hlY2tzdW06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyQ29uZmlnIHtcbiAgdHRsTXM/OiBudW1iZXI7XG4gIGZldGNoVGltZW91dE1zPzogbnVtYmVyO1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuICBiYXNlUmV0cnlEZWxheU1zPzogbnVtYmVyO1xuICBtYXhSZXRyeURlbGF5TXM/OiBudW1iZXI7XG4gIGNhY2hlRGlyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkluZGV4TWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluL3B1YmxpYy9jb2xsZWN0aW9uLWluZGV4Lmpzb24nO1xuICBwcml2YXRlIHJlYWRvbmx5IFRUTF9NUzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IEZFVENIX1RJTUVPVVRfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUkVUUklFUzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IEJBU0VfUkVUUllfREVMQVlfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUkVUUllfREVMQVlfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9GSUxFOiBzdHJpbmc7XG4gIFxuICBwcml2YXRlIGNhY2hlZEluZGV4OiBDb2xsZWN0aW9uSW5kZXhDYWNoZUVudHJ5IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA9IDA7XG4gIHByaXZhdGUgY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZSA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0lSQ1VJVF9CUkVBS0VSX1RIUkVTSE9MRCA9IDU7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0lSQ1VJVF9CUkVBS0VSX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbnV0ZXNcbiAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX1RIUkVTSE9MRCA9IDAuODsgLy8gUmVmcmVzaCB3aGVuIDgwJSBvZiBUVEwgaGFzIHBhc3NlZFxuICBwcml2YXRlIHJlYWRvbmx5IEpJVFRFUl9GQUNUT1IgPSAwLjI1OyAvLyDCsTI1JSByYW5kb21uZXNzIGZvciBqaXR0ZXJcbiAgXG4gIC8vIERlZmF1bHQgY29uZmlndXJhdGlvbiBjb25zdGFudHNcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1RUTF9NUyA9IDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXJcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01BWF9SRVRSSUVTID0gMztcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0JBU0VfUkVUUllfREVMQVlfTVMgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTUFYX1JFVFJZX0RFTEFZX01TID0gMzAwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9GRVRDSF9USU1FT1VUX01TID0gNTAwMDsgLy8gNSBzZWNvbmRzXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0hFQ0tTVU1fTEVOR1RIID0gODtcbiAgcHJpdmF0ZSByZWFkb25seSBKU09OX0lOREVOVCA9IDI7XG4gIFxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbGxlY3Rpb25JbmRleE1hbmFnZXJDb25maWcgPSB7fSkge1xuICAgIC8vIENvbmZpZ3VyYXRpb24gd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXNcbiAgICB0aGlzLlRUTF9NUyA9IGNvbmZpZy50dGxNcyB8fCB0aGlzLkRFRkFVTFRfVFRMX01TO1xuICAgIHRoaXMuRkVUQ0hfVElNRU9VVF9NUyA9IHRoaXMucGFyc2VGZXRjaFRpbWVvdXQoY29uZmlnLmZldGNoVGltZW91dE1zKTtcbiAgICB0aGlzLk1BWF9SRVRSSUVTID0gY29uZmlnLm1heFJldHJpZXMgfHwgdGhpcy5ERUZBVUxUX01BWF9SRVRSSUVTO1xuICAgIHRoaXMuQkFTRV9SRVRSWV9ERUxBWV9NUyA9IGNvbmZpZy5iYXNlUmV0cnlEZWxheU1zIHx8IHRoaXMuREVGQVVMVF9CQVNFX1JFVFJZX0RFTEFZX01TO1xuICAgIHRoaXMuTUFYX1JFVFJZX0RFTEFZX01TID0gY29uZmlnLm1heFJldHJ5RGVsYXlNcyB8fCB0aGlzLkRFRkFVTFRfTUFYX1JFVFJZX0RFTEFZX01TO1xuICAgIFxuICAgIC8vIENhY2hlIGRpcmVjdG9yeSAtIHVzZSB+Ly5kb2xsaG91c2UvY2FjaGUvY29sbGVjdGlvbi1pbmRleC5qc29uIGFzIHNwZWNpZmllZFxuICAgIGNvbnN0IGNhY2hlRGlyID0gY29uZmlnLmNhY2hlRGlyIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ2NhY2hlJyk7XG4gICAgdGhpcy5DQUNIRV9GSUxFID0gcGF0aC5qb2luKGNhY2hlRGlyLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIGluaXRpYWxpemVkJywge1xuICAgICAgdHRsTXM6IHRoaXMuVFRMX01TLFxuICAgICAgZmV0Y2hUaW1lb3V0TXM6IHRoaXMuRkVUQ0hfVElNRU9VVF9NUyxcbiAgICAgIGNhY2hlRmlsZTogdGhpcy5DQUNIRV9GSUxFLFxuICAgICAgbWF4UmV0cmllczogdGhpcy5NQVhfUkVUUklFU1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogUGFyc2UgZmV0Y2ggdGltZW91dCBmcm9tIGNvbmZpZyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUZldGNoVGltZW91dChjb25maWdWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGUgZmlyc3RcbiAgICBjb25zdCBlbnZUaW1lb3V0ID0gcHJvY2Vzcy5lbnYuQ09MTEVDVElPTl9GRVRDSF9USU1FT1VUO1xuICAgIGlmIChlbnZUaW1lb3V0KSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChlbnZUaW1lb3V0LCAxMCk7XG4gICAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgcGFyc2VkID4gMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFVzaW5nIENPTExFQ1RJT05fRkVUQ0hfVElNRU9VVCBmcm9tIGVudmlyb25tZW50OiAke3BhcnNlZH1tc2ApO1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLndhcm4oYEludmFsaWQgQ09MTEVDVElPTl9GRVRDSF9USU1FT1VUIHZhbHVlOiAke2VudlRpbWVvdXR9LCB1c2luZyBkZWZhdWx0YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZhbGwgYmFjayB0byBjb25maWcgdmFsdWUgb3IgZGVmYXVsdFxuICAgIHJldHVybiBjb25maWdWYWx1ZSB8fCB0aGlzLkRFRkFVTFRfRkVUQ0hfVElNRU9VVF9NUztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjb2xsZWN0aW9uIGluZGV4IHdpdGggc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZSBwYXR0ZXJuXG4gICAqIFJldHVybnMgY2FjaGVkIGRhdGEgaW1tZWRpYXRlbHkgaWYgYXZhaWxhYmxlLCByZWZyZXNoZXMgaW4gYmFja2dyb3VuZFxuICAgKi9cbiAgYXN5bmMgZ2V0SW5kZXgoKTogUHJvbWlzZTxDb2xsZWN0aW9uSW5kZXg+IHtcbiAgICB0cnkge1xuICAgICAgLy8gTG9hZCBmcm9tIG1lbW9yeSBjYWNoZSBmaXJzdFxuICAgICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEZyb21EaXNrKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCByZXR1cm4gc3RhbGUgY2FjaGUgd2hpbGUgcmVmcmVzaGluZ1xuICAgICAgY29uc3Qgc2hvdWxkUmVmcmVzaCA9IHRoaXMuc2hvdWxkUmVmcmVzaENhY2hlKCk7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4ICYmICF0aGlzLmlzQ2FjaGVFeHBpcmVkKCkpIHtcbiAgICAgICAgLy8gQ2FjaGUgaXMgdmFsaWQsIHJldHVybiBpbW1lZGlhdGVseVxuICAgICAgICBsb2dnZXIuZGVidWcoJ1JldHVybmluZyB2YWxpZCBjYWNoZWQgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gU3RhcnQgYmFja2dyb3VuZCByZWZyZXNoIGlmIG5lZWRlZCBidXQgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgICBpZiAoc2hvdWxkUmVmcmVzaCAmJiAhdGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0QmFja2dyb3VuZFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgd2UgaGF2ZSBzdGFsZSBjYWNoZSwgcmV0dXJuIGl0IHdoaWxlIHJlZnJlc2hpbmcgaW4gYmFja2dyb3VuZFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXggJiYgdGhpcy5pc0NhY2hlRXhwaXJlZCgpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUmV0dXJuaW5nIHN0YWxlIGNhY2hlIHdoaWxlIHJlZnJlc2hpbmcgaW4gYmFja2dyb3VuZCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gU3RhcnQgYmFja2dyb3VuZCByZWZyZXNoIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmdcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgICAgIHRoaXMuc3RhcnRCYWNrZ3JvdW5kUmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleC5kYXRhO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBObyBjYWNoZSBhdmFpbGFibGUsIG11c3QgZmV0Y2ggc3luY2hyb25vdXNseVxuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBjYWNoZSBhdmFpbGFibGUsIGZldGNoaW5nIGNvbGxlY3Rpb24gaW5kZXggc3luY2hyb25vdXNseScpO1xuICAgICAgY29uc3QgZnJlc2hJbmRleCA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGUoZnJlc2hJbmRleCk7XG4gICAgICByZXR1cm4gZnJlc2hJbmRleC5kYXRhO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBjb2xsZWN0aW9uIGluZGV4JywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgXG4gICAgICAvLyBJZiB3ZSBoYXZlIGFueSBjYWNoZWQgZGF0YSAoZXZlbiBleHBpcmVkKSwgcmV0dXJuIGl0IGFzIGxhc3QgcmVzb3J0XG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBsb2dnZXIud2FybignUmV0dXJuaW5nIGV4cGlyZWQgY2FjaGUgYXMgbGFzdCByZXNvcnQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2xsZWN0aW9uIGluZGV4IG5vdCBhdmFpbGFibGU6ICR7dGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcmNlIHJlZnJlc2ggdGhlIGNvbGxlY3Rpb24gaW5kZXhcbiAgICovXG4gIGFzeW5jIGZvcmNlUmVmcmVzaCgpOiBQcm9taXNlPENvbGxlY3Rpb25JbmRleD4ge1xuICAgIGxvZ2dlci5kZWJ1ZygnRm9yY2UgcmVmcmVzaGluZyBjb2xsZWN0aW9uIGluZGV4Jyk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZyZXNoSW5kZXggPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlKGZyZXNoSW5kZXgpO1xuICAgICAgcmV0dXJuIGZyZXNoSW5kZXguZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGb3JjZSByZWZyZXNoIGZhaWxlZCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIFxuICAgICAgLy8gSWYgd2UgaGF2ZSBjYWNoZWQgZGF0YSwgcmV0dXJuIGl0XG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBsb2dnZXIud2FybignRm9yY2UgcmVmcmVzaCBmYWlsZWQsIHJldHVybmluZyBjYWNoZWQgZGF0YScpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleC5kYXRhO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjYWNoZSBzaG91bGQgYmUgcmVmcmVzaGVkICh3aXRoaW4gVFRMIGJ1dCBnZXR0aW5nIGNsb3NlIHRvIGV4cGlyeSlcbiAgICovXG4gIHByaXZhdGUgc2hvdWxkUmVmcmVzaENhY2hlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkgcmV0dXJuIHRydWU7XG4gICAgXG4gICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHRoaXMuY2FjaGVkSW5kZXgudGltZXN0YW1wO1xuICAgIGNvbnN0IHJlZnJlc2hUaHJlc2hvbGQgPSB0aGlzLlRUTF9NUyAqIHRoaXMuUkVGUkVTSF9USFJFU0hPTEQ7XG4gICAgXG4gICAgcmV0dXJuIGFnZSA+IHJlZnJlc2hUaHJlc2hvbGQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjYWNoZSBpcyBleHBpcmVkXG4gICAqL1xuICBwcml2YXRlIGlzQ2FjaGVFeHBpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkgcmV0dXJuIHRydWU7XG4gICAgXG4gICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHRoaXMuY2FjaGVkSW5kZXgudGltZXN0YW1wO1xuICAgIHJldHVybiBhZ2UgPiB0aGlzLlRUTF9NUztcbiAgfVxuICBcbiAgLyoqXG4gICAqIFN0YXJ0IGJhY2tncm91bmQgcmVmcmVzaCB3aXRob3V0IGJsb2NraW5nXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0QmFja2dyb3VuZFJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0JhY2tncm91bmQgcmVmcmVzaCBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGNpcmN1aXQgYnJlYWtlclxuICAgIGlmICh0aGlzLmlzQ2lyY3VpdEJyZWFrZXJPcGVuKCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ2lyY3VpdCBicmVha2VyIG9wZW4sIHNraXBwaW5nIGJhY2tncm91bmQgcmVmcmVzaCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmlzUmVmcmVzaGluZyA9IHRydWU7XG4gICAgXG4gICAgdGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2UgPSB0aGlzLnBlcmZvcm1CYWNrZ3JvdW5kUmVmcmVzaCgpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0JhY2tncm91bmQgcmVmcmVzaCBmYWlsZWQnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICAgIHRoaXMucmVjb3JkQ2lyY3VpdEJyZWFrZXJGYWlsdXJlKCk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJhY2tncm91bmRSZWZyZXNoUHJvbWlzZSA9IG51bGw7XG4gICAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFBlcmZvcm0gYmFja2dyb3VuZCByZWZyZXNoXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1CYWNrZ3JvdW5kUmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuZGVidWcoJ1N0YXJ0aW5nIGJhY2tncm91bmQgcmVmcmVzaCBvZiBjb2xsZWN0aW9uIGluZGV4Jyk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZyZXNoSW5kZXggPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlKGZyZXNoSW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBSZXNldCBjaXJjdWl0IGJyZWFrZXIgb24gc3VjY2Vzc1xuICAgICAgdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzID0gMDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0JhY2tncm91bmQgcmVmcmVzaCBmYWlsZWQnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCBjb2xsZWN0aW9uIGluZGV4IHdpdGggcmV0cnkgbG9naWMgYW5kIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hXaXRoUmV0cnkoKTogUHJvbWlzZTx7IGRhdGE6IENvbGxlY3Rpb25JbmRleDsgZXRhZz86IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogc3RyaW5nIH0+IHtcbiAgICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IG51bGwgPSBudWxsO1xuICAgIFxuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IHRoaXMuTUFYX1JFVFJJRVM7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLmNhbGN1bGF0ZVJldHJ5RGVsYXkoYXR0ZW1wdCk7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXRyeWluZyBmZXRjaCBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7dGhpcy5NQVhfUkVUUklFUyArIDF9KWApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2xlZXAoZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaENvbGxlY3Rpb25JbmRleCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZldGNoIGF0dGVtcHQgJHthdHRlbXB0ICsgMX0gZmFpbGVkYCwgeyBcbiAgICAgICAgICBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UobGFzdEVycm9yKSxcbiAgICAgICAgICB3aWxsUmV0cnk6IGF0dGVtcHQgPCB0aGlzLk1BWF9SRVRSSUVTXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IEVycm9yKCdBbGwgZmV0Y2ggYXR0ZW1wdHMgZmFpbGVkJyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgcmV0cnkgZGVsYXkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIGFuZCBqaXR0ZXJcbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlUmV0cnlEZWxheShhdHRlbXB0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmY6IGJhc2VEZWxheSAqICgyIF4gYXR0ZW1wdClcbiAgICBjb25zdCBleHBvbmVudGlhbERlbGF5ID0gdGhpcy5CQVNFX1JFVFJZX0RFTEFZX01TICogTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpO1xuICAgIFxuICAgIC8vIENhcCBhdCBtYXhpbXVtIGRlbGF5XG4gICAgY29uc3QgY2FwcGVkRGVsYXkgPSBNYXRoLm1pbihleHBvbmVudGlhbERlbGF5LCB0aGlzLk1BWF9SRVRSWV9ERUxBWV9NUyk7XG4gICAgXG4gICAgLy8gQWRkIGppdHRlciB0byBwcmV2ZW50IHRodW5kZXJpbmcgaGVyZFxuICAgIHJldHVybiB0aGlzLmFkZEppdHRlcihjYXBwZWREZWxheSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBBZGQgaml0dGVyICjCsTI1JSByYW5kb21uZXNzKSB0byBhIGRlbGF5IHRvIHByZXZlbnQgdGh1bmRlcmluZyBoZXJkIHByb2JsZW1zXG4gICAqL1xuICBwcml2YXRlIGFkZEppdHRlcihkZWxheTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBqaXR0ZXIgPSBkZWxheSAqIHRoaXMuSklUVEVSX0ZBQ1RPUiAqIChNYXRoLnJhbmRvbSgpIC0gMC41KTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgZGVsYXkgKyBqaXR0ZXIpO1xuICB9XG4gIFxuICAvKipcbiAgICogRmV0Y2ggY29sbGVjdGlvbiBpbmRleCBmcm9tIEdpdEh1YlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaENvbGxlY3Rpb25JbmRleCgpOiBQcm9taXNlPHsgZGF0YTogQ29sbGVjdGlvbkluZGV4OyBldGFnPzogc3RyaW5nOyBsYXN0TW9kaWZpZWQ/OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHRoaXMuRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIEJ1aWxkIGhlYWRlcnMgZm9yIGNvbmRpdGlvbmFsIHJlcXVlc3RzXG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AvMS4wJyxcbiAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBBZGQgY29uZGl0aW9uYWwgaGVhZGVycyBpZiB3ZSBoYXZlIGNhY2hlZCBkYXRhXG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleD8uZXRhZykge1xuICAgICAgICBoZWFkZXJzWydJZi1Ob25lLU1hdGNoJ10gPSB0aGlzLmNhY2hlZEluZGV4LmV0YWc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleD8ubGFzdE1vZGlmaWVkKSB7XG4gICAgICAgIGhlYWRlcnNbJ0lmLU1vZGlmaWVkLVNpbmNlJ10gPSB0aGlzLmNhY2hlZEluZGV4Lmxhc3RNb2RpZmllZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdGZXRjaGluZyBjb2xsZWN0aW9uIGluZGV4JywgeyBcbiAgICAgICAgdXJsOiB0aGlzLklOREVYX1VSTCxcbiAgICAgICAgdGltZW91dDogdGhpcy5GRVRDSF9USU1FT1VUX01TLFxuICAgICAgICBoYXNFdGFnOiAhIXRoaXMuY2FjaGVkSW5kZXg/LmV0YWdcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuSU5ERVhfVVJMLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIDMwNCBOb3QgTW9kaWZpZWRcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDMwNCAmJiB0aGlzLmNhY2hlZEluZGV4KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBub3QgbW9kaWZpZWQgKDMwNCksIHVwZGF0aW5nIGNhY2hlIHRpbWVzdGFtcCcpO1xuICAgICAgICB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvRGlzaygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHRoaXMuY2FjaGVkSW5kZXguZGF0YSxcbiAgICAgICAgICBldGFnOiB0aGlzLmNhY2hlZEluZGV4LmV0YWcsXG4gICAgICAgICAgbGFzdE1vZGlmaWVkOiB0aGlzLmNhY2hlZEluZGV4Lmxhc3RNb2RpZmllZFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENvbGxlY3Rpb25JbmRleDtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgdGhlIGluZGV4IHN0cnVjdHVyZVxuICAgICAgdGhpcy52YWxpZGF0ZUluZGV4U3RydWN0dXJlKGluZGV4RGF0YSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGV0YWcgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnZXRhZycpIHx8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdsYXN0LW1vZGlmaWVkJykgfHwgdW5kZWZpbmVkO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggZmV0Y2hlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICAgIHRvdGFsRWxlbWVudHM6IGluZGV4RGF0YS50b3RhbF9lbGVtZW50cyxcbiAgICAgICAgdmVyc2lvbjogaW5kZXhEYXRhLnZlcnNpb24sXG4gICAgICAgIGhhc0V0YWc6ICEhZXRhZ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGRhdGE6IGluZGV4RGF0YSwgZXRhZywgbGFzdE1vZGlmaWVkIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICBcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZldGNoIHRpbWVvdXQgYWZ0ZXIgJHt0aGlzLkZFVENIX1RJTUVPVVRfTVN9bXNgKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgY29sbGVjdGlvbiBpbmRleCBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVJbmRleFN0cnVjdHVyZShpbmRleDogYW55KTogYXNzZXJ0cyBpbmRleCBpcyBDb2xsZWN0aW9uSW5kZXgge1xuICAgIGlmICghaW5kZXggfHwgdHlwZW9mIGluZGV4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBub3QgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgaW5kZXgudmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbWlzc2luZyBvciBpbnZhbGlkIHZlcnNpb24nKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiBpbmRleC5nZW5lcmF0ZWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCBnZW5lcmF0ZWQgdGltZXN0YW1wJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgaW5kZXgudG90YWxfZWxlbWVudHMgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCB0b3RhbF9lbGVtZW50cycpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWluZGV4LmluZGV4IHx8IHR5cGVvZiBpbmRleC5pbmRleCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbWlzc2luZyBvciBpbnZhbGlkIGluZGV4IG9iamVjdCcpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWluZGV4Lm1ldGFkYXRhIHx8IHR5cGVvZiBpbmRleC5tZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbWlzc2luZyBvciBpbnZhbGlkIG1ldGFkYXRhJyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGNhY2hlIHdpdGggbmV3IGRhdGFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ2FjaGUoZmV0Y2hSZXN1bHQ6IHsgZGF0YTogQ29sbGVjdGlvbkluZGV4OyBldGFnPzogc3RyaW5nOyBsYXN0TW9kaWZpZWQ/OiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoZWNrc3VtID0gdGhpcy5jYWxjdWxhdGVDaGVja3N1bShmZXRjaFJlc3VsdC5kYXRhKTtcbiAgICBcbiAgICB0aGlzLmNhY2hlZEluZGV4ID0ge1xuICAgICAgZGF0YTogZmV0Y2hSZXN1bHQuZGF0YSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGV0YWc6IGZldGNoUmVzdWx0LmV0YWcsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGZldGNoUmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAgIHZlcnNpb246IGZldGNoUmVzdWx0LmRhdGEudmVyc2lvbixcbiAgICAgIGNoZWNrc3VtXG4gICAgfTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLnNhdmVUb0Rpc2soKTtcbiAgICBcbiAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgdXBkYXRlZCcsIHtcbiAgICAgIHZlcnNpb246IGZldGNoUmVzdWx0LmRhdGEudmVyc2lvbixcbiAgICAgIHRvdGFsRWxlbWVudHM6IGZldGNoUmVzdWx0LmRhdGEudG90YWxfZWxlbWVudHMsXG4gICAgICBjaGVja3N1bVxuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2FsY3VsYXRlIGNoZWNrc3VtIGZvciBkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb25cbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlQ2hlY2tzdW0oZGF0YTogQ29sbGVjdGlvbkluZGV4KTogc3RyaW5nIHtcbiAgICAvLyBTaW1wbGUgY2hlY2tzdW0gYmFzZWQgb24ga2V5IHByb3BlcnRpZXNcbiAgICBjb25zdCBjaGVja3N1bURhdGEgPSB7XG4gICAgICB2ZXJzaW9uOiBkYXRhLnZlcnNpb24sXG4gICAgICBnZW5lcmF0ZWQ6IGRhdGEuZ2VuZXJhdGVkLFxuICAgICAgdG90YWxfZWxlbWVudHM6IGRhdGEudG90YWxfZWxlbWVudHNcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShjaGVja3N1bURhdGEpKS50b1N0cmluZygnYmFzZTY0Jykuc3Vic3RyaW5nKDAsIHRoaXMuQ0hFQ0tTVU1fTEVOR1RIKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIExvYWQgY2FjaGUgZnJvbSBkaXNrXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRGcm9tRGlzaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuQ0FDSEVfRklMRSwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IEpTT04ucGFyc2UoZGF0YSkgYXMgQ29sbGVjdGlvbkluZGV4Q2FjaGVFbnRyeTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgY2FjaGUgc3RydWN0dXJlXG4gICAgICBpZiAoIWNhY2hlZC5kYXRhIHx8ICFjYWNoZWQudGltZXN0YW1wIHx8ICFjYWNoZWQudmVyc2lvbikge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0ludmFsaWQgY2FjaGUgc3RydWN0dXJlLCBpZ25vcmluZycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZlcmlmeSBjaGVja3N1bSBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChjYWNoZWQuY2hlY2tzdW0pIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRDaGVja3N1bSA9IHRoaXMuY2FsY3VsYXRlQ2hlY2tzdW0oY2FjaGVkLmRhdGEpO1xuICAgICAgICBpZiAoY2FjaGVkLmNoZWNrc3VtICE9PSBleHBlY3RlZENoZWNrc3VtKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdDYWNoZSBjaGVja3N1bSBtaXNtYXRjaCwgaWdub3JpbmcgY2FjaGVkIGRhdGEnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5jYWNoZWRJbmRleCA9IGNhY2hlZDtcbiAgICAgIFxuICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIGNhY2hlZC50aW1lc3RhbXA7XG4gICAgICBjb25zdCBpc0V4cGlyZWQgPSBhZ2UgPiB0aGlzLlRUTF9NUztcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdMb2FkZWQgY29sbGVjdGlvbiBpbmRleCBmcm9tIGRpc2sgY2FjaGUnLCB7XG4gICAgICAgIHZlcnNpb246IGNhY2hlZC52ZXJzaW9uLFxuICAgICAgICBhZ2U6IE1hdGgucm91bmQoYWdlIC8gMTAwMCksXG4gICAgICAgIGlzRXhwaXJlZCxcbiAgICAgICAgdG90YWxFbGVtZW50czogY2FjaGVkLmRhdGEudG90YWxfZWxlbWVudHNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBsb2FkIGNhY2hlIGZyb20gZGlzaycsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGNhY2hlIHRvIGRpc2tcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2F2ZVRvRGlzaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIGNhY2hlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZSh0aGlzLkNBQ0hFX0ZJTEUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgY2FjaGVEYXRhID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jYWNoZWRJbmRleCwgbnVsbCwgdGhpcy5KU09OX0lOREVOVCk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy5DQUNIRV9GSUxFLCBjYWNoZURhdGEsICd1dGY4Jyk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBjYWNoZSBzYXZlZCB0byBkaXNrJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIHNhdmUgY2FjaGUgdG8gZGlzaycsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgcGVyc2lzdGVuY2UgZmFpbHVyZXMgc2hvdWxkbid0IGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaXJjdWl0IGJyZWFrZXIgbG9naWNcbiAgICovXG4gIHByaXZhdGUgaXNDaXJjdWl0QnJlYWtlck9wZW4oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA8IHRoaXMuQ0lSQ1VJVF9CUkVBS0VSX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0RmFpbHVyZSA9IERhdGUubm93KCkgLSB0aGlzLmNpcmN1aXRCcmVha2VyTGFzdEZhaWx1cmU7XG4gICAgcmV0dXJuIHRpbWVTaW5jZUxhc3RGYWlsdXJlIDwgdGhpcy5DSVJDVUlUX0JSRUFLRVJfVElNRU9VVF9NUztcbiAgfVxuICBcbiAgcHJpdmF0ZSByZWNvcmRDaXJjdWl0QnJlYWtlckZhaWx1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzKys7XG4gICAgdGhpcy5jaXJjdWl0QnJlYWtlckxhc3RGYWlsdXJlID0gRGF0ZS5ub3coKTtcbiAgICBcbiAgICBpZiAodGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzID49IHRoaXMuQ0lSQ1VJVF9CUkVBS0VSX1RIUkVTSE9MRCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NpcmN1aXQgYnJlYWtlciBvcGVuZWQgZHVlIHRvIHJlcGVhdGVkIGZhaWx1cmVzJywge1xuICAgICAgICBmYWlsdXJlczogdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzLFxuICAgICAgICB0aW1lb3V0TXM6IHRoaXMuQ0lSQ1VJVF9CUkVBS0VSX1RJTUVPVVRfTVNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFV0aWxpdHkgbWV0aG9kc1xuICAgKi9cbiAgcHJpdmF0ZSBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG4gIFxuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0aXN0aWNzIGZvciBtb25pdG9yaW5nXG4gICAqL1xuICBnZXRDYWNoZVN0YXRzKCk6IHtcbiAgICBpc1ZhbGlkOiBib29sZWFuO1xuICAgIGFnZTogbnVtYmVyO1xuICAgIGhhc0NhY2hlOiBib29sZWFuO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgdG90YWxFbGVtZW50cz86IG51bWJlcjtcbiAgICBpc1JlZnJlc2hpbmc6IGJvb2xlYW47XG4gICAgY2lyY3VpdEJyZWFrZXJGYWlsdXJlczogbnVtYmVyO1xuICAgIGNpcmN1aXRCcmVha2VyT3BlbjogYm9vbGVhbjtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgYWdlOiAwLFxuICAgICAgICBoYXNDYWNoZTogZmFsc2UsXG4gICAgICAgIGlzUmVmcmVzaGluZzogdGhpcy5pc1JlZnJlc2hpbmcsXG4gICAgICAgIGNpcmN1aXRCcmVha2VyRmFpbHVyZXM6IHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyxcbiAgICAgICAgY2lyY3VpdEJyZWFrZXJPcGVuOiB0aGlzLmlzQ2lyY3VpdEJyZWFrZXJPcGVuKClcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcDtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogIXRoaXMuaXNDYWNoZUV4cGlyZWQoKSxcbiAgICAgIGFnZTogTWF0aC5yb3VuZChhZ2UgLyAxMDAwKSwgLy8gYWdlIGluIHNlY29uZHNcbiAgICAgIGhhc0NhY2hlOiB0cnVlLFxuICAgICAgdmVyc2lvbjogdGhpcy5jYWNoZWRJbmRleC52ZXJzaW9uLFxuICAgICAgdG90YWxFbGVtZW50czogdGhpcy5jYWNoZWRJbmRleC5kYXRhLnRvdGFsX2VsZW1lbnRzLFxuICAgICAgaXNSZWZyZXNoaW5nOiB0aGlzLmlzUmVmcmVzaGluZyxcbiAgICAgIGNpcmN1aXRCcmVha2VyRmFpbHVyZXM6IHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyxcbiAgICAgIGNpcmN1aXRCcmVha2VyT3BlbjogdGhpcy5pc0NpcmN1aXRCcmVha2VyT3BlbigpXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZSBkYXRhXG4gICAqL1xuICBhc3luYyBjbGVhckNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2FjaGVkSW5kZXggPSBudWxsO1xuICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA9IDA7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLkNBQ0hFX0ZJTEUpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIGZpbGUgZGVsZXRlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gZGVsZXRlIGNhY2hlIGZpbGUnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogV2FpdCBmb3IgYW55IG9uZ29pbmcgYmFja2dyb3VuZCByZWZyZXNoIHRvIGNvbXBsZXRlXG4gICAqL1xuICBhc3luYyB3YWl0Rm9yQmFja2dyb3VuZFJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmJhY2tncm91bmRSZWZyZXNoUHJvbWlzZTtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
501
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25JbmRleE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9CNUMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxvRUFBb0U7SUFDcEUsaUhBQWlIO0lBQ2hHLFNBQVMsR0FBRyxpRUFBaUUsQ0FBQztJQUM5RSxNQUFNLENBQVM7SUFDZixnQkFBZ0IsQ0FBUztJQUN6QixXQUFXLENBQVM7SUFDcEIsbUJBQW1CLENBQVM7SUFDNUIsa0JBQWtCLENBQVM7SUFDM0IsVUFBVSxDQUFTO0lBRTVCLFdBQVcsR0FBcUMsSUFBSSxDQUFDO0lBQ3JELHdCQUF3QixHQUF5QixJQUFJLENBQUM7SUFDdEQsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixzQkFBc0IsR0FBRyxDQUFDLENBQUM7SUFDM0IseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLHlCQUF5QixHQUFHLENBQUMsQ0FBQztJQUM5QiwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDeEQsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMscUNBQXFDO0lBQzlELGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7SUFFcEUsa0NBQWtDO0lBQ2pCLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVM7SUFDMUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hC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LENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCO1FBQzVCLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sbGVjdGlvbiBJbmRleCBNYW5hZ2VyIHdpdGggQmFja2dyb3VuZCBSZWZyZXNoIGFuZCBSb2J1c3QgQ2FjaGluZ1xuICogXG4gKiBUaGlzIG1hbmFnZXIgaW1wbGVtZW50czpcbiAqIC0gMS1ob3VyIFRUTCB3aXRoIGxvY2FsIGZpbGUgY2FjaGluZ1xuICogLSBCYWNrZ3JvdW5kIHJlZnJlc2ggd2l0aG91dCBibG9ja2luZyBvcGVyYXRpb25zXG4gKiAtIEV4cG9uZW50aWFsIGJhY2tvZmYgcmV0cnkgbG9naWNcbiAqIC0gQ29uZmlndXJhYmxlIHRpbWVvdXRzIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIC0gUmV0dXJuIHN0YWxlIGNhY2hlIHdoaWxlIHJlZnJlc2hpbmcgaW4gYmFja2dyb3VuZFxuICogLSBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nIGZvciBwcm9kdWN0aW9uIHVzZVxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSW5kZXggfSBmcm9tICcuLi90eXBlcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkluZGV4Q2FjaGVFbnRyeSB7XG4gIGRhdGE6IENvbGxlY3Rpb25JbmRleDtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGV0YWc/OiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjaGVja3N1bTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JbmRleE1hbmFnZXJDb25maWcge1xuICB0dGxNcz86IG51bWJlcjtcbiAgZmV0Y2hUaW1lb3V0TXM/OiBudW1iZXI7XG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIGJhc2VSZXRyeURlbGF5TXM/OiBudW1iZXI7XG4gIG1heFJldHJ5RGVsYXlNcz86IG51bWJlcjtcbiAgY2FjaGVEaXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIHtcbiAgLy8gVXNlIEdpdEh1YiBQYWdlcyBpbmRleCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgYnkgd29ya2Zsb3dcbiAgLy8gT2xkIFVSTCB3YXMgc3RhbGU6IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluL3B1YmxpYy9jb2xsZWN0aW9uLWluZGV4Lmpzb25cbiAgcHJpdmF0ZSByZWFkb25seSBJTkRFWF9VUkwgPSAnaHR0cHM6Ly9kb2xsaG91c2VtY3AuZ2l0aHViLmlvL2NvbGxlY3Rpb24vY29sbGVjdGlvbi1pbmRleC5qc29uJztcbiAgcHJpdmF0ZSByZWFkb25seSBUVExfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBGRVRDSF9USU1FT1VUX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JFVFJJRVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBCQVNFX1JFVFJZX0RFTEFZX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JFVFJZX0RFTEFZX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfRklMRTogc3RyaW5nO1xuICBcbiAgcHJpdmF0ZSBjYWNoZWRJbmRleDogQ29sbGVjdGlvbkluZGV4Q2FjaGVFbnRyeSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJhY2tncm91bmRSZWZyZXNoUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICBwcml2YXRlIGNpcmN1aXRCcmVha2VyTGFzdEZhaWx1cmUgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IENJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQgPSA1O1xuICBwcml2YXRlIHJlYWRvbmx5IENJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDsgLy8gNSBtaW51dGVzXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVGUkVTSF9USFJFU0hPTEQgPSAwLjg7IC8vIFJlZnJlc2ggd2hlbiA4MCUgb2YgVFRMIGhhcyBwYXNzZWRcbiAgcHJpdmF0ZSByZWFkb25seSBKSVRURVJfRkFDVE9SID0gMC4yNTsgLy8gwrEyNSUgcmFuZG9tbmVzcyBmb3Igaml0dGVyXG4gIFxuICAvLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9UVExfTVMgPSA2MCAqIDYwICogMTAwMDsgLy8gMSBob3VyXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9NQVhfUkVUUklFUyA9IDM7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9CQVNFX1JFVFJZX0RFTEFZX01TID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01BWF9SRVRSWV9ERUxBWV9NUyA9IDMwMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfRkVUQ0hfVElNRU9VVF9NUyA9IDUwMDA7IC8vIDUgc2Vjb25kc1xuICBwcml2YXRlIHJlYWRvbmx5IENIRUNLU1VNX0xFTkdUSCA9IDg7XG4gIHByaXZhdGUgcmVhZG9ubHkgSlNPTl9JTkRFTlQgPSAyO1xuICBcbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyQ29uZmlnID0ge30pIHtcbiAgICAvLyBDb25maWd1cmF0aW9uIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gICAgdGhpcy5UVExfTVMgPSBjb25maWcudHRsTXMgfHwgdGhpcy5ERUZBVUxUX1RUTF9NUztcbiAgICB0aGlzLkZFVENIX1RJTUVPVVRfTVMgPSB0aGlzLnBhcnNlRmV0Y2hUaW1lb3V0KGNvbmZpZy5mZXRjaFRpbWVvdXRNcyk7XG4gICAgdGhpcy5NQVhfUkVUUklFUyA9IGNvbmZpZy5tYXhSZXRyaWVzIHx8IHRoaXMuREVGQVVMVF9NQVhfUkVUUklFUztcbiAgICB0aGlzLkJBU0VfUkVUUllfREVMQVlfTVMgPSBjb25maWcuYmFzZVJldHJ5RGVsYXlNcyB8fCB0aGlzLkRFRkFVTFRfQkFTRV9SRVRSWV9ERUxBWV9NUztcbiAgICB0aGlzLk1BWF9SRVRSWV9ERUxBWV9NUyA9IGNvbmZpZy5tYXhSZXRyeURlbGF5TXMgfHwgdGhpcy5ERUZBVUxUX01BWF9SRVRSWV9ERUxBWV9NUztcbiAgICBcbiAgICAvLyBDYWNoZSBkaXJlY3RvcnkgLSB1c2Ugfi8uZG9sbGhvdXNlL2NhY2hlL2NvbGxlY3Rpb24taW5kZXguanNvbiBhcyBzcGVjaWZpZWRcbiAgICBjb25zdCBjYWNoZURpciA9IGNvbmZpZy5jYWNoZURpciB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdjYWNoZScpO1xuICAgIHRoaXMuQ0FDSEVfRklMRSA9IHBhdGguam9pbihjYWNoZURpciwgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpO1xuICAgIFxuICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbkluZGV4TWFuYWdlciBpbml0aWFsaXplZCcsIHtcbiAgICAgIHR0bE1zOiB0aGlzLlRUTF9NUyxcbiAgICAgIGZldGNoVGltZW91dE1zOiB0aGlzLkZFVENIX1RJTUVPVVRfTVMsXG4gICAgICBjYWNoZUZpbGU6IHRoaXMuQ0FDSEVfRklMRSxcbiAgICAgIG1heFJldHJpZXM6IHRoaXMuTUFYX1JFVFJJRVNcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFBhcnNlIGZldGNoIHRpbWVvdXQgZnJvbSBjb25maWcgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VGZXRjaFRpbWVvdXQoY29uZmlnVmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlIGZpcnN0XG4gICAgY29uc3QgZW52VGltZW91dCA9IHByb2Nlc3MuZW52LkNPTExFQ1RJT05fRkVUQ0hfVElNRU9VVDtcbiAgICBpZiAoZW52VGltZW91dCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoZW52VGltZW91dCwgMTApO1xuICAgICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBVc2luZyBDT0xMRUNUSU9OX0ZFVENIX1RJTUVPVVQgZnJvbSBlbnZpcm9ubWVudDogJHtwYXJzZWR9bXNgKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci53YXJuKGBJbnZhbGlkIENPTExFQ1RJT05fRkVUQ0hfVElNRU9VVCB2YWx1ZTogJHtlbnZUaW1lb3V0fSwgdXNpbmcgZGVmYXVsdGApO1xuICAgIH1cbiAgICBcbiAgICAvLyBGYWxsIGJhY2sgdG8gY29uZmlnIHZhbHVlIG9yIGRlZmF1bHRcbiAgICByZXR1cm4gY29uZmlnVmFsdWUgfHwgdGhpcy5ERUZBVUxUX0ZFVENIX1RJTUVPVVRfTVM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY29sbGVjdGlvbiBpbmRleCB3aXRoIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgcGF0dGVyblxuICAgKiBSZXR1cm5zIGNhY2hlZCBkYXRhIGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSwgcmVmcmVzaGVzIGluIGJhY2tncm91bmRcbiAgICovXG4gIGFzeW5jIGdldEluZGV4KCk6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIExvYWQgZnJvbSBtZW1vcnkgY2FjaGUgZmlyc3RcbiAgICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRGcm9tRGlzaygpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgcmV0dXJuIHN0YWxlIGNhY2hlIHdoaWxlIHJlZnJlc2hpbmdcbiAgICAgIGNvbnN0IHNob3VsZFJlZnJlc2ggPSB0aGlzLnNob3VsZFJlZnJlc2hDYWNoZSgpO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleCAmJiAhdGhpcy5pc0NhY2hlRXhwaXJlZCgpKSB7XG4gICAgICAgIC8vIENhY2hlIGlzIHZhbGlkLCByZXR1cm4gaW1tZWRpYXRlbHlcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZXR1cm5pbmcgdmFsaWQgY2FjaGVkIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXJ0IGJhY2tncm91bmQgcmVmcmVzaCBpZiBuZWVkZWQgYnV0IG5vdCBhbHJlYWR5IHJ1bm5pbmdcbiAgICAgICAgaWYgKHNob3VsZFJlZnJlc2ggJiYgIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEJhY2tncm91bmRSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgc3RhbGUgY2FjaGUsIHJldHVybiBpdCB3aGlsZSByZWZyZXNoaW5nIGluIGJhY2tncm91bmRcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4ICYmIHRoaXMuaXNDYWNoZUV4cGlyZWQoKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1JldHVybmluZyBzdGFsZSBjYWNoZSB3aGlsZSByZWZyZXNoaW5nIGluIGJhY2tncm91bmQnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXJ0IGJhY2tncm91bmQgcmVmcmVzaCBpZiBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICAgIGlmICghdGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0QmFja2dyb3VuZFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTm8gY2FjaGUgYXZhaWxhYmxlLCBtdXN0IGZldGNoIHN5bmNocm9ub3VzbHlcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm8gY2FjaGUgYXZhaWxhYmxlLCBmZXRjaGluZyBjb2xsZWN0aW9uIGluZGV4IHN5bmNocm9ub3VzbHknKTtcbiAgICAgIGNvbnN0IGZyZXNoSW5kZXggPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlKGZyZXNoSW5kZXgpO1xuICAgICAgcmV0dXJuIGZyZXNoSW5kZXguZGF0YTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgY29sbGVjdGlvbiBpbmRleCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIFxuICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgY2FjaGVkIGRhdGEgKGV2ZW4gZXhwaXJlZCksIHJldHVybiBpdCBhcyBsYXN0IHJlc29ydFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1JldHVybmluZyBleHBpcmVkIGNhY2hlIGFzIGxhc3QgcmVzb3J0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sbGVjdGlvbiBpbmRleCBub3QgYXZhaWxhYmxlOiAke3RoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JjZSByZWZyZXNoIHRoZSBjb2xsZWN0aW9uIGluZGV4XG4gICAqL1xuICBhc3luYyBmb3JjZVJlZnJlc2goKTogUHJvbWlzZTxDb2xsZWN0aW9uSW5kZXg+IHtcbiAgICBsb2dnZXIuZGVidWcoJ0ZvcmNlIHJlZnJlc2hpbmcgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIHJldHVybiBmcmVzaEluZGV4LmRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRm9yY2UgcmVmcmVzaCBmYWlsZWQnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgY2FjaGVkIGRhdGEsIHJldHVybiBpdFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZvcmNlIHJlZnJlc2ggZmFpbGVkLCByZXR1cm5pbmcgY2FjaGVkIGRhdGEnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgc2hvdWxkIGJlIHJlZnJlc2hlZCAod2l0aGluIFRUTCBidXQgZ2V0dGluZyBjbG9zZSB0byBleHBpcnkpXG4gICAqL1xuICBwcml2YXRlIHNob3VsZFJlZnJlc2hDYWNoZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHJldHVybiB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcDtcbiAgICBjb25zdCByZWZyZXNoVGhyZXNob2xkID0gdGhpcy5UVExfTVMgKiB0aGlzLlJFRlJFU0hfVEhSRVNIT0xEO1xuICAgIFxuICAgIHJldHVybiBhZ2UgPiByZWZyZXNoVGhyZXNob2xkO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgaXMgZXhwaXJlZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0NhY2hlRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHJldHVybiB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcDtcbiAgICByZXR1cm4gYWdlID4gdGhpcy5UVExfTVM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTdGFydCBiYWNrZ3JvdW5kIHJlZnJlc2ggd2l0aG91dCBibG9ja2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEJhY2tncm91bmRSZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggYWxyZWFkeSBpbiBwcm9ncmVzcycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBjaXJjdWl0IGJyZWFrZXJcbiAgICBpZiAodGhpcy5pc0NpcmN1aXRCcmVha2VyT3BlbigpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NpcmN1aXQgYnJlYWtlciBvcGVuLCBza2lwcGluZyBiYWNrZ3JvdW5kIHJlZnJlc2gnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIFxuICAgIHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlID0gdGhpcy5wZXJmb3JtQmFja2dyb3VuZFJlZnJlc2goKVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgICB0aGlzLnJlY29yZENpcmN1aXRCcmVha2VyRmFpbHVyZSgpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2UgPSBudWxsO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQZXJmb3JtIGJhY2tncm91bmQgcmVmcmVzaFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtQmFja2dyb3VuZFJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKCdTdGFydGluZyBiYWNrZ3JvdW5kIHJlZnJlc2ggb2YgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgY2lyY3VpdCBicmVha2VyIG9uIHN1Y2Nlc3NcbiAgICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA9IDA7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRmV0Y2ggY29sbGVjdGlvbiBpbmRleCB3aXRoIHJldHJ5IGxvZ2ljIGFuZCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoV2l0aFJldHJ5KCk6IFByb21pc2U8eyBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7IGV0YWc/OiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IHN0cmluZyB9PiB7XG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSB0aGlzLk1BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID4gMCkge1xuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5jYWxjdWxhdGVSZXRyeURlbGF5KGF0dGVtcHQpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmV0cnlpbmcgZmV0Y2ggaW4gJHtkZWxheX1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3RoaXMuTUFYX1JFVFJJRVMgKyAxfSlgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hDb2xsZWN0aW9uSW5kZXgoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGZXRjaCBhdHRlbXB0ICR7YXR0ZW1wdCArIDF9IGZhaWxlZGAsIHsgXG4gICAgICAgICAgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGxhc3RFcnJvciksXG4gICAgICAgICAgd2lsbFJldHJ5OiBhdHRlbXB0IDwgdGhpcy5NQVhfUkVUUklFU1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignQWxsIGZldGNoIGF0dGVtcHRzIGZhaWxlZCcpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2FsY3VsYXRlIHJldHJ5IGRlbGF5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBhbmQgaml0dGVyXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVJldHJ5RGVsYXkoYXR0ZW1wdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmOiBiYXNlRGVsYXkgKiAoMiBeIGF0dGVtcHQpXG4gICAgY29uc3QgZXhwb25lbnRpYWxEZWxheSA9IHRoaXMuQkFTRV9SRVRSWV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICBcbiAgICAvLyBDYXAgYXQgbWF4aW11bSBkZWxheVxuICAgIGNvbnN0IGNhcHBlZERlbGF5ID0gTWF0aC5taW4oZXhwb25lbnRpYWxEZWxheSwgdGhpcy5NQVhfUkVUUllfREVMQVlfTVMpO1xuICAgIFxuICAgIC8vIEFkZCBqaXR0ZXIgdG8gcHJldmVudCB0aHVuZGVyaW5nIGhlcmRcbiAgICByZXR1cm4gdGhpcy5hZGRKaXR0ZXIoY2FwcGVkRGVsYXkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQWRkIGppdHRlciAowrEyNSUgcmFuZG9tbmVzcykgdG8gYSBkZWxheSB0byBwcmV2ZW50IHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRKaXR0ZXIoZGVsYXk6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgaml0dGVyID0gZGVsYXkgKiB0aGlzLkpJVFRFUl9GQUNUT1IgKiAoTWF0aC5yYW5kb20oKSAtIDAuNSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGRlbGF5ICsgaml0dGVyKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGNvbGxlY3Rpb24gaW5kZXggZnJvbSBHaXRIdWJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hDb2xsZWN0aW9uSW5kZXgoKTogUHJvbWlzZTx7IGRhdGE6IENvbGxlY3Rpb25JbmRleDsgZXRhZz86IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aGlzLkZFVENIX1RJTUVPVVRfTVMpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBCdWlsZCBoZWFkZXJzIGZvciBjb25kaXRpb25hbCByZXF1ZXN0c1xuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCcsXG4gICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJ1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gQWRkIGNvbmRpdGlvbmFsIGhlYWRlcnMgaWYgd2UgaGF2ZSBjYWNoZWQgZGF0YVxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXg/LmV0YWcpIHtcbiAgICAgICAgaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddID0gdGhpcy5jYWNoZWRJbmRleC5ldGFnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXg/Lmxhc3RNb2RpZmllZCkge1xuICAgICAgICBoZWFkZXJzWydJZi1Nb2RpZmllZC1TaW5jZSddID0gdGhpcy5jYWNoZWRJbmRleC5sYXN0TW9kaWZpZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmV0Y2hpbmcgY29sbGVjdGlvbiBpbmRleCcsIHsgXG4gICAgICAgIHVybDogdGhpcy5JTkRFWF9VUkwsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuRkVUQ0hfVElNRU9VVF9NUyxcbiAgICAgICAgaGFzRXRhZzogISF0aGlzLmNhY2hlZEluZGV4Py5ldGFnXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLklOREVYX1VSTCwge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSAzMDQgTm90IE1vZGlmaWVkXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAzMDQgJiYgdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggbm90IG1vZGlmaWVkICgzMDQpLCB1cGRhdGluZyBjYWNoZSB0aW1lc3RhbXAnKTtcbiAgICAgICAgdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVUb0Rpc2soKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB0aGlzLmNhY2hlZEluZGV4LmRhdGEsXG4gICAgICAgICAgZXRhZzogdGhpcy5jYWNoZWRJbmRleC5ldGFnLFxuICAgICAgICAgIGxhc3RNb2RpZmllZDogdGhpcy5jYWNoZWRJbmRleC5sYXN0TW9kaWZpZWRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDb2xsZWN0aW9uSW5kZXg7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBpbmRleCBzdHJ1Y3R1cmVcbiAgICAgIHRoaXMudmFsaWRhdGVJbmRleFN0cnVjdHVyZShpbmRleERhdGEpO1xuICAgICAgXG4gICAgICBjb25zdCBldGFnID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2V0YWcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnbGFzdC1tb2RpZmllZCcpIHx8IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGZldGNoZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICB0b3RhbEVsZW1lbnRzOiBpbmRleERhdGEudG90YWxfZWxlbWVudHMsXG4gICAgICAgIHZlcnNpb246IGluZGV4RGF0YS52ZXJzaW9uLFxuICAgICAgICBoYXNFdGFnOiAhIWV0YWdcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4geyBkYXRhOiBpbmRleERhdGEsIGV0YWcsIGxhc3RNb2RpZmllZCB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZXRjaCB0aW1lb3V0IGFmdGVyICR7dGhpcy5GRVRDSF9USU1FT1VUX01TfW1zYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbGxlY3Rpb24gaW5kZXggc3RydWN0dXJlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlSW5kZXhTdHJ1Y3R1cmUoaW5kZXg6IGFueSk6IGFzc2VydHMgaW5kZXggaXMgQ29sbGVjdGlvbkluZGV4IHtcbiAgICBpZiAoIWluZGV4IHx8IHR5cGVvZiBpbmRleCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbm90IGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCB2ZXJzaW9uJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgaW5kZXguZ2VuZXJhdGVkICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgZ2VuZXJhdGVkIHRpbWVzdGFtcCcpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LnRvdGFsX2VsZW1lbnRzICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgdG90YWxfZWxlbWVudHMnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFpbmRleC5pbmRleCB8fCB0eXBlb2YgaW5kZXguaW5kZXggIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCBpbmRleCBvYmplY3QnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFpbmRleC5tZXRhZGF0YSB8fCB0eXBlb2YgaW5kZXgubWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCBtZXRhZGF0YScpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWNoZSB3aXRoIG5ldyBkYXRhXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNhY2hlKGZldGNoUmVzdWx0OiB7IGRhdGE6IENvbGxlY3Rpb25JbmRleDsgZXRhZz86IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGVja3N1bSA9IHRoaXMuY2FsY3VsYXRlQ2hlY2tzdW0oZmV0Y2hSZXN1bHQuZGF0YSk7XG4gICAgXG4gICAgdGhpcy5jYWNoZWRJbmRleCA9IHtcbiAgICAgIGRhdGE6IGZldGNoUmVzdWx0LmRhdGEsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBldGFnOiBmZXRjaFJlc3VsdC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBmZXRjaFJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgICB2ZXJzaW9uOiBmZXRjaFJlc3VsdC5kYXRhLnZlcnNpb24sXG4gICAgICBjaGVja3N1bVxuICAgIH07XG4gICAgXG4gICAgYXdhaXQgdGhpcy5zYXZlVG9EaXNrKCk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIHVwZGF0ZWQnLCB7XG4gICAgICB2ZXJzaW9uOiBmZXRjaFJlc3VsdC5kYXRhLnZlcnNpb24sXG4gICAgICB0b3RhbEVsZW1lbnRzOiBmZXRjaFJlc3VsdC5kYXRhLnRvdGFsX2VsZW1lbnRzLFxuICAgICAgY2hlY2tzdW1cbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBjaGVja3N1bSBmb3IgZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUNoZWNrc3VtKGRhdGE6IENvbGxlY3Rpb25JbmRleCk6IHN0cmluZyB7XG4gICAgLy8gU2ltcGxlIGNoZWNrc3VtIGJhc2VkIG9uIGtleSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgY2hlY2tzdW1EYXRhID0ge1xuICAgICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgICAgZ2VuZXJhdGVkOiBkYXRhLmdlbmVyYXRlZCxcbiAgICAgIHRvdGFsX2VsZW1lbnRzOiBkYXRhLnRvdGFsX2VsZW1lbnRzXG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY2hlY2tzdW1EYXRhKSkudG9TdHJpbmcoJ2Jhc2U2NCcpLnN1YnN0cmluZygwLCB0aGlzLkNIRUNLU1VNX0xFTkdUSCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNhY2hlIGZyb20gZGlza1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnJvbURpc2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLkNBQ0hFX0ZJTEUsICd1dGY4Jyk7XG4gICAgICBjb25zdCBjYWNoZWQgPSBKU09OLnBhcnNlKGRhdGEpIGFzIENvbGxlY3Rpb25JbmRleENhY2hlRW50cnk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGNhY2hlIHN0cnVjdHVyZVxuICAgICAgaWYgKCFjYWNoZWQuZGF0YSB8fCAhY2FjaGVkLnRpbWVzdGFtcCB8fCAhY2FjaGVkLnZlcnNpb24pIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdJbnZhbGlkIGNhY2hlIHN0cnVjdHVyZSwgaWdub3JpbmcnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWZXJpZnkgY2hlY2tzdW0gaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoY2FjaGVkLmNoZWNrc3VtKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkQ2hlY2tzdW0gPSB0aGlzLmNhbGN1bGF0ZUNoZWNrc3VtKGNhY2hlZC5kYXRhKTtcbiAgICAgICAgaWYgKGNhY2hlZC5jaGVja3N1bSAhPT0gZXhwZWN0ZWRDaGVja3N1bSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FjaGUgY2hlY2tzdW0gbWlzbWF0Y2gsIGlnbm9yaW5nIGNhY2hlZCBkYXRhJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSBjYWNoZWQ7XG4gICAgICBcbiAgICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSBjYWNoZWQudGltZXN0YW1wO1xuICAgICAgY29uc3QgaXNFeHBpcmVkID0gYWdlID4gdGhpcy5UVExfTVM7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTG9hZGVkIGNvbGxlY3Rpb24gaW5kZXggZnJvbSBkaXNrIGNhY2hlJywge1xuICAgICAgICB2ZXJzaW9uOiBjYWNoZWQudmVyc2lvbixcbiAgICAgICAgYWdlOiBNYXRoLnJvdW5kKGFnZSAvIDEwMDApLFxuICAgICAgICBpc0V4cGlyZWQsXG4gICAgICAgIHRvdGFsRWxlbWVudHM6IGNhY2hlZC5kYXRhLnRvdGFsX2VsZW1lbnRzXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gbG9hZCBjYWNoZSBmcm9tIGRpc2snLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjYWNoZSB0byBkaXNrXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNhdmVUb0Rpc2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSByZXR1cm47XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBjYWNoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUodGhpcy5DQUNIRV9GSUxFKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVkSW5kZXgsIG51bGwsIHRoaXMuSlNPTl9JTkRFTlQpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuQ0FDSEVfRklMRSwgY2FjaGVEYXRhLCAndXRmOCcpO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgc2F2ZWQgdG8gZGlzaycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBzYXZlIGNhY2hlIHRvIGRpc2snLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGNhY2hlIHBlcnNpc3RlbmNlIGZhaWx1cmVzIHNob3VsZG4ndCBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2lyY3VpdCBicmVha2VyIGxvZ2ljXG4gICAqL1xuICBwcml2YXRlIGlzQ2lyY3VpdEJyZWFrZXJPcGVuKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPCB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdGltZVNpbmNlTGFzdEZhaWx1cmUgPSBEYXRlLm5vdygpIC0gdGhpcy5jaXJjdWl0QnJlYWtlckxhc3RGYWlsdXJlO1xuICAgIHJldHVybiB0aW1lU2luY2VMYXN0RmFpbHVyZSA8IHRoaXMuQ0lSQ1VJVF9CUkVBS0VSX1RJTUVPVVRfTVM7XG4gIH1cbiAgXG4gIHByaXZhdGUgcmVjb3JkQ2lyY3VpdEJyZWFrZXJGYWlsdXJlKCk6IHZvaWQge1xuICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcysrO1xuICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZSA9IERhdGUubm93KCk7XG4gICAgXG4gICAgaWYgKHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA+PSB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDaXJjdWl0IGJyZWFrZXIgb3BlbmVkIGR1ZSB0byByZXBlYXRlZCBmYWlsdXJlcycsIHtcbiAgICAgICAgZmFpbHVyZXM6IHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyxcbiAgICAgICAgdGltZW91dE1zOiB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVdGlsaXR5IG1ldGhvZHNcbiAgICovXG4gIHByaXZhdGUgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZ1xuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBhZ2U6IG51bWJlcjtcbiAgICBoYXNDYWNoZTogYm9vbGVhbjtcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgIHRvdGFsRWxlbWVudHM/OiBudW1iZXI7XG4gICAgaXNSZWZyZXNoaW5nOiBib29sZWFuO1xuICAgIGNpcmN1aXRCcmVha2VyRmFpbHVyZXM6IG51bWJlcjtcbiAgICBjaXJjdWl0QnJlYWtlck9wZW46IGJvb2xlYW47XG4gIH0ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIGFnZTogMCxcbiAgICAgICAgaGFzQ2FjaGU6IGZhbHNlLFxuICAgICAgICBpc1JlZnJlc2hpbmc6IHRoaXMuaXNSZWZyZXNoaW5nLFxuICAgICAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICAgIGNpcmN1aXRCcmVha2VyT3BlbjogdGhpcy5pc0NpcmN1aXRCcmVha2VyT3BlbigpXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXA7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6ICF0aGlzLmlzQ2FjaGVFeHBpcmVkKCksXG4gICAgICBhZ2U6IE1hdGgucm91bmQoYWdlIC8gMTAwMCksIC8vIGFnZSBpbiBzZWNvbmRzXG4gICAgICBoYXNDYWNoZTogdHJ1ZSxcbiAgICAgIHZlcnNpb246IHRoaXMuY2FjaGVkSW5kZXgudmVyc2lvbixcbiAgICAgIHRvdGFsRWxlbWVudHM6IHRoaXMuY2FjaGVkSW5kZXguZGF0YS50b3RhbF9lbGVtZW50cyxcbiAgICAgIGlzUmVmcmVzaGluZzogdGhpcy5pc1JlZnJlc2hpbmcsXG4gICAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICBjaXJjdWl0QnJlYWtlck9wZW46IHRoaXMuaXNDaXJjdWl0QnJlYWtlck9wZW4oKVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgY2xlYXJDYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNhY2hlZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsodGhpcy5DQUNIRV9GSUxFKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBjYWNoZSBmaWxlIGRlbGV0ZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGRlbGV0ZSBjYWNoZSBmaWxlJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFdhaXQgZm9yIGFueSBvbmdvaW5nIGJhY2tncm91bmQgcmVmcmVzaCB0byBjb21wbGV0ZVxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckJhY2tncm91bmRSZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmJhY2tncm91bmRSZWZyZXNoUHJvbWlzZSkge1xuICAgICAgYXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2U7XG4gICAgfVxuICB9XG59Il19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitHubClient.d.ts","sourceRoot":"","sources":["../../src/collection/GitHubClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKhD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,gBAAgB,CAAwB;gBAEpC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAKvE;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"GitHubClient.d.ts","sourceRoot":"","sources":["../../src/collection/GitHubClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKhD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,gBAAgB,CAAwB;gBAEpC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAKvE;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,GAAG,CAAC;IAiG9E;;OAEG;IACG,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;CASrD"}
|
|
@@ -72,6 +72,10 @@ export class GitHubClient {
|
|
|
72
72
|
if (response.status === 401) {
|
|
73
73
|
throw new Error('GitHub API authentication failed. Please check your GITHUB_TOKEN.');
|
|
74
74
|
}
|
|
75
|
+
// Provide helpful error messages based on status code
|
|
76
|
+
if (response.status === 404) {
|
|
77
|
+
throw new Error(`File not found in collection. Try using search to get the correct path: search_collection_enhanced "your-search-term"`);
|
|
78
|
+
}
|
|
75
79
|
throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
|
|
76
80
|
}
|
|
77
81
|
const data = await response.json();
|
|
@@ -115,4 +119,4 @@ export class GitHubClient {
|
|
|
115
119
|
}
|
|
116
120
|
}
|
|
117
121
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbGxlY3Rpb24vR2l0SHViQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBR3hFLE1BQU0sT0FBTyxZQUFZO0lBQ2YsUUFBUSxDQUFXO0lBQ25CLGdCQUFnQixDQUF3QjtJQUVoRCxZQUFZLFFBQWtCLEVBQUUsZ0JBQXVDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsTUFBYyxTQUFTO1FBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV0RCxxQ0FBcUM7UUFDckMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFakcsSUFBSSxhQUFhLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxtQkFBbUIsdUJBQXVCLENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBRUQsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMs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UTtnQkFDeEIsZUFBZSxFQUFFLFdBQVc7Z0JBQzVCLEdBQUc7YUFDSixDQUFDO1lBRUYsa0RBQWtEO1lBQ2xELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO2dCQUMzQixZQUFZLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBRWpDLDBDQUEwQztnQkFDMUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUNoQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FDM0IsU0FBUyxDQUFDLGFBQWEsRUFDdkIsZ0NBQWdDLFdBQVcsRUFBRSxFQUM3QyxZQUFZLENBQ2IsQ0FBQztZQUVGLDZDQUE2QztZQUM1QyxRQUFnQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFFaEMsTUFBTSxRQUFRLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyw2QkFBNkI7UUFDakMsZ0ZBQWdGO1FBQ2hGLHlGQUF5RjtRQUN6RixNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLDBCQUEwQixDQUFDLENBQUM7WUFDeEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXRIdWIgQVBJIGNsaWVudCBmb3IgY29sbGVjdGlvbiBpbnRlZ3JhdGlvblxuICovXG5cbmltcG9ydCB7IE1jcEVycm9yLCBFcnJvckNvZGUgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3R5cGVzLmpzJztcbmltcG9ydCB7IEFQSUNhY2hlIH0gZnJvbSAnLi4vY2FjaGUvQVBJQ2FjaGUuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciwgVG9rZW5TY29wZXMgfSBmcm9tICcuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGNsYXNzIEdpdEh1YkNsaWVudCB7XG4gIHByaXZhdGUgYXBpQ2FjaGU6IEFQSUNhY2hlO1xuICBwcml2YXRlIHJhdGVMaW1pdFRyYWNrZXI6IE1hcDxzdHJpbmcsIG51bWJlcltdPjtcbiAgXG4gIGNvbnN0cnVjdG9yKGFwaUNhY2hlOiBBUElDYWNoZSwgcmF0ZUxpbWl0VHJhY2tlcjogTWFwPHN0cmluZywgbnVtYmVyW10+KSB7XG4gICAgdGhpcy5hcGlDYWNoZSA9IGFwaUNhY2hlO1xuICAgIHRoaXMucmF0ZUxpbWl0VHJhY2tlciA9IHJhdGVMaW1pdFRyYWNrZXI7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayByYXRlIGxpbWl0IGZvciBBUEkgY2FsbHNcbiAgICovXG4gIHByaXZhdGUgY2hlY2tSYXRlTGltaXQoa2V5OiBzdHJpbmcgPSAnZGVmYXVsdCcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpcy5yYXRlTGltaXRUcmFja2VyLmdldChrZXkpIHx8IFtdO1xuICAgIFxuICAgIC8vIFJlbW92ZSByZXF1ZXN0cyBvdXRzaWRlIHRoZSB3aW5kb3dcbiAgICBjb25zdCB2YWxpZFJlcXVlc3RzID0gcmVxdWVzdHMuZmlsdGVyKHRpbWUgPT4gbm93IC0gdGltZSA8IFNFQ1VSSVRZX0xJTUlUUy5SQVRFX0xJTUlUX1dJTkRPV19NUyk7XG4gICAgXG4gICAgaWYgKHZhbGlkUmVxdWVzdHMubGVuZ3RoID49IFNFQ1VSSVRZX0xJTUlUUy5SQVRFX0xJTUlUX1JFUVVFU1RTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJhdGUgbGltaXQgZXhjZWVkZWQuIE1heCAke1NFQ1VSSVRZX0xJTUlUUy5SQVRFX0xJTUlUX1JFUVVFU1RTfSByZXF1ZXN0cyBwZXIgbWludXRlLmApO1xuICAgIH1cbiAgICBcbiAgICB2YWxpZFJlcXVlc3RzLnB1c2gobm93KTtcbiAgICB0aGlzLnJhdGVMaW1pdFRyYWNrZXIuc2V0KGtleSwgdmFsaWRSZXF1ZXN0cyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCBkYXRhIGZyb20gR2l0SHViIEFQSSB3aXRoIGNhY2hpbmcgYW5kIHJhdGUgbGltaXRpbmdcbiAgICovXG4gIGFzeW5jIGZldGNoRnJvbUdpdEh1Yih1cmw6IHN0cmluZywgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIHJhdGUgbGltaXRcbiAgICAgIHRoaXMuY2hlY2tSYXRlTGltaXQoJ2dpdGh1Yl9hcGknKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuYXBpQ2FjaGUuZ2V0KHVybCk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFkZCBHaXRIdWIgdG9rZW4gaWYgYXZhaWxhYmxlIGZvciBoaWdoZXIgcmF0ZSBsaW1pdHNcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIFVzZSBUb2tlbk1hbmFnZXIgZm9yIHNlY3VyZSB0b2tlbiBoYW5kbGluZ1xuICAgICAgLy8gQ1JJVElDQUwgRklYICM0NzE6IE11c3QgdXNlIGFzeW5jIG1ldGhvZCB0byByZXRyaWV2ZSBPQXV0aCB0b2tlbnMgZnJvbSBzZWN1cmUgc3RvcmFnZVxuICAgICAgLy8gVGhlIE9BdXRoIGZsb3cgKHNldHVwX2dpdGh1Yl9hdXRoKSBzdG9yZXMgdG9rZW5zIGluIHNlY3VyZSBPUyBrZXljaGFpbi9jcmVkZW50aWFsIHN0b3JlXG4gICAgICAvLyB3aGljaCByZXF1aXJlcyBhc3luYyBhY2Nlc3MuIFRoZSBzeW5jIG1ldGhvZCBvbmx5IGNoZWNrcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsXG4gICAgICAvLyBtaXNzaW5nIHRva2VucyBzdG9yZWQgYnkgdGhlIE9BdXRoIGF1dGhlbnRpY2F0aW9uIGZsb3cuXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbkFzeW5jKCk7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3Rva2VufWA7XG4gICAgICB9IGVsc2UgaWYgKHJlcXVpcmVBdXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIGJ1dCBubyB2YWxpZCB0b2tlbiBhdmFpbGFibGUuIFBsZWFzZSB1c2Ugc2V0dXBfZ2l0aHViX2F1dGggb3Igc2V0IEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGZldGNoIHdpdGggdGltZW91dFxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCAxMDAwMCk7IC8vIDEwIHNlY29uZCB0aW1lb3V0XG4gICAgICBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IHRva2VuIFxuICAgICAgICAgICAgPyAnR2l0SHViIEFQSSByYXRlIGxpbWl0IGV4Y2VlZGVkIG9yIHRva2VuIGxhY2tzIHJlcXVpcmVkIHBlcm1pc3Npb25zLidcbiAgICAgICAgICAgIDogJ0dpdEh1YiBBUEkgcmF0ZSBsaW1pdCBleGNlZWRlZC4gQ29uc2lkZXIgdXNpbmcgc2V0dXBfZ2l0aHViX2F1dGggb3Igc2V0dGluZyBHSVRIVUJfVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUuJztcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViIEFQSSBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIEdJVEhVQl9UT0tFTi4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdpdEh1YiBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBcbiAgICAgIC8vIENhY2hlIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlXG4gICAgICB0aGlzLmFwaUNhY2hlLnNldCh1cmwsIGRhdGEpO1xuICAgICAgXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVXNlIFRva2VuTWFuYWdlciBmb3Igc2FmZSBlcnJvciBoYW5kbGluZ1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgY29uc3Qgc2FmZU1lc3NhZ2UgPSBUb2tlbk1hbmFnZXIuY3JlYXRlU2FmZUVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpO1xuICAgICAgXG4gICAgICBjb25zdCBlcnJvckRldGFpbHM6IGFueSA9IHtcbiAgICAgICAgb3JpZ2luYWxNZXNzYWdlOiBzYWZlTWVzc2FnZSxcbiAgICAgICAgdXJsXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBQcmVzZXJ2ZSBzdGFjayB0cmFjZSBhbmQgZXJyb3IgdHlwZSBpbmZvcm1hdGlvblxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZXJyb3JEZXRhaWxzLmVycm9yVHlwZSA9IGVycm9yLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGVycm9yRGV0YWlscy5zdGFjayA9IGVycm9yLnN0YWNrO1xuICAgICAgICBcbiAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgY29tbW9uIGVycm9yIHR5cGVzXG4gICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICBlcnJvckRldGFpbHMudGltZW91dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgbWNwRXJyb3IgPSBuZXcgTWNwRXJyb3IoXG4gICAgICAgIEVycm9yQ29kZS5JbnRlcm5hbEVycm9yLFxuICAgICAgICBgRmFpbGVkIHRvIGZldGNoIGZyb20gR2l0SHViOiAke3NhZmVNZXNzYWdlfWAsXG4gICAgICAgIGVycm9yRGV0YWlsc1xuICAgICAgKTtcbiAgICAgIFxuICAgICAgLy8gQWxzbyBwcmVzZXJ2ZSBvcmlnaW5hbCBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAobWNwRXJyb3IgYXMgYW55KS5jYXVzZSA9IGVycm9yO1xuICAgICAgXG4gICAgICB0aHJvdyBtY3BFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdG9rZW4gcGVybWlzc2lvbnMgZm9yIGNvbGxlY3Rpb24gb3BlcmF0aW9uc1xuICAgKi9cbiAgYXN5bmMgdmFsaWRhdGVDb2xsZWN0aW9uUGVybWlzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTk9URTogVXNpbmcgJ21hcmtldHBsYWNlJyBzY29wZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFRva2VuTWFuYWdlci5cbiAgICAvLyBUaGlzIGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCB0aGF0IGRvZXNuJ3QgYWZmZWN0IGZ1bmN0aW9uYWxpdHkuIChQUiAjMjgwKVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZW5zdXJlVG9rZW5QZXJtaXNzaW9ucygnbWFya2V0cGxhY2UnKTtcbiAgICBpZiAoIXZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgY29uc3Qgc2FmZU1lc3NhZ2UgPSBUb2tlbk1hbmFnZXIuY3JlYXRlU2FmZUVycm9yTWVzc2FnZSh2YWxpZGF0aW9uLmVycm9yIHx8ICdVbmtub3duIHZhbGlkYXRpb24gZXJyb3InKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgR2l0SHViIHRva2VuIHZhbGlkYXRpb24gZmFpbGVkOiAke3NhZmVNZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbGxlY3Rpb24vR2l0SHViQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBR3hFLE1BQU0sT0FBTyxZQUFZO0lBQ2YsUUFBUSxDQUFXO0lBQ25CLGdCQUFnQixDQUF3QjtJQUVoRCxZQUFZLFFBQWtCLEVBQUUsZ0JBQXVDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsTUFBYyxTQUFTO1FBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV0RCxxQ0FBcUM7UUFDckMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFakcsSUFBSSxhQUFhLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxtQkFBbUIsdUJBQXVCLENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBRUQsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQVcsRUFBRSxjQUF1QixLQUFLO1FBQzdELElBQUksQ0FBQztZQUNILG1CQUFtQjtZQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRWxDLG9CQUFvQjtZQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCx1REFBdUQ7WUFDdkQsTUFBTSxPQUFPLEdBQTJCO2dCQUN0QyxRQUFRLEVBQUUsZ0NBQWdDO2dCQUMxQyxZQUFZLEVBQUUsa0JBQWtCO2FBQ2pDLENBQUM7WUFFRiw2Q0FBNkM7WUFDN0Msd0ZBQXdGO1lBQ3hGLDBGQUEwRjtZQUMxRixrRkFBa0Y7WUFDbEYsMERBQTBEO1lBQzFELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDdkQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMscUlBQXFJLENBQUMsQ0FBQztZQUN6SixDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDekMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtZQUVuRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLE9BQU87Z0JBQ1AsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQztZQUVILFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV4QixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQUs7d0JBQ3BCLENBQUMsQ0FBQyxxRUFBcUU7d0JBQ3ZFLENBQUMsQ0FBQyxnSEFBZ0gsQ0FBQztvQkFDckgsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztnQkFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQztnQkFDdkYsQ0FBQztnQkFDRCxzREFBc0Q7Z0JBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1SEFBdUgsQ0FBQyxDQUFDO2dCQUMzSSxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDakYsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRW5DLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFN0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLDJDQUEyQztZQUMzQyxNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXRFLE1BQU0sWUFBWSxHQUFRO2dCQUN4QixlQUFlLEVBQUUsV0FBVztnQkFDNUIsR0FBRzthQUNKLENBQUM7WUFFRixrREFBa0Q7WUFDbEQsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzNCLFlBQVksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFFakMsMENBQTBDO2dCQUMxQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQ2hDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUM5QixDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUMzQixTQUFTLENBQUMsYUFBYSxFQUN2QixnQ0FBZ0MsV0FBVyxFQUFFLEVBQzdDLFlBQVksQ0FDYixDQUFDO1lBRUYsNkNBQTZDO1lBQzVDLFFBQWdCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUVoQyxNQUFNLFFBQVEsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLDZCQUE2QjtRQUNqQyxnRkFBZ0Y7UUFDaEYseUZBQXlGO1FBQ3pGLE1BQU0sVUFBVSxHQUFHLE1BQU0sWUFBWSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksMEJBQTBCLENBQUMsQ0FBQztZQUN4RyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdpdEh1YiBBUEkgY2xpZW50IGZvciBjb2xsZWN0aW9uIGludGVncmF0aW9uXG4gKi9cblxuaW1wb3J0IHsgTWNwRXJyb3IsIEVycm9yQ29kZSB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanMnO1xuaW1wb3J0IHsgQVBJQ2FjaGUgfSBmcm9tICcuLi9jYWNoZS9BUElDYWNoZS5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgVG9rZW5NYW5hZ2VyLCBUb2tlblNjb3BlcyB9IGZyb20gJy4uL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgR2l0SHViQ2xpZW50IHtcbiAgcHJpdmF0ZSBhcGlDYWNoZTogQVBJQ2FjaGU7XG4gIHByaXZhdGUgcmF0ZUxpbWl0VHJhY2tlcjogTWFwPHN0cmluZywgbnVtYmVyW10+O1xuICBcbiAgY29uc3RydWN0b3IoYXBpQ2FjaGU6IEFQSUNhY2hlLCByYXRlTGltaXRUcmFja2VyOiBNYXA8c3RyaW5nLCBudW1iZXJbXT4pIHtcbiAgICB0aGlzLmFwaUNhY2hlID0gYXBpQ2FjaGU7XG4gICAgdGhpcy5yYXRlTGltaXRUcmFja2VyID0gcmF0ZUxpbWl0VHJhY2tlcjtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIHJhdGUgbGltaXQgZm9yIEFQSSBjYWxsc1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1JhdGVMaW1pdChrZXk6IHN0cmluZyA9ICdkZWZhdWx0Jyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLnJhdGVMaW1pdFRyYWNrZXIuZ2V0KGtleSkgfHwgW107XG4gICAgXG4gICAgLy8gUmVtb3ZlIHJlcXVlc3RzIG91dHNpZGUgdGhlIHdpbmRvd1xuICAgIGNvbnN0IHZhbGlkUmVxdWVzdHMgPSByZXF1ZXN0cy5maWx0ZXIodGltZSA9PiBub3cgLSB0aW1lIDwgU0VDVVJJVFlfTElNSVRTLlJBVEVfTElNSVRfV0lORE9XX01TKTtcbiAgICBcbiAgICBpZiAodmFsaWRSZXF1ZXN0cy5sZW5ndGggPj0gU0VDVVJJVFlfTElNSVRTLlJBVEVfTElNSVRfUkVRVUVTVFMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmF0ZSBsaW1pdCBleGNlZWRlZC4gTWF4ICR7U0VDVVJJVFlfTElNSVRTLlJBVEVfTElNSVRfUkVRVUVTVFN9IHJlcXVlc3RzIHBlciBtaW51dGUuYCk7XG4gICAgfVxuICAgIFxuICAgIHZhbGlkUmVxdWVzdHMucHVzaChub3cpO1xuICAgIHRoaXMucmF0ZUxpbWl0VHJhY2tlci5zZXQoa2V5LCB2YWxpZFJlcXVlc3RzKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGRhdGEgZnJvbSBHaXRIdWIgQVBJIHdpdGggY2FjaGluZyBhbmQgcmF0ZSBsaW1pdGluZ1xuICAgKi9cbiAgYXN5bmMgZmV0Y2hGcm9tR2l0SHViKHVybDogc3RyaW5nLCByZXF1aXJlQXV0aDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgcmF0ZSBsaW1pdFxuICAgICAgdGhpcy5jaGVja1JhdGVMaW1pdCgnZ2l0aHViX2FwaScpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5hcGlDYWNoZS5nZXQodXJsKTtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWRkIEdpdEh1YiB0b2tlbiBpZiBhdmFpbGFibGUgZm9yIGhpZ2hlciByYXRlIGxpbWl0c1xuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nLFxuICAgICAgICAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AvMS4wJ1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gVXNlIFRva2VuTWFuYWdlciBmb3Igc2VjdXJlIHRva2VuIGhhbmRsaW5nXG4gICAgICAvLyBDUklUSUNBTCBGSVggIzQ3MTogTXVzdCB1c2UgYXN5bmMgbWV0aG9kIHRvIHJldHJpZXZlIE9BdXRoIHRva2VucyBmcm9tIHNlY3VyZSBzdG9yYWdlXG4gICAgICAvLyBUaGUgT0F1dGggZmxvdyAoc2V0dXBfZ2l0aHViX2F1dGgpIHN0b3JlcyB0b2tlbnMgaW4gc2VjdXJlIE9TIGtleWNoYWluL2NyZWRlbnRpYWwgc3RvcmVcbiAgICAgIC8vIHdoaWNoIHJlcXVpcmVzIGFzeW5jIGFjY2Vzcy4gVGhlIHN5bmMgbWV0aG9kIG9ubHkgY2hlY2tzIGVudmlyb25tZW50IHZhcmlhYmxlcyxcbiAgICAgIC8vIG1pc3NpbmcgdG9rZW5zIHN0b3JlZCBieSB0aGUgT0F1dGggYXV0aGVudGljYXRpb24gZmxvdy5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgICAgIH0gZWxzZSBpZiAocmVxdWlyZUF1dGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQgYnV0IG5vIHZhbGlkIHRva2VuIGF2YWlsYWJsZS4gUGxlYXNlIHVzZSBzZXR1cF9naXRodWJfYXV0aCBvciBzZXQgR0lUSFVCX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDcmVhdGUgZmV0Y2ggd2l0aCB0aW1lb3V0XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIDEwMDAwKTsgLy8gMTAgc2Vjb25kIHRpbWVvdXRcbiAgICAgIFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gdG9rZW4gXG4gICAgICAgICAgICA/ICdHaXRIdWIgQVBJIHJhdGUgbGltaXQgZXhjZWVkZWQgb3IgdG9rZW4gbGFja3MgcmVxdWlyZWQgcGVybWlzc2lvbnMuJ1xuICAgICAgICAgICAgOiAnR2l0SHViIEFQSSByYXRlIGxpbWl0IGV4Y2VlZGVkLiBDb25zaWRlciB1c2luZyBzZXR1cF9naXRodWJfYXV0aCBvciBzZXR0aW5nIEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWIgQVBJIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHlvdXIgR0lUSFVCX1RPS0VOLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByb3ZpZGUgaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBiYXNlZCBvbiBzdGF0dXMgY29kZVxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kIGluIGNvbGxlY3Rpb24uIFRyeSB1c2luZyBzZWFyY2ggdG8gZ2V0IHRoZSBjb3JyZWN0IHBhdGg6IHNlYXJjaF9jb2xsZWN0aW9uX2VuaGFuY2VkIFwieW91ci1zZWFyY2gtdGVybVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHaXRIdWIgQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgXG4gICAgICAvLyBDYWNoZSB0aGUgc3VjY2Vzc2Z1bCByZXNwb25zZVxuICAgICAgdGhpcy5hcGlDYWNoZS5zZXQodXJsLCBkYXRhKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFVzZSBUb2tlbk1hbmFnZXIgZm9yIHNhZmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGNvbnN0IHNhZmVNZXNzYWdlID0gVG9rZW5NYW5hZ2VyLmNyZWF0ZVNhZmVFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTtcbiAgICAgIFxuICAgICAgY29uc3QgZXJyb3JEZXRhaWxzOiBhbnkgPSB7XG4gICAgICAgIG9yaWdpbmFsTWVzc2FnZTogc2FmZU1lc3NhZ2UsXG4gICAgICAgIHVybFxuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gUHJlc2VydmUgc3RhY2sgdHJhY2UgYW5kIGVycm9yIHR5cGUgaW5mb3JtYXRpb25cbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGVycm9yRGV0YWlscy5lcnJvclR5cGUgPSBlcnJvci5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICBlcnJvckRldGFpbHMuc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICAgICAgXG4gICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGNvbW1vbiBlcnJvciB0eXBlc1xuICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgZXJyb3JEZXRhaWxzLnRpbWVvdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG1jcEVycm9yID0gbmV3IE1jcEVycm9yKFxuICAgICAgICBFcnJvckNvZGUuSW50ZXJuYWxFcnJvcixcbiAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBmcm9tIEdpdEh1YjogJHtzYWZlTWVzc2FnZX1gLFxuICAgICAgICBlcnJvckRldGFpbHNcbiAgICAgICk7XG4gICAgICBcbiAgICAgIC8vIEFsc28gcHJlc2VydmUgb3JpZ2luYWwgZXJyb3IgZm9yIGRlYnVnZ2luZ1xuICAgICAgKG1jcEVycm9yIGFzIGFueSkuY2F1c2UgPSBlcnJvcjtcbiAgICAgIFxuICAgICAgdGhyb3cgbWNwRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRva2VuIHBlcm1pc3Npb25zIGZvciBjb2xsZWN0aW9uIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIHZhbGlkYXRlQ29sbGVjdGlvblBlcm1pc3Npb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE5PVEU6IFVzaW5nICdtYXJrZXRwbGFjZScgc2NvcGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBUb2tlbk1hbmFnZXIuXG4gICAgLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdCBkb2Vzbid0IGFmZmVjdCBmdW5jdGlvbmFsaXR5LiAoUFIgIzI4MClcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmVuc3VyZVRva2VuUGVybWlzc2lvbnMoJ21hcmtldHBsYWNlJyk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIGNvbnN0IHNhZmVNZXNzYWdlID0gVG9rZW5NYW5hZ2VyLmNyZWF0ZVNhZmVFcnJvck1lc3NhZ2UodmFsaWRhdGlvbi5lcnJvciB8fCAnVW5rbm93biB2YWxpZGF0aW9uIGVycm9yJyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEdpdEh1YiB0b2tlbiB2YWxpZGF0aW9uIGZhaWxlZDogJHtzYWZlTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export declare const PACKAGE_VERSION = "1.
|
|
6
|
-
export declare const BUILD_TIMESTAMP = "2025-08-
|
|
5
|
+
export declare const PACKAGE_VERSION = "1.7.0";
|
|
6
|
+
export declare const BUILD_TIMESTAMP = "2025-08-31T21:07:57.726Z";
|
|
7
7
|
export declare const BUILD_TYPE: 'npm' | 'git';
|
|
8
8
|
export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
|
|
9
9
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,KAAK,GAAG,KAAa,CAAC;AAC/C,eAAO,MAAM,YAAY,6BAA6B,CAAC"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export const PACKAGE_VERSION = '1.
|
|
6
|
-
export const BUILD_TIMESTAMP = '2025-08-
|
|
5
|
+
export const PACKAGE_VERSION = '1.7.0';
|
|
6
|
+
export const BUILD_TIMESTAMP = '2025-08-31T21:07:57.726Z';
|
|
7
7
|
export const BUILD_TYPE = 'npm';
|
|
8
8
|
export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjcuMCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjUtMDgtMzFUMjE6MDc6NTcuNzI2Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
|
package/dist/index.d.ts
CHANGED
|
@@ -24,7 +24,6 @@ export declare class DollhouseMCPServer implements IToolHandler {
|
|
|
24
24
|
private serverSetup;
|
|
25
25
|
private personaExporter;
|
|
26
26
|
private personaImporter?;
|
|
27
|
-
private personaSharer;
|
|
28
27
|
private portfolioManager;
|
|
29
28
|
private migrationManager;
|
|
30
29
|
private skillManager;
|
|
@@ -353,24 +352,6 @@ export declare class DollhouseMCPServer implements IToolHandler {
|
|
|
353
352
|
text: string;
|
|
354
353
|
}[];
|
|
355
354
|
}>;
|
|
356
|
-
/**
|
|
357
|
-
* Share a persona via URL
|
|
358
|
-
*/
|
|
359
|
-
sharePersona(personaName: string, expiryDays?: number): Promise<{
|
|
360
|
-
content: {
|
|
361
|
-
type: string;
|
|
362
|
-
text: string;
|
|
363
|
-
}[];
|
|
364
|
-
}>;
|
|
365
|
-
/**
|
|
366
|
-
* Import from a shared URL
|
|
367
|
-
*/
|
|
368
|
-
importFromUrl(url: string, overwrite?: boolean): Promise<{
|
|
369
|
-
content: {
|
|
370
|
-
type: string;
|
|
371
|
-
text: string;
|
|
372
|
-
}[];
|
|
373
|
-
}>;
|
|
374
355
|
/**
|
|
375
356
|
* Portfolio management methods
|
|
376
357
|
*/
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAkBA,OAAO,EAA8D,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAgBhI,OAAO,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAkC9D,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,MAAM,CAAS;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|